rivet-design 0.16.3 → 0.17.0

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 (272) hide show
  1. package/README.md +8 -2
  2. package/README.npm.md +8 -2
  3. package/bin/rivet.js +15 -7
  4. package/dist/agent-variants/variantContext.d.ts +1 -0
  5. package/dist/agent-variants/variantContext.d.ts.map +1 -1
  6. package/dist/agent-variants/variantContext.js +1 -1
  7. package/dist/agent-variants/variantContext.js.map +1 -1
  8. package/dist/cli/commandNames.d.ts +2 -0
  9. package/dist/cli/commandNames.d.ts.map +1 -1
  10. package/dist/cli/commandNames.js +16 -1
  11. package/dist/cli/commandNames.js.map +1 -1
  12. package/dist/cli/commands/libraryOpen.d.ts +10 -0
  13. package/dist/cli/commands/libraryOpen.d.ts.map +1 -0
  14. package/dist/cli/commands/libraryOpen.js +126 -0
  15. package/dist/cli/commands/libraryOpen.js.map +1 -0
  16. package/dist/cli/commands/open.d.ts +39 -0
  17. package/dist/cli/commands/open.d.ts.map +1 -1
  18. package/dist/cli/commands/open.js +35 -21
  19. package/dist/cli/commands/open.js.map +1 -1
  20. package/dist/cli/commands/serve.d.ts.map +1 -1
  21. package/dist/cli/commands/serve.js +33 -0
  22. package/dist/cli/commands/serve.js.map +1 -1
  23. package/dist/cli/router.d.ts.map +1 -1
  24. package/dist/cli/router.js +34 -3
  25. package/dist/cli/router.js.map +1 -1
  26. package/dist/cli/serverHandshake.d.ts +7 -5
  27. package/dist/cli/serverHandshake.d.ts.map +1 -1
  28. package/dist/cli/serverHandshake.js +16 -12
  29. package/dist/cli/serverHandshake.js.map +1 -1
  30. package/dist/install/installationChannel.d.ts +4 -0
  31. package/dist/install/installationChannel.d.ts.map +1 -0
  32. package/dist/install/installationChannel.js +13 -0
  33. package/dist/install/installationChannel.js.map +1 -0
  34. package/dist/library/HubClient.d.ts +12 -0
  35. package/dist/library/HubClient.d.ts.map +1 -0
  36. package/dist/library/HubClient.js +109 -0
  37. package/dist/library/HubClient.js.map +1 -0
  38. package/dist/library/HubServer.d.ts +16 -0
  39. package/dist/library/HubServer.d.ts.map +1 -0
  40. package/dist/library/HubServer.js +95 -0
  41. package/dist/library/HubServer.js.map +1 -0
  42. package/dist/library/StaticPreviewServer.d.ts +7 -0
  43. package/dist/library/StaticPreviewServer.d.ts.map +1 -0
  44. package/dist/library/StaticPreviewServer.js +18 -0
  45. package/dist/library/StaticPreviewServer.js.map +1 -0
  46. package/dist/library/http.d.ts +11 -0
  47. package/dist/library/http.d.ts.map +1 -0
  48. package/dist/library/http.js +31 -0
  49. package/dist/library/http.js.map +1 -0
  50. package/dist/library/importFiles.d.ts +18 -0
  51. package/dist/library/importFiles.d.ts.map +1 -0
  52. package/dist/library/importFiles.js +184 -0
  53. package/dist/library/importFiles.js.map +1 -0
  54. package/dist/routes/account.d.ts +4 -0
  55. package/dist/routes/account.d.ts.map +1 -0
  56. package/dist/routes/account.js +53 -0
  57. package/dist/routes/account.js.map +1 -0
  58. package/dist/routes/agentVariants.d.ts +2 -13
  59. package/dist/routes/agentVariants.d.ts.map +1 -1
  60. package/dist/routes/agentVariants.js +13 -45
  61. package/dist/routes/agentVariants.js.map +1 -1
  62. package/dist/routes/library/app.d.ts +8 -0
  63. package/dist/routes/library/app.d.ts.map +1 -0
  64. package/dist/routes/library/app.js +26 -0
  65. package/dist/routes/library/app.js.map +1 -0
  66. package/dist/routes/library/index.d.ts +5 -0
  67. package/dist/routes/library/index.d.ts.map +1 -0
  68. package/dist/routes/library/index.js +32 -0
  69. package/dist/routes/library/index.js.map +1 -0
  70. package/dist/routes/library/middleware.d.ts +9 -0
  71. package/dist/routes/library/middleware.d.ts.map +1 -0
  72. package/dist/routes/library/middleware.js +58 -0
  73. package/dist/routes/library/middleware.js.map +1 -0
  74. package/dist/routes/library/navigation.d.ts +5 -0
  75. package/dist/routes/library/navigation.d.ts.map +1 -0
  76. package/dist/routes/library/navigation.js +39 -0
  77. package/dist/routes/library/navigation.js.map +1 -0
  78. package/dist/routes/library/projects.d.ts +5 -0
  79. package/dist/routes/library/projects.d.ts.map +1 -0
  80. package/dist/routes/library/projects.js +42 -0
  81. package/dist/routes/library/projects.js.map +1 -0
  82. package/dist/routes/library/schemas.d.ts +23 -0
  83. package/dist/routes/library/schemas.d.ts.map +1 -0
  84. package/dist/routes/library/schemas.js +10 -0
  85. package/dist/routes/library/schemas.js.map +1 -0
  86. package/dist/routes/library/staticPreview.d.ts +4 -0
  87. package/dist/routes/library/staticPreview.d.ts.map +1 -0
  88. package/dist/routes/library/staticPreview.js +39 -0
  89. package/dist/routes/library/staticPreview.js.map +1 -0
  90. package/dist/routes/library/types.d.ts +22 -0
  91. package/dist/routes/library/types.d.ts.map +1 -0
  92. package/dist/routes/library/types.js +3 -0
  93. package/dist/routes/library/types.js.map +1 -0
  94. package/dist/routes/library/variants.d.ts +5 -0
  95. package/dist/routes/library/variants.d.ts.map +1 -0
  96. package/dist/routes/library/variants.js +35 -0
  97. package/dist/routes/library/variants.js.map +1 -0
  98. package/dist/server.d.ts +2 -0
  99. package/dist/server.d.ts.map +1 -1
  100. package/dist/server.js +18 -30
  101. package/dist/server.js.map +1 -1
  102. package/dist/services/HistoryReplayService.js +1 -1
  103. package/dist/services/HistoryReplayService.js.map +1 -1
  104. package/dist/services/HubDiscovery.d.ts +46 -0
  105. package/dist/services/HubDiscovery.d.ts.map +1 -0
  106. package/dist/services/HubDiscovery.js +58 -0
  107. package/dist/services/HubDiscovery.js.map +1 -0
  108. package/dist/services/HubNavigation.d.ts +36 -0
  109. package/dist/services/HubNavigation.d.ts.map +1 -0
  110. package/dist/services/HubNavigation.js +76 -0
  111. package/dist/services/HubNavigation.js.map +1 -0
  112. package/dist/services/ProjectCardPreviews.d.ts +27 -0
  113. package/dist/services/ProjectCardPreviews.d.ts.map +1 -0
  114. package/dist/services/ProjectCardPreviews.js +112 -0
  115. package/dist/services/ProjectCardPreviews.js.map +1 -0
  116. package/dist/services/ProjectFolderPicker.d.ts +20 -0
  117. package/dist/services/ProjectFolderPicker.d.ts.map +1 -0
  118. package/dist/services/ProjectFolderPicker.js +174 -0
  119. package/dist/services/ProjectFolderPicker.js.map +1 -0
  120. package/dist/services/ProjectImport.d.ts +13 -0
  121. package/dist/services/ProjectImport.d.ts.map +1 -0
  122. package/dist/services/ProjectImport.js +226 -0
  123. package/dist/services/ProjectImport.js.map +1 -0
  124. package/dist/services/ProjectLibrary.d.ts +74 -0
  125. package/dist/services/ProjectLibrary.d.ts.map +1 -0
  126. package/dist/services/ProjectLibrary.js +261 -0
  127. package/dist/services/ProjectLibrary.js.map +1 -0
  128. package/dist/services/ProjectMetadataStore.d.ts +6 -19
  129. package/dist/services/ProjectMetadataStore.d.ts.map +1 -1
  130. package/dist/services/ProjectMetadataStore.js +29 -147
  131. package/dist/services/ProjectMetadataStore.js.map +1 -1
  132. package/dist/services/ProjectRegistry.d.ts +80 -0
  133. package/dist/services/ProjectRegistry.d.ts.map +1 -0
  134. package/dist/services/ProjectRegistry.js +147 -0
  135. package/dist/services/ProjectRegistry.js.map +1 -0
  136. package/dist/services/ProjectRuntimeService.d.ts +18 -0
  137. package/dist/services/ProjectRuntimeService.d.ts.map +1 -0
  138. package/dist/services/ProjectRuntimeService.js +143 -0
  139. package/dist/services/ProjectRuntimeService.js.map +1 -0
  140. package/dist/services/ProjectScreenshotService.d.ts +15 -0
  141. package/dist/services/ProjectScreenshotService.d.ts.map +1 -0
  142. package/dist/services/ProjectScreenshotService.js +90 -0
  143. package/dist/services/ProjectScreenshotService.js.map +1 -0
  144. package/dist/services/ProjectStorage.d.ts +20 -0
  145. package/dist/services/ProjectStorage.d.ts.map +1 -0
  146. package/dist/services/ProjectStorage.js +41 -0
  147. package/dist/services/ProjectStorage.js.map +1 -0
  148. package/dist/services/StaticLibraryPreviews.d.ts +21 -0
  149. package/dist/services/StaticLibraryPreviews.d.ts.map +1 -0
  150. package/dist/services/StaticLibraryPreviews.js +61 -0
  151. package/dist/services/StaticLibraryPreviews.js.map +1 -0
  152. package/dist/services/TelemetryService.d.ts +7 -0
  153. package/dist/services/TelemetryService.d.ts.map +1 -1
  154. package/dist/services/TelemetryService.js +7 -1
  155. package/dist/services/TelemetryService.js.map +1 -1
  156. package/dist/services/TreeStore.d.ts +8 -3
  157. package/dist/services/TreeStore.d.ts.map +1 -1
  158. package/dist/services/TreeStore.js +39 -18
  159. package/dist/services/TreeStore.js.map +1 -1
  160. package/dist/services/VariantGenerationService.d.ts +5 -0
  161. package/dist/services/VariantGenerationService.d.ts.map +1 -1
  162. package/dist/services/VariantGenerationService.js +13 -1
  163. package/dist/services/VariantGenerationService.js.map +1 -1
  164. package/dist/services/VariantHistoryService.d.ts +17 -162
  165. package/dist/services/VariantHistoryService.d.ts.map +1 -1
  166. package/dist/services/VariantHistoryService.js +186 -45
  167. package/dist/services/VariantHistoryService.js.map +1 -1
  168. package/dist/services/VariantRunService.d.ts +3 -0
  169. package/dist/services/VariantRunService.d.ts.map +1 -1
  170. package/dist/services/VariantRunService.js +2 -0
  171. package/dist/services/VariantRunService.js.map +1 -1
  172. package/dist/services/VariantsRuntime.d.ts +4 -0
  173. package/dist/services/VariantsRuntime.d.ts.map +1 -1
  174. package/dist/services/VariantsRuntime.js +6 -1
  175. package/dist/services/VariantsRuntime.js.map +1 -1
  176. package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -0
  177. package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
  178. package/dist/services/createAgentVariantsOrchestrator.js +1 -0
  179. package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
  180. package/dist/services/historyRoots.d.ts +14 -0
  181. package/dist/services/historyRoots.d.ts.map +1 -0
  182. package/dist/services/historyRoots.js +44 -0
  183. package/dist/services/historyRoots.js.map +1 -0
  184. package/dist/services/libraryErrors.d.ts +7 -0
  185. package/dist/services/libraryErrors.d.ts.map +1 -0
  186. package/dist/services/libraryErrors.js +14 -0
  187. package/dist/services/libraryErrors.js.map +1 -0
  188. package/dist/storage/library/BundleMetadataStore.d.ts +53 -0
  189. package/dist/storage/library/BundleMetadataStore.d.ts.map +1 -0
  190. package/dist/storage/library/BundleMetadataStore.js +317 -0
  191. package/dist/storage/library/BundleMetadataStore.js.map +1 -0
  192. package/dist/storage/library/CoordinatorRecords.d.ts +25 -0
  193. package/dist/storage/library/CoordinatorRecords.d.ts.map +1 -0
  194. package/dist/storage/library/CoordinatorRecords.js +84 -0
  195. package/dist/storage/library/CoordinatorRecords.js.map +1 -0
  196. package/dist/storage/library/ProjectPreviewCache.d.ts +34 -0
  197. package/dist/storage/library/ProjectPreviewCache.d.ts.map +1 -0
  198. package/dist/storage/library/ProjectPreviewCache.js +62 -0
  199. package/dist/storage/library/ProjectPreviewCache.js.map +1 -0
  200. package/dist/storage/library/ProjectRecords.d.ts +64 -0
  201. package/dist/storage/library/ProjectRecords.d.ts.map +1 -0
  202. package/dist/storage/library/ProjectRecords.js +139 -0
  203. package/dist/storage/library/ProjectRecords.js.map +1 -0
  204. package/dist/storage/library/database.d.ts +13 -0
  205. package/dist/storage/library/database.d.ts.map +1 -0
  206. package/dist/storage/library/database.js +106 -0
  207. package/dist/storage/library/database.js.map +1 -0
  208. package/dist/storage/library/migrations.d.ts +5 -0
  209. package/dist/storage/library/migrations.d.ts.map +1 -0
  210. package/dist/storage/library/migrations.js +61 -0
  211. package/dist/storage/library/migrations.js.map +1 -0
  212. package/dist/storage/library/schema/bundle.d.ts +734 -0
  213. package/dist/storage/library/schema/bundle.d.ts.map +1 -0
  214. package/dist/storage/library/schema/bundle.js +79 -0
  215. package/dist/storage/library/schema/bundle.js.map +1 -0
  216. package/dist/storage/library/schema/coordinator.d.ts +72 -0
  217. package/dist/storage/library/schema/coordinator.d.ts.map +1 -0
  218. package/dist/storage/library/schema/coordinator.js +12 -0
  219. package/dist/storage/library/schema/coordinator.js.map +1 -0
  220. package/dist/storage/library/schema/registry.d.ts +198 -0
  221. package/dist/storage/library/schema/registry.d.ts.map +1 -0
  222. package/dist/storage/library/schema/registry.js +32 -0
  223. package/dist/storage/library/schema/registry.js.map +1 -0
  224. package/dist/storage/library/sourcePresentation.d.ts +3 -0
  225. package/dist/storage/library/sourcePresentation.d.ts.map +1 -0
  226. package/dist/storage/library/sourcePresentation.js +70 -0
  227. package/dist/storage/library/sourcePresentation.js.map +1 -0
  228. package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts +41 -0
  229. package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts.map +1 -0
  230. package/dist/storage/project-metadata/ProjectMetadataRecords.js +120 -0
  231. package/dist/storage/project-metadata/ProjectMetadataRecords.js.map +1 -0
  232. package/dist/storage/project-metadata/database.d.ts +12 -0
  233. package/dist/storage/project-metadata/database.d.ts.map +1 -0
  234. package/dist/storage/project-metadata/database.js +79 -0
  235. package/dist/storage/project-metadata/database.js.map +1 -0
  236. package/dist/{services/projectMetadataMigrations.d.ts → storage/project-metadata/migrations.d.ts} +1 -1
  237. package/dist/storage/project-metadata/migrations.d.ts.map +1 -0
  238. package/dist/{services/projectMetadataMigrations.js → storage/project-metadata/migrations.js} +1 -1
  239. package/dist/storage/project-metadata/migrations.js.map +1 -0
  240. package/dist/storage/project-metadata/schema.d.ts +288 -0
  241. package/dist/storage/project-metadata/schema.d.ts.map +1 -0
  242. package/dist/storage/project-metadata/schema.js +35 -0
  243. package/dist/storage/project-metadata/schema.js.map +1 -0
  244. package/dist/types/account.d.ts +8 -0
  245. package/dist/types/account.d.ts.map +1 -0
  246. package/dist/types/account.js +3 -0
  247. package/dist/types/account.js.map +1 -0
  248. package/dist/types/project-library.d.ts +28 -0
  249. package/dist/types/project-library.d.ts.map +1 -0
  250. package/dist/types/project-library.js +3 -0
  251. package/dist/types/project-library.js.map +1 -0
  252. package/dist/types/variant-history.d.ts +173 -0
  253. package/dist/types/variant-history.d.ts.map +1 -0
  254. package/dist/types/variant-history.js +3 -0
  255. package/dist/types/variant-history.js.map +1 -0
  256. package/dist/utils/windowPlacement.d.ts +20 -0
  257. package/dist/utils/windowPlacement.d.ts.map +1 -0
  258. package/dist/utils/windowPlacement.js +20 -0
  259. package/dist/utils/windowPlacement.js.map +1 -0
  260. package/package.json +8 -3
  261. package/scripts/verify-node-version.cjs +9 -6
  262. package/src/ui/dist/assets/LibraryApp-B2MZyxIp.js +16 -0
  263. package/src/ui/dist/assets/main-1IMq5Huu.css +1 -0
  264. package/src/ui/dist/assets/main-BId3Sa7r.js +438 -0
  265. package/src/ui/dist/favicon-16.png +0 -0
  266. package/src/ui/dist/favicon-32.png +0 -0
  267. package/src/ui/dist/favicon.ico +0 -0
  268. package/src/ui/dist/index.html +2 -2
  269. package/dist/services/projectMetadataMigrations.d.ts.map +0 -1
  270. package/dist/services/projectMetadataMigrations.js.map +0 -1
  271. package/src/ui/dist/assets/main-C1kowo8p.js +0 -438
  272. package/src/ui/dist/assets/main-Ct1aZend.css +0 -1
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startHubServer = void 0;
7
+ const StaticPreviewServer_1 = require("./StaticPreviewServer");
8
+ const app_1 = require("../routes/library/app");
9
+ const ProjectRuntimeService_1 = require("../services/ProjectRuntimeService");
10
+ const ProjectFolderPicker_1 = require("../services/ProjectFolderPicker");
11
+ const ProjectCardPreviews_1 = require("../services/ProjectCardPreviews");
12
+ const path_1 = __importDefault(require("path"));
13
+ const HubDiscovery_1 = require("../services/HubDiscovery");
14
+ const HubNavigation_1 = require("../services/HubNavigation");
15
+ const ProjectLibrary_1 = require("../services/ProjectLibrary");
16
+ const StaticLibraryPreviews_1 = require("../services/StaticLibraryPreviews");
17
+ const http_1 = require("./http");
18
+ /** Starts one shared application coordinator while keeping project runtimes independent. */
19
+ const startHubServer = async ({ root = (0, ProjectLibrary_1.currentLibraryRoot)(), telemetry, uiDirectory = path_1.default.resolve(__dirname, '../../src/ui/dist'), } = {}) => {
20
+ const discovery = await HubDiscovery_1.HubDiscovery.open(root);
21
+ const claim = discovery.claim();
22
+ if (claim.status === 'occupied') {
23
+ discovery.close();
24
+ return null;
25
+ }
26
+ const token = claim.token;
27
+ let library;
28
+ try {
29
+ library = await ProjectLibrary_1.ProjectLibrary.open(root);
30
+ }
31
+ catch (error) {
32
+ discovery.release(token);
33
+ discovery.close();
34
+ throw error;
35
+ }
36
+ const navigation = new HubNavigation_1.HubNavigation();
37
+ const previews = new StaticLibraryPreviews_1.StaticLibraryPreviews(library, StaticPreviewServer_1.startStaticPreviewServer);
38
+ const runtime = new ProjectRuntimeService_1.ProjectRuntimeService(library.registry);
39
+ const cardPreviews = new ProjectCardPreviews_1.ProjectCardPreviews({
40
+ library,
41
+ runtime,
42
+ previews,
43
+ telemetry,
44
+ });
45
+ const folderPicker = new ProjectFolderPicker_1.ProjectFolderPicker();
46
+ const app = (0, app_1.createLibraryApp)({
47
+ token,
48
+ library,
49
+ navigation,
50
+ previews,
51
+ runtime,
52
+ cardPreviews,
53
+ folderPicker,
54
+ telemetry,
55
+ uiDirectory,
56
+ });
57
+ let listener;
58
+ try {
59
+ listener = await (0, http_1.listenLocally)(app);
60
+ discovery.publish({ token, port: listener.port });
61
+ }
62
+ catch (error) {
63
+ if (listener)
64
+ await (0, http_1.closeListener)(listener.server);
65
+ navigation.close();
66
+ await cardPreviews.close();
67
+ await previews.close();
68
+ library.close();
69
+ discovery.release(token);
70
+ discovery.close();
71
+ throw error;
72
+ }
73
+ const activeListener = listener;
74
+ let isClosed = false;
75
+ return {
76
+ url: activeListener.url,
77
+ token,
78
+ library,
79
+ close: async () => {
80
+ if (isClosed)
81
+ return;
82
+ isClosed = true;
83
+ folderPicker.close();
84
+ navigation.close();
85
+ await cardPreviews.close();
86
+ await (0, http_1.closeListener)(activeListener.server);
87
+ await previews.close();
88
+ library.close();
89
+ discovery.release(token);
90
+ discovery.close();
91
+ },
92
+ };
93
+ };
94
+ exports.startHubServer = startHubServer;
95
+ //# sourceMappingURL=HubServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"HubServer.js","sourceRoot":"","sources":["../../src/library/HubServer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Starts the dedicated listener for one canonical saved snapshot directory. */
2
+ export declare const startStaticPreviewServer: (root: string) => Promise<{
3
+ server: import("node:http").Server;
4
+ url: string;
5
+ port: number;
6
+ }>;
7
+ //# sourceMappingURL=StaticPreviewServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticPreviewServer.d.ts","sourceRoot":"","sources":["../../src/library/StaticPreviewServer.ts"],"names":[],"mappings":"AAKA,gFAAgF;AAChF,eAAO,MAAM,wBAAwB,GAAU,MAAM,MAAM;;;;EAI1D,CAAC"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.startStaticPreviewServer = void 0;
7
+ const express_1 = __importDefault(require("express"));
8
+ const promises_1 = __importDefault(require("fs/promises"));
9
+ const staticPreview_1 = require("../routes/library/staticPreview");
10
+ const http_1 = require("./http");
11
+ /** Starts the dedicated listener for one canonical saved snapshot directory. */
12
+ const startStaticPreviewServer = async (root) => {
13
+ const app = (0, express_1.default)();
14
+ app.use((0, staticPreview_1.createStaticPreviewRoutes)(await promises_1.default.realpath(root)));
15
+ return (0, http_1.listenLocally)(app);
16
+ };
17
+ exports.startStaticPreviewServer = startStaticPreviewServer;
18
+ //# sourceMappingURL=StaticPreviewServer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticPreviewServer.js","sourceRoot":"","sources":["../../src/library/StaticPreviewServer.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAC9B,2DAA6B;AAC7B,mEAA4E;AAC5E,iCAAuC;AAEvC,gFAAgF;AACzE,MAAM,wBAAwB,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAC7D,MAAM,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,IAAA,yCAAyB,EAAC,MAAM,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5D,OAAO,IAAA,oBAAa,EAAC,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AAJW,QAAA,wBAAwB,4BAInC"}
@@ -0,0 +1,11 @@
1
+ import { type Server } from 'http';
2
+ import type { Express } from 'express';
3
+ /** Listens on loopback with an OS-assigned port, never exposing project files to the LAN. */
4
+ export declare const listenLocally: (app: Express) => Promise<{
5
+ server: Server;
6
+ url: string;
7
+ port: number;
8
+ }>;
9
+ /** Closes a listener and its idle HTTP connections. */
10
+ export declare const closeListener: (server: Server) => Promise<void>;
11
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/library/http.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,MAAM,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAEvC,6FAA6F;AAC7F,eAAO,MAAM,aAAa,GACxB,KAAK,OAAO,KACX,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAiBvD,CAAC;AAEF,uDAAuD;AACvD,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,OAAO,CAAC,IAAI,CAIvD,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.closeListener = exports.listenLocally = void 0;
4
+ const http_1 = require("http");
5
+ /** Listens on loopback with an OS-assigned port, never exposing project files to the LAN. */
6
+ const listenLocally = async (app) => {
7
+ const server = (0, http_1.createServer)(app);
8
+ await new Promise((resolve, reject) => {
9
+ server.once('error', reject);
10
+ server.listen(0, '127.0.0.1', () => {
11
+ server.removeListener('error', reject);
12
+ resolve();
13
+ });
14
+ });
15
+ const address = server.address();
16
+ if (!address || typeof address === 'string')
17
+ throw new Error('No local listening address');
18
+ return {
19
+ server,
20
+ url: `http://127.0.0.1:${address.port}`,
21
+ port: address.port,
22
+ };
23
+ };
24
+ exports.listenLocally = listenLocally;
25
+ /** Closes a listener and its idle HTTP connections. */
26
+ const closeListener = (server) => new Promise((resolve, reject) => {
27
+ server.close((error) => (error ? reject(error) : resolve()));
28
+ server.closeIdleConnections();
29
+ });
30
+ exports.closeListener = closeListener;
31
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/library/http.ts"],"names":[],"mappings":";;;AAAA,+BAAiD;AAGjD,6FAA6F;AACtF,MAAM,aAAa,GAAG,KAAK,EAChC,GAAY,EAC4C,EAAE;IAC1D,MAAM,MAAM,GAAG,IAAA,mBAAY,EAAC,GAAG,CAAC,CAAC;IACjC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC1C,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YACvC,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ;QACzC,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChD,OAAO;QACL,MAAM;QACN,GAAG,EAAE,oBAAoB,OAAO,CAAC,IAAI,EAAE;QACvC,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAC;AACJ,CAAC,CAAC;AAnBW,QAAA,aAAa,iBAmBxB;AAEF,uDAAuD;AAChD,MAAM,aAAa,GAAG,CAAC,MAAc,EAAiB,EAAE,CAC7D,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,CAAC,oBAAoB,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC;AAJQ,QAAA,aAAa,iBAIrB"}
@@ -0,0 +1,18 @@
1
+ import type { VariantHistoryManifest } from '../services/VariantHistoryService';
2
+ /** Enumerates only durable source files, rejecting links and borrowed object stores. */
3
+ export declare const sourceFiles: (dataDirectory: string) => Promise<string[]>;
4
+ /** Hashes source content rather than volatile index/WAL bytes for divergence detection. */
5
+ export declare const sourceFingerprint: (dataDirectory: string) => Promise<string>;
6
+ /** Copies durable bytes into staging without modifying or linking source files. */
7
+ export declare const copySourceFiles: (source: string, destination: string) => Promise<void>;
8
+ /** Reads supported persisted manifests and checks that path and metadata identities agree. */
9
+ export declare const readSourceManifests: (dataDirectory: string) => Promise<VariantHistoryManifest[]>;
10
+ /** Resolves artifact paths within their owner and verifies regular files exist. */
11
+ export declare const verifyArtifactFile: (root: string, relative: string) => Promise<void>;
12
+ /** Relocates managed reference paths while preserving external workspace references. */
13
+ export declare const relocateContext: (args: {
14
+ sourceDirectory: string;
15
+ stageDirectory: string;
16
+ bundleDirectory: string;
17
+ }) => Promise<void>;
18
+ //# sourceMappingURL=importFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importFiles.d.ts","sourceRoot":"","sources":["../../src/library/importFiles.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mCAAmC,CAAC;AAiDhF,wFAAwF;AACxF,eAAO,MAAM,WAAW,GAAU,eAAe,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAyBzE,CAAC;AAEF,2FAA2F;AAC3F,eAAO,MAAM,iBAAiB,GAC5B,eAAe,MAAM,KACpB,OAAO,CAAC,MAAM,CAchB,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,eAAe,GAC1B,QAAQ,MAAM,EACd,aAAa,MAAM,KAClB,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,GAC9B,eAAe,MAAM,KACpB,OAAO,CAAC,sBAAsB,EAAE,CA2BlC,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,kBAAkB,GAC7B,MAAM,MAAM,EACZ,UAAU,MAAM,KACf,OAAO,CAAC,IAAI,CAMd,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,eAAe,GAAU,MAAM;IAC1C,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB,KAAG,OAAO,CAAC,IAAI,CA2Cf,CAAC"}
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.relocateContext = exports.verifyArtifactFile = exports.readSourceManifests = exports.copySourceFiles = exports.sourceFingerprint = exports.sourceFiles = void 0;
7
+ const sourcePresentation_1 = require("../storage/library/sourcePresentation");
8
+ const promises_1 = __importDefault(require("fs/promises"));
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const crypto_1 = require("crypto");
12
+ const zod_1 = require("zod");
13
+ const HISTORY_DIRECTORIES = [
14
+ 'variants',
15
+ 'variant-context',
16
+ 'store.git',
17
+ ];
18
+ const SNAPSHOT_TOP_LEVEL = new Set([
19
+ 'HEAD',
20
+ 'config',
21
+ 'objects',
22
+ 'refs',
23
+ 'packed-refs',
24
+ ]);
25
+ const SafeId = zod_1.z.string().regex(/^[A-Za-z0-9_-]+$/);
26
+ const Pointer = zod_1.z
27
+ .object({ ref: zod_1.z.string(), commitSha: zod_1.z.string().regex(/^[a-f0-9]{40}$/) })
28
+ .passthrough();
29
+ const ManifestSchema = zod_1.z
30
+ .object({
31
+ schemaVersion: zod_1.z.literal(2),
32
+ sessionId: SafeId,
33
+ variantId: SafeId,
34
+ label: zod_1.z.string(),
35
+ brief: zod_1.z.string(),
36
+ sessionPrompt: zod_1.z.string(),
37
+ projectKind: zod_1.z.enum(['existing', 'fresh']),
38
+ status: zod_1.z.enum([
39
+ 'completed',
40
+ 'committed',
41
+ 'rejected',
42
+ 'cancelled',
43
+ 'removed',
44
+ ]),
45
+ createdAt: zod_1.z.string(),
46
+ statusChangedAt: zod_1.z.string(),
47
+ changedFilesCount: zod_1.z.number().int().nonnegative(),
48
+ artifact: zod_1.z.object({ kind: zod_1.z.enum(['diff', 'project']) }).passthrough(),
49
+ preview: zod_1.z
50
+ .object({ kind: zod_1.z.enum(['static', 'dev-server', 'none']) })
51
+ .passthrough(),
52
+ tree: Pointer.extend({
53
+ treeSha: zod_1.z.string().regex(/^[a-f0-9]{40}$/),
54
+ }).optional(),
55
+ base: Pointer.optional(),
56
+ parent: Pointer.optional(),
57
+ })
58
+ .passthrough();
59
+ /** Enumerates only durable source files, rejecting links and borrowed object stores. */
60
+ const sourceFiles = async (dataDirectory) => {
61
+ const files = [];
62
+ const walk = async (relative) => {
63
+ const absolute = path_1.default.join(dataDirectory, relative);
64
+ const stat = await promises_1.default.lstat(absolute);
65
+ if (stat.isSymbolicLink())
66
+ throw new Error(`Cannot import symbolic link: ${relative}`);
67
+ if (relative === path_1.default.join('store.git', 'objects', 'info', 'alternates'))
68
+ throw new Error('Snapshot store depends on an external object database');
69
+ if (stat.isFile()) {
70
+ files.push(relative);
71
+ return;
72
+ }
73
+ if (!stat.isDirectory())
74
+ throw new Error(`Cannot import non-regular file: ${relative}`);
75
+ for (const name of (await promises_1.default.readdir(absolute)).sort()) {
76
+ if (relative === 'store.git' && !SNAPSHOT_TOP_LEVEL.has(name))
77
+ continue;
78
+ if (name.endsWith('.lock'))
79
+ continue;
80
+ await walk(path_1.default.join(relative, name));
81
+ }
82
+ };
83
+ for (const name of HISTORY_DIRECTORIES) {
84
+ if (fs_1.default.existsSync(path_1.default.join(dataDirectory, name)))
85
+ await walk(name);
86
+ }
87
+ return files.sort();
88
+ };
89
+ exports.sourceFiles = sourceFiles;
90
+ /** Hashes source content rather than volatile index/WAL bytes for divergence detection. */
91
+ const sourceFingerprint = async (dataDirectory) => {
92
+ const hash = (0, crypto_1.createHash)('sha256');
93
+ for (const relative of await (0, exports.sourceFiles)(dataDirectory)) {
94
+ hash.update(relative);
95
+ hash.update('\0');
96
+ const fileHash = (0, crypto_1.createHash)('sha256');
97
+ for await (const chunk of fs_1.default.createReadStream(path_1.default.join(dataDirectory, relative)))
98
+ fileHash.update(chunk);
99
+ hash.update(fileHash.digest());
100
+ }
101
+ hash.update((await (0, sourcePresentation_1.readSourcePresentation)(dataDirectory)) ?? '');
102
+ return hash.digest('hex');
103
+ };
104
+ exports.sourceFingerprint = sourceFingerprint;
105
+ /** Copies durable bytes into staging without modifying or linking source files. */
106
+ const copySourceFiles = async (source, destination) => {
107
+ for (const relative of await (0, exports.sourceFiles)(source)) {
108
+ const target = path_1.default.join(destination, relative);
109
+ await promises_1.default.mkdir(path_1.default.dirname(target), { recursive: true });
110
+ await promises_1.default.copyFile(path_1.default.join(source, relative), target);
111
+ }
112
+ };
113
+ exports.copySourceFiles = copySourceFiles;
114
+ /** Reads supported persisted manifests and checks that path and metadata identities agree. */
115
+ const readSourceManifests = async (dataDirectory) => {
116
+ const manifests = [];
117
+ for (const relative of await (0, exports.sourceFiles)(dataDirectory)) {
118
+ const parts = relative.split(path_1.default.sep);
119
+ if (parts[0] !== 'variants' ||
120
+ parts.length !== 4 ||
121
+ parts[3] !== 'manifest.json')
122
+ continue;
123
+ if (parts[2].includes('.tmp-'))
124
+ continue;
125
+ const raw = JSON.parse(await promises_1.default.readFile(path_1.default.join(dataDirectory, relative), 'utf8'));
126
+ if (typeof raw !== 'object' ||
127
+ !raw ||
128
+ !('schemaVersion' in raw) ||
129
+ raw.schemaVersion !== 2)
130
+ throw new Error(`Unsupported history schema in ${relative}`);
131
+ const parsed = ManifestSchema.parse(raw);
132
+ if (parsed.sessionId !== parts[1] || parsed.variantId !== parts[2])
133
+ throw new Error(`History identity mismatch in ${relative}`);
134
+ manifests.push(parsed);
135
+ }
136
+ return manifests;
137
+ };
138
+ exports.readSourceManifests = readSourceManifests;
139
+ /** Resolves artifact paths within their owner and verifies regular files exist. */
140
+ const verifyArtifactFile = async (root, relative) => {
141
+ const absolute = path_1.default.resolve(root, relative);
142
+ if (!absolute.startsWith(path_1.default.resolve(root) + path_1.default.sep))
143
+ throw new Error('Artifact escapes its history directory');
144
+ if (!(await promises_1.default.stat(absolute)).isFile())
145
+ throw new Error(`Missing artifact: ${relative}`);
146
+ };
147
+ exports.verifyArtifactFile = verifyArtifactFile;
148
+ /** Relocates managed reference paths while preserving external workspace references. */
149
+ const relocateContext = async (args) => {
150
+ const sourceContext = path_1.default.join(args.sourceDirectory, 'variant-context');
151
+ const canonicalContext = fs_1.default.existsSync(sourceContext)
152
+ ? fs_1.default.realpathSync(sourceContext)
153
+ : sourceContext;
154
+ const destinationContext = path_1.default.join(args.bundleDirectory, 'variant-context');
155
+ const relocate = (value) => {
156
+ if (typeof value === 'string' && path_1.default.isAbsolute(value)) {
157
+ let canonical = value;
158
+ try {
159
+ canonical = fs_1.default.realpathSync(value);
160
+ }
161
+ catch {
162
+ /* Unavailable external references retain their provenance. */
163
+ }
164
+ if (canonical === canonicalContext ||
165
+ canonical.startsWith(canonicalContext + path_1.default.sep))
166
+ return path_1.default.join(destinationContext, path_1.default.relative(canonicalContext, canonical));
167
+ }
168
+ if (Array.isArray(value))
169
+ return value.map(relocate);
170
+ if (value && typeof value === 'object')
171
+ return Object.fromEntries(Object.entries(value).map(([key, nested]) => [key, relocate(nested)]));
172
+ return value;
173
+ };
174
+ for (const relative of await (0, exports.sourceFiles)(args.sourceDirectory)) {
175
+ if (!relative.startsWith('variant-context' + path_1.default.sep) ||
176
+ !relative.endsWith(path_1.default.sep + 'context.json'))
177
+ continue;
178
+ const filename = path_1.default.join(args.stageDirectory, relative);
179
+ const document = JSON.parse(await promises_1.default.readFile(filename, 'utf8'));
180
+ await promises_1.default.writeFile(filename, JSON.stringify(relocate(document), null, 2) + '\n');
181
+ }
182
+ };
183
+ exports.relocateContext = relocateContext;
184
+ //# sourceMappingURL=importFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importFiles.js","sourceRoot":"","sources":["../../src/library/importFiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { TelemetryService } from '../services/TelemetryService';
2
+ /** Serves machine account state and stores or clears browser sign-in credentials. */
3
+ export declare const createAccountRouter: (telemetry?: TelemetryService) => import("express-serve-static-core").Router;
4
+ //# sourceMappingURL=account.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.d.ts","sourceRoot":"","sources":["../../src/routes/account.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAMrE,qFAAqF;AACrF,eAAO,MAAM,mBAAmB,GAAI,YAAY,gBAAgB,+CA2C/D,CAAC"}
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createAccountRouter = void 0;
4
+ const express_1 = require("express");
5
+ const ConfigManager_1 = require("../services/ConfigManager");
6
+ const logger_1 = require("../utils/logger");
7
+ const log = (0, logger_1.createLogger)('AccountRoutes');
8
+ /** Serves machine account state and stores or clears browser sign-in credentials. */
9
+ const createAccountRouter = (telemetry) => {
10
+ const router = (0, express_1.Router)();
11
+ router.get('/account', (_req, res) => {
12
+ const config = (0, ConfigManager_1.getConfigManager)();
13
+ const account = {
14
+ isAuthenticated: config.isAuthenticated(),
15
+ email: config.getEmail(),
16
+ name: config.getDisplayName(),
17
+ userId: config.getUserId(),
18
+ };
19
+ res.json(account);
20
+ });
21
+ // Store auth credentials after browser-based OAuth completion.
22
+ router.post('/auth/store', (req, res) => {
23
+ const { email, token, refreshToken, userId } = req.body ?? {};
24
+ if (!email || !token) {
25
+ return res.status(400).json({ error: 'Missing email or token' });
26
+ }
27
+ try {
28
+ (0, ConfigManager_1.getConfigManager)().setAuth(token, email, refreshToken, userId);
29
+ }
30
+ catch {
31
+ return res
32
+ .status(500)
33
+ .json({ error: 'Failed to store auth credentials' });
34
+ }
35
+ telemetry?.identifyUser();
36
+ log.info(`Stored auth for ${email} via browser OAuth`);
37
+ res.json({ success: true });
38
+ });
39
+ router.post('/auth/logout', (_req, res) => {
40
+ try {
41
+ (0, ConfigManager_1.getConfigManager)().clearAuth();
42
+ }
43
+ catch (error) {
44
+ log.warn('Logout failed', error);
45
+ return res.status(500).json({ error: 'Failed to log out' });
46
+ }
47
+ log.info('Cleared auth via logout');
48
+ res.json({ success: true });
49
+ });
50
+ return router;
51
+ };
52
+ exports.createAccountRouter = createAccountRouter;
53
+ //# sourceMappingURL=account.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"account.js","sourceRoot":"","sources":["../../src/routes/account.ts"],"names":[],"mappings":";;;AAAA,qCAAiC;AACjC,6DAA6D;AAG7D,4CAA+C;AAE/C,MAAM,GAAG,GAAG,IAAA,qBAAY,EAAC,eAAe,CAAC,CAAC;AAE1C,qFAAqF;AAC9E,MAAM,mBAAmB,GAAG,CAAC,SAA4B,EAAE,EAAE;IAClE,MAAM,MAAM,GAAG,IAAA,gBAAM,GAAE,CAAC;IACxB,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACnC,MAAM,MAAM,GAAG,IAAA,gCAAgB,GAAE,CAAC;QAClC,MAAM,OAAO,GAAY;YACvB,eAAe,EAAE,MAAM,CAAC,eAAe,EAAE;YACzC,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE;YACxB,IAAI,EAAE,MAAM,CAAC,cAAc,EAAE;YAC7B,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;SAC3B,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,+DAA+D;IAC/D,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACtC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9D,IAAI,CAAC,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACrB,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC;YACH,IAAA,gCAAgB,GAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG;iBACP,MAAM,CAAC,GAAG,CAAC;iBACX,IAAI,CAAC,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,SAAS,EAAE,YAAY,EAAE,CAAC;QAC1B,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,oBAAoB,CAAC,CAAC;QACvD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACxC,IAAI,CAAC;YACH,IAAA,gCAAgB,GAAE,CAAC,SAAS,EAAE,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA3CW,QAAA,mBAAmB,uBA2C9B"}
@@ -1,3 +1,4 @@
1
+ export { nestedFreshSessionWorkdirs } from '../services/historyRoots';
1
2
  import { Router } from 'express';
