@tom2012/cc-web 2026.5.14-a → 2026.5.15-a
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 +51 -0
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/routes/flows.d.ts.map +1 -1
- package/backend/dist/routes/flows.js +10 -0
- package/backend/dist/routes/flows.js.map +1 -1
- package/backend/dist/routes/global-tracks.d.ts +11 -0
- package/backend/dist/routes/global-tracks.d.ts.map +1 -0
- package/backend/dist/routes/global-tracks.js +86 -0
- package/backend/dist/routes/global-tracks.js.map +1 -0
- package/backend/dist/routes/tracks.d.ts +14 -0
- package/backend/dist/routes/tracks.d.ts.map +1 -0
- package/backend/dist/routes/tracks.js +184 -0
- package/backend/dist/routes/tracks.js.map +1 -0
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts +11 -0
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts.map +1 -0
- package/backend/dist/tracks/__tests__/verify-track-t1.js +293 -0
- package/backend/dist/tracks/__tests__/verify-track-t1.js.map +1 -0
- package/backend/dist/tracks/__tests__/verify-track.d.ts +20 -0
- package/backend/dist/tracks/__tests__/verify-track.d.ts.map +1 -0
- package/backend/dist/tracks/__tests__/verify-track.js +187 -0
- package/backend/dist/tracks/__tests__/verify-track.js.map +1 -0
- package/backend/dist/tracks/ask-user-bridge.d.ts +59 -0
- package/backend/dist/tracks/ask-user-bridge.d.ts.map +1 -0
- package/backend/dist/tracks/ask-user-bridge.js +186 -0
- package/backend/dist/tracks/ask-user-bridge.js.map +1 -0
- package/backend/dist/tracks/ccweb-train-adapter.d.ts +40 -0
- package/backend/dist/tracks/ccweb-train-adapter.d.ts.map +1 -0
- package/backend/dist/tracks/ccweb-train-adapter.js +111 -0
- package/backend/dist/tracks/ccweb-train-adapter.js.map +1 -0
- package/backend/dist/tracks/cross-lock.d.ts +30 -0
- package/backend/dist/tracks/cross-lock.d.ts.map +1 -0
- package/backend/dist/tracks/cross-lock.js +44 -0
- package/backend/dist/tracks/cross-lock.js.map +1 -0
- package/backend/dist/tracks/index.d.ts +20 -0
- package/backend/dist/tracks/index.d.ts.map +1 -0
- package/backend/dist/tracks/index.js +42 -0
- package/backend/dist/tracks/index.js.map +1 -0
- package/backend/dist/tracks/registry.d.ts +56 -0
- package/backend/dist/tracks/registry.d.ts.map +1 -0
- package/backend/dist/tracks/registry.js +161 -0
- package/backend/dist/tracks/registry.js.map +1 -0
- package/backend/dist/tracks/store.d.ts +37 -0
- package/backend/dist/tracks/store.d.ts.map +1 -0
- package/backend/dist/tracks/store.js +254 -0
- package/backend/dist/tracks/store.js.map +1 -0
- package/backend/dist/tracks/track-runner.d.ts +62 -0
- package/backend/dist/tracks/track-runner.d.ts.map +1 -0
- package/backend/dist/tracks/track-runner.js +134 -0
- package/backend/dist/tracks/track-runner.js.map +1 -0
- package/backend/dist/tracks/train-loader.d.ts +44 -0
- package/backend/dist/tracks/train-loader.d.ts.map +1 -0
- package/backend/dist/tracks/train-loader.js +32 -0
- package/backend/dist/tracks/train-loader.js.map +1 -0
- package/backend/dist/tracks/types-train.d.ts +12 -0
- package/backend/dist/tracks/types-train.d.ts.map +1 -0
- package/backend/dist/tracks/types-train.js +13 -0
- package/backend/dist/tracks/types-train.js.map +1 -0
- package/backend/dist/tracks/types.d.ts +66 -0
- package/backend/dist/tracks/types.d.ts.map +1 -0
- package/backend/dist/tracks/types.js +12 -0
- package/backend/dist/tracks/types.js.map +1 -0
- package/backend/dist/tracks/workflow-data-watcher.d.ts +47 -0
- package/backend/dist/tracks/workflow-data-watcher.d.ts.map +1 -0
- package/backend/dist/tracks/workflow-data-watcher.js +166 -0
- package/backend/dist/tracks/workflow-data-watcher.js.map +1 -0
- package/backend/package-lock.json +107 -0
- package/backend/package.json +6 -1
- package/backend/vendor/@train-lang/adapter-spec/dist/index.d.ts +164 -0
- package/backend/vendor/@train-lang/adapter-spec/dist/index.d.ts.map +1 -0
- package/backend/vendor/@train-lang/adapter-spec/dist/index.js +13 -0
- package/backend/vendor/@train-lang/adapter-spec/dist/index.js.map +1 -0
- package/backend/vendor/@train-lang/adapter-spec/package.json +15 -0
- package/backend/vendor/@train-lang/core/dist/ast-cache.d.ts +74 -0
- package/backend/vendor/@train-lang/core/dist/ast-cache.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/ast-cache.js +157 -0
- package/backend/vendor/@train-lang/core/dist/ast-cache.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/ast.d.ts +350 -0
- package/backend/vendor/@train-lang/core/dist/ast.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/ast.js +15 -0
- package/backend/vendor/@train-lang/core/dist/ast.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/builder.d.ts +21 -0
- package/backend/vendor/@train-lang/core/dist/builder.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/builder.js +1221 -0
- package/backend/vendor/@train-lang/core/dist/builder.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/builtins.d.ts +17 -0
- package/backend/vendor/@train-lang/core/dist/builtins.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/builtins.js +488 -0
- package/backend/vendor/@train-lang/core/dist/builtins.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/index.d.ts +54 -0
- package/backend/vendor/@train-lang/core/dist/index.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/index.js +66 -0
- package/backend/vendor/@train-lang/core/dist/index.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/interpreter.d.ts +110 -0
- package/backend/vendor/@train-lang/core/dist/interpreter.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/interpreter.js +894 -0
- package/backend/vendor/@train-lang/core/dist/interpreter.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/lexer.d.ts +88 -0
- package/backend/vendor/@train-lang/core/dist/lexer.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/lexer.js +243 -0
- package/backend/vendor/@train-lang/core/dist/lexer.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/module-loader.d.ts +74 -0
- package/backend/vendor/@train-lang/core/dist/module-loader.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/module-loader.js +134 -0
- package/backend/vendor/@train-lang/core/dist/module-loader.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/parser.d.ts +135 -0
- package/backend/vendor/@train-lang/core/dist/parser.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/parser.js +838 -0
- package/backend/vendor/@train-lang/core/dist/parser.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/prompt-composer.d.ts +49 -0
- package/backend/vendor/@train-lang/core/dist/prompt-composer.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/prompt-composer.js +159 -0
- package/backend/vendor/@train-lang/core/dist/prompt-composer.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/runtime.d.ts +146 -0
- package/backend/vendor/@train-lang/core/dist/runtime.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/runtime.js +156 -0
- package/backend/vendor/@train-lang/core/dist/runtime.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/type-descriptor.d.ts +18 -0
- package/backend/vendor/@train-lang/core/dist/type-descriptor.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/type-descriptor.js +94 -0
- package/backend/vendor/@train-lang/core/dist/type-descriptor.js.map +1 -0
- package/backend/vendor/@train-lang/core/dist/validation.d.ts +44 -0
- package/backend/vendor/@train-lang/core/dist/validation.d.ts.map +1 -0
- package/backend/vendor/@train-lang/core/dist/validation.js +271 -0
- package/backend/vendor/@train-lang/core/dist/validation.js.map +1 -0
- package/backend/vendor/@train-lang/core/package.json +35 -0
- package/frontend/dist/assets/{ChatOverlay-DsfZXjjz.js → ChatOverlay-D0AFod2I.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-BGZHA8KW.js → GraphPreview-BTnlkocf.js} +2 -2
- package/frontend/dist/assets/{MobilePage-B-FiVfUE.js → MobilePage-CnjdRqIt.js} +3 -3
- package/frontend/dist/assets/{OfficePreview-CvHPeAlI.js → OfficePreview-nTZKPD9R.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-D1OVG7jG.js → PdfPreview-DlB-s5M8.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-CyKEenc5.js → ProjectPage-C_3_sZbd.js} +5 -5
- package/frontend/dist/assets/{SettingsPage-CIe3HZml.js → SettingsPage-BYSCQKoh.js} +2 -2
- package/frontend/dist/assets/{SkillHubPage-CG1-G4Pf.js → SkillHubPage-CUgZXyeE.js} +3 -3
- package/frontend/dist/assets/TrackEditor-R2lmPugZ.js +14 -0
- package/frontend/dist/assets/abap-LPLW346S.js +7 -0
- package/frontend/dist/assets/apex-Dk-jUCUV.js +7 -0
- package/frontend/dist/assets/azcli-DPUMmPlX.js +7 -0
- package/frontend/dist/assets/bat-C1Qbg1bV.js +7 -0
- package/frontend/dist/assets/bicep-D-e-VSJi.js +7 -0
- package/frontend/dist/assets/cameligo-CjUqTgqL.js +7 -0
- package/frontend/dist/assets/{chevron-down-CS7uu2Ol.js → chevron-down-Bc6Xpnnk.js} +1 -1
- package/frontend/dist/assets/clojure-BWsu6Kju.js +7 -0
- package/frontend/dist/assets/codicon-DCmgc-ay.ttf +0 -0
- package/frontend/dist/assets/coffee-DeC36AK3.js +7 -0
- package/frontend/dist/assets/cpp-DcZnmBWT.js +7 -0
- package/frontend/dist/assets/csharp-DqBXBMf0.js +7 -0
- package/frontend/dist/assets/csp-CkO7y8ul.js +7 -0
- package/frontend/dist/assets/css-OAcfVtED.js +7 -0
- package/frontend/dist/assets/cssMode-oT-78_Ke.js +7 -0
- package/frontend/dist/assets/cypher-40UGrUjD.js +7 -0
- package/frontend/dist/assets/dart-DmixyLor.js +7 -0
- package/frontend/dist/assets/dockerfile-CayO4nTA.js +7 -0
- package/frontend/dist/assets/ecl-DRrKCuVc.js +7 -0
- package/frontend/dist/assets/editor-B5EY1bb8.css +1 -0
- package/frontend/dist/assets/editor.main-CKHkO4rf.js +37 -0
- package/frontend/dist/assets/elixir-J3qpp9mX.js +7 -0
- package/frontend/dist/assets/flow9-DzW2c4Im.js +7 -0
- package/frontend/dist/assets/freemarker2-gLqtlSdW.js +7 -0
- package/frontend/dist/assets/fsharp-D00tn_6c.js +7 -0
- package/frontend/dist/assets/go-NnNmgWK_.js +7 -0
- package/frontend/dist/assets/graphql-C9_--VLF.js +7 -0
- package/frontend/dist/assets/handlebars-CMR-cKzv.js +7 -0
- package/frontend/dist/assets/hcl-BhbOULbp.js +7 -0
- package/frontend/dist/assets/html-er6LXl7Q.js +7 -0
- package/frontend/dist/assets/htmlMode-BY7CWp3G.js +7 -0
- package/frontend/dist/assets/index-BmPb0Wl1.css +1 -0
- package/frontend/dist/assets/{index-DN91i4kg.js → index-C6JmYBh3.js} +1 -1
- package/frontend/dist/assets/{index-BThL9NV3.js → index-C7QaGdFu.js} +2 -2
- package/frontend/dist/assets/{index-DCc5jmus.js → index-CuoDBJ4_.js} +1 -1
- package/frontend/dist/assets/index-LxjrLxfp.js +1 -0
- package/frontend/dist/assets/ini-zR-_X5iG.js +7 -0
- package/frontend/dist/assets/java-CSTjsyoZ.js +7 -0
- package/frontend/dist/assets/javascript-R0QZ7Rw2.js +7 -0
- package/frontend/dist/assets/jsonMode-dh6Js0Qv.js +7 -0
- package/frontend/dist/assets/{jszip.min-DHcltCpp.js → jszip.min-D7W3wEX7.js} +1 -1
- package/frontend/dist/assets/julia-DioMOKVu.js +7 -0
- package/frontend/dist/assets/kotlin-Dsb0PKmW.js +7 -0
- package/frontend/dist/assets/less-CZYLoAVD.js +7 -0
- package/frontend/dist/assets/lexon-d5JUiwNk.js +7 -0
- package/frontend/dist/assets/liquid-ggFR895M.js +7 -0
- package/frontend/dist/assets/lua-1Al72GG8.js +7 -0
- package/frontend/dist/assets/m3-hx1xCPC3.js +7 -0
- package/frontend/dist/assets/markdown-DPGrH1xZ.js +7 -0
- package/frontend/dist/assets/mdx-B4WBy0Yh.js +7 -0
- package/frontend/dist/assets/mips-CYbZjkIm.js +7 -0
- package/frontend/dist/assets/msdax-DAioKM5A.js +7 -0
- package/frontend/dist/assets/mysql-7e9GUebS.js +7 -0
- package/frontend/dist/assets/objective-c-BGf8QNjz.js +7 -0
- package/frontend/dist/assets/pascal-hEDRz3un.js +7 -0
- package/frontend/dist/assets/pascaligo-gqEhN6pG.js +7 -0
- package/frontend/dist/assets/perl-CN8Ht9Vk.js +7 -0
- package/frontend/dist/assets/pgsql-CRCqHQBx.js +7 -0
- package/frontend/dist/assets/php-DTZrlAwe.js +7 -0
- package/frontend/dist/assets/pla-CRmh4UcC.js +7 -0
- package/frontend/dist/assets/postiats-Car2G7g8.js +7 -0
- package/frontend/dist/assets/powerquery-BJKl8V3o.js +7 -0
- package/frontend/dist/assets/powershell-Du7a_J7r.js +7 -0
- package/frontend/dist/assets/protobuf-ChneWI0H.js +7 -0
- package/frontend/dist/assets/pug-BH6LSJaf.js +7 -0
- package/frontend/dist/assets/python-AIGmVleM.js +7 -0
- package/frontend/dist/assets/qsharp-CU-Hxpxi.js +7 -0
- package/frontend/dist/assets/r-Bw-W15zh.js +7 -0
- package/frontend/dist/assets/razor-BGAZW957.js +7 -0
- package/frontend/dist/assets/redis-bY-X9-ol.js +7 -0
- package/frontend/dist/assets/redshift-CMu3ubbS.js +7 -0
- package/frontend/dist/assets/restructuredtext-KNkiWGNN.js +7 -0
- package/frontend/dist/assets/ruby-dQWMhU86.js +7 -0
- package/frontend/dist/assets/rust-BAcHhnEU.js +7 -0
- package/frontend/dist/assets/sb-Bidr5w2z.js +7 -0
- package/frontend/dist/assets/scala-imTtxsGY.js +7 -0
- package/frontend/dist/assets/scheme-BY-WHKiB.js +7 -0
- package/frontend/dist/assets/scss-NDoRP52C.js +7 -0
- package/frontend/dist/assets/{select-C09dwvOR.js → select-B9gOzVx5.js} +1 -1
- package/frontend/dist/assets/shell-DrIjotnh.js +7 -0
- package/frontend/dist/assets/solidity-DTahNycF.js +7 -0
- package/frontend/dist/assets/sophia-DtyrjGkZ.js +7 -0
- package/frontend/dist/assets/sparql-CFuS5E3z.js +7 -0
- package/frontend/dist/assets/sql-BRxcnbRv.js +7 -0
- package/frontend/dist/assets/st-Dz4uh7MK.js +7 -0
- package/frontend/dist/assets/swift-Digsrw1G.js +11 -0
- package/frontend/dist/assets/systemverilog-7TDrkMau.js +7 -0
- package/frontend/dist/assets/tcl-BtaFcnDi.js +7 -0
- package/frontend/dist/assets/tsMode-UrEEwBkN.js +7 -0
- package/frontend/dist/assets/twig-Deid_oBs.js +7 -0
- package/frontend/dist/assets/typescript-BTfMCp5C.js +7 -0
- package/frontend/dist/assets/typespec-zUaxhbG8.js +7 -0
- package/frontend/dist/assets/{user-Bj8X-WCQ.js → user-BG-Xqf8M.js} +1 -1
- package/frontend/dist/assets/vb-DK0rKJzo.js +7 -0
- package/frontend/dist/assets/wgsl-B8fNVlOQ.js +7 -0
- package/frontend/dist/assets/xml-BCL5DPdB.js +7 -0
- package/frontend/dist/assets/yaml-B__nW1c2.js +7 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +2 -1
- package/frontend/dist/assets/index-BkQ6KI1l.css +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/tracks/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TrackRunner — thin wrapper around train-lang's runFile that wires
|
|
3
|
+
* the CcwebTrainAdapter + WorkflowDataWatcher + writeProtocolHint into
|
|
4
|
+
* a single ergonomic API for the rest of the ccweb backend.
|
|
5
|
+
*
|
|
6
|
+
* Lifecycle:
|
|
7
|
+
* const runner = createTrackRunner({ ... deps ... })
|
|
8
|
+
* const result = await runner.run(absTrackPath)
|
|
9
|
+
* // result.ok / result.value / result.error
|
|
10
|
+
*
|
|
11
|
+
* Cancel mid-run: runner.cancel() → AbortController fires → train
|
|
12
|
+
* short-circuits next fai dispatch + adapter reports FaiCancelled.
|
|
13
|
+
*
|
|
14
|
+
* train-lang is ESM and ccweb backend is CommonJS, so we use a
|
|
15
|
+
* dynamic import (cached at first call). This is the standard
|
|
16
|
+
* CJS→ESM interop pattern.
|
|
17
|
+
*
|
|
18
|
+
* 详见 ~/Obsidian/Base/cc-web/工作轨重构规划.md §9 T0。
|
|
19
|
+
*/
|
|
20
|
+
import { type CcwebAdapterDeps } from './ccweb-train-adapter';
|
|
21
|
+
import type { WorkflowDataWatcher } from './workflow-data-watcher';
|
|
22
|
+
import type { TrackRunState } from './types';
|
|
23
|
+
import { type AskUserBridge } from './ask-user-bridge';
|
|
24
|
+
export interface TrackRunnerDeps {
|
|
25
|
+
projectId: string;
|
|
26
|
+
injector: CcwebAdapterDeps['injector'];
|
|
27
|
+
watcher: WorkflowDataWatcher;
|
|
28
|
+
/** Total fai attempts per call. Default 3. */
|
|
29
|
+
maxFaiAttempts?: number;
|
|
30
|
+
/** Per-fai-call timeout (ms). Default 600_000. */
|
|
31
|
+
defaultFaiTimeoutMs?: number;
|
|
32
|
+
/** Logger (pino). */
|
|
33
|
+
logger?: CcwebAdapterDeps['logger'];
|
|
34
|
+
/** Optional extra trace listener for UI progress. */
|
|
35
|
+
onState?: (state: TrackRunState) => void;
|
|
36
|
+
/**
|
|
37
|
+
* Bridge for __ccweb_ask_user builtin. When provided, .tr code can
|
|
38
|
+
* call __ccweb_ask_user({fields:[...]}) to suspend on user input.
|
|
39
|
+
* Without a bridge, the builtin is not registered; calls fail with
|
|
40
|
+
* "Undefined identifier '__ccweb_ask_user'".
|
|
41
|
+
*/
|
|
42
|
+
askUserBridge?: AskUserBridge;
|
|
43
|
+
}
|
|
44
|
+
export interface TrackRunResult {
|
|
45
|
+
ok: boolean;
|
|
46
|
+
value: unknown;
|
|
47
|
+
error?: {
|
|
48
|
+
errorType: string;
|
|
49
|
+
message: string;
|
|
50
|
+
code?: string;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
export interface TrackRunner {
|
|
54
|
+
/** Run a .tr file. Resolves when the track terminates (success/fail/cancel). */
|
|
55
|
+
run(absTrackPath: string, args?: unknown[]): Promise<TrackRunResult>;
|
|
56
|
+
/** Cancel an in-flight run. */
|
|
57
|
+
cancel(): void;
|
|
58
|
+
/** Current state snapshot. */
|
|
59
|
+
getState(): TrackRunState | null;
|
|
60
|
+
}
|
|
61
|
+
export declare function createTrackRunner(deps: TrackRunnerDeps): TrackRunner;
|
|
62
|
+
//# sourceMappingURL=track-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-runner.d.ts","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAC5C,OAAO,EAEL,KAAK,aAAa,EACnB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAA;IACtC,OAAO,EAAE,mBAAmB,CAAA;IAC5B,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kDAAkD;IAClD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,qBAAqB;IACrB,MAAM,CAAC,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAA;IACnC,qDAAqD;IACrD,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAA;IACX,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9D;AAyBD,MAAM,WAAW,WAAW;IAC1B,gFAAgF;IAChF,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;IACpE,+BAA+B;IAC/B,MAAM,IAAI,IAAI,CAAA;IACd,8BAA8B;IAC9B,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAA;CACjC;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,WAAW,CAoHpE"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TrackRunner — thin wrapper around train-lang's runFile that wires
|
|
4
|
+
* the CcwebTrainAdapter + WorkflowDataWatcher + writeProtocolHint into
|
|
5
|
+
* a single ergonomic API for the rest of the ccweb backend.
|
|
6
|
+
*
|
|
7
|
+
* Lifecycle:
|
|
8
|
+
* const runner = createTrackRunner({ ... deps ... })
|
|
9
|
+
* const result = await runner.run(absTrackPath)
|
|
10
|
+
* // result.ok / result.value / result.error
|
|
11
|
+
*
|
|
12
|
+
* Cancel mid-run: runner.cancel() → AbortController fires → train
|
|
13
|
+
* short-circuits next fai dispatch + adapter reports FaiCancelled.
|
|
14
|
+
*
|
|
15
|
+
* train-lang is ESM and ccweb backend is CommonJS, so we use a
|
|
16
|
+
* dynamic import (cached at first call). This is the standard
|
|
17
|
+
* CJS→ESM interop pattern.
|
|
18
|
+
*
|
|
19
|
+
* 详见 ~/Obsidian/Base/cc-web/工作轨重构规划.md §9 T0。
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.createTrackRunner = createTrackRunner;
|
|
23
|
+
const ccweb_train_adapter_1 = require("./ccweb-train-adapter");
|
|
24
|
+
const ask_user_bridge_1 = require("./ask-user-bridge");
|
|
25
|
+
const train_loader_1 = require("./train-loader");
|
|
26
|
+
async function loadTrain() {
|
|
27
|
+
// Reuse the shared cache in train-loader.ts so multiple consumers
|
|
28
|
+
// (TrackRunner, AskUserBuiltin factory, any future host extension)
|
|
29
|
+
// get the same module instance — avoids ESM module-graph duplication
|
|
30
|
+
// and removes the double-cache foot-gun.
|
|
31
|
+
return (0, train_loader_1.loadTrainCore)();
|
|
32
|
+
}
|
|
33
|
+
function createTrackRunner(deps) {
|
|
34
|
+
let state = null;
|
|
35
|
+
let abortController = null;
|
|
36
|
+
let taskIndexCounter = 0;
|
|
37
|
+
function updateState(patch) {
|
|
38
|
+
if (!state)
|
|
39
|
+
return;
|
|
40
|
+
state = { ...state, ...patch };
|
|
41
|
+
deps.onState?.(state);
|
|
42
|
+
}
|
|
43
|
+
return {
|
|
44
|
+
async run(absTrackPath, args = []) {
|
|
45
|
+
const train = await loadTrain();
|
|
46
|
+
const runId = `track-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
47
|
+
state = {
|
|
48
|
+
runId,
|
|
49
|
+
trackFilename: absTrackPath.split('/').pop() ?? absTrackPath,
|
|
50
|
+
startedAt: Date.now(),
|
|
51
|
+
status: 'running',
|
|
52
|
+
};
|
|
53
|
+
deps.onState?.(state);
|
|
54
|
+
abortController = new AbortController();
|
|
55
|
+
// Start watcher just before run begins
|
|
56
|
+
deps.watcher.start();
|
|
57
|
+
const adapter = (0, ccweb_train_adapter_1.createCcwebTrainAdapter)({
|
|
58
|
+
projectId: deps.projectId,
|
|
59
|
+
runId,
|
|
60
|
+
injector: deps.injector,
|
|
61
|
+
watcher: deps.watcher,
|
|
62
|
+
nextTaskIndex: () => {
|
|
63
|
+
const i = taskIndexCounter++;
|
|
64
|
+
updateState({ currentTaskIndex: i });
|
|
65
|
+
return i;
|
|
66
|
+
},
|
|
67
|
+
logger: deps.logger,
|
|
68
|
+
});
|
|
69
|
+
// Build extraBuiltins map (currently: __ccweb_ask_user if bridge provided)
|
|
70
|
+
const extraBuiltins = new Map();
|
|
71
|
+
if (deps.askUserBridge) {
|
|
72
|
+
const askUserFn = await (0, ask_user_bridge_1.createAskUserBuiltin)(deps.askUserBridge, runId, abortController.signal);
|
|
73
|
+
extraBuiltins.set('__ccweb_ask_user', askUserFn);
|
|
74
|
+
}
|
|
75
|
+
try {
|
|
76
|
+
const result = await train.runFile(absTrackPath, {
|
|
77
|
+
args,
|
|
78
|
+
adapter,
|
|
79
|
+
maxFaiAttempts: deps.maxFaiAttempts ?? 3,
|
|
80
|
+
defaultFaiTimeoutMs: deps.defaultFaiTimeoutMs ?? 600000,
|
|
81
|
+
writeProtocolHint: (0, ccweb_train_adapter_1.buildCcwebWriteProtocolHint)(),
|
|
82
|
+
signal: abortController.signal,
|
|
83
|
+
extraBuiltins,
|
|
84
|
+
});
|
|
85
|
+
if (result.lexErrors.length > 0 || result.parseErrors.length > 0) {
|
|
86
|
+
const message = `parse errors in ${absTrackPath} (${result.lexErrors.length + result.parseErrors.length})`;
|
|
87
|
+
updateState({
|
|
88
|
+
status: 'failed',
|
|
89
|
+
endedAt: Date.now(),
|
|
90
|
+
error: { errorType: 'ParseError', message },
|
|
91
|
+
});
|
|
92
|
+
return { ok: false, value: null, error: { errorType: 'ParseError', message } };
|
|
93
|
+
}
|
|
94
|
+
if (!result.ok) {
|
|
95
|
+
const exc = result.error;
|
|
96
|
+
const errObj = exc
|
|
97
|
+
? {
|
|
98
|
+
errorType: exc.errorType ?? 'RuntimeError',
|
|
99
|
+
message: exc.message,
|
|
100
|
+
code: exc.code,
|
|
101
|
+
}
|
|
102
|
+
: { errorType: 'RuntimeError', message: 'unknown failure' };
|
|
103
|
+
const finalStatus = errObj.errorType === 'UserCancelError' ? 'cancelled' : 'failed';
|
|
104
|
+
updateState({ status: finalStatus, endedAt: Date.now(), error: errObj });
|
|
105
|
+
return { ok: false, value: null, error: errObj };
|
|
106
|
+
}
|
|
107
|
+
updateState({
|
|
108
|
+
status: 'completed',
|
|
109
|
+
endedAt: Date.now(),
|
|
110
|
+
result: result.value,
|
|
111
|
+
});
|
|
112
|
+
return { ok: true, value: result.value };
|
|
113
|
+
}
|
|
114
|
+
finally {
|
|
115
|
+
deps.watcher.stop();
|
|
116
|
+
if (deps.askUserBridge && state) {
|
|
117
|
+
// Drain any pending ask_user that the bridge still holds.
|
|
118
|
+
deps.askUserBridge.cancelAllForRun(state.runId, 'run ended');
|
|
119
|
+
}
|
|
120
|
+
abortController = null;
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
cancel() {
|
|
124
|
+
if (abortController) {
|
|
125
|
+
abortController.abort();
|
|
126
|
+
deps.logger?.info?.('[TrackRunner] cancel requested');
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
getState() {
|
|
130
|
+
return state;
|
|
131
|
+
},
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=track-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"track-runner.js","sourceRoot":"","sources":["../../src/tracks/track-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dynamic loader for train-lang (ESM) from ccweb backend (CommonJS).
|
|
3
|
+
*
|
|
4
|
+
* `import('@train-lang/core')` is rewritten by ts-node/tsc as `require()`
|
|
5
|
+
* which fails because train-lang is ESM-only. Wrapping the expression in
|
|
6
|
+
* `new Function(...)` defers it past the TS compiler, leaving a native
|
|
7
|
+
* dynamic import at runtime.
|
|
8
|
+
*
|
|
9
|
+
* Single cache for the whole process. Idempotent.
|
|
10
|
+
*/
|
|
11
|
+
import type { Value, BuiltinFunction } from './types-train';
|
|
12
|
+
/**
|
|
13
|
+
* Minimal facade over @train-lang/core. Only the entry points we use
|
|
14
|
+
* from CJS code are listed; keep the type narrow so we don't leak ESM
|
|
15
|
+
* types across the boundary and so changes to train-lang surface here
|
|
16
|
+
* loudly.
|
|
17
|
+
*/
|
|
18
|
+
export interface TrainCoreModule {
|
|
19
|
+
makeBuiltin: (name: string, call: (args: Value[]) => Value | Promise<Value>) => BuiltinFunction;
|
|
20
|
+
runFile: (absPath: string, opts: unknown) => Promise<{
|
|
21
|
+
ok: boolean;
|
|
22
|
+
value: unknown;
|
|
23
|
+
error?: {
|
|
24
|
+
errorType?: string;
|
|
25
|
+
message: string;
|
|
26
|
+
code?: string;
|
|
27
|
+
};
|
|
28
|
+
lexErrors: ReadonlyArray<unknown>;
|
|
29
|
+
parseErrors: ReadonlyArray<unknown>;
|
|
30
|
+
}>;
|
|
31
|
+
TrainException: new (...args: unknown[]) => Error & {
|
|
32
|
+
errorType: string;
|
|
33
|
+
message: string;
|
|
34
|
+
code?: string;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare function loadTrainCore(): Promise<TrainCoreModule>;
|
|
38
|
+
/**
|
|
39
|
+
* Async wrapper for makeBuiltin — loads train-lang on first call and
|
|
40
|
+
* forwards the rest. Use whenever you need to construct a BuiltinFunction
|
|
41
|
+
* from CommonJS code.
|
|
42
|
+
*/
|
|
43
|
+
export declare function makeBuiltinDynamic(name: string, call: (args: Value[]) => Value | Promise<Value>): Promise<BuiltinFunction>;
|
|
44
|
+
//# sourceMappingURL=train-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"train-loader.d.ts","sourceRoot":"","sources":["../../src/tracks/train-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAO3D;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,CACX,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAC5C,eAAe,CAAA;IACpB,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,OAAO,CAAC;QACnD,EAAE,EAAE,OAAO,CAAA;QACX,KAAK,EAAE,OAAO,CAAA;QACd,KAAK,CAAC,EAAE;YACN,SAAS,CAAC,EAAE,MAAM,CAAA;YAClB,OAAO,EAAE,MAAM,CAAA;YACf,IAAI,CAAC,EAAE,MAAM,CAAA;SACd,CAAA;QACD,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;QACjC,WAAW,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;KACpC,CAAC,CAAA;IACF,cAAc,EAAE,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,KAAK,GAAG;QAClD,SAAS,EAAE,MAAM,CAAA;QACjB,OAAO,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAID,wBAAsB,aAAa,IAAI,OAAO,CAAC,eAAe,CAAC,CAK9D;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAC9C,OAAO,CAAC,eAAe,CAAC,CAG1B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dynamic loader for train-lang (ESM) from ccweb backend (CommonJS).
|
|
4
|
+
*
|
|
5
|
+
* `import('@train-lang/core')` is rewritten by ts-node/tsc as `require()`
|
|
6
|
+
* which fails because train-lang is ESM-only. Wrapping the expression in
|
|
7
|
+
* `new Function(...)` defers it past the TS compiler, leaving a native
|
|
8
|
+
* dynamic import at runtime.
|
|
9
|
+
*
|
|
10
|
+
* Single cache for the whole process. Idempotent.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.loadTrainCore = loadTrainCore;
|
|
14
|
+
exports.makeBuiltinDynamic = makeBuiltinDynamic;
|
|
15
|
+
const dynamicImport = new Function('p', 'return import(p)');
|
|
16
|
+
let modPromise = null;
|
|
17
|
+
async function loadTrainCore() {
|
|
18
|
+
if (!modPromise) {
|
|
19
|
+
modPromise = dynamicImport('@train-lang/core');
|
|
20
|
+
}
|
|
21
|
+
return modPromise;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Async wrapper for makeBuiltin — loads train-lang on first call and
|
|
25
|
+
* forwards the rest. Use whenever you need to construct a BuiltinFunction
|
|
26
|
+
* from CommonJS code.
|
|
27
|
+
*/
|
|
28
|
+
async function makeBuiltinDynamic(name, call) {
|
|
29
|
+
const train = await loadTrainCore();
|
|
30
|
+
return train.makeBuiltin(name, call);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=train-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"train-loader.js","sourceRoot":"","sources":["../../src/tracks/train-loader.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AAwCH,sCAKC;AAOD,gDAMC;AAtDD,MAAM,aAAa,GAAG,IAAI,QAAQ,CAChC,GAAG,EACH,kBAAkB,CACgB,CAAA;AA+BpC,IAAI,UAAU,GAAoC,IAAI,CAAA;AAE/C,KAAK,UAAU,aAAa;IACjC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAA6B,CAAA;IAC5E,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;GAIG;AACI,KAAK,UAAU,kBAAkB,CACtC,IAAY,EACZ,IAA+C;IAE/C,MAAM,KAAK,GAAG,MAAM,aAAa,EAAE,CAAA;IACnC,OAAO,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACtC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Re-export train-lang types for CommonJS consumers.
|
|
3
|
+
*
|
|
4
|
+
* train-lang is ESM-only, so direct `import { Value } from '@train-lang/core'`
|
|
5
|
+
* in ts-node CJS mode is risky (TS sometimes resolves types fine, but
|
|
6
|
+
* isolatedModules / module resolution corner cases can break it).
|
|
7
|
+
*
|
|
8
|
+
* Using `import type` here is purely a compile-time alias — the import
|
|
9
|
+
* is fully erased at JS emit, so no runtime require() is generated.
|
|
10
|
+
*/
|
|
11
|
+
export type { Value, BuiltinFunction, TrainException, RuntimeContext, } from '@train-lang/core';
|
|
12
|
+
//# sourceMappingURL=types-train.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-train.d.ts","sourceRoot":"","sources":["../../src/tracks/types-train.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,YAAY,EACV,KAAK,EACL,eAAe,EACf,cAAc,EACd,cAAc,GACf,MAAM,kBAAkB,CAAA"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Re-export train-lang types for CommonJS consumers.
|
|
4
|
+
*
|
|
5
|
+
* train-lang is ESM-only, so direct `import { Value } from '@train-lang/core'`
|
|
6
|
+
* in ts-node CJS mode is risky (TS sometimes resolves types fine, but
|
|
7
|
+
* isolatedModules / module resolution corner cases can break it).
|
|
8
|
+
*
|
|
9
|
+
* Using `import type` here is purely a compile-time alias — the import
|
|
10
|
+
* is fully erased at JS emit, so no runtime require() is generated.
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
//# sourceMappingURL=types-train.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-train.js","sourceRoot":"","sources":["../../src/tracks/types-train.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ccweb "工作轨" (Track) — types.
|
|
3
|
+
*
|
|
4
|
+
* Track 是 ccweb 重构后的工作流,源码是 .tr 文件,执行引擎是 train-lang
|
|
5
|
+
* (@train-lang/core)。本文件定义 ccweb 侧的辅助类型(pipe between
|
|
6
|
+
* train-lang and ccweb's PTY infrastructure)。
|
|
7
|
+
*
|
|
8
|
+
* 详见 ~/Obsidian/Base/cc-web/工作轨重构规划.md §3-§5。
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* workflow_data.json schema (v2,与 backend/src/flows/types.ts 保持一致).
|
|
12
|
+
* Track 沿用同一文件 + 同一协议,只是 train-lang 写入语义化的 outputs
|
|
13
|
+
* 到 variables,task_progress 标记 finish。
|
|
14
|
+
*/
|
|
15
|
+
export interface WorkflowData {
|
|
16
|
+
constants: Record<string, unknown>;
|
|
17
|
+
variables: Record<string, unknown>;
|
|
18
|
+
task_progress: TaskProgressEntry[];
|
|
19
|
+
}
|
|
20
|
+
export interface TaskProgressEntry {
|
|
21
|
+
nodeId: number;
|
|
22
|
+
name: string;
|
|
23
|
+
finish: boolean;
|
|
24
|
+
startedAt: number;
|
|
25
|
+
finishedAt?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Per-call accounting state held by TrackRunner. `taskIndex` is a
|
|
29
|
+
* monotonically increasing counter scoped to a single track run; it
|
|
30
|
+
* indexes into workflow_data.task_progress[].
|
|
31
|
+
*/
|
|
32
|
+
export interface TrackCallState {
|
|
33
|
+
taskIndex: number;
|
|
34
|
+
faiName: string;
|
|
35
|
+
startedAt: number;
|
|
36
|
+
finishedAt?: number;
|
|
37
|
+
}
|
|
38
|
+
export type TrackRunStatus = 'idle' | 'running' | 'paused' | 'completed' | 'failed' | 'cancelled';
|
|
39
|
+
export interface TrackRunState {
|
|
40
|
+
runId: string;
|
|
41
|
+
trackFilename: string;
|
|
42
|
+
startedAt: number;
|
|
43
|
+
endedAt?: number;
|
|
44
|
+
status: TrackRunStatus;
|
|
45
|
+
/** Latest fai call index dispatched (for UI progress display). */
|
|
46
|
+
currentTaskIndex?: number;
|
|
47
|
+
/** Final return value when status === completed. */
|
|
48
|
+
result?: unknown;
|
|
49
|
+
/** Error message when status === failed. */
|
|
50
|
+
error?: {
|
|
51
|
+
errorType: string;
|
|
52
|
+
message: string;
|
|
53
|
+
code?: string;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
/** Identity of a running adapter call — used by watcher.waitForFinish. */
|
|
57
|
+
export interface AdapterCallContext {
|
|
58
|
+
/** Project + run ids for log/trace correlation. */
|
|
59
|
+
projectId: string;
|
|
60
|
+
runId: string;
|
|
61
|
+
/** Index into workflow_data.task_progress[] for this call. */
|
|
62
|
+
taskIndex: number;
|
|
63
|
+
/** Fai function name (for prompt header + log). */
|
|
64
|
+
fnName: string;
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/tracks/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;;;GAIG;AACH,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAClC,aAAa,EAAE,iBAAiB,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,OAAO,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,MAAM,cAAc,GACtB,MAAM,GACN,SAAS,GACT,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,WAAW,CAAA;AAEf,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,cAAc,CAAA;IACtB,kEAAkE;IAClE,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,4CAA4C;IAC5C,KAAK,CAAC,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAC9D;AAED,0EAA0E;AAC1E,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAA;IACjB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAA;CACf"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* ccweb "工作轨" (Track) — types.
|
|
4
|
+
*
|
|
5
|
+
* Track 是 ccweb 重构后的工作流,源码是 .tr 文件,执行引擎是 train-lang
|
|
6
|
+
* (@train-lang/core)。本文件定义 ccweb 侧的辅助类型(pipe between
|
|
7
|
+
* train-lang and ccweb's PTY infrastructure)。
|
|
8
|
+
*
|
|
9
|
+
* 详见 ~/Obsidian/Base/cc-web/工作轨重构规划.md §3-§5。
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/tracks/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WorkflowDataWatcher — observe `<project>/.ccweb/workflow_data.json`
|
|
3
|
+
* for `task_progress[taskIndex].finish === true` signals.
|
|
4
|
+
*
|
|
5
|
+
* Replaces (and inlines a more focused version of) the inline polling
|
|
6
|
+
* loop in backend/src/flows/runner.ts:waitForTaskFinish. The track
|
|
7
|
+
* subsystem needs the same primitive but decoupled from FlowRunner.
|
|
8
|
+
*
|
|
9
|
+
* Strategy:
|
|
10
|
+
* - fs.watch with 50ms debounce
|
|
11
|
+
* - on each event, read file + parse JSON
|
|
12
|
+
* - for any pending waiter whose taskIndex.finish is true → resolve
|
|
13
|
+
* - AbortSignal cancels the wait (returns 'cancelled')
|
|
14
|
+
* - timeoutMs caps the wait (returns 'timeout')
|
|
15
|
+
*
|
|
16
|
+
* The watcher does NOT write to workflow_data.json. Only the LLM (via
|
|
17
|
+
* the PTY process the adapter injects into) is expected to write.
|
|
18
|
+
*/
|
|
19
|
+
import type { WorkflowData } from './types';
|
|
20
|
+
export type FinishOutcome = {
|
|
21
|
+
kind: 'ok';
|
|
22
|
+
finishedAt: number;
|
|
23
|
+
data: WorkflowData;
|
|
24
|
+
} | {
|
|
25
|
+
kind: 'timeout';
|
|
26
|
+
} | {
|
|
27
|
+
kind: 'cancelled';
|
|
28
|
+
} | {
|
|
29
|
+
kind: 'error';
|
|
30
|
+
message: string;
|
|
31
|
+
};
|
|
32
|
+
export interface WorkflowDataWatcher {
|
|
33
|
+
/** Begin watching the file. Idempotent. */
|
|
34
|
+
start(): void;
|
|
35
|
+
/** Stop watching + reject all pending waiters with cancelled. */
|
|
36
|
+
stop(): void;
|
|
37
|
+
/**
|
|
38
|
+
* Wait until workflow_data.task_progress[taskIndex].finish === true
|
|
39
|
+
* for the given taskIndex, OR timeoutMs elapses, OR signal aborts.
|
|
40
|
+
* Returns the post-finish WorkflowData snapshot on success.
|
|
41
|
+
*/
|
|
42
|
+
waitForFinish(taskIndex: number, timeoutMs: number, signal?: AbortSignal): Promise<FinishOutcome>;
|
|
43
|
+
/** One-shot read of the file (used by tests + adapter). */
|
|
44
|
+
read(): Promise<WorkflowData>;
|
|
45
|
+
}
|
|
46
|
+
export declare function createWorkflowDataWatcher(workflowDataPath: string): WorkflowDataWatcher;
|
|
47
|
+
//# sourceMappingURL=workflow-data-watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-data-watcher.d.ts","sourceRoot":"","sources":["../../src/tracks/workflow-data-watcher.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE3C,MAAM,MAAM,aAAa,GACrB;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,YAAY,CAAA;CAAE,GACtD;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,GACnB;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GACrB;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAA;AAEtC,MAAM,WAAW,mBAAmB;IAClC,2CAA2C;IAC3C,KAAK,IAAI,IAAI,CAAA;IACb,iEAAiE;IACjE,IAAI,IAAI,IAAI,CAAA;IACZ;;;;OAIG;IACH,aAAa,CACX,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAAA;IACzB,2DAA2D;IAC3D,IAAI,IAAI,OAAO,CAAC,YAAY,CAAC,CAAA;CAC9B;AAYD,wBAAgB,yBAAyB,CACvC,gBAAgB,EAAE,MAAM,GACvB,mBAAmB,CA2GrB"}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* WorkflowDataWatcher — observe `<project>/.ccweb/workflow_data.json`
|
|
4
|
+
* for `task_progress[taskIndex].finish === true` signals.
|
|
5
|
+
*
|
|
6
|
+
* Replaces (and inlines a more focused version of) the inline polling
|
|
7
|
+
* loop in backend/src/flows/runner.ts:waitForTaskFinish. The track
|
|
8
|
+
* subsystem needs the same primitive but decoupled from FlowRunner.
|
|
9
|
+
*
|
|
10
|
+
* Strategy:
|
|
11
|
+
* - fs.watch with 50ms debounce
|
|
12
|
+
* - on each event, read file + parse JSON
|
|
13
|
+
* - for any pending waiter whose taskIndex.finish is true → resolve
|
|
14
|
+
* - AbortSignal cancels the wait (returns 'cancelled')
|
|
15
|
+
* - timeoutMs caps the wait (returns 'timeout')
|
|
16
|
+
*
|
|
17
|
+
* The watcher does NOT write to workflow_data.json. Only the LLM (via
|
|
18
|
+
* the PTY process the adapter injects into) is expected to write.
|
|
19
|
+
*/
|
|
20
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
21
|
+
if (k2 === undefined) k2 = k;
|
|
22
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
23
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
24
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
25
|
+
}
|
|
26
|
+
Object.defineProperty(o, k2, desc);
|
|
27
|
+
}) : (function(o, m, k, k2) {
|
|
28
|
+
if (k2 === undefined) k2 = k;
|
|
29
|
+
o[k2] = m[k];
|
|
30
|
+
}));
|
|
31
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
32
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
33
|
+
}) : function(o, v) {
|
|
34
|
+
o["default"] = v;
|
|
35
|
+
});
|
|
36
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
37
|
+
var ownKeys = function(o) {
|
|
38
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
39
|
+
var ar = [];
|
|
40
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
41
|
+
return ar;
|
|
42
|
+
};
|
|
43
|
+
return ownKeys(o);
|
|
44
|
+
};
|
|
45
|
+
return function (mod) {
|
|
46
|
+
if (mod && mod.__esModule) return mod;
|
|
47
|
+
var result = {};
|
|
48
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
49
|
+
__setModuleDefault(result, mod);
|
|
50
|
+
return result;
|
|
51
|
+
};
|
|
52
|
+
})();
|
|
53
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
54
|
+
exports.createWorkflowDataWatcher = createWorkflowDataWatcher;
|
|
55
|
+
const fs = __importStar(require("fs"));
|
|
56
|
+
const fsp = __importStar(require("fs/promises"));
|
|
57
|
+
const DEBOUNCE_MS = 50;
|
|
58
|
+
function createWorkflowDataWatcher(workflowDataPath) {
|
|
59
|
+
let watcher = null;
|
|
60
|
+
let debounceTimer = null;
|
|
61
|
+
const waiters = [];
|
|
62
|
+
async function readSafe() {
|
|
63
|
+
try {
|
|
64
|
+
const text = await fsp.readFile(workflowDataPath, 'utf8');
|
|
65
|
+
return JSON.parse(text);
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function checkAll() {
|
|
72
|
+
const data = await readSafe();
|
|
73
|
+
if (!data)
|
|
74
|
+
return;
|
|
75
|
+
// Snapshot waiters list so resolving doesn't mutate during iteration
|
|
76
|
+
const pending = waiters.slice();
|
|
77
|
+
for (const w of pending) {
|
|
78
|
+
const entry = data.task_progress?.[w.taskIndex];
|
|
79
|
+
if (entry && entry.finish === true) {
|
|
80
|
+
finalize(w, {
|
|
81
|
+
kind: 'ok',
|
|
82
|
+
finishedAt: entry.finishedAt ?? Date.now(),
|
|
83
|
+
data,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
function finalize(w, outcome) {
|
|
89
|
+
const idx = waiters.indexOf(w);
|
|
90
|
+
if (idx >= 0)
|
|
91
|
+
waiters.splice(idx, 1);
|
|
92
|
+
clearTimeout(w.timer);
|
|
93
|
+
if (w.signal && w.signalHandler) {
|
|
94
|
+
w.signal.removeEventListener('abort', w.signalHandler);
|
|
95
|
+
}
|
|
96
|
+
w.resolve(outcome);
|
|
97
|
+
}
|
|
98
|
+
function scheduleCheck() {
|
|
99
|
+
if (debounceTimer)
|
|
100
|
+
return;
|
|
101
|
+
debounceTimer = setTimeout(() => {
|
|
102
|
+
debounceTimer = null;
|
|
103
|
+
void checkAll();
|
|
104
|
+
}, DEBOUNCE_MS);
|
|
105
|
+
}
|
|
106
|
+
return {
|
|
107
|
+
start() {
|
|
108
|
+
if (watcher)
|
|
109
|
+
return;
|
|
110
|
+
try {
|
|
111
|
+
watcher = fs.watch(workflowDataPath, { persistent: false }, () => {
|
|
112
|
+
scheduleCheck();
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
// File may not exist yet; we'll still attempt to poll on-demand
|
|
117
|
+
// when a waiter is added (see waitForFinish below).
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
stop() {
|
|
121
|
+
if (watcher) {
|
|
122
|
+
watcher.close();
|
|
123
|
+
watcher = null;
|
|
124
|
+
}
|
|
125
|
+
if (debounceTimer) {
|
|
126
|
+
clearTimeout(debounceTimer);
|
|
127
|
+
debounceTimer = null;
|
|
128
|
+
}
|
|
129
|
+
while (waiters.length > 0) {
|
|
130
|
+
const w = waiters[0];
|
|
131
|
+
finalize(w, { kind: 'cancelled' });
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
waitForFinish(taskIndex, timeoutMs, signal) {
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
const waiter = {
|
|
137
|
+
taskIndex,
|
|
138
|
+
resolve,
|
|
139
|
+
timer: setTimeout(() => finalize(waiter, { kind: 'timeout' }), timeoutMs),
|
|
140
|
+
signal,
|
|
141
|
+
};
|
|
142
|
+
if (signal) {
|
|
143
|
+
if (signal.aborted) {
|
|
144
|
+
// already aborted before we even started
|
|
145
|
+
resolve({ kind: 'cancelled' });
|
|
146
|
+
clearTimeout(waiter.timer);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
waiter.signalHandler = () => finalize(waiter, { kind: 'cancelled' });
|
|
150
|
+
signal.addEventListener('abort', waiter.signalHandler, { once: true });
|
|
151
|
+
}
|
|
152
|
+
waiters.push(waiter);
|
|
153
|
+
// Eager check in case the signal landed before the watcher started
|
|
154
|
+
void checkAll();
|
|
155
|
+
});
|
|
156
|
+
},
|
|
157
|
+
async read() {
|
|
158
|
+
const data = await readSafe();
|
|
159
|
+
if (!data) {
|
|
160
|
+
throw new Error(`workflow_data.json not readable: ${workflowDataPath}`);
|
|
161
|
+
}
|
|
162
|
+
return data;
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=workflow-data-watcher.js.map
|