opendevbrowser 0.0.20 → 0.0.21

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.
@@ -9736,6 +9736,46 @@ var enrichResearchRecords = (records, timebox, now = /* @__PURE__ */ new Date())
9736
9736
  return records.map((record) => toResearchRecord(record, timebox, now));
9737
9737
  };
9738
9738
 
9739
+ // src/inspiredesign/handoff.ts
9740
+ var INSPIREDESIGN_HANDOFF_FILES = {
9741
+ designMarkdown: "design.md",
9742
+ designContract: "design-contract.json",
9743
+ canvasPlanRequest: "canvas-plan.request.json",
9744
+ designAgentHandoff: "design-agent-handoff.json",
9745
+ generationPlan: "generation-plan.json",
9746
+ implementationPlanMarkdown: "implementation-plan.md",
9747
+ implementationPlan: "implementation-plan.json",
9748
+ evidence: "evidence.json",
9749
+ prototypeGuidance: "prototype-guidance.md"
9750
+ };
9751
+ var INSPIREDESIGN_HANDOFF_SKILLS = {
9752
+ bestPractices: {
9753
+ name: "opendevbrowser-best-practices",
9754
+ topic: "quick start"
9755
+ },
9756
+ designAgent: {
9757
+ name: "opendevbrowser-design-agent",
9758
+ topic: "canvas-contract"
9759
+ }
9760
+ };
9761
+ var formatSkillReference = (skill) => `${skill.name} "${skill.topic}"`;
9762
+ var formatSkillLoadCommand = (skill) => `opendevbrowser_skill_load ${skill.name} "${skill.topic}"`;
9763
+ var INSPIREDESIGN_HANDOFF_COMMANDS = {
9764
+ loadBestPractices: formatSkillLoadCommand(INSPIREDESIGN_HANDOFF_SKILLS.bestPractices),
9765
+ loadDesignAgent: formatSkillLoadCommand(INSPIREDESIGN_HANDOFF_SKILLS.designAgent),
9766
+ continueInCanvas: `opendevbrowser canvas --command canvas.plan.set --params-file ./${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest}`
9767
+ };
9768
+ var INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS = [
9769
+ formatSkillReference(INSPIREDESIGN_HANDOFF_SKILLS.bestPractices),
9770
+ formatSkillReference(INSPIREDESIGN_HANDOFF_SKILLS.designAgent)
9771
+ ];
9772
+ var INSPIREDESIGN_HANDOFF_GUIDANCE = {
9773
+ prepareCanvasPlanRequest: `Fill canvasSessionId, leaseId, and documentId in ${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest} before running ${INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas}.`,
9774
+ deepCaptureRecommendation: "Rerun inspiredesign with captureMode=deep only when you need richer evidence for visual hierarchy, protected references, or capture-specific debugging."
9775
+ };
9776
+ var buildInspiredesignFollowthroughSummary = () => `Continue in OpenDevBrowser Canvas with ${INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest} and ${INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff}, load ${INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS[0]} plus ${INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS[1]} before implementation, and rerun with captureMode=deep only when you need richer evidence.`;
9777
+ var buildInspiredesignNextStep = () => `${INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest} Then run ${INSPIREDESIGN_HANDOFF_COMMANDS.continueInCanvas}, confirm planStatus=accepted, then patch only the governance blocks listed in ${INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff}.`;
9778
+
9739
9779
  // src/providers/renderer.ts
9740
9780
  var toCurrency = (value) => `$${value.toFixed(2)}`;