2
3
  import { type AgentVariantsOrchestrator } from '../agent-variants';
3
4
  import type { ActiveLeaseMetadata, SessionBridgeService, WatcherLiveness } from '../services/SessionBridgeService';
@@ -17,20 +18,8 @@ import { type InlineStartTracker } from './inlineStartTracker';
17
18
  export type VariantPreviewBridgeOptions = {
18
19
  isEnabled: boolean;
19
20
  expectedParentOrigin?: string;
21
+ resolveLibraryOrigin?: () => string | undefined;
20
22
  };
21
- /**
22
- * Fresh sessions scaffold their workdir at `<root>/.rivet/<slug>/` and persist
23
- * variant history one level deeper (`<slug>/.rivet/variants`, plus the
24
- * content-addressed `<slug>/.rivet/store.git`). `resolveHistoryProjectPaths`
25
- * otherwise only walks UP the tree and trusts the live in-memory session's
26
- * `workspacePath` — so after a Rivet restart, reopening the repo root can't find
27
- * those nested workdirs and the panel shows zero past directions even though the
28
- * files are intact. Scan one level of `<projectPath>/.rivet/*` for the tell-tale
29
- * history markers to rediscover them. Scoped to a single level and gated on the
30
- * marker so scratch dirs (`.rivet-preview-*`, `mcp-bridge`, a bare `variants`
31
- * dir) are never mistaken for session workdirs.
32
- */
33
- export declare const nestedFreshSessionWorkdirs: (projectPath: string) => string[];
34
23
  /**
35
24
  * Stamp the live {@link WatcherLiveness} onto a variants snapshot so the UI can
36
25
  * detect a stale host-agent watch loop off real queue/waiter state. Applied to
@@ -1 +1 @@
1
- {"version":3,"file":"agentVariants.d.ts","sourceRoot":"","sources":["../../src/routes/agentVariants.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAG9D,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EACL,qBAAqB,EAKtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAEL,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAM9B;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAulBF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,0BAA0B,GAAI,aAAa,MAAM,KAAG,MAAM,EAmBtE,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,OAAO,EACjB,UAAU,eAAe,GAAG,IAAI,EAChC,4BAA4B,MAAM,EAClC,eAAc,mBAAmB,EAAO,KACvC,OAiBF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,yBAAyB,EACvC,SAAS,oBAAoB,EAC7B,YAAY,gBAAgB,EAC5B,yBAAyB,qBAAqB,EAC9C,wBAAwB,sBAAsB,EAC9C,oBAAoB,IAAI,CACtB,iBAAiB,EACjB,sBAAsB,GAAG,0BAA0B,GAAG,kBAAkB,CACzE,EACD,wBAAwB,oBAAoB,EAC5C,gBAAgB,2BAA2B,EAC3C,6BAA6B,kBAAkB,KAC9C,MA8gEF,CAAC"}
1
+ {"version":3,"file":"agentVariants.d.ts","sourceRoot":"","sources":["../../src/routes/agentVariants.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAGtE,OAAO,EAAE,MAAM,EAA+B,MAAM,SAAS,CAAC;AAG9D,OAAO,EAGL,KAAK,yBAAyB,EAC/B,MAAM,mBAAmB,CAAC;AAiB3B,OAAO,KAAK,EACV,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,kCAAkC,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAErE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,EACL,qBAAqB,EAKtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EAEL,sBAAsB,EAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAEL,oBAAoB,EACrB,MAAM,kCAAkC,CAAC;AAK1C,OAAO,EAEL,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAM9B;;;;;;GAMG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,OAAO,CAAC;IACnB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,oBAAoB,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACjD,CAAC;AA0lBF;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,GAC/B,UAAU,OAAO,EACjB,UAAU,eAAe,GAAG,IAAI,EAChC,4BAA4B,MAAM,EAClC,eAAc,mBAAmB,EAAO,KACvC,OAiBF,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,yBAAyB,EACvC,SAAS,oBAAoB,EAC7B,YAAY,gBAAgB,EAC5B,yBAAyB,qBAAqB,EAC9C,wBAAwB,sBAAsB,EAC9C,oBAAoB,IAAI,CACtB,iBAAiB,EACjB,sBAAsB,GAAG,0BAA0B,GAAG,kBAAkB,CACzE,EACD,wBAAwB,oBAAoB,EAC5C,gBAAgB,2BAA2B,EAC3C,6BAA6B,kBAAkB,KAC9C,MAghEF,CAAC"}
@@ -4,6 +4,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.createAgentVariantsRouter = exports.stampWatcherLiveness = exports.nestedFreshSessionWorkdirs = void 0;
7
+ const historyRoots_1 = require("../services/historyRoots");
8
+ var historyRoots_2 = require("../services/historyRoots");
9
+ Object.defineProperty(exports, "nestedFreshSessionWorkdirs", { enumerable: true, get: function () { return historyRoots_2.nestedFreshSessionWorkdirs; } });
7
10
  const node_fs_1 = __importDefault(require("node:fs"));
8
11
  const path_1 = __importDefault(require("path"));
9
12
  const express_1 = require("express");
@@ -79,10 +82,10 @@ const PREVIEW_CDN_HOSTS = [
79
82
  * (`frame-ancestors 'self' → refused to connect`). See
80
83
  * docs/preview-target-addressing-design.md.
81
84
  */
