@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,317 +0,0 @@
1
- "use strict";
2
- // backend/src/backup/providers/onedrive.ts
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- Object.defineProperty(exports, "__esModule", { value: true });
37
- exports.OneDriveProvider = void 0;
38
- const fs = __importStar(require("fs"));
39
- const microsoft_graph_client_1 = require("@microsoft/microsoft-graph-client");
40
- const AUTHORITY = 'https://login.microsoftonline.com/consumers';
41
- const TOKEN_ENDPOINT = `${AUTHORITY}/oauth2/v2.0/token`;
42
- const SCOPES = 'Files.ReadWrite offline_access';
43
- // 4 MB threshold for simple upload vs upload session
44
- const SIMPLE_UPLOAD_MAX = 4 * 1024 * 1024;
45
- // 10 MB chunk size for large file upload sessions
46
- const CHUNK_SIZE = 10 * 1024 * 1024;
47
- class OneDriveProvider {
48
- constructor(config) {
49
- this.graphClient = null;
50
- this.config = config;
51
- if (config.tokens) {
52
- this.initGraphClient(config.tokens.access_token);
53
- }
54
- }
55
- initGraphClient(accessToken) {
56
- this.graphClient = microsoft_graph_client_1.Client.init({
57
- authProvider: (done) => {
58
- done(null, accessToken);
59
- },
60
- });
61
- }
62
- getAuthUrl(redirectUri, state) {
63
- const params = new URLSearchParams({
64
- client_id: this.config.clientId,
65
- response_type: 'code',
66
- redirect_uri: redirectUri,
67
- scope: SCOPES,
68
- response_mode: 'query',
69
- ...(state ? { state } : {}),
70
- });
71
- return `${AUTHORITY}/oauth2/v2.0/authorize?${params.toString()}`;
72
- }
73
- async handleCallback(code, redirectUri) {
74
- const body = new URLSearchParams({
75
- client_id: this.config.clientId,
76
- client_secret: this.config.clientSecret,
77
- code,
78
- redirect_uri: redirectUri,
79
- grant_type: 'authorization_code',
80
- });
81
- const res = await fetch(TOKEN_ENDPOINT, {
82
- method: 'POST',
83
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
84
- body: body.toString(),
85
- });
86
- if (!res.ok) {
87
- const text = await res.text();
88
- throw new Error(`OneDrive token exchange failed: ${res.status} ${text}`);
89
- }
90
- const data = await res.json();
91
- if (!data.access_token || !data.refresh_token) {
92
- throw new Error('Missing tokens in OneDrive OAuth2 callback response');
93
- }
94
- const providerTokens = {
95
- access_token: data.access_token,
96
- refresh_token: data.refresh_token,
97
- expiry: new Date(Date.now() + data.expires_in * 1000).toISOString(),
98
- };
99
- this.config.tokens = providerTokens;
100
- this.initGraphClient(providerTokens.access_token);
101
- return providerTokens;
102
- }
103
- async refreshToken() {
104
- if (!this.config.tokens?.refresh_token) {
105
- throw new Error('No refresh token available for OneDrive provider');
106
- }
107
- const body = new URLSearchParams({
108
- client_id: this.config.clientId,
109
- client_secret: this.config.clientSecret,
110
- refresh_token: this.config.tokens.refresh_token,
111
- grant_type: 'refresh_token',
112
- scope: SCOPES,
113
- });
114
- const res = await fetch(TOKEN_ENDPOINT, {
115
- method: 'POST',
116
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
117
- body: body.toString(),
118
- });
119
- if (!res.ok) {
120
- const text = await res.text();
121
- throw new Error(`OneDrive token refresh failed: ${res.status} ${text}`);
122
- }
123
- const data = await res.json();
124
- if (!data.access_token) {
125
- throw new Error('Failed to refresh OneDrive access token');
126
- }
127
- const providerTokens = {
128
- access_token: data.access_token,
129
- refresh_token: data.refresh_token ?? this.config.tokens.refresh_token,
130
- expiry: new Date(Date.now() + data.expires_in * 1000).toISOString(),
131
- };
132
- this.config.tokens = providerTokens;
133
- this.initGraphClient(providerTokens.access_token);
134
- return providerTokens;
135
- }
136
- isAuthorized() {
137
- return !!(this.config.tokens?.access_token && this.config.tokens?.refresh_token);
138
- }
139
- async ensureAuth() {
140
- if (!this.isAuthorized()) {
141
- throw new Error('OneDrive provider is not authorized');
142
- }
143
- const tokens = this.config.tokens;
144
- const expiryMs = new Date(tokens.expiry).getTime();
145
- const nowMs = Date.now();
146
- // Refresh if within 60 seconds of expiry
147
- if (expiryMs - nowMs < 60 * 1000) {
148
- await this.refreshToken();
149
- }
150
- }
151
- client() {
152
- if (!this.graphClient) {
153
- throw new Error('OneDrive Graph client is not initialized');
154
- }
155
- return this.graphClient;
156
- }
157
- /**
158
- * Returns the Graph API path for a given remote path.
159
- * e.g. "backup/myproject" → "/me/drive/root:/backup/myproject:"
160
- * Empty or root path → "/me/drive/root"
161
- */
162
- itemPath(remotePath) {
163
- const normalized = remotePath.replace(/^\/+|\/+$/g, '');
164
- if (!normalized) {
165
- return '/me/drive/root';
166
- }
167
- return `/me/drive/root:/${normalized}:`;
168
- }
169
- /**
170
- * Returns the children endpoint for a given remote path.
171
- */
172
- childrenPath(remotePath) {
173
- const normalized = remotePath.replace(/^\/+|\/+$/g, '');
174
- if (!normalized) {
175
- return '/me/drive/root/children';
176
- }
177
- return `/me/drive/root:/${normalized}:/children`;
178
- }
179
- async listFiles(remotePath) {
180
- await this.ensureAuth();
181
- const results = [];
182
- const normalizedBase = remotePath.replace(/^\/+|\/+$/g, '');
183
- let nextLink = this.childrenPath(remotePath);
184
- while (nextLink) {
185
- const res = await this.client()
186
- .api(nextLink)
187
- .select('name,folder,size,lastModifiedDateTime')
188
- .top(1000)
189
- .get();
190
- for (const item of res.value ?? []) {
191
- const isDirectory = !!item.folder;
192
- const filePath = normalizedBase ? `${normalizedBase}/${item.name}` : item.name;
193
- results.push({
194
- name: item.name,
195
- path: filePath,
196
- isDirectory,
197
- size: isDirectory ? 0 : (item.size ?? 0),
198
- modifiedTime: item.lastModifiedDateTime ?? new Date().toISOString(),
199
- });
200
- }
201
- nextLink = res['@odata.nextLink'];
202
- }
203
- return results;
204
- }
205
- async uploadFile(localPath, remotePath) {
206
- await this.ensureAuth();
207
- const stat = fs.statSync(localPath);
208
- const fileSize = stat.size;
209
- if (fileSize < SIMPLE_UPLOAD_MAX) {
210
- // Simple upload (PUT with body)
211
- const fileBuffer = fs.readFileSync(localPath);
212
- await this.client()
213
- .api(`${this.itemPath(remotePath)}/content`)
214
- .put(fileBuffer);
215
- }
216
- else {
217
- // Large file: use upload session
218
- const session = await this.client()
219
- .api(`${this.itemPath(remotePath)}/createUploadSession`)
220
- .post({
221
- item: {
222
- '@microsoft.graph.conflictBehavior': 'replace',
223
- },
224
- });
225
- const uploadUrl = session.uploadUrl;
226
- const fd = fs.openSync(localPath, 'r');
227
- try {
228
- let offset = 0;
229
- while (offset < fileSize) {
230
- const chunkSize = Math.min(CHUNK_SIZE, fileSize - offset);
231
- const chunk = Buffer.alloc(chunkSize);
232
- fs.readSync(fd, chunk, 0, chunkSize, offset);
233
- const rangeEnd = offset + chunkSize - 1;
234
- const res = await fetch(uploadUrl, {
235
- method: 'PUT',
236
- headers: {
237
- 'Content-Length': String(chunkSize),
238
- 'Content-Range': `bytes ${offset}-${rangeEnd}/${fileSize}`,
239
- 'Content-Type': 'application/octet-stream',
240
- },
241
- body: chunk,
242
- });
243
- if (!res.ok && res.status !== 202) {
244
- const text = await res.text();
245
- throw new Error(`OneDrive chunk upload failed at offset ${offset}: ${res.status} ${text}`);
246
- }
247
- offset += chunkSize;
248
- }
249
- }
250
- finally {
251
- fs.closeSync(fd);
252
- }
253
- }
254
- }
255
- async mkdir(remotePath) {
256
- await this.ensureAuth();
257
- const normalized = remotePath.replace(/^\/+|\/+$/g, '');
258
- if (!normalized)
259
- return;
260
- const segments = normalized.split('/');
261
- for (let i = 0; i < segments.length; i++) {
262
- const parentPath = segments.slice(0, i).join('/');
263
- const folderName = segments[i];
264
- const parentEndpoint = parentPath
265
- ? `/me/drive/root:/${parentPath}:/children`
266
- : '/me/drive/root/children';
267
- try {
268
- await this.client()
269
- .api(parentEndpoint)
270
- .post({
271
- name: folderName,
272
- folder: {},
273
- '@microsoft.graph.conflictBehavior': 'fail',
274
- });
275
- }
276
- catch (err) {
277
- // 409 Conflict means folder already exists — that's fine
278
- const graphErr = err;
279
- if (graphErr.statusCode !== 409 && graphErr.code !== 'nameAlreadyExists') {
280
- throw err;
281
- }
282
- }
283
- }
284
- }
285
- async downloadFile(remotePath, localPath) {
286
- await this.ensureAuth();
287
- // Get a redirect URL to the file content
288
- const downloadUrl = await this.client()
289
- .api(`${this.itemPath(remotePath)}/content`)
290
- .getStream();
291
- await new Promise((resolve, reject) => {
292
- const dest = fs.createWriteStream(localPath);
293
- downloadUrl
294
- .on('error', reject)
295
- .pipe(dest)
296
- .on('error', reject)
297
- .on('finish', resolve);
298
- });
299
- }
300
- async deleteFile(remotePath) {
301
- await this.ensureAuth();
302
- try {
303
- await this.client()
304
- .api(this.itemPath(remotePath))
305
- .delete();
306
- }
307
- catch (err) {
308
- // 404 means already gone — treat as success
309
- const graphErr = err;
310
- if (graphErr.statusCode !== 404) {
311
- throw err;
312
- }
313
- }
314
- }
315
- }
316
- exports.OneDriveProvider = OneDriveProvider;
317
- //# sourceMappingURL=onedrive.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"onedrive.js","sourceRoot":"","sources":["../../../src/backup/providers/onedrive.ts"],"names":[],"mappings":"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"}
@@ -1,6 +0,0 @@
1
- import { ProgressCallback } from './engine';
2
- export declare function startScheduler(onProgress?: ProgressCallback): void;
3
- export declare function stopScheduler(): void;
4
- export declare function restartScheduler(onProgress?: ProgressCallback): void;
5
- export declare function isSchedulerRunning(): boolean;
6
- //# sourceMappingURL=scheduler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../src/backup/scheduler.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAK1D,wBAAgB,cAAc,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CA4BlE;AAED,wBAAgB,aAAa,IAAI,IAAI,CAMpC;AAED,wBAAgB,gBAAgB,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAGpE;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAE5C"}
@@ -1,55 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.startScheduler = startScheduler;
4
- exports.stopScheduler = stopScheduler;
5
- exports.restartScheduler = restartScheduler;
6
- exports.isSchedulerRunning = isSchedulerRunning;
7
- const config_1 = require("./config");
8
- const engine_1 = require("./engine");
9
- let timer = null;
10
- let running = false;
11
- function startScheduler(onProgress) {
12
- stopScheduler();
13
- const config = (0, config_1.getBackupConfig)();
14
- if (!config.schedule.enabled)
15
- return;
16
- const intervalMs = config.schedule.intervalMinutes * 60 * 1000;
17
- console.log(`[Backup] Scheduler started: every ${config.schedule.intervalMinutes} minutes`);
18
- const interval = setInterval(async () => {
19
- if (running) {
20
- console.log('[Backup] Skipping scheduled backup — previous one still running');
21
- return;
22
- }
23
- running = true;
24
- try {
25
- console.log('[Backup] Scheduled backup starting...');
26
- const results = await (0, engine_1.runBackupAll)(onProgress);
27
- const ok = results.filter((r) => r.status === 'success').length;
28
- const fail = results.filter((r) => r.status === 'failed').length;
29
- console.log(`[Backup] Scheduled backup done: ${ok} success, ${fail} failed`);
30
- }
31
- catch (err) {
32
- console.error('[Backup] Scheduled backup error:', err);
33
- }
34
- finally {
35
- running = false;
36
- }
37
- }, intervalMs);
38
- interval.unref();
39
- timer = interval;
40
- }
41
- function stopScheduler() {
42
- if (timer) {
43
- clearInterval(timer);
44
- timer = null;
45
- console.log('[Backup] Scheduler stopped');
46
- }
47
- }
48
- function restartScheduler(onProgress) {
49
- stopScheduler();
50
- startScheduler(onProgress);
51
- }
52
- function isSchedulerRunning() {
53
- return timer !== null;
54
- }
55
- //# sourceMappingURL=scheduler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scheduler.js","sourceRoot":"","sources":["../../src/backup/scheduler.ts"],"names":[],"mappings":";;AAMA,wCA4BC;AAED,sCAMC;AAED,4CAGC;AAED,gDAEC;AAnDD,qCAA2C;AAC3C,qCAA0D;AAE1D,IAAI,KAAK,GAA0C,IAAI,CAAC;AACxD,IAAI,OAAO,GAAG,KAAK,CAAC;AAEpB,SAAgB,cAAc,CAAC,UAA6B;IAC1D,aAAa,EAAE,CAAC;IAChB,MAAM,MAAM,GAAG,IAAA,wBAAe,GAAE,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO;QAAE,OAAO;IAErC,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,eAAe,GAAG,EAAE,GAAG,IAAI,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,qCAAqC,MAAM,CAAC,QAAQ,CAAC,eAAe,UAAU,CAAC,CAAC;IAE5F,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACtC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,iEAAiE,CAAC,CAAC;YAC/E,OAAO;QACT,CAAC;QACD,OAAO,GAAG,IAAI,CAAC;QACf,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,MAAM,OAAO,GAAG,MAAM,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;YAC/C,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM,CAAC;YAChE,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,mCAAmC,EAAE,aAAa,IAAI,SAAS,CAAC,CAAC;QAC/E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,GAAG,CAAC,CAAC;QACzD,CAAC;gBAAS,CAAC;YACT,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;IACH,CAAC,EAAE,UAAU,CAAC,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,KAAK,GAAG,QAAQ,CAAC;AACnB,CAAC;AAED,SAAgB,aAAa;IAC3B,IAAI,KAAK,EAAE,CAAC;QACV,aAAa,CAAC,KAAK,CAAC,CAAC;QACrB,KAAK,GAAG,IAAI,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC;AAED,SAAgB,gBAAgB,CAAC,UAA6B;IAC5D,aAAa,EAAE,CAAC;IAChB,cAAc,CAAC,UAAU,CAAC,CAAC;AAC7B,CAAC;AAED,SAAgB,kBAAkB;IAChC,OAAO,KAAK,KAAK,IAAI,CAAC;AACxB,CAAC"}
@@ -1,73 +0,0 @@
1
- export type ProviderType = 'google-drive' | 'onedrive' | 'dropbox';
2
- export interface ProviderTokens {
3
- access_token: string;
4
- refresh_token: string;
5
- expiry: string;
6
- }
7
- export interface ProviderConfig {
8
- id: string;
9
- type: ProviderType;
10
- label: string;
11
- clientId: string;
12
- clientSecret: string;
13
- tokens?: ProviderTokens;
14
- }
15
- export interface BackupSchedule {
16
- enabled: boolean;
17
- intervalMinutes: number;
18
- }
19
- export interface BuiltInOAuth {
20
- clientId: string;
21
- clientSecret: string;
22
- }
23
- export interface BackupConfig {
24
- providers: ProviderConfig[];
25
- schedule: BackupSchedule;
26
- excludePatterns: string[];
27
- builtInOAuth?: Partial<Record<ProviderType, BuiltInOAuth>>;
28
- }
29
- export interface RemoteFile {
30
- name: string;
31
- path: string;
32
- isDirectory: boolean;
33
- size: number;
34
- modifiedTime: string;
35
- }
36
- export interface FileSnapshot {
37
- mtime: number;
38
- size: number;
39
- hash: string;
40
- }
41
- export interface BackupState {
42
- lastBackupTime: string | null;
43
- files: Record<string, FileSnapshot>;
44
- }
45
- export interface BackupHistoryEntry {
46
- id: string;
47
- projectId: string;
48
- projectName: string;
49
- providerId: string;
50
- providerType: ProviderType;
51
- providerLabel: string;
52
- startTime: string;
53
- endTime: string;
54
- status: 'success' | 'failed' | 'partial';
55
- filesUploaded: number;
56
- filesDeleted: number;
57
- filesTotal: number;
58
- error?: string;
59
- }
60
- export interface CloudProvider {
61
- config: ProviderConfig;
62
- getAuthUrl(redirectUri: string, state?: string): string;
63
- handleCallback(code: string, redirectUri: string): Promise<ProviderTokens>;
64
- refreshToken(): Promise<ProviderTokens>;
65
- isAuthorized(): boolean;
66
- ensureAuth(): Promise<void>;
67
- listFiles(remotePath: string): Promise<RemoteFile[]>;
68
- uploadFile(localPath: string, remotePath: string): Promise<void>;
69
- deleteFile(remotePath: string): Promise<void>;
70
- mkdir(remotePath: string): Promise<void>;
71
- downloadFile(remotePath: string, localPath: string): Promise<void>;
72
- }
73
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/backup/types.ts"],"names":[],"mappings":"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"}
@@ -1,4 +0,0 @@
1
- "use strict";
2
- // backend/src/backup/types.ts
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/backup/types.ts"],"names":[],"mappings":";AAAA,8BAA8B"}
@@ -1,45 +0,0 @@
1
- /**
2
- * ChatProcessManager — manages claude --print SDK subprocess per project.
3
- *
4
- * Key design notes:
5
- * - sessionManager.startSession() is called AFTER system.init is received,
6
- * not immediately after spawn (JSONL file doesn't exist yet at spawn time).
7
- * - tool_result blocks appear in USER-role messages in SDK output, not assistant.
8
- * - hasTerminal() is the public API name (mirrors TerminalManager.hasTerminal).
9
- * - Crash restart uses 3s delay; interrupt restart is immediate (500ms).
10
- */
11
- import { EventEmitter } from 'events';
12
- import { Project } from './types';
13
- export interface ChatStreamEvent {
14
- projectId: string;
15
- type: 'stream' | 'tool_start' | 'tool_end' | 'turn_end' | 'rate_limit' | 'status';
16
- delta?: string;
17
- contentType?: 'text' | 'thinking';
18
- toolName?: string;
19
- toolInput?: unknown;
20
- toolOutput?: string;
21
- costUsd?: number;
22
- resetsAt?: number;
23
- status?: string;
24
- }
25
- declare class ChatProcessManager extends EventEmitter {
26
- private instances;
27
- private restartTimers;
28
- start(project: Project, continueSession?: boolean): void;
29
- stop(projectId: string): void;
30
- /** Interrupt current generation and immediately restart with --continue */
31
- interrupt(projectId: string): void;
32
- sendMessage(projectId: string, text: string): boolean;
33
- /** Named hasTerminal for API consistency with TerminalManager */
34
- hasTerminal(projectId: string): boolean;
35
- /** Stop all running chat processes — called on server shutdown. */
36
- stopAll(): void;
37
- getLastActivityAt(projectId: string): number | null;
38
- private stopInternal;
39
- private buildArgs;
40
- private parseLine;
41
- private handleExit;
42
- }
43
- export declare const chatProcessManager: ChatProcessManager;
44
- export {};
45
- //# sourceMappingURL=chat-process-manager.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"chat-process-manager.d.ts","sourceRoot":"","sources":["../src/chat-process-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAIlC,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,QAAQ,CAAC;IAClF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAYD,cAAM,kBAAmB,SAAQ,YAAY;IAC3C,OAAO,CAAC,SAAS,CAAmC;IACpD,OAAO,CAAC,aAAa,CAAoD;IAEzE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,eAAe,UAAQ,GAAG,IAAI;IA0DtD,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAI7B,2EAA2E;IAC3E,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAgBlC,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO;IAerD,iEAAiE;IACjE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAIvC,mEAAmE;IACnE,OAAO,IAAI,IAAI;IAQf,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAInD,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,SAAS;IAcjB,OAAO,CAAC,SAAS;IAyEjB,OAAO,CAAC,UAAU;CAqBnB;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAC"}