@tom2012/cc-web 2026.5.18-g → 2026.5.18-i
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 +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +3 -12
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/_flow-injector.d.ts +1 -0
- package/backend/dist/routes/_flow-injector.d.ts.map +1 -1
- package/backend/dist/routes/_flow-injector.js +10 -3
- package/backend/dist/routes/_flow-injector.js.map +1 -1
- package/backend/dist/routes/track-flows.d.ts.map +1 -1
- package/backend/dist/routes/track-flows.js +46 -3
- package/backend/dist/routes/track-flows.js.map +1 -1
- package/backend/dist/track-flow/__tests__/prompt-translator.test.js +2 -2
- package/backend/dist/track-flow/__tests__/prompt-translator.test.js.map +1 -1
- package/backend/dist/track-flow/__tests__/run-registry.test.js +22 -4
- package/backend/dist/track-flow/__tests__/run-registry.test.js.map +1 -1
- package/backend/dist/track-flow/__tests__/train-json-sync.test.js +22 -12
- package/backend/dist/track-flow/__tests__/train-json-sync.test.js.map +1 -1
- package/backend/dist/track-flow/llm-dispatcher.d.ts +1 -0
- package/backend/dist/track-flow/llm-dispatcher.d.ts.map +1 -1
- package/backend/dist/track-flow/llm-dispatcher.js +22 -4
- package/backend/dist/track-flow/llm-dispatcher.js.map +1 -1
- package/backend/dist/track-flow/prompt-translator.js +5 -3
- package/backend/dist/track-flow/prompt-translator.js.map +1 -1
- package/backend/dist/track-flow/run-registry.d.ts +17 -4
- package/backend/dist/track-flow/run-registry.d.ts.map +1 -1
- package/backend/dist/track-flow/run-registry.js +39 -13
- package/backend/dist/track-flow/run-registry.js.map +1 -1
- package/backend/dist/track-flow/runtime.d.ts +1 -0
- package/backend/dist/track-flow/runtime.d.ts.map +1 -1
- package/backend/dist/track-flow/runtime.js +18 -1
- package/backend/dist/track-flow/runtime.js.map +1 -1
- package/backend/dist/track-flow/store.d.ts +8 -1
- package/backend/dist/track-flow/store.d.ts.map +1 -1
- package/backend/dist/track-flow/store.js +8 -2
- package/backend/dist/track-flow/store.js.map +1 -1
- package/backend/dist/track-flow/train-json-sync.d.ts +2 -7
- package/backend/dist/track-flow/train-json-sync.d.ts.map +1 -1
- package/backend/dist/track-flow/train-json-sync.js +14 -19
- package/backend/dist/track-flow/train-json-sync.js.map +1 -1
- package/frontend/dist/assets/{ChatOverlay-D2rf2H6t.js → ChatOverlay-9d5dpS5b.js} +2 -2
- package/frontend/dist/assets/{GraphPreview-u6Ci15SL.js → GraphPreview-C6qEXitD.js} +1 -1
- package/frontend/dist/assets/{MobilePage-CTWB7pLS.js → MobilePage-CFU9G20m.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-ZICd4-TI.js → OfficePreview-_l7j8IV8.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-B29t_Jh6.js → PdfPreview-DTUBbS18.js} +1 -1
- package/frontend/dist/assets/ProjectPage-DlHo3QQu.js +26 -0
- package/frontend/dist/assets/SettingsPage-C3gzKiEP.js +13 -0
- package/frontend/dist/assets/{SkillHubPage-DPVSTNZx.js → SkillHubPage-YwjsOoUC.js} +3 -3
- package/frontend/dist/assets/{chevron-down-Co60aPP7.js → chevron-down-DodPtCYb.js} +1 -1
- package/frontend/dist/assets/index-Bvo6b2D8.css +1 -0
- package/frontend/dist/assets/{index-CMETwpA1.js → index-CRR0fz5Z.js} +2 -2
- package/frontend/dist/assets/{index-DTXsp7SS.js → index-CryLBIY6.js} +1 -1
- package/frontend/dist/assets/{index-D73360R6.js → index-L7gDJlsf.js} +1 -1
- package/frontend/dist/assets/{jszip.min-DLfWqfZT.js → jszip.min-6qCZ4RHI.js} +1 -1
- package/frontend/dist/assets/search-CMAXJLdz.js +7 -0
- package/frontend/dist/assets/select-5_sxYgAx.js +13 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/ProjectPage-D7vvLu1P.js +0 -26
- package/frontend/dist/assets/SettingsPage-BvqMJuXW.js +0 -13
- package/frontend/dist/assets/index-tSU3-nNc.css +0 -1
- package/frontend/dist/assets/select-Dhczd7Tt.js +0 -13
- package/frontend/dist/assets/user-D-AjD8EZ.js +0 -13
|
@@ -48,7 +48,9 @@ const train_json_sync_1 = require("./train-json-sync");
|
|
|
48
48
|
*/
|
|
49
49
|
async function dispatchLlmCall(opts) {
|
|
50
50
|
const cwd = opts.projectFolder;
|
|
51
|
-
|
|
51
|
+
// v-h: cwd 文件改为 ccweb 私有名(避免 daemon cleanupStaleCwdFiles 抹掉
|
|
52
|
+
// 用户项目自有的 train.json)。文件名必须与 train-json-sync.ts 同步。
|
|
53
|
+
const trainJsonPath = path.join(cwd, '.ccweb-flow-train.json');
|
|
52
54
|
const timeoutMs = opts.timeoutMs ?? 600000;
|
|
53
55
|
// 1. Write snapshot
|
|
54
56
|
(0, train_json_sync_1.copyToProjectCwd)(cwd, (0, train_json_sync_1.filterByWhitelist)(opts.beforeSnapshot, opts.whitelist));
|
|
@@ -61,7 +63,14 @@ async function dispatchLlmCall(opts) {
|
|
|
61
63
|
initialMtimeMs = Date.now();
|
|
62
64
|
}
|
|
63
65
|
try {
|
|
64
|
-
// 2. Inject prompt
|
|
66
|
+
// 2. Inject prompt — 记录注入时的 PTY ref,polling 中比对检测 crash
|
|
67
|
+
const ptyRefAtInject = opts.getTerminalRef?.() ?? null;
|
|
68
|
+
// v-h Q4 fix:PTY 未启动 / 已死 → 立即 fail,不再傻等 600s 超时。
|
|
69
|
+
// (getTerminalRef 未传时跳过此检查保留向后兼容,单测 mock injector 用得到)
|
|
70
|
+
if (opts.getTerminalRef && ptyRefAtInject === null) {
|
|
71
|
+
(0, train_json_sync_1.cleanupProjectCwd)(cwd);
|
|
72
|
+
return { kind: 'failed', reason: 'PTY 未启动或已退出,无法注入 prompt。请确保 CLI 已运行后重新运行工作轨' };
|
|
73
|
+
}
|
|
65
74
|
await opts.injector(opts.prompt);
|
|
66
75
|
// 3. Poll for mtime change
|
|
67
76
|
const startedAt = Date.now();
|
|
@@ -73,7 +82,16 @@ async function dispatchLlmCall(opts) {
|
|
|
73
82
|
}
|
|
74
83
|
if (Date.now() - startedAt > timeoutMs) {
|
|
75
84
|
(0, train_json_sync_1.cleanupProjectCwd)(cwd);
|
|
76
|
-
return { kind: 'failed', reason: `LLM 调用超时(${timeoutMs}ms 内未修改 train.json)` };
|
|
85
|
+
return { kind: 'failed', reason: `LLM 调用超时(${timeoutMs}ms 内未修改 .ccweb-flow-train.json)` };
|
|
86
|
+
}
|
|
87
|
+
// PTY crash 检测:注入后 PTY 实例换了(terminal-manager 重启),prompt
|
|
88
|
+
// 落到了已死的 PTY,新 PTY 不会处理它,再等也没用。
|
|
89
|
+
if (ptyRefAtInject && opts.getTerminalRef) {
|
|
90
|
+
const cur = opts.getTerminalRef();
|
|
91
|
+
if (cur !== ptyRefAtInject) {
|
|
92
|
+
(0, train_json_sync_1.cleanupProjectCwd)(cwd);
|
|
93
|
+
return { kind: 'failed', reason: 'PTY 在 LLM 调用中重启,prompt 落空。请重新运行' };
|
|
94
|
+
}
|
|
77
95
|
}
|
|
78
96
|
let mtimeMs = initialMtimeMs;
|
|
79
97
|
try {
|
|
@@ -92,7 +110,7 @@ async function dispatchLlmCall(opts) {
|
|
|
92
110
|
const reload = await (0, train_json_sync_1.reloadFromProjectCwd)(cwd);
|
|
93
111
|
if (!reload.ok || !reload.data) {
|
|
94
112
|
(0, train_json_sync_1.cleanupProjectCwd)(cwd);
|
|
95
|
-
return { kind: 'failed', reason:
|
|
113
|
+
return { kind: 'failed', reason: `.ccweb-flow-train.json reload 失败:${reload.error ?? 'unknown'}` };
|
|
96
114
|
}
|
|
97
115
|
// 5. Diff + outputs check
|
|
98
116
|
const newSnapshotFiltered = (0, train_json_sync_1.filterByWhitelist)(reload.data, opts.whitelist);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-dispatcher.js","sourceRoot":"","sources":["../../src/track-flow/llm-dispatcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"llm-dispatcher.js","sourceRoot":"","sources":["../../src/track-flow/llm-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -41,7 +41,7 @@ function translatePrompt(template, variables, snapshot, outputs) {
|
|
|
41
41
|
const decl = byKey.get(key);
|
|
42
42
|
if (!decl)
|
|
43
43
|
return `\${${key}}`;
|
|
44
|
-
return `修改变量 ${key}(${decl.description};记录路径为 train.json 中的 key:${key})=${formatValue(snapshot[key] ?? null)} 为...`;
|
|
44
|
+
return `修改变量 ${key}(${decl.description};记录路径为 .ccweb-flow-train.json 中的 key:${key})=${formatValue(snapshot[key] ?? null)} 为...`;
|
|
45
45
|
});
|
|
46
46
|
if (outputs.length > 0) {
|
|
47
47
|
result += '\n\n' + buildSystemInstruction(outputs);
|
|
@@ -49,10 +49,12 @@ function translatePrompt(template, variables, snapshot, outputs) {
|
|
|
49
49
|
return result;
|
|
50
50
|
}
|
|
51
51
|
function buildSystemInstruction(outputs) {
|
|
52
|
+
// 文件名必须与 train-json-sync.ts 的 TRAIN_JSON_NAME 同步(v-h 改成 ccweb
|
|
53
|
+
// 私有名,避开用户项目自有的 train.json)。
|
|
52
54
|
return [
|
|
53
55
|
'【系统指令】',
|
|
54
|
-
'本工作轨的全局变量记录在当前目录的 train.json 文件中。',
|
|
55
|
-
'本节点完成时,请用 Edit/Write 工具修改 train.json 文件,',
|
|
56
|
+
'本工作轨的全局变量记录在当前目录的 .ccweb-flow-train.json 文件中。',
|
|
57
|
+
'本节点完成时,请用 Edit/Write 工具修改 .ccweb-flow-train.json 文件,',
|
|
56
58
|
`更新以下字段:${outputs.join(', ')}`,
|
|
57
59
|
'(其他字段不要改)。完成修改后告知"已写入"。',
|
|
58
60
|
].join('\n');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prompt-translator.js","sourceRoot":"","sources":["../../src/track-flow/prompt-translator.ts"],"names":[],"mappings":";;AAgCA,0CAwBC;AAlDD;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAChD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;IACtF,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IACrE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;AACtD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAC7B,QAAgB,EAChB,SAAoB,EACpB,QAAiC,EACjC,OAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAkB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAExE,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,GAAG,GAAG,CAAA;QAC7B,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,GAAG,GAAG,CAAA;QAC9B,OAAO,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"prompt-translator.js","sourceRoot":"","sources":["../../src/track-flow/prompt-translator.ts"],"names":[],"mappings":";;AAgCA,0CAwBC;AAlDD;;;;;;GAMG;AACH,SAAS,WAAW,CAAC,CAAU;IAC7B,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAChD,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;IACtF,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IACrE,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAA;AACtD,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,eAAe,CAC7B,QAAgB,EAChB,SAAoB,EACpB,QAAiC,EACjC,OAAiB;IAEjB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAkB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;IAExE,IAAI,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,KAAK,GAAG,GAAG,CAAA;QAC7B,OAAO,GAAG,GAAG,IAAI,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,CAAA;IAC5E,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC,EAAE,EAAE,GAAW,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC3B,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,GAAG,GAAG,CAAA;QAC9B,OAAO,QAAQ,GAAG,IAAI,IAAI,CAAC,WAAW,wCAAwC,GAAG,KAAK,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,OAAO,CAAA;IACjI,CAAC,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAA;IACpD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAiB;IAC/C,8DAA8D;IAC9D,6BAA6B;IAC7B,OAAO;QACL,QAAQ;QACR,+CAA+C;QAC/C,sDAAsD;QACtD,UAAU,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QAC9B,yBAAyB;KAC1B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC"}
|
|
@@ -4,6 +4,7 @@ export interface RunQuota {
|
|
|
4
4
|
maxLlmCalls: number;
|
|
5
5
|
maxRunDurationMs: number;
|
|
6
6
|
}
|
|
7
|
+
export type NodeRuntimeState = 'active' | 'completed' | 'failed' | 'skipped';
|
|
7
8
|
export interface RunInfo {
|
|
8
9
|
runId: string;
|
|
9
10
|
projectId: string;
|
|
@@ -27,16 +28,25 @@ export interface RunInfo {
|
|
|
27
28
|
variants?: string[];
|
|
28
29
|
}[];
|
|
29
30
|
};
|
|
31
|
+
snapshot: Record<string, unknown>;
|
|
32
|
+
nodeStates: Map<string, NodeRuntimeState>;
|
|
33
|
+
currentNodeId: string | null;
|
|
30
34
|
}
|
|
31
35
|
/**
|
|
32
36
|
* In-memory registry of active flow runs.
|
|
33
37
|
*
|
|
34
|
-
* Lock semantics(spec §8.3
|
|
35
|
-
*
|
|
38
|
+
* Lock semantics(v-h,原 spec §8.3 修订):**同一 projectId 同时只允许 1 个 active run**。
|
|
39
|
+
* 原本是 (projectId, basename) 级,但 cwd 文件(`.ccweb-flow-train.json`)是 project
|
|
40
|
+
* 根级一份,不带 basename 区分;如果不同 basename 可并发,两个 flow 会互相覆盖
|
|
41
|
+
* cwd 文件 → `filterByWhitelist` 用本 flow 白名单去过滤别人写的数据 → snapshot
|
|
42
|
+
* 错乱 / outputs 检测假阳。锁升到 projectId 级是最 surgical 的解决(替代方案是
|
|
43
|
+
* cwd 文件名带 basename,但 prompt-translator 系统指令也得改、LLM 不知道是哪个轨)。
|
|
44
|
+
*
|
|
45
|
+
* 重复 register 抛 FLOW_ALREADY_RUNNING(路由层映射为 409 + existingRunId)。
|
|
36
46
|
*/
|
|
37
47
|
export declare class FlowRunRegistry {
|
|
38
48
|
private byRunId;
|
|
39
|
-
private
|
|
49
|
+
private activeByProject;
|
|
40
50
|
start(opts: {
|
|
41
51
|
runId: string;
|
|
42
52
|
projectId: string;
|
|
@@ -44,7 +54,7 @@ export declare class FlowRunRegistry {
|
|
|
44
54
|
quotaOverride?: Partial<RunQuota>;
|
|
45
55
|
}): RunInfo;
|
|
46
56
|
get(runId: string): RunInfo | undefined;
|
|
47
|
-
findActive(projectId: string, basename
|
|
57
|
+
findActive(projectId: string, basename?: string): RunInfo | undefined;
|
|
48
58
|
listActive(projectId: string): RunInfo[];
|
|
49
59
|
/**
|
|
50
60
|
* Check & increment quotas. Returns null if all pass, or error message if exceeded.
|
|
@@ -61,6 +71,9 @@ export declare class FlowRunRegistry {
|
|
|
61
71
|
updateStatus(runId: string, status: RunStatus, error?: RunInfo['error']): void;
|
|
62
72
|
setPendingUserInput(runId: string, payload: RunInfo['pendingUserInput']): void;
|
|
63
73
|
clearPendingUserInput(runId: string): void;
|
|
74
|
+
setSnapshot(runId: string, snapshot: Record<string, unknown>): void;
|
|
75
|
+
setCurrentNode(runId: string, nodeId: string | null): void;
|
|
76
|
+
setNodeState(runId: string, nodeId: string, state: NodeRuntimeState): void;
|
|
64
77
|
cancel(runId: string): boolean;
|
|
65
78
|
}
|
|
66
79
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-registry.d.ts","sourceRoot":"","sources":["../../src/track-flow/run-registry.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,oBAAoB,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;AAE3G,MAAM,WAAW,QAAQ;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,SAAS,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,QAAQ,CAAA;IACf,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,qBAAqB,EAAE,eAAe,CAAA;IACtC,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAA;IAC5C,gBAAgB,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,EAAE,CAAA;KAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"run-registry.d.ts","sourceRoot":"","sources":["../../src/track-flow/run-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,17 +11,22 @@ const DEFAULT_QUOTA = {
|
|
|
11
11
|
/**
|
|
12
12
|
* In-memory registry of active flow runs.
|
|
13
13
|
*
|
|
14
|
-
* Lock semantics(spec §8.3
|
|
15
|
-
*
|
|
14
|
+
* Lock semantics(v-h,原 spec §8.3 修订):**同一 projectId 同时只允许 1 个 active run**。
|
|
15
|
+
* 原本是 (projectId, basename) 级,但 cwd 文件(`.ccweb-flow-train.json`)是 project
|
|
16
|
+
* 根级一份,不带 basename 区分;如果不同 basename 可并发,两个 flow 会互相覆盖
|
|
17
|
+
* cwd 文件 → `filterByWhitelist` 用本 flow 白名单去过滤别人写的数据 → snapshot
|
|
18
|
+
* 错乱 / outputs 检测假阳。锁升到 projectId 级是最 surgical 的解决(替代方案是
|
|
19
|
+
* cwd 文件名带 basename,但 prompt-translator 系统指令也得改、LLM 不知道是哪个轨)。
|
|
20
|
+
*
|
|
21
|
+
* 重复 register 抛 FLOW_ALREADY_RUNNING(路由层映射为 409 + existingRunId)。
|
|
16
22
|
*/
|
|
17
23
|
class FlowRunRegistry {
|
|
18
24
|
constructor() {
|
|
19
25
|
this.byRunId = new Map();
|
|
20
|
-
this.
|
|
26
|
+
this.activeByProject = new Map(); // projectId → runId
|
|
21
27
|
}
|
|
22
28
|
start(opts) {
|
|
23
|
-
const
|
|
24
|
-
const existing = this.activeByPath.get(key);
|
|
29
|
+
const existing = this.activeByProject.get(opts.projectId);
|
|
25
30
|
if (existing) {
|
|
26
31
|
const err = new Error(`FLOW_ALREADY_RUNNING`);
|
|
27
32
|
err.existingRunId = existing;
|
|
@@ -37,18 +42,26 @@ class FlowRunRegistry {
|
|
|
37
42
|
iterCounts: new Map(),
|
|
38
43
|
llmCallsCount: 0,
|
|
39
44
|
cancelAbortController: new AbortController(),
|
|
45
|
+
snapshot: {},
|
|
46
|
+
nodeStates: new Map(),
|
|
47
|
+
currentNodeId: null,
|
|
40
48
|
};
|
|
41
49
|
this.byRunId.set(opts.runId, info);
|
|
42
|
-
this.
|
|
50
|
+
this.activeByProject.set(opts.projectId, opts.runId);
|
|
43
51
|
return info;
|
|
44
52
|
}
|
|
45
53
|
get(runId) {
|
|
46
54
|
return this.byRunId.get(runId);
|
|
47
55
|
}
|
|
48
56
|
findActive(projectId, basename) {
|
|
49
|
-
|
|
50
|
-
const runId = this.
|
|
51
|
-
|
|
57
|
+
// basename 参数仅用于 caller 表意;锁是 projectId 级 (v-h),basename 不再参与查找。
|
|
58
|
+
const runId = this.activeByProject.get(projectId);
|
|
59
|
+
if (!runId)
|
|
60
|
+
return undefined;
|
|
61
|
+
const info = this.byRunId.get(runId);
|
|
62
|
+
if (basename && info && info.basename !== basename)
|
|
63
|
+
return undefined;
|
|
64
|
+
return info;
|
|
52
65
|
}
|
|
53
66
|
listActive(projectId) {
|
|
54
67
|
return [...this.byRunId.values()].filter((r) => r.projectId === projectId &&
|
|
@@ -104,7 +117,7 @@ class FlowRunRegistry {
|
|
|
104
117
|
if (error)
|
|
105
118
|
info.error = error;
|
|
106
119
|
if (status === 'completed' || status === 'failed' || status === 'cancelled') {
|
|
107
|
-
this.
|
|
120
|
+
this.activeByProject.delete(info.projectId);
|
|
108
121
|
}
|
|
109
122
|
}
|
|
110
123
|
setPendingUserInput(runId, payload) {
|
|
@@ -117,6 +130,22 @@ class FlowRunRegistry {
|
|
|
117
130
|
if (info)
|
|
118
131
|
info.pendingUserInput = undefined;
|
|
119
132
|
}
|
|
133
|
+
// v-h rehydrate 字段写入入口(runtime 调用)
|
|
134
|
+
setSnapshot(runId, snapshot) {
|
|
135
|
+
const info = this.byRunId.get(runId);
|
|
136
|
+
if (info)
|
|
137
|
+
info.snapshot = { ...snapshot };
|
|
138
|
+
}
|
|
139
|
+
setCurrentNode(runId, nodeId) {
|
|
140
|
+
const info = this.byRunId.get(runId);
|
|
141
|
+
if (info)
|
|
142
|
+
info.currentNodeId = nodeId;
|
|
143
|
+
}
|
|
144
|
+
setNodeState(runId, nodeId, state) {
|
|
145
|
+
const info = this.byRunId.get(runId);
|
|
146
|
+
if (info)
|
|
147
|
+
info.nodeStates.set(nodeId, state);
|
|
148
|
+
}
|
|
120
149
|
cancel(runId) {
|
|
121
150
|
const info = this.byRunId.get(runId);
|
|
122
151
|
if (!info)
|
|
@@ -127,9 +156,6 @@ class FlowRunRegistry {
|
|
|
127
156
|
}
|
|
128
157
|
}
|
|
129
158
|
exports.FlowRunRegistry = FlowRunRegistry;
|
|
130
|
-
function pathKey(projectId, basename) {
|
|
131
|
-
return `${projectId}::${basename}`;
|
|
132
|
-
}
|
|
133
159
|
/**
|
|
134
160
|
* Singleton registry instance used by routes / runtime.
|
|
135
161
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run-registry.js","sourceRoot":"","sources":["../../src/track-flow/run-registry.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"run-registry.js","sourceRoot":"","sources":["../../src/track-flow/run-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -46,6 +46,7 @@ export interface RuntimeDeps {
|
|
|
46
46
|
runId: string;
|
|
47
47
|
injector: Injector;
|
|
48
48
|
broadcast: (event: string, payload: Record<string, unknown>) => void;
|
|
49
|
+
getTerminalRef?: () => object | null;
|
|
49
50
|
}
|
|
50
51
|
export interface UserInputPromise {
|
|
51
52
|
resolve: (values: Record<string, unknown>) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/track-flow/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGnE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAMjE,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,CAAC,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpD,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACnC;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CACnE;AAED,MAAM,WAAW,OAAQ,SAAQ,QAAQ;IACvC,IAAI,EAAE,KAAK,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAID,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/track-flow/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAGnE,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAMjE,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,CAAC,CAAA;IACV,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpD,SAAS,EAAE,OAAO,EAAE,CAAA;IACpB,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,MAAM,MAAM,MAAM,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACnC;AAED,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,IAAI,EAAE,YAAY,CAAA;IAClB,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAAE,CAAA;CACnE;AAED,MAAM,WAAW,OAAQ,SAAQ,QAAQ;IACvC,IAAI,EAAE,KAAK,CAAA;IACX,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,OAAO,EAAE,MAAM,EAAE,CAAA;CAClB;AAED,MAAM,WAAW,MAAO,SAAQ,QAAQ;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB;AAID,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,QAAQ,CAAA;IAClB,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAGpE,cAAc,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAA;CACrC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAClD,MAAM,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAA;CAC7B;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAM7F;AA8BD,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAyGf"}
|
|
@@ -54,6 +54,8 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
54
54
|
let snapshot = { ...initialSnapshot };
|
|
55
55
|
let currentNodeId = findEntryNode(flow)?.id ?? null;
|
|
56
56
|
run_registry_1.flowRunRegistry.updateStatus(deps.runId, 'running');
|
|
57
|
+
run_registry_1.flowRunRegistry.setSnapshot(deps.runId, snapshot);
|
|
58
|
+
run_registry_1.flowRunRegistry.setCurrentNode(deps.runId, currentNodeId);
|
|
57
59
|
emit('flow_started', deps, { initialVars: snapshot });
|
|
58
60
|
while (currentNodeId !== null && info.status !== 'cancelled') {
|
|
59
61
|
const node = flow.nodes.find((n) => n.id === currentNodeId);
|
|
@@ -68,6 +70,8 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
68
70
|
return;
|
|
69
71
|
}
|
|
70
72
|
const iter = (info.iterCounts.get(node.id) ?? 1);
|
|
73
|
+
run_registry_1.flowRunRegistry.setCurrentNode(deps.runId, node.id);
|
|
74
|
+
run_registry_1.flowRunRegistry.setNodeState(deps.runId, node.id, 'active');
|
|
71
75
|
emit('flow_node_active', deps, { nodeId: node.id, iter, quota: run_registry_1.flowRunRegistry.remainingQuota(deps.runId, node.id) });
|
|
72
76
|
(0, audit_log_1.appendAudit)(deps.projectFolder, deps.basename, deps.runId, {
|
|
73
77
|
ts: Date.now(), type: 'node_active', nodeId: node.id, iter,
|
|
@@ -81,6 +85,7 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
81
85
|
return;
|
|
82
86
|
}
|
|
83
87
|
snapshot = { ...snapshot, ...r.values };
|
|
88
|
+
run_registry_1.flowRunRegistry.setSnapshot(deps.runId, snapshot);
|
|
84
89
|
for (const k of Object.keys(r.values)) {
|
|
85
90
|
emit('flow_var_changed', deps, { key: k, value: r.values[k] });
|
|
86
91
|
}
|
|
@@ -100,6 +105,7 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
100
105
|
outputs: node.outputs,
|
|
101
106
|
whitelist: flow.variables.map((v) => v.key),
|
|
102
107
|
signal: info.cancelAbortController.signal,
|
|
108
|
+
getTerminalRef: deps.getTerminalRef,
|
|
103
109
|
});
|
|
104
110
|
if (r.kind === 'cancelled') {
|
|
105
111
|
finish('cancelled', deps, info, undefined, node.id);
|
|
@@ -110,6 +116,7 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
110
116
|
}
|
|
111
117
|
else {
|
|
112
118
|
snapshot = r.newSnapshot;
|
|
119
|
+
run_registry_1.flowRunRegistry.setSnapshot(deps.runId, snapshot);
|
|
113
120
|
for (const d of r.varsDiff) {
|
|
114
121
|
emit('flow_var_changed', deps, { key: d.key, value: d.new });
|
|
115
122
|
}
|
|
@@ -129,6 +136,7 @@ async function runFlow(flow, initialSnapshot, deps) {
|
|
|
129
136
|
finish('failed', deps, info, stepError, node.id);
|
|
130
137
|
return;
|
|
131
138
|
}
|
|
139
|
+
run_registry_1.flowRunRegistry.setNodeState(deps.runId, node.id, 'completed');
|
|
132
140
|
emit('flow_node_completed', deps, { nodeId: node.id, iter });
|
|
133
141
|
(0, audit_log_1.appendAudit)(deps.projectFolder, deps.basename, deps.runId, {
|
|
134
142
|
ts: Date.now(), type: 'node_completed', nodeId: node.id, iter,
|
|
@@ -172,14 +180,23 @@ async function executeUserInputNode(node, _snapshot, deps) {
|
|
|
172
180
|
}
|
|
173
181
|
// ── helpers ────────────────────────────────────────────────────────────
|
|
174
182
|
function emit(event, deps, payload) {
|
|
175
|
-
|
|
183
|
+
// v-i:每条事件附 basename,前端 minimap 监听 flow_started 时可以一次性
|
|
184
|
+
// 拿 (runId, basename) 拉 .flow + state,不用额外往返查表。
|
|
185
|
+
deps.broadcast(event, { runId: deps.runId, basename: deps.basename, ...payload });
|
|
176
186
|
}
|
|
177
187
|
function finish(status, deps, info, errorMessage, nodeId) {
|
|
188
|
+
run_registry_1.flowRunRegistry.setCurrentNode(deps.runId, null);
|
|
189
|
+
// v-h Q2 fix:所有 finish 路径都清 pendingUserInput,否则 cancel 在 user_input
|
|
190
|
+
// 节点等待中时 registry 仍残留 pending,hydrateFromBackend 会让前端弹一个
|
|
191
|
+
// status=cancelled 但仍要求用户输入的对话框。
|
|
192
|
+
run_registry_1.flowRunRegistry.clearPendingUserInput(deps.runId);
|
|
178
193
|
if (status === 'failed') {
|
|
179
194
|
run_registry_1.flowRunRegistry.updateStatus(deps.runId, 'failed', {
|
|
180
195
|
nodeId,
|
|
181
196
|
message: errorMessage ?? 'unknown',
|
|
182
197
|
});
|
|
198
|
+
if (nodeId)
|
|
199
|
+
run_registry_1.flowRunRegistry.setNodeState(deps.runId, nodeId, 'failed');
|
|
183
200
|
emit('flow_node_failed', deps, { nodeId, reason: errorMessage });
|
|
184
201
|
(0, audit_log_1.appendAudit)(deps.projectFolder, deps.basename, deps.runId, {
|
|
185
202
|
ts: Date.now(), type: 'node_failed', nodeId, message: errorMessage,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/track-flow/runtime.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/track-flow/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,7 +14,14 @@ export interface FlowFileInfo {
|
|
|
14
14
|
export declare function listFlows(projectFolder: string): FlowFileInfo[];
|
|
15
15
|
export declare function loadFlow(projectFolder: string, basename: string): unknown | null;
|
|
16
16
|
export declare function loadTrainJson(projectFolder: string, basename: string): Record<string, unknown> | null;
|
|
17
|
-
export
|
|
17
|
+
export type SaveFlowResult = {
|
|
18
|
+
ok: true;
|
|
19
|
+
} | {
|
|
20
|
+
ok: false;
|
|
21
|
+
reason: 'exists' | 'io';
|
|
22
|
+
};
|
|
23
|
+
/** Save flow. `mode='create'` 要求文件不存在;upsert 直接覆盖。 */
|
|
24
|
+
export declare function saveFlow(projectFolder: string, basename: string, flow: unknown, mode?: 'create' | 'upsert'): SaveFlowResult;
|
|
18
25
|
export declare function saveTrainJson(projectFolder: string, basename: string, trainJson: Record<string, unknown>): boolean;
|
|
19
26
|
export declare function deleteFlow(projectFolder: string, basename: string): boolean;
|
|
20
27
|
//# sourceMappingURL=store.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/track-flow/store.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/D;AAcD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,EAAE,CAqB/D;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAShF;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAarG;AAgBD,wBAAgB,QAAQ,
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/track-flow/store.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAO/D;AAcD,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,wBAAgB,SAAS,CAAC,aAAa,EAAE,MAAM,GAAG,YAAY,EAAE,CAqB/D;AAED,wBAAgB,QAAQ,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAShF;AAED,wBAAgB,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAarG;AAgBD,MAAM,MAAM,cAAc,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAA;CAAE,CAAA;AAElF,sDAAsD;AACtD,wBAAgB,QAAQ,CACtB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,OAAO,EACb,IAAI,GAAE,QAAQ,GAAG,QAAmB,GACnC,cAAc,CAOhB;AAED,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAET;AAED,wBAAgB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU3E"}
|
|
@@ -135,8 +135,14 @@ function atomicWriteJson(target, value) {
|
|
|
135
135
|
return false;
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
|
-
|
|
139
|
-
|
|
138
|
+
/** Save flow. `mode='create'` 要求文件不存在;upsert 直接覆盖。 */
|
|
139
|
+
function saveFlow(projectFolder, basename, flow, mode = 'upsert') {
|
|
140
|
+
const target = flowPath(projectFolder, basename);
|
|
141
|
+
if (mode === 'create' && fs.existsSync(target)) {
|
|
142
|
+
return { ok: false, reason: 'exists' };
|
|
143
|
+
}
|
|
144
|
+
const ok = atomicWriteJson(target, flow);
|
|
145
|
+
return ok ? { ok: true } : { ok: false, reason: 'io' };
|
|
140
146
|
}
|
|
141
147
|
function saveTrainJson(projectFolder, basename, trainJson) {
|
|
142
148
|
return atomicWriteJson(trainJsonPath(projectFolder, basename), trainJson);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/track-flow/store.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,oDAOC;AAqBD,8BAqBC;AAED,4BASC;AAED,sCAaC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/track-flow/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copy a snapshot to the project cwd as both `train.json` (v3 canonical)
|
|
3
|
-
* and `workflow_data.json` (legacy alias for adapter compat).
|
|
4
|
-
*/
|
|
1
|
+
/** Copy a snapshot to the project cwd as ccweb private name. */
|
|
5
2
|
export declare function copyToProjectCwd(projectFolder: string, snapshot: Record<string, unknown>): boolean;
|
|
6
3
|
export interface ReloadResult {
|
|
7
4
|
ok: boolean;
|
|
@@ -16,9 +13,7 @@ export interface ReloadResult {
|
|
|
16
13
|
* spec §8.2.
|
|
17
14
|
*/
|
|
18
15
|
export declare function reloadFromProjectCwd(projectFolder: string): Promise<ReloadResult>;
|
|
19
|
-
/**
|
|
20
|
-
* Delete cwd train.json + workflow_data.json. Idempotent.
|
|
21
|
-
*/
|
|
16
|
+
/** Delete cwd `.ccweb-flow-train.json`. Idempotent. */
|
|
22
17
|
export declare function cleanupProjectCwd(projectFolder: string): void;
|
|
23
18
|
/**
|
|
24
19
|
* Filter a possibly LLM-mutated train.json content by the declared
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"train-json-sync.d.ts","sourceRoot":"","sources":["../../src/track-flow/train-json-sync.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"train-json-sync.d.ts","sourceRoot":"","sources":["../../src/track-flow/train-json-sync.ts"],"names":[],"mappings":"AA0BA,gEAAgE;AAChE,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAET;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAOvF;AAgBD,uDAAuD;AACvD,wBAAgB,iBAAiB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAM7D;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,SAAS,EAAE,MAAM,EAAE,GAClB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMzB"}
|
|
@@ -39,8 +39,12 @@ exports.cleanupProjectCwd = cleanupProjectCwd;
|
|
|
39
39
|
exports.filterByWhitelist = filterByWhitelist;
|
|
40
40
|
const fs = __importStar(require("fs"));
|
|
41
41
|
const path = __importStar(require("path"));
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
// v-h: cwd 文件必须用 ccweb 私有名,不能用 `train.json` / `workflow_data.json`:
|
|
43
|
+
// 这两个名字在 ML 项目与 v1 任务流系统中都是常见名字,daemon 启动的
|
|
44
|
+
// cleanupStaleCwdFiles 会无条件 unlink → 抹掉用户业务数据 (P0)。
|
|
45
|
+
// v1 任务流系统已在 v-h 删除,不再需要 workflow_data.json 兼容别名。
|
|
46
|
+
// LLM 节点的系统指令字符串(prompt-translator)必须与此处文件名同步。
|
|
47
|
+
const TRAIN_JSON_NAME = '.ccweb-flow-train.json';
|
|
44
48
|
/**
|
|
45
49
|
* Atomic write: write to .tmp.<pid>.<ts> then rename to target.
|
|
46
50
|
* Returns true on success, false on any IO error.
|
|
@@ -57,14 +61,9 @@ function atomicWriteJson(target, value) {
|
|
|
57
61
|
return false;
|
|
58
62
|
}
|
|
59
63
|
}
|
|
60
|
-
/**
|
|
61
|
-
* Copy a snapshot to the project cwd as both `train.json` (v3 canonical)
|
|
62
|
-
* and `workflow_data.json` (legacy alias for adapter compat).
|
|
63
|
-
*/
|
|
64
|
+
/** Copy a snapshot to the project cwd as ccweb private name. */
|
|
64
65
|
function copyToProjectCwd(projectFolder, snapshot) {
|
|
65
|
-
|
|
66
|
-
const ok2 = atomicWriteJson(path.join(projectFolder, WORKFLOW_DATA_NAME), snapshot);
|
|
67
|
-
return ok1 && ok2;
|
|
66
|
+
return atomicWriteJson(path.join(projectFolder, TRAIN_JSON_NAME), snapshot);
|
|
68
67
|
}
|
|
69
68
|
/**
|
|
70
69
|
* Reload train.json after LLM call. Wait 200ms for OS buffer flush, then
|
|
@@ -97,17 +96,13 @@ function tryReadJson(target) {
|
|
|
97
96
|
return { ok: false, error: `JSON parse failed: ${e.message}` };
|
|
98
97
|
}
|
|
99
98
|
}
|
|
100
|
-
/**
|
|
101
|
-
* Delete cwd train.json + workflow_data.json. Idempotent.
|
|
102
|
-
*/
|
|
99
|
+
/** Delete cwd `.ccweb-flow-train.json`. Idempotent. */
|
|
103
100
|
function cleanupProjectCwd(projectFolder) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
/* ignore */
|
|
110
|
-
}
|
|
101
|
+
try {
|
|
102
|
+
fs.unlinkSync(path.join(projectFolder, TRAIN_JSON_NAME));
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
/* ignore */
|
|
111
106
|
}
|
|
112
107
|
}
|
|
113
108
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"train-json-sync.js","sourceRoot":"","sources":["../../src/track-flow/train-json-sync.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"train-json-sync.js","sourceRoot":"","sources":["../../src/track-flow/train-json-sync.ts"],"names":[],"mappings":"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"}
|