@tom2012/cc-web 2026.6.17-b → 2026.9.6-c
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/CHANGELOG.json +96 -21
- package/backend/dist/adapters/claude-adapter.d.ts +4 -0
- package/backend/dist/adapters/claude-adapter.d.ts.map +1 -1
- package/backend/dist/adapters/claude-adapter.js +18 -2
- package/backend/dist/adapters/claude-adapter.js.map +1 -1
- package/backend/dist/adapters/types.d.ts +8 -0
- package/backend/dist/adapters/types.d.ts.map +1 -1
- package/backend/dist/auth.d.ts.map +0 -0
- package/backend/dist/config.d.ts +0 -0
- package/backend/dist/config.js +0 -0
- package/backend/dist/config.js.map +0 -0
- package/backend/dist/hooks-manager.d.ts +0 -1
- package/backend/dist/hooks-manager.d.ts.map +1 -1
- package/backend/dist/hooks-manager.js +19 -19
- package/backend/dist/hooks-manager.js.map +1 -1
- package/backend/dist/index.d.ts.map +1 -1
- package/backend/dist/index.js +76 -1
- package/backend/dist/index.js.map +1 -1
- package/backend/dist/logger.d.ts.map +1 -1
- package/backend/dist/logger.js +3 -0
- package/backend/dist/logger.js.map +1 -1
- package/backend/dist/routes/auth.d.ts +0 -0
- package/backend/dist/routes/auth.d.ts.map +0 -0
- package/backend/dist/routes/auth.js.map +0 -0
- package/backend/dist/routes/projects.d.ts.map +0 -0
- package/backend/dist/routes/projects.js.map +0 -0
- package/backend/dist/session-manager.d.ts +0 -0
- package/backend/dist/session-manager.d.ts.map +0 -0
- package/backend/dist/session-manager.js +0 -0
- package/backend/dist/session-manager.js.map +0 -0
- package/backend/dist/terminal-manager.d.ts +10 -1
- package/backend/dist/terminal-manager.d.ts.map +1 -1
- package/backend/dist/terminal-manager.js +19 -2
- package/backend/dist/terminal-manager.js.map +1 -1
- package/backend/dist/types.d.ts +0 -0
- package/backend/dist/types.d.ts.map +0 -0
- package/backend/dist/types.js +0 -0
- package/backend/dist/types.js.map +0 -0
- package/frontend/dist/assets/{ChatOverlay-Dp1BzsYb.js → ChatOverlay-CymdKeQK.js} +1 -1
- package/frontend/dist/assets/{ClaudeMemPage-CpzMjJnb.js → ClaudeMemPage-BZ4UtUoz.js} +1 -1
- package/frontend/dist/assets/{GraphPreview-DDY1yVOX.js → GraphPreview-21EwV_e_.js} +1 -1
- package/frontend/dist/assets/{MobilePage-BnnE820D.js → MobilePage-99vv9cWh.js} +3 -3
- package/frontend/dist/assets/{NotebookPage-BOiYcs-l.js → NotebookPage-B-mcSRJm.js} +1 -1
- package/frontend/dist/assets/{OfficePreview-C5N2gr8-.js → OfficePreview-C3rHS2Te.js} +2 -2
- package/frontend/dist/assets/{PdfPreview-COG-9AQa.js → PdfPreview-B-toyaoA.js} +1 -1
- package/frontend/dist/assets/{ProjectPage-ARPH_J5o.js → ProjectPage-CShqyrUl.js} +4 -4
- package/frontend/dist/assets/{ProjectSettingsPage-CMWcT-5r.js → ProjectSettingsPage-FxkEGuUP.js} +1 -1
- package/frontend/dist/assets/{SettingsPage-BMrIDtg8.js → SettingsPage-B-bqNp6b.js} +1 -1
- package/frontend/dist/assets/{SkillHubPage-Bq93A7Rt.js → SkillHubPage-DN79j9Is.js} +1 -1
- package/frontend/dist/assets/{check-circle-2-BGT1eH1f.js → check-circle-2-DRT7EX5I.js} +1 -1
- package/frontend/dist/assets/{chevron-down-Bbg11n9i.js → chevron-down-DdtdiM4b.js} +1 -1
- package/frontend/dist/assets/{chevron-left-BmStQriC.js → chevron-left-Chv-EE6G.js} +1 -1
- package/frontend/dist/assets/{file-text-D9WjmbhK.js → file-text-D3ZDULSr.js} +1 -1
- package/frontend/dist/assets/{index-EFhMcMWk.js → index-BIGQ6n-i.js} +2 -2
- package/frontend/dist/assets/index-BpdaJxoa.css +1 -0
- package/frontend/dist/assets/{index-BRqvDxO6.js → index-CH1oLpmL.js} +1 -1
- package/frontend/dist/assets/{index-Bhp9CVTp.js → index-Dbm49BgL.js} +1 -1
- package/frontend/dist/assets/{index-COZnAgez.js → index-xJR85RJZ.js} +1 -1
- package/frontend/dist/assets/{jszip.min-Dyo__hKc.js → jszip.min-CMcZF4_M.js} +1 -1
- package/frontend/dist/assets/{save-CAjdgnp7.js → save-Dhw-I0uF.js} +1 -1
- package/frontend/dist/assets/{search-DmWhhICR.js → search-zoOED2R0.js} +1 -1
- package/frontend/dist/assets/{select-DAfsBGCS.js → select-B7xEE81_.js} +1 -1
- package/frontend/dist/assets/{tabs-zra46FZv.js → tabs-BCHX4LWy.js} +1 -1
- package/frontend/dist/assets/{textarea-BG4Tvy0e.js → textarea-CGPmR1Ae.js} +1 -1
- package/frontend/dist/index.html +2 -2
- package/package.json +36 -10
- package/backend/dist/backup/config.d.ts +0 -10
- package/backend/dist/backup/config.d.ts.map +0 -1
- package/backend/dist/backup/config.js +0 -128
- package/backend/dist/backup/config.js.map +0 -1
- package/backend/dist/backup/engine.d.ts +0 -22
- package/backend/dist/backup/engine.d.ts.map +0 -1
- package/backend/dist/backup/engine.js +0 -298
- package/backend/dist/backup/engine.js.map +0 -1
- package/backend/dist/backup/providers/dropbox.d.ts +0 -25
- package/backend/dist/backup/providers/dropbox.d.ts.map +0 -1
- package/backend/dist/backup/providers/dropbox.js +0 -320
- package/backend/dist/backup/providers/dropbox.js.map +0 -1
- package/backend/dist/backup/providers/google-drive.d.ts +0 -29
- package/backend/dist/backup/providers/google-drive.d.ts.map +0 -1
- package/backend/dist/backup/providers/google-drive.js +0 -303
- package/backend/dist/backup/providers/google-drive.js.map +0 -1
- package/backend/dist/backup/providers/index.d.ts +0 -3
- package/backend/dist/backup/providers/index.d.ts.map +0 -1
- package/backend/dist/backup/providers/index.js +0 -19
- package/backend/dist/backup/providers/index.js.map +0 -1
- package/backend/dist/backup/providers/onedrive.d.ts +0 -29
- package/backend/dist/backup/providers/onedrive.d.ts.map +0 -1
- package/backend/dist/backup/providers/onedrive.js +0 -317
- package/backend/dist/backup/providers/onedrive.js.map +0 -1
- package/backend/dist/backup/scheduler.d.ts +0 -6
- package/backend/dist/backup/scheduler.d.ts.map +0 -1
- package/backend/dist/backup/scheduler.js +0 -55
- package/backend/dist/backup/scheduler.js.map +0 -1
- package/backend/dist/backup/types.d.ts +0 -73
- package/backend/dist/backup/types.d.ts.map +0 -1
- package/backend/dist/backup/types.js +0 -4
- package/backend/dist/backup/types.js.map +0 -1
- package/backend/dist/chat-process-manager.d.ts +0 -45
- package/backend/dist/chat-process-manager.d.ts.map +0 -1
- package/backend/dist/chat-process-manager.js +0 -258
- package/backend/dist/chat-process-manager.js.map +0 -1
- package/backend/dist/flows/runner.d.ts +0 -37
- package/backend/dist/flows/runner.d.ts.map +0 -1
- package/backend/dist/flows/runner.js +0 -660
- package/backend/dist/flows/runner.js.map +0 -1
- package/backend/dist/flows/store.d.ts +0 -40
- package/backend/dist/flows/store.d.ts.map +0 -1
- package/backend/dist/flows/store.js +0 -284
- package/backend/dist/flows/store.js.map +0 -1
- package/backend/dist/flows/types.d.ts +0 -176
- package/backend/dist/flows/types.d.ts.map +0 -1
- package/backend/dist/flows/types.js +0 -25
- package/backend/dist/flows/types.js.map +0 -1
- package/backend/dist/information/condenser.d.ts +0 -12
- package/backend/dist/information/condenser.d.ts.map +0 -1
- package/backend/dist/information/condenser.js +0 -568
- package/backend/dist/information/condenser.js.map +0 -1
- package/backend/dist/information/conversation-sync.d.ts +0 -22
- package/backend/dist/information/conversation-sync.d.ts.map +0 -1
- package/backend/dist/information/conversation-sync.js +0 -500
- package/backend/dist/information/conversation-sync.js.map +0 -1
- package/backend/dist/information/types.d.ts +0 -36
- package/backend/dist/information/types.d.ts.map +0 -1
- package/backend/dist/information/types.js +0 -4
- package/backend/dist/information/types.js.map +0 -1
- package/backend/dist/memory-pool/buoyancy.d.ts +0 -2
- package/backend/dist/memory-pool/buoyancy.d.ts.map +0 -1
- package/backend/dist/memory-pool/buoyancy.js +0 -12
- package/backend/dist/memory-pool/buoyancy.js.map +0 -1
- package/backend/dist/memory-pool/global-pool-manager.d.ts +0 -12
- package/backend/dist/memory-pool/global-pool-manager.d.ts.map +0 -1
- package/backend/dist/memory-pool/global-pool-manager.js +0 -295
- package/backend/dist/memory-pool/global-pool-manager.js.map +0 -1
- package/backend/dist/memory-pool/pool-lock.d.ts +0 -2
- package/backend/dist/memory-pool/pool-lock.d.ts.map +0 -1
- package/backend/dist/memory-pool/pool-lock.js +0 -31
- package/backend/dist/memory-pool/pool-lock.js.map +0 -1
- package/backend/dist/memory-pool/pool-manager.d.ts +0 -57
- package/backend/dist/memory-pool/pool-manager.d.ts.map +0 -1
- package/backend/dist/memory-pool/pool-manager.js +0 -322
- package/backend/dist/memory-pool/pool-manager.js.map +0 -1
- package/backend/dist/memory-pool/templates.d.ts +0 -5
- package/backend/dist/memory-pool/templates.d.ts.map +0 -1
- package/backend/dist/memory-pool/templates.js +0 -234
- package/backend/dist/memory-pool/templates.js.map +0 -1
- package/backend/dist/memory-pool/types.d.ts +0 -61
- package/backend/dist/memory-pool/types.d.ts.map +0 -1
- package/backend/dist/memory-pool/types.js +0 -4
- package/backend/dist/memory-pool/types.js.map +0 -1
- package/backend/dist/plan-control/checker.d.ts +0 -3
- package/backend/dist/plan-control/checker.d.ts.map +0 -1
- package/backend/dist/plan-control/checker.js +0 -103
- package/backend/dist/plan-control/checker.js.map +0 -1
- package/backend/dist/plan-control/executor.d.ts +0 -93
- package/backend/dist/plan-control/executor.d.ts.map +0 -1
- package/backend/dist/plan-control/executor.js +0 -955
- package/backend/dist/plan-control/executor.js.map +0 -1
- package/backend/dist/plan-control/parser.d.ts +0 -12
- package/backend/dist/plan-control/parser.d.ts.map +0 -1
- package/backend/dist/plan-control/parser.js +0 -216
- package/backend/dist/plan-control/parser.js.map +0 -1
- package/backend/dist/plan-control/templates.d.ts +0 -4
- package/backend/dist/plan-control/templates.d.ts.map +0 -1
- package/backend/dist/plan-control/templates.js +0 -271
- package/backend/dist/plan-control/templates.js.map +0 -1
- package/backend/dist/plan-control/types.d.ts +0 -102
- package/backend/dist/plan-control/types.d.ts.map +0 -1
- package/backend/dist/plan-control/types.js +0 -12
- package/backend/dist/plan-control/types.js.map +0 -1
- package/backend/dist/routes/backup.d.ts +0 -4
- package/backend/dist/routes/backup.d.ts.map +0 -1
- package/backend/dist/routes/backup.js +0 -274
- package/backend/dist/routes/backup.js.map +0 -1
- package/backend/dist/routes/flows.d.ts +0 -5
- package/backend/dist/routes/flows.d.ts.map +0 -1
- package/backend/dist/routes/flows.js +0 -457
- package/backend/dist/routes/flows.js.map +0 -1
- package/backend/dist/routes/global-flows.d.ts +0 -3
- package/backend/dist/routes/global-flows.d.ts.map +0 -1
- package/backend/dist/routes/global-flows.js +0 -90
- package/backend/dist/routes/global-flows.js.map +0 -1
- package/backend/dist/routes/information.d.ts +0 -3
- package/backend/dist/routes/information.d.ts.map +0 -1
- package/backend/dist/routes/information.js +0 -159
- package/backend/dist/routes/information.js.map +0 -1
- package/backend/dist/routes/memory-pool.d.ts +0 -3
- package/backend/dist/routes/memory-pool.d.ts.map +0 -1
- package/backend/dist/routes/memory-pool.js +0 -837
- package/backend/dist/routes/memory-pool.js.map +0 -1
- package/backend/dist/routes/plan-control.d.ts +0 -15
- package/backend/dist/routes/plan-control.d.ts.map +0 -1
- package/backend/dist/routes/plan-control.js +0 -337
- package/backend/dist/routes/plan-control.js.map +0 -1
- package/backend/dist/routes/share.d.ts +0 -3
- package/backend/dist/routes/share.d.ts.map +0 -1
- package/backend/dist/routes/share.js +0 -167
- package/backend/dist/routes/share.js.map +0 -1
- package/backend/dist/routes/sounds.d.ts +0 -3
- package/backend/dist/routes/sounds.d.ts.map +0 -1
- package/backend/dist/routes/sounds.js +0 -285
- package/backend/dist/routes/sounds.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts +0 -24
- package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-starter-templates.js +0 -175
- package/backend/dist/tracks/__tests__/verify-starter-templates.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts +0 -23
- package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-cancel.js +0 -153
- package/backend/dist/tracks/__tests__/verify-track-cancel.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts +0 -11
- package/backend/dist/tracks/__tests__/verify-track-t1.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track-t1.js +0 -293
- package/backend/dist/tracks/__tests__/verify-track-t1.js.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track.d.ts +0 -20
- package/backend/dist/tracks/__tests__/verify-track.d.ts.map +0 -1
- package/backend/dist/tracks/__tests__/verify-track.js +0 -187
- package/backend/dist/tracks/__tests__/verify-track.js.map +0 -1
- package/backend/dist/tracks/registry.d.ts +0 -61
- package/backend/dist/tracks/registry.d.ts.map +0 -1
- package/backend/dist/tracks/registry.js +0 -202
- package/backend/dist/tracks/registry.js.map +0 -1
- package/backend/dist/tracks/track-runner.d.ts +0 -69
- package/backend/dist/tracks/track-runner.d.ts.map +0 -1
- package/backend/dist/tracks/track-runner.js +0 -158
- package/backend/dist/tracks/track-runner.js.map +0 -1
- package/backend/dist/tracks/train-loader.d.ts +0 -44
- package/backend/dist/tracks/train-loader.d.ts.map +0 -1
- package/backend/dist/tracks/train-loader.js +0 -32
- package/backend/dist/tracks/train-loader.js.map +0 -1
- package/backend/dist/tracks/types-train.d.ts +0 -12
- package/backend/dist/tracks/types-train.d.ts.map +0 -1
- package/backend/dist/tracks/types-train.js +0 -13
- package/backend/dist/tracks/types-train.js.map +0 -1
- package/backend/dist/usage-terminal.d.ts +0 -18
- package/backend/dist/usage-terminal.d.ts.map +0 -1
- package/backend/dist/usage-terminal.js +0 -191
- package/backend/dist/usage-terminal.js.map +0 -1
- package/frontend/dist/assets/index-GfCaMXPO.css +0 -1
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Regression test for the v-15-f/g daemon-crash bug:
|
|
4
|
-
*
|
|
5
|
-
* POST /tracks/abort while a track is suspended in __ccweb_ask_user
|
|
6
|
-
* used to bubble the reject up through bridge.requestInput →
|
|
7
|
-
* builtin → train.runFile → runner.run → registry.start's `void
|
|
8
|
-
* runner.run(...).then(...)`. Because that .then had no .catch, the
|
|
9
|
-
* rejection escaped as `unhandledRejection`, and the global fatal
|
|
10
|
-
* handler in logger.ts called process.exit(1) — ccweb daemon died.
|
|
11
|
-
*
|
|
12
|
-
* This script:
|
|
13
|
-
* 1. Installs an unhandledRejection listener that flips a flag.
|
|
14
|
-
* 2. Starts a registry-driven track that blocks on __ccweb_ask_user.
|
|
15
|
-
* 3. Calls registry.abort() once the ask_user push fires.
|
|
16
|
-
* 4. Verifies:
|
|
17
|
-
* - flag stays false (no escaping promise)
|
|
18
|
-
* - registry.getState() reports status === 'cancelled'
|
|
19
|
-
* - track_run_complete broadcast has ok=false, errorType=UserCancelError
|
|
20
|
-
*
|
|
21
|
-
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track-cancel.ts
|
|
22
|
-
*/
|
|
23
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
24
|
-
if (k2 === undefined) k2 = k;
|
|
25
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
26
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
27
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
28
|
-
}
|
|
29
|
-
Object.defineProperty(o, k2, desc);
|
|
30
|
-
}) : (function(o, m, k, k2) {
|
|
31
|
-
if (k2 === undefined) k2 = k;
|
|
32
|
-
o[k2] = m[k];
|
|
33
|
-
}));
|
|
34
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
35
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
36
|
-
}) : function(o, v) {
|
|
37
|
-
o["default"] = v;
|
|
38
|
-
});
|
|
39
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
40
|
-
var ownKeys = function(o) {
|
|
41
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
42
|
-
var ar = [];
|
|
43
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
44
|
-
return ar;
|
|
45
|
-
};
|
|
46
|
-
return ownKeys(o);
|
|
47
|
-
};
|
|
48
|
-
return function (mod) {
|
|
49
|
-
if (mod && mod.__esModule) return mod;
|
|
50
|
-
var result = {};
|
|
51
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
52
|
-
__setModuleDefault(result, mod);
|
|
53
|
-
return result;
|
|
54
|
-
};
|
|
55
|
-
})();
|
|
56
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
57
|
-
const fs = __importStar(require("fs/promises"));
|
|
58
|
-
const os = __importStar(require("os"));
|
|
59
|
-
const path = __importStar(require("path"));
|
|
60
|
-
const __1 = require("..");
|
|
61
|
-
let failed = 0;
|
|
62
|
-
function check(name, cond, msg) {
|
|
63
|
-
if (cond) {
|
|
64
|
-
console.log(` ✓ ${name}`);
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
failed++;
|
|
68
|
-
console.error(` ✗ ${name}${msg ? ': ' + msg : ''}`);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
async function writeWf(p, w) {
|
|
72
|
-
await fs.writeFile(p, JSON.stringify(w, null, 2), 'utf8');
|
|
73
|
-
}
|
|
74
|
-
async function testAbortDuringAskUser() {
|
|
75
|
-
console.log('\n=== abort during pending ask_user (regression v-15-f/g) ===');
|
|
76
|
-
let unhandled = null;
|
|
77
|
-
const onUnhandled = (reason) => {
|
|
78
|
-
unhandled = reason;
|
|
79
|
-
};
|
|
80
|
-
process.on('unhandledRejection', onUnhandled);
|
|
81
|
-
try {
|
|
82
|
-
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ccweb-cancel-'));
|
|
83
|
-
const projectDir = path.join(tmpDir, 'proj');
|
|
84
|
-
await fs.mkdir(path.join(projectDir, '.ccweb'), { recursive: true });
|
|
85
|
-
const wfPath = path.join(projectDir, '.ccweb', 'workflow_data.json');
|
|
86
|
-
await writeWf(wfPath, { constants: {}, variables: {}, task_progress: [] });
|
|
87
|
-
(0, __1.saveTrack)(projectDir, 'pause.tr', `func main() -> any {
|
|
88
|
-
let r = __ccweb_ask_user({
|
|
89
|
-
fields: [
|
|
90
|
-
{ key: "decision", label: "go?", type: "enum", variants: ["yes","no"] }
|
|
91
|
-
]
|
|
92
|
-
})
|
|
93
|
-
return r.decision
|
|
94
|
-
}
|
|
95
|
-
export main
|
|
96
|
-
`);
|
|
97
|
-
const trackAbs = path.join(projectDir, '.ccweb', 'tracks', 'pause.tr');
|
|
98
|
-
const broadcastEvents = [];
|
|
99
|
-
const registry = (0, __1.createTrackRegistry)({
|
|
100
|
-
getProjectFolder: (id) => (id === 'proj' ? projectDir : null),
|
|
101
|
-
injectIntoPty: () => { },
|
|
102
|
-
broadcast: (_projectId, msg) => {
|
|
103
|
-
broadcastEvents.push({ msg });
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
const start = await registry.start('proj', trackAbs, 'pause.tr', []);
|
|
107
|
-
check('registry.start ok', start.ok);
|
|
108
|
-
// Wait until the bridge actually pushed the ask_user event — that's
|
|
109
|
-
// the signal that bridge.requestInput is parked on the Promise and
|
|
110
|
-
// the abort path will trip the signalHandler reject.
|
|
111
|
-
const startTs = Date.now();
|
|
112
|
-
while (broadcastEvents.find((e) => e.msg.type === 'track_ask_user') === undefined &&
|
|
113
|
-
Date.now() - startTs < 8000) {
|
|
114
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
115
|
-
}
|
|
116
|
-
check('track_ask_user broadcast fired before abort', broadcastEvents.find((e) => e.msg.type === 'track_ask_user') !== undefined);
|
|
117
|
-
check('ask_user is pending before abort', registry.getPendingAskUser('proj') !== null);
|
|
118
|
-
// The actual abort — this is what used to crash ccweb.
|
|
119
|
-
const aborted = registry.abort('proj');
|
|
120
|
-
check('registry.abort returned true', aborted);
|
|
121
|
-
// Give the promise chain enough ticks to settle and the fatal
|
|
122
|
-
// handler enough chance to fire if it would have.
|
|
123
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
124
|
-
check('no unhandledRejection escaped (would have killed ccweb)', unhandled === null, unhandled instanceof Error ? unhandled.message : String(unhandled));
|
|
125
|
-
const finalState = registry.getState('proj');
|
|
126
|
-
check('final state non-null', finalState !== null);
|
|
127
|
-
check('final status is cancelled (not failed/running)', finalState?.status === 'cancelled', `got: ${finalState?.status}`);
|
|
128
|
-
check('final error.errorType is UserCancelError', finalState?.error?.errorType === 'UserCancelError', `got: ${finalState?.error?.errorType}`);
|
|
129
|
-
check('isRunning false after abort', !registry.isRunning('proj'));
|
|
130
|
-
const completes = broadcastEvents.filter((e) => e.msg.type === 'track_run_complete');
|
|
131
|
-
check('exactly one track_run_complete broadcast', completes.length === 1, `got ${completes.length}`);
|
|
132
|
-
if (completes.length === 1) {
|
|
133
|
-
const c = completes[0].msg;
|
|
134
|
-
check('track_run_complete ok=false', c.ok === false);
|
|
135
|
-
check('track_run_complete errorType=UserCancelError', c.error?.errorType === 'UserCancelError', `got: ${c.error?.errorType}`);
|
|
136
|
-
}
|
|
137
|
-
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
138
|
-
}
|
|
139
|
-
finally {
|
|
140
|
-
process.off('unhandledRejection', onUnhandled);
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
async function main() {
|
|
144
|
-
console.log('=== verify-track-cancel ===');
|
|
145
|
-
await testAbortDuringAskUser();
|
|
146
|
-
console.log(`\n${failed === 0 ? '✅ ALL CANCEL CHECKS PASSED' : `❌ ${failed} CHECK(S) FAILED`}`);
|
|
147
|
-
process.exit(failed === 0 ? 0 : 1);
|
|
148
|
-
}
|
|
149
|
-
main().catch((e) => {
|
|
150
|
-
console.error('verify-track-cancel crashed:', e);
|
|
151
|
-
process.exit(2);
|
|
152
|
-
});
|
|
153
|
-
//# sourceMappingURL=verify-track-cancel.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-track-cancel.js","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track-cancel.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* T1 verification — extends T0 with:
|
|
3
|
-
* - __ccweb_ask_user builtin闭环 (bridge → push → submit → resume)
|
|
4
|
-
* - store CRUD (list / load / save / delete)
|
|
5
|
-
* - global-tracks store CRUD
|
|
6
|
-
* - TrackRegistry start / abort / state / submitInput
|
|
7
|
-
*
|
|
8
|
-
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track-t1.ts
|
|
9
|
-
*/
|
|
10
|
-
export {};
|
|
11
|
-
//# sourceMappingURL=verify-track-t1.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-track-t1.d.ts","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track-t1.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}
|
|
@@ -1,293 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* T1 verification — extends T0 with:
|
|
4
|
-
* - __ccweb_ask_user builtin闭环 (bridge → push → submit → resume)
|
|
5
|
-
* - store CRUD (list / load / save / delete)
|
|
6
|
-
* - global-tracks store CRUD
|
|
7
|
-
* - TrackRegistry start / abort / state / submitInput
|
|
8
|
-
*
|
|
9
|
-
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track-t1.ts
|
|
10
|
-
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
-
var ownKeys = function(o) {
|
|
29
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
-
var ar = [];
|
|
31
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
-
return ar;
|
|
33
|
-
};
|
|
34
|
-
return ownKeys(o);
|
|
35
|
-
};
|
|
36
|
-
return function (mod) {
|
|
37
|
-
if (mod && mod.__esModule) return mod;
|
|
38
|
-
var result = {};
|
|
39
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
-
__setModuleDefault(result, mod);
|
|
41
|
-
return result;
|
|
42
|
-
};
|
|
43
|
-
})();
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
const fs = __importStar(require("fs/promises"));
|
|
46
|
-
const os = __importStar(require("os"));
|
|
47
|
-
const path = __importStar(require("path"));
|
|
48
|
-
const __1 = require("..");
|
|
49
|
-
let failed = 0;
|
|
50
|
-
function check(name, cond, msg) {
|
|
51
|
-
if (cond) {
|
|
52
|
-
console.log(` ✓ ${name}`);
|
|
53
|
-
}
|
|
54
|
-
else {
|
|
55
|
-
failed++;
|
|
56
|
-
console.error(` ✗ ${name}${msg ? ': ' + msg : ''}`);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
async function readWf(p) {
|
|
60
|
-
return JSON.parse(await fs.readFile(p, 'utf8'));
|
|
61
|
-
}
|
|
62
|
-
async function writeWf(p, w) {
|
|
63
|
-
await fs.writeFile(p, JSON.stringify(w, null, 2), 'utf8');
|
|
64
|
-
}
|
|
65
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
66
|
-
async function testStore() {
|
|
67
|
-
console.log('\n=== store CRUD ===');
|
|
68
|
-
const tmpRoot = await fs.mkdtemp(path.join(os.tmpdir(), 'ccweb-t1-store-'));
|
|
69
|
-
// Project store
|
|
70
|
-
check('listTracks empty when dir missing', (0, __1.listTracks)(tmpRoot).length === 0);
|
|
71
|
-
const ok1 = (0, __1.saveTrack)(tmpRoot, 'foo.tr', 'fai f() -> r: int { }\nexport f\n');
|
|
72
|
-
check('saveTrack returns true', ok1);
|
|
73
|
-
const list1 = (0, __1.listTracks)(tmpRoot);
|
|
74
|
-
check('list reports 1 file', list1.length === 1 && list1[0].filename === 'foo.tr');
|
|
75
|
-
const src = (0, __1.loadTrack)(tmpRoot, 'foo.tr');
|
|
76
|
-
check('loadTrack returns content', src !== null && src.includes('fai f()'));
|
|
77
|
-
check('loadTrack on missing returns null', (0, __1.loadTrack)(tmpRoot, 'bogus.tr') === null);
|
|
78
|
-
check('deleteTrack returns true', (0, __1.deleteTrack)(tmpRoot, 'foo.tr'));
|
|
79
|
-
check('list empty after delete', (0, __1.listTracks)(tmpRoot).length === 0);
|
|
80
|
-
// sanitize
|
|
81
|
-
check('sanitize accepts foo.tr', (0, __1.sanitizeTrackFilename)('foo.tr') === 'foo.tr');
|
|
82
|
-
check('sanitize adds .tr extension', (0, __1.sanitizeTrackFilename)('foo') === 'foo.tr');
|
|
83
|
-
check('sanitize rejects slash', (0, __1.sanitizeTrackFilename)('a/b.tr') === null);
|
|
84
|
-
check('sanitize rejects ..', (0, __1.sanitizeTrackFilename)('..foo.tr') === null);
|
|
85
|
-
check('sanitize rejects empty', (0, __1.sanitizeTrackFilename)('') === null);
|
|
86
|
-
check('sanitize rejects non-string', (0, __1.sanitizeTrackFilename)(42) === null);
|
|
87
|
-
// Global track store (per fake username under tmp HOME). We can't
|
|
88
|
-
// easily redirect os.homedir() in this verify script, so we test
|
|
89
|
-
// by directly using a temp user-scope dir via env trick — skip this
|
|
90
|
-
// round and only test list returns empty for an unknown user.
|
|
91
|
-
check('listGlobalTracks empty for unknown user', (0, __1.listGlobalTracks)('definitely-no-such-user-zxqv').length === 0);
|
|
92
|
-
check('loadGlobalTrack returns null for unknown user', (0, __1.loadGlobalTrack)('definitely-no-such-user-zxqv', 'foo.tr') === null);
|
|
93
|
-
await fs.rm(tmpRoot, { recursive: true, force: true });
|
|
94
|
-
}
|
|
95
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
96
|
-
async function testAskUserBridge() {
|
|
97
|
-
console.log('\n=== ask-user-bridge unit ===');
|
|
98
|
-
const pushed = [];
|
|
99
|
-
const bridge = (0, __1.createAskUserBridge)((ev) => {
|
|
100
|
-
pushed.push(ev);
|
|
101
|
-
});
|
|
102
|
-
// Validation
|
|
103
|
-
let threw = false;
|
|
104
|
-
try {
|
|
105
|
-
await bridge.requestInput('r1', []);
|
|
106
|
-
}
|
|
107
|
-
catch {
|
|
108
|
-
threw = true;
|
|
109
|
-
}
|
|
110
|
-
check('empty spec rejected', threw);
|
|
111
|
-
let threw2 = false;
|
|
112
|
-
try {
|
|
113
|
-
await bridge.requestInput('r2', [
|
|
114
|
-
{ key: 'x', label: 'X', type: 'enum' }, // missing variants
|
|
115
|
-
]);
|
|
116
|
-
}
|
|
117
|
-
catch {
|
|
118
|
-
threw2 = true;
|
|
119
|
-
}
|
|
120
|
-
check('enum without variants rejected', threw2);
|
|
121
|
-
// Happy path
|
|
122
|
-
const pending = bridge.requestInput('r3', [
|
|
123
|
-
{ key: 'name', label: 'Name', type: 'text' },
|
|
124
|
-
{ key: 'age', label: 'Age', type: 'number' },
|
|
125
|
-
]);
|
|
126
|
-
check('push event emitted', pushed.length === 1);
|
|
127
|
-
check('push event has fields', pushed[0].fields.length === 2);
|
|
128
|
-
check('push event has runId', pushed[0].runId === 'r3');
|
|
129
|
-
const reqId = pushed[0].requestId;
|
|
130
|
-
check('getPending returns the request', bridge.getPending('r3')?.requestId === reqId);
|
|
131
|
-
const submitResult = bridge.submitInput('r3', reqId, { name: 'Tom', age: 30 });
|
|
132
|
-
check('submit returned ok', submitResult.ok);
|
|
133
|
-
const got = await pending;
|
|
134
|
-
check('promise resolved with submitted data', got.name === 'Tom' && got.age === 30);
|
|
135
|
-
check('pending cleared after submit', bridge.getPending('r3') === null);
|
|
136
|
-
// requestId mismatch
|
|
137
|
-
const p2 = bridge.requestInput('r4', [{ key: 'x', label: 'X', type: 'text' }]);
|
|
138
|
-
// wait one tick so push happens
|
|
139
|
-
await new Promise((r) => setImmediate(r));
|
|
140
|
-
const reqId2 = pushed[pushed.length - 1].requestId;
|
|
141
|
-
const wrongResult = bridge.submitInput('r4', 'wrong-id', { x: 'y' });
|
|
142
|
-
check('mismatched requestId rejected', !wrongResult.ok);
|
|
143
|
-
// Submit correct one to drain
|
|
144
|
-
bridge.submitInput('r4', reqId2, { x: 'y' });
|
|
145
|
-
await p2;
|
|
146
|
-
// Type validation
|
|
147
|
-
const p3 = bridge.requestInput('r5', [
|
|
148
|
-
{ key: 'flag', label: 'F', type: 'bool' },
|
|
149
|
-
]);
|
|
150
|
-
await new Promise((r) => setImmediate(r));
|
|
151
|
-
const reqId3 = pushed[pushed.length - 1].requestId;
|
|
152
|
-
const bad = bridge.submitInput('r5', reqId3, { flag: 'not-a-bool' });
|
|
153
|
-
check('type-mismatched submit rejected', !bad.ok && (bad.message?.includes('boolean') ?? false));
|
|
154
|
-
bridge.submitInput('r5', reqId3, { flag: true });
|
|
155
|
-
await p3;
|
|
156
|
-
// AbortSignal
|
|
157
|
-
const ac = new AbortController();
|
|
158
|
-
const p4 = bridge.requestInput('r6', [{ key: 'x', label: 'X', type: 'text' }], ac.signal);
|
|
159
|
-
await new Promise((r) => setImmediate(r));
|
|
160
|
-
ac.abort();
|
|
161
|
-
let p4ThrowMsg = '';
|
|
162
|
-
try {
|
|
163
|
-
await p4;
|
|
164
|
-
}
|
|
165
|
-
catch (e) {
|
|
166
|
-
p4ThrowMsg = e.message;
|
|
167
|
-
}
|
|
168
|
-
check('signal-aborted request rejects', p4ThrowMsg.includes('cancelled'));
|
|
169
|
-
// cancelAllForRun
|
|
170
|
-
const p5 = bridge.requestInput('r7', [{ key: 'x', label: 'X', type: 'text' }]);
|
|
171
|
-
await new Promise((r) => setImmediate(r));
|
|
172
|
-
bridge.cancelAllForRun('r7', 'manual');
|
|
173
|
-
let p5ThrowMsg = '';
|
|
174
|
-
try {
|
|
175
|
-
await p5;
|
|
176
|
-
}
|
|
177
|
-
catch (e) {
|
|
178
|
-
p5ThrowMsg = e.message;
|
|
179
|
-
}
|
|
180
|
-
check('cancelAllForRun rejects pending', p5ThrowMsg.includes('manual'));
|
|
181
|
-
}
|
|
182
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
183
|
-
async function testAskUserEndToEnd() {
|
|
184
|
-
console.log('\n=== ask_user end-to-end (.tr → bridge → submit → resume) ===');
|
|
185
|
-
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ccweb-t1-asku-'));
|
|
186
|
-
const trackPath = path.join(tmpDir, 'asku.tr');
|
|
187
|
-
const wfPath = path.join(tmpDir, 'workflow_data.json');
|
|
188
|
-
// .tr that calls __ccweb_ask_user then returns the user's answer
|
|
189
|
-
const trSource = `
|
|
190
|
-
func main() -> string {
|
|
191
|
-
let answer = __ccweb_ask_user({
|
|
192
|
-
fields: [
|
|
193
|
-
{ key: "decision", label: "继续吗?", type: "enum", variants: ["yes", "no"] }
|
|
194
|
-
]
|
|
195
|
-
})
|
|
196
|
-
return answer.decision
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
export main
|
|
200
|
-
`;
|
|
201
|
-
await fs.writeFile(trackPath, trSource, 'utf8');
|
|
202
|
-
await writeWf(wfPath, { constants: {}, variables: {}, task_progress: [] });
|
|
203
|
-
const watcher = (0, __1.createWorkflowDataWatcher)(wfPath);
|
|
204
|
-
const pushed = [];
|
|
205
|
-
const bridge = (0, __1.createAskUserBridge)((ev) => {
|
|
206
|
-
pushed.push(ev);
|
|
207
|
-
});
|
|
208
|
-
const runner = (0, __1.createTrackRunner)({
|
|
209
|
-
projectId: 'asku-proj',
|
|
210
|
-
injector: () => { }, // no fai in this .tr, injector won't fire
|
|
211
|
-
watcher,
|
|
212
|
-
askUserBridge: bridge,
|
|
213
|
-
maxFaiAttempts: 1,
|
|
214
|
-
defaultFaiTimeoutMs: 5000,
|
|
215
|
-
});
|
|
216
|
-
const runPromise = runner.run(trackPath);
|
|
217
|
-
// Wait for push event (with timeout)
|
|
218
|
-
const start = Date.now();
|
|
219
|
-
while (pushed.length === 0 && Date.now() - start < 3000) {
|
|
220
|
-
await new Promise((r) => setTimeout(r, 20));
|
|
221
|
-
}
|
|
222
|
-
check('runner pushed ask_user event', pushed.length === 1);
|
|
223
|
-
if (pushed.length === 1) {
|
|
224
|
-
check('event runId matches runner state', pushed[0].runId === runner.getState()?.runId);
|
|
225
|
-
check('event has decision field', pushed[0].fields[0].key === 'decision');
|
|
226
|
-
// Submit response
|
|
227
|
-
const reqId = pushed[0].requestId;
|
|
228
|
-
const submitResult = bridge.submitInput(pushed[0].runId, reqId, {
|
|
229
|
-
decision: 'yes',
|
|
230
|
-
});
|
|
231
|
-
check('submitInput accepted', submitResult.ok);
|
|
232
|
-
}
|
|
233
|
-
const result = await runPromise;
|
|
234
|
-
check('runner completed ok', result.ok, JSON.stringify(result.error));
|
|
235
|
-
check('runner returned the submitted decision', result.value === 'yes', `got: ${JSON.stringify(result.value)}`);
|
|
236
|
-
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
237
|
-
}
|
|
238
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
239
|
-
async function testRegistry() {
|
|
240
|
-
console.log('\n=== TrackRegistry (start/abort/state/submitInput) ===');
|
|
241
|
-
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'ccweb-t1-reg-'));
|
|
242
|
-
const projectDir = path.join(tmpDir, 'proj1');
|
|
243
|
-
await fs.mkdir(path.join(projectDir, '.ccweb'), { recursive: true });
|
|
244
|
-
const wfPath = path.join(projectDir, '.ccweb', 'workflow_data.json');
|
|
245
|
-
await writeWf(wfPath, { constants: {}, variables: {}, task_progress: [] });
|
|
246
|
-
// Create a track
|
|
247
|
-
(0, __1.saveTrack)(projectDir, 'reg.tr', `func main() -> int { return 1 }\nexport main\n`);
|
|
248
|
-
const broadcastEvents = [];
|
|
249
|
-
const registry = (0, __1.createTrackRegistry)({
|
|
250
|
-
getProjectFolder: (id) => (id === 'proj1' ? projectDir : null),
|
|
251
|
-
injectIntoPty: () => { },
|
|
252
|
-
broadcast: (projectId, msg) => {
|
|
253
|
-
broadcastEvents.push({ projectId, msg });
|
|
254
|
-
},
|
|
255
|
-
});
|
|
256
|
-
check('isRunning false initially', !registry.isRunning('proj1'));
|
|
257
|
-
check('getState null initially', registry.getState('proj1') === null);
|
|
258
|
-
check('getPendingAskUser null initially', registry.getPendingAskUser('proj1') === null);
|
|
259
|
-
const trackAbs = path.join(projectDir, '.ccweb', 'tracks', 'reg.tr');
|
|
260
|
-
const start = await registry.start('proj1', trackAbs, 'reg.tr', []);
|
|
261
|
-
check('start ok=true', start.ok && 'runId' in start);
|
|
262
|
-
// Wait for run to complete
|
|
263
|
-
await new Promise((r) => setTimeout(r, 200));
|
|
264
|
-
const finalState = registry.getState('proj1');
|
|
265
|
-
check('final state non-null', finalState !== null);
|
|
266
|
-
check('final status is completed', finalState?.status === 'completed');
|
|
267
|
-
check('result value is 1', finalState?.result === 1);
|
|
268
|
-
check('isRunning false after completion', !registry.isRunning('proj1'));
|
|
269
|
-
// Verify broadcasts happened (status_change + run_complete)
|
|
270
|
-
const statusChanges = broadcastEvents.filter((e) => e.msg.type === 'track_status_change');
|
|
271
|
-
check('at least one track_status_change emitted', statusChanges.length >= 1);
|
|
272
|
-
const completes = broadcastEvents.filter((e) => e.msg.type === 'track_run_complete');
|
|
273
|
-
check('track_run_complete emitted', completes.length === 1);
|
|
274
|
-
// unknown project rejected
|
|
275
|
-
const bogus = await registry.start('no-such-proj', trackAbs, 'reg.tr', []);
|
|
276
|
-
check('start rejects unknown project', !bogus.ok);
|
|
277
|
-
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
278
|
-
}
|
|
279
|
-
// ────────────────────────────────────────────────────────────────────────────
|
|
280
|
-
async function main() {
|
|
281
|
-
console.log('=== T1 verification ===');
|
|
282
|
-
await testStore();
|
|
283
|
-
await testAskUserBridge();
|
|
284
|
-
await testAskUserEndToEnd();
|
|
285
|
-
await testRegistry();
|
|
286
|
-
console.log(`\n${failed === 0 ? '✅ ALL T1 CHECKS PASSED' : `❌ ${failed} CHECK(S) FAILED`}`);
|
|
287
|
-
process.exit(failed === 0 ? 0 : 1);
|
|
288
|
-
}
|
|
289
|
-
main().catch((e) => {
|
|
290
|
-
console.error('verify-track-t1 crashed:', e);
|
|
291
|
-
process.exit(2);
|
|
292
|
-
});
|
|
293
|
-
//# sourceMappingURL=verify-track-t1.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-track-t1.js","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track-t1.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* T0 verification script for the Track subsystem.
|
|
3
|
-
*
|
|
4
|
-
* NOT a vitest/jest test — ccweb backend has no test framework yet.
|
|
5
|
-
* Runs as a standalone Node script to verify end-to-end:
|
|
6
|
-
*
|
|
7
|
-
* 1. TrackRunner can load a .tr file
|
|
8
|
-
* 2. train-lang composes prompt + calls CcwebTrainAdapter
|
|
9
|
-
* 3. CcwebTrainAdapter injects prompt (capture into a mock buffer)
|
|
10
|
-
* 4. We programmatically simulate the LLM writing outputs by editing
|
|
11
|
-
* workflow_data.json + setting task_progress[].finish = true
|
|
12
|
-
* 5. WorkflowDataWatcher detects the finish signal
|
|
13
|
-
* 6. Adapter reads variables.<name> → returns FaiResult.success
|
|
14
|
-
* 7. train continues execution → main() returns
|
|
15
|
-
* 8. TrackRunner reports ok=true with the returned value
|
|
16
|
-
*
|
|
17
|
-
* Run: cd backend && npx ts-node src/tracks/__tests__/verify-track.ts
|
|
18
|
-
*/
|
|
19
|
-
export {};
|
|
20
|
-
//# sourceMappingURL=verify-track.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verify-track.d.ts","sourceRoot":"","sources":["../../../src/tracks/__tests__/verify-track.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
|