rivet-design 0.21.9 → 0.22.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 +5 -1
- package/README.npm.md +5 -1
- package/bin/rivet.js +4 -0
- package/dist/agent-variants/PreviewRuntime.d.ts.map +1 -1
- package/dist/agent-variants/PreviewRuntime.js +3 -5
- package/dist/agent-variants/PreviewRuntime.js.map +1 -1
- package/dist/agent-variants/SessionStore.d.ts +21 -2
- package/dist/agent-variants/SessionStore.d.ts.map +1 -1
- package/dist/agent-variants/SessionStore.js +88 -71
- package/dist/agent-variants/SessionStore.js.map +1 -1
- package/dist/agent-variants/VariantWorkspaceManager.d.ts.map +1 -1
- package/dist/agent-variants/VariantWorkspaceManager.js +8 -14
- package/dist/agent-variants/VariantWorkspaceManager.js.map +1 -1
- package/dist/agent-variants/WorkspaceProvisioning.d.ts.map +1 -1
- package/dist/agent-variants/WorkspaceProvisioning.js +32 -21
- package/dist/agent-variants/WorkspaceProvisioning.js.map +1 -1
- package/dist/agent-variants/WorktreeOrchestrator.d.ts +7 -37
- package/dist/agent-variants/WorktreeOrchestrator.d.ts.map +1 -1
- package/dist/agent-variants/WorktreeOrchestrator.js +148 -103
- package/dist/agent-variants/WorktreeOrchestrator.js.map +1 -1
- package/dist/agent-variants/contextAssets.d.ts.map +1 -1
- package/dist/agent-variants/contextAssets.js +2 -8
- package/dist/agent-variants/contextAssets.js.map +1 -1
- package/dist/agent-variants/contracts.d.ts +103 -63
- package/dist/agent-variants/contracts.d.ts.map +1 -1
- package/dist/agent-variants/contracts.js.map +1 -1
- package/dist/agent-variants/staticPreviewFiles.d.ts +33 -0
- package/dist/agent-variants/staticPreviewFiles.d.ts.map +1 -0
- package/dist/agent-variants/staticPreviewFiles.js +109 -0
- package/dist/agent-variants/staticPreviewFiles.js.map +1 -0
- package/dist/agent-variants/staticPreviewRefinements.d.ts.map +1 -1
- package/dist/agent-variants/staticPreviewRefinements.js +3 -3
- package/dist/agent-variants/staticPreviewRefinements.js.map +1 -1
- package/dist/agent-variants/variantContext.d.ts.map +1 -1
- package/dist/agent-variants/variantContext.js +2 -8
- package/dist/agent-variants/variantContext.js.map +1 -1
- package/dist/agent-variants/variantWorkspaceFiles.d.ts +0 -1
- package/dist/agent-variants/variantWorkspaceFiles.d.ts.map +1 -1
- package/dist/agent-variants/variantWorkspaceFiles.js +5 -10
- package/dist/agent-variants/variantWorkspaceFiles.js.map +1 -1
- package/dist/agent-variants/workItemBriefing.d.ts.map +1 -1
- package/dist/agent-variants/workItemBriefing.js +4 -0
- package/dist/agent-variants/workItemBriefing.js.map +1 -1
- package/dist/agent-variants/workItemInput.d.ts +5950 -0
- package/dist/agent-variants/workItemInput.d.ts.map +1 -0
- package/dist/agent-variants/workItemInput.js +76 -0
- package/dist/agent-variants/workItemInput.js.map +1 -0
- package/dist/agent-variants/workItemPreviewRoutes.d.ts +23 -0
- package/dist/agent-variants/workItemPreviewRoutes.d.ts.map +1 -0
- package/dist/agent-variants/workItemPreviewRoutes.js +95 -0
- package/dist/agent-variants/workItemPreviewRoutes.js.map +1 -0
- package/dist/cli/handoff.d.ts +5 -0
- package/dist/cli/handoff.d.ts.map +1 -1
- package/dist/cli/handoff.js +13 -10
- package/dist/cli/handoff.js.map +1 -1
- package/dist/config/proxy.d.ts +3 -0
- package/dist/config/proxy.d.ts.map +1 -1
- package/dist/config/proxy.js +7 -5
- package/dist/config/proxy.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +46 -7
- package/dist/index.js.map +1 -1
- package/dist/install/agentSkill.d.ts +16 -0
- package/dist/install/agentSkill.d.ts.map +1 -0
- package/dist/install/agentSkill.js +54 -0
- package/dist/install/agentSkill.js.map +1 -0
- package/dist/install/allowlists.d.ts +3 -1
- package/dist/install/allowlists.d.ts.map +1 -1
- package/dist/install/allowlists.js +89 -27
- package/dist/install/allowlists.js.map +1 -1
- package/dist/install/automaticCliUpdate.d.ts.map +1 -1
- package/dist/install/automaticCliUpdate.js +6 -11
- package/dist/install/automaticCliUpdate.js.map +1 -1
- package/dist/install/channelCli.d.ts.map +1 -1
- package/dist/install/channelCli.js +2 -37
- package/dist/install/channelCli.js.map +1 -1
- package/dist/install/channelManager.d.ts +2 -1
- package/dist/install/channelManager.d.ts.map +1 -1
- package/dist/install/channelManager.js +23 -20
- package/dist/install/channelManager.js.map +1 -1
- package/dist/install/codexSkill.d.ts +1 -8
- package/dist/install/codexSkill.d.ts.map +1 -1
- package/dist/install/codexSkill.js +9 -50
- package/dist/install/codexSkill.js.map +1 -1
- package/dist/install/cursorSkill.d.ts +6 -0
- package/dist/install/cursorSkill.d.ts.map +1 -0
- package/dist/install/cursorSkill.js +36 -0
- package/dist/install/cursorSkill.js.map +1 -0
- package/dist/install/globalBootstrap.d.ts +3 -2
- package/dist/install/globalBootstrap.d.ts.map +1 -1
- package/dist/install/globalBootstrap.js +9 -41
- package/dist/install/globalBootstrap.js.map +1 -1
- package/dist/install/harnesses.d.ts +27 -0
- package/dist/install/harnesses.d.ts.map +1 -1
- package/dist/install/harnesses.js +174 -76
- package/dist/install/harnesses.js.map +1 -1
- package/dist/library/importFiles.d.ts.map +1 -1
- package/dist/library/importFiles.js +3 -3
- package/dist/library/importFiles.js.map +1 -1
- package/dist/prototype-host.js +2 -1
- package/dist/prototype-host.js.map +1 -1
- package/dist/proxy-middleware/proxy-config.d.ts +10 -0
- package/dist/proxy-middleware/proxy-config.d.ts.map +1 -1
- package/dist/proxy-middleware/proxy-config.js +20 -29
- package/dist/proxy-middleware/proxy-config.js.map +1 -1
- package/dist/routes/agentVariants.d.ts +1 -5
- package/dist/routes/agentVariants.d.ts.map +1 -1
- package/dist/routes/agentVariants.js +42 -85
- package/dist/routes/agentVariants.js.map +1 -1
- package/dist/routes/library/staticPreview.d.ts.map +1 -1
- package/dist/routes/library/staticPreview.js +9 -7
- package/dist/routes/library/staticPreview.js.map +1 -1
- package/dist/routes/prototypeHost.d.ts.map +1 -1
- package/dist/routes/prototypeHost.js +3 -3
- package/dist/routes/prototypeHost.js.map +1 -1
- package/dist/routes/staticPreviewPolicy.d.ts +13 -0
- package/dist/routes/staticPreviewPolicy.d.ts.map +1 -0
- package/dist/routes/staticPreviewPolicy.js +61 -0
- package/dist/routes/staticPreviewPolicy.js.map +1 -0
- package/dist/routes/variantRequestSchema.d.ts +4 -4
- package/dist/services/AuthService.js +3 -3
- package/dist/services/AuthService.js.map +1 -1
- package/dist/services/BundleStore.d.ts.map +1 -1
- package/dist/services/BundleStore.js +4 -8
- package/dist/services/BundleStore.js.map +1 -1
- package/dist/services/DependencyPreparationService.d.ts.map +1 -1
- package/dist/services/DependencyPreparationService.js +4 -3
- package/dist/services/DependencyPreparationService.js.map +1 -1
- package/dist/services/OperatingSystemServices.d.ts +5 -0
- package/dist/services/OperatingSystemServices.d.ts.map +1 -1
- package/dist/services/OperatingSystemServices.js +9 -3
- package/dist/services/OperatingSystemServices.js.map +1 -1
- package/dist/services/ProjectImport.d.ts.map +1 -1
- package/dist/services/ProjectImport.js +2 -1
- package/dist/services/ProjectImport.js.map +1 -1
- package/dist/services/ProjectPackageManager.d.ts +0 -1
- package/dist/services/ProjectPackageManager.d.ts.map +1 -1
- package/dist/services/ProjectPackageManager.js +5 -12
- package/dist/services/ProjectPackageManager.js.map +1 -1
- package/dist/services/PrototypeBuildService.d.ts.map +1 -1
- package/dist/services/PrototypeBuildService.js +10 -6
- package/dist/services/PrototypeBuildService.js.map +1 -1
- package/dist/services/VariantHistoryService.d.ts +3 -0
- package/dist/services/VariantHistoryService.d.ts.map +1 -1
- package/dist/services/VariantHistoryService.js +36 -12
- package/dist/services/VariantHistoryService.js.map +1 -1
- package/dist/services/WorktreeManager.d.ts.map +1 -1
- package/dist/services/WorktreeManager.js +4 -4
- package/dist/services/WorktreeManager.js.map +1 -1
- package/dist/services/packageManagerProcess.d.ts +20 -0
- package/dist/services/packageManagerProcess.d.ts.map +1 -0
- package/dist/services/packageManagerProcess.js +55 -0
- package/dist/services/packageManagerProcess.js.map +1 -0
- package/dist/services/referenceImages.d.ts.map +1 -1
- package/dist/services/referenceImages.js +4 -4
- package/dist/services/referenceImages.js.map +1 -1
- package/dist/services/staticProjectTarget.d.ts.map +1 -1
- package/dist/services/staticProjectTarget.js +3 -5
- package/dist/services/staticProjectTarget.js.map +1 -1
- package/dist/storage/library/ProjectPreviewCache.d.ts +2 -2
- package/dist/types/preview-routes.d.ts +6 -0
- package/dist/types/preview-routes.d.ts.map +1 -0
- package/dist/types/preview-routes.js +35 -0
- package/dist/types/preview-routes.js.map +1 -0
- package/dist/types/variant-history.d.ts +6 -0
- package/dist/types/variant-history.d.ts.map +1 -1
- package/dist/utils/pathContainment.d.ts +15 -0
- package/dist/utils/pathContainment.d.ts.map +1 -0
- package/dist/utils/pathContainment.js +46 -0
- package/dist/utils/pathContainment.js.map +1 -0
- package/dist/utils/skillWriter.d.ts +5 -2
- package/dist/utils/skillWriter.d.ts.map +1 -1
- package/dist/utils/skillWriter.js +93 -34
- package/dist/utils/skillWriter.js.map +1 -1
- package/dist/utils/staticPreviewPage.d.ts +11 -0
- package/dist/utils/staticPreviewPage.d.ts.map +1 -0
- package/dist/utils/staticPreviewPage.js +40 -0
- package/dist/utils/staticPreviewPage.js.map +1 -0
- package/package.json +6 -2
- package/src/ui/dist/assets/{LibraryEntry-BaphzdNv.js → LibraryEntry-CjxmVfhv.js} +8 -8
- package/src/ui/dist/assets/main-CdSzrhWD.js +435 -0
- package/src/ui/dist/assets/main-DVb3ws41.css +1 -0
- package/src/ui/dist/index.html +2 -2
- package/dist/agent-variants/elementRefToTarget.d.ts +0 -4
- package/dist/agent-variants/elementRefToTarget.d.ts.map +0 -1
- package/dist/agent-variants/elementRefToTarget.js +0 -30
- package/dist/agent-variants/elementRefToTarget.js.map +0 -1
- package/dist/prompts/commentVariationPromptConfig.d.ts +0 -7
- package/dist/prompts/commentVariationPromptConfig.d.ts.map +0 -1
- package/dist/prompts/commentVariationPromptConfig.js +0 -12
- package/dist/prompts/commentVariationPromptConfig.js.map +0 -1
- package/dist/prompts/commentVariationPromptSnapshot.d.ts +0 -3
- package/dist/prompts/commentVariationPromptSnapshot.d.ts.map +0 -1
- package/dist/prompts/commentVariationPromptSnapshot.js +0 -31
- package/dist/prompts/commentVariationPromptSnapshot.js.map +0 -1
- package/dist/prompts/commentVariationPrompts.d.ts +0 -7
- package/dist/prompts/commentVariationPrompts.d.ts.map +0 -1
- package/dist/prompts/commentVariationPrompts.js +0 -54
- package/dist/prompts/commentVariationPrompts.js.map +0 -1
- package/dist/services/adapters/TailwindTokenAdapter.d.ts +0 -17
- package/dist/services/adapters/TailwindTokenAdapter.d.ts.map +0 -1
- package/dist/services/adapters/TailwindTokenAdapter.js +0 -284
- package/dist/services/adapters/TailwindTokenAdapter.js.map +0 -1
- package/dist/services/extractors/CSSVariableExtractor.d.ts +0 -10
- package/dist/services/extractors/CSSVariableExtractor.d.ts.map +0 -1
- package/dist/services/extractors/CSSVariableExtractor.js +0 -110
- package/dist/services/extractors/CSSVariableExtractor.js.map +0 -1
- package/dist/services/staticStarter.d.ts +0 -3
- package/dist/services/staticStarter.d.ts.map +0 -1
- package/dist/services/staticStarter.js +0 -129
- package/dist/services/staticStarter.js.map +0 -1
- package/dist/utils/elementFileHintSignals.d.ts +0 -3
- package/dist/utils/elementFileHintSignals.d.ts.map +0 -1
- package/dist/utils/elementFileHintSignals.js +0 -35
- package/dist/utils/elementFileHintSignals.js.map +0 -1
- package/dist/utils/formatElementTargetingContext.d.ts +0 -28
- package/dist/utils/formatElementTargetingContext.d.ts.map +0 -1
- package/dist/utils/formatElementTargetingContext.js +0 -82
- package/dist/utils/formatElementTargetingContext.js.map +0 -1
- package/dist/utils/variantPreviewPort.d.ts +0 -15
- package/dist/utils/variantPreviewPort.d.ts.map +0 -1
- package/dist/utils/variantPreviewPort.js +0 -25
- package/dist/utils/variantPreviewPort.js.map +0 -1
- package/src/ui/dist/assets/main-CVCXVenP.js +0 -435
- package/src/ui/dist/assets/main-vcYlLdli.css +0 -1
|
@@ -5,11 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.AgentVariantsOrchestrator = exports.buildStaticPreviewDocument = void 0;
|
|
7
7
|
const workItemContextFiles_1 = require("./workItemContextFiles");
|
|
8
|
+
const staticPreviewFiles_1 = require("./staticPreviewFiles");
|
|
9
|
+
const workItemPreviewRoutes_1 = require("./workItemPreviewRoutes");
|
|
8
10
|
const staticPreviewRefinements_1 = require("./staticPreviewRefinements");
|
|
9
11
|
const crypto_1 = require("crypto");
|
|
10
12
|
const events_1 = require("events");
|
|
11
13
|
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const os_1 = __importDefault(require("os"));
|
|
13
14
|
const path_1 = __importDefault(require("path"));
|
|
14
15
|
const DependencyPreparationService_1 = require("../services/DependencyPreparationService");
|
|
15
16
|
const simple_git_1 = require("simple-git");
|
|
@@ -33,6 +34,7 @@ const variantsTelemetry_1 = require("./variantsTelemetry");
|
|
|
33
34
|
const variantWorkspaceFiles_1 = require("./variantWorkspaceFiles");
|
|
34
35
|
const errnoCode_1 = require("../utils/errnoCode");
|
|
35
36
|
const errorMessage_1 = require("../utils/errorMessage");
|
|
37
|
+
const pathContainment_1 = require("../utils/pathContainment");
|
|
36
38
|
var variantWorkspaceFiles_2 = require("./variantWorkspaceFiles");
|
|
37
39
|
Object.defineProperty(exports, "buildStaticPreviewDocument", { enumerable: true, get: function () { return variantWorkspaceFiles_2.buildStaticPreviewDocument; } });
|
|
38
40
|
const log = (0, logger_1.createLogger)('AgentVariantsOrchestrator');
|
|
@@ -184,8 +186,7 @@ const buildDiffCaptureFailureQa = (detail, message) => ({
|
|
|
184
186
|
summary: DIFF_CAPTURE_FAILURE_SUMMARY,
|
|
185
187
|
});
|
|
186
188
|
const isDesignCreationCodeGenInput = (input, prompt) => {
|
|
187
|
-
const
|
|
188
|
-
const text = [prompt, codeGenInput?.briefLabel, codeGenInput?.briefBody]
|
|
189
|
+
const text = [prompt, input?.briefLabel, input?.briefBody]
|
|
189
190
|
.filter((value) => typeof value === 'string')
|
|
190
191
|
.join('\n');
|
|
191
192
|
if (NON_VISUAL_CHANGE_RE.test(text))
|
|
@@ -410,6 +411,7 @@ class AgentVariantsOrchestrator {
|
|
|
410
411
|
this.emitChange();
|
|
411
412
|
}
|
|
412
413
|
getHostWork(sessionId) {
|
|
414
|
+
const projectContext = this.store.getProjectContext(sessionId);
|
|
413
415
|
return this.store.getHostWork(sessionId).map((item) => {
|
|
414
416
|
const kind = item.kind;
|
|
415
417
|
if (!isImplementationWorkItemKind(kind)) {
|
|
@@ -419,7 +421,11 @@ class AgentVariantsOrchestrator {
|
|
|
419
421
|
};
|
|
420
422
|
return planningItem;
|
|
421
423
|
}
|
|
422
|
-
const input = (
|
|
424
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
425
|
+
sessionId,
|
|
426
|
+
workItemId: item.workId,
|
|
427
|
+
kinds: [kind],
|
|
428
|
+
});
|
|
423
429
|
const workspace = this.workspaceInventory.requireAssignedWorkspace(sessionId, item.workId, kind);
|
|
424
430
|
const contextAssets = this.workspaceInventory.getContextAssets(sessionId, item.workId);
|
|
425
431
|
const mode = input.sourceVariantId
|
|
@@ -430,6 +436,7 @@ class AgentVariantsOrchestrator {
|
|
|
430
436
|
(mode === 'refine' ? input.briefBody : undefined) ??
|
|
431
437
|
sourceLabel;
|
|
432
438
|
const implementationItem = {
|
|
439
|
+
...(input.previewRoutes ? { previewRoutes: input.previewRoutes } : {}),
|
|
433
440
|
workId: item.workId,
|
|
434
441
|
guidance: input.guidance ?? [],
|
|
435
442
|
variantId: item.variantId,
|
|
@@ -466,6 +473,11 @@ class AgentVariantsOrchestrator {
|
|
|
466
473
|
? { kind: 'worktree_diff' }
|
|
467
474
|
: { kind: 'static_artifact' },
|
|
468
475
|
};
|
|
476
|
+
if (kind === 'code_gen' && projectContext.kind === 'existing')
|
|
477
|
+
implementationItem.previewRoutesPath = (0, workItemPreviewRoutes_1.prepareWorkItemPreviewRoutes)({
|
|
478
|
+
...item,
|
|
479
|
+
sessionId,
|
|
480
|
+
});
|
|
469
481
|
return implementationItem;
|
|
470
482
|
});
|
|
471
483
|
}
|
|
@@ -632,7 +644,7 @@ class AgentVariantsOrchestrator {
|
|
|
632
644
|
return 'completed';
|
|
633
645
|
}
|
|
634
646
|
refinementTelemetryForWorkItem(args) {
|
|
635
|
-
const input = this.store.
|
|
647
|
+
const input = this.store.getVariantWorkItemInput(args.sessionId, args.workItemId);
|
|
636
648
|
const targetVariantId = input?.variantId ?? input?.sourceVariantId;
|
|
637
649
|
if (!targetVariantId)
|
|
638
650
|
return null;
|
|
@@ -854,13 +866,18 @@ class AgentVariantsOrchestrator {
|
|
|
854
866
|
});
|
|
855
867
|
}
|
|
856
868
|
async adoptPastVariant(args) {
|
|
857
|
-
const { assetBase, hasAssets } = await
|
|
869
|
+
const { assetBase, entryPath, hasAssets } = await (0, staticPreviewFiles_1.resolveStaticPreviewFiles)({
|
|
870
|
+
filesDir: args.filesDir,
|
|
871
|
+
entryPath: args.entryPath,
|
|
872
|
+
isWebsite: Boolean(args.previewRoutes?.length),
|
|
873
|
+
});
|
|
858
874
|
const append = this.store.appendAdoptedStaticVariant({
|
|
859
875
|
sessionId: args.sessionId,
|
|
860
876
|
source: args.source,
|
|
861
877
|
label: args.label,
|
|
862
878
|
description: args.description,
|
|
863
879
|
references: args.references,
|
|
880
|
+
previewRoutes: args.previewRoutes,
|
|
864
881
|
runLabel: args.runLabel,
|
|
865
882
|
});
|
|
866
883
|
this.telemetry.trackAgentVariantsRequestStarted?.({
|
|
@@ -875,7 +892,7 @@ class AgentVariantsOrchestrator {
|
|
|
875
892
|
this.workspaceInventory.setStaticPreview(args.sessionId, {
|
|
876
893
|
workItemId: append.workItemId,
|
|
877
894
|
briefId: append.briefId,
|
|
878
|
-
entryPath
|
|
895
|
+
entryPath,
|
|
879
896
|
assetBase,
|
|
880
897
|
hasAssets,
|
|
881
898
|
});
|
|
@@ -909,6 +926,7 @@ class AgentVariantsOrchestrator {
|
|
|
909
926
|
label: args.label,
|
|
910
927
|
description: args.description,
|
|
911
928
|
references: args.references,
|
|
929
|
+
previewRoutes: args.previewRoutes,
|
|
912
930
|
runLabel: args.runLabel,
|
|
913
931
|
});
|
|
914
932
|
return {
|
|
@@ -918,7 +936,11 @@ class AgentVariantsOrchestrator {
|
|
|
918
936
|
bootstrapped: false,
|
|
919
937
|
};
|
|
920
938
|
}
|
|
921
|
-
const { assetBase, hasAssets } = await
|
|
939
|
+
const { assetBase, entryPath, hasAssets } = await (0, staticPreviewFiles_1.resolveStaticPreviewFiles)({
|
|
940
|
+
filesDir: args.filesDir,
|
|
941
|
+
entryPath: args.entryPath,
|
|
942
|
+
isWebsite: Boolean(args.previewRoutes?.length),
|
|
943
|
+
});
|
|
922
944
|
void this.previewRuntime.stopLingeringCommitted().catch((err) => {
|
|
923
945
|
log.warn('Stopping lingering committed dev servers failed', err);
|
|
924
946
|
});
|
|
@@ -928,6 +950,7 @@ class AgentVariantsOrchestrator {
|
|
|
928
950
|
label: args.label,
|
|
929
951
|
description: args.description,
|
|
930
952
|
references: args.references,
|
|
953
|
+
previewRoutes: args.previewRoutes,
|
|
931
954
|
runLabel: args.runLabel,
|
|
932
955
|
projectContext: args.projectContext,
|
|
933
956
|
});
|
|
@@ -936,7 +959,7 @@ class AgentVariantsOrchestrator {
|
|
|
936
959
|
this.workspaceInventory.setStaticPreview(created.sessionId, {
|
|
937
960
|
workItemId: created.workItemId,
|
|
938
961
|
briefId: created.briefId,
|
|
939
|
-
entryPath
|
|
962
|
+
entryPath,
|
|
940
963
|
assetBase,
|
|
941
964
|
hasAssets,
|
|
942
965
|
});
|
|
@@ -959,30 +982,6 @@ class AgentVariantsOrchestrator {
|
|
|
959
982
|
const stage = this.store.getStage(sessionId);
|
|
960
983
|
return stage === 'failed' || stage === 'cancelled' ? null : sessionId;
|
|
961
984
|
}
|
|
962
|
-
async resolveAdoptedStaticPreviewFiles(filesDir, entryPath) {
|
|
963
|
-
const entryFile = path_1.default.join(filesDir, entryPath);
|
|
964
|
-
try {
|
|
965
|
-
await fs_1.default.promises.access(entryFile, fs_1.default.constants.R_OK);
|
|
966
|
-
}
|
|
967
|
-
catch {
|
|
968
|
-
throw new errors_1.AgentVariantsError('RUNTIME_VALIDATION_FAILED', `Cannot adopt past variant: no readable ${entryPath} under ${filesDir}`);
|
|
969
|
-
}
|
|
970
|
-
let assetBase;
|
|
971
|
-
try {
|
|
972
|
-
assetBase = fs_1.default.realpathSync(filesDir);
|
|
973
|
-
}
|
|
974
|
-
catch {
|
|
975
|
-
assetBase = filesDir;
|
|
976
|
-
}
|
|
977
|
-
let hasAssets = false;
|
|
978
|
-
try {
|
|
979
|
-
hasAssets = fs_1.default.readdirSync(assetBase).some((name) => name !== entryPath);
|
|
980
|
-
}
|
|
981
|
-
catch {
|
|
982
|
-
hasAssets = false;
|
|
983
|
-
}
|
|
984
|
-
return { assetBase, hasAssets };
|
|
985
|
-
}
|
|
986
985
|
isStaticPreviewVariant(sessionId, workItemId) {
|
|
987
986
|
try {
|
|
988
987
|
return (this.store.getWorkItemKind(sessionId, workItemId) === 'static_preview');
|
|
@@ -995,7 +994,7 @@ class AgentVariantsOrchestrator {
|
|
|
995
994
|
if (!sourceVariantId)
|
|
996
995
|
return undefined;
|
|
997
996
|
try {
|
|
998
|
-
const sourceInput = this.store.
|
|
997
|
+
const sourceInput = this.store.getVariantWorkItemInput(sessionId, sourceVariantId);
|
|
999
998
|
return (sourceInput?.adoptedFrom ?? { sessionId, variantId: sourceVariantId });
|
|
1000
999
|
}
|
|
1001
1000
|
catch {
|
|
@@ -1067,8 +1066,8 @@ class AgentVariantsOrchestrator {
|
|
|
1067
1066
|
getStage(sessionId) {
|
|
1068
1067
|
return this.store.getStage(sessionId);
|
|
1069
1068
|
}
|
|
1070
|
-
|
|
1071
|
-
return this.store.
|
|
1069
|
+
getVariantWorkItemInput(sessionId, workItemId) {
|
|
1070
|
+
return this.store.getVariantWorkItemInput(sessionId, workItemId);
|
|
1072
1071
|
}
|
|
1073
1072
|
getWorkItemStatus(sessionId, workItemId) {
|
|
1074
1073
|
return this.store.getWorkItemStatus(sessionId, workItemId);
|
|
@@ -1245,11 +1244,15 @@ class AgentVariantsOrchestrator {
|
|
|
1245
1244
|
const record = this.workspaceInventory.getStaticPreview(sessionId, workItemId);
|
|
1246
1245
|
if (!record?.assetBase)
|
|
1247
1246
|
return undefined;
|
|
1248
|
-
|
|
1247
|
+
const requested = requestedPath ?? record.entryPath;
|
|
1248
|
+
if (!requested)
|
|
1249
1249
|
return undefined;
|
|
1250
|
-
|
|
1250
|
+
const assetPath = requested.endsWith('/')
|
|
1251
|
+
? requested + 'index.html'
|
|
1252
|
+
: requested;
|
|
1253
|
+
return ((0, variantWorkspaceFiles_1.resolveAssetWithinBase)(record.assetBase, assetPath) ??
|
|
1251
1254
|
(record.assetFallbackBase
|
|
1252
|
-
? (0, variantWorkspaceFiles_1.resolveAssetWithinBase)(record.assetFallbackBase,
|
|
1255
|
+
? (0, variantWorkspaceFiles_1.resolveAssetWithinBase)(record.assetFallbackBase, assetPath)
|
|
1253
1256
|
: undefined));
|
|
1254
1257
|
}
|
|
1255
1258
|
getStaticPreviewByBriefId(sessionId, briefId) {
|
|
@@ -1425,6 +1428,12 @@ class AgentVariantsOrchestrator {
|
|
|
1425
1428
|
if (args.requestId) {
|
|
1426
1429
|
this.store.assignVariantRequestId(sessionId, variantIds, args.requestId);
|
|
1427
1430
|
}
|
|
1431
|
+
this.store.assignVariantPreviewRoutes({
|
|
1432
|
+
sessionId,
|
|
1433
|
+
workItemIds: variantIds,
|
|
1434
|
+
previewRoutes: args.previewRoutes,
|
|
1435
|
+
sourceVariantId: args.sourceVariantId,
|
|
1436
|
+
});
|
|
1428
1437
|
if (args.sourceVariantId) {
|
|
1429
1438
|
this.telemetry.trackAgentVariantsRefinementRequested?.({
|
|
1430
1439
|
sessionId,
|
|
@@ -1561,7 +1570,7 @@ class AgentVariantsOrchestrator {
|
|
|
1561
1570
|
if (telemetry) {
|
|
1562
1571
|
this.telemetry.trackAgentVariantsRefinementFailed?.(telemetry);
|
|
1563
1572
|
}
|
|
1564
|
-
throw new errors_1.AgentVariantsError('SCHEMA_VALIDATION_FAILED', `${workItemKind} output.html must be a string and non-empty when explicit output is provided. Host workers should write the assigned
|
|
1573
|
+
throw new errors_1.AgentVariantsError('SCHEMA_VALIDATION_FAILED', `${workItemKind} output.html must be a string and non-empty when explicit output is provided. Host workers should write the assigned entry file instead.`);
|
|
1565
1574
|
}
|
|
1566
1575
|
const qaStartedAt = Date.now();
|
|
1567
1576
|
const qaEval = workItemKind === 'refine_variant'
|
|
@@ -1572,6 +1581,16 @@ class AgentVariantsOrchestrator {
|
|
|
1572
1581
|
return this.handleQaRegenRetry(resolvedArgs, qaEval.qa);
|
|
1573
1582
|
}
|
|
1574
1583
|
let effectiveArgs = qaEval?.decision === 'fail_terminal' ? qaEval.overrideArgs : resolvedArgs;
|
|
1584
|
+
if (effectiveArgs.status === 'succeeded' && workItemKind === 'code_gen') {
|
|
1585
|
+
effectiveArgs = {
|
|
1586
|
+
...effectiveArgs,
|
|
1587
|
+
...(await (0, workItemPreviewRoutes_1.recordWorkItemPreviewRoutes)({
|
|
1588
|
+
store: this.store,
|
|
1589
|
+
...args,
|
|
1590
|
+
workId: args.workItemId,
|
|
1591
|
+
})),
|
|
1592
|
+
};
|
|
1593
|
+
}
|
|
1575
1594
|
if (workItemKind === 'refine_variant' &&
|
|
1576
1595
|
effectiveArgs.status === 'succeeded') {
|
|
1577
1596
|
try {
|
|
@@ -1949,7 +1968,11 @@ class AgentVariantsOrchestrator {
|
|
|
1949
1968
|
'Variant is not committable');
|
|
1950
1969
|
}
|
|
1951
1970
|
await this.settleHistoryPersists();
|
|
1952
|
-
const input = this.store.
|
|
1971
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
1972
|
+
sessionId: args.sessionId,
|
|
1973
|
+
workItemId: args.variantId,
|
|
1974
|
+
kinds: ['code_gen', 'static_preview'],
|
|
1975
|
+
});
|
|
1953
1976
|
const projectContext = this.store.getProjectContext(args.sessionId);
|
|
1954
1977
|
if (projectContext.kind === 'fresh') {
|
|
1955
1978
|
await this.persistCompletedFreshVariantsForCommit(args.sessionId);
|
|
@@ -1981,7 +2004,8 @@ class AgentVariantsOrchestrator {
|
|
|
1981
2004
|
if (!anyAssetBaseIsDestination) {
|
|
1982
2005
|
const allowed = new Set();
|
|
1983
2006
|
for (const sp of this.workspaceInventory.getStaticPreviews(args.sessionId)) {
|
|
1984
|
-
if (sp.assetBase &&
|
|
2007
|
+
if (sp.assetBase &&
|
|
2008
|
+
(0, pathContainment_1.isPathStrictlyInsideRoot)(compareBase, sp.assetBase)) {
|
|
1985
2009
|
allowed.add(path_1.default.basename(sp.assetBase));
|
|
1986
2010
|
}
|
|
1987
2011
|
}
|
|
@@ -2077,7 +2101,7 @@ class AgentVariantsOrchestrator {
|
|
|
2077
2101
|
}
|
|
2078
2102
|
const chosenAssetBase = staticPreview?.assetBase;
|
|
2079
2103
|
if (chosenAssetBase &&
|
|
2080
|
-
(0,
|
|
2104
|
+
(0, pathContainment_1.isPathStrictlyInsideRoot)(flattenBase, chosenAssetBase)) {
|
|
2081
2105
|
for (const entry of fs_1.default.readdirSync(chosenAssetBase)) {
|
|
2082
2106
|
const src = path_1.default.join(chosenAssetBase, entry);
|
|
2083
2107
|
const dst = path_1.default.join(flattenBase, entry);
|
|
@@ -2103,7 +2127,7 @@ class AgentVariantsOrchestrator {
|
|
|
2103
2127
|
if (other.workItemId === args.variantId)
|
|
2104
2128
|
continue;
|
|
2105
2129
|
if (other.assetBase &&
|
|
2106
|
-
(0,
|
|
2130
|
+
(0, pathContainment_1.isPathStrictlyInsideRoot)(flattenBase, other.assetBase)) {
|
|
2107
2131
|
fs_1.default.rmSync(other.assetBase, { recursive: true, force: true });
|
|
2108
2132
|
}
|
|
2109
2133
|
}
|
|
@@ -2296,7 +2320,11 @@ class AgentVariantsOrchestrator {
|
|
|
2296
2320
|
return { decision: 'pass', qa: passedBase };
|
|
2297
2321
|
}
|
|
2298
2322
|
async evaluateExistingCodeGenQa(args) {
|
|
2299
|
-
const input = this.store.
|
|
2323
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
2324
|
+
sessionId: args.sessionId,
|
|
2325
|
+
workItemId: args.workItemId,
|
|
2326
|
+
kinds: ['code_gen'],
|
|
2327
|
+
});
|
|
2300
2328
|
if (!isDesignCreationCodeGenInput(input, this.store.getPrompt(args.sessionId))) {
|
|
2301
2329
|
return null;
|
|
2302
2330
|
}
|
|
@@ -2426,8 +2454,8 @@ class AgentVariantsOrchestrator {
|
|
|
2426
2454
|
if (resources && !record) {
|
|
2427
2455
|
const staticPreview = (0, variantWorkspaceFiles_1.parseStaticPreviewOutput)((0, variantWorkspaceFiles_1.normalizeOutput)(args.output));
|
|
2428
2456
|
if (staticPreview) {
|
|
2429
|
-
const input = this.store.
|
|
2430
|
-
if (input
|
|
2457
|
+
const input = this.store.getVariantWorkItemInput(sessionId, workItemId);
|
|
2458
|
+
if (input?.briefId) {
|
|
2431
2459
|
const projectContext = this.store.getProjectContext(sessionId);
|
|
2432
2460
|
const previewStartedAt = Date.now();
|
|
2433
2461
|
(0, variantsTelemetry_1.trackPreviewStarted)(this.telemetry, {
|
|
@@ -2465,21 +2493,27 @@ class AgentVariantsOrchestrator {
|
|
|
2465
2493
|
});
|
|
2466
2494
|
return;
|
|
2467
2495
|
}
|
|
2496
|
+
let entryPath = 'index.html';
|
|
2468
2497
|
try {
|
|
2469
2498
|
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
2470
2499
|
try {
|
|
2471
2500
|
dir = fs_1.default.realpathSync(dir);
|
|
2472
2501
|
}
|
|
2473
2502
|
catch { }
|
|
2474
|
-
|
|
2503
|
+
entryPath = (0, staticPreviewFiles_1.writeStaticPreviewPage)({
|
|
2504
|
+
assetBase: dir,
|
|
2505
|
+
html: staticPreview.html,
|
|
2506
|
+
previewRoutes: input.previewRoutes,
|
|
2507
|
+
source: this.workspaceInventory.getStaticPreview(sessionId, input.sourceVariantId ?? workItemId),
|
|
2508
|
+
});
|
|
2475
2509
|
}
|
|
2476
2510
|
catch (err) {
|
|
2477
|
-
log.warn(`failed to materialize static preview
|
|
2511
|
+
log.warn(`failed to materialize the static preview page for ${workItemId}`, err);
|
|
2478
2512
|
}
|
|
2479
2513
|
const record = {
|
|
2480
2514
|
workItemId,
|
|
2481
2515
|
briefId: input.briefId,
|
|
2482
|
-
entryPath
|
|
2516
|
+
entryPath,
|
|
2483
2517
|
assetBase: dir,
|
|
2484
2518
|
hasAssets: Boolean(resolvedAssetBase || assignedArtifactBase),
|
|
2485
2519
|
};
|
|
@@ -2568,7 +2602,11 @@ class AgentVariantsOrchestrator {
|
|
|
2568
2602
|
if (!resources) {
|
|
2569
2603
|
throw new errors_1.AgentVariantsError('SESSION_NOT_FOUND', `No live resources for session ${args.sessionId}`);
|
|
2570
2604
|
}
|
|
2571
|
-
const input = this.store.
|
|
2605
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
2606
|
+
sessionId: args.sessionId,
|
|
2607
|
+
workItemId: args.workItemId,
|
|
2608
|
+
kinds: ['refine_variant'],
|
|
2609
|
+
});
|
|
2572
2610
|
if (!input.variantId) {
|
|
2573
2611
|
throw new errors_1.AgentVariantsError('MISSING_REQUIRED_INPUT', 'refine_variant work item is missing variantId');
|
|
2574
2612
|
}
|
|
@@ -2576,7 +2614,11 @@ class AgentVariantsOrchestrator {
|
|
|
2576
2614
|
if (!parsed) {
|
|
2577
2615
|
throw new errors_1.AgentVariantsError('SCHEMA_VALIDATION_FAILED', 'refine_variant report_variant_complete requires output.html');
|
|
2578
2616
|
}
|
|
2579
|
-
const targetInput = this.store.
|
|
2617
|
+
const targetInput = this.store.requireVariantWorkItemInput({
|
|
2618
|
+
sessionId: args.sessionId,
|
|
2619
|
+
workItemId: input.variantId,
|
|
2620
|
+
kinds: ['static_preview'],
|
|
2621
|
+
});
|
|
2580
2622
|
if (!targetInput.briefId) {
|
|
2581
2623
|
throw new errors_1.AgentVariantsError('VARIANT_NOT_EDITABLE', 'Target static_preview variant is missing briefId');
|
|
2582
2624
|
}
|
|
@@ -2590,10 +2632,15 @@ class AgentVariantsOrchestrator {
|
|
|
2590
2632
|
? refinementWorkspace.rootPath
|
|
2591
2633
|
: undefined;
|
|
2592
2634
|
const dir = resolvedAssetBase ?? assignedArtifactBase ?? previousRecord?.assetBase;
|
|
2635
|
+
let entryPath = 'index.html';
|
|
2593
2636
|
if (dir) {
|
|
2594
2637
|
try {
|
|
2595
|
-
|
|
2596
|
-
|
|
2638
|
+
entryPath = (0, staticPreviewFiles_1.writeStaticPreviewPage)({
|
|
2639
|
+
assetBase: dir,
|
|
2640
|
+
html: parsed.html,
|
|
2641
|
+
source: previousRecord,
|
|
2642
|
+
previewRoutes: targetInput.previewRoutes,
|
|
2643
|
+
});
|
|
2597
2644
|
}
|
|
2598
2645
|
catch (err) {
|
|
2599
2646
|
throw new errors_1.AgentVariantsError('RUNTIME_VALIDATION_FAILED', `Failed to materialize refined static preview for ${input.variantId}: ${(0, errorMessage_1.errorMessage)(err)}`);
|
|
@@ -2607,7 +2654,7 @@ class AgentVariantsOrchestrator {
|
|
|
2607
2654
|
this.workspaceInventory.setStaticPreview(args.sessionId, {
|
|
2608
2655
|
workItemId: input.variantId,
|
|
2609
2656
|
briefId: targetInput.briefId,
|
|
2610
|
-
entryPath
|
|
2657
|
+
entryPath,
|
|
2611
2658
|
assetBase: dir,
|
|
2612
2659
|
hasAssets: Boolean(resolvedAssetBase) ||
|
|
2613
2660
|
Boolean(assignedArtifactBase) ||
|
|
@@ -2732,7 +2779,11 @@ class AgentVariantsOrchestrator {
|
|
|
2732
2779
|
log.warn(`persistCompletedExistingVariant: static snapshot path failed for ${args.sessionId}/${args.workItemId}`, err);
|
|
2733
2780
|
}
|
|
2734
2781
|
}
|
|
2735
|
-
const input = this.store.
|
|
2782
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
2783
|
+
sessionId: args.sessionId,
|
|
2784
|
+
workItemId: args.workItemId,
|
|
2785
|
+
kinds: ['code_gen'],
|
|
2786
|
+
});
|
|
2736
2787
|
const sessionPrompt = this.store.getPrompt(args.sessionId);
|
|
2737
2788
|
const snapshotDir = record?.worktreePath;
|
|
2738
2789
|
let baseDir;
|
|
@@ -2775,6 +2826,7 @@ class AgentVariantsOrchestrator {
|
|
|
2775
2826
|
brief: input.briefBody,
|
|
2776
2827
|
references: input.references,
|
|
2777
2828
|
referenceContext: input.context,
|
|
2829
|
+
previewRoutes: input.previewRoutes,
|
|
2778
2830
|
referenceContextRoots: [
|
|
2779
2831
|
path_1.default.join(this.variantHistory.store.storage.resolve(env.projectPath)
|
|
2780
2832
|
.dataDirectory, 'variant-context'),
|
|
@@ -2821,8 +2873,8 @@ class AgentVariantsOrchestrator {
|
|
|
2821
2873
|
const resources = this.resources.get(sessionId);
|
|
2822
2874
|
if (!resources)
|
|
2823
2875
|
return 'unavailable';
|
|
2824
|
-
const input = this.store.
|
|
2825
|
-
if (!input
|
|
2876
|
+
const input = this.store.getVariantWorkItemInput(sessionId, workItemId);
|
|
2877
|
+
if (!input?.briefId)
|
|
2826
2878
|
return 'unavailable';
|
|
2827
2879
|
let projectCwd;
|
|
2828
2880
|
try {
|
|
@@ -2860,20 +2912,20 @@ class AgentVariantsOrchestrator {
|
|
|
2860
2912
|
catch {
|
|
2861
2913
|
dir = projectCwd;
|
|
2862
2914
|
}
|
|
2863
|
-
let
|
|
2915
|
+
let siteFallbackBase;
|
|
2864
2916
|
try {
|
|
2865
2917
|
const hostRealRoot = fs_1.default.realpathSync(env.projectPath);
|
|
2866
2918
|
if (hostRealRoot !== dir)
|
|
2867
|
-
|
|
2919
|
+
siteFallbackBase = path_1.default.join(hostRealRoot, path_1.default.dirname(env.entryPath));
|
|
2868
2920
|
}
|
|
2869
2921
|
catch { }
|
|
2870
2922
|
this.workspaceInventory.setStaticPreview(sessionId, {
|
|
2871
2923
|
workItemId,
|
|
2872
2924
|
briefId: input.briefId,
|
|
2873
|
-
entryPath: env.entryPath,
|
|
2874
|
-
assetBase: dir,
|
|
2925
|
+
entryPath: path_1.default.basename(env.entryPath),
|
|
2926
|
+
assetBase: path_1.default.dirname(path_1.default.join(dir, env.entryPath)),
|
|
2875
2927
|
hasAssets: true,
|
|
2876
|
-
...(
|
|
2928
|
+
...(siteFallbackBase ? { assetFallbackBase: siteFallbackBase } : {}),
|
|
2877
2929
|
});
|
|
2878
2930
|
this.previewRuntime.clearFailure(sessionId, workItemId);
|
|
2879
2931
|
log.info(`Variant ${workItemId} served as a static preview (existing/static, no dev server; root ${projectCwd})`);
|
|
@@ -2899,15 +2951,11 @@ class AgentVariantsOrchestrator {
|
|
|
2899
2951
|
const base = await this.prepareArtifactBase(args.sessionId);
|
|
2900
2952
|
const env = await this.resolveEnv(args.sessionId);
|
|
2901
2953
|
const entryPath = env.framework === 'static' ? env.entryPath : 'index.html';
|
|
2902
|
-
const
|
|
2903
|
-
|
|
2904
|
-
|
|
2905
|
-
|
|
2906
|
-
|
|
2907
|
-
if (isEntryMapped) {
|
|
2908
|
-
fs_1.default.mkdirSync(path_1.default.dirname(entryFile), { recursive: true });
|
|
2909
|
-
fs_1.default.copyFileSync(path_1.default.join(args.sourceDir, 'index.html'), entryFile);
|
|
2910
|
-
}
|
|
2954
|
+
const files = (0, staticPreviewFiles_1.prepareStaticPreviewProjectFiles)({
|
|
2955
|
+
sourceDir: args.sourceDir,
|
|
2956
|
+
entryPath,
|
|
2957
|
+
isWebsite: args.isWebsite,
|
|
2958
|
+
});
|
|
2911
2959
|
const store = this.variantHistory.store;
|
|
2912
2960
|
const tree = await store.putTree({
|
|
2913
2961
|
projectPath: args.projectPath,
|
|
@@ -2917,19 +2965,9 @@ class AgentVariantsOrchestrator {
|
|
|
2917
2965
|
});
|
|
2918
2966
|
const gitRoot = (await this.worktrees.getGitRoot?.()) ?? args.projectPath;
|
|
2919
2967
|
const relative = path_1.default.relative(gitRoot, args.projectPath);
|
|
2920
|
-
if (
|
|
2921
|
-
relative.startsWith(`..${path_1.default.sep}`) ||
|
|
2922
|
-
path_1.default.isAbsolute(relative)) {
|
|
2968
|
+
if (!(0, pathContainment_1.isPathWithinRoot)(gitRoot, args.projectPath)) {
|
|
2923
2969
|
throw new errors_1.AgentVariantsError('RUNTIME_VALIDATION_FAILED', 'Artifact project must be inside its Git root.');
|
|
2924
2970
|
}
|
|
2925
|
-
const files = fs_1.default
|
|
2926
|
-
.readdirSync(args.sourceDir, { recursive: true, withFileTypes: true })
|
|
2927
|
-
.filter((entry) => entry.isFile())
|
|
2928
|
-
.map((entry) => path_1.default
|
|
2929
|
-
.relative(args.sourceDir, path_1.default.join(entry.parentPath, entry.name))
|
|
2930
|
-
.split(path_1.default.sep)
|
|
2931
|
-
.join('/'))
|
|
2932
|
-
.filter((file) => !isEntryMapped || file !== 'index.html');
|
|
2933
2971
|
return store.diffFiles({
|
|
2934
2972
|
projectPath: args.projectPath,
|
|
2935
2973
|
fromRef: base.commitSha,
|
|
@@ -2946,31 +2984,36 @@ class AgentVariantsOrchestrator {
|
|
|
2946
2984
|
const contextRoots = projectContext.kind === 'fresh'
|
|
2947
2985
|
? [projectContext.workspacePath, projectContext.workspaceRoot]
|
|
2948
2986
|
: [historyProjectPath];
|
|
2949
|
-
const input = this.store.
|
|
2987
|
+
const input = this.store.requireVariantWorkItemInput({
|
|
2988
|
+
sessionId: args.sessionId,
|
|
2989
|
+
workItemId: args.workItemId,
|
|
2990
|
+
kinds: ['static_preview', 'code_gen'],
|
|
2991
|
+
});
|
|
2950
2992
|
const sessionPrompt = this.store.getPrompt(args.sessionId);
|
|
2951
2993
|
const designArtifact = (0, designContextArtifacts_1.resolveDesignArtifact)(input.designContextEntry);
|
|
2952
2994
|
const worktreeRecord = this.workspaceInventory.getWorktree(args.sessionId, args.workItemId);
|
|
2953
2995
|
const staticPreview = this.workspaceInventory.getStaticPreview(args.sessionId, args.workItemId);
|
|
2954
2996
|
let sourceDir = null;
|
|
2955
2997
|
let tmpStagingDir = null;
|
|
2998
|
+
let staticEntryPath = 'index.html';
|
|
2956
2999
|
if (worktreeRecord && fs_1.default.existsSync(worktreeRecord.worktreePath)) {
|
|
2957
3000
|
sourceDir = worktreeRecord.worktreePath;
|
|
2958
3001
|
}
|
|
2959
3002
|
else if (staticPreview) {
|
|
2960
|
-
|
|
2961
|
-
|
|
2962
|
-
|
|
2963
|
-
|
|
2964
|
-
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
|
|
2968
|
-
|
|
2969
|
-
|
|
2970
|
-
|
|
2971
|
-
|
|
2972
|
-
|
|
2973
|
-
|
|
3003
|
+
const staged = (0, staticPreviewFiles_1.stageStaticPreviewFiles)({
|
|
3004
|
+
preview: staticPreview,
|
|
3005
|
+
workItemId: args.workItemId,
|
|
3006
|
+
environment: projectContext.kind === 'existing'
|
|
3007
|
+
? await this.resolveEnv(args.sessionId)
|
|
3008
|
+
: undefined,
|
|
3009
|
+
isWebsite: Boolean(input.previewRoutes?.length),
|
|
3010
|
+
briefMarkdown: projectContext.kind === 'fresh'
|
|
3011
|
+
? `# ${input.briefLabel}\n\n${input.briefBody}\n`
|
|
3012
|
+
: undefined,
|
|
3013
|
+
});
|
|
3014
|
+
tmpStagingDir = staged.rootPath;
|
|
3015
|
+
sourceDir = staged.rootPath;
|
|
3016
|
+
staticEntryPath = staged.entryPath;
|
|
2974
3017
|
}
|
|
2975
3018
|
if (!sourceDir) {
|
|
2976
3019
|
log.warn(`persistCompletedArtifactVariant: no source for ${args.workItemId} (session ${args.sessionId}); skipping`);
|
|
@@ -2979,7 +3022,7 @@ class AgentVariantsOrchestrator {
|
|
|
2979
3022
|
const changedFilesCount = staticPreview ? 1 : (0, variantWorkspaceFiles_1.countWorktreeFiles)(sourceDir);
|
|
2980
3023
|
const runningPreview = this.previewRuntime.getRunningVariant(args.sessionId, args.workItemId);
|
|
2981
3024
|
const preview = staticPreview
|
|
2982
|
-
? { kind: 'static', entryPath:
|
|
3025
|
+
? { kind: 'static', entryPath: staticEntryPath }
|
|
2983
3026
|
: {
|
|
2984
3027
|
kind: 'dev-server',
|
|
2985
3028
|
command: {
|
|
@@ -2989,7 +3032,7 @@ class AgentVariantsOrchestrator {
|
|
|
2989
3032
|
},
|
|
2990
3033
|
};
|
|
2991
3034
|
const serve = staticPreview
|
|
2992
|
-
? { kind: 'static', entryPath:
|
|
3035
|
+
? { kind: 'static', entryPath: staticEntryPath }
|
|
2993
3036
|
: worktreeRecord && runningPreview
|
|
2994
3037
|
? {
|
|
2995
3038
|
kind: 'dev-server',
|
|
@@ -3019,6 +3062,7 @@ class AgentVariantsOrchestrator {
|
|
|
3019
3062
|
workItemId: args.workItemId,
|
|
3020
3063
|
sourceDir,
|
|
3021
3064
|
projectPath: historyProjectPath,
|
|
3065
|
+
isWebsite: Boolean(input.previewRoutes?.length),
|
|
3022
3066
|
})
|
|
3023
3067
|
: undefined;
|
|
3024
3068
|
await this.variantHistory.persistVariant({
|
|
@@ -3027,9 +3071,10 @@ class AgentVariantsOrchestrator {
|
|
|
3027
3071
|
variantId: args.workItemId,
|
|
3028
3072
|
...(input.requestId ? { requestId: input.requestId } : {}),
|
|
3029
3073
|
label: input.briefLabel,
|
|
3030
|
-
brief: input.briefBody,
|
|
3074
|
+
brief: input.briefBody ?? '',
|
|
3031
3075
|
references: input.references,
|
|
3032
3076
|
referenceContext: input.context,
|
|
3077
|
+
previewRoutes: input.previewRoutes,
|
|
3033
3078
|
referenceContextRoots: contextRoots
|
|
3034
3079
|
.filter((projectPath) => Boolean(projectPath))
|
|
3035
3080
|
.map((projectPath) => path_1.default.join(this.variantHistory.store.storage.resolve(projectPath)
|
|
@@ -3207,8 +3252,8 @@ class AgentVariantsOrchestrator {
|
|
|
3207
3252
|
const manifestEntries = [];
|
|
3208
3253
|
let chosenSlug = '';
|
|
3209
3254
|
for (const variant of variants) {
|
|
3210
|
-
const input = this.store.
|
|
3211
|
-
const label = input
|
|
3255
|
+
const input = this.store.getVariantWorkItemInput(args.sessionId, variant.workItemId);
|
|
3256
|
+
const label = input?.briefLabel ?? variant.label ?? 'variant';
|
|
3212
3257
|
const slug = (0, createProjectArtifacts_1.createProjectVariantSlug)(label);
|
|
3213
3258
|
const briefIdx = briefIndexById.get(variant.briefId) ?? 0;
|
|
3214
3259
|
const numericPrefix = String(briefIdx + 1).padStart(2, '0');
|