zen-gitsync 2.18.11 → 2.18.13
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 +14 -14
- package/package.json +6 -1
- package/src/cli/ai/agent.js +1385 -1385
- package/src/cli/ai/context.js +431 -431
- package/src/cli/ai/context.test.js +376 -376
- package/src/cli/ai/turn.js +190 -190
- package/src/ui/public/assets/AgentView-CuEM6xzC.js +11 -0
- package/src/ui/public/assets/{AgentView-CbBLjlfr.css → AgentView-D6MJOrJt.css} +1 -1
- package/src/ui/public/assets/AppVersionBadge-BK1Fiv3b.js +2 -0
- package/src/ui/public/assets/BranchSelector-avxY_m05.js +1 -0
- package/src/ui/public/assets/CommitForm-hThTnoNt.js +14 -0
- package/src/ui/public/assets/CommonDialog-zaBdFGFH.js +1 -0
- package/src/ui/public/assets/CopySessionButton-CAxaqLQL.js +21 -0
- package/src/ui/public/assets/EditorView-B7Rq9QV1.css +1 -0
- package/src/ui/public/assets/EditorView-iSA2SXJR.js +37 -0
- package/src/ui/public/assets/{FlowExecutionViewer-D7FaZSHd.js → FlowExecutionViewer-C5ylYV2C.js} +1 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CiQ07ZQv.js +21 -0
- package/src/ui/public/assets/LogList-Sjb8vmvq.js +7 -0
- package/src/ui/public/assets/MindmapView-B5rChFMP.js +2 -0
- package/src/ui/public/assets/MonitorView-Dcc-i2Fo.js +3 -0
- package/src/ui/public/assets/ProjectStartupButton-fz6eLCZU.js +1 -0
- package/src/ui/public/assets/RecentDirectoriesChat-BDnNp9jh.js +3 -0
- package/src/ui/public/assets/RemoteManagerDialog-NA1jRC7O.js +4 -0
- package/src/ui/public/assets/RemoteRepoCard-CKm4KqHs.js +7 -0
- package/src/ui/public/assets/SourceMapView-Drfato_u.js +3 -0
- package/src/ui/public/assets/SvgIcon-DR_79iBR.js +1 -0
- package/src/ui/public/assets/UserInputNode-DroKvDOa.js +1 -0
- package/src/ui/public/assets/WorkbenchView-CW7OACCU.js +326 -0
- package/src/ui/public/assets/WorkbenchView-C_u6BptZ.css +1 -0
- package/src/ui/public/assets/_plugin-vue_export-helper-bQQyMRS6.js +19 -0
- package/src/ui/public/assets/agentConversations-wYAksLq1.js +10 -0
- package/src/ui/public/assets/{configStore-Z6Z8hVMO.js → configStore-BeHB-gV4.js} +1 -1
- package/src/ui/public/assets/{css.worker-BDCmgL4U.js → css.worker-DFdt6_zu.js} +9 -9
- package/src/ui/public/assets/{dagre-CiGYsZhd.js → dagre-CXi8gaG9.js} +4 -4
- package/src/ui/public/assets/editor.worker-O-CH8JUO.js +26 -0
- package/src/ui/public/assets/{element-plus-D-6gla1z.css → element-plus-DJ3ZQa98.css} +1 -1
- package/src/ui/public/assets/element-plus-DgSY_Wt4.js +48 -0
- package/src/ui/public/assets/{flow-mindmap-C-X_QPQI.js → flow-mindmap-BsTRkgat.js} +56 -56
- package/src/ui/public/assets/{html.worker-DG8hnSJR.js → html.worker-JUzsMP-j.js} +8 -8
- package/src/ui/public/assets/index-BRQstBzy.js +211 -0
- package/src/ui/public/assets/json.worker-B4dEhy0e.js +58 -0
- package/src/ui/public/assets/{monaco-CbN14ZVi.js → monaco-CnWeufxc.js} +6 -6
- package/src/ui/public/assets/{office-docx-8MF5-THx.js → office-docx-EUfAIM4w.js} +6 -6
- package/src/ui/public/assets/{office-excel-BTzQyK6y.js → office-excel-BZW0bXQo.js} +1 -1
- package/src/ui/public/assets/{office-pptx-DhxvWA0D.js → office-pptx-CBvDNZ4m.js} +3 -3
- package/src/ui/public/assets/{ts.worker-DgFMIcEs.js → ts.worker-CmEKzkmF.js} +49 -49
- package/src/ui/public/assets/useOrchestrator-Bhl7DGKW.js +1 -0
- package/src/ui/public/assets/{vendor-Bd8DyOF9.css → vendor-CSFGMcMB.css} +1 -1
- package/src/ui/public/assets/{vendor-Cd7TGb0b.js → vendor-CZlKgriV.js} +43 -43
- package/src/ui/public/assets/vue-flow-DawpR_uk.js +39 -0
- package/src/ui/public/index.html +13 -13
- package/src/ui/server/routes/config.js +1348 -1348
- package/src/ui/server/routes/fileOpen.js +85 -16
- package/src/ui/server/routes/workbench/agentChat.js +752 -752
- package/src/ui/server/routes/workbench/agentChatShared.test.js +496 -497
- package/src/ui/server/routes/workbench/agentRoutes.js +13 -1
- package/src/ui/server/routes/workbench/agentRoutes.test.js +75 -0
- package/src/ui/server/routes/workbench/dispatchInstruction.js +6 -7
- package/src/ui/server/routes/workbench/dispatchInstruction.test.js +3 -19
- package/src/ui/server/routes/workbench/index.js +8 -17
- package/src/ui/server/routes/workbench/orchestratorPrompt.test.js +2 -2
- package/src/ui/server/routes/workbench/orchestratorStore.js +2 -16
- package/src/ui/server/routes/workbench/projectRegistry.test.js +1 -5
- package/src/ui/server/routes/workbench/scheduleRoutes.js +2 -2
- package/src/ui/server/routes/workbench/shared.js +18 -1
- package/src/ui/public/assets/AgentView-D3I3D3YR.js +0 -11
- package/src/ui/public/assets/AppVersionBadge-CrDf0lYs.js +0 -2
- package/src/ui/public/assets/BranchSelector-DEHLVln4.js +0 -1
- package/src/ui/public/assets/CommitForm-D2rVFZf2.js +0 -14
- package/src/ui/public/assets/CommonDialog-CV7T8OCb.js +0 -1
- package/src/ui/public/assets/CopySessionButton-BbVtrOa7.js +0 -21
- package/src/ui/public/assets/EditorView-BiNRO222.css +0 -1
- package/src/ui/public/assets/EditorView-CiW0kkpS.js +0 -37
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BR3cPhyU.js +0 -21
- package/src/ui/public/assets/LogList-D_Q3pyMF.js +0 -7
- package/src/ui/public/assets/MindmapView-A4QZ6_c3.js +0 -2
- package/src/ui/public/assets/MonitorView-BljWw76B.js +0 -3
- package/src/ui/public/assets/ProjectStartupButton-Be5DovFL.js +0 -1
- package/src/ui/public/assets/RecentDirectoriesChat-DN7ruCU7.js +0 -3
- package/src/ui/public/assets/RemoteManagerDialog-BSCNy4RC.js +0 -4
- package/src/ui/public/assets/RemoteRepoCard-CeCRQp9p.js +0 -7
- package/src/ui/public/assets/SourceMapView-B_S-vspy.js +0 -3
- package/src/ui/public/assets/SvgIcon-9IbiSszR.js +0 -1
- package/src/ui/public/assets/UserInputNode-DASGnUCl.js +0 -1
- package/src/ui/public/assets/WorkbenchView-B3v-0vWa.js +0 -305
- package/src/ui/public/assets/WorkbenchView-DO2ndsES.css +0 -1
- package/src/ui/public/assets/_plugin-vue_export-helper-zp6tdw8N.js +0 -19
- package/src/ui/public/assets/agentConversations-Cplq42kA.js +0 -10
- package/src/ui/public/assets/editor.worker-GCPm6rMv.js +0 -26
- package/src/ui/public/assets/element-plus-CJqN49tX.js +0 -48
- package/src/ui/public/assets/index-C90dYckz.js +0 -211
- package/src/ui/public/assets/json.worker-CxwlJRnL.js +0 -58
- package/src/ui/public/assets/useOrchestrator-C3wjJ7p4.js +0 -1
- package/src/ui/public/assets/vue-flow-x4TlHHzT.js +0 -39
|
@@ -523,18 +523,52 @@ async function launchOpenCode(dirPath, { permissionMode } = {}) {
|
|
|
523
523
|
}
|
|
524
524
|
|
|
525
525
|
/**
|
|
526
|
-
*
|
|
526
|
+
* codebuddy 的权限档位(`--permission-mode`,用 CLI 自己的档位名当 token)。
|
|
527
|
+
*
|
|
528
|
+
* 档位名与 claude **逐字相同**(acceptEdits / bypassPermissions),所以直接沿用
|
|
529
|
+
* claude 那套 token,不必再造一份 —— 前端两处菜单传的是同一个字符串。
|
|
527
530
|
*
|
|
528
|
-
* `--
|
|
529
|
-
*
|
|
530
|
-
*
|
|
531
|
+
* 'bypassPermissions' → `--permission-mode bypassPermissions`
|
|
532
|
+
* 官方档位说明原文 "Skips all permission prompts",这就是它的**完全批准**档。
|
|
533
|
+
* 实测(2026-10-14,本机 CLI)`codebuddy -p --output-format stream-json
|
|
534
|
+
* --permission-mode bypassPermissions` 的 init 事件回传
|
|
535
|
+
* `permissionMode: "bypassPermissions"` —— 档位真的生效,不是被静默忽略。
|
|
536
|
+
* `-y / --dangerously-skip-permissions` 是同一档的别名(headless 执行器走的就是
|
|
537
|
+
* -y,init 同样回传 bypassPermissions),这里用 `--permission-mode` 是因为它
|
|
538
|
+
* 是 TUI 也认的正式写法(help: "Default permission mode for this process
|
|
539
|
+
* (TUI, --serve Web, ACP)"),且与 claude 的启动参数形状一致。
|
|
540
|
+
* 'acceptEdits' → `--permission-mode acceptEdits`(自动批准文件编辑,中间档)
|
|
541
|
+
* 其余一切(undefined / 未知串 / 非字符串)→ 一个 flag 都不带,跟随 CLI 自己的配置
|
|
542
|
+
*
|
|
543
|
+
* 白名单式:只有表里这两个 token 能变成参数,不存在拼参数注入的面。
|
|
544
|
+
* 回归 `test/open-with-permission.test.mjs`。
|
|
545
|
+
*/
|
|
546
|
+
const CODEBUDDY_MODE_FLAGS = new Map([
|
|
547
|
+
['acceptEdits', ['--permission-mode', 'acceptEdits']],
|
|
548
|
+
['bypassPermissions', ['--permission-mode', 'bypassPermissions']],
|
|
549
|
+
]);
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* codebuddy 的启动参数(按权限档位)。
|
|
553
|
+
*
|
|
554
|
+
* `--port 0` 是**必须**的(与档位无关,恒定带上):CLI 每次运行都自带一个引擎服务器,
|
|
555
|
+
* 默认端口写死 62443,而 WorkBuddy 桌面版常驻占着它 —— 实测裸跑 `codebuddy`
|
|
556
|
+
* (交互也一样)直接 EADDRINUSE 退出。0 = 让 OS 选空闲端口,与 headless 执行器
|
|
531
557
|
* (taskRunner.launchCodebuddyPrint)同一个口径。
|
|
558
|
+
*/
|
|
559
|
+
export function buildCodebuddyArgs(permissionMode) {
|
|
560
|
+
return ['--port', '0', ...(CODEBUDDY_MODE_FLAGS.get(permissionMode) || [])];
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* 用 CodeBuddy Code 打开目录(交互 TUI,2026-10-12 随执行器接入一起补)。
|
|
565
|
+
* 权限档位见 buildCodebuddyArgs。
|
|
532
566
|
*
|
|
533
|
-
*
|
|
567
|
+
* 登录态来自 ~/.codebuddy:没登录过的话 TUI 里会提示 /login 扫码。
|
|
534
568
|
*/
|
|
535
|
-
async function launchCodebuddy(dirPath) {
|
|
569
|
+
async function launchCodebuddy(dirPath, { permissionMode } = {}) {
|
|
536
570
|
// CodeBuddy Code CLI - https://www.codebuddy.cn/docs/cli
|
|
537
|
-
const cliArgs =
|
|
571
|
+
const cliArgs = buildCodebuddyArgs(permissionMode);
|
|
538
572
|
if (process.platform === 'win32') {
|
|
539
573
|
return spawnDetached('cmd.exe', ['/c', 'start', '""', 'codebuddy', ...cliArgs], {
|
|
540
574
|
cwd: dirPath
|
|
@@ -592,13 +626,42 @@ export async function launchGai(dirPath, {
|
|
|
592
626
|
});
|
|
593
627
|
}
|
|
594
628
|
|
|
595
|
-
|
|
629
|
+
/**
|
|
630
|
+
* kimi 的权限档位。
|
|
631
|
+
*
|
|
632
|
+
* 'auto' | 'bypassPermissions' → `--auto`
|
|
633
|
+
* 官方 help 原文 "Start in Never Ask mode: never interrupts you; everything runs
|
|
634
|
+
* and is decided automatically" —— 这才是它的**完全批准**档。
|
|
635
|
+
* `bypassPermissions` 只是让调用方与 claude / codex / opencode 那档共用同一个
|
|
636
|
+
* 字符串,不是另一种行为。
|
|
637
|
+
* 其余一切(undefined / 未知串 / 非字符串)→ 一个 flag 都不带(默认档:该问的照问)
|
|
638
|
+
*
|
|
639
|
+
* ⚠️ 这个 `--auto` 与 opencode 的 `--auto` **同名但语义不同**:opencode 是"自动批准
|
|
640
|
+
* 未被显式拒绝的权限"(配置里 deny 的仍拦),kimi 是"从不打断"。档位 token 各按各家
|
|
641
|
+
* CLI 的叫法走,别硬凑一个公共词(同 codex 那段的取舍)。
|
|
642
|
+
* ⚠️ kimi 还有一个中间档 `-y / --yolo`(Ask When Needed:常规编辑与命令自动放行,
|
|
643
|
+
* 危险动作 / 提问 / 计划仍会问),菜单暂未暴露 —— 要加时在 KIMI_MODE_FLAGS 补一行。
|
|
644
|
+
*
|
|
645
|
+
* 白名单式:只有表里这两个 token 能变成参数。
|
|
646
|
+
* 回归 `test/open-with-permission.test.mjs`。
|
|
647
|
+
*/
|
|
648
|
+
const KIMI_MODE_FLAGS = new Map([
|
|
649
|
+
['auto', ['--auto']],
|
|
650
|
+
['bypassPermissions', ['--auto']],
|
|
651
|
+
]);
|
|
652
|
+
|
|
653
|
+
export function buildKimiArgs(permissionMode) {
|
|
654
|
+
return [...(KIMI_MODE_FLAGS.get(permissionMode) || [])];
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
async function launchKimiCode(dirPath, { permissionMode } = {}) {
|
|
658
|
+
const cliArgs = buildKimiArgs(permissionMode);
|
|
596
659
|
if (process.platform === 'win32') {
|
|
597
660
|
const executable = await findKimiExecutable();
|
|
598
661
|
if (!executable) throw new Error('未检测到 Kimi Code,请先安装 kimi CLI');
|
|
599
|
-
return spawnDetached('cmd.exe', ['/c', 'start', '""', executable], { cwd: dirPath });
|
|
662
|
+
return spawnDetached('cmd.exe', ['/c', 'start', '""', executable, ...cliArgs], { cwd: dirPath });
|
|
600
663
|
}
|
|
601
|
-
return launchInTerminal(dirPath, 'kimi');
|
|
664
|
+
return launchInTerminal(dirPath, 'kimi', cliArgs);
|
|
602
665
|
}
|
|
603
666
|
|
|
604
667
|
async function launchDsh(dirPath) {
|
|
@@ -1126,7 +1189,7 @@ export function registerFileOpenRoutes({
|
|
|
1126
1189
|
// 用 CodeBuddy Code 打开目录
|
|
1127
1190
|
app.post('/api/open-directory-with-codebuddy', asyncRoute(async (req, res) => {
|
|
1128
1191
|
try {
|
|
1129
|
-
const { path: dirPath } = req.body || {};
|
|
1192
|
+
const { path: dirPath, permissionMode } = req.body || {};
|
|
1130
1193
|
if (!dirPath) {
|
|
1131
1194
|
throw new HttpError(400, '目录路径不能为空');
|
|
1132
1195
|
}
|
|
@@ -1138,8 +1201,11 @@ export function registerFileOpenRoutes({
|
|
|
1138
1201
|
}
|
|
1139
1202
|
|
|
1140
1203
|
try {
|
|
1141
|
-
await launchCodebuddy(dirPath);
|
|
1142
|
-
|
|
1204
|
+
await launchCodebuddy(dirPath, { permissionMode });
|
|
1205
|
+
const message = CODEBUDDY_MODE_FLAGS.has(permissionMode)
|
|
1206
|
+
? `已用 CodeBuddy Code 打开目录(permission-mode=${permissionMode})`
|
|
1207
|
+
: '已用 CodeBuddy Code 打开目录';
|
|
1208
|
+
res.json({ success: true, message });
|
|
1143
1209
|
} catch (error) {
|
|
1144
1210
|
res.status(400).json({
|
|
1145
1211
|
success: false,
|
|
@@ -1181,12 +1247,15 @@ export function registerFileOpenRoutes({
|
|
|
1181
1247
|
|
|
1182
1248
|
// 用 Kimi Code 打开目录
|
|
1183
1249
|
app.post('/api/open-directory-with-kimi', asyncRoute(async (req, res) => {
|
|
1184
|
-
const { path: dirPath } = req.body || {};
|
|
1250
|
+
const { path: dirPath, permissionMode } = req.body || {};
|
|
1185
1251
|
if (!dirPath) throw new HttpError(400, '目录路径不能为空');
|
|
1186
1252
|
try {
|
|
1187
1253
|
await fs.access(dirPath);
|
|
1188
|
-
await launchKimiCode(dirPath);
|
|
1189
|
-
|
|
1254
|
+
await launchKimiCode(dirPath, { permissionMode });
|
|
1255
|
+
const message = KIMI_MODE_FLAGS.has(permissionMode)
|
|
1256
|
+
? '已用 Kimi Code 打开目录(--auto:从不打断)'
|
|
1257
|
+
: '已用 Kimi Code 打开目录';
|
|
1258
|
+
res.json({ success: true, message });
|
|
1190
1259
|
} catch (error) {
|
|
1191
1260
|
res.status(400).json({ success: false, error: error.message || '未检测到 Kimi Code,请先安装 kimi CLI' });
|
|
1192
1261
|
}
|