zen-gitsync 2.17.10 → 2.17.11
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/package.json +2 -1
- package/src/ui/public/assets/AgentView-DJVwX8Er.js +5 -0
- package/src/ui/public/assets/AgentView-vvVhbIQ5.css +1 -0
- package/src/ui/public/assets/{AppVersionBadge-D5tJzJfa.css → AppVersionBadge-CJrDr7GV.css} +1 -1
- package/src/ui/public/assets/AppVersionBadge-rNwRlkEK.js +2 -0
- package/src/ui/public/assets/BranchSelector-B0eLkAdv.css +1 -0
- package/src/ui/public/assets/BranchSelector-D2JJINuw.js +1 -0
- package/src/ui/public/assets/CommitForm-CQ0K8Yy2.css +1 -0
- package/src/ui/public/assets/CommitForm-CayXdf3-.js +6 -0
- package/src/ui/public/assets/CommonDialog-DF5Vzvi8.js +1 -0
- package/src/ui/public/assets/CommonDialog-jP0E9mco.css +1 -0
- package/src/ui/public/assets/EditorView-Bv-3PWwF.js +1 -0
- package/src/ui/public/assets/EditorView-DZMLvQds.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-B9EkuKdF.css +1 -0
- package/src/ui/public/assets/FileDiffViewer-CUsML3pW.js +15 -0
- package/src/ui/public/assets/FlowExecutionViewer-jNHI5zdm.css +1 -0
- package/src/ui/public/assets/FlowExecutionViewer-n07dZgnE.js +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CYGp-PqS.css +1 -0
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CdG8HRux.js +21 -0
- package/src/ui/public/assets/IconButton-GxK-nCF7.js +1 -0
- package/src/ui/public/assets/IconButton-tjkOjzkC.css +1 -0
- package/src/ui/public/assets/LogList-BlJplIi1.css +1 -0
- package/src/ui/public/assets/LogList-CpcpXaIZ.js +7 -0
- package/src/ui/public/assets/MindmapView-BHVJ6OzY.js +2 -0
- package/src/ui/public/assets/MindmapView-BQTqx842.css +1 -0
- package/src/ui/public/assets/MonitorView-DetlFFXq.css +1 -0
- package/src/ui/public/assets/MonitorView-IpfJRJaK.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-DM2gYw48.js +1 -0
- package/src/ui/public/assets/ProjectStartupButton-QLPltCK5.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-BauAeH2w.css +1 -0
- package/src/ui/public/assets/RemoteManagerDialog-DLPnI8Tr.js +4 -0
- package/src/ui/public/assets/RemoteRepoCard-CG-jARTe.css +1 -0
- package/src/ui/public/assets/RemoteRepoCard-D804CRwk.js +7 -0
- package/src/ui/public/assets/SourceMapView-CN4Hkyp4.css +1 -0
- package/src/ui/public/assets/SourceMapView-Ct8J5WA4.js +3 -0
- package/src/ui/public/assets/{SvgIcon-BQ6bR7l0.css → SvgIcon-CDNsk4-Q.css} +1 -1
- package/src/ui/public/assets/SvgIcon-DRYmw37Q.js +1 -0
- package/src/ui/public/assets/TemplateManager-BGEG9EkP.js +1 -0
- package/src/ui/public/assets/TemplateManager-DMuG4i3G.css +1 -0
- package/src/ui/public/assets/UserInputNode-BVgQkB2l.css +1 -0
- package/src/ui/public/assets/UserInputNode-DO4QsmCx.js +1 -0
- package/src/ui/public/assets/WorkbenchView-B1BJhWHi.css +1 -0
- package/src/ui/public/assets/WorkbenchView-D4herpOg.js +51 -0
- package/src/ui/public/assets/_plugin-vue_export-helper-uGHPMZWt.js +19 -0
- package/src/ui/public/assets/configStore-DAZtECRW.js +1 -0
- package/src/ui/public/assets/element-plus-BJ5_9fFh.js +48 -0
- package/src/ui/public/assets/element-plus-C1PloHQu.css +1 -0
- package/src/ui/public/assets/flow-mindmap-9rLOb4W_.js +139 -0
- package/src/ui/public/assets/{gitStore-DMEDMZMk.js → gitStore-BQhrNfOL.js} +4 -4
- package/src/ui/public/assets/{index-CW3xs-af.css → index-B-c23Usy.css} +1 -1
- package/src/ui/public/assets/index-BM9Kz0P0.js +87 -0
- package/src/ui/public/assets/office-docx-BrfnjjUo.js +32 -0
- package/src/ui/public/assets/{office-excel-D-uYLKaA.js → office-excel-C08VoWqf.js} +1 -1
- package/src/ui/public/assets/office-pptx-Cs69NVuQ.js +74 -0
- package/src/ui/public/assets/{previewSandbox-B6Ud9g6a.css → previewSandbox-CgdwPcuW.css} +1 -1
- package/src/ui/public/assets/previewSandbox-D2nklUXY.js +0 -0
- package/src/ui/public/assets/socket-io-BFqQXqAp.js +1 -0
- package/src/ui/public/assets/{toolsStore-CpImRUhI.js → toolsStore-DX4sCU-U.js} +1 -1
- package/src/ui/public/assets/{useThemeObserver-CG8k8U18.js → useThemeObserver-chduV3hr.js} +1 -1
- package/src/ui/public/assets/{vendor-BIgZEtkx.js → vendor-xs0vOPEn.js} +46 -39
- package/src/ui/public/assets/vue-flow-DvidrbDz.js +39 -0
- package/src/ui/public/index.html +25 -25
- package/src/ui/server/routes/remoteRepos.js +73 -19
- package/src/ui/server/routes/remoteRepos.test.js +111 -1
- package/src/ui/server/routes/workbench/agentSessionStore.js +2 -2
- package/src/ui/server/routes/workbench/envContext.test.js +8 -8
- package/src/ui/server/routes/workbench/index.js +32 -736
- package/src/ui/server/routes/workbench/instructionStore.js +3 -113
- package/src/ui/server/routes/workbench/jobStore.js +2 -4
- package/src/ui/server/routes/workbench/jobStore.test.js +1 -1
- package/src/ui/server/routes/workbench/jsonParse.js +6 -143
- package/src/ui/server/routes/workbench/orchestratorStore.js +1 -8
- package/src/ui/server/routes/workbench/projectRegistry.js +6 -29
- package/src/ui/server/routes/workbench/projectRegistry.test.js +33 -56
- package/src/ui/server/routes/workbench/projectTool.js +0 -1
- package/src/ui/server/routes/workbench/projectTool.test.js +2 -3
- package/src/ui/server/routes/workbench/shared.js +2 -7
- package/src/ui/server/routes/workbench/taskRunner.js +18 -180
- package/src/ui/server/routes/workbench.js +4 -5
- package/src/ui/public/assets/AgentView-BV15UtEF.css +0 -1
- package/src/ui/public/assets/AgentView-C-AJo7KS.js +0 -5
- package/src/ui/public/assets/AppVersionBadge-B6R6eN2N.js +0 -2
- package/src/ui/public/assets/BranchSelector-Cj3kMWON.js +0 -1
- package/src/ui/public/assets/BranchSelector-T_rJm-JY.css +0 -1
- package/src/ui/public/assets/CommitForm-DpXuFG-F.js +0 -6
- package/src/ui/public/assets/CommitForm-Oij8R6P-.css +0 -1
- package/src/ui/public/assets/CommonDialog-BLPHDsn0.js +0 -1
- package/src/ui/public/assets/CommonDialog-C_RjF9Mp.css +0 -1
- package/src/ui/public/assets/EditorView-B1OnoXXf.js +0 -1
- package/src/ui/public/assets/EditorView-BgA-_8WV.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-B2_ghtbv.css +0 -1
- package/src/ui/public/assets/FileDiffViewer-BQl0JcWd.js +0 -14
- package/src/ui/public/assets/FlowExecutionViewer-B5kh7VxS.css +0 -1
- package/src/ui/public/assets/FlowExecutionViewer-BgEt5_Hz.js +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-BAQDU9Jd.css +0 -1
- package/src/ui/public/assets/FlowOrchestrationWorkspace-CbLmsSF8.js +0 -21
- package/src/ui/public/assets/IconButton-CTwyZrv2.css +0 -1
- package/src/ui/public/assets/IconButton-aM3vaSIN.js +0 -1
- package/src/ui/public/assets/LogList-DlWwSZet.css +0 -1
- package/src/ui/public/assets/LogList-UjoVFZ-H.js +0 -7
- package/src/ui/public/assets/MindmapView-CS2t30Ko.css +0 -1
- package/src/ui/public/assets/MindmapView-D_04v0n4.js +0 -1
- package/src/ui/public/assets/MonitorView-BD1_uzq7.js +0 -1
- package/src/ui/public/assets/MonitorView-CphDOlQu.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-B7zvqRj_.css +0 -1
- package/src/ui/public/assets/ProjectStartupButton-BTYlVvzh.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-20mpQMwu.js +0 -1
- package/src/ui/public/assets/RemoteManagerDialog-bpwaVAvX.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-CDykPlPj.css +0 -1
- package/src/ui/public/assets/RemoteRepoCard-DOrm17Xd.js +0 -1
- package/src/ui/public/assets/SourceMapView-DjYKJZLj.css +0 -1
- package/src/ui/public/assets/SourceMapView-nUU9bYPh.js +0 -3
- package/src/ui/public/assets/SvgIcon-LUynX3Iq.js +0 -1
- package/src/ui/public/assets/TemplateManager-Bo3Q7J9Y.js +0 -1
- package/src/ui/public/assets/TemplateManager-C0rm8xfC.css +0 -1
- package/src/ui/public/assets/UserInputNode-D5tSXiJz.js +0 -1
- package/src/ui/public/assets/UserInputNode-DDtvv9Iq.css +0 -1
- package/src/ui/public/assets/WorkbenchView-C_Gmzvj1.css +0 -1
- package/src/ui/public/assets/WorkbenchView-UGC334JL.js +0 -13
- package/src/ui/public/assets/_plugin-vue_export-helper-D-D9qkRz.js +0 -19
- package/src/ui/public/assets/configStore-BLRcYJdf.js +0 -1
- package/src/ui/public/assets/element-plus-BWbXh9mk.css +0 -1
- package/src/ui/public/assets/element-plus-DcZ-TVp6.js +0 -28
- package/src/ui/public/assets/flow-mindmap-D1VTkZh3.js +0 -139
- package/src/ui/public/assets/index-S0_gRyiO.js +0 -26
- package/src/ui/public/assets/office-docx-C0g5Oepv.js +0 -31
- package/src/ui/public/assets/office-pptx-De3fnc6M.js +0 -60
- package/src/ui/public/assets/previewSandbox-DXAxqDVu.js +0 -0
- package/src/ui/public/assets/socket-io-TBtw0msS.js +0 -1
- package/src/ui/public/assets/vue-flow-CPCFgenl.js +0 -39
- package/src/ui/server/routes/workbench/sessionStore.js +0 -126
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
// Copyright 2026 xz333221
|
|
2
|
-
//
|
|
3
|
-
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
-
// you may not use this file except in compliance with the License.
|
|
5
|
-
// You may obtain a copy of the License at
|
|
6
|
-
//
|
|
7
|
-
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
-
//
|
|
9
|
-
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
-
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
-
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
-
// See the License for the specific language governing permissions and
|
|
13
|
-
// limitations under the License.
|
|
14
|
-
//
|
|
15
|
-
// AI 对话拆分: session 持久化层。
|
|
16
|
-
// 拆分自原 routes/workbench.js 166-260 行。
|
|
17
|
-
//
|
|
18
|
-
// 文件命名: {sessionId}.json
|
|
19
|
-
// 内容: { version, sessionId, title, desc, taskId, promptId, createdAt, updatedAt,
|
|
20
|
-
// messages: [{role, content}], latestSubtasks, latestRaw, latestParseStage }
|
|
21
|
-
// 写入用临时文件 + rename 原子替换(与 workbench 现有 writeJson 模式一致),
|
|
22
|
-
// 避免半写状态被读到。并发安全: 单进程内同一 session 串行调用,
|
|
23
|
-
// 跨端点并发写同 session 概率极低,丢失只会是最后一次 user/assistant pair,可重发。
|
|
24
|
-
|
|
25
|
-
import fsp from 'fs/promises';
|
|
26
|
-
import path from 'path';
|
|
27
|
-
import { logger } from './shared.js';
|
|
28
|
-
import { SESSIONS_DIR, MAX_SESSIONS, SESSIONS_KEEP } from './shared.js';
|
|
29
|
-
|
|
30
|
-
// 16 字符: 时间戳后 8 位 + 随机 8 位 base36,既可读也基本不冲突
|
|
31
|
-
export function genSessionId() {
|
|
32
|
-
return `${Date.now().toString(36).slice(-8)}-${Math.random().toString(36).slice(2, 10)}`;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
async function readSessionFile(sessionId) {
|
|
36
|
-
if (!/^[a-z0-9-]{4,32}$/i.test(sessionId)) {
|
|
37
|
-
const err = new Error('非法 sessionId'); err.statusCode = 400; throw err;
|
|
38
|
-
}
|
|
39
|
-
const file = path.join(SESSIONS_DIR, `${sessionId}.json`);
|
|
40
|
-
try {
|
|
41
|
-
return JSON.parse(await fsp.readFile(file, 'utf-8'));
|
|
42
|
-
} catch (err) {
|
|
43
|
-
if (err.code === 'ENOENT') {
|
|
44
|
-
const e = new Error('会话不存在'); e.statusCode = 404; throw e;
|
|
45
|
-
}
|
|
46
|
-
throw err;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
async function writeSessionFile(sessionId, data) {
|
|
51
|
-
await fsp.mkdir(SESSIONS_DIR, { recursive: true });
|
|
52
|
-
const file = path.join(SESSIONS_DIR, `${sessionId}.json`);
|
|
53
|
-
const tmp = `${file}.tmp.${process.pid}.${Date.now()}`;
|
|
54
|
-
await fsp.writeFile(tmp, JSON.stringify(data, null, 2), 'utf-8');
|
|
55
|
-
await fsp.rename(tmp, file);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async function deleteSessionFile(sessionId) {
|
|
59
|
-
if (!/^[a-z0-9-]{4,32}$/i.test(sessionId)) {
|
|
60
|
-
const err = new Error('非法 sessionId'); err.statusCode = 400; throw err;
|
|
61
|
-
}
|
|
62
|
-
const file = path.join(SESSIONS_DIR, `${sessionId}.json`);
|
|
63
|
-
try {
|
|
64
|
-
await fsp.unlink(file);
|
|
65
|
-
} catch (err) {
|
|
66
|
-
if (err.code === 'ENOENT') {
|
|
67
|
-
const e = new Error('会话不存在'); e.statusCode = 404; throw e;
|
|
68
|
-
}
|
|
69
|
-
throw err;
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
// 列表只读 metadata 不读 messages 内容,启动无需预加载
|
|
74
|
-
async function listSessionsMeta() {
|
|
75
|
-
await fsp.mkdir(SESSIONS_DIR, { recursive: true });
|
|
76
|
-
const files = await fsp.readdir(SESSIONS_DIR);
|
|
77
|
-
const list = [];
|
|
78
|
-
for (const f of files) {
|
|
79
|
-
if (!f.endsWith('.json')) continue;
|
|
80
|
-
const sid = f.slice(0, -5);
|
|
81
|
-
try {
|
|
82
|
-
const file = path.join(SESSIONS_DIR, f);
|
|
83
|
-
const stat = await fsp.stat(file);
|
|
84
|
-
const data = JSON.parse(await fsp.readFile(file, 'utf-8'));
|
|
85
|
-
list.push({
|
|
86
|
-
sessionId: data.sessionId || sid,
|
|
87
|
-
title: data.title || '(无标题)',
|
|
88
|
-
taskId: data.taskId || '',
|
|
89
|
-
createdAt: data.createdAt || '',
|
|
90
|
-
updatedAt: data.updatedAt || '',
|
|
91
|
-
messageCount: Array.isArray(data.messages) ? data.messages.length : 0,
|
|
92
|
-
latestSubtaskCount: Array.isArray(data.latestSubtasks) ? data.latestSubtasks.length : 0,
|
|
93
|
-
size: stat.size
|
|
94
|
-
});
|
|
95
|
-
} catch { /* 跳过坏文件 */ }
|
|
96
|
-
}
|
|
97
|
-
list.sort((a, b) => (b.updatedAt || '').localeCompare(a.updatedAt || ''));
|
|
98
|
-
return list;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
// 容量控制: 超过 MAX_SESSIONS 时按 mtime 删旧的,保留最新 SESSIONS_KEEP 个
|
|
102
|
-
async function enforceSessionsRetention() {
|
|
103
|
-
const files = await fsp.readdir(SESSIONS_DIR).catch(() => []);
|
|
104
|
-
const jsonFiles = files.filter(f => f.endsWith('.json'));
|
|
105
|
-
if (jsonFiles.length < MAX_SESSIONS) return;
|
|
106
|
-
const stats = await Promise.all(jsonFiles.map(async f => {
|
|
107
|
-
const full = path.join(SESSIONS_DIR, f);
|
|
108
|
-
const s = await fsp.stat(full);
|
|
109
|
-
return { file: full, mtime: s.mtimeMs };
|
|
110
|
-
}));
|
|
111
|
-
stats.sort((a, b) => b.mtime - a.mtime);
|
|
112
|
-
const toDelete = stats.slice(SESSIONS_KEEP);
|
|
113
|
-
await Promise.all(toDelete.map(s => fsp.unlink(s.file).catch(() => {})));
|
|
114
|
-
if (toDelete.length > 0) {
|
|
115
|
-
logger.info(`[workbench] ai-split sessions: cleaned up ${toDelete.length} old files`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export const sessionStore = {
|
|
120
|
-
genSessionId,
|
|
121
|
-
read: readSessionFile,
|
|
122
|
-
write: writeSessionFile,
|
|
123
|
-
delete: deleteSessionFile,
|
|
124
|
-
listMeta: listSessionsMeta,
|
|
125
|
-
enforceRetention: enforceSessionsRetention,
|
|
126
|
-
};
|