@xopcai/xopc 0.0.44 → 0.0.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.
- package/README.md +138 -102
- package/README.zh-CN.md +155 -67
- package/dist/extensions/telegram/xopc.extension.json +1 -1
- package/dist/gateway/static/root/assets/{agents-DPpa_rdl.js → agents-Bk2uuFvC.js} +2 -2
- package/dist/gateway/static/root/assets/{agents-DPpa_rdl.js.map → agents-Bk2uuFvC.js.map} +1 -1
- package/dist/gateway/static/root/assets/{apps-page-DyD3FTHu.js → apps-page-CbSr8cvX.js} +2 -2
- package/dist/gateway/static/root/assets/{apps-page-DyD3FTHu.js.map → apps-page-CbSr8cvX.js.map} +1 -1
- package/dist/gateway/static/root/assets/{channels-settings-SMYa0dg9.js → channels-settings-Dn-hIRl1.js} +2 -2
- package/dist/gateway/static/root/assets/{channels-settings-SMYa0dg9.js.map → channels-settings-Dn-hIRl1.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-CwHDRLBz.js → cron-dreaming-jobs-D460WnXB.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-dreaming-jobs-CwHDRLBz.js.map → cron-dreaming-jobs-D460WnXB.js.map} +1 -1
- package/dist/gateway/static/root/assets/{cron-page-CFlueTZj.js → cron-page-Df6AyXfn.js} +2 -2
- package/dist/gateway/static/root/assets/{cron-page-CFlueTZj.js.map → cron-page-Df6AyXfn.js.map} +1 -1
- package/dist/gateway/static/root/assets/{dist-CSVG5vdr.js → dist-DN37Fw0E.js} +2 -2
- package/dist/gateway/static/root/assets/{dist-CSVG5vdr.js.map → dist-DN37Fw0E.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-debug-page-aOoL_ju3.js → extension-debug-page-CqdKfBv_.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-debug-page-aOoL_ju3.js.map → extension-debug-page-CqdKfBv_.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-page-BxTM48B9.js → extension-page-DhxjnfDf.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-page-BxTM48B9.js.map → extension-page-DhxjnfDf.js.map} +1 -1
- package/dist/gateway/static/root/assets/{extension-settings-page-OuCiHlNV.js → extension-settings-page-B3uhrA_f.js} +2 -2
- package/dist/gateway/static/root/assets/{extension-settings-page-OuCiHlNV.js.map → extension-settings-page-B3uhrA_f.js.map} +1 -1
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BLvyaYuj.js → heartbeat-config-api-z1kl5_rE.js} +2 -2
- package/dist/gateway/static/root/assets/{heartbeat-config-api-BLvyaYuj.js.map → heartbeat-config-api-z1kl5_rE.js.map} +1 -1
- package/dist/gateway/static/root/assets/{index-K0ZDwzeJ.css → index-B8G4Y9YY.css} +1 -1
- package/dist/gateway/static/root/assets/{index-AWwayu4P.js → index-BUYGk2UT.js} +93 -93
- package/dist/gateway/static/root/assets/{index-AWwayu4P.js.map → index-BUYGk2UT.js.map} +1 -1
- package/dist/gateway/static/root/assets/{logs-page-DlOmjXKS.js → logs-page-Z9KRHWeO.js} +2 -2
- package/dist/gateway/static/root/assets/{logs-page-DlOmjXKS.js.map → logs-page-Z9KRHWeO.js.map} +1 -1
- package/dist/gateway/static/root/assets/{sessions-page-BYobQq7F.js → sessions-page-TlMYZxuv.js} +2 -2
- package/dist/gateway/static/root/assets/{sessions-page-BYobQq7F.js.map → sessions-page-TlMYZxuv.js.map} +1 -1
- package/dist/gateway/static/root/assets/{settings-page-CEp0JJcg.js → settings-page-X8vVcB8e.js} +2 -2
- package/dist/gateway/static/root/assets/{settings-page-CEp0JJcg.js.map → settings-page-X8vVcB8e.js.map} +1 -1
- package/dist/gateway/static/root/assets/{skills-page-D9e20h42.js → skills-page-B-tO9-I7.js} +2 -2
- package/dist/gateway/static/root/assets/{skills-page-D9e20h42.js.map → skills-page-B-tO9-I7.js.map} +1 -1
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-BmC6x4fR.js → use-image-provider-credentials-DsYECmye.js} +2 -2
- package/dist/gateway/static/root/assets/{use-image-provider-credentials-BmC6x4fR.js.map → use-image-provider-credentials-DsYECmye.js.map} +1 -1
- package/dist/gateway/static/root/index.html +2 -2
- package/dist/package.js +1 -1
- package/package.json +1 -1
package/README.zh-CN.md
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
<h1 align="center">xopc</h1>
|
|
7
7
|
|
|
8
8
|
<p align="center">
|
|
9
|
-
<strong
|
|
10
|
-
面向<strong
|
|
9
|
+
<strong>与你共同成长的 OPC 工作站。</strong><br />
|
|
10
|
+
面向<strong>一人公司</strong>的轻量<strong>个人 AI 助手</strong> —— <strong>本地部署</strong>、<strong>密钥自备(BYOK)</strong>,靠插件扩展能力,不必改核心代码。
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
13
|
<p align="center">
|
|
14
14
|
<a href="https://github.com/xopcai/xopc"><img src="https://img.shields.io/badge/GitHub-xopcai%2Fxopc-181717?style=for-the-badge&logo=github" alt="GitHub"></a>
|
|
15
15
|
<a href="https://xopcai.github.io/xopc/zh/"><img src="https://img.shields.io/badge/Docs-中文文档-228B22?style=for-the-badge" alt="中文文档"></a>
|
|
16
|
-
<a href="#quick-start
|
|
16
|
+
<a href="#quick-start"><img src="https://img.shields.io/badge/快速开始-CLI-blue?style=for-the-badge" alt="快速开始"></a>
|
|
17
17
|
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow?style=for-the-badge" alt="License"></a>
|
|
18
18
|
</p>
|
|
19
19
|
|
|
@@ -32,86 +32,148 @@
|
|
|
32
32
|
<a href="https://xopcai.github.io/xopc/zh/cli">CLI</a>
|
|
33
33
|
</p>
|
|
34
34
|
|
|
35
|
-
**CLI
|
|
35
|
+
**xopc** 是一套可**装在自己机器上**的智能体工具链:**命令行(CLI)**、全屏**终端界面(TUI)**、带网页后台的 **HTTP/WebSocket 网关**(控制台用 **React** 编写),以及可选的 **Electron** 桌面版(**macOS / Windows / Linux**),并内置 **Telegram、微信、飞书/Lark、钉钉** 等机器人插件。模型调用基于 **[@earendil-works/pi-ai](https://github.com/earendil-works/pi-mono)**,可对接 **20+** 家厂商。通过**扩展**加工具、接新机器人、接新模型;用 **SKILL.md** 管理技能;网页端还能用 **`@xopcai/xopc/extension-ui-sdk`** 做界面扩展。
|
|
36
36
|
|
|
37
37
|
---
|
|
38
38
|
|
|
39
|
-
##
|
|
39
|
+
## 主要特性
|
|
40
40
|
|
|
41
41
|
| | |
|
|
42
42
|
| --- | --- |
|
|
43
|
-
|
|
|
44
|
-
|
|
|
45
|
-
|
|
|
46
|
-
|
|
|
47
|
-
|
|
|
48
|
-
|
|
|
49
|
-
| **工作区工具** | 读/写/搜文件、网页搜索、可选浏览器工具、长任务进度反馈。 |
|
|
43
|
+
| **数据留在身边** | 服务跑在你自己电脑上;不接入会主动访问外网的机器人或联网插件时,数据默认不出本机。也**不必**绑死某一家公有云。 |
|
|
44
|
+
| **BYOK** | API Key、OAuth 等写在配置文件(`~/.xopc/xopc.json`)和环境变量里 —— 可用 DeepSeek(推荐)、 OpenAI、Anthropic、Google、**Ollama / LM Studio / vLLM**、Bedrock、Azure、OpenRouter、各类网关等。 |
|
|
45
|
+
| **多种用法** | **`xopc tui`**(全屏终端)、**`xopc agent`**(命令行里多轮聊)、**浏览器开网关网页**、**Electron 桌面版**(同一套界面)。 |
|
|
46
|
+
| **聊天机器人** | 内置 **Telegram**、**微信**、**飞书/Lark**、**钉钉**,以及网关自带的**网页对话**;私聊、群聊可做访问控制(配对、白名单等)。 |
|
|
47
|
+
| **图片与语音** | **图片**:识图、按需生图。**语音**:语音转文字、文字转语音(如 Telegram、网关等),详见文档。 |
|
|
48
|
+
| **可扩展** | **服务端**:`ChannelPlugin`、工具、定时任务(cron)、自定义模型接入。**界面**:用 **`@xopcai/xopc/extension-ui-sdk`** 扩展网关网页。 |
|
|
50
49
|
|
|
51
50
|
---
|
|
52
51
|
|
|
53
|
-
|
|
52
|
+
<a id="install"></a>
|
|
54
53
|
|
|
55
|
-
|
|
54
|
+
## 安装
|
|
55
|
+
|
|
56
|
+
**环境:** Node.js **≥ 22**(跑 CLI、起网关都需要)。在本仓库里开发时建议用 **pnpm**。
|
|
56
57
|
|
|
57
58
|
```bash
|
|
58
59
|
npm install -g @xopcai/xopc
|
|
59
60
|
# 或: pnpm add -g @xopcai/xopc
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
**装好后,**建议先跑一遍配置向导,把模型、密钥、机器人等一次配齐。
|
|
63
64
|
|
|
64
65
|
```bash
|
|
65
66
|
xopc onboard
|
|
66
|
-
#
|
|
67
|
+
# 只想快速选模型: xopc onboard --quick
|
|
67
68
|
```
|
|
68
69
|
|
|
69
|
-
然后在终端聊天,或启动网关以使用网页控制台与 IM 机器人。
|
|
70
|
-
|
|
71
70
|
---
|
|
72
71
|
|
|
73
|
-
<a id="quick-start
|
|
72
|
+
<a id="quick-start"></a>
|
|
74
73
|
|
|
75
|
-
##
|
|
74
|
+
## 快速上手
|
|
76
75
|
|
|
77
76
|
```bash
|
|
78
|
-
#
|
|
77
|
+
# 全屏终端:对话在本地跑,不必先起网关
|
|
78
|
+
xopc tui --local
|
|
79
|
+
|
|
80
|
+
# 命令行里多轮对话
|
|
79
81
|
xopc agent -i
|
|
80
82
|
|
|
81
|
-
#
|
|
83
|
+
# 只问一句
|
|
82
84
|
xopc agent -m "总结最近 5 条提交"
|
|
83
85
|
|
|
84
|
-
#
|
|
86
|
+
# 网关:REST/SSE + 内置网页控制台(地址看终端输出或配置里的 gateway)
|
|
85
87
|
xopc gateway
|
|
86
88
|
|
|
87
|
-
#
|
|
88
|
-
|
|
89
|
+
# 同一套网关,后台常驻(会打印 PID 和地址;停服:xopc gateway stop)
|
|
90
|
+
xopc gateway --background
|
|
89
91
|
```
|
|
90
92
|
|
|
91
|
-
|
|
93
|
+
**从源码开发:**
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
git clone https://github.com/xopcai/xopc.git && cd xopc
|
|
97
|
+
pnpm install && pnpm run dev -- agent -i # 开发阶段不必先 build
|
|
98
|
+
pnpm run build # 构建发布:Node + 网页 → dist/
|
|
99
|
+
```
|
|
92
100
|
|
|
93
101
|
---
|
|
94
102
|
|
|
95
|
-
|
|
103
|
+
<a id="electron-desktop"></a>
|
|
96
104
|
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
| 打开网页控制台 | 运行 `xopc gateway`,按日志或配置访问 |
|
|
101
|
-
| 使用 Telegram / 微信 | 在 `~/.xopc/xopc.json` 配置 `channels.telegram` / `channels.weixin` 并运行网关;微信可在网关主机执行 `xopc channels login --channel weixin` 扫码登录 |
|
|
102
|
-
| 引导配置 | `xopc onboard` |
|
|
103
|
-
| 定时任务 | 在配置中启用 `cron`;详见[文档](https://xopcai.github.io/xopc/zh/) |
|
|
105
|
+
## Electron 桌面版
|
|
106
|
+
|
|
107
|
+
### 从 GitHub Releases 下载
|
|
104
108
|
|
|
105
|
-
|
|
109
|
+
1. 打开 **[GitHub Releases](https://github.com/xopcai/xopc/releases)**。
|
|
110
|
+
2. 在最新版本里选本机系统对应的安装包(常见:**macOS** 用 `.dmg` / `.zip`,**Windows** 用 `.exe`,**Linux** 用 `.AppImage` / `.deb`)。
|
|
111
|
+
3. 像平时装软件一样安装或运行。macOS 若用语音相关功能,首次可能会要**麦克风**权限。
|
|
112
|
+
|
|
113
|
+
暂时没有适合你系统的安装包时,可先按上文 **[安装](#安装)** 装命令行版,再用 **`xopc gateway`**;需要桌面安装包可自行 **[从源码打包](#electron-desktop)**。
|
|
114
|
+
|
|
115
|
+
### 从源码打包
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
pnpm install
|
|
119
|
+
pnpm run electron:build # 输出在 dist/release/
|
|
120
|
+
```
|
|
106
121
|
|
|
107
122
|
---
|
|
108
123
|
|
|
109
|
-
##
|
|
124
|
+
## 怎么用?
|
|
125
|
+
|
|
126
|
+
| 方式 | 怎么用 | 适合谁 |
|
|
127
|
+
| --- | --- | --- |
|
|
128
|
+
| **TUI** | `xopc tui`、`xopc tui --local` 或 `xopc tui --url …` | 喜欢全屏终端,或要连远程网关 |
|
|
129
|
+
| **CLI** | `xopc agent -i` / `xopc agent -m "…"` | 写脚本、只要一个普通终端 |
|
|
130
|
+
| **网页** | 先 `xopc gateway`(前台)或 `xopc gateway --background`(后台),浏览器打开控制台地址 | 多人共用一台网关、习惯浏览器、要改各项设置 |
|
|
131
|
+
| **Electron** | **[Releases 下载安装包](#electron-desktop)** 或本地打包 | 要系统原生窗口(macOS / Windows / Linux) |
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 内置频道(怎么配)
|
|
136
|
+
|
|
137
|
+
在 **`~/.xopc/xopc.json`** 里写 **`channels.*`**(配置文件路径可用环境变量 `XOPC_CONFIG` / `XOPC_CONFIG_PATH` 改掉)。各聊天机器人都要**先启动网关**;微信要在**跑网关的那台电脑**上扫码。
|
|
138
|
+
|
|
139
|
+
| 频道 | 对应配置 | 说明 |
|
|
140
|
+
| --- | --- | --- |
|
|
141
|
+
| **Telegram** | `channels.telegram` | 多账号、流式回复、语音、文件;私聊/群聊策略 |
|
|
142
|
+
| **微信** | `channels.weixin` | 在装网关的机器上扫码;私聊/群聊策略 |
|
|
143
|
+
| **飞书 / Lark** | `channels.feishu` | 机器人、Webhook 等,见文档 |
|
|
144
|
+
| **钉钉** | `channels.dingtalk` | Stream 模式;应用凭证见文档 |
|
|
145
|
+
| **网页** | *(随网关)* | 网关网页里的对话,不是单独再装一个 IM |
|
|
146
|
+
|
|
147
|
+
字段说明与安全默认值:**[频道](https://xopcai.github.io/xopc/zh/channels)**、**[配置](https://xopcai.github.io/xopc/zh/configuration)**。
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
## 本地部署与 BYOK
|
|
152
|
+
|
|
153
|
+
- **密钥自己管:** 配置里写 `providers.*`,再配合各厂商环境变量(见 **[模型](https://xopcai.github.io/xopc/zh/models)**)。
|
|
154
|
+
- **纯本地推理:** 把默认模型指到 **Ollama**、**LM Studio**、**vLLM** 等兼容 OpenAI 接口的本地服务,可以不接公网大模型。
|
|
155
|
+
- **可选工具**(如浏览器自动化)默认**关闭**,要用再在配置里打开,并按需安装 Playwright Chromium 等。
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 常用操作速查
|
|
160
|
+
|
|
161
|
+
| 想做什么 | 怎么做 |
|
|
162
|
+
| --- | --- |
|
|
163
|
+
| 在终端里聊 | `xopc tui --local` 或 `xopc agent -i` |
|
|
164
|
+
| 打开网页控制台 | `xopc gateway`,按终端或配置里的地址打开 |
|
|
165
|
+
| 网关放后台跑 | `xopc gateway --background`;可查 `xopc gateway status`、停 `xopc gateway stop`、重启 `xopc gateway restart`、看日志 `xopc gateway logs` |
|
|
166
|
+
| 接 Telegram / 微信 / 飞书 / 钉钉 | 配好 `channels.*` 并启动网关;微信:`xopc channels login --channel weixin` |
|
|
167
|
+
| 再跑一遍配置向导 | `xopc onboard` |
|
|
168
|
+
| 定时任务 | 在配置里启用 `cron` |
|
|
169
|
+
|
|
170
|
+
更多子命令见 **[CLI 参考](https://xopcai.github.io/xopc/zh/cli)**。
|
|
171
|
+
|
|
172
|
+
---
|
|
110
173
|
|
|
111
|
-
|
|
174
|
+
## 安全
|
|
112
175
|
|
|
113
|
-
|
|
114
|
-
- 网关令牌与监听地址:把网关当作管理面 API,注意绑定范围与保密。
|
|
176
|
+
从微信、Telegram 等渠道进来的消息都当作**不可信内容**。没摸清风险前,私聊建议用 **pairing(配对)** 或 **allowlist(白名单)**。网关监听地址、访问令牌(token)不要泄露 —— 详见 **[频道](https://xopcai.github.io/xopc/zh/channels)**。
|
|
115
177
|
|
|
116
178
|
---
|
|
117
179
|
|
|
@@ -119,48 +181,40 @@ pnpm install && pnpm run dev -- agent -i
|
|
|
119
181
|
|
|
120
182
|
| 指南 | 说明 |
|
|
121
183
|
| --- | --- |
|
|
122
|
-
| [快速开始](https://xopcai.github.io/xopc/zh/getting-started) |
|
|
123
|
-
| [配置](https://xopcai.github.io/xopc/zh/configuration) | `
|
|
184
|
+
| [快速开始](https://xopcai.github.io/xopc/zh/getting-started) | 安装、向导、第一次对话 |
|
|
185
|
+
| [配置](https://xopcai.github.io/xopc/zh/configuration) | `xopc.json` 字段说明 |
|
|
124
186
|
| [CLI](https://xopcai.github.io/xopc/zh/cli) | 命令与参数 |
|
|
125
|
-
| [频道](https://xopcai.github.io/xopc/zh/channels) |
|
|
126
|
-
| [扩展](https://xopcai.github.io/xopc/zh/extensions) |
|
|
187
|
+
| [频道](https://xopcai.github.io/xopc/zh/channels) | 各内置频道 |
|
|
188
|
+
| [扩展](https://xopcai.github.io/xopc/zh/extensions) | 扩展机制 |
|
|
127
189
|
| [工具](https://xopcai.github.io/xopc/zh/tools) | 内置工具 |
|
|
128
|
-
| [技能](https://xopcai.github.io/xopc/zh/skills) |
|
|
129
|
-
| [
|
|
190
|
+
| [技能](https://xopcai.github.io/xopc/zh/skills) | SKILL.md |
|
|
191
|
+
| [语音](https://xopcai.github.io/xopc/zh/voice) | 语音转文字、文字转语音 |
|
|
192
|
+
| [架构](https://xopcai.github.io/xopc/zh/architecture) | 整体结构 |
|
|
130
193
|
|
|
131
194
|
---
|
|
132
195
|
|
|
133
|
-
##
|
|
196
|
+
## 大模型厂商
|
|
134
197
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
| 频道 | 说明 |
|
|
138
|
-
| --- | --- |
|
|
139
|
-
| Telegram | 多账号、流式预览、语音(STT/TTS)、文件、白名单 / 群策略 |
|
|
140
|
-
| 微信(Weixin) | 在运行网关的机器上扫码登录、私聊/群策略、`channels.weixin` |
|
|
141
|
-
| 网页 | 网关自带的 React 控制台,通过浏览器使用 |
|
|
142
|
-
|
|
143
|
-
**不包含**飞书/Lark、Slack、Discord 等;若需支持,请自行开发并注册 `ChannelPlugin` 扩展。
|
|
198
|
+
**DeepSeek**(推荐)、OpenAI、Anthropic、Google、Groq、OpenRouter、Mistral、xAI、Bedrock、Azure、Vertex、Vercel AI Gateway、OAuth(如 Copilot/Codex)以及本地推理(由 pi-ai 统一接入)。详情:**[模型](https://xopcai.github.io/xopc/zh/models)**。
|
|
144
199
|
|
|
145
200
|
---
|
|
146
201
|
|
|
147
|
-
##
|
|
202
|
+
## 扩展与技能
|
|
148
203
|
|
|
149
204
|
```bash
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
pnpm run build # Node + 网页控制台 → dist
|
|
155
|
-
pnpm test
|
|
156
|
-
pnpm run lint
|
|
205
|
+
xopc extension install xopc-extension-weather
|
|
206
|
+
xopc extension create my-extension --kind tool
|
|
207
|
+
xopc skills list
|
|
208
|
+
xopc skills install <名称>
|
|
157
209
|
```
|
|
158
210
|
|
|
211
|
+
扩展里可以带**工具**、**新聊天频道**、**自定义模型**;要改网关网页界面用 **`@xopcai/xopc/extension-ui-sdk`**(代码在 `packages/extension-ui-sdk/`)。详见 **[扩展](https://xopcai.github.io/xopc/zh/extensions)**、**[技能](https://xopcai.github.io/xopc/zh/skills)**。
|
|
212
|
+
|
|
159
213
|
---
|
|
160
214
|
|
|
161
215
|
## 配置示例
|
|
162
216
|
|
|
163
|
-
默认配置文件:**`~/.xopc/xopc.json
|
|
217
|
+
默认配置文件:**`~/.xopc/xopc.json`**。
|
|
164
218
|
|
|
165
219
|
```json
|
|
166
220
|
{
|
|
@@ -186,14 +240,48 @@ pnpm run lint
|
|
|
186
240
|
}
|
|
187
241
|
```
|
|
188
242
|
|
|
189
|
-
|
|
243
|
+
要用微信、飞书、钉钉,再补上 **`channels.weixin`**、**`channels.feishu`**、**`channels.dingtalk`** —— 完整字段见 **[配置](https://xopcai.github.io/xopc/zh/configuration)** 与 **[频道](https://xopcai.github.io/xopc/zh/channels)**。
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
## 代码目录结构
|
|
248
|
+
|
|
249
|
+
```
|
|
250
|
+
src/
|
|
251
|
+
├── agent/ # 智能体服务、工具、记忆、提示词
|
|
252
|
+
├── channels/ # 频道插件框架
|
|
253
|
+
├── cli/ # 命令行入口与各子命令
|
|
254
|
+
├── config/ # 配置 schema 与加载
|
|
255
|
+
├── cron/ # 定时任务
|
|
256
|
+
├── gateway/ # HTTP/WebSocket 服务
|
|
257
|
+
├── providers/ # 模型注册
|
|
258
|
+
├── session/ # 会话
|
|
259
|
+
├── tui/ # 终端 UI(pi-tui)
|
|
260
|
+
└── …
|
|
261
|
+
web/ # 网关控制台(React + Vite)
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
参与贡献请先读:**[AGENTS.md](./AGENTS.md)**。
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
## 开发
|
|
269
|
+
|
|
270
|
+
```bash
|
|
271
|
+
pnpm install
|
|
272
|
+
pnpm run dev # 用 tsx 跑 CLI
|
|
273
|
+
pnpm run build # 构建 Node + 网页 → dist
|
|
274
|
+
pnpm test
|
|
275
|
+
pnpm run lint
|
|
276
|
+
```
|
|
190
277
|
|
|
191
278
|
---
|
|
192
279
|
|
|
193
280
|
## 致谢
|
|
194
281
|
|
|
195
|
-
-
|
|
196
|
-
-
|
|
282
|
+
- 大模型接入层:[@earendil-works/pi-ai](https://github.com/earendil-works/pi-mono)
|
|
283
|
+
- 智能体运行时:[@earendil-works/pi-agent-core](https://github.com/earendil-works/pi-mono)
|
|
284
|
+
- 灵感来自 [openclaw/openclaw](https://github.com/openclaw/openclaw) 与 [NousResearch/hermes-agent](https://github.com/NousResearch/hermes-agent)
|
|
197
285
|
|
|
198
286
|
---
|
|
199
287
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"id": "telegram",
|
|
3
3
|
"name": "Telegram Channel",
|
|
4
4
|
"description": "Bundled Telegram Bot channel (private workspace sources; ships inside @xopcai/xopc dist/)",
|
|
5
|
-
"version": "0.0.
|
|
5
|
+
"version": "0.0.45",
|
|
6
6
|
"kind": "channel",
|
|
7
7
|
"main": "src/index.ts",
|
|
8
8
|
"channels": ["telegram"],
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{$n as i,A as a,An as o,Ar as s,At as c,C as l,Cn as u,Cr as d,D as f,Di as p,Dn as m,Dt as h,E as g,F as _,Gn as v,Hn as y,I as b,In as x,Ir as S,It as C,Jr as w,Kn as T,Kr as ee,Ln as E,Lt as D,M as O,Mn as k,Mt as te,N as A,Nt as j,O as M,Oi as ne,Ot as re,P as N,Q as ie,Rn as ae,Rr as oe,Rt as P,S as se,Si as ce,Sn as le,St as ue,T as de,Un as F,Ur as fe,Vn as pe,Vr as me,Wn as I,X as he,Xn as ge,Z as _e,Zn as ve,_ as ye,_n as be,at as xe,b as Se,bn as L,br as Ce,cr as R,ct as we,dn as z,dr as Te,ei as B,er as V,fr as Ee,gi as De,gn as H,ii as Oe,it as ke,j as Ae,jn as je,jr as Me,jt as Ne,k as Pe,ki as Fe,kn as Ie,kt as Le,lt as Re,m as ze,mr as Be,ni as Ve,nt as He,or as Ue,ot as We,pr as Ge,ri as Ke,rt as qe,si as U,sr as W,st as G,tt as K,v as Je,vi as Ye,vn as Xe,vr as Ze,w as Qe,wi as $e,x as et,xt as tt,y as nt,zn as rt,zt as it}from"./index-AWwayu4P.js";import{a as at,b as ot,d as st,h as ct,r as lt,t as ut,u as dt}from"./cron-dreaming-jobs-CwHDRLBz.js";var q=n();function ft({open:e,onOpenChange:t,busy:n,deletePurge:r,deleteTarget:i,deleteConfirmText:a,onDeleteConfirmTextChange:o,onConfirm:s,onCancel:l,a:u}){return(0,q.jsx)(te,{open:e,onOpenChange:t,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:`fixed inset-0 z-[80] bg-scrim backdrop-blur-[2px]`}),(0,q.jsxs)(re,{className:x(`fixed left-1/2 top-1/2 z-[81] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover`,`dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsx)(j,{className:`text-base font-semibold text-fg`,children:r?u.purgeDisk:u.removeFromConfig}),(0,q.jsx)(Le,{className:`mt-2 whitespace-pre-wrap text-sm leading-relaxed text-fg-muted`,children:r?u.confirmDeletePurge:u.confirmDelete}),r&&i?(0,q.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,q.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-fg`,htmlFor:`agent-delete-confirm`,children:u.purgeConfirmLabel}),(0,q.jsx)(`input`,{id:`agent-delete-confirm`,type:`text`,autoComplete:`off`,spellCheck:!1,className:x(`w-full rounded-md border border-edge bg-surface-panel px-3 py-1.5 font-mono text-xs text-fg`,`placeholder:text-fg-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`dark:border-edge`),placeholder:u.purgeConfirmPlaceholder.replace(`{{agentId}}`,i.id),value:a,onChange:e=>o(e.target.value)}),(0,q.jsx)(`p`,{className:`pt-0.5 text-xs text-fg-muted`,children:u.purgeConfirmHint.replace(`{{agentId}}`,i.id)})]}):null,(0,q.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center justify-end gap-2 border-t border-edge-subtle/60 pt-3`,children:[(0,q.jsx)(k,{type:`button`,variant:`ghost`,disabled:n,onClick:l,children:u.createModalCancel}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:r?`border-red-200 text-red-700 hover:bg-red-50 dark:border-red-900/60 dark:text-red-300 dark:hover:bg-red-950/40`:void 0,disabled:n||!i||r&&a.trim().toLowerCase()!==i.id.toLowerCase(),onClick:s,children:r?u.purgeDisk:u.removeFromConfig})]})]})]})})}var pt=[{id:`overview`,labelKey:`navIdentity`,icon:pe},{id:`profile`,labelKey:`navProfile`,icon:U},{id:`tools`,labelKey:`navTools`,icon:rt},{id:`skills`,labelKey:`navSkills`,icon:Ee},{id:`files`,labelKey:`navCoreFiles`,icon:ee}],mt=[{id:`channels`,labelKey:`tabChannels`,icon:Be},{id:`cron`,labelKey:`tabCron`,icon:Oe}];function ht(e){let{a:t,panel:n,onPanelChange:r}=e,i=(e,t,i)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),className:x(`flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm font-medium transition-colors`,n===e?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),children:[(0,q.jsx)(i,{className:`size-4 shrink-0 opacity-90`,strokeWidth:2,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]},e);return(0,q.jsxs)(`nav`,{className:`flex w-full flex-col gap-1`,"aria-label":t.editorNavAria,children:[(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:pt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))}),(0,q.jsx)(`p`,{className:`mt-4 px-3 text-[10px] font-semibold uppercase tracking-wide text-fg-subtle`,children:t.navAdvanced}),(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:mt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))})]})}function gt(e){let{open:t,onOpenChange:n,a:r,title:i,subtitle:a,panel:o,onPanelChange:s,onFooterSave:l,footerSaveDisabled:u,footerSavedFlash:d,busy:f,children:p}=e;return(0,q.jsx)(te,{open:t,onOpenChange:n,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:x(`xopc-dialog-overlay fixed inset-0 bg-scrim`,Je)}),(0,q.jsxs)(re,{className:x(`xopc-dialog-content fixed flex flex-col overflow-hidden rounded-xl border border-edge bg-surface-panel shadow-popover dark:border-edge`,ye,`inset-4 h-[calc(100dvh-2rem)] max-h-[calc(100dvh-2rem)] min-h-0`,`sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-[min(88vh,48rem)] sm:max-h-[min(88vh,48rem)] sm:min-h-[32rem] sm:w-[min(100%-2rem,58rem)] sm:-translate-x-1/2 sm:-translate-y-1/2`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-2 border-b border-edge-subtle px-4 pb-3 pt-4 dark:border-edge`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,q.jsx)(j,{className:`text-base font-semibold leading-snug text-fg`,children:i}),(0,q.jsx)(Le,{className:`mt-1 font-mono text-xs text-fg-muted`,children:a})]}),(0,q.jsx)(h,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":r.closeDialogAria,children:(0,q.jsx)(ae,{className:`size-4`,"aria-hidden":!0})})})]}),(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col sm:flex-row sm:overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`shrink-0 border-b border-edge-subtle px-4 py-3 dark:border-edge sm:flex sm:w-56 sm:shrink-0 sm:flex-col sm:overflow-y-auto sm:border-b-0 sm:border-r sm:px-0 sm:py-4 sm:pl-4 sm:pr-3`,children:(0,q.jsx)(ht,{a:r,panel:o,onPanelChange:s})}),(0,q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-4 sm:pl-2 sm:pr-5`,children:p}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-1 border-t border-edge-subtle px-4 py-3 dark:border-edge sm:flex-row sm:items-center sm:justify-end sm:gap-3`,children:[d?(0,q.jsxs)(`p`,{className:`order-2 text-center text-xs font-medium text-green-600 sm:order-1 sm:mr-auto sm:text-left dark:text-green-400`,children:[`✓ `,r.personaSaved]}):u?(0,q.jsx)(`p`,{className:`order-2 text-center text-xs text-fg-muted sm:order-1 sm:mr-auto sm:text-left`,children:r.footerSaveNotApplicable}):null,(0,q.jsx)(k,{type:`button`,className:`order-1 w-full sm:order-2 sm:w-auto`,disabled:f||u,onClick:()=>void l(),children:r.save})]})]})]})]})]})})}function _t(){return`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`}function J({children:e,className:t}){return(0,q.jsx)(`section`,{className:x(_t(),t),children:e})}var vt=`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted transition-colors dark:bg-surface-hover/70`;function Y({icon:e,title:t,subtitle:n,trailing:r,className:i,iconInteractive:a,iconLeading:o}){let s=o??(0,q.jsx)(e,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),c=o?x(`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel p-0 ring-1 ring-inset ring-edge-subtle transition-[box-shadow] hover:ring-accent/40 dark:ring-edge-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`):x(vt,`hover:text-fg`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`),l=!!(a&&o);return(0,q.jsxs)(`div`,{className:x(`mb-5 flex items-start gap-3`,i),children:[a?l?(0,q.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}),(0,q.jsx)(`span`,{className:`pointer-events-none absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-md border border-edge bg-surface-panel text-fg-muted shadow-sm dark:border-edge dark:bg-surface-base`,"aria-hidden":!0,children:(0,q.jsx)(Ze,{className:`size-2.5`,strokeWidth:2.25})})]}):(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}):(0,q.jsx)(`div`,{className:x(o?`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel ring-1 ring-inset ring-edge-subtle dark:ring-edge-subtle`:vt),"aria-hidden":!o,children:s}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n})]}),r?(0,q.jsx)(`div`,{className:`shrink-0`,children:r}):null]})}function X(){return x(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,o,`dark:border-edge`)}function yt(e,t,n){let r=e.agentId?.trim().toLowerCase();return r?r===t.toLowerCase():t.toLowerCase()===n.toLowerCase()}function bt(e){return[e.channel,e.accountId,e.peerKind,e.peerId].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||e.channel}function xt(e,t,n,r){let i=e.trim(),a=t.trim();if(a)return{channel:i,peerId:a};if(n!=null){let e=r[n];if(!e)return{channel:i};let t={channel:i};e.accountId?.trim()&&(t.accountId=e.accountId.trim()),e.peerKind?.trim()&&(t.peerKind=e.peerKind.trim());let a=e.peerId?.trim()||e.chatId?.trim();return a&&(t.peerId=a),t}return{channel:i}}var St=x(Ie,`w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0`);function Ct(e){let{a:t,busy:n,bindingsLoading:r,agentBindings:i,onRemoveBinding:a,onAddBinding:o,channelStatuses:c,channelsStatusLoading:l,useManualChannel:u,newBindChannel:d,setNewBindChannel:f,bindSessionChats:p,sessionsLoading:m,newBindSessionIdx:h,setNewBindSessionIdx:g,newBindCustomPeer:_,setNewBindCustomPeer:v,onRefreshSessions:y,lastActiveLabels:b,selectRecipient:S}=e,C=!l&&(u||c.length>0);return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:s,title:t.channelsTitle,subtitle:t.channelsHint}),r?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoading}):i.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsNone}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-2 text-sm`,children:i.map((e,r)=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-lg border border-edge bg-surface-panel px-3 py-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-xs`,children:bt(e.match)}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:n,onClick:()=>void a(e),children:t.removeBinding})]},`${e.match.channel}-${r}`))}),(0,q.jsxs)(`form`,{className:`mt-4 flex flex-col gap-3`,onSubmit:o,children:[l?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoadingChannels}):u?(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`input`,{className:X(),value:d,onChange:e=>f(e.target.value),placeholder:`telegram`,autoComplete:`off`}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsManualChannelHint})]}):(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`select`,{className:x(X(),`py-2`),value:d,onChange:e=>{f(e.target.value),g(null),v(``)},children:c.map(e=>(0,q.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:t.channelsDisabledSuffix]},e.name))})]}),C&&d.trim()?(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 border-t border-edge-subtle pt-3 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsSessionLabel}),(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,disabled:n||m||!d.trim(),title:t.channelsRefreshSessionsHint,onClick:()=>y(),children:[(0,q.jsx)(Te,{className:x(`size-3.5`,m&&`animate-spin`),strokeWidth:1.75}),t.channelsRefreshSessions]})]}),m&&p.length===0?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsLoadingSessions}):null,(0,q.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsPeerFromSessions}),(0,q.jsxs)(`select`,{className:x(X(),`py-2`),value:h==null?``:String(h),disabled:n||!d.trim()||!!_.trim(),onChange:e=>{let t=e.target.value;g(t===``?null:Number(t))},children:[(0,q.jsx)(`option`,{value:``,children:t.channelsPeerAny}),p.map((e,t)=>(0,q.jsx)(`option`,{value:String(t),children:ot(e,b)},`${e.channel}-${e.chatId}-${t}`))]})]}),p.length===0&&d.trim()&&!m?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsNoSessionsHint}):null,(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.peerIdLabel}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2`,children:[(0,q.jsx)(`input`,{type:`text`,className:x(X(),`min-w-0 w-full sm:flex-1`),value:_,onChange:e=>{v(e.target.value),e.target.value.trim()&&g(null)},placeholder:t.channelsCustomPeerPlaceholder,autoComplete:`off`}),(0,q.jsxs)(`select`,{className:St,value:_,onChange:e=>{let t=e.target.value;v(t||``),g(null)},children:[(0,q.jsx)(`option`,{value:``,children:S}),p.map(e=>(0,q.jsx)(`option`,{value:e.chatId,children:ot(e,b)},`${e.channel}-${e.chatId}`))]})]}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsCustomPeerHint})]})]}):null,(0,q.jsx)(`div`,{children:(0,q.jsx)(k,{type:`submit`,disabled:n||!d.trim()||l,children:t.addBinding})})]})]})}function wt(e){let{a:t,data:n,busy:r,cronLoading:i,agentCronJobs:a,onSetCronJobAgent:o}=e;return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:ce,title:t.cronTitle,subtitle:t.cronHint}),i?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronLoading}):a.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronNone}):(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b border-edge text-fg-muted`,children:[(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSchedule}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColMessage}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSession}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColAgent})]})}),(0,q.jsx)(`tbody`,{children:a.map(e=>{let i=!e.agentId?.trim(),a=i?``:e.agentId.trim().toLowerCase();return(0,q.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,q.jsx)(`td`,{className:`py-2 pr-3 font-mono text-xs`,children:e.schedule}),(0,q.jsx)(`td`,{className:`max-w-[12rem] truncate py-2 pr-3 text-xs`,title:lt(e),children:lt(e)}),(0,q.jsx)(`td`,{className:`py-2 pr-3 text-xs`,children:e.sessionTarget??`main`}),(0,q.jsx)(`td`,{className:`py-2 pr-3`,children:(0,q.jsxs)(`select`,{className:x(X(),`min-w-[8rem] py-1 text-xs`),value:a,disabled:r||e.sessionTarget!==`isolated`,onChange:t=>void o(e,t.target.value),children:[(0,q.jsx)(`option`,{value:``,children:i?t.cronAgentDefault:t.cronAgentClear}),n.agents.map(e=>(0,q.jsx)(`option`,{value:e.id,children:e.id},e.id))]})})]},e.id)})})]})})]})}function Tt(e){let{a:t,filesLoading:n,files:r,activeFile:i,setActiveFile:a,bootstrapViewMode:o,setBootstrapViewMode:s,fileDraft:c,setFileDraft:l,fileSaving:u,bootstrapFileLoading:d,bootstrapEditorNonce:f}=e,p=le(e=>e.resolved===`dark`);return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden`,children:[(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesHint}),n?(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesLoading}):r?(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-3 overflow-hidden`,children:[(0,q.jsx)(`nav`,{className:`flex shrink-0 flex-row flex-wrap gap-x-0.5 gap-y-0 border-b border-edge-subtle`,"aria-label":t.tabFiles,children:r.files.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:x(`-mb-px shrink-0 border-b-2 border-transparent px-3 py-2 text-left font-mono text-xs whitespace-nowrap transition-colors`,i===e.name?`border-accent text-fg`:`text-fg-muted hover:border-edge-subtle hover:text-fg`,e.missing&&`opacity-60`),onClick:()=>a(e.name),children:[e.name,e.missing?` (${t.missing})`:``]},e.name))}),(0,q.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-hidden`,children:i?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`inline-flex rounded-lg border border-edge bg-surface-panel p-0.5`,role:`group`,"aria-label":t.filesBootstrapEdit,children:[(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`edit`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`edit`),children:[(0,q.jsx)(ge,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapEdit]}),(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`preview`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`preview`),children:[(0,q.jsx)(w,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapPreview]})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[u?(0,q.jsx)(`span`,{children:t.filesSavingStatus}):null,(0,q.jsx)(`span`,{children:t.filesAutoSaveHint})]})]}),o===`edit`?(0,q.jsx)(`div`,{className:x(X(),`flex min-h-0 flex-1 flex-col overflow-hidden p-0`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(_e,{initialContent:c,onChange:l,isDark:p,className:`min-h-0 flex-1`},`${i??`file`}-${f}`)}):(0,q.jsx)(`div`,{className:x(X(),`min-h-0 flex-1 overflow-y-auto text-sm`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(he,{content:c,className:`text-sm`})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.pickFile})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesEmpty})]})}var Z=e(t(),1);function Et(e,t){switch(e){case`adventurer`:return t.avatarStyleAdventurer;case`bottts`:return t.avatarStyleRobot;case`lorelei`:return t.avatarStyleLorelei;case`thumbs`:return t.avatarStyleThumbs;case`fun-emoji`:return t.avatarStyleFunEmoji;default:return e}}function Dt(e){let{agentId:t,value:n,onChange:r,a:i,id:a}=e,o=(0,Z.useRef)(null),[s,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(null),[d,f]=(0,Z.useState)(!1),p=(0,Z.useMemo)(()=>{let e=Re(n.trim());return e&&we(e.styleId)?e.styleId:ke[0]??`adventurer`},[n]),m=(0,Z.useCallback)(async(e,n)=>{try{await g(t)}catch{}r(We(e,n)),f(!1)},[t,r]),h=(0,Z.useCallback)(async e=>{let n=e.target.files?.[0];if(e.target.value=``,n){u(null),c(!0);try{await b(t,n),r(xe)}catch(e){let t=e instanceof Error?e.message:``;u(t===`avatar_too_large`?i.avatarTooLarge:t===`unsupported_image_type`||t===`empty_file`?i.avatarInvalidImage:i.avatarUploadFailed)}finally{c(!1)}}},[i,t,r]),_=(e,t)=>{let r=Re(n.trim());return!!(r&&r.styleId===e&&r.seed===t)};return(0,q.jsxs)(`div`,{...a?{id:a}:{},className:`flex flex-col gap-3 sm:col-span-2`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:i.avatarPickerTitle}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{ref:o,type:`file`,accept:`image/png,image/jpeg,image/webp,.png,.jpg,.jpeg,.webp`,className:`hidden`,onChange:e=>void h(e)}),(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1.5 px-2.5 py-1.5 text-xs`,disabled:s,onClick:()=>o.current?.click(),children:[(0,q.jsx)(F,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),s?i.avatarUploading:i.avatarUploadCustom]})]})]}),l?(0,q.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:l}):null,(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:ke.map(e=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>void m(e,qe[0]??t),className:x(`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,p===e?`border-fg bg-fg text-surface-base`:`border-edge-subtle bg-surface-panel text-fg hover:border-edge`),children:Et(e,i)},e))}),(0,q.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/50 p-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[qe.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,96),alt:``,width:44,height:44,className:`size-11 rounded-full object-cover`,draggable:!1})},e)),(0,q.jsxs)(P,{open:d,onOpenChange:f,children:[(0,q.jsx)(it,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`flex size-12 shrink-0 items-center justify-center rounded-xl border border-edge-subtle bg-surface-base text-xs font-medium text-fg-muted hover:border-edge hover:text-fg`,children:i.avatarMore})}),(0,q.jsx)(D,{children:(0,q.jsxs)(C,{className:`z-[80] max-h-72 w-[min(22rem,calc(100vw-2rem))] overflow-y-auto rounded-xl border border-edge-subtle bg-surface-panel p-3 shadow-lg`,sideOffset:6,align:`end`,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs font-medium text-fg-muted`,children:Et(p,i)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:He.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-11 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,88),alt:``,width:40,height:40,className:`size-10 rounded-full object-cover`,draggable:!1})},e))})]})})]})]}),(0,q.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:i.personaAvatar}),(0,q.jsx)(K,{agentId:t,avatar:n,size:40}),n.trim()&&!Re(n.trim())&&n.trim()!==`xopc:custom`?(0,q.jsx)(`span`,{className:`truncate font-mono text-[10px] text-fg-muted`,title:n,children:n}):null]})]})]})}var Ot={name:``,creature:``,emoji:``,avatar:``};function kt(e){let t={...Ot};if(!e.trim())return t;let n={name:`name`,creature:`creature`,emoji:`emoji`,avatar:`avatar`};for(let r of e.split(`
|
|
1
|
+
import{i as e}from"./rolldown-runtime-DWdDZTNf.js";import{i as t,t as n}from"./vendor-react-DbimaAId.js";import{i as r}from"./vendor-swr-B5fPo7KK.js";import{$n as i,A as a,An as o,Ar as s,At as c,C as l,Cn as u,Cr as d,D as f,Di as p,Dn as m,Dt as h,E as g,F as _,Gn as v,Hn as y,I as b,In as x,Ir as S,It as C,Jr as w,Kn as T,Kr as ee,Ln as E,Lt as D,M as O,Mn as k,Mt as te,N as A,Nt as j,O as M,Oi as ne,Ot as re,P as N,Q as ie,Rn as ae,Rr as oe,Rt as P,S as se,Si as ce,Sn as le,St as ue,T as de,Un as F,Ur as fe,Vn as pe,Vr as me,Wn as I,X as he,Xn as ge,Z as _e,Zn as ve,_ as ye,_n as be,at as xe,b as Se,bn as L,br as Ce,cr as R,ct as we,dn as z,dr as Te,ei as B,er as V,fr as Ee,gi as De,gn as H,ii as Oe,it as ke,j as Ae,jn as je,jr as Me,jt as Ne,k as Pe,ki as Fe,kn as Ie,kt as Le,lt as Re,m as ze,mr as Be,ni as Ve,nt as He,or as Ue,ot as We,pr as Ge,ri as Ke,rt as qe,si as U,sr as W,st as G,tt as K,v as Je,vi as Ye,vn as Xe,vr as Ze,w as Qe,wi as $e,x as et,xt as tt,y as nt,zn as rt,zt as it}from"./index-BUYGk2UT.js";import{a as at,b as ot,d as st,h as ct,r as lt,t as ut,u as dt}from"./cron-dreaming-jobs-D460WnXB.js";var q=n();function ft({open:e,onOpenChange:t,busy:n,deletePurge:r,deleteTarget:i,deleteConfirmText:a,onDeleteConfirmTextChange:o,onConfirm:s,onCancel:l,a:u}){return(0,q.jsx)(te,{open:e,onOpenChange:t,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:`fixed inset-0 z-[80] bg-scrim backdrop-blur-[2px]`}),(0,q.jsxs)(re,{className:x(`fixed left-1/2 top-1/2 z-[81] w-[min(100%-2rem,28rem)] -translate-x-1/2 -translate-y-1/2 rounded-xl border border-edge bg-surface-panel p-4 shadow-popover`,`dark:border-edge`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsx)(j,{className:`text-base font-semibold text-fg`,children:r?u.purgeDisk:u.removeFromConfig}),(0,q.jsx)(Le,{className:`mt-2 whitespace-pre-wrap text-sm leading-relaxed text-fg-muted`,children:r?u.confirmDeletePurge:u.confirmDelete}),r&&i?(0,q.jsxs)(`div`,{className:`mt-3 space-y-3`,children:[(0,q.jsx)(`label`,{className:`mb-2 block text-sm font-medium text-fg`,htmlFor:`agent-delete-confirm`,children:u.purgeConfirmLabel}),(0,q.jsx)(`input`,{id:`agent-delete-confirm`,type:`text`,autoComplete:`off`,spellCheck:!1,className:x(`w-full rounded-md border border-edge bg-surface-panel px-3 py-1.5 font-mono text-xs text-fg`,`placeholder:text-fg-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-panel`,`dark:border-edge`),placeholder:u.purgeConfirmPlaceholder.replace(`{{agentId}}`,i.id),value:a,onChange:e=>o(e.target.value)}),(0,q.jsx)(`p`,{className:`pt-0.5 text-xs text-fg-muted`,children:u.purgeConfirmHint.replace(`{{agentId}}`,i.id)})]}):null,(0,q.jsxs)(`div`,{className:`mt-4 flex flex-wrap items-center justify-end gap-2 border-t border-edge-subtle/60 pt-3`,children:[(0,q.jsx)(k,{type:`button`,variant:`ghost`,disabled:n,onClick:l,children:u.createModalCancel}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:r?`border-red-200 text-red-700 hover:bg-red-50 dark:border-red-900/60 dark:text-red-300 dark:hover:bg-red-950/40`:void 0,disabled:n||!i||r&&a.trim().toLowerCase()!==i.id.toLowerCase(),onClick:s,children:r?u.purgeDisk:u.removeFromConfig})]})]})]})})}var pt=[{id:`overview`,labelKey:`navIdentity`,icon:pe},{id:`profile`,labelKey:`navProfile`,icon:U},{id:`tools`,labelKey:`navTools`,icon:rt},{id:`skills`,labelKey:`navSkills`,icon:Ee},{id:`files`,labelKey:`navCoreFiles`,icon:ee}],mt=[{id:`channels`,labelKey:`tabChannels`,icon:Be},{id:`cron`,labelKey:`tabCron`,icon:Oe}];function ht(e){let{a:t,panel:n,onPanelChange:r}=e,i=(e,t,i)=>(0,q.jsxs)(`button`,{type:`button`,onClick:()=>r(e),className:x(`flex w-full items-center gap-2.5 rounded-lg px-3 py-2 text-left text-sm font-medium transition-colors`,n===e?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover hover:text-fg`),children:[(0,q.jsx)(i,{className:`size-4 shrink-0 opacity-90`,strokeWidth:2,"aria-hidden":!0}),(0,q.jsx)(`span`,{className:`min-w-0 truncate`,children:t})]},e);return(0,q.jsxs)(`nav`,{className:`flex w-full flex-col gap-1`,"aria-label":t.editorNavAria,children:[(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:pt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))}),(0,q.jsx)(`p`,{className:`mt-4 px-3 text-[10px] font-semibold uppercase tracking-wide text-fg-subtle`,children:t.navAdvanced}),(0,q.jsx)(`div`,{className:`flex flex-col gap-0.5`,children:mt.map(({id:e,labelKey:n,icon:r})=>i(e,t[n],r))})]})}function gt(e){let{open:t,onOpenChange:n,a:r,title:i,subtitle:a,panel:o,onPanelChange:s,onFooterSave:l,footerSaveDisabled:u,footerSavedFlash:d,busy:f,children:p}=e;return(0,q.jsx)(te,{open:t,onOpenChange:n,children:(0,q.jsxs)(Ne,{children:[(0,q.jsx)(c,{className:x(`xopc-dialog-overlay fixed inset-0 bg-scrim`,Je)}),(0,q.jsxs)(re,{className:x(`xopc-dialog-content fixed flex flex-col overflow-hidden rounded-xl border border-edge bg-surface-panel shadow-popover dark:border-edge`,ye,`inset-4 h-[calc(100dvh-2rem)] max-h-[calc(100dvh-2rem)] min-h-0`,`sm:inset-auto sm:left-1/2 sm:top-1/2 sm:h-[min(88vh,48rem)] sm:max-h-[min(88vh,48rem)] sm:min-h-[32rem] sm:w-[min(100%-2rem,58rem)] sm:-translate-x-1/2 sm:-translate-y-1/2`),onOpenAutoFocus:e=>e.preventDefault(),children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 items-start justify-between gap-2 border-b border-edge-subtle px-4 pb-3 pt-4 dark:border-edge`,children:[(0,q.jsxs)(`div`,{className:`min-w-0 pr-2`,children:[(0,q.jsx)(j,{className:`text-base font-semibold leading-snug text-fg`,children:i}),(0,q.jsx)(Le,{className:`mt-1 font-mono text-xs text-fg-muted`,children:a})]}),(0,q.jsx)(h,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`shrink-0 rounded-lg p-1.5 text-fg-muted hover:bg-surface-base hover:text-fg focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent/40`,"aria-label":r.closeDialogAria,children:(0,q.jsx)(ae,{className:`size-4`,"aria-hidden":!0})})})]}),(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col sm:flex-row sm:overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`shrink-0 border-b border-edge-subtle px-4 py-3 dark:border-edge sm:flex sm:w-56 sm:shrink-0 sm:flex-col sm:overflow-y-auto sm:border-b-0 sm:border-r sm:px-0 sm:py-4 sm:pl-4 sm:pr-3`,children:(0,q.jsx)(ht,{a:r,panel:o,onPanelChange:s})}),(0,q.jsxs)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden`,children:[(0,q.jsx)(`div`,{className:`flex min-h-0 flex-1 flex-col overflow-hidden px-4 py-4 sm:pl-2 sm:pr-5`,children:p}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-1 border-t border-edge-subtle px-4 py-3 dark:border-edge sm:flex-row sm:items-center sm:justify-end sm:gap-3`,children:[d?(0,q.jsxs)(`p`,{className:`order-2 text-center text-xs font-medium text-green-600 sm:order-1 sm:mr-auto sm:text-left dark:text-green-400`,children:[`✓ `,r.personaSaved]}):u?(0,q.jsx)(`p`,{className:`order-2 text-center text-xs text-fg-muted sm:order-1 sm:mr-auto sm:text-left`,children:r.footerSaveNotApplicable}):null,(0,q.jsx)(k,{type:`button`,className:`order-1 w-full sm:order-2 sm:w-auto`,disabled:f||u,onClick:()=>void l(),children:r.save})]})]})]})]})]})})}function _t(){return`rounded-2xl bg-surface-base px-4 py-5 sm:px-5`}function J({children:e,className:t}){return(0,q.jsx)(`section`,{className:x(_t(),t),children:e})}var vt=`flex size-9 shrink-0 items-center justify-center rounded-lg bg-surface-hover/90 text-fg-muted transition-colors dark:bg-surface-hover/70`;function Y({icon:e,title:t,subtitle:n,trailing:r,className:i,iconInteractive:a,iconLeading:o}){let s=o??(0,q.jsx)(e,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),c=o?x(`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel p-0 ring-1 ring-inset ring-edge-subtle transition-[box-shadow] hover:ring-accent/40 dark:ring-edge-subtle`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`):x(vt,`hover:text-fg`,`focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-accent focus-visible:ring-offset-2 focus-visible:ring-offset-surface-base`),l=!!(a&&o);return(0,q.jsxs)(`div`,{className:x(`mb-5 flex items-start gap-3`,i),children:[a?l?(0,q.jsxs)(`span`,{className:`relative shrink-0`,children:[(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}),(0,q.jsx)(`span`,{className:`pointer-events-none absolute -bottom-0.5 -right-0.5 flex size-4 items-center justify-center rounded-md border border-edge bg-surface-panel text-fg-muted shadow-sm dark:border-edge dark:bg-surface-base`,"aria-hidden":!0,children:(0,q.jsx)(Ze,{className:`size-2.5`,strokeWidth:2.25})})]}):(0,q.jsx)(`button`,{type:`button`,id:a.id,onClick:a.onClick,"aria-label":a.ariaLabel,className:c,children:s}):(0,q.jsx)(`div`,{className:x(o?`flex size-9 shrink-0 items-center justify-center overflow-hidden rounded-lg bg-surface-panel ring-1 ring-inset ring-edge-subtle dark:ring-edge-subtle`:vt),"aria-hidden":!o,children:s}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsx)(`h2`,{className:`text-sm font-semibold text-fg`,children:t}),(0,q.jsx)(`p`,{className:`mt-0.5 text-xs text-fg-muted`,children:n})]}),r?(0,q.jsx)(`div`,{className:`shrink-0`,children:r}):null]})}function X(){return x(`w-full rounded-lg border border-edge bg-surface-panel px-3 py-2 text-sm text-fg`,`placeholder:text-fg-subtle`,o,`dark:border-edge`)}function yt(e,t,n){let r=e.agentId?.trim().toLowerCase();return r?r===t.toLowerCase():t.toLowerCase()===n.toLowerCase()}function bt(e){return[e.channel,e.accountId,e.peerKind,e.peerId].filter(e=>typeof e==`string`&&e.length>0).join(` · `)||e.channel}function xt(e,t,n,r){let i=e.trim(),a=t.trim();if(a)return{channel:i,peerId:a};if(n!=null){let e=r[n];if(!e)return{channel:i};let t={channel:i};e.accountId?.trim()&&(t.accountId=e.accountId.trim()),e.peerKind?.trim()&&(t.peerKind=e.peerKind.trim());let a=e.peerId?.trim()||e.chatId?.trim();return a&&(t.peerId=a),t}return{channel:i}}var St=x(Ie,`w-full text-xs sm:w-auto sm:min-w-[11rem] sm:max-w-[17rem] sm:shrink-0`);function Ct(e){let{a:t,busy:n,bindingsLoading:r,agentBindings:i,onRemoveBinding:a,onAddBinding:o,channelStatuses:c,channelsStatusLoading:l,useManualChannel:u,newBindChannel:d,setNewBindChannel:f,bindSessionChats:p,sessionsLoading:m,newBindSessionIdx:h,setNewBindSessionIdx:g,newBindCustomPeer:_,setNewBindCustomPeer:v,onRefreshSessions:y,lastActiveLabels:b,selectRecipient:S}=e,C=!l&&(u||c.length>0);return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:s,title:t.channelsTitle,subtitle:t.channelsHint}),r?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoading}):i.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsNone}):(0,q.jsx)(`ul`,{className:`flex flex-col gap-2 text-sm`,children:i.map((e,r)=>(0,q.jsxs)(`li`,{className:`flex flex-wrap items-center justify-between gap-2 rounded-lg border border-edge bg-surface-panel px-3 py-2`,children:[(0,q.jsx)(`span`,{className:`font-mono text-xs`,children:bt(e.match)}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:n,onClick:()=>void a(e),children:t.removeBinding})]},`${e.match.channel}-${r}`))}),(0,q.jsxs)(`form`,{className:`mt-4 flex flex-col gap-3`,onSubmit:o,children:[l?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.channelsLoadingChannels}):u?(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`input`,{className:X(),value:d,onChange:e=>f(e.target.value),placeholder:`telegram`,autoComplete:`off`}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsManualChannelHint})]}):(0,q.jsxs)(`label`,{className:`flex flex-col gap-1 text-sm`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelLabel}),(0,q.jsx)(`select`,{className:x(X(),`py-2`),value:d,onChange:e=>{f(e.target.value),g(null),v(``)},children:c.map(e=>(0,q.jsxs)(`option`,{value:e.name,disabled:!e.enabled,children:[e.name,` `,e.enabled?``:t.channelsDisabledSuffix]},e.name))})]}),C&&d.trim()?(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 border-t border-edge-subtle pt-3 text-sm`,children:[(0,q.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsSessionLabel}),(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`h-7 gap-1 px-2 text-xs`,disabled:n||m||!d.trim(),title:t.channelsRefreshSessionsHint,onClick:()=>y(),children:[(0,q.jsx)(Te,{className:x(`size-3.5`,m&&`animate-spin`),strokeWidth:1.75}),t.channelsRefreshSessions]})]}),m&&p.length===0?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsLoadingSessions}):null,(0,q.jsxs)(`label`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.channelsPeerFromSessions}),(0,q.jsxs)(`select`,{className:x(X(),`py-2`),value:h==null?``:String(h),disabled:n||!d.trim()||!!_.trim(),onChange:e=>{let t=e.target.value;g(t===``?null:Number(t))},children:[(0,q.jsx)(`option`,{value:``,children:t.channelsPeerAny}),p.map((e,t)=>(0,q.jsx)(`option`,{value:String(t),children:ot(e,b)},`${e.channel}-${e.chatId}-${t}`))]})]}),p.length===0&&d.trim()&&!m?(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsNoSessionsHint}):null,(0,q.jsxs)(`div`,{className:`flex flex-col gap-1`,children:[(0,q.jsx)(`span`,{className:`text-fg-muted`,children:t.peerIdLabel}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-2 sm:flex-row sm:items-stretch sm:gap-2`,children:[(0,q.jsx)(`input`,{type:`text`,className:x(X(),`min-w-0 w-full sm:flex-1`),value:_,onChange:e=>{v(e.target.value),e.target.value.trim()&&g(null)},placeholder:t.channelsCustomPeerPlaceholder,autoComplete:`off`}),(0,q.jsxs)(`select`,{className:St,value:_,onChange:e=>{let t=e.target.value;v(t||``),g(null)},children:[(0,q.jsx)(`option`,{value:``,children:S}),p.map(e=>(0,q.jsx)(`option`,{value:e.chatId,children:ot(e,b)},`${e.channel}-${e.chatId}`))]})]}),(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.channelsCustomPeerHint})]})]}):null,(0,q.jsx)(`div`,{children:(0,q.jsx)(k,{type:`submit`,disabled:n||!d.trim()||l,children:t.addBinding})})]})]})}function wt(e){let{a:t,data:n,busy:r,cronLoading:i,agentCronJobs:a,onSetCronJobAgent:o}=e;return(0,q.jsxs)(J,{className:`flex min-h-0 flex-1 flex-col overflow-y-auto`,children:[(0,q.jsx)(Y,{className:`shrink-0`,icon:ce,title:t.cronTitle,subtitle:t.cronHint}),i?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronLoading}):a.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:t.cronNone}):(0,q.jsx)(`div`,{className:`overflow-x-auto`,children:(0,q.jsxs)(`table`,{className:`w-full min-w-[32rem] border-collapse text-left text-sm`,children:[(0,q.jsx)(`thead`,{children:(0,q.jsxs)(`tr`,{className:`border-b border-edge text-fg-muted`,children:[(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSchedule}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColMessage}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColSession}),(0,q.jsx)(`th`,{className:`py-2 pr-3 font-medium`,children:t.cronColAgent})]})}),(0,q.jsx)(`tbody`,{children:a.map(e=>{let i=!e.agentId?.trim(),a=i?``:e.agentId.trim().toLowerCase();return(0,q.jsxs)(`tr`,{className:`border-b border-edge-subtle`,children:[(0,q.jsx)(`td`,{className:`py-2 pr-3 font-mono text-xs`,children:e.schedule}),(0,q.jsx)(`td`,{className:`max-w-[12rem] truncate py-2 pr-3 text-xs`,title:lt(e),children:lt(e)}),(0,q.jsx)(`td`,{className:`py-2 pr-3 text-xs`,children:e.sessionTarget??`main`}),(0,q.jsx)(`td`,{className:`py-2 pr-3`,children:(0,q.jsxs)(`select`,{className:x(X(),`min-w-[8rem] py-1 text-xs`),value:a,disabled:r||e.sessionTarget!==`isolated`,onChange:t=>void o(e,t.target.value),children:[(0,q.jsx)(`option`,{value:``,children:i?t.cronAgentDefault:t.cronAgentClear}),n.agents.map(e=>(0,q.jsx)(`option`,{value:e.id,children:e.id},e.id))]})})]},e.id)})})]})})]})}function Tt(e){let{a:t,filesLoading:n,files:r,activeFile:i,setActiveFile:a,bootstrapViewMode:o,setBootstrapViewMode:s,fileDraft:c,setFileDraft:l,fileSaving:u,bootstrapFileLoading:d,bootstrapEditorNonce:f}=e,p=le(e=>e.resolved===`dark`);return(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-4 overflow-hidden`,children:[(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesHint}),n?(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesLoading}):r?(0,q.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col gap-3 overflow-hidden`,children:[(0,q.jsx)(`nav`,{className:`flex shrink-0 flex-row flex-wrap gap-x-0.5 gap-y-0 border-b border-edge-subtle`,"aria-label":t.tabFiles,children:r.files.map(e=>(0,q.jsxs)(`button`,{type:`button`,className:x(`-mb-px shrink-0 border-b-2 border-transparent px-3 py-2 text-left font-mono text-xs whitespace-nowrap transition-colors`,i===e.name?`border-accent text-fg`:`text-fg-muted hover:border-edge-subtle hover:text-fg`,e.missing&&`opacity-60`),onClick:()=>a(e.name),children:[e.name,e.missing?` (${t.missing})`:``]},e.name))}),(0,q.jsx)(`div`,{className:`flex min-h-0 min-w-0 flex-1 flex-col gap-2 overflow-hidden`,children:i?(0,q.jsxs)(q.Fragment,{children:[(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-between gap-2`,children:[(0,q.jsxs)(`div`,{className:`inline-flex rounded-lg border border-edge bg-surface-panel p-0.5`,role:`group`,"aria-label":t.filesBootstrapEdit,children:[(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`edit`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`edit`),children:[(0,q.jsx)(ge,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapEdit]}),(0,q.jsxs)(`button`,{type:`button`,className:x(`inline-flex items-center gap-1.5 rounded-md px-2.5 py-1.5 text-xs font-medium`,o===`preview`?`bg-accent-soft text-accent-fg`:`text-fg-muted hover:bg-surface-hover`),onClick:()=>s(`preview`),children:[(0,q.jsx)(w,{className:`size-3.5 shrink-0`,"aria-hidden":!0}),t.filesBootstrapPreview]})]}),(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2 text-xs text-fg-muted`,children:[u?(0,q.jsx)(`span`,{children:t.filesSavingStatus}):null,(0,q.jsx)(`span`,{children:t.filesAutoSaveHint})]})]}),o===`edit`?(0,q.jsx)(`div`,{className:x(X(),`flex min-h-0 flex-1 flex-col overflow-hidden p-0`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(_e,{initialContent:c,onChange:l,isDark:p,className:`min-h-0 flex-1`},`${i??`file`}-${f}`)}):(0,q.jsx)(`div`,{className:x(X(),`min-h-0 flex-1 overflow-y-auto text-sm`,d&&`pointer-events-none opacity-60`),children:(0,q.jsx)(he,{content:c,className:`text-sm`})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.pickFile})})]}):(0,q.jsx)(`p`,{className:`shrink-0 text-sm text-fg-muted`,children:t.filesEmpty})]})}var Z=e(t(),1);function Et(e,t){switch(e){case`adventurer`:return t.avatarStyleAdventurer;case`bottts`:return t.avatarStyleRobot;case`lorelei`:return t.avatarStyleLorelei;case`thumbs`:return t.avatarStyleThumbs;case`fun-emoji`:return t.avatarStyleFunEmoji;default:return e}}function Dt(e){let{agentId:t,value:n,onChange:r,a:i,id:a}=e,o=(0,Z.useRef)(null),[s,c]=(0,Z.useState)(!1),[l,u]=(0,Z.useState)(null),[d,f]=(0,Z.useState)(!1),p=(0,Z.useMemo)(()=>{let e=Re(n.trim());return e&&we(e.styleId)?e.styleId:ke[0]??`adventurer`},[n]),m=(0,Z.useCallback)(async(e,n)=>{try{await g(t)}catch{}r(We(e,n)),f(!1)},[t,r]),h=(0,Z.useCallback)(async e=>{let n=e.target.files?.[0];if(e.target.value=``,n){u(null),c(!0);try{await b(t,n),r(xe)}catch(e){let t=e instanceof Error?e.message:``;u(t===`avatar_too_large`?i.avatarTooLarge:t===`unsupported_image_type`||t===`empty_file`?i.avatarInvalidImage:i.avatarUploadFailed)}finally{c(!1)}}},[i,t,r]),_=(e,t)=>{let r=Re(n.trim());return!!(r&&r.styleId===e&&r.seed===t)};return(0,q.jsxs)(`div`,{...a?{id:a}:{},className:`flex flex-col gap-3 sm:col-span-2`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,q.jsx)(`span`,{className:`text-sm font-medium text-fg`,children:i.avatarPickerTitle}),(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`input`,{ref:o,type:`file`,accept:`image/png,image/jpeg,image/webp,.png,.jpg,.jpeg,.webp`,className:`hidden`,onChange:e=>void h(e)}),(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`gap-1.5 px-2.5 py-1.5 text-xs`,disabled:s,onClick:()=>o.current?.click(),children:[(0,q.jsx)(F,{className:`size-3.5 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),s?i.avatarUploading:i.avatarUploadCustom]})]})]}),l?(0,q.jsx)(`p`,{className:`text-xs text-red-600 dark:text-red-400`,children:l}):null,(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:ke.map(e=>(0,q.jsx)(`button`,{type:`button`,onClick:()=>void m(e,qe[0]??t),className:x(`rounded-full border px-3 py-1.5 text-xs font-medium transition-colors`,p===e?`border-fg bg-fg text-surface-base`:`border-edge-subtle bg-surface-panel text-fg hover:border-edge`),children:Et(e,i)},e))}),(0,q.jsxs)(`div`,{className:`rounded-xl border border-edge-subtle bg-surface-panel/50 p-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[qe.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-12 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,96),alt:``,width:44,height:44,className:`size-11 rounded-full object-cover`,draggable:!1})},e)),(0,q.jsxs)(P,{open:d,onOpenChange:f,children:[(0,q.jsx)(it,{asChild:!0,children:(0,q.jsx)(`button`,{type:`button`,className:`flex size-12 shrink-0 items-center justify-center rounded-xl border border-edge-subtle bg-surface-base text-xs font-medium text-fg-muted hover:border-edge hover:text-fg`,children:i.avatarMore})}),(0,q.jsx)(D,{children:(0,q.jsxs)(C,{className:`z-[80] max-h-72 w-[min(22rem,calc(100vw-2rem))] overflow-y-auto rounded-xl border border-edge-subtle bg-surface-panel p-3 shadow-lg`,sideOffset:6,align:`end`,children:[(0,q.jsx)(`p`,{className:`mb-2 text-xs font-medium text-fg-muted`,children:Et(p,i)}),(0,q.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:He.map(e=>(0,q.jsx)(`button`,{type:`button`,title:e,onClick:()=>void m(p,e),className:x(`flex size-11 shrink-0 items-center justify-center rounded-full border-2 transition-colors`,_(p,e)?`border-accent ring-2 ring-accent/30`:`border-transparent hover:border-edge`),children:(0,q.jsx)(`img`,{src:G(p,e,88),alt:``,width:40,height:40,className:`size-10 rounded-full object-cover`,draggable:!1})},e))})]})})]})]}),(0,q.jsxs)(`div`,{className:`mt-3 flex items-center gap-2 border-t border-edge-subtle pt-3`,children:[(0,q.jsx)(`span`,{className:`text-xs text-fg-muted`,children:i.personaAvatar}),(0,q.jsx)(K,{agentId:t,avatar:n,size:40}),n.trim()&&!Re(n.trim())&&n.trim()!==`xopc:custom`?(0,q.jsx)(`span`,{className:`truncate font-mono text-[10px] text-fg-muted`,title:n,children:n}):null]})]})]})}var Ot={name:``,creature:``,emoji:``,avatar:``};function kt(e){let t={...Ot};if(!e.trim())return t;let n={name:`name`,creature:`creature`,emoji:`emoji`,avatar:`avatar`};for(let r of e.split(`
|
|
2
2
|
`)){let e=r.match(/^[-*]\s+\*\*(\w+):\*\*\s*(.*)/i);if(!e)continue;let i=n[e[1].toLowerCase()];if(!i)continue;let a=e[2].trim();/^_\(.*\)_$/.test(a)&&(a=``),t[i]=a}return t}function At(e){return[`# IDENTITY.md - Who Am I?`,``,`- **Name:** ${e.name}`,`- **Creature:** ${e.creature}`,`- **Emoji:** ${e.emoji}`,`- **Avatar:** ${e.avatar}`,``].join(`
|
|
3
3
|
`)}var jt={callName:``,pronouns:``,timezone:``,notes:``};function Mt(e){let t={...jt};if(!e.trim())return t;let n={name:`callName`,"what to call them":`callName`,pronouns:`pronouns`,timezone:`timezone`,notes:`notes`},r=e.split(`
|
|
4
4
|
`),i=-1;for(let e=0;e<r.length;e++){let a=r[e];if(/^##\s+Context/i.test(a)){i=e+1;continue}let o=a.match(/^[-*]\s+\*\*(.+?):\*\*\s*(.*)/i);if(!o)continue;let s=n[o[1].toLowerCase().trim()];if(!s)continue;let c=o[2].trim();/^_\(.*\)_$/.test(c)&&(c=``),t[s]=c}if(i>0){let e=r.slice(i).join(`
|
|
@@ -213,4 +213,4 @@ Analytical, clear, and methodical. Like a good data scientist — lets the numbe
|
|
|
213
213
|
|
|
214
214
|
Bold, aesthetic, and thoughtful. Like a creative director who has opinions but listens — pushes for better while respecting what the client actually needs.
|
|
215
215
|
`}];function dn({existingAgentIds:e,onComplete:t,onSkip:n}){let r=u(e=>e.language),i=je(r).agentsSettings,a=(0,Z.useMemo)(()=>un.filter(t=>!e.has(t.id)),[e]),[o,s]=(0,Z.useState)(()=>new Set(un.map(e=>e.id))),[c,l]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(null),[p,m]=(0,Z.useState)(null);(0,Z.useEffect)(()=>{a.length===0&&t()},[a,t]);let h=e=>{s(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=async()=>{let e=a.filter(e=>o.has(e.id));if(e.length===0){t();return}l(!0),m(null),f({current:0,total:e.length});for(let t=0;t<e.length;t++){let n=e[t];f({current:t+1,total:e.length});try{await de({name:n.name,id:n.id,workspace:`~/.xopc/workspace/${n.id}`,description:r===`zh`?n.descriptionZh:n.descriptionEn}),await N(n.id,`IDENTITY.md`,n.identityMd),await N(n.id,`SOUL.md`,n.soulMd);let e=n.toolsDisable;e&&e.length>0&&await _(n.id,{toolsDisable:e})}catch(e){let t=e instanceof Error?e.message:String(e);if(t.toLowerCase().includes(`already exists`))continue;m(i.presetCreateFailed.replace(`{{name}}`,n.name).replace(`{{message}}`,t)),l(!1);return}}l(!1),t()};return a.length===0?null:(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-2xl flex-col items-center gap-6 px-4 py-12`,children:[(0,q.jsxs)(`div`,{className:`text-center`,children:[(0,q.jsxs)(`div`,{className:`mb-3 inline-flex items-center gap-2 rounded-full bg-accent/10 px-3 py-1.5 text-sm font-medium text-accent`,children:[(0,q.jsx)(ve,{className:`size-4`,"aria-hidden":!0}),i.presetSetupBadge]}),(0,q.jsx)(`h2`,{className:`text-xl font-semibold text-fg`,children:i.presetSetupTitle}),(0,q.jsx)(`p`,{className:`mt-2 text-sm text-fg-muted`,children:i.presetSetupSubtitle})]}),(0,q.jsx)(`div`,{className:`w-full space-y-3`,children:a.map(e=>(0,q.jsx)(fn,{preset:e,checked:o.has(e.id),disabled:c,language:r,onToggle:()=>h(e.id)},e.id))}),p?(0,q.jsx)(`div`,{role:`alert`,className:`w-full rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`,children:p}):null,d&&c?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:i.presetCreatingProgress.replace(`{{current}}`,String(d.current)).replace(`{{total}}`,String(d.total))}):null,(0,q.jsxs)(`div`,{className:`flex w-full items-center justify-between border-t border-edge-subtle pt-4`,children:[(0,q.jsxs)(k,{type:`button`,variant:`ghost`,className:`gap-2 text-fg-muted`,disabled:c,onClick:()=>{localStorage.setItem(ln,`true`),n()},children:[(0,q.jsx)(V,{className:`size-4`,"aria-hidden":!0}),i.presetSkip]}),(0,q.jsxs)(k,{type:`button`,variant:`primary`,className:`gap-2`,disabled:c||o.size===0,onClick:()=>void g(),children:[(0,q.jsx)(ve,{className:`size-4`,"aria-hidden":!0}),c?i.presetCreating:i.presetCreateSelected.replace(`{{count}}`,String(o.size))]})]})]})}function fn(e){let{preset:t,checked:n,disabled:r,language:i,onToggle:a}=e,o=i===`zh`?t.descriptionZh:t.descriptionEn;return(0,q.jsxs)(`label`,{className:x(`flex cursor-pointer items-start gap-3 rounded-xl border px-4 py-3 transition-colors`,n?`border-accent/50 bg-accent/5`:`border-edge-subtle bg-surface-panel/40`,r&&`pointer-events-none opacity-50`),children:[(0,q.jsx)(`input`,{type:`checkbox`,checked:n,disabled:r,onChange:a,className:`mt-1 shrink-0 accent-accent`}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,q.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,q.jsx)(`span`,{className:`text-lg`,"aria-hidden":!0,children:t.emoji}),(0,q.jsx)(`span`,{className:`font-medium text-fg`,children:t.name})]}),(0,q.jsx)(`p`,{className:`mt-0.5 text-sm text-fg-muted`,children:o})]})]})}var pn=`main`,mn=/^[a-z0-9][a-z0-9_-]{0,63}$/i,hn=/[^a-z0-9_-]+/g,gn=/^-+/,_n=/-+$/,vn=/^[a-z0-9][a-z0-9_-]{0,63}$/,yn=new Set([`con`,`prn`,`aux`,`nul`,`com1`,`com2`,`com3`,`com4`,`com5`,`com6`,`com7`,`com8`,`com9`,`lpt1`,`lpt2`,`lpt3`,`lpt4`,`lpt5`,`lpt6`,`lpt7`,`lpt8`,`lpt9`]);function bn(e){let t=e.trim();if(!t)return pn;let n=t.toLowerCase();return mn.test(t)?n:n.replace(hn,`-`).replace(gn,``).replace(_n,``).slice(0,64)||pn}function xn(e,t){let n=e?.trim();if(n){let e=n.toLowerCase();return vn.test(e)?e===pn?{ok:!1,error:`"${pn}" is reserved`}:yn.has(e)?{ok:!1,error:`Agent id "${e}" is reserved (Windows device name).`}:{ok:!0,agentId:e}:{ok:!1,error:`Invalid agent id: use 1–64 characters; letters, digits, underscores, and hyphens only; start with a letter or digit.`}}let r=bn(t.trim());return r===pn?{ok:!1,error:`Display name cannot produce a valid agent folder id. Set an explicit Agent id (letters, digits, underscores, hyphens only).`}:yn.has(r)?{ok:!1,error:`That display name resolves to "${r}", which is reserved. Use a different display name or set an explicit Agent id.`}:vn.test(r)?{ok:!0,agentId:r}:{ok:!1,error:`Could not derive a folder-safe agent id from the display name. Set an explicit Agent id (letters, digits, underscores, hyphens only).`}}function Sn(e){let t=e.trim();return t?`~/.xopc/workspace/${bn(t)}`:``}function Cn(){return z(`/api/dreaming`)}async function wn(){let e=await H(Cn());if(!e.payload)throw Error(`Missing payload`);return e.payload}async function Tn(e){await H(z(`/api/dreaming/action`),{method:`POST`,body:JSON.stringify({action:e})})}async function En(e=`deep`){let t=await H(z(`/api/dreaming/run`),{method:`POST`,body:JSON.stringify({phase:e})}),n=!!t.payload?.triggered,r=typeof t.payload?.jobId==`string`?t.payload.jobId:``;if(!n||!r)throw Error(`Failed to trigger`);return{triggered:n,jobId:r,phase:e}}async function Dn(e){let t=await H(z(`/api/dreaming/preview${typeof e==`number`&&Number.isFinite(e)?`?limit=${encodeURIComponent(String(e))}`:``}`));if(!t.payload)throw Error(`Missing payload`);return t.payload}async function On(e=50){return(await H(z(`/api/dreaming/events${`?limit=${encodeURIComponent(String(e))}`}`))).payload?.events??[]}function kn({language:e,a:t,busy:n,sleeping:r,listSearchQuery:i,onListSearchQueryChange:a,onSleep:o,onAddAgent:s}){return(0,q.jsxs)(`div`,{className:`flex min-w-0 flex-1 flex-wrap items-center justify-end gap-2`,children:[(0,q.jsxs)(k,{type:`button`,variant:`secondary`,className:`shrink-0 gap-2`,disabled:n||r,onClick:()=>void o(),"aria-label":e===`zh`?`让智能体进入睡眠流程`:`Trigger agent sleep sequence`,title:e===`zh`?`由浅入深:Light → Deep → REM`:`Light → Deep → REM`,children:[(0,q.jsx)(Ce,{className:`size-4 shrink-0`,strokeWidth:1.75,"aria-hidden":!0}),e===`zh`?r?`睡眠中…`:`睡眠`:r?`Sleeping…`:`Sleep`]}),(0,q.jsxs)(`label`,{className:`relative flex min-h-9 min-w-0 max-w-sm cursor-text items-center rounded-pill border border-edge bg-surface-base py-1.5 pl-9 pr-3 shadow-surface dark:bg-surface-hover/40 sm:max-w-md`,children:[(0,q.jsx)(Ue,{className:`pointer-events-none absolute left-3 top-1/2 size-4 -translate-y-1/2 text-fg-disabled`,strokeWidth:1.75,"aria-hidden":!0}),(0,q.jsx)(`input`,{type:`search`,role:`searchbox`,enterKeyHint:`search`,value:i,onChange:e=>a(e.target.value),placeholder:t.listSearchPlaceholder,autoComplete:`off`,spellCheck:!1,"aria-label":t.listSearchPlaceholder,className:`min-w-0 flex-1 appearance-none border-0 bg-transparent py-0.5 text-sm leading-normal text-fg caret-current placeholder:text-fg-disabled focus:border-0 focus:shadow-none focus:outline-none focus:ring-0 focus-visible:outline-none`})]}),(0,q.jsxs)(k,{type:`button`,variant:`primary`,className:`shrink-0 gap-2`,"aria-label":t.addAgentAria,disabled:n,onClick:()=>s(),children:[(0,q.jsx)(Ge,{className:`size-4`,strokeWidth:1.75,"aria-hidden":!0}),t.addAgent]})]})}function An(e){let{panel:t,selectedId:n,hasToken:r,dataAgentsLength:i,saveErrorMessage:a,setError:o}=e,[s,c]=(0,Z.useState)(null),[l,u]=(0,Z.useState)(!1),[d,f]=(0,Z.useState)(null),[p,m]=(0,Z.useState)(``),[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)(`edit`),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(0),C=(0,Z.useRef)(p);C.current=p;let w=(0,Z.useRef)(n);w.current=n;let T=(0,Z.useRef)(d);T.current=d;let ee=(0,Z.useRef)(null),E=(0,Z.useRef)(``),D=(0,Z.useRef)(``),O=ie(async()=>{let e=w.current,t=T.current;if(!e||!t||`${e}:${t}`!==E.current)return;let n=C.current;if(n!==D.current){g(!0),o(null);try{await N(e,t,n),D.current=n,c(n=>!n||n.agentId!==e?n:{...n,files:n.files.map(e=>e.name===t?{...e,missing:!1}:e)})}catch(e){o(e instanceof Error?e.message:a)}finally{g(!1)}}},800),k=(0,Z.useRef)(O.flush);return k.current=O.flush,(0,Z.useEffect)(()=>()=>{k.current()},[]),(0,Z.useEffect)(()=>{if(t!==`files`||!n||!r)return;let e=!1;return u(!0),Pe(n).then(t=>{e||c(t)}).catch(()=>{e||c(null)}).finally(()=>{e||u(!1)}),()=>{e=!0}},[t,n,r,i]),(0,Z.useEffect)(()=>{if(!d||!n||!r)return;let e=!1;return O.flush(),b(!0),M(n,d).then(t=>{e||(E.current=`${n}:${d}`,D.current=t,m(t),S(e=>e+1))}).catch(()=>{e||(E.current=`${n}:${d}`,D.current=``,m(``),S(e=>e+1))}).finally(()=>{e||b(!1)}),()=>{e=!0}},[d,n,r,O]),(0,Z.useEffect)(()=>{!d||!n||y||O()},[p,d,n,y,O]),(0,Z.useEffect)(()=>{if(t===`files`)return()=>{O.flush()}},[t,O]),(0,Z.useEffect)(()=>{v(`edit`)},[d,n]),{files:s,setFiles:c,filesLoading:l,activeFile:d,setActiveFile:f,fileDraft:p,setFileDraft:m,fileSaving:h,bootstrapViewMode:_,setBootstrapViewMode:v,bootstrapFileLoading:y,bootstrapEditorNonce:x,overviewSaveBootstrapRef:ee,saveBootstrapDebounced:O}}function jn(e){let{panel:t,hasToken:n,bindingsFromConfig:r,gatewayCfgLoading:i,selected:a,saveErrorMessage:o,setBusy:s,setError:c}=e,[l,u]=(0,Z.useState)([]),[d,f]=(0,Z.useState)(``),[p,m]=(0,Z.useState)([]),[h,g]=(0,Z.useState)(!1),[_,v]=(0,Z.useState)([]),[y,b]=(0,Z.useState)(!1),[x,S]=(0,Z.useState)(null),[C,w]=(0,Z.useState)(``),T=(0,Z.useMemo)(()=>a?l.filter(e=>e.agentId.toLowerCase()===a.id.toLowerCase()):[],[l,a?.id]);(0,Z.useEffect)(()=>{t!==`channels`||!n||u(r)},[t,n,r]),(0,Z.useEffect)(()=>{if(t!==`channels`||!n)return;let e=!1;return g(!0),at().then(t=>{e||m(t)}).catch(()=>{e||m([])}).finally(()=>{e||g(!1)}),()=>{e=!0}},[t,n]),(0,Z.useEffect)(()=>{h||t!==`channels`||p.length===0||f(e=>e&&p.some(t=>t.name===e)?e:p[0].name)},[h,t,p]),(0,Z.useEffect)(()=>{if(t!==`channels`||!n)return;let e=d.trim();if(!e){v([]);return}let r=!1;return S(null),b(!0),dt(e).then(e=>{r||v(e)}).catch(()=>{r||v([])}).finally(()=>{r||b(!1)}),()=>{r=!0}},[t,n,d]);let ee=(0,Z.useCallback)(()=>{let e=d.trim();e&&(b(!0),dt(e).then(e=>{v(e),S(t=>t!=null&&t<e.length?t:null)}).catch(()=>{v([]),S(null)}).finally(()=>{b(!1)}))},[d]),E=!h&&p.length===0,D=t===`channels`&&n&&i,O=(0,Z.useCallback)(async e=>{s(!0),c(null);try{let t=l.filter(t=>t!==e);await A(t),u(t)}catch(e){c(e instanceof Error?e.message:o)}finally{s(!1)}},[l,o,s,c]);return{agentBindings:T,allBindings:l,bindChannelStatuses:p,bindChannelsLoading:h,bindSessionChats:_,bindSessionsLoading:y,bindingsLoading:D,newBindChannel:d,setNewBindChannel:f,newBindSessionIdx:x,setNewBindSessionIdx:S,newBindCustomPeer:C,setNewBindCustomPeer:w,onAddBinding:(0,Z.useCallback)(async e=>{if(e.preventDefault(),!a||!d.trim())return;let t=xt(d,C,x,_),n=[...l,{agentId:a.id,priority:100,enabled:!0,match:t}];s(!0),c(null);try{await A(n),u(n),S(null),w(``)}catch(e){c(e instanceof Error?e.message:o)}finally{s(!1)}},[l,_,d,C,x,o,a,s,c]),onRemoveBinding:O,refreshBindSessions:ee,useManualChannel:E}}function Mn(e){let{panel:t,hasToken:n,data:r,selected:i,saveErrorMessage:a,setBusy:o,setError:s}=e,[c,l]=(0,Z.useState)([]),[u,d]=(0,Z.useState)(!1),f=(0,Z.useMemo)(()=>!r||!i?[]:c.filter(e=>!ut(e)&&yt(e,i.id,r.defaultId)),[c,r,i]);(0,Z.useEffect)(()=>{if(t!==`cron`||!n)return;let e=!1;return d(!0),st().then(t=>{e||l(t)}).catch(()=>{e||l([])}).finally(()=>{e||d(!1)}),()=>{e=!0}},[t,n]);async function p(e,t){o(!0),s(null);try{await ct(e.id,{agentId:t===``?null:t}),l(await st())}catch(e){s(e instanceof Error?e.message:a)}finally{o(!1)}}return{agentCronJobs:f,cronJobs:c,cronLoading:u,onSetCronJobAgent:p}}function Nn(e,t){let[n,r]=(0,Z.useState)([]),[i,a]=(0,Z.useState)(!1),o=(0,Z.useMemo)(()=>n.filter(e=>e.enabled!==!1),[n]);return(0,Z.useEffect)(()=>{if(!e||!t)return;let n=!1;return a(!0),Ae().then(e=>{n||r(e)}).catch(()=>{n||r([])}).finally(()=>{n||a(!1)}),()=>{n=!0}},[e,t]),{catalogForPick:o,skillCatalog:n,skillsCatalogLoading:i}}function Pn(e){return Nn(e.panel===`skills`,e.hasToken)}function Fn(e){let{panel:t,selected:n}=e,[r,i]=(0,Z.useState)(()=>new Set),[a,o]=(0,Z.useState)(()=>new Set),[s,c]=(0,Z.useState)(!0);return(0,Z.useEffect)(()=>{!n||t!==`tools`||i(new Set(n.tools.entryDisable))},[t,n]),(0,Z.useEffect)(()=>{if(!n||t!==`skills`)return;let e=n.skills.entry===void 0;if(c(e),e){let e=n.skills.effectiveAllowlist;o(new Set(e??[]))}else o(new Set(n.skills.entry??[]))},[t,n]),{toolEntryDisable:r,setToolEntryDisable:i,skillsPick:a,setSkillsPick:o,skillsInherit:s,setSkillsInherit:c}}function In(){let e=u(e=>e.language),t=je(e),n=t.agentsSettings,[i,o]=(0,Z.useState)(!1),[s,c]=(0,Z.useState)(null),[l,d]=(0,Z.useState)(!1),[m,h]=(0,Z.useState)(``),g=t.cron,v=t.chat,y=!!Xe(e=>e.token),[b,x]=Fe(),S=p(),{agentId:C}=ne(),w=be(e=>e.setPageHeader),T=be(e=>e.clearPageHeader),{data:ee,error:E,isLoading:D,mutate:k}=r(y?`settings-gateway-agents`:null,a,{revalidateOnFocus:!1}),{data:te}=ue(y),A=(0,Z.useMemo)(()=>O(te?.payload?.config??{}),[te]),j=ee??null,M=!!(y&&D),[re,N]=(0,Z.useState)(null),ie=E instanceof Error?E.message:E?n.loadError:null,ae=re??ie,[oe,P]=(0,Z.useState)(null),[ce,le]=(0,Z.useState)(!1),[F,fe]=(0,Z.useState)(`overview`),[pe,me]=(0,Z.useState)(``),[I,he]=(0,Z.useState)(``),[ge,_e]=(0,Z.useState)(``),[ve,ye]=(0,Z.useState)(``),[xe,L]=(0,Z.useState)(``),[Ce,R]=(0,Z.useState)(null),[we,z]=(0,Z.useState)(!1),Te=(0,Z.useRef)(``),[B,V]=(0,Z.useState)(!1),[Ee,De]=(0,Z.useState)(!1),[H,Oe]=(0,Z.useState)(``),[ke,Ae]=(0,Z.useState)(``),[Me,Ne]=(0,Z.useState)(``),[Pe,Ie]=(0,Z.useState)(``),[Le,Re]=(0,Z.useState)(``),ze=(0,Z.useRef)(null),[Be,Ve]=(0,Z.useState)(!1),[He,Ue]=(0,Z.useState)(!1),[We,Ge]=(0,Z.useState)(!1);(0,Z.useEffect)(()=>{if(j){if(C&&j.agents.some(e=>e.id===C)){P(C);return}P(e=>e&&j.agents.some(t=>t.id===e)?e:j.defaultId)}},[j,C]),(0,Z.useEffect)(()=>{if(!j||M)return;let e=j.agents.length<=1&&j.agents.every(e=>e.id===j.defaultId),t=localStorage.getItem(ln)===`true`;le(e&&!t)},[j,M]);let Ke=(0,Z.useCallback)(()=>{le(!1),k()},[k]),qe=(0,Z.useCallback)(()=>{le(!1)},[]);(0,Z.useEffect)(()=>{!j||!C||j.agents.some(e=>e.id===C)||S(et,{replace:!0})},[j,C,S]),(0,Z.useEffect)(()=>{C&&fe(`overview`)},[C]),(0,Z.useEffect)(()=>{b.get(`panel`)===`defaults`&&S(`/settings/agent-chat`,{replace:!0,state:{[Se]:et}})},[b,S]),(0,Z.useEffect)(()=>{if(b.get(`focus`)!==`avatar`||!C||(fe(`overview`),M||!j?.agents.some(e=>e.id===C)))return;let e=window.setTimeout(()=>{document.getElementById(`agent-avatar-settings`)?.scrollIntoView({behavior:`smooth`,block:`center`}),x(e=>{let t=new URLSearchParams(e);return t.delete(`focus`),t},{replace:!0})},220);return()=>window.clearTimeout(e)},[b,C,M,j,x]);let U=(0,Z.useMemo)(()=>j?.agents.find(e=>e.id===oe)??null,[j,oe]),W=An({panel:F,selectedId:oe,hasToken:y,dataAgentsLength:j?.agents.length,saveErrorMessage:n.saveError,setError:N}),G=Fn({panel:F,selected:U}),K=jn({panel:F,hasToken:y,bindingsFromConfig:A,gatewayCfgLoading:te===void 0,selected:U,saveErrorMessage:n.saveError,setBusy:V,setError:N}),Je=Mn({panel:F,hasToken:y,data:j,selected:U,saveErrorMessage:n.saveError,setBusy:V,setError:N}),Ye=Pn({panel:F,hasToken:y});(0,Z.useEffect)(()=>{if(!U){Ae(``),Ne(``),Ie(``),Re(``);return}Ae(U.workspace),Ne(U.model?.primary??``),Ie(Qe(U,je(e).agentsSettings)),Re(U.description?.trim()??``)},[U?.id,e]);let Ze=(0,Z.useCallback)(()=>{let e=Sn(I.trim()||pe);ye(t=>t===``||t===Te.current?(Te.current=e,e):t)},[I,pe]),$e=(0,Z.useCallback)(()=>{Te.current=``,me(``),he(``),_e(``),ye(``),L(``),R(null),z(!0)},[]),tt=(0,Z.useCallback)(e=>new Promise(t=>window.setTimeout(t,e)),[]),nt=(0,Z.useCallback)(async()=>{if(Ee||B)return;De(!0),N(null);let e=[`light`,`deep`,`rem`];try{(async()=>{for(let t of e)try{await En(t)}catch{}})();for(let t=0;t<e.length;t++){let n=e[t];window.dispatchEvent(new CustomEvent(`dreaming-phase-start`,{detail:{phase:n,source:`ui`}})),await tt(n===`light`?7e3:n===`deep`?9e3:8e3),t===e.length-1&&(window.__xopcDreamingIgnoreSseUntil=Date.now()+6e4,window.dispatchEvent(new CustomEvent(`dreaming-phase-end`,{detail:{phase:n,source:`ui`}})))}}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{De(!1)}},[n.saveError,B,Ee,tt]),rt=(0,Z.useMemo)(()=>(0,q.jsx)(kn,{language:e,a:n,busy:B,sleeping:Ee,listSearchQuery:H,onListSearchQueryChange:Oe,onSleep:()=>void nt(),onAddAgent:()=>$e()}),[n,B,e,H,$e,Ee,nt]);(0,Z.useLayoutEffect)(()=>y?(w({startExtra:null,main:null,end:rt}),()=>T()):(T(),()=>T()),[rt,T,y,w]);async function it(e){e.preventDefault();let t=pe.trim();if(!t)return;let r=xn(I,t);if(r.ok===!1){R(r.error);return}let i=ve.trim()||Sn(I.trim()||t);if(i){V(!0),R(null);try{let e=ge.trim(),{createdAgentId:n,...r}=await de({name:t,workspace:i,...I.trim()?{id:I.trim()}:{},...xe.trim()?{model:xe.trim()}:{},...e?{description:e}:{}});k(r,{revalidate:!1}),me(``),he(``),_e(``),ye(``),L(``),R(null),z(!1),P(n),S(se(n))}catch(e){R(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function at(){if(U){V(!0),N(null);try{let e=Le.trim();k(await _(U.id,{name:Pe.trim()||void 0,description:e.length>0?e:null,workspace:ke.trim()||void 0,model:Me.trim()||null}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function ot(e){V(!0),N(null);try{k(await _(e.id,{setDefault:!0}),{revalidate:!1}),P(e.id)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}async function st(e,t){V(!0),N(null);try{let n=await f(e.id,t);k(n,{revalidate:!1}),P(n.defaultId),fe(`overview`),C===e.id&&S(et,{replace:!0}),o(!1),c(null),h(``)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}function ct(e,t){e.id!==`main`&&(c(e),d(t),h(``),o(!0))}async function lt(){if(U){V(!0),N(null);try{let e=[...G.toolEntryDisable].sort((e,t)=>e.localeCompare(t));k(await _(U.id,{toolsDisable:e}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function ut(){if(U){V(!0),N(null);try{k(await _(U.id,{toolsDisable:null}),{revalidate:!1}),G.setToolEntryDisable(new Set)}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}async function dt(){if(U){V(!0),N(null);try{k(await _(U.id,{skills:G.skillsInherit?null:[...G.skillsPick].sort((e,t)=>e.localeCompare(t))}),{revalidate:!1})}catch(e){N(e instanceof Error?e.message:n.saveError)}finally{V(!1)}}}let ft=F===`channels`||F===`cron`,pt=(()=>{if(!U||F!==`overview`)return!1;let e=Qe(U,n),t=U.description?.trim()??``,r=U.workspace,i=U.model?.primary??``;return Pe.trim()!==e||Le.trim()!==t||ke.trim()!==r||Me.trim()!==i})(),mt=(()=>{if(ft)return!1;switch(F){case`overview`:return pt||Be;case`profile`:return He;default:return!0}})(),ht=ft||!mt;function gt(){Ge(!0),setTimeout(()=>Ge(!1),2e3)}async function _t(){switch(F){case`overview`:await Promise.all([at(),W.overviewSaveBootstrapRef.current?.()??Promise.resolve()]),gt();break;case`profile`:await ze.current?.(),gt();break;case`tools`:await lt(),gt();break;case`skills`:await dt(),gt();break;case`files`:W.saveBootstrapDebounced.flush(),gt();break;default:break}}function J(e){e||S(et)}return{hasToken:y,a:n,chat:v,language:e,data:j,loading:M,displayError:ae,navigate:S,routeAgentId:C,showPresetSetup:ce,onPresetSetupComplete:Ke,onPresetSetupSkip:qe,busy:B,listSearchQuery:H,openAddAgentModal:$e,panel:F,setPanel:fe,modalTitle:U?Pe.trim()||Qe(U,n):C??``,modalSubtitle:U?.id??C??``,footerSaveDisabled:ht,savedFlash:We,handleModalFooterSave:_t,onAgentModalOpenChange:J,addAgentModalOpen:we,setAddAgentModalOpen:z,createWorkspaceSuggestedRef:Te,createModalError:Ce,setCreateModalError:R,createDisplayName:pe,setCreateDisplayName:me,createAgentId:I,setCreateAgentId:he,createDescription:ge,setCreateDescription:_e,createWorkspace:ve,setCreateWorkspace:ye,createModel:xe,setCreateModel:L,onCreate:it,applyCreateWorkspaceSuggestion:Ze,deleteDialogOpen:i,setDeleteDialogOpen:o,deletePurge:l,deleteTarget:s,setDeleteTarget:c,deleteConfirmText:m,setDeleteConfirmText:h,performDelete:st,editorPanelProps:{a:n,chat:v,cCron:g,selected:U,panel:F,data:j,busy:B,editName:Pe,setEditName:Ie,editDescription:Le,setEditDescription:Re,editWorkspace:ke,setEditWorkspace:Ae,editModel:Me,setEditModel:Ne,onSetDefault:()=>{U&&ot(U)},onSaveAgentEdits:()=>void at(),onDelete:e=>{U&&ct(U,e)},overviewSaveBootstrapRef:W.overviewSaveBootstrapRef,profileSaveRef:ze,setOverviewBootstrapDirty:Ve,setProfileDirty:Ue,filesLoading:W.filesLoading,files:W.files,activeFile:W.activeFile,setActiveFile:W.setActiveFile,bootstrapViewMode:W.bootstrapViewMode,setBootstrapViewMode:W.setBootstrapViewMode,fileDraft:W.fileDraft,setFileDraft:W.setFileDraft,fileSaving:W.fileSaving,bootstrapFileLoading:W.bootstrapFileLoading,bootstrapEditorNonce:W.bootstrapEditorNonce,toolEntryDisable:G.toolEntryDisable,setToolEntryDisable:G.setToolEntryDisable,onSaveTools:()=>void lt(),onClearToolsEntry:()=>void ut(),skillsCatalogLoading:Ye.skillsCatalogLoading,catalogForPick:Ye.catalogForPick,skillsInherit:G.skillsInherit,setSkillsInherit:G.setSkillsInherit,skillsPick:G.skillsPick,setSkillsPick:G.setSkillsPick,onSaveSkills:()=>void dt(),bindingsLoading:K.bindingsLoading,agentBindings:K.agentBindings,bindChannelStatuses:K.bindChannelStatuses,bindChannelsLoading:K.bindChannelsLoading,useManualChannel:K.useManualChannel,newBindChannel:K.newBindChannel,setNewBindChannel:K.setNewBindChannel,bindSessionChats:K.bindSessionChats,bindSessionsLoading:K.bindSessionsLoading,newBindSessionIdx:K.newBindSessionIdx,setNewBindSessionIdx:K.setNewBindSessionIdx,newBindCustomPeer:K.newBindCustomPeer,setNewBindCustomPeer:K.setNewBindCustomPeer,refreshBindSessions:K.refreshBindSessions,onRemoveBinding:e=>void K.onRemoveBinding(e),onAddBinding:K.onAddBinding,cronLoading:Je.cronLoading,agentCronJobs:Je.agentCronJobs,onSetCronJobAgent:(e,t)=>void Je.onSetCronJobAgent(e,t)}}}function Ln(){let e=In();return e.hasToken?e.showPresetSetup&&e.data?(0,q.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col px-4 py-8`,children:(0,q.jsx)(dn,{existingAgentIds:new Set(e.data.agents.map(e=>e.id)),onComplete:e.onPresetSetupComplete,onSkip:e.onPresetSetupSkip})}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,q.jsx)(sn,{a:e.a}),e.displayError?(0,q.jsx)(`div`,{className:`rounded-lg border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-800 dark:border-red-900/50 dark:bg-red-950/40 dark:text-red-200`,children:e.displayError}):null,e.loading?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.loading}):e.data?(0,q.jsx)(on,{a:e.a,agents:e.data.agents,searchQuery:e.listSearchQuery,onOpenAgent:t=>e.navigate(se(t)),onChatWithAgent:t=>e.navigate(`/chat/new`,{state:{agentId:t.trim().toLowerCase()}}),onNewAgent:e.openAddAgentModal,busy:e.busy}):null,e.routeAgentId&&e.hasToken?(0,q.jsx)(gt,{open:!!e.routeAgentId,onOpenChange:e.onAgentModalOpenChange,a:e.a,title:e.modalTitle,subtitle:e.modalSubtitle,panel:e.panel,onPanelChange:e.setPanel,onFooterSave:()=>void e.handleModalFooterSave(),footerSaveDisabled:e.footerSaveDisabled,footerSavedFlash:e.savedFlash,busy:e.busy,children:e.loading||!e.data?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.loading}):(0,q.jsx)(nn,{...e.editorPanelProps})}):null,(0,q.jsx)(cn,{open:e.addAgentModalOpen,onOpenChange:t=>{e.setAddAgentModalOpen(t),t||(e.createWorkspaceSuggestedRef.current=``,e.setCreateDisplayName(``),e.setCreateAgentId(``),e.setCreateDescription(``),e.setCreateWorkspace(``),e.setCreateModel(``),e.setCreateModalError(null))},a:e.a,chat:e.chat,busy:e.busy,modalError:e.createModalError,createDisplayName:e.createDisplayName,setCreateDisplayName:e.setCreateDisplayName,createAgentId:e.createAgentId,setCreateAgentId:e.setCreateAgentId,createDescription:e.createDescription,setCreateDescription:e.setCreateDescription,createWorkspace:e.createWorkspace,setCreateWorkspace:e.setCreateWorkspace,createModel:e.createModel,setCreateModel:e.setCreateModel,onCreate:e.onCreate,onSuggestWorkspace:()=>e.applyCreateWorkspaceSuggestion()}),(0,q.jsx)(ft,{open:e.deleteDialogOpen,onOpenChange:t=>{e.setDeleteDialogOpen(t),t||(e.setDeleteTarget(null),e.setDeleteConfirmText(``))},busy:e.busy,deletePurge:e.deletePurge,deleteTarget:e.deleteTarget,deleteConfirmText:e.deleteConfirmText,onDeleteConfirmTextChange:e.setDeleteConfirmText,onConfirm:()=>{e.deleteTarget&&e.performDelete(e.deleteTarget,e.deletePurge)},onCancel:()=>e.setDeleteDialogOpen(!1),a:e.a})]}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-8`,children:[(0,q.jsx)(`h1`,{className:`text-lg font-semibold text-fg`,children:e.a.title}),(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:e.a.needToken})]})}function $({label:e,description:t,children:n}){return(0,q.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[(0,q.jsx)(`div`,{className:`text-sm font-medium text-fg`,children:e}),n,(0,q.jsx)(`p`,{className:`text-xs leading-relaxed text-fg-subtle`,children:t})]})}var Rn=[`off`,`minimal`,`low`,`medium`,`high`,`xhigh`,`adaptive`];function zn(e){let{a:t,chat:n,form:r,update:a}=e;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:B,title:t.cardModelsTitle,subtitle:t.label.model}),(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsx)($,{label:t.label.model,description:t.desc.model,children:(0,q.jsx)(ze,{value:r.model,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>a({model:e})})})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:i,title:t.cardGenerationTitle,subtitle:t.cardGenerationSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.maxTokens,description:t.desc.maxTokens,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.maxTokens,min:1,onChange:e=>a({maxTokens:Number.parseInt(e.target.value,10)||0})})}),(0,q.jsx)($,{label:t.label.temperature,description:t.desc.temperature,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.temperature,min:0,max:2,step:.1,onChange:e=>a({temperature:Number.parseFloat(e.target.value)||0})})}),(0,q.jsx)(`div`,{className:`sm:col-span-2`,children:(0,q.jsx)($,{label:t.label.maxToolIterations,description:t.desc.maxToolIterations,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),value:r.maxToolIterations,min:1,onChange:e=>a({maxToolIterations:Number.parseInt(e.target.value,10)||0})})})})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:E,title:t.cardBehaviorTitle,subtitle:t.cardBehaviorSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:t.label.thinkingDefault,description:t.desc.thinkingDefault,children:(0,q.jsx)(`select`,{className:Jt(),value:r.thinkingDefault,onChange:e=>a({thinkingDefault:e.target.value}),children:Rn.map(e=>(0,q.jsx)(`option`,{value:e,children:n.thinkingLevels[e]},e))})}),(0,q.jsx)($,{label:t.label.reasoningDefault,description:t.desc.reasoningDefault,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.reasoningDefault,onChange:e=>a({reasoningDefault:e.target.value}),children:[(0,q.jsx)(`option`,{value:`off`,children:t.reasoning.off}),(0,q.jsx)(`option`,{value:`on`,children:t.reasoning.on}),(0,q.jsx)(`option`,{value:`stream`,children:t.reasoning.stream})]})}),(0,q.jsx)($,{label:t.label.verboseDefault,description:t.desc.verboseDefault,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.verboseDefault,onChange:e=>a({verboseDefault:e.target.value}),children:[(0,q.jsx)(`option`,{value:`off`,children:t.verbose.off}),(0,q.jsx)(`option`,{value:`on`,children:t.verbose.on}),(0,q.jsx)(`option`,{value:`full`,children:t.verbose.full})]})})]})]})]})}function Bn(e){let{a:t,form:n,update:r}=e;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:me,title:t.cardBrowserTitle,subtitle:t.cardBrowserSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserEnabled,description:t.desc.browserEnabled,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserEnabled,onChange:e=>r({browserEnabled:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserEnabledOn})]})}),(0,q.jsx)($,{label:t.label.browserHeadless,description:t.desc.browserHeadless,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserHeadless,onChange:e=>r({browserHeadless:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserHeadlessOn})]})}),(0,q.jsx)($,{label:t.label.browserAllowPrivateUrls,description:t.desc.browserAllowPrivateUrls,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.browserAllowPrivateUrls,onChange:e=>r({browserAllowPrivateUrls:e.target.checked})}),(0,q.jsx)(`span`,{children:t.browserAllowPrivateOn})]})}),(0,q.jsx)($,{label:t.label.browserCommandTimeout,description:t.desc.browserCommandTimeout,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:5,value:n.browserCommandTimeout??``,placeholder:`30`,onChange:e=>{let t=e.target.value;r({browserCommandTimeout:t===``?void 0:Number.parseInt(t,10)})}})})]}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserCloudProvider,description:t.desc.browserCloudProvider,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.browserCloudProvider,onChange:e=>r({browserCloudProvider:e.target.value}),children:[(0,q.jsx)(`option`,{value:`local`,children:t.browserCloudProviderLocal}),(0,q.jsx)(`option`,{value:`browserbase`,children:t.browserCloudProviderBrowserbase}),(0,q.jsx)(`option`,{value:`browser-use`,children:t.browserCloudProviderBrowserUse})]})}),(0,q.jsx)($,{label:t.label.browserDialogPolicy,description:t.desc.browserDialogPolicy,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.browserDialogPolicy,onChange:e=>r({browserDialogPolicy:e.target.value}),children:[(0,q.jsx)(`option`,{value:`must_respond`,children:t.browserDialogPolicyMustRespond}),(0,q.jsx)(`option`,{value:`auto_dismiss`,children:t.browserDialogPolicyAutoDismiss}),(0,q.jsx)(`option`,{value:`auto_accept`,children:t.browserDialogPolicyAutoAccept})]})})]}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:t.label.browserCdpUrl,description:t.desc.browserCdpUrl,children:(0,q.jsx)(`input`,{type:`text`,className:Q(),value:n.browserCdpUrl,placeholder:`ws://localhost:9222`,onChange:e=>r({browserCdpUrl:e.target.value}),autoComplete:`off`})}),(0,q.jsx)($,{label:t.label.browserDialogTimeout,description:t.desc.browserDialogTimeout,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:n.browserDialogTimeout??``,placeholder:`300`,onChange:e=>{let t=e.target.value;r({browserDialogTimeout:t===``?void 0:Number.parseInt(t,10)})}})})]})]})]})})}function Vn(e,t){let[n,r]=(0,Z.useState)([]),[i,o]=(0,Z.useState)(!1);return(0,Z.useEffect)(()=>{if(!e||!t)return;let n=!1;return o(!0),a().then(e=>{n||r(Array.isArray(e.builtinToolIds)?e.builtinToolIds:[])}).catch(()=>{n||r([])}).finally(()=>{n||o(!1)}),()=>{n=!0}},[e,t]),{builtinToolIds:n,loading:i}}function Hn(e){let{a:t,form:n,update:r}=e,i=t.advanced,a=je(u(e=>e.language)).agentsSettings,o=!!Xe(e=>e.token),{builtinToolIds:s,loading:c}=Vn(!0,o),l=(0,Z.useMemo)(()=>new Set(n.toolsDisable.map(e=>e.trim()).filter(Boolean)),[n.toolsDisable]),d=(0,Z.useMemo)(()=>n.toolsDisable.map(e=>e.trim()).filter(Boolean).filter(e=>!s.includes(e)).sort((e,t)=>e.localeCompare(t)),[n.toolsDisable,s]),f=(0,Z.useCallback)(e=>{r({toolsDisable:$t(e)})},[r]),p=a.toolsDisableGroups,m=(0,Z.useCallback)(e=>p[e],[p]),h=(0,Z.useCallback)(e=>e in a.toolDescriptions?a.toolDescriptions[e]:``,[a.toolDescriptions]);return(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:rt,title:i.cardToolsDisableTitle,subtitle:i.cardToolsDisableSubtitle}),(0,q.jsx)($,{label:i.toolsDisableFieldLabel,description:i.toolsDisableHint,children:(0,q.jsx)(`div`,{className:`flex flex-col gap-3`,children:o?(0,q.jsx)(en,{mode:`defaults`,builtinToolIds:s,loading:c,disableSet:l,onDisableSetChange:f,unknownDisabledIds:d,getToolDescription:h,getGroupTitle:m,quickActionsDisabled:c,labels:{loadingBuiltin:i.toolsDisableLoadingBuiltin,emptyBuiltin:i.toolsDisableEmptyBuiltin,quickActionsLabel:i.toolsDisableQuickActionsLabel,quickEnableAll:i.toolsDisableQuickEnableAll,quickDisableAll:i.toolsDisableQuickDisableAll,quickReadOnlyWorkspace:i.toolsDisableQuickReadOnlyWorkspace,quickHighRiskOff:i.toolsDisableQuickHighRiskOff,quickNoOutbound:i.toolsDisableQuickNoOutbound,notInBuiltin:i.toolsDisableNotInBuiltin,lockedByDefaults:a.toolsLockedByDefaults}}):(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.needToken})})})]})}function Un(e){let{a:t,chat:n,form:r,update:i}=e,a=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:ee,title:a.cardWebExtractTitle,subtitle:a.cardWebExtractSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)(`div`,{className:`sm:col-span-2`,children:(0,q.jsx)($,{label:a.webExtractModel,description:a.webExtractModelDesc,children:(0,q.jsx)(ze,{value:r.webExtract.model,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>i({webExtract:{...r.webExtract,model:e}})})})}),(0,q.jsx)($,{label:a.webExtractMaxLength,description:a.webExtractMaxLengthDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.webExtract.maxLength??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({webExtract:{...r.webExtract,maxLength:t===``?void 0:Number.parseInt(t,10)}})}})})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Ke,title:a.cardDelegateTitle,subtitle:a.cardDelegateSubtitle}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.delegateEnabled,description:a.delegateEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.delegate.enabled,onChange:e=>i({delegate:{...r.delegate,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.delegateEnabledOn})]})}),(0,q.jsx)($,{label:a.executeCodeEnabled,description:a.executeCodeEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.executeCode.enabled,onChange:e=>i({executeCode:{...r.executeCode,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.executeCodeEnabledOn})]})})]})]}),(0,q.jsx)(Hn,{...e})]})}function Wn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:T,title:i.cardLimitsTitle,subtitle:i.cardLimitsSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.maxTaskDurationMs,description:i.maxTaskDurationMsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:240,step:1,value:n.maxTaskDurationMinutes??``,placeholder:i.maxTaskDurationPlaceholder,onChange:e=>{let t=e.target.value;if(t===``){r({maxTaskDurationMinutes:void 0});return}let n=Number.parseInt(t,10);Number.isNaN(n)||r({maxTaskDurationMinutes:Math.min(240,Math.max(1,n))})}})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.maxRequestsPerTurn,description:i.maxRequestsPerTurnDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:10,max:200,value:n.maxRequestsPerTurn,onChange:e=>r({maxRequestsPerTurn:Number.parseInt(e.target.value,10)||50})})}),(0,q.jsx)($,{label:i.maxToolFailuresPerTurn,description:i.maxToolFailuresPerTurnDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:20,value:n.maxToolFailuresPerTurn,onChange:e=>r({maxToolFailuresPerTurn:Number.parseInt(e.target.value,10)||3})})})]})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:S,title:i.cardCompactionTitle,subtitle:i.cardCompactionSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.compactionEnabled,description:i.compactionEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.compaction.enabled,onChange:e=>r({compaction:{...n.compaction,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:i.compactionEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.compactionMode,description:i.compactionModeDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:n.compaction.mode,onChange:e=>r({compaction:{...n.compaction,mode:e.target.value}}),children:[(0,q.jsx)(`option`,{value:`default`,children:i.compactionModeDefault}),(0,q.jsx)(`option`,{value:`safeguard`,children:i.compactionModeSafeguard})]})}),(0,q.jsx)($,{label:i.reserveTokens,description:i.reserveTokensDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1e3,value:n.compaction.reserveTokens,onChange:e=>r({compaction:{...n.compaction,reserveTokens:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:i.triggerThreshold,description:i.triggerThresholdDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:.5,max:.95,step:.05,value:n.compaction.triggerThreshold,onChange:e=>r({compaction:{...n.compaction,triggerThreshold:Number.parseFloat(e.target.value)||.8}})})}),(0,q.jsx)($,{label:i.minMessagesBeforeCompact,description:i.minMessagesBeforeCompactDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:n.compaction.minMessagesBeforeCompact,onChange:e=>r({compaction:{...n.compaction,minMessagesBeforeCompact:Number.parseInt(e.target.value,10)||10}})})}),(0,q.jsx)($,{label:i.keepRecentMessages,description:i.keepRecentMessagesDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:n.compaction.keepRecentMessages,onChange:e=>r({compaction:{...n.compaction,keepRecentMessages:Number.parseInt(e.target.value,10)||5}})})}),(0,q.jsx)($,{label:i.evictionWindow,description:i.evictionWindowDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:.1,max:.5,step:.05,value:n.compaction.evictionWindow,onChange:e=>r({compaction:{...n.compaction,evictionWindow:Number.parseFloat(e.target.value)||.2}})})}),(0,q.jsx)($,{label:i.retentionWindow,description:i.retentionWindowDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:3,max:20,value:n.compaction.retentionWindow,onChange:e=>r({compaction:{...n.compaction,retentionWindow:Number.parseInt(e.target.value,10)||6}})})})]})]})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:R,title:i.cardPruningTitle,subtitle:i.cardPruningSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:i.pruningEnabled,description:i.pruningEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:n.pruning.enabled,onChange:e=>r({pruning:{...n.pruning,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:i.pruningEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:i.maxToolResultChars,description:i.maxToolResultCharsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1e3,value:n.pruning.maxToolResultChars,onChange:e=>r({pruning:{...n.pruning,maxToolResultChars:Number.parseInt(e.target.value,10)||1e4}})})}),(0,q.jsx)($,{label:i.headKeepRatio,description:i.headKeepRatioDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,max:1,step:.05,value:n.pruning.headKeepRatio,onChange:e=>r({pruning:{...n.pruning,headKeepRatio:Number.parseFloat(e.target.value)||.3}})})}),(0,q.jsx)($,{label:i.tailKeepRatio,description:i.tailKeepRatioDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,max:1,step:.05,value:n.pruning.tailKeepRatio,onChange:e=>r({pruning:{...n.pruning,tailKeepRatio:Number.parseFloat(e.target.value)||.3}})})})]})]})]})]})}function Gn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Oe,title:i.cardParamsTitle,subtitle:i.cardParamsSubtitle}),(0,q.jsx)($,{label:i.paramsJson,description:i.paramsJsonDesc,children:(0,q.jsx)(`textarea`,{className:x(Q(),`min-h-[88px] resize-y font-mono text-xs`),value:n.paramsJson,placeholder:`{}`,onChange:e=>r({paramsJson:e.target.value})})})]})})}function Kn(e){let{a:t,chat:n,form:r,update:i}=e,a=t.advanced;return(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:De,title:a.cardMemoryTitle,subtitle:a.cardMemorySubtitle}),(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.memoryEnabled,description:a.memoryEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.enabled,onChange:e=>i({memory:{...r.memory,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.memoryEnabledOn})]})}),(0,q.jsx)($,{label:a.useEnhancedSystem,description:a.useEnhancedSystemDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.useEnhancedSystem,onChange:e=>i({memory:{...r.memory,useEnhancedSystem:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.useEnhancedSystemOn})]})}),(0,q.jsx)($,{label:a.userProfileEnabled,description:a.userProfileEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.memory.userProfileEnabled,onChange:e=>i({memory:{...r.memory,userProfileEnabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.userProfileEnabledOn})]})}),(0,q.jsx)($,{label:a.memoryProvider,description:a.memoryProviderDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.memory.provider,onChange:e=>i({memory:{...r.memory,provider:e.target.value}}),children:[(0,q.jsx)(`option`,{value:``,children:a.memoryProviderUnset}),(0,q.jsx)(`option`,{value:`none`,children:`none`}),(0,q.jsx)(`option`,{value:`stub`,children:`stub`})]})}),(0,q.jsx)($,{label:a.injectionFrequency,description:a.injectionFrequencyDesc,children:(0,q.jsxs)(`select`,{className:Jt(),value:r.memory.injectionFrequency,onChange:e=>i({memory:{...r.memory,injectionFrequency:e.target.value}}),children:[(0,q.jsx)(`option`,{value:``,children:a.injectionFrequencyUnset}),(0,q.jsx)(`option`,{value:`every-turn`,children:a.injectionEveryTurn}),(0,q.jsx)(`option`,{value:`first-turn`,children:a.injectionFirstTurn})]})}),(0,q.jsx)($,{label:a.memoryCharLimit,description:a.memoryCharLimitDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.memoryCharLimit??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,memoryCharLimit:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.userCharLimit,description:a.userCharLimitDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.userCharLimit??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,userCharLimit:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.contextCadence,description:a.contextCadenceDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.contextCadence??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,contextCadence:t===``?void 0:Number.parseInt(t,10)}})}})}),(0,q.jsx)($,{label:a.dialecticCadence,description:a.dialecticCadenceDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,value:r.memory.dialecticCadence??``,placeholder:`—`,onChange:e=>{let t=e.target.value;i({memory:{...r.memory,dialecticCadence:t===``?void 0:Number.parseInt(t,10)}})}})})]})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Ue,title:a.cardSessionSearchTitle,subtitle:a.cardSessionSearchSubtitle}),(0,q.jsx)($,{label:a.sessionSearchSummaryModel,description:a.sessionSearchSummaryModelDesc,children:(0,q.jsx)(ze,{value:r.sessionSearch.summaryModel,placeholder:n.modelPlaceholder,searchPlaceholder:n.modelSearchPlaceholder,noMatches:n.modelNoMatches,onChange:e=>i({sessionSearch:{...r.sessionSearch,summaryModel:e}})})})]}),(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:ve,title:a.cardReviewTitle,subtitle:a.cardReviewSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:a.reviewEnabled,description:a.reviewEnabledDesc,children:(0,q.jsxs)(`label`,{className:`flex cursor-pointer items-center gap-2 text-sm text-fg`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`size-3.5 shrink-0 rounded border-edge`,checked:r.backgroundReview.enabled,onChange:e=>i({backgroundReview:{...r.backgroundReview,enabled:e.target.checked}})}),(0,q.jsx)(`span`,{children:a.reviewEnabledOn})]})}),(0,q.jsxs)(`div`,{className:`grid gap-5 sm:grid-cols-2`,children:[(0,q.jsx)($,{label:a.memoryNudgeInterval,description:a.memoryNudgeIntervalDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:r.backgroundReview.memoryNudgeInterval,onChange:e=>i({backgroundReview:{...r.backgroundReview,memoryNudgeInterval:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:a.skillNudgeInterval,description:a.skillNudgeIntervalDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:0,value:r.backgroundReview.skillNudgeInterval,onChange:e=>i({backgroundReview:{...r.backgroundReview,skillNudgeInterval:Number.parseInt(e.target.value,10)||0}})})}),(0,q.jsx)($,{label:a.reviewMaxToolRounds,description:a.reviewMaxToolRoundsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:1,max:32,value:r.backgroundReview.maxToolRounds,onChange:e=>i({backgroundReview:{...r.backgroundReview,maxToolRounds:Number.parseInt(e.target.value,10)||8}})})}),(0,q.jsx)($,{label:a.reviewMaxHistoryMessages,description:a.reviewMaxHistoryMessagesDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:10,max:200,value:r.backgroundReview.maxHistoryMessages,onChange:e=>i({backgroundReview:{...r.backgroundReview,maxHistoryMessages:Number.parseInt(e.target.value,10)||80}})})}),(0,q.jsx)($,{label:a.reviewMaxDurationMs,description:a.reviewMaxDurationMsDesc,children:(0,q.jsx)(`input`,{type:`number`,className:Q(),min:30,max:600,step:1,value:Math.round((r.backgroundReview.maxDurationMs??12e4)/1e3),onChange:e=>i({backgroundReview:{...r.backgroundReview,maxDurationMs:(Number.parseInt(e.target.value,10)||120)*1e3}})})})]})]})]})]})}function qn(e){return(e.name||e.directoryId).trim()}function Jn(e,t){let n=[];for(let r of t)e.has(r)&&n.push(r);let r=[...e].filter(e=>!t.includes(e)).sort();return[...n,...r]}function Yn(e){let{a:t,form:n,update:r}=e,i=t.advanced,a=je(u(e=>e.language)).agentsSettings,o=!!Xe(e=>e.token),{catalogForPick:s,skillsCatalogLoading:c}=Nn(!0,o),l=(0,Z.useMemo)(()=>s.map(qn),[s]),d=n.skillsAllowlist.length>0,f=(0,Z.useMemo)(()=>new Set(n.skillsAllowlist.map(e=>e.trim()).filter(Boolean)),[n.skillsAllowlist]),p=(0,Z.useMemo)(()=>n.skillsAllowlist.filter(e=>e.trim()&&!l.includes(e.trim())),[n.skillsAllowlist,l]),m=(0,Z.useMemo)(()=>p.map(e=>({name:e.trim(),directoryId:e.trim()})),[p]),h=(0,Z.useMemo)(()=>[...m,...s],[m,s]),g=(0,Z.useCallback)(()=>{r({skillsAllowlist:[]})},[r]),_=(0,Z.useCallback)(()=>{r({skillsAllowlist:[...l]})},[r,l]),v=(0,Z.useCallback)((e,t)=>{let i=new Set(n.skillsAllowlist.map(e=>e.trim()).filter(Boolean));if(t?i.add(e):i.delete(e),i.size===0){r({skillsAllowlist:[]});return}r({skillsAllowlist:Jn(i,l)})},[n.skillsAllowlist,l,r]);return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:Me,title:i.cardSkillsTitle,subtitle:i.cardSkillsSubtitle}),(0,q.jsx)($,{label:i.skillsAllowlist,description:i.skillsAllowlistDesc,children:(0,q.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-3`,children:[(0,q.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:Yt,onClick:g,children:i.skillsAllowlistModeAll}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,className:Yt,disabled:!d&&l.length===0,onClick:()=>{d||_()},children:i.skillsAllowlistModeRestrict})]}),(0,q.jsx)($e,{to:L(`skills`),className:`shrink-0 text-xs font-medium text-accent-fg hover:underline`,children:a.skillsLibraryLink})]}),o?c?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.skillsCatalogLoading}):h.length===0?(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:a.skillsEmptyCatalog}):(0,q.jsx)(`div`,{className:x(`max-h-[min(50vh,22rem)] overflow-y-auto overscroll-contain pr-0.5`,!d&&`pointer-events-none opacity-50`),children:(0,q.jsx)(`ul`,{className:`flex flex-col gap-2.5 text-sm`,role:`list`,children:h.filter(e=>qn(e)).map(e=>{let t=qn(e),n=d&&f.has(t),r=typeof e.description==`string`?e.description.trim():``,o=r||a.skillsNoDescription,s=!l.includes(t);return(0,q.jsx)(`li`,{className:`h-16 shrink-0 overflow-hidden rounded-xl border border-edge-subtle bg-surface-panel/60 px-3 dark:border-edge-subtle`,children:(0,q.jsxs)(`label`,{className:`flex h-full cursor-pointer items-center gap-3 text-sm`,children:[(0,q.jsx)(`input`,{type:`checkbox`,className:`shrink-0 rounded border-edge`,checked:n,disabled:!d,onChange:()=>v(t,!n)}),(0,q.jsxs)(`div`,{className:`min-w-0 flex-1 overflow-hidden`,children:[(0,q.jsxs)(`div`,{className:`truncate font-mono text-xs font-medium text-fg`,title:t,children:[t,s?(0,q.jsxs)(`span`,{className:`ml-1.5 font-sans text-[10px] font-normal text-fg-muted`,children:[`(`,i.skillsAllowlistNotInCatalog,`)`]}):null]}),(0,q.jsx)(`p`,{className:x(`mt-0.5 truncate text-xs leading-tight text-fg-muted`,!r&&`italic text-fg-subtle`),title:o,children:o})]})]})},t)})})}):(0,q.jsx)(`p`,{className:`text-xs text-fg-muted`,children:t.needToken})]})})]})})}function Xn(e){let{a:t,form:n,update:r}=e,i=t.advanced;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:W,title:i.cardSystemPromptTitle,subtitle:i.cardSystemPromptSubtitle}),(0,q.jsx)($,{label:i.systemPromptOverride,description:i.systemPromptOverrideDesc,children:(0,q.jsx)(`textarea`,{className:x(Q(),`min-h-[140px] resize-y font-mono text-xs`),value:n.systemPromptOverride,placeholder:i.systemPromptPlaceholder,onChange:e=>r({systemPromptOverride:e.target.value})})})]})})}function Zn(e){let{a:t,form:n,update:r}=e;return(0,q.jsx)(`div`,{className:`flex flex-col gap-5`,children:(0,q.jsxs)(J,{children:[(0,q.jsx)(Y,{icon:fe,title:t.cardWorkspaceTitle,subtitle:t.cardWorkspaceSubtitle}),(0,q.jsxs)(`div`,{className:`flex flex-col gap-5`,children:[(0,q.jsx)($,{label:t.label.workspace,description:t.desc.workspace,children:(0,q.jsx)(`input`,{type:`text`,className:Q(),value:n.workspace,onChange:e=>r({workspace:e.target.value}),autoComplete:`off`})}),(0,q.jsx)($,{label:t.label.mediaMaxMb,description:t.desc.mediaMaxMb,children:(0,q.jsx)(`input`,{type:`number`,min:1,step:1,className:Q(),value:n.mediaMaxMb??``,placeholder:`20`,onChange:e=>{let t=e.target.value;r({mediaMaxMb:t===``?void 0:Number(t)})}})})]})]})})}function Qn(e){let{sectionId:t,intro:n,vm:r,children:i}=e,a=je(u(e=>e.language)),o=a.agentSettings,s=a.settingsSections[t]??t;return r.hasToken?r.loading?(0,q.jsxs)(`div`,{className:`mx-auto w-full max-w-app-main px-4 py-8`,children:[(0,q.jsx)(`div`,{className:`h-8 w-48 animate-pulse rounded bg-surface-hover`}),(0,q.jsx)(`div`,{className:`mt-6 h-32 animate-pulse rounded-xl bg-surface-hover`}),(0,q.jsx)(`p`,{className:`mt-4 text-sm text-fg-muted`,children:a.logs.loading})]}):r.form?(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-6 px-4 py-8`,children:[(0,q.jsxs)(`header`,{className:`flex flex-col gap-2 sm:flex-row sm:items-start sm:justify-between`,children:[(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`text-lg font-semibold tracking-tight text-fg`,children:s}),(0,q.jsx)(`p`,{className:`mt-1 text-sm leading-relaxed text-fg-muted`,children:n}),(0,q.jsx)(`p`,{className:`mt-1 text-xs text-fg-subtle`,children:o.sectionDesc})]}),(0,q.jsxs)(`div`,{className:`flex shrink-0 flex-wrap items-center justify-end gap-2`,children:[r.saveOk?(0,q.jsx)(`span`,{className:`text-sm text-fg-muted`,children:o.saved}):null,(0,q.jsx)(k,{type:`button`,variant:`secondary`,disabled:!r.dirty||r.saving,onClick:r.discard,children:o.discard}),(0,q.jsx)(k,{type:`button`,variant:`primary`,disabled:!r.dirty||r.saving,onClick:()=>void r.save(),children:r.saving?o.saving:o.save})]})]}),r.error?(0,q.jsx)(`div`,{className:`rounded-md border border-red-200 bg-red-50 px-3 py-2 text-sm text-red-700 dark:border-red-900/50 dark:bg-red-950/50 dark:text-red-400`,role:`alert`,children:r.error}):null,(0,q.jsx)(`div`,{className:`flex min-w-0 flex-col gap-5 pb-8`,children:i})]}):(0,q.jsxs)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:[(0,q.jsx)(`p`,{className:`text-sm text-fg-muted`,children:r.error??r.fetchError??o.loadError}),(0,q.jsx)(k,{type:`button`,variant:`secondary`,onClick:()=>void r.mutate(),children:a.logs.refresh})]}):(0,q.jsx)(`div`,{className:`mx-auto flex w-full max-w-app-main flex-col gap-3 px-4 py-10`,children:(0,q.jsxs)(`div`,{className:`flex items-start gap-3 rounded-2xl bg-surface-base p-6`,children:[(0,q.jsx)(B,{className:`mt-0.5 size-5 shrink-0 text-fg-subtle`,strokeWidth:1.75}),(0,q.jsxs)(`div`,{children:[(0,q.jsx)(`h1`,{className:`text-base font-semibold text-fg`,children:s}),(0,q.jsx)(`p`,{className:`mt-1 text-sm text-fg-muted`,children:o.needToken})]})]})})}var $n={enabled:!0,mode:`default`,reserveTokens:8e3,triggerThreshold:.8,minMessagesBeforeCompact:10,keepRecentMessages:5,evictionWindow:.2,retentionWindow:6},er={enabled:!0,maxToolResultChars:1e4,headKeepRatio:.3,tailKeepRatio:.3},tr={enabled:!0,useEnhancedSystem:!0,userProfileEnabled:!0,provider:``,injectionFrequency:``,memoryCharLimit:void 0,userCharLimit:void 0,contextCadence:void 0,dialecticCadence:void 0},nr={summaryModel:``},rr={enabled:!1,memoryNudgeInterval:10,skillNudgeInterval:10,maxToolRounds:8,maxHistoryMessages:80,maxDurationMs:12e4},ir={model:``,maxLength:void 0};function ar(e){if(e==null)return``;if(typeof e==`string`)return e;if(typeof e==`object`&&e&&`primary`in e){let t=e.primary;return typeof t==`string`?t:``}return``}function or(e){if(typeof e!=`object`||!e||!(`fallbacks`in e))return[];let t=e.fallbacks;return Array.isArray(t)?t.filter(e=>typeof e==`string`&&e.trim().length>0):[]}function sr(e){if(!e||typeof e!=`object`)return;let t=e,n=t.payload;if(n&&typeof n==`object`&&`config`in n)return n.config;if(`config`in t)return t.config}function cr(e){return e===!0||e===`true`||e===1}function lr(e){let t=e.browser;if(!t||typeof t!=`object`||Array.isArray(t))return{browserEnabled:!1,browserHeadless:!0,browserAllowPrivateUrls:!1,browserCommandTimeout:void 0,browserCloudProvider:`local`,browserCdpUrl:``,browserDialogPolicy:`auto_dismiss`,browserDialogTimeout:void 0};let n=t,r=cr(n.enabled),i=n.headless,a=!(i===!1||i===`false`||i===0),o=cr(n.allowPrivateUrls),s=typeof n.commandTimeout==`number`&&Number.isFinite(n.commandTimeout)&&n.commandTimeout>=5?Math.floor(n.commandTimeout):void 0,c=n.cloudProvider,l=c===`browserbase`||c===`browser-use`?c:`local`,u=typeof n.cdpUrl==`string`?n.cdpUrl:``,d=n.dialogPolicy;return{browserEnabled:r,browserHeadless:a,browserAllowPrivateUrls:o,browserCommandTimeout:s,browserCloudProvider:l,browserCdpUrl:u,browserDialogPolicy:d===`must_respond`||d===`auto_accept`?d:`auto_dismiss`,browserDialogTimeout:typeof n.dialogTimeoutSeconds==`number`&&Number.isFinite(n.dialogTimeoutSeconds)&&n.dialogTimeoutSeconds>=1?Math.floor(n.dialogTimeoutSeconds):void 0}}function ur(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...$n};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:$n.enabled,mode:t.mode===`safeguard`?`safeguard`:`default`,reserveTokens:typeof t.reserveTokens==`number`&&Number.isFinite(t.reserveTokens)?Math.floor(t.reserveTokens):$n.reserveTokens,triggerThreshold:typeof t.triggerThreshold==`number`&&Number.isFinite(t.triggerThreshold)?t.triggerThreshold:$n.triggerThreshold,minMessagesBeforeCompact:typeof t.minMessagesBeforeCompact==`number`&&Number.isFinite(t.minMessagesBeforeCompact)?Math.floor(t.minMessagesBeforeCompact):$n.minMessagesBeforeCompact,keepRecentMessages:typeof t.keepRecentMessages==`number`&&Number.isFinite(t.keepRecentMessages)?Math.floor(t.keepRecentMessages):$n.keepRecentMessages,evictionWindow:typeof t.evictionWindow==`number`&&Number.isFinite(t.evictionWindow)?t.evictionWindow:$n.evictionWindow,retentionWindow:typeof t.retentionWindow==`number`&&Number.isFinite(t.retentionWindow)?Math.floor(t.retentionWindow):$n.retentionWindow}}function dr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...er};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:er.enabled,maxToolResultChars:typeof t.maxToolResultChars==`number`&&Number.isFinite(t.maxToolResultChars)?Math.floor(t.maxToolResultChars):er.maxToolResultChars,headKeepRatio:typeof t.headKeepRatio==`number`&&Number.isFinite(t.headKeepRatio)?t.headKeepRatio:er.headKeepRatio,tailKeepRatio:typeof t.tailKeepRatio==`number`&&Number.isFinite(t.tailKeepRatio)?t.tailKeepRatio:er.tailKeepRatio}}function fr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...tr};let t=e,n=t.provider,r=n===`none`||n===`stub`?n:``,i=t.injectionFrequency,a=i===`every-turn`||i===`first-turn`?i:``;return{enabled:typeof t.enabled==`boolean`?t.enabled:tr.enabled,useEnhancedSystem:typeof t.useEnhancedSystem==`boolean`?t.useEnhancedSystem:tr.useEnhancedSystem,userProfileEnabled:typeof t.userProfileEnabled==`boolean`?t.userProfileEnabled:tr.userProfileEnabled,provider:r,injectionFrequency:a,memoryCharLimit:typeof t.memoryCharLimit==`number`&&t.memoryCharLimit>0?Math.floor(t.memoryCharLimit):void 0,userCharLimit:typeof t.userCharLimit==`number`&&t.userCharLimit>0?Math.floor(t.userCharLimit):void 0,contextCadence:typeof t.contextCadence==`number`&&t.contextCadence>=1?Math.floor(t.contextCadence):void 0,dialecticCadence:typeof t.dialecticCadence==`number`&&t.dialecticCadence>=1?Math.floor(t.dialecticCadence):void 0}}function pr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...nr};let t=e;return{summaryModel:typeof t.summaryModel==`string`?t.summaryModel:``}}function mr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...rr};let t=e;return{enabled:typeof t.enabled==`boolean`?t.enabled:rr.enabled,memoryNudgeInterval:typeof t.memoryNudgeInterval==`number`&&t.memoryNudgeInterval>=0?Math.floor(t.memoryNudgeInterval):rr.memoryNudgeInterval,skillNudgeInterval:typeof t.skillNudgeInterval==`number`&&t.skillNudgeInterval>=0?Math.floor(t.skillNudgeInterval):rr.skillNudgeInterval,maxToolRounds:typeof t.maxToolRounds==`number`&&t.maxToolRounds>=1&&t.maxToolRounds<=32?Math.floor(t.maxToolRounds):rr.maxToolRounds,maxHistoryMessages:typeof t.maxHistoryMessages==`number`&&t.maxHistoryMessages>=10&&t.maxHistoryMessages<=200?Math.floor(t.maxHistoryMessages):rr.maxHistoryMessages,maxDurationMs:typeof t.maxDurationMs==`number`&&t.maxDurationMs>=3e4&&t.maxDurationMs<=6e5?Math.floor(t.maxDurationMs):rr.maxDurationMs}}function hr(e){if(!e||typeof e!=`object`||Array.isArray(e))return{...ir};let t=e;return{model:typeof t.model==`string`?t.model:``,maxLength:typeof t.maxLength==`number`&&t.maxLength>0?t.maxLength:void 0}}function gr(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return{enabled:t};let n=e;return{enabled:typeof n.enabled==`boolean`?n.enabled:t}}function _r(e){return Array.isArray(e)?e.filter(e=>typeof e==`string`):[]}function vr(e){if(e==null)return``;if(typeof e==`string`){let t=e.trim();if(!t)return``;try{let e=JSON.parse(t);if(typeof e==`object`&&e&&!Array.isArray(e))return JSON.stringify(e,null,2)}catch{return t}return``}if(typeof e==`object`&&!Array.isArray(e))try{return JSON.stringify(e,null,2)}catch{return``}return``}function yr(e){let t=e.imageGenerationModelTimeoutMs;if(typeof t==`number`&&Number.isFinite(t)&&t>0)return Math.floor(t);let n=e.imageGenerationModel;if(n&&typeof n==`object`&&!Array.isArray(n)){let e=n.timeoutMs;if(typeof e==`number`&&Number.isFinite(e)&&e>0)return Math.floor(e)}return null}function br(e){if(e.imageGenerationModelAutoProviderFallback===!0)return!0;let t=e.imageGenerationModel;return t&&typeof t==`object`&&!Array.isArray(t)?t.autoProviderFallback===!0:!1}function xr(e){let t=e&&typeof e==`object`&&!Array.isArray(e)&&`agents`in e?e.agents:void 0,n=t&&typeof t==`object`&&!Array.isArray(t)&&`defaults`in t?t.defaults:void 0,r=n&&typeof n==`object`&&!Array.isArray(n)?n:{},i=r.modelFallbacks,a=Array.isArray(i)&&i.every(e=>typeof e==`string`)?i:or(r.model),o=r.imageModelFallbacks,s=Array.isArray(o)&&o.every(e=>typeof e==`string`)?o:or(r.imageModel),c=r.imageGenerationModelFallbacks,l=Array.isArray(c)&&c.every(e=>typeof e==`string`)?c:or(r.imageGenerationModel),u=lr(r),d=typeof r.maxTaskDurationMs==`number`&&Number.isFinite(r.maxTaskDurationMs)?r.maxTaskDurationMs:void 0,f=d===void 0?void 0:Math.round(d/6e4);return{model:ar(r.model),modelFallbacks:a,imageModel:ar(r.imageModel),imageModelFallbacks:s,imageGenerationModel:ar(r.imageGenerationModel),imageGenerationModelFallbacks:l,imageGenerationModelTimeoutMs:yr(r),imageGenerationModelAutoProviderFallback:br(r),mediaMaxMb:typeof r.mediaMaxMb==`number`&&!Number.isNaN(r.mediaMaxMb)?r.mediaMaxMb:void 0,maxTokens:typeof r.maxTokens==`number`?r.maxTokens:8192,temperature:typeof r.temperature==`number`?r.temperature:.7,maxToolIterations:typeof r.maxToolIterations==`number`?r.maxToolIterations:20,maxTaskDurationMinutes:f,maxRequestsPerTurn:typeof r.maxRequestsPerTurn==`number`?r.maxRequestsPerTurn:50,maxToolFailuresPerTurn:typeof r.maxToolFailuresPerTurn==`number`?r.maxToolFailuresPerTurn:3,workspace:typeof r.workspace==`string`?r.workspace:`~/.xopc/workspace`,...u,thinkingDefault:typeof r.thinkingDefault==`string`?r.thinkingDefault:`medium`,reasoningDefault:typeof r.reasoningDefault==`string`?r.reasoningDefault:`stream`,verboseDefault:typeof r.verboseDefault==`string`?r.verboseDefault:`full`,compaction:ur(r.compaction),pruning:dr(r.pruning),memory:fr(r.memory),sessionSearch:pr(r.sessionSearch),backgroundReview:mr(r.backgroundReview),webExtract:hr(r.webExtract),delegate:gr(r.delegate,!1),executeCode:gr(r.executeCode,!1),systemPromptOverride:typeof r.systemPromptOverride==`string`?r.systemPromptOverride:``,skillsAllowlist:_r(r.skills),toolsDisable:(()=>{let e=r.tools;if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=e.disable;return _r(t)})(),paramsJson:vr(r.params)}}function Sr(e){let t={enabled:e.enabled,useEnhancedSystem:e.useEnhancedSystem,userProfileEnabled:e.userProfileEnabled};return e.provider===`none`||e.provider===`stub`?t.provider=e.provider:t.provider=null,e.injectionFrequency===`every-turn`||e.injectionFrequency===`first-turn`?t.injectionFrequency=e.injectionFrequency:t.injectionFrequency=null,t.memoryCharLimit=e.memoryCharLimit??null,t.userCharLimit=e.userCharLimit??null,t.contextCadence=e.contextCadence??null,t.dialecticCadence=e.dialecticCadence??null,t}function Cr(e){let t=e.trim();if(!t)return null;let n=JSON.parse(t);if(n===null)return null;if(typeof n!=`object`||Array.isArray(n))throw Error(`params must be a JSON object`);return n}async function wr(){return xr(sr(await H(z(`/api/config`)))??{})}async function Tr(e){let t=e.modelFallbacks.map(e=>e.trim()).filter(Boolean),n=t.length>0?{primary:e.model,fallbacks:t}:e.model,r=e.imageModelFallbacks.map(e=>e.trim()).filter(Boolean),i=r.length>0&&e.imageModel.trim()?{primary:e.imageModel.trim(),fallbacks:r}:e.imageModel||``,a=e.imageGenerationModelFallbacks.map(e=>e.trim()).filter(Boolean),o=e.imageGenerationModel.trim(),s=typeof e.imageGenerationModelTimeoutMs==`number`&&e.imageGenerationModelTimeoutMs>0?Math.floor(e.imageGenerationModelTimeoutMs):null,c=e.imageGenerationModelAutoProviderFallback===!0,l=(()=>{let e={};return o&&(e.primary=o),a.length>0&&(e.fallbacks=a),s&&(e.timeoutMs=s),c&&(e.autoProviderFallback=!0),Object.keys(e).length===0?``:Object.keys(e).length===1&&typeof e.primary==`string`?e.primary:e})(),u=e.maxTaskDurationMinutes===void 0||e.maxTaskDurationMinutes===null?null:(()=>{let t=Math.floor(e.maxTaskDurationMinutes)*6e4;return t<6e4||t>144e5?null:t})(),d=e.skillsAllowlist.map(e=>e.trim()).filter(Boolean),f=e.toolsDisable.map(e=>e.trim()).filter(Boolean),p=Cr(e.paramsJson),m=p===null||Object.keys(p).length===0?null:p,h={model:n,imageModel:i,imageGenerationModel:l,mediaMaxMb:e.mediaMaxMb??null,maxTokens:e.maxTokens,temperature:e.temperature,maxToolIterations:e.maxToolIterations,maxTaskDurationMs:u,maxRequestsPerTurn:e.maxRequestsPerTurn,maxToolFailuresPerTurn:e.maxToolFailuresPerTurn,workspace:e.workspace,browser:{enabled:e.browserEnabled,headless:e.browserHeadless,allowPrivateUrls:e.browserAllowPrivateUrls,commandTimeout:e.browserCommandTimeout??null,cloudProvider:e.browserCloudProvider===`local`?null:e.browserCloudProvider,cdpUrl:e.browserCdpUrl.trim()||null,dialogPolicy:e.browserDialogPolicy===`auto_dismiss`?null:e.browserDialogPolicy,dialogTimeoutSeconds:e.browserDialogTimeout??null},thinkingDefault:e.thinkingDefault,reasoningDefault:e.reasoningDefault,verboseDefault:e.verboseDefault,compaction:{...e.compaction},pruning:{...e.pruning},memory:Sr(e.memory),sessionSearch:{summaryModel:e.sessionSearch.summaryModel.trim()||null},backgroundReview:{enabled:e.backgroundReview.enabled,memoryNudgeInterval:e.backgroundReview.memoryNudgeInterval,skillNudgeInterval:e.backgroundReview.skillNudgeInterval,maxToolRounds:e.backgroundReview.maxToolRounds,maxHistoryMessages:e.backgroundReview.maxHistoryMessages,maxDurationMs:e.backgroundReview.maxDurationMs},webExtract:{model:e.webExtract.model.trim()||null,maxLength:e.webExtract.maxLength??null},delegate:{enabled:e.delegate.enabled},executeCode:{enabled:e.executeCode.enabled},systemPromptOverride:e.systemPromptOverride.trim()||null,skills:d.length>0?d:null,tools:{disable:f.length>0?f:null},params:m};await H(z(`/api/config`),{method:`PATCH`,body:JSON.stringify({agents:{defaults:h}})}),tt()}function Er(e){let t=!!Xe(e=>e.token),[n,r]=(0,Z.useState)(null),[i,a]=(0,Z.useState)(null),[o,s]=(0,Z.useState)(!1),[c,l]=(0,Z.useState)(null),[u,d]=(0,Z.useState)(!1),f=(0,Z.useRef)(!1),{data:p,error:m,isLoading:h,mutate:g}=ue(t),_=(0,Z.useMemo)(()=>p?.payload?.config===void 0?null:xr(p.payload.config),[p]);(0,Z.useEffect)(()=>{if(!t){r(null),a(null),f.current=!1;return}if(_!==null&&!f.current){let e=structuredClone(_);r(e),a(structuredClone(e))}},[t,_]);let v=!!(t&&h&&p===void 0&&!m),y=m instanceof Error?m.message:m?String(m):null,b=(0,Z.useMemo)(()=>!n||!i?!1:JSON.stringify(n)!==JSON.stringify(i),[n,i]);return{hasToken:t,loading:v,fetchError:y,form:n,update:(0,Z.useCallback)(e=>{f.current=!0,r(t=>t?{...t,...e}:null)},[]),dirty:b,saving:o,saveOk:u,error:c,setError:l,save:(0,Z.useCallback)(async()=>{if(!n||o)return!1;s(!0),l(null),d(!1);try{try{Cr(n.paramsJson)}catch(t){return l(t instanceof SyntaxError?e.advanced.paramsInvalidJson:t instanceof Error?t.message:e.advanced.paramsInvalidJson),!1}return await Tr(n),f.current=!1,a(structuredClone(n)),d(!0),window.setTimeout(()=>d(!1),2500),!0}catch(t){return l(t instanceof Error?t.message:e.saveError),!1}finally{s(!1)}},[n,o,e.saveError,e.advanced]),discard:(0,Z.useCallback)(()=>{i&&(f.current=!1,r(structuredClone(i)),l(null),d(!1))},[i]),mutate:g}}function Dr(){let e=je(u(e=>e.language)),t=e.agentSettings,n=e.chat,r=Er(t);return{vm:r,pp:(0,Z.useMemo)(()=>r.form?{form:r.form,update:r.update,a:t,chat:n}:null,[r.form,r.update,t,n]),a:t}}function Or(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-chat`,intro:n.routeIntro.chat,vm:e,children:t?(0,q.jsx)(zn,{...t}):null})}function kr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-workspace`,intro:n.routeIntro.workspace,vm:e,children:t?(0,q.jsx)(Zn,{...t}):null})}function Ar(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-browser`,intro:n.routeIntro.browser,vm:e,children:t?(0,q.jsx)(Bn,{...t}):null})}function jr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-runtime`,intro:n.routeIntro.runtime,vm:e,children:t?(0,q.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,q.jsx)(Wn,{...t}),(0,q.jsx)(Kn,{...t})]}):null})}function Mr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-tools`,intro:n.routeIntro.tools,vm:e,children:t?(0,q.jsxs)(`div`,{className:`flex flex-col gap-8`,children:[(0,q.jsx)(Un,{...t}),(0,q.jsx)(Yn,{...t}),(0,q.jsx)(Gn,{...t})]}):null})}function Nr(){let{vm:e,pp:t,a:n}=Dr();return(0,q.jsx)(Qn,{sectionId:`agent-system-prompt`,intro:n.routeIntro.systemPrompt,vm:e,children:t?(0,q.jsx)(Xn,{...t}):null})}export{Ln as AgentsSettingsPanel,En as _,Mr as a,_t as b,wr as c,$ as d,Cn as f,Tn as g,wn as h,Nr as i,Cr as l,Dn as m,Or as n,kr as o,On as p,jr as r,Er as s,Ar as t,Tr as u,J as v,Y as y};
|
|
216
|
-
//# sourceMappingURL=agents-
|
|
216
|
+
//# sourceMappingURL=agents-Bk2uuFvC.js.map
|