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.
- package/README.md +8 -2
- package/README.npm.md +8 -2
- package/bin/rivet.js +15 -7
- package/dist/agent-variants/variantContext.d.ts +1 -0
- package/dist/agent-variants/variantContext.d.ts.map +1 -1
- package/dist/agent-variants/variantContext.js +1 -1
- package/dist/agent-variants/variantContext.js.map +1 -1
- package/dist/cli/commandNames.d.ts +2 -0
- package/dist/cli/commandNames.d.ts.map +1 -1
- package/dist/cli/commandNames.js +16 -1
- package/dist/cli/commandNames.js.map +1 -1
- package/dist/cli/commands/libraryOpen.d.ts +10 -0
- package/dist/cli/commands/libraryOpen.d.ts.map +1 -0
- package/dist/cli/commands/libraryOpen.js +126 -0
- package/dist/cli/commands/libraryOpen.js.map +1 -0
- package/dist/cli/commands/open.d.ts +39 -0
- package/dist/cli/commands/open.d.ts.map +1 -1
- package/dist/cli/commands/open.js +35 -21
- package/dist/cli/commands/open.js.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/serve.js +33 -0
- package/dist/cli/commands/serve.js.map +1 -1
- package/dist/cli/router.d.ts.map +1 -1
- package/dist/cli/router.js +34 -3
- package/dist/cli/router.js.map +1 -1
- package/dist/cli/serverHandshake.d.ts +7 -5
- package/dist/cli/serverHandshake.d.ts.map +1 -1
- package/dist/cli/serverHandshake.js +16 -12
- package/dist/cli/serverHandshake.js.map +1 -1
- package/dist/install/installationChannel.d.ts +4 -0
- package/dist/install/installationChannel.d.ts.map +1 -0
- package/dist/install/installationChannel.js +13 -0
- package/dist/install/installationChannel.js.map +1 -0
- package/dist/library/HubClient.d.ts +12 -0
- package/dist/library/HubClient.d.ts.map +1 -0
- package/dist/library/HubClient.js +109 -0
- package/dist/library/HubClient.js.map +1 -0
- package/dist/library/HubServer.d.ts +16 -0
- package/dist/library/HubServer.d.ts.map +1 -0
- package/dist/library/HubServer.js +95 -0
- package/dist/library/HubServer.js.map +1 -0
- package/dist/library/StaticPreviewServer.d.ts +7 -0
- package/dist/library/StaticPreviewServer.d.ts.map +1 -0
- package/dist/library/StaticPreviewServer.js +18 -0
- package/dist/library/StaticPreviewServer.js.map +1 -0
- package/dist/library/http.d.ts +11 -0
- package/dist/library/http.d.ts.map +1 -0
- package/dist/library/http.js +31 -0
- package/dist/library/http.js.map +1 -0
- package/dist/library/importFiles.d.ts +18 -0
- package/dist/library/importFiles.d.ts.map +1 -0
- package/dist/library/importFiles.js +184 -0
- package/dist/library/importFiles.js.map +1 -0
- package/dist/routes/account.d.ts +4 -0
- package/dist/routes/account.d.ts.map +1 -0
- package/dist/routes/account.js +53 -0
- package/dist/routes/account.js.map +1 -0
- package/dist/routes/agentVariants.d.ts +2 -13
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +13 -45
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/library/app.d.ts +8 -0
- package/dist/routes/library/app.d.ts.map +1 -0
- package/dist/routes/library/app.js +26 -0
- package/dist/routes/library/app.js.map +1 -0
- package/dist/routes/library/index.d.ts +5 -0
- package/dist/routes/library/index.d.ts.map +1 -0
- package/dist/routes/library/index.js +32 -0
- package/dist/routes/library/index.js.map +1 -0
- package/dist/routes/library/middleware.d.ts +9 -0
- package/dist/routes/library/middleware.d.ts.map +1 -0
- package/dist/routes/library/middleware.js +58 -0
- package/dist/routes/library/middleware.js.map +1 -0
- package/dist/routes/library/navigation.d.ts +5 -0
- package/dist/routes/library/navigation.d.ts.map +1 -0
- package/dist/routes/library/navigation.js +39 -0
- package/dist/routes/library/navigation.js.map +1 -0
- package/dist/routes/library/projects.d.ts +5 -0
- package/dist/routes/library/projects.d.ts.map +1 -0
- package/dist/routes/library/projects.js +42 -0
- package/dist/routes/library/projects.js.map +1 -0
- package/dist/routes/library/schemas.d.ts +23 -0
- package/dist/routes/library/schemas.d.ts.map +1 -0
- package/dist/routes/library/schemas.js +10 -0
- package/dist/routes/library/schemas.js.map +1 -0
- package/dist/routes/library/staticPreview.d.ts +4 -0
- package/dist/routes/library/staticPreview.d.ts.map +1 -0
- package/dist/routes/library/staticPreview.js +39 -0
- package/dist/routes/library/staticPreview.js.map +1 -0
- package/dist/routes/library/types.d.ts +22 -0
- package/dist/routes/library/types.d.ts.map +1 -0
- package/dist/routes/library/types.js +3 -0
- package/dist/routes/library/types.js.map +1 -0
- package/dist/routes/library/variants.d.ts +5 -0
- package/dist/routes/library/variants.d.ts.map +1 -0
- package/dist/routes/library/variants.js +35 -0
- package/dist/routes/library/variants.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +18 -30
- package/dist/server.js.map +1 -1
- package/dist/services/HistoryReplayService.js +1 -1
- package/dist/services/HistoryReplayService.js.map +1 -1
- package/dist/services/HubDiscovery.d.ts +46 -0
- package/dist/services/HubDiscovery.d.ts.map +1 -0
- package/dist/services/HubDiscovery.js +58 -0
- package/dist/services/HubDiscovery.js.map +1 -0
- package/dist/services/HubNavigation.d.ts +36 -0
- package/dist/services/HubNavigation.d.ts.map +1 -0
- package/dist/services/HubNavigation.js +76 -0
- package/dist/services/HubNavigation.js.map +1 -0
- package/dist/services/ProjectCardPreviews.d.ts +27 -0
- package/dist/services/ProjectCardPreviews.d.ts.map +1 -0
- package/dist/services/ProjectCardPreviews.js +112 -0
- package/dist/services/ProjectCardPreviews.js.map +1 -0
- package/dist/services/ProjectFolderPicker.d.ts +20 -0
- package/dist/services/ProjectFolderPicker.d.ts.map +1 -0
- package/dist/services/ProjectFolderPicker.js +174 -0
- package/dist/services/ProjectFolderPicker.js.map +1 -0
- package/dist/services/ProjectImport.d.ts +13 -0
- package/dist/services/ProjectImport.d.ts.map +1 -0
- package/dist/services/ProjectImport.js +226 -0
- package/dist/services/ProjectImport.js.map +1 -0
- package/dist/services/ProjectLibrary.d.ts +74 -0
- package/dist/services/ProjectLibrary.d.ts.map +1 -0
- package/dist/services/ProjectLibrary.js +261 -0
- package/dist/services/ProjectLibrary.js.map +1 -0
- package/dist/services/ProjectMetadataStore.d.ts +6 -19
- package/dist/services/ProjectMetadataStore.d.ts.map +1 -1
- package/dist/services/ProjectMetadataStore.js +29 -147
- package/dist/services/ProjectMetadataStore.js.map +1 -1
- package/dist/services/ProjectRegistry.d.ts +80 -0
- package/dist/services/ProjectRegistry.d.ts.map +1 -0
- package/dist/services/ProjectRegistry.js +147 -0
- package/dist/services/ProjectRegistry.js.map +1 -0
- package/dist/services/ProjectRuntimeService.d.ts +18 -0
- package/dist/services/ProjectRuntimeService.d.ts.map +1 -0
- package/dist/services/ProjectRuntimeService.js +143 -0
- package/dist/services/ProjectRuntimeService.js.map +1 -0
- package/dist/services/ProjectScreenshotService.d.ts +15 -0
- package/dist/services/ProjectScreenshotService.d.ts.map +1 -0
- package/dist/services/ProjectScreenshotService.js +90 -0
- package/dist/services/ProjectScreenshotService.js.map +1 -0
- package/dist/services/ProjectStorage.d.ts +20 -0
- package/dist/services/ProjectStorage.d.ts.map +1 -0
- package/dist/services/ProjectStorage.js +41 -0
- package/dist/services/ProjectStorage.js.map +1 -0
- package/dist/services/StaticLibraryPreviews.d.ts +21 -0
- package/dist/services/StaticLibraryPreviews.d.ts.map +1 -0
- package/dist/services/StaticLibraryPreviews.js +61 -0
- package/dist/services/StaticLibraryPreviews.js.map +1 -0
- package/dist/services/TelemetryService.d.ts +7 -0
- package/dist/services/TelemetryService.d.ts.map +1 -1
- package/dist/services/TelemetryService.js +7 -1
- package/dist/services/TelemetryService.js.map +1 -1
- package/dist/services/TreeStore.d.ts +8 -3
- package/dist/services/TreeStore.d.ts.map +1 -1
- package/dist/services/TreeStore.js +39 -18
- package/dist/services/TreeStore.js.map +1 -1
- package/dist/services/VariantGenerationService.d.ts +5 -0
- package/dist/services/VariantGenerationService.d.ts.map +1 -1
- package/dist/services/VariantGenerationService.js +13 -1
- package/dist/services/VariantGenerationService.js.map +1 -1
- package/dist/services/VariantHistoryService.d.ts +17 -162
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +186 -45
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/VariantRunService.d.ts +3 -0
- package/dist/services/VariantRunService.d.ts.map +1 -1
- package/dist/services/VariantRunService.js +2 -0
- package/dist/services/VariantRunService.js.map +1 -1
- package/dist/services/VariantsRuntime.d.ts +4 -0
- package/dist/services/VariantsRuntime.d.ts.map +1 -1
- package/dist/services/VariantsRuntime.js +6 -1
- package/dist/services/VariantsRuntime.js.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.d.ts +2 -0
- package/dist/services/createAgentVariantsOrchestrator.d.ts.map +1 -1
- package/dist/services/createAgentVariantsOrchestrator.js +1 -0
- package/dist/services/createAgentVariantsOrchestrator.js.map +1 -1
- package/dist/services/historyRoots.d.ts +14 -0
- package/dist/services/historyRoots.d.ts.map +1 -0
- package/dist/services/historyRoots.js +44 -0
- package/dist/services/historyRoots.js.map +1 -0
- package/dist/services/libraryErrors.d.ts +7 -0
- package/dist/services/libraryErrors.d.ts.map +1 -0
- package/dist/services/libraryErrors.js +14 -0
- package/dist/services/libraryErrors.js.map +1 -0
- package/dist/storage/library/BundleMetadataStore.d.ts +53 -0
- package/dist/storage/library/BundleMetadataStore.d.ts.map +1 -0
- package/dist/storage/library/BundleMetadataStore.js +317 -0
- package/dist/storage/library/BundleMetadataStore.js.map +1 -0
- package/dist/storage/library/CoordinatorRecords.d.ts +25 -0
- package/dist/storage/library/CoordinatorRecords.d.ts.map +1 -0
- package/dist/storage/library/CoordinatorRecords.js +84 -0
- package/dist/storage/library/CoordinatorRecords.js.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts +34 -0
- package/dist/storage/library/ProjectPreviewCache.d.ts.map +1 -0
- package/dist/storage/library/ProjectPreviewCache.js +62 -0
- package/dist/storage/library/ProjectPreviewCache.js.map +1 -0
- package/dist/storage/library/ProjectRecords.d.ts +64 -0
- package/dist/storage/library/ProjectRecords.d.ts.map +1 -0
- package/dist/storage/library/ProjectRecords.js +139 -0
- package/dist/storage/library/ProjectRecords.js.map +1 -0
- package/dist/storage/library/database.d.ts +13 -0
- package/dist/storage/library/database.d.ts.map +1 -0
- package/dist/storage/library/database.js +106 -0
- package/dist/storage/library/database.js.map +1 -0
- package/dist/storage/library/migrations.d.ts +5 -0
- package/dist/storage/library/migrations.d.ts.map +1 -0
- package/dist/storage/library/migrations.js +61 -0
- package/dist/storage/library/migrations.js.map +1 -0
- package/dist/storage/library/schema/bundle.d.ts +734 -0
- package/dist/storage/library/schema/bundle.d.ts.map +1 -0
- package/dist/storage/library/schema/bundle.js +79 -0
- package/dist/storage/library/schema/bundle.js.map +1 -0
- package/dist/storage/library/schema/coordinator.d.ts +72 -0
- package/dist/storage/library/schema/coordinator.d.ts.map +1 -0
- package/dist/storage/library/schema/coordinator.js +12 -0
- package/dist/storage/library/schema/coordinator.js.map +1 -0
- package/dist/storage/library/schema/registry.d.ts +198 -0
- package/dist/storage/library/schema/registry.d.ts.map +1 -0
- package/dist/storage/library/schema/registry.js +32 -0
- package/dist/storage/library/schema/registry.js.map +1 -0
- package/dist/storage/library/sourcePresentation.d.ts +3 -0
- package/dist/storage/library/sourcePresentation.d.ts.map +1 -0
- package/dist/storage/library/sourcePresentation.js +70 -0
- package/dist/storage/library/sourcePresentation.js.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts +41 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.d.ts.map +1 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js +120 -0
- package/dist/storage/project-metadata/ProjectMetadataRecords.js.map +1 -0
- package/dist/storage/project-metadata/database.d.ts +12 -0
- package/dist/storage/project-metadata/database.d.ts.map +1 -0
- package/dist/storage/project-metadata/database.js +79 -0
- package/dist/storage/project-metadata/database.js.map +1 -0
- package/dist/{services/projectMetadataMigrations.d.ts → storage/project-metadata/migrations.d.ts} +1 -1
- package/dist/storage/project-metadata/migrations.d.ts.map +1 -0
- package/dist/{services/projectMetadataMigrations.js → storage/project-metadata/migrations.js} +1 -1
- package/dist/storage/project-metadata/migrations.js.map +1 -0
- package/dist/storage/project-metadata/schema.d.ts +288 -0
- package/dist/storage/project-metadata/schema.d.ts.map +1 -0
- package/dist/storage/project-metadata/schema.js +35 -0
- package/dist/storage/project-metadata/schema.js.map +1 -0
- package/dist/types/account.d.ts +8 -0
- package/dist/types/account.d.ts.map +1 -0
- package/dist/types/account.js +3 -0
- package/dist/types/account.js.map +1 -0
- package/dist/types/project-library.d.ts +28 -0
- package/dist/types/project-library.d.ts.map +1 -0
- package/dist/types/project-library.js +3 -0
- package/dist/types/project-library.js.map +1 -0
- package/dist/types/variant-history.d.ts +173 -0
- package/dist/types/variant-history.d.ts.map +1 -0
- package/dist/types/variant-history.js +3 -0
- package/dist/types/variant-history.js.map +1 -0
- package/dist/utils/windowPlacement.d.ts +20 -0
- package/dist/utils/windowPlacement.d.ts.map +1 -0
- package/dist/utils/windowPlacement.js +20 -0
- package/dist/utils/windowPlacement.js.map +1 -0
- package/package.json +8 -3
- package/scripts/verify-node-version.cjs +9 -6
- package/src/ui/dist/assets/LibraryApp-B2MZyxIp.js +16 -0
- package/src/ui/dist/assets/main-1IMq5Huu.css +1 -0
- package/src/ui/dist/assets/main-BId3Sa7r.js +438 -0
- package/src/ui/dist/favicon-16.png +0 -0
- package/src/ui/dist/favicon-32.png +0 -0
- package/src/ui/dist/favicon.ico +0 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/services/projectMetadataMigrations.d.ts.map +0 -1
- package/dist/services/projectMetadataMigrations.js.map +0 -1
- package/src/ui/dist/assets/main-C1kowo8p.js +0 -438
- 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":"
|
|
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
|
-
|
|
85
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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.
|
|
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
|