82
- const buildStaticPreviewCsp = (parentFrameOrigin) => {
83
- const frameAncestors = parentFrameOrigin
84
- ? `'self' ${parentFrameOrigin}`
85
- : "'self'";
85
+ const buildStaticPreviewCsp = (parentFrameOrigin, libraryOrigin) => {
86
+ const frameAncestors = ["'self'", parentFrameOrigin, libraryOrigin]
87
+ .filter(Boolean)
88
+ .join(' ');
86
89
  return [
87
90
  "default-src 'self' data: blob:",
88
91
  `script-src 'self' 'unsafe-inline' blob: ${PREVIEW_CDN_HOSTS}`,
@@ -546,41 +549,6 @@ const generatedProjectWorkspaceRoot = (projectPath) => {
546
549
  const rootPath = segments.slice(0, rivetIndex).join(path_1.default.sep);
547
550
  return path_1.default.resolve(rootPath || path_1.default.parse(normalized).root);
548
551
  };
549
- /**
550
- * Fresh sessions scaffold their workdir at `<root>/.rivet/<slug>/` and persist
551
- * variant history one level deeper (`<slug>/.rivet/variants`, plus the
552
- * content-addressed `<slug>/.rivet/store.git`). `resolveHistoryProjectPaths`
553
- * otherwise only walks UP the tree and trusts the live in-memory session's
554
- * `workspacePath` — so after a Rivet restart, reopening the repo root can't find
555
- * those nested workdirs and the panel shows zero past directions even though the
556
- * files are intact. Scan one level of `<projectPath>/.rivet/*` for the tell-tale
557
- * history markers to rediscover them. Scoped to a single level and gated on the
558
- * marker so scratch dirs (`.rivet-preview-*`, `mcp-bridge`, a bare `variants`
559
- * dir) are never mistaken for session workdirs.
560
- */
561
- const nestedFreshSessionWorkdirs = (projectPath) => {
562
- const rivetDir = path_1.default.join(projectPath, '.rivet');
563
- let entries;
564
- try {
565
- entries = node_fs_1.default.readdirSync(rivetDir, { withFileTypes: true });
566
- }
567
- catch {
568
- // No `.rivet/` here (or unreadable) — nothing to rediscover.
569
- return [];
570
- }
571
- const workdirs = [];
572
- for (const entry of entries) {
573
- if (!entry.isDirectory())
574
- continue;
575
- const workdir = path_1.default.join(rivetDir, entry.name);
576
- const ownsHistory = node_fs_1.default.existsSync(path_1.default.join(workdir, '.rivet', 'variants')) ||
577
- node_fs_1.default.existsSync(path_1.default.join(workdir, '.rivet', 'store.git'));
578
- if (ownsHistory)
579
- workdirs.push(workdir);
580
- }
581
- return workdirs;
582
- };
583
- exports.nestedFreshSessionWorkdirs = nestedFreshSessionWorkdirs;
584
552
  /**
585
553
  * Stamp the live {@link WatcherLiveness} onto a variants snapshot so the UI can
586
554
  * detect a stale host-agent watch loop off real queue/waiter state. Applied to
@@ -699,7 +667,7 @@ const createAgentVariantsRouter = (orchestrator, bridge, telemetry, variantHisto
699
667
  for (const scanRoot of [params.projectPath, upwardRoot]) {
700
668
  if (!scanRoot)
701
669
  continue;
702
- for (const nested of (0, exports.nestedFreshSessionWorkdirs)(scanRoot)) {
670
+ for (const nested of (0, historyRoots_1.nestedFreshSessionWorkdirs)(scanRoot)) {
703
671
  addCandidate(nested);
704
672
  }
705
673
  }
@@ -848,7 +816,7 @@ const createAgentVariantsRouter = (orchestrator, bridge, telemetry, variantHisto
848
816
  const cacheDir = await variantHistory.store.extractToCache({
849
817
  projectPath: args.projectPath,
850
818
  treeSha: manifest.tree.treeSha,
851
- commitish: manifest.tree.ref,
819
+ commitish: manifest.tree.commitSha,
852
820
  });
853
821
  const appDir = resolvePathWithinRoot(cacheDir, manifest.serve.recipe.cwd);
854
822
  if (!appDir || !node_fs_1.default.existsSync(path_1.default.join(appDir, 'package.json'))) {
@@ -1361,7 +1329,7 @@ const createAgentVariantsRouter = (orchestrator, bridge, telemetry, variantHisto
1361
1329
  return;
1362
1330
  }
1363
1331
  try {
1364
- const raw = await variantHistory.metadata.readVariantsUiState(projectPath);
1332
+ const raw = await variantHistory.readVariantsUiState(projectPath);
1365
1333
  let stored = null;
1366
1334
  if (raw) {
1367
1335
  try {
@@ -1401,7 +1369,7 @@ const createAgentVariantsRouter = (orchestrator, bridge, telemetry, variantHisto
1401
1369
  return;
1402
1370
  }
1403
1371
  try {
1404
- await variantHistory.metadata.writeVariantsUiState(projectPath, JSON.stringify(parsed.data.uiState));
1372
+ await variantHistory.writeVariantsUiState(projectPath, JSON.stringify(parsed.data.uiState));
1405
1373
  res.json({ projectPath, uiState: parsed.data.uiState });
1406
1374
  }
1407
1375
  catch (err) {
@@ -1827,7 +1795,7 @@ const createAgentVariantsRouter = (orchestrator, bridge, telemetry, variantHisto
1827
1795
  .status(200)
1828
1796
  .type('html')
1829
1797
  .set('Cache-Control', 'no-store')
1830
- .set('Content-Security-Policy', buildStaticPreviewCsp(previewBridge?.expectedParentOrigin))
1798
+ .set('Content-Security-Policy', buildStaticPreviewCsp(previewBridge?.expectedParentOrigin, previewBridge?.resolveLibraryOrigin?.()))
1831
1799
  .set('X-Content-Type-Options', 'nosniff')
1832
1800
  .send(finalHtml);
1833
1801
  }
@@ -2544,7 +2512,7 @@ const serveHistoryPreview = async (req, res, variantHistory, resolveProjectPath,
2544
2512
  if (/\.html?$/i.test(file.relativePath)) {
2545
2513
  const html = file.body.toString('utf8');
2546
2514
  res
2547
- .set('Content-Security-Policy', buildStaticPreviewCsp(previewBridge?.expectedParentOrigin))
2515
+ .set('Content-Security-Policy', buildStaticPreviewCsp(previewBridge?.expectedParentOrigin, previewBridge?.resolveLibraryOrigin?.()))
2548
2516
  .set('X-Content-Type-Options', 'nosniff');
2549
2517
  // Embedded mode drives this snapshot iframe over the preview bridge; the
2550
2518
  // listener must be present or selecting/commenting on a past variant