@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.
Files changed (239) hide show
  1. package/CHANGELOG.json +96 -21
  2. package/backend/dist/adapters/claude-adapter.d.ts +4 -0
  3. package/backend/dist/adapters/claude-adapter.d.ts.map +1 -1
  4. package/backend/dist/adapters/claude-adapter.js +18 -2
  5. package/backend/dist/adapters/claude-adapter.js.map +1 -1
  6. package/backend/dist/adapters/types.d.ts +8 -0
  7. package/backend/dist/adapters/types.d.ts.map +1 -1
  8. package/backend/dist/auth.d.ts.map +0 -0
  9. package/backend/dist/config.d.ts +0 -0
  10. package/backend/dist/config.js +0 -0
  11. package/backend/dist/config.js.map +0 -0
  12. package/backend/dist/hooks-manager.d.ts +0 -1
  13. package/backend/dist/hooks-manager.d.ts.map +1 -1
  14. package/backend/dist/hooks-manager.js +19 -19
  15. package/backend/dist/hooks-manager.js.map +1 -1
  16. package/backend/dist/index.d.ts.map +1 -1
  17. package/backend/dist/index.js +76 -1
  18. package/backend/dist/index.js.map +1 -1
  19. package/backend/dist/logger.d.ts.map +1 -1
  20. package/backend/dist/logger.js +3 -0
  21. package/backend/dist/logger.js.map +1 -1
  22. package/backend/dist/routes/auth.d.ts +0 -0
  23. package/backend/dist/routes/auth.d.ts.map +0 -0
  24. package/backend/dist/routes/auth.js.map +0 -0
  25. package/backend/dist/routes/projects.d.ts.map +0 -0
  26. package/backend/dist/routes/projects.js.map +0 -0
  27. package/backend/dist/session-manager.d.ts +0 -0
  28. package/backend/dist/session-manager.d.ts.map +0 -0
  29. package/backend/dist/session-manager.js +0 -0
  30. package/backend/dist/session-manager.js.map +0 -0
  31. package/backend/dist/terminal-manager.d.ts +10 -1
  32. package/backend/dist/terminal-manager.d.ts.map +1 -1
  33. package/backend/dist/terminal-manager.js +19 -2
  34. package/backend/dist/terminal-manager.js.map +1 -1
  35. package/backend/dist/types.d.ts +0 -0
  36. package/backend/dist/types.d.ts.map +0 -0
  37. package/backend/dist/types.js +0 -0
  38. package/backend/dist/types.js.map +0 -0
  39. package/frontend/dist/assets/{ChatOverlay-Dp1BzsYb.js → ChatOverlay-CymdKeQK.js} +1 -1
  40. package/frontend/dist/assets/{ClaudeMemPage-CpzMjJnb.js → ClaudeMemPage-BZ4UtUoz.js} +1 -1
  41. package/frontend/dist/assets/{GraphPreview-DDY1yVOX.js → GraphPreview-21EwV_e_.js} +1 -1
  42. package/frontend/dist/assets/{MobilePage-BnnE820D.js → MobilePage-99vv9cWh.js} +3 -3
  43. package/frontend/dist/assets/{NotebookPage-BOiYcs-l.js → NotebookPage-B-mcSRJm.js} +1 -1
  44. package/frontend/dist/assets/{OfficePreview-C5N2gr8-.js → OfficePreview-C3rHS2Te.js} +2 -2
  45. package/frontend/dist/assets/{PdfPreview-COG-9AQa.js → PdfPreview-B-toyaoA.js} +1 -1
  46. package/frontend/dist/assets/{ProjectPage-ARPH_J5o.js → ProjectPage-CShqyrUl.js} +4 -4
  47. package/frontend/dist/assets/{ProjectSettingsPage-CMWcT-5r.js → ProjectSettingsPage-FxkEGuUP.js} +1 -1
  48. package/frontend/dist/assets/{SettingsPage-BMrIDtg8.js → SettingsPage-B-bqNp6b.js} +1 -1
  49. package/frontend/dist/assets/{SkillHubPage-Bq93A7Rt.js → SkillHubPage-DN79j9Is.js} +1 -1
  50. package/frontend/dist/assets/{check-circle-2-BGT1eH1f.js → check-circle-2-DRT7EX5I.js} +1 -1
  51. package/frontend/dist/assets/{chevron-down-Bbg11n9i.js → chevron-down-DdtdiM4b.js} +1 -1
  52. package/frontend/dist/assets/{chevron-left-BmStQriC.js → chevron-left-Chv-EE6G.js} +1 -1
  53. package/frontend/dist/assets/{file-text-D9WjmbhK.js → file-text-D3ZDULSr.js} +1 -1
  54. package/frontend/dist/assets/{index-EFhMcMWk.js → index-BIGQ6n-i.js} +2 -2
  55. package/frontend/dist/assets/index-BpdaJxoa.css +1 -0
  56. package/frontend/dist/assets/{index-BRqvDxO6.js → index-CH1oLpmL.js} +1 -1
  57. package/frontend/dist/assets/{index-Bhp9CVTp.js → index-Dbm49BgL.js} +1 -1
  58. package/frontend/dist/assets/{index-COZnAgez.js → index-xJR85RJZ.js} +1 -1
  59. package/frontend/dist/assets/{jszip.min-Dyo__hKc.js → jszip.min-CMcZF4_M.js} +1 -1
  60. package/frontend/dist/assets/{save-CAjdgnp7.js → save-Dhw-I0uF.js} +1 -1
  61. package/frontend/dist/assets/{search-DmWhhICR.js → search-zoOED2R0.js} +1 -1
  62. package/frontend/dist/assets/{select-DAfsBGCS.js → select-B7xEE81_.js} +1 -1
  63. package/frontend/dist/assets/{tabs-zra46FZv.js → tabs-BCHX4LWy.js} +1 -1
  64. package/frontend/dist/assets/{textarea-BG4Tvy0e.js → textarea-CGPmR1Ae.js} +1 -1
  65. package/frontend/dist/index.html +2 -2
  66. package/package.json +36 -10
  67. package/backend/dist/backup/config.d.ts +0 -10
  68. package/backend/dist/backup/config.d.ts.map +0 -1
  69. package/backend/dist/backup/config.js +0 -128
  70. package/backend/dist/backup/config.js.map +0 -1
  71. package/backend/dist/backup/engine.d.ts +0 -22
  72. package/backend/dist/backup/engine.d.ts.map +0 -1
  73. package/backend/dist/backup/engine.js +0 -298
  74. package/backend/dist/backup/engine.js.map +0 -1
  75. package/backend/dist/backup/providers/dropbox.d.ts +0 -25
  76. package/backend/dist/backup/providers/dropbox.d.ts.map +0 -1
  77. package/backend/dist/backup/providers/dropbox.js +0 -320
  78. package/backend/dist/backup/providers/dropbox.js.map +0 -1
  79. package/backend/dist/backup/providers/google-drive.d.ts +0 -29
  80. package/backend/dist/backup/providers/google-drive.d.ts.map +0 -1
  81. package/backend/dist/backup/providers/google-drive.js +0 -303
  82. package/backend/dist/backup/providers/google-drive.js.map +0 -1
  83. package/backend/dist/backup/providers/index.d.ts +0 -3
  84. package/backend/dist/backup/providers/index.d.ts.map +0 -1
  85. package/backend/dist/backup/providers/index.js +0 -19
  86. package/backend/dist/backup/providers/index.js.map +0 -1
  87. package/backend/dist/backup/providers/onedrive.d.ts +0 -29
  88. package/backend/dist/backup/providers/onedrive.d.ts.map +0 -1
  89. package/backend/dist/backup/providers/onedrive.js +0 -317
  90. package/backend/dist/backup/providers/onedrive.js.map +0 -1
  91. package/backend/dist/backup/scheduler.d.ts +0 -6
  92. package/backend/dist/backup/scheduler.d.ts.map +0 -1
  93. package/backend/dist/backup/scheduler.js +0 -55
  94. package/backend/dist/backup/scheduler.js.map +0 -1
  95. package/backend/dist/backup/types.d.ts +0 -73
  96. package/backend/dist/backup/types.d.ts.map +0 -1
  97. package/backend/dist/backup/types.js +0 -4
  98. package/backend/dist/backup/types.js.map +0 -1
  99. package/backend/dist/chat-process-manager.d.ts +0 -45
  100. package/backend/dist/chat-process-manager.d.ts.map +0 -1
  101. package/backend/dist/chat-process-manager.js +0 -258
  102. package/backend/dist/chat-process-manager.js.map +0 -1
  103. package/backend/dist/flows/runner.d.ts +0 -37
  104. package/backend/dist/flows/runner.d.ts.map +0 -1
  105. package/backend/dist/flows/runner.js +0 -660
  106. package/backend/dist/flows/runner.js.map +0 -1
  107. package/backend/dist/flows/store.d.ts +0 -40
  108. package/backend/dist/flows/store.d.ts.map +0 -1
  109. package/backend/dist/flows/store.js +0 -284
  110. package/backend/dist/flows/store.js.map +0 -1
  111. package/backend/dist/flows/types.d.ts +0 -176
  112. package/backend/dist/flows/types.d.ts.map +0 -1
  113. package/backend/dist/flows/types.js +0 -25
  114. package/backend/dist/flows/types.js.map +0 -1
  115. package/backend/dist/information/condenser.d.ts +0 -12
  116. package/backend/dist/information/condenser.d.ts.map +0 -1
  117. package/backend/dist/information/condenser.js +0 -568
  118. package/backend/dist/information/condenser.js.map +0 -1
  119. package/backend/dist/information/conversation-sync.d.ts +0 -22
  120. package/backend/dist/information/conversation-sync.d.ts.map +0 -1
  121. package/backend/dist/information/conversation-sync.js +0 -500
  122. package/backend/dist/information/conversation-sync.js.map +0 -1
  123. package/backend/dist/information/types.d.ts +0 -36
  124. package/backend/dist/information/types.d.ts.map +0 -1
  125. package/backend/dist/information/types.js +0 -4
  126. package/backend/dist/information/types.js.map +0 -1
  127. package/backend/dist/memory-pool/buoyancy.d.ts +0 -2
  128. package/backend/dist/memory-pool/buoyancy.d.ts.map +0 -1
  129. package/backend/dist/memory-pool/buoyancy.js +0 -12
  130. package/backend/dist/memory-pool/buoyancy.js.map +0 -1
  131. package/backend/dist/memory-pool/global-pool-manager.d.ts +0 -12
  132. package/backend/dist/memory-pool/global-pool-manager.d.ts.map +0 -1
  133. package/backend/dist/memory-pool/global-pool-manager.js +0 -295
  134. package/backend/dist/memory-pool/global-pool-manager.js.map +0 -1
  135. package/backend/dist/memory-pool/pool-lock.d.ts +0 -2
  136. package/backend/dist/memory-pool/pool-lock.d.ts.map +0 -1
  137. package/backend/dist/memory-pool/pool-lock.js +0 -31
  138. package/backend/dist/memory-pool/pool-lock.js.map +0 -1
  139. package/backend/dist/memory-pool/pool-manager.d.ts +0 -57
  140. package/backend/dist/memory-pool/pool-manager.d.ts.map +0 -1
  141. package/backend/dist/memory-pool/pool-manager.js +0 -322
  142. package/backend/dist/memory-pool/pool-manager.js.map +0 -1
  143. package/backend/dist/memory-pool/templates.d.ts +0 -5
  144. package/backend/dist/memory-pool/templates.d.ts.map +0 -1
  145. package/backend/dist/memory-pool/templates.js +0 -234
  146. package/backend/dist/memory-pool/templates.js.map +0 -1
  147. package/backend/dist/memory-pool/types.d.ts +0 -61
  148. package/backend/dist/memory-pool/types.d.ts.map +0 -1
  149. package/backend/dist/memory-pool/types.js +0 -4
  150. package/backend/dist/memory-pool/types.js.map +0 -1
  151. package/backend/dist/plan-control/checker.d.ts +0 -3
  152. package/backend/dist/plan-control/checker.d.ts.map +0 -1
  153. package/backend/dist/plan-control/checker.js +0 -103
  154. package/backend/dist/plan-control/checker.js.map +0 -1
  155. package/backend/dist/plan-control/executor.d.ts +0 -93
  156. package/backend/dist/plan-control/executor.d.ts.map +0 -1
  157. package/backend/dist/plan-control/executor.js +0 -955
  158. package/backend/dist/plan-control/executor.js.map +0 -1
  159. package/backend/dist/plan-control/parser.d.ts +0 -12
  160. package/backend/dist/plan-control/parser.d.ts.map +0 -1
  161. package/backend/dist/plan-control/parser.js +0 -216
  162. package/backend/dist/plan-control/parser.js.map +0 -1
  163. package/backend/dist/plan-control/templates.d.ts +0 -4
  164. package/backend/dist/plan-control/templates.d.ts.map +0 -1
  165. package/backend/dist/plan-control/templates.js +0 -271
  166. package/backend/dist/plan-control/templates.js.map +0 -1
  167. package/backend/dist/plan-control/types.d.ts +0 -102
  168. package/backend/dist/plan-control/types.d.ts.map +0 -1
  169. package/backend/dist/plan-control/types.js +0 -12
  170. package/backend/dist/plan-control/types.js.map +0 -1
  171. package/backend/dist/routes/backup.d.ts +0 -4
  172. package/backend/dist/routes/backup.d.ts.map +0 -1
  173. package/backend/dist/routes/backup.js +0 -274
  174. package/backend/dist/routes/backup.js.map +0 -1
  175. package/backend/dist/routes/flows.d.ts +0 -5
  176. package/backend/dist/routes/flows.d.ts.map +0 -1
  177. package/backend/dist/routes/flows.js +0 -457
  178. package/backend/dist/routes/flows.js.map +0 -1
  179. package/backend/dist/routes/global-flows.d.ts +0 -3
  180. package/backend/dist/routes/global-flows.d.ts.map +0 -1
  181. package/backend/dist/routes/global-flows.js +0 -90
  182. package/backend/dist/routes/global-flows.js.map +0 -1
  183. package/backend/dist/routes/information.d.ts +0 -3
  184. package/backend/dist/routes/information.d.ts.map +0 -1
  185. package/backend/dist/routes/information.js +0 -159
  186. package/backend/dist/routes/information.js.map +0 -1
  187. package/backend/dist/routes/memory-pool.d.ts +0 -3
  188. package/backend/dist/routes/memory-pool.d.ts.map +0 -1
  189. package/backend/dist/routes/memory-pool.js +0 -837
  190. package/backend/dist/routes/memory-pool.js.map +0 -1
  191. package/backend/dist/routes/plan-control.d.ts +0 -15
  192. package/backend/dist/routes/plan-control.d.ts.map +0 -1
  193. package/backend/dist/routes/plan-control.js +0 -337
  194. package/backend/dist/routes/plan-control.js.map +0 -1
  195. package/backend/dist/routes/share.d.ts +0 -3
  196. package/backend/dist/routes/share.d.ts.map +0 -1
  197. package/backend/dist/routes/share.js +0 -167
  198. package/backend/dist/routes/share.js.map +0 -1
  199. package/backend/dist/routes/sounds.d.ts +0 -3
  200. package/backend/dist/routes/sounds.d.ts.map +0 -1
  201. package/backend/dist/routes/sounds.js +0 -285
  202. package/backend/dist/routes/sounds.js.map +0 -1
  203. package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts +0 -24
  204. package/backend/dist/tracks/__tests__/verify-starter-templates.d.ts.map +0 -1
  205. package/backend/dist/tracks/__tests__/verify-starter-templates.js +0 -175
  206. package/backend/dist/tracks/__tests__/verify-starter-templates.js.map +0 -1
  207. package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts +0 -23
  208. package/backend/dist/tracks/__tests__/verify-track-cancel.d.ts.map +0 -1
  209. package/backend/dist/tracks/__tests__/verify-track-cancel.js +0 -153
  210. package/backend/dist/tracks/__tests__/verify-track-cancel.js.map +0 -1
  211. package/backend/dist/tracks/__tests__/verify-track-t1.d.ts +0 -11
  212. package/backend/dist/tracks/__tests__/verify-track-t1.d.ts.map +0 -1
  213. package/backend/dist/tracks/__tests__/verify-track-t1.js +0 -293
  214. package/backend/dist/tracks/__tests__/verify-track-t1.js.map +0 -1
  215. package/backend/dist/tracks/__tests__/verify-track.d.ts +0 -20
  216. package/backend/dist/tracks/__tests__/verify-track.d.ts.map +0 -1
  217. package/backend/dist/tracks/__tests__/verify-track.js +0 -187
  218. package/backend/dist/tracks/__tests__/verify-track.js.map +0 -1
  219. package/backend/dist/tracks/registry.d.ts +0 -61
  220. package/backend/dist/tracks/registry.d.ts.map +0 -1
  221. package/backend/dist/tracks/registry.js +0 -202
  222. package/backend/dist/tracks/registry.js.map +0 -1
  223. package/backend/dist/tracks/track-runner.d.ts +0 -69
  224. package/backend/dist/tracks/track-runner.d.ts.map +0 -1
  225. package/backend/dist/tracks/track-runner.js +0 -158
  226. package/backend/dist/tracks/track-runner.js.map +0 -1
  227. package/backend/dist/tracks/train-loader.d.ts +0 -44
  228. package/backend/dist/tracks/train-loader.d.ts.map +0 -1
  229. package/backend/dist/tracks/train-loader.js +0 -32
  230. package/backend/dist/tracks/train-loader.js.map +0 -1
  231. package/backend/dist/tracks/types-train.d.ts +0 -12
  232. package/backend/dist/tracks/types-train.d.ts.map +0 -1
  233. package/backend/dist/tracks/types-train.js +0 -13
  234. package/backend/dist/tracks/types-train.js.map +0 -1
  235. package/backend/dist/usage-terminal.d.ts +0 -18
  236. package/backend/dist/usage-terminal.d.ts.map +0 -1
  237. package/backend/dist/usage-terminal.js +0 -191
  238. package/backend/dist/usage-terminal.js.map +0 -1
  239. 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"}