9741
9781
  var primaryConstraintSummaryFromMeta = (meta) => {
@@ -9941,6 +9981,8 @@ var renderInspiredesign = (args) => {
9941
9981
  brief: args.brief,
9942
9982
  urls: args.urls,
9943
9983
  designContract: args.designContract,
9984
+ canvasPlanRequest: args.canvasPlanRequest,
9985
+ designAgentHandoff: args.designAgentHandoff,
9944
9986
  generationPlan: args.generationPlan,
9945
9987
  implementationPlan: args.implementationPlan,
9946
9988
  designMarkdown: args.designMarkdown,
@@ -9949,22 +9991,44 @@ var renderInspiredesign = (args) => {
9949
9991
  evidence: args.evidence,
9950
9992
  meta: args.meta
9951
9993
  };
9994
+ const suggestedSteps = [
9995
+ {
9996
+ reason: "Load the baseline workflow runbook before implementation.",
9997
+ command: args.designAgentHandoff.commandExamples.loadBestPractices
9998
+ },
9999
+ {
10000
+ reason: "Load the Canvas contract lane before patching.",
10001
+ command: args.designAgentHandoff.commandExamples.loadDesignAgent
10002
+ },
10003
+ {
10004
+ reason: INSPIREDESIGN_HANDOFF_GUIDANCE.prepareCanvasPlanRequest,
10005
+ command: args.designAgentHandoff.commandExamples.continueInCanvas
10006
+ },
10007
+ {
10008
+ reason: args.designAgentHandoff.deepCaptureRecommendation
10009
+ }
10010
+ ];
9952
10011
  const files = [
9953
- { path: "design.md", content: args.designMarkdown },
9954
- { path: "design-contract.json", content: args.designContract },
9955
- { path: "generation-plan.json", content: args.generationPlan },
9956
- { path: "implementation-plan.md", content: args.implementationPlanMarkdown },
9957
- { path: "implementation-plan.json", content: args.implementationPlan },
9958
- { path: "evidence.json", content: args.evidence }
10012
+ { path: INSPIREDESIGN_HANDOFF_FILES.designMarkdown, content: args.designMarkdown },
10013
+ { path: INSPIREDESIGN_HANDOFF_FILES.designContract, content: args.designContract },
10014
+ { path: INSPIREDESIGN_HANDOFF_FILES.canvasPlanRequest, content: args.canvasPlanRequest },
10015
+ { path: INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff, content: args.designAgentHandoff },
10016
+ { path: INSPIREDESIGN_HANDOFF_FILES.generationPlan, content: args.generationPlan },
10017
+ { path: INSPIREDESIGN_HANDOFF_FILES.implementationPlanMarkdown, content: args.implementationPlanMarkdown },
10018
+ { path: INSPIREDESIGN_HANDOFF_FILES.implementationPlan, content: args.implementationPlan },
10019
+ { path: INSPIREDESIGN_HANDOFF_FILES.evidence, content: args.evidence }
9959
10020
  ];
9960
10021
  if (args.prototypeGuidanceMarkdown) {
9961
- files.push({ path: "prototype-guidance.md", content: args.prototypeGuidanceMarkdown });
10022
+ files.push({ path: INSPIREDESIGN_HANDOFF_FILES.prototypeGuidance, content: args.prototypeGuidanceMarkdown });
9962
10023
  }
9963
10024
  if (args.mode === "compact") {
9964
10025
  return {
9965
10026
  response: {
9966
10027
  mode: args.mode,
9967
10028
  summary,
10029
+ followthroughSummary: args.designAgentHandoff.summary,
10030
+ suggestedNextAction: args.designAgentHandoff.nextStep,
10031
+ suggestedSteps,
9968
10032
  meta: args.meta
9969
10033
  },
9970
10034
  files
@@ -9976,11 +10040,16 @@ var renderInspiredesign = (args) => {
9976
10040
  mode: args.mode,
9977
10041
  brief: args.brief,
9978
10042
  urls: args.urls,
10043
+ canvasPlanRequest: args.canvasPlanRequest,
10044
+ designAgentHandoff: args.designAgentHandoff,
9979
10045
  designContract: args.designContract,
9980
10046
  generationPlan: args.generationPlan,
9981
10047
  implementationPlan: args.implementationPlan,
9982
10048
  prototypeGuidanceMarkdown: args.prototypeGuidanceMarkdown,
9983
10049
  evidence: args.evidence,
10050
+ followthroughSummary: args.designAgentHandoff.summary,
10051
+ suggestedNextAction: args.designAgentHandoff.nextStep,
10052
+ suggestedSteps,
9984
10053
  meta: args.meta
9985
10054
  },
9986
10055
  files
@@ -9993,6 +10062,9 @@ var renderInspiredesign = (args) => {
9993
10062
  markdown: args.designMarkdown,
9994
10063
  implementationPlanMarkdown: args.implementationPlanMarkdown,
9995
10064
  prototypeGuidanceMarkdown: args.prototypeGuidanceMarkdown,
10065
+ followthroughSummary: args.designAgentHandoff.summary,
10066
+ suggestedNextAction: args.designAgentHandoff.nextStep,
10067
+ suggestedSteps,
9996
10068
  meta: args.meta
9997
10069
  },
9998
10070
  files
@@ -10003,6 +10075,9 @@ var renderInspiredesign = (args) => {
10003
10075
  response: {
10004
10076
  mode: args.mode,
10005
10077
  context: contextPayload,
10078
+ followthroughSummary: args.designAgentHandoff.summary,
10079
+ suggestedNextAction: args.designAgentHandoff.nextStep,
10080
+ suggestedSteps,
10006
10081
  meta: args.meta
10007
10082
  },
10008
10083
  files
@@ -10011,6 +10086,9 @@ var renderInspiredesign = (args) => {
10011
10086
  return {
10012
10087
  response: {
10013
10088
  mode: "path",
10089
+ followthroughSummary: args.designAgentHandoff.summary,
10090
+ suggestedNextAction: args.designAgentHandoff.nextStep,
10091
+ suggestedSteps,
10014
10092
  meta: args.meta
10015
10093
  },
10016
10094
  files
@@ -10311,7 +10389,8 @@ var design_contract_v1_default = {
10311
10389
 
10312
10390
  // src/providers/inspiredesign-contract.ts
10313
10391
  var BASE_CONTRACT_TEMPLATE = design_contract_v1_default;
10314
- var BASE_GENERATION_PLAN = canvas_generation_plan_design_v1_default.generationPlan;
10392
+ var BASE_PLAN_REQUEST_TEMPLATE = canvas_generation_plan_design_v1_default;
10393
+ var BASE_GENERATION_PLAN = BASE_PLAN_REQUEST_TEMPLATE.generationPlan;
10315
10394
  var PROFILE_MATCHERS = [
10316
10395
  { profile: "auth-focused", keywords: ["auth", "login", "signin", "sign-in", "signup", "sign-up", "onboarding"] },
10317
10396
  { profile: "settings-system", keywords: ["settings", "preferences", "account", "profile", "billing"] },
@@ -10716,6 +10795,59 @@ var buildRuntimeBudgetsBlock = (plan) => ({
10716
10795
  "Avoid heavyweight decorative animation before interaction clarity is established."
10717
10796
  ]
10718
10797
  });
10798
+ var EMITTED_GOVERNANCE_BLOCKS = [
10799
+ "intent",
10800
+ "generationPlan",
10801
+ "designLanguage",
10802
+ "contentModel",
10803
+ "layoutSystem",
10804
+ "typographySystem",
10805
+ "colorSystem",
10806
+ "surfaceSystem",
10807
+ "iconSystem",
10808
+ "motionSystem",
10809
+ "responsiveSystem",
10810
+ "accessibilityPolicy",
10811
+ "libraryPolicy",
10812
+ "runtimeBudgets"
10813
+ ];
10814
+ var buildNavigationModelBlock = (profile) => {
10815
+ const block = cloneTemplate(BASE_CONTRACT_TEMPLATE.navigationModel);
10816
+ return {
10817
+ ...block,
10818
+ primaryRouteModel: `Use a ${PROFILE_CONFIG[profile].navigationModel} route shell so the primary action remains stable through state changes.`
10819
+ };
10820
+ };
10821
+ var buildAsyncModelBlock = () => {
10822
+ return cloneTemplate(BASE_CONTRACT_TEMPLATE.asyncModel);
10823
+ };
10824
+ var buildPerformanceModelBlock = () => {
10825
+ return cloneTemplate(BASE_CONTRACT_TEMPLATE.performanceModel);
10826
+ };
10827
+ var buildCanvasPlanRequest = (brief, generationPlan) => ({
10828
+ ...cloneTemplate(BASE_PLAN_REQUEST_TEMPLATE),
10829
+ requestId: `req_plan_${referenceFingerprint(brief).slice(0, 12)}`,
10830
+ generationPlan
10831
+ });
10832
+ var buildContractScope = () => ({
10833
+ emittedContract: "CanvasDesignGovernance",
10834
+ emittedGovernanceBlocks: [...EMITTED_GOVERNANCE_BLOCKS],
10835
+ omittedTemplateBlocks: ["navigationModel", "asyncModel", "performanceModel"],
10836
+ note: `${INSPIREDESIGN_HANDOFF_FILES.designContract} is the narrowed canvas governance contract. Use ${INSPIREDESIGN_HANDOFF_FILES.designAgentHandoff} for navigation, async, and performance context that informs implementation but does not belong in canvas governance patches.`
10837
+ });
10838
+ var buildFollowthrough = (generationPlan) => ({
10839
+ summary: buildInspiredesignFollowthroughSummary(),
10840
+ nextStep: buildInspiredesignNextStep(),
10841
+ recommendedSkills: [...INSPIREDESIGN_HANDOFF_RECOMMENDED_SKILLS],
10842
+ commandExamples: { ...INSPIREDESIGN_HANDOFF_COMMANDS },
10843
+ deepCaptureRecommendation: INSPIREDESIGN_HANDOFF_GUIDANCE.deepCaptureRecommendation,
10844
+ contractScope: buildContractScope(),
10845
+ implementationContext: {
10846
+ navigationModel: buildNavigationModelBlock(generationPlan.visualDirection.profile),
10847
+ asyncModel: buildAsyncModelBlock(),
10848
+ performanceModel: buildPerformanceModelBlock()
10849
+ }
10850
+ });
10719
10851
  var buildDesignContract = (brief, urls, references, plan) => ({
10720
10852
  intent: buildIntentBlock(brief, urls, references),
10721
10853
  generationPlan: plan,
@@ -11007,6 +11139,8 @@ var renderDeliverablesSummary = (includePrototypeGuidance) => {
11007
11139
  const deliverables = [
11008
11140
  "Structured `designContract` JSON aligned to canvas governance",
11009
11141
  "Valid `generationPlan` JSON aligned to the canvas generation plan contract",
11142
+ "Ready-to-fill `canvasPlanRequest` JSON for `canvas.plan.set`",
11143
+ "Design-agent handoff JSON with contract scope, skill nudges, and richer implementation context",
11010
11144
  "Human-readable `design.md` design specification",
11011
11145
  "Engineering implementation plan in JSON and Markdown"
11012
11146
  ];
@@ -11053,7 +11187,9 @@ var buildInspiredesignPacket = (input) => {
11053
11187
  }));
11054
11188
  const profile = classifyProfile(brief, references);
11055
11189
  const generationPlan = buildGenerationPlan(brief, profile, references);
11190
+ const canvasPlanRequest = buildCanvasPlanRequest(brief, generationPlan);
11056
11191
  const designContract = buildDesignContract(brief, urls, references, generationPlan);
11192
+ const followthrough = buildFollowthrough(generationPlan);
11057
11193
  const implementationPlan = buildImplementationPlan(brief, profile, references);
11058
11194
  const governanceMarkdown = renderGovernanceMarkdown(designContract, implementationPlan);
11059
11195
  const implementationPlanMarkdown = renderImplementationMarkdown(implementationPlan);
@@ -11098,6 +11234,8 @@ var buildInspiredesignPacket = (input) => {
11098
11234
  return {
11099
11235
  designContract,
11100
11236
  generationPlan,
11237
+ canvasPlanRequest,
11238
+ followthrough,
11101
11239
  designMarkdown,
11102
11240
  implementationPlan,
11103
11241
  implementationPlanMarkdown,
@@ -11106,6 +11244,49 @@ var buildInspiredesignPacket = (input) => {
11106
11244
  };
11107
11245
  };
11108
11246
 
11247
+ // src/providers/workflow-handoff.ts
11248
+ var PRODUCT_VIDEO_BRIEF_HELPER_PATH = "./skills/opendevbrowser-product-presentation-asset/scripts/render-video-brief.sh";
11249
+ var PRODUCT_VIDEO_BRIEF_HELPER_COMMAND = `${PRODUCT_VIDEO_BRIEF_HELPER_PATH} <pack>/manifest.json`;
11250
+ var createSuccessHandoff = (followthroughSummary, suggestedNextAction, suggestedSteps) => ({
11251
+ followthroughSummary,
11252
+ suggestedNextAction,
11253
+ suggestedSteps
11254
+ });
11255
+ var buildResearchSuccessHandoff = () => {
11256
+ return createSuccessHandoff(
11257
+ "Review the ranked records and artifact bundle before turning the result into a publishable claim.",
11258
+ "Open the returned artifact path, inspect the supporting records, and rerun with explicit --sources or a tighter timebox if you need stronger evidence.",
11259
+ [
11260
+ { reason: "Check which records actually support the final claim." },
11261
+ { reason: "Rerun with explicit sources or a narrower timebox if the evidence set is still too broad." }
11262
+ ]
11263
+ );
11264
+ };
11265
+ var buildShoppingSuccessHandoff = () => {
11266
+ return createSuccessHandoff(
11267
+ "Review the offer set and diagnostics before calling any result a strong deal.",
11268
+ "Inspect the offers and meta.offerFilterDiagnostics, then rerun with explicit providers or budget and region adjustments if you need a tighter comparison.",
11269
+ [
11270
+ { reason: "Check which offers survived the workflow filters and why." },
11271
+ { reason: "Rerun with explicit providers or updated budget and region inputs if the comparison is still noisy." }
11272
+ ]
11273
+ );
11274
+ };
11275
+ var buildProductVideoSuccessHandoff = () => {
11276
+ return createSuccessHandoff(
11277
+ "Review the generated asset pack to confirm whether it is visual-ready or metadata-first before briefing production.",
11278
+ `Open the returned pack path, inspect manifest.json plus copy and features, then run ${PRODUCT_VIDEO_BRIEF_HELPER_COMMAND} to generate production briefs and sourcing notes.`,
11279
+ [
11280
+ { reason: "Confirm whether the pack already includes enough images or screenshots for production." },
11281
+ {
11282
+ reason: "Run the product-presentation-asset brief helper on manifest.json to generate the production brief files.",
11283
+ command: PRODUCT_VIDEO_BRIEF_HELPER_COMMAND
11284
+ },
11285
+ { reason: "Source or capture visuals before final handoff if the pack is metadata-first." }
11286
+ ]
11287
+ );
11288
+ };
11289
+
11109
11290
  // src/providers/shopping-postprocess.ts
11110
11291
  import { createHash as createHash4 } from "crypto";
11111
11292
  var LOOKS_LIKE_URL_RE = /^https?:\/\/\S+$/i;
@@ -12693,6 +12874,10 @@ var SIGNAL_WINDOW = 50;
12693
12874
  var RECOVERY_WINDOWS_REQUIRED = 2;
12694
12875
  var providerSignalMap = /* @__PURE__ */ new Map();
12695
12876
  var workflowLogger = createLogger("provider-workflows");
12877
+ var withFollowthroughMeta = (meta, handoff) => ({
12878
+ ...meta,
12879
+ followthroughSummary: handoff.followthroughSummary
12880
+ });
12696
12881
  var detectSignal = (error) => {
12697
12882
  const reasonCode = error.reasonCode ?? normalizeProviderReasonCode({
12698
12883
  code: error.code,
@@ -13605,7 +13790,7 @@ var summarizeInspiredesignCaptureConstraint = (references) => {
13605
13790
  }
13606
13791
  };
13607
13792
  };
13608
- var buildInspiredesignMeta = (runtime, workflowInput, references, failures) => {
13793
+ var buildInspiredesignMeta = (runtime, workflowInput, references, failures, followthrough) => {
13609
13794
  const failedCaptures = references.filter((reference) => reference.captureStatus === "failed");
13610
13795
  let reasonCodeDistribution = summarizeReasonCodeDistribution(failures);
13611
13796
  let meta = withCamelCasePrimaryConstraintMeta(withReasonCodeDistributionMeta({
@@ -13635,7 +13820,13 @@ var buildInspiredesignMeta = (runtime, workflowInput, references, failures) => {
13635
13820
  meta = withPrimaryConstraintSummaryOverride(meta, captureConstraint.summary, captureConstraint.guidance);
13636
13821
  }
13637
13822
  }
13638
- return meta;
13823
+ return {
13824
+ ...meta,
13825
+ followthroughSummary: followthrough.summary,
13826
+ recommendedSkills: followthrough.recommendedSkills,
13827
+ deepCaptureRecommendation: followthrough.deepCaptureRecommendation,
13828
+ contractScope: followthrough.contractScope
13829
+ };
13639
13830
  };
13640
13831
  var inferBrandFromContent = (content) => {
13641
13832
  const normalized = normalizePlainText(content);
@@ -14232,11 +14423,13 @@ var runResearchWorkflow = async (runtime, input) => {
14232
14423
  failures: mergedFailures,
14233
14424
  alerts: buildWorkflowAlerts(runtime, mergedFailures)
14234
14425
  }, primaryConstraintFailures);
14426
+ const handoff = buildResearchSuccessHandoff();
14427
+ const responseMeta = withFollowthroughMeta(meta, handoff);
14235
14428
  const rendered = renderResearch({
14236
14429
  mode: workflowInput.mode,
14237
14430
  topic: plan.compiled.topic,
14238
14431
  records: ranked,
14239
- meta
14432
+ meta: responseMeta
14240
14433
  });
14241
14434
  const bundle = await createArtifactBundle({
14242
14435
  namespace: "research",
@@ -14247,20 +14440,22 @@ var runResearchWorkflow = async (runtime, input) => {
14247
14440
  if (workflowInput.mode === "path") {
14248
14441
  return {
14249
14442
  ...rendered.response,
14443
+ ...handoff,
14250
14444
  path: bundle.basePath,
14251
14445
  records: ranked,
14252
14446
  meta: {
14253
- ...meta,
14447
+ ...responseMeta,
14254
14448
  artifact_manifest: bundle.manifest
14255
14449
  }
14256
14450
  };
14257
14451
  }
14258
14452
  return {
14259
14453
  ...rendered.response,
14454
+ ...handoff,
14260
14455
  artifact_path: bundle.basePath,
14261
14456
  records: ranked,
14262
14457
  meta: {
14263
- ...meta,
14458
+ ...responseMeta,
14264
14459
  artifact_manifest: bundle.manifest
14265
14460
  }
14266
14461
  };
@@ -14407,11 +14602,13 @@ var runShoppingWorkflow = async (runtime, input) => {
14407
14602
  if (typeof filterConstraintSummary === "string") {
14408
14603
  meta = withPrimaryConstraintSummaryOverride(meta, filterConstraintSummary);
14409
14604
  }
14605
+ const handoff = buildShoppingSuccessHandoff();
14606
+ const responseMeta = withFollowthroughMeta(meta, handoff);
14410
14607
  const rendered = renderShopping({
14411
14608
  mode: workflowInput.mode,
14412
14609
  query: plan.compiled.query,
14413
14610
  offers,
14414
- meta
14611
+ meta: responseMeta
14415
14612
  });
14416
14613
  const bundle = await createArtifactBundle({
14417
14614
  namespace: "shopping",
@@ -14422,20 +14619,22 @@ var runShoppingWorkflow = async (runtime, input) => {
14422
14619
  if (workflowInput.mode === "path") {
14423
14620
  return {
14424
14621
  ...rendered.response,
14622
+ ...handoff,
14425
14623
  path: bundle.basePath,
14426
14624
  offers,
14427
14625
  meta: {
14428
- ...meta,
14626
+ ...responseMeta,
14429
14627
  artifact_manifest: bundle.manifest
14430
14628
  }
14431
14629
  };
14432
14630
  }
14433
14631
  return {
14434
14632
  ...rendered.response,
14633
+ ...handoff,
14435
14634
  offers,
14436
14635
  artifact_path: bundle.basePath,
14437
14636
  meta: {
14438
- ...meta,
14637
+ ...responseMeta,
14439
14638
  artifact_manifest: bundle.manifest
14440
14639
  }
14441
14640
  };
@@ -14485,18 +14684,20 @@ var runInspiredesignWorkflow = async (runtime, input, options = {}) => {
14485
14684
  captureStatus: capture.captureStatus
14486
14685
  });
14487
14686
  }
14488
- const meta = buildInspiredesignMeta(runtime, workflowInput, references, failures);
14489
14687
  const packet = buildInspiredesignPacket({
14490
14688
  brief: workflowInput.brief,
14491
14689
  urls: workflowInput.urls,
14492
14690
  references,
14493
14691
  includePrototypeGuidance: workflowInput.includePrototypeGuidance
14494
14692
  });
14693
+ const meta = buildInspiredesignMeta(runtime, workflowInput, references, failures, packet.followthrough);
14495
14694
  const rendered = renderInspiredesign({
14496
14695
  mode: workflowInput.mode,
14497
14696
  brief: workflowInput.brief,
14498
14697
  urls: workflowInput.urls,
14499
14698
  designContract: packet.designContract,
14699
+ canvasPlanRequest: packet.canvasPlanRequest,
14700
+ designAgentHandoff: packet.followthrough,
14500
14701
  generationPlan: packet.generationPlan,
14501
14702
  implementationPlan: packet.implementationPlan,
14502
14703
  designMarkdown: packet.designMarkdown,
@@ -14872,32 +15073,35 @@ var runProductVideoWorkflow = async (runtime, input, options = {}) => {
14872
15073
  const cookieDiagnostics = summarizeCookieDiagnostics(details.failures, details.records);
14873
15074
  const antiBotPressure = summarizeAntiBotPressure(details.failures);
14874
15075
  const primaryIssue = summarizePrimaryProviderIssue(details.failures);
15076
+ const handoff = buildProductVideoSuccessHandoff();
15077
+ const meta = withFollowthroughMeta({
15078
+ alerts: buildWorkflowAlerts(runtime, details.failures),
15079
+ failures: details.failures,
15080
+ ...primaryIssue ? { primaryConstraintSummary: primaryIssue.summary } : {},
15081
+ reasonCodeDistribution,
15082
+ transcript_strategy_failures: transcriptStrategyFailures,
15083
+ transcriptStrategyFailures,
15084
+ transcript_strategy_detail_failures: transcriptStrategyFailures,
15085
+ transcriptStrategyDetailFailures: transcriptStrategyFailures,
15086
+ transcript_strategy_detail_distribution: transcriptStrategyDetailDistribution,
15087
+ transcriptStrategyDetailDistribution,
15088
+ transcript_durability: transcriptDurability,
15089
+ transcriptDurability,
15090
+ cookie_diagnostics: cookieDiagnostics,
15091
+ cookieDiagnostics,
15092
+ anti_bot_pressure: antiBotPressure,
15093
+ antiBotPressure,
15094
+ artifact_manifest: bundle.manifest
15095
+ }, handoff);
14875
15096
  return {
15097
+ ...handoff,
14876
15098
  path: bundle.basePath,
14877
15099
  manifest: manifestPayload,
14878
15100
  product: productPayload,
14879
15101
  pricing,
14880
15102
  screenshots: screenshotPaths,
14881
15103
  images: imagePaths,
14882
- meta: {
14883
- alerts: buildWorkflowAlerts(runtime, details.failures),
14884
- failures: details.failures,
14885
- ...primaryIssue ? { primaryConstraintSummary: primaryIssue.summary } : {},
14886
- reasonCodeDistribution,
14887
- transcript_strategy_failures: transcriptStrategyFailures,
14888
- transcriptStrategyFailures,
14889
- transcript_strategy_detail_failures: transcriptStrategyFailures,
14890
- transcriptStrategyDetailFailures: transcriptStrategyFailures,
14891
- transcript_strategy_detail_distribution: transcriptStrategyDetailDistribution,
14892
- transcriptStrategyDetailDistribution,
14893
- transcript_durability: transcriptDurability,
14894
- transcriptDurability,
14895
- cookie_diagnostics: cookieDiagnostics,
14896
- cookieDiagnostics,
14897
- anti_bot_pressure: antiBotPressure,
14898
- antiBotPressure,
14899
- artifact_manifest: bundle.manifest
14900
- }
15104
+ meta
14901
15105
  };
14902
15106
  };
14903
15107
 
@@ -17037,6 +17241,8 @@ export {
17037
17241
  filterByTimebox,
17038
17242
  toResearchRecord,
17039
17243
  enrichResearchRecords,
17244
+ INSPIREDESIGN_HANDOFF_COMMANDS,
17245
+ INSPIREDESIGN_HANDOFF_GUIDANCE,
17040
17246
  renderResearch,
17041
17247
  renderShopping,
17042
17248
  renderInspiredesign,
@@ -17050,4 +17256,4 @@ export {
17050
17256
  createProviderRuntime,
17051
17257
  createDefaultRuntime
17052
17258
  };
17053
- //# sourceMappingURL=chunk-C6QUKABT.js.map
17259
+ //# sourceMappingURL=chunk-ZE2E7ZGH.js.map