@wix/ditto-codegen-public 1.0.455 → 1.0.457

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/out.js +616 -649
  2. package/package.json +2 -2
package/dist/out.js CHANGED
@@ -10460,9 +10460,9 @@ var require_cjs3 = __commonJS({
10460
10460
  }
10461
10461
  });
10462
10462
 
10463
- // dist/job-context-storage.js
10463
+ // dist/jobs/job-context-storage.js
10464
10464
  var require_job_context_storage = __commonJS({
10465
- "dist/job-context-storage.js"(exports2) {
10465
+ "dist/jobs/job-context-storage.js"(exports2) {
10466
10466
  "use strict";
10467
10467
  Object.defineProperty(exports2, "__esModule", { value: true });
10468
10468
  exports2.jobContextStorage = void 0;
@@ -10471,9 +10471,9 @@ var require_job_context_storage = __commonJS({
10471
10471
  }
10472
10472
  });
10473
10473
 
10474
- // dist/logger.js
10474
+ // dist/telemetry/logger.js
10475
10475
  var require_logger = __commonJS({
10476
- "dist/logger.js"(exports2) {
10476
+ "dist/telemetry/logger.js"(exports2) {
10477
10477
  "use strict";
10478
10478
  Object.defineProperty(exports2, "__esModule", { value: true });
10479
10479
  exports2.logger = void 0;
@@ -10581,46 +10581,6 @@ var require_wixTokenRefresh = __commonJS({
10581
10581
  }
10582
10582
  });
10583
10583
 
10584
- // dist/experiments.js
10585
- var require_experiments = __commonJS({
10586
- "dist/experiments.js"(exports2) {
10587
- "use strict";
10588
- Object.defineProperty(exports2, "__esModule", { value: true });
10589
- exports2.FILTERED_JOB_POLLING = void 0;
10590
- exports2.getExperimentVariant = getExperimentVariant;
10591
- exports2.isExperimentEnabled = isExperimentEnabled;
10592
- var logger_12 = require_logger();
10593
- exports2.FILTERED_JOB_POLLING = "codegenFilteredJobPolling";
10594
- var parsedExperiments = null;
10595
- function getExperiments() {
10596
- if (parsedExperiments !== null) {
10597
- return parsedExperiments;
10598
- }
10599
- const raw = process.env.CODEGEN_EXPERIMENTS;
10600
- if (!raw) {
10601
- parsedExperiments = {};
10602
- return parsedExperiments;
10603
- }
10604
- try {
10605
- parsedExperiments = JSON.parse(raw);
10606
- } catch (error) {
10607
- logger_12.logger.error("[Experiments] Failed to parse CODEGEN_EXPERIMENTS", {
10608
- error: error instanceof Error ? error.message : String(error)
10609
- });
10610
- parsedExperiments = {};
10611
- }
10612
- return parsedExperiments;
10613
- }
10614
- function getExperimentVariant(specName) {
10615
- return getExperiments()[specName] ?? "A";
10616
- }
10617
- function isExperimentEnabled(specName) {
10618
- const variant = getExperimentVariant(specName);
10619
- return variant === "true" || variant !== "A" && variant !== "false";
10620
- }
10621
- }
10622
- });
10623
-
10624
10584
  // ../codegen-types/dist/errors/ErrorTypes.js
10625
10585
  var require_ErrorTypes = __commonJS({
10626
10586
  "../codegen-types/dist/errors/ErrorTypes.js"(exports2) {
@@ -11065,7 +11025,6 @@ var require_CodeGenService = __commonJS({
11065
11025
  return types_1.JobsSortOrder;
11066
11026
  } });
11067
11027
  var logger_12 = require_logger();
11068
- var experiments_1 = require_experiments();
11069
11028
  var ditto_codegen_types_12 = require_dist4();
11070
11029
  var FILE_OPERATION = {
11071
11030
  [ditto_codegen_types_12.ExtensionGenerationOperation.INSERT]: types_1.FileOperation.INSERT,
@@ -11177,7 +11136,7 @@ var require_CodeGenService = __commonJS({
11177
11136
  };
11178
11137
  this.fetchPendingJobs = async () => {
11179
11138
  const { sandboxId } = this;
11180
- const filtered = sandboxId && (0, experiments_1.isExperimentEnabled)(experiments_1.FILTERED_JOB_POLLING) ? {
11139
+ const filtered = sandboxId ? {
11181
11140
  projectId: this.projectId,
11182
11141
  filter: { status: types_1.Status.PENDING, sandboxId },
11183
11142
  paging: { limit: 1 },
@@ -11607,7 +11566,6 @@ var require_codegen_prompt = __commonJS({
11607
11566
  "use strict";
11608
11567
  Object.defineProperty(exports2, "__esModule", { value: true });
11609
11568
  exports2.buildInitPrompt = buildInitPrompt;
11610
- exports2.buildIterationBasePrompt = buildIterationBasePrompt;
11611
11569
  exports2.buildIterationPrompt = buildIterationPrompt;
11612
11570
  exports2.buildRecoveryPrompt = buildRecoveryPrompt;
11613
11571
  var prompt_utils_1 = require_prompt_utils();
@@ -11746,131 +11704,19 @@ var require_prompts = __commonJS({
11746
11704
  }
11747
11705
  });
11748
11706
 
11749
- // dist/opencode-integration/task-tracker/constants.js
11707
+ // dist/opencode-integration/configuration/constants.js
11750
11708
  var require_constants5 = __commonJS({
11751
- "dist/opencode-integration/task-tracker/constants.js"(exports2) {
11709
+ "dist/opencode-integration/configuration/constants.js"(exports2) {
11752
11710
  "use strict";
11753
11711
  Object.defineProperty(exports2, "__esModule", { value: true });
11754
- exports2.BUILDER_EXTENSION_TYPES = exports2.WIX_MCP_SERVER_NAME = exports2.CONTAINER_ROOT_PREFIX = void 0;
11755
- exports2.resolveFileOperation = resolveFileOperation;
11756
- exports2.isSpiExtension = isSpiExtension;
11757
- exports2.normalizeFilePath = normalizeFilePath;
11758
- exports2.isExtensionsFile = isExtensionsFile;
11759
- exports2.detectExtension = detectExtension;
11760
- exports2.toTitleCase = toTitleCase;
11761
- exports2.extractExtensionName = extractExtensionName;
11762
- exports2.matchQuotedExtensionConfigProperty = matchQuotedExtensionConfigProperty;
11763
- exports2.extractExtensionDisplayTitle = extractExtensionDisplayTitle;
11764
- exports2.injectCreatedBy = injectCreatedBy;
11765
- var ditto_codegen_types_12 = require_dist4();
11766
- exports2.CONTAINER_ROOT_PREFIX = /^\/user-code\//;
11712
+ exports2.WIX_MCP_SERVER_NAME = void 0;
11767
11713
  exports2.WIX_MCP_SERVER_NAME = "wix-mcp";
11768
- var EXTENSION_FILE_PATTERN = /\/extensions\.ts$|\.extension\.ts$/;
11769
- function resolveFileOperation(tool, metadata) {
11770
- if (tool === "write") {
11771
- return metadata?.exists ? ditto_codegen_types_12.ExtensionGenerationOperation.EDIT : ditto_codegen_types_12.ExtensionGenerationOperation.INSERT;
11772
- }
11773
- if (tool === "edit") {
11774
- return ditto_codegen_types_12.ExtensionGenerationOperation.EDIT;
11775
- }
11776
- return null;
11777
- }
11778
- var SPI_EXTENSION_TYPES = [
11779
- "ecomShippingRates",
11780
- "ecomAdditionalFees",
11781
- "ecomValidations",
11782
- "ecomDiscountTriggers",
11783
- "ecomGiftCards",
11784
- "ecomPaymentSettings",
11785
- "bookingsStaffSortingProvider"
11786
- ];
11787
- exports2.BUILDER_EXTENSION_TYPES = [
11788
- "dashboardPage",
11789
- "dashboardModal",
11790
- "dashboardPlugin",
11791
- "dashboardMenuPlugin",
11792
- "embeddedScript",
11793
- "event",
11794
- "customElement",
11795
- "siteComponent",
11796
- "editorReactComponent",
11797
- "sitePlugin",
11798
- ...SPI_EXTENSION_TYPES,
11799
- "contextProvider",
11800
- "functionLibrary",
11801
- "dataCollections"
11802
- ];
11803
- var SPI_EXTENSION_TYPE_SET = new Set(SPI_EXTENSION_TYPES);
11804
- function isSpiExtension(extensionType) {
11805
- return SPI_EXTENSION_TYPE_SET.has(extensionType);
11806
- }
11807
- function normalizeFilePath(filePath) {
11808
- return filePath.replace(exports2.CONTAINER_ROOT_PREFIX, "");
11809
- }
11810
- function isExtensionsFile(filePath) {
11811
- return EXTENSION_FILE_PATTERN.test(filePath);
11812
- }
11813
- function detectExtension(content) {
11814
- for (const extensionType of exports2.BUILDER_EXTENSION_TYPES) {
11815
- if (content.includes(`extensions.${extensionType}(`) || content.includes(`experimentalExtensions.${extensionType}(`)) {
11816
- return extensionType;
11817
- }
11818
- }
11819
- return null;
11820
- }
11821
- function toTitleCase(str) {
11822
- return str.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
11823
- }
11824
- function extractExtensionName(filePath) {
11825
- const parts = normalizeFilePath(filePath).split("/");
11826
- const folderName = parts[parts.length - 2] || "";
11827
- return toTitleCase(folderName);
11828
- }
11829
- function matchQuotedExtensionConfigProperty(content, propName) {
11830
- const objectPropertyQuotedStringValuePattern = `\\b${propName}\\s*:\\s*(?:"([^"\\\\]*)"|'([^'\\\\]*)')`;
11831
- const objectPropertyQuotedStringValueRegex = new RegExp(
11832
- objectPropertyQuotedStringValuePattern,
11833
- // `m` = multiline: `^` / `$` match line starts/ends, not only the whole string.
11834
- "m"
11835
- );
11836
- const quotedStringValueMatch = content.match(objectPropertyQuotedStringValueRegex);
11837
- if (!quotedStringValueMatch)
11838
- return null;
11839
- return quotedStringValueMatch[1] ?? quotedStringValueMatch[2] ?? null;
11840
- }
11841
- function extractExtensionDisplayTitle(content, filePath) {
11842
- const title = matchQuotedExtensionConfigProperty(content, "title");
11843
- if (title)
11844
- return title;
11845
- const name = matchQuotedExtensionConfigProperty(content, "name");
11846
- if (name)
11847
- return name;
11848
- const displayName = matchQuotedExtensionConfigProperty(content, "displayName");
11849
- if (displayName)
11850
- return displayName;
11851
- const idSuffix = matchQuotedExtensionConfigProperty(content, "idSuffix");
11852
- if (idSuffix)
11853
- return idSuffix;
11854
- return extractExtensionName(filePath);
11855
- }
11856
- function injectCreatedBy(content) {
11857
- if (content.includes("createdBy"))
11858
- return content;
11859
- const isGeneric = content.includes("genericExtension(");
11860
- const createdByValue = isGeneric ? ' createdBy: "CODE_GEN",' : ' createdBy: {\n author: "CODE_GEN",\n },';
11861
- return content.replace(/(\S)(\n)(}\))(;?\s*)$/, (_match, preChar, newline, closeBrace, tail) => {
11862
- const needsComma = preChar !== "," && preChar !== "{";
11863
- const separator = needsComma ? `${preChar},` : preChar;
11864
- return `${separator}${newline}${createdByValue}
11865
- ${closeBrace}${tail}`;
11866
- });
11867
- }
11868
11714
  }
11869
11715
  });
11870
11716
 
11871
- // dist/opencode-integration/model-knobs.js
11717
+ // dist/opencode-integration/configuration/model-knobs.js
11872
11718
  var require_model_knobs = __commonJS({
11873
- "dist/opencode-integration/model-knobs.js"(exports2) {
11719
+ "dist/opencode-integration/configuration/model-knobs.js"(exports2) {
11874
11720
  "use strict";
11875
11721
  Object.defineProperty(exports2, "__esModule", { value: true });
11876
11722
  exports2.DEFAULT_SMALL_MODEL = exports2.DEFAULT_MODEL = void 0;
@@ -11972,9 +11818,9 @@ var require_types4 = __commonJS({
11972
11818
  }
11973
11819
  });
11974
11820
 
11975
- // dist/opencode-integration/agents.js
11976
- var require_agents = __commonJS({
11977
- "dist/opencode-integration/agents.js"(exports2) {
11821
+ // dist/opencode-integration/configuration/subagents.js
11822
+ var require_subagents = __commonJS({
11823
+ "dist/opencode-integration/configuration/subagents.js"(exports2) {
11978
11824
  "use strict";
11979
11825
  Object.defineProperty(exports2, "__esModule", { value: true });
11980
11826
  exports2.SUBAGENT_AGENT_NAMES = exports2.WDS_DOCS_SUBAGENT_NAME = exports2.WIX_DOCS_SUBAGENT_NAME = exports2.VALIDATOR_SUBAGENT_NAME = exports2.PRIMARY_AGENT_NAME = void 0;
@@ -12266,9 +12112,9 @@ skills already cover. Read-only.`;
12266
12112
  }
12267
12113
  });
12268
12114
 
12269
- // dist/opencode-integration/rules-writer.js
12115
+ // dist/opencode-integration/configuration/rules-writer.js
12270
12116
  var require_rules_writer = __commonJS({
12271
- "dist/opencode-integration/rules-writer.js"(exports2) {
12117
+ "dist/opencode-integration/configuration/rules-writer.js"(exports2) {
12272
12118
  "use strict";
12273
12119
  Object.defineProperty(exports2, "__esModule", { value: true });
12274
12120
  exports2.getRulePath = getRulePath;
@@ -15338,14 +15184,13 @@ WORKFLOW:
15338
15184
  }
15339
15185
  });
15340
15186
 
15341
- // dist/job-decision-manager.js
15187
+ // dist/jobs/job-decision-manager.js
15342
15188
  var require_job_decision_manager = __commonJS({
15343
- "dist/job-decision-manager.js"(exports2) {
15189
+ "dist/jobs/job-decision-manager.js"(exports2) {
15344
15190
  "use strict";
15345
15191
  Object.defineProperty(exports2, "__esModule", { value: true });
15346
15192
  exports2.pauseForUserDecision = pauseForUserDecision;
15347
15193
  exports2.askJobChoice = askJobChoice;
15348
- exports2.askJobConfirmation = askJobConfirmation;
15349
15194
  var types_1 = require_types_impl();
15350
15195
  var codeGenerationService_12 = require_codeGenerationService();
15351
15196
  var types_2 = require_types_impl();
@@ -15410,18 +15255,6 @@ var require_job_decision_manager = __commonJS({
15410
15255
  }
15411
15256
  return response.selectedOptionId;
15412
15257
  }
15413
- async function askJobConfirmation(jobId, question, context) {
15414
- const response = await pauseForUserDecision(jobId, {
15415
- question,
15416
- questionType: types_1.UserDecisionQuestionType.UI_COMPONENT_TYPE,
15417
- options: [
15418
- { id: "yes", label: "Yes" },
15419
- { id: "no", label: "No" }
15420
- ],
15421
- context
15422
- });
15423
- return response.selectedOptionId === "yes";
15424
- }
15425
15258
  }
15426
15259
  });
15427
15260
 
@@ -15496,9 +15329,9 @@ var require_environments = __commonJS({
15496
15329
  }
15497
15330
  });
15498
15331
 
15499
- // dist/opencode-integration/config.js
15332
+ // dist/opencode-integration/configuration/config.js
15500
15333
  var require_config = __commonJS({
15501
- "dist/opencode-integration/config.js"(exports2) {
15334
+ "dist/opencode-integration/configuration/config.js"(exports2) {
15502
15335
  "use strict";
15503
15336
  Object.defineProperty(exports2, "__esModule", { value: true });
15504
15337
  exports2.DEFAULT_TIMEOUT_MS = void 0;
@@ -15512,7 +15345,7 @@ var require_config = __commonJS({
15512
15345
  var ditto_codegen_types_12 = require_dist4();
15513
15346
  var constants_1 = require_constants5();
15514
15347
  var model_knobs_1 = require_model_knobs();
15515
- var agents_1 = require_agents();
15348
+ var subagents_1 = require_subagents();
15516
15349
  var rules_writer_12 = require_rules_writer();
15517
15350
  var environments_12 = require_environments();
15518
15351
  var CodeGenService_12 = require_CodeGenService();
@@ -15698,8 +15531,8 @@ var require_config = __commonJS({
15698
15531
  external_directory: READABLE_EXTERNAL_DIRS
15699
15532
  };
15700
15533
  function buildConfig(projectId, instructionPaths, permission, { isCodeWritingFlow = false, withAgents = false } = {}) {
15701
- const main2 = (0, agents_1.getMainAgentModel)();
15702
- const subagent = (0, agents_1.getSubagentModel)();
15534
+ const main2 = (0, subagents_1.getMainAgentModel)();
15535
+ const subagent = (0, subagents_1.getSubagentModel)();
15703
15536
  return {
15704
15537
  model: (0, model_knobs_1.getModel)(),
15705
15538
  small_model: (0, model_knobs_1.getSmallModel)(),
@@ -15716,8 +15549,8 @@ var require_config = __commonJS({
15716
15549
  // not: its primary agent re-opens `task`, which would let the write-capable
15717
15550
  // validator subagent run in a flow meant to stay read-only.
15718
15551
  ...withAgents ? {
15719
- agent: (0, agents_1.getAgentConfig)(main2, subagent),
15720
- default_agent: agents_1.PRIMARY_AGENT_NAME
15552
+ agent: (0, subagents_1.getAgentConfig)(main2, subagent),
15553
+ default_agent: subagents_1.PRIMARY_AGENT_NAME
15721
15554
  } : {}
15722
15555
  };
15723
15556
  }
@@ -15772,44 +15605,43 @@ var require_config = __commonJS({
15772
15605
  }
15773
15606
  });
15774
15607
 
15775
- // dist/opencode-integration/generated-plugins.js
15776
- var require_generated_plugins = __commonJS({
15777
- "dist/opencode-integration/generated-plugins.js"(exports2) {
15608
+ // dist/opencode-integration/plugins/write-plugin.js
15609
+ var require_write_plugin = __commonJS({
15610
+ "dist/opencode-integration/plugins/write-plugin.js"(exports2) {
15778
15611
  "use strict";
15779
15612
  Object.defineProperty(exports2, "__esModule", { value: true });
15780
- exports2.OPENCODE_PLUGIN_DIR = void 0;
15781
15613
  exports2.writeGeneratedPlugin = writeGeneratedPlugin;
15782
15614
  var promises_1 = require("fs/promises");
15783
15615
  var os_1 = require("os");
15784
15616
  var path_12 = require("path");
15785
15617
  var logger_12 = require_logger();
15786
- exports2.OPENCODE_PLUGIN_DIR = (0, path_12.join)((0, os_1.homedir)(), ".config", "opencode", "plugin");
15618
+ var OPENCODE_PLUGIN_DIR = (0, path_12.join)((0, os_1.homedir)(), ".config", "opencode", "plugin");
15787
15619
  async function writeGeneratedPlugin(filename, source) {
15788
- await (0, promises_1.mkdir)(exports2.OPENCODE_PLUGIN_DIR, { recursive: true });
15789
- await (0, promises_1.writeFile)((0, path_12.join)(exports2.OPENCODE_PLUGIN_DIR, filename), source, "utf-8");
15620
+ await (0, promises_1.mkdir)(OPENCODE_PLUGIN_DIR, { recursive: true });
15621
+ await (0, promises_1.writeFile)((0, path_12.join)(OPENCODE_PLUGIN_DIR, filename), source, "utf-8");
15790
15622
  logger_12.logger.info("[OpenCode] Wrote generated plugin", { plugin: filename });
15791
15623
  }
15792
15624
  }
15793
15625
  });
15794
15626
 
15795
- // dist/opencode-integration/subagent-tool-logger.js
15627
+ // dist/opencode-integration/plugins/subagent-tool-logger.js
15796
15628
  var require_subagent_tool_logger = __commonJS({
15797
- "dist/opencode-integration/subagent-tool-logger.js"(exports2) {
15629
+ "dist/opencode-integration/plugins/subagent-tool-logger.js"(exports2) {
15798
15630
  "use strict";
15799
15631
  Object.defineProperty(exports2, "__esModule", { value: true });
15800
- exports2.SUBAGENT_STARTED_EVENT_TYPE = exports2.SUBAGENT_TOOL_EVENT_TYPE = void 0;
15632
+ exports2.SUBAGENT_TOOL_LOGGER_FILENAME = exports2.SUBAGENT_STARTED_EVENT_TYPE = exports2.SUBAGENT_TOOL_EVENT_TYPE = void 0;
15801
15633
  exports2.buildSubagentToolLoggerPluginSource = buildSubagentToolLoggerPluginSource;
15802
15634
  exports2.writeSubagentToolLoggerPlugin = writeSubagentToolLoggerPlugin;
15803
- var generated_plugins_1 = require_generated_plugins();
15804
- var agents_1 = require_agents();
15635
+ var write_plugin_1 = require_write_plugin();
15636
+ var subagents_1 = require_subagents();
15805
15637
  exports2.SUBAGENT_TOOL_EVENT_TYPE = "subagent_tool_use";
15806
15638
  exports2.SUBAGENT_STARTED_EVENT_TYPE = "subagent_started";
15807
- var PLUGIN_FILENAME = "subagent-tool-logger.ts";
15639
+ exports2.SUBAGENT_TOOL_LOGGER_FILENAME = "subagent-tool-logger.ts";
15808
15640
  function buildSubagentToolLoggerPluginSource() {
15809
15641
  return `// Generated by @wix/ditto-codegen (subagent-tool-logger) \u2014 do not edit.
15810
15642
  const EVENT_TYPE = ${JSON.stringify(exports2.SUBAGENT_TOOL_EVENT_TYPE)};
15811
15643
  const STARTED_EVENT_TYPE = ${JSON.stringify(exports2.SUBAGENT_STARTED_EVENT_TYPE)};
15812
- const SUBAGENT_AGENTS = new Set(${JSON.stringify(agents_1.SUBAGENT_AGENT_NAMES)});
15644
+ const SUBAGENT_AGENTS = new Set(${JSON.stringify(subagents_1.SUBAGENT_AGENT_NAMES)});
15813
15645
 
15814
15646
  export const SubagentToolLogger = async () => {
15815
15647
  // sessionID -> agent name, learned from session.* / message.updated (both
@@ -15918,14 +15750,14 @@ export const SubagentToolLogger = async () => {
15918
15750
  `;
15919
15751
  }
15920
15752
  async function writeSubagentToolLoggerPlugin() {
15921
- await (0, generated_plugins_1.writeGeneratedPlugin)(PLUGIN_FILENAME, buildSubagentToolLoggerPluginSource());
15753
+ await (0, write_plugin_1.writeGeneratedPlugin)(exports2.SUBAGENT_TOOL_LOGGER_FILENAME, buildSubagentToolLoggerPluginSource());
15922
15754
  }
15923
15755
  }
15924
15756
  });
15925
15757
 
15926
- // dist/opencode-integration/parser.js
15758
+ // dist/opencode-integration/execution/parser.js
15927
15759
  var require_parser = __commonJS({
15928
- "dist/opencode-integration/parser.js"(exports2) {
15760
+ "dist/opencode-integration/execution/parser.js"(exports2) {
15929
15761
  "use strict";
15930
15762
  Object.defineProperty(exports2, "__esModule", { value: true });
15931
15763
  exports2.parseRequiredPermissions = parseRequiredPermissions;
@@ -15939,8 +15771,8 @@ var require_parser = __commonJS({
15939
15771
  exports2.parseValidatorTaskOutputs = parseValidatorTaskOutputs;
15940
15772
  exports2.summarizeOpenCodeLine = summarizeOpenCodeLine;
15941
15773
  var types_1 = require_types4();
15942
- var agents_1 = require_agents();
15943
- var subagent_tool_logger_12 = require_subagent_tool_logger();
15774
+ var subagents_1 = require_subagents();
15775
+ var subagent_tool_logger_1 = require_subagent_tool_logger();
15944
15776
  function parseRequiredPermissions(output) {
15945
15777
  let permissions = [];
15946
15778
  const lines = output.split("\n");
@@ -16083,7 +15915,7 @@ var require_parser = __commonJS({
16083
15915
  continue;
16084
15916
  }
16085
15917
  const { title, output, input } = event.part.state;
16086
- const isValidator = input?.subagent_type === agents_1.VALIDATOR_SUBAGENT_NAME || title?.includes(agents_1.VALIDATOR_SUBAGENT_NAME);
15918
+ const isValidator = input?.subagent_type === subagents_1.VALIDATOR_SUBAGENT_NAME || title?.includes(subagents_1.VALIDATOR_SUBAGENT_NAME);
16087
15919
  if (isValidator && output) {
16088
15920
  outputs.push(output.trim());
16089
15921
  }
@@ -16091,7 +15923,7 @@ var require_parser = __commonJS({
16091
15923
  return outputs;
16092
15924
  }
16093
15925
  function summarizeOpenCodeLine(line) {
16094
- if (line.type !== "tool_use" && line.type !== subagent_tool_logger_12.SUBAGENT_TOOL_EVENT_TYPE) {
15926
+ if (line.type !== "tool_use" && line.type !== subagent_tool_logger_1.SUBAGENT_TOOL_EVENT_TYPE) {
16095
15927
  return line;
16096
15928
  }
16097
15929
  const { part } = line;
@@ -16113,9 +15945,9 @@ var require_parser = __commonJS({
16113
15945
  }
16114
15946
  });
16115
15947
 
16116
- // dist/opencode-integration/internal-paths.js
15948
+ // dist/git/internal-paths.js
16117
15949
  var require_internal_paths = __commonJS({
16118
- "dist/opencode-integration/internal-paths.js"(exports2) {
15950
+ "dist/git/internal-paths.js"(exports2) {
16119
15951
  "use strict";
16120
15952
  Object.defineProperty(exports2, "__esModule", { value: true });
16121
15953
  exports2.isInternalPath = isInternalPath;
@@ -16126,9 +15958,9 @@ var require_internal_paths = __commonJS({
16126
15958
  }
16127
15959
  });
16128
15960
 
16129
- // dist/opencode-integration/git-file-changes.js
16130
- var require_git_file_changes = __commonJS({
16131
- "dist/opencode-integration/git-file-changes.js"(exports2) {
15961
+ // dist/git/file-changes.js
15962
+ var require_file_changes = __commonJS({
15963
+ "dist/git/file-changes.js"(exports2) {
16132
15964
  "use strict";
16133
15965
  Object.defineProperty(exports2, "__esModule", { value: true });
16134
15966
  exports2.captureGitBaseline = captureGitBaseline;
@@ -16207,9 +16039,9 @@ var require_git_file_changes = __commonJS({
16207
16039
  }
16208
16040
  });
16209
16041
 
16210
- // dist/opencode-integration/cost-tracker.js
16042
+ // dist/opencode-integration/execution/cost-tracker.js
16211
16043
  var require_cost_tracker = __commonJS({
16212
- "dist/opencode-integration/cost-tracker.js"(exports2) {
16044
+ "dist/opencode-integration/execution/cost-tracker.js"(exports2) {
16213
16045
  "use strict";
16214
16046
  Object.defineProperty(exports2, "__esModule", { value: true });
16215
16047
  exports2.fetchOpenCodeStats = fetchOpenCodeStats;
@@ -16328,6 +16160,113 @@ var require_progress_handler = __commonJS({
16328
16160
  }
16329
16161
  });
16330
16162
 
16163
+ // dist/extension-reporting/detect.js
16164
+ var require_detect = __commonJS({
16165
+ "dist/extension-reporting/detect.js"(exports2) {
16166
+ "use strict";
16167
+ Object.defineProperty(exports2, "__esModule", { value: true });
16168
+ exports2.BUILDER_EXTENSION_TYPES = void 0;
16169
+ exports2.isSpiExtension = isSpiExtension;
16170
+ exports2.isExtensionsFile = isExtensionsFile;
16171
+ exports2.detectExtension = detectExtension;
16172
+ exports2.matchQuotedExtensionConfigProperty = matchQuotedExtensionConfigProperty;
16173
+ exports2.extractExtensionDisplayTitle = extractExtensionDisplayTitle;
16174
+ exports2.injectCreatedBy = injectCreatedBy;
16175
+ var CONTAINER_ROOT_PREFIX = /^\/user-code\//;
16176
+ var EXTENSION_FILE_PATTERN = /\/extensions\.ts$|\.extension\.ts$/;
16177
+ var SPI_EXTENSION_TYPES = [
16178
+ "ecomShippingRates",
16179
+ "ecomAdditionalFees",
16180
+ "ecomValidations",
16181
+ "ecomDiscountTriggers",
16182
+ "ecomGiftCards",
16183
+ "ecomPaymentSettings",
16184
+ "bookingsStaffSortingProvider"
16185
+ ];
16186
+ exports2.BUILDER_EXTENSION_TYPES = [
16187
+ "dashboardPage",
16188
+ "dashboardModal",
16189
+ "dashboardPlugin",
16190
+ "dashboardMenuPlugin",
16191
+ "embeddedScript",
16192
+ "event",
16193
+ "customElement",
16194
+ "siteComponent",
16195
+ "editorReactComponent",
16196
+ "sitePlugin",
16197
+ ...SPI_EXTENSION_TYPES,
16198
+ "contextProvider",
16199
+ "functionLibrary",
16200
+ "dataCollections"
16201
+ ];
16202
+ var SPI_EXTENSION_TYPE_SET = new Set(SPI_EXTENSION_TYPES);
16203
+ function isSpiExtension(extensionType) {
16204
+ return SPI_EXTENSION_TYPE_SET.has(extensionType);
16205
+ }
16206
+ function normalizeFilePath(filePath) {
16207
+ return filePath.replace(CONTAINER_ROOT_PREFIX, "");
16208
+ }
16209
+ function isExtensionsFile(filePath) {
16210
+ return EXTENSION_FILE_PATTERN.test(filePath);
16211
+ }
16212
+ function detectExtension(content) {
16213
+ for (const extensionType of exports2.BUILDER_EXTENSION_TYPES) {
16214
+ if (content.includes(`extensions.${extensionType}(`) || content.includes(`experimentalExtensions.${extensionType}(`)) {
16215
+ return extensionType;
16216
+ }
16217
+ }
16218
+ return null;
16219
+ }
16220
+ function toTitleCase(str) {
16221
+ return str.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
16222
+ }
16223
+ function extractExtensionName(filePath) {
16224
+ const parts = normalizeFilePath(filePath).split("/");
16225
+ const folderName = parts[parts.length - 2] || "";
16226
+ return toTitleCase(folderName);
16227
+ }
16228
+ function matchQuotedExtensionConfigProperty(content, propName) {
16229
+ const objectPropertyQuotedStringValuePattern = `\\b${propName}\\s*:\\s*(?:"([^"\\\\]*)"|'([^'\\\\]*)')`;
16230
+ const objectPropertyQuotedStringValueRegex = new RegExp(
16231
+ objectPropertyQuotedStringValuePattern,
16232
+ // `m` = multiline: `^` / `$` match line starts/ends, not only the whole string.
16233
+ "m"
16234
+ );
16235
+ const quotedStringValueMatch = content.match(objectPropertyQuotedStringValueRegex);
16236
+ if (!quotedStringValueMatch)
16237
+ return null;
16238
+ return quotedStringValueMatch[1] ?? quotedStringValueMatch[2] ?? null;
16239
+ }
16240
+ function extractExtensionDisplayTitle(content, filePath) {
16241
+ const title = matchQuotedExtensionConfigProperty(content, "title");
16242
+ if (title)
16243
+ return title;
16244
+ const name = matchQuotedExtensionConfigProperty(content, "name");
16245
+ if (name)
16246
+ return name;
16247
+ const displayName = matchQuotedExtensionConfigProperty(content, "displayName");
16248
+ if (displayName)
16249
+ return displayName;
16250
+ const idSuffix = matchQuotedExtensionConfigProperty(content, "idSuffix");
16251
+ if (idSuffix)
16252
+ return idSuffix;
16253
+ return extractExtensionName(filePath);
16254
+ }
16255
+ function injectCreatedBy(content) {
16256
+ if (content.includes("createdBy"))
16257
+ return content;
16258
+ const isGeneric = content.includes("genericExtension(");
16259
+ const createdByValue = isGeneric ? ' createdBy: "CODE_GEN",' : ' createdBy: {\n author: "CODE_GEN",\n },';
16260
+ return content.replace(/(\S)(\n)(}\))(;?\s*)$/, (_match, preChar, newline, closeBrace, tail) => {
16261
+ const needsComma = preChar !== "," && preChar !== "{";
16262
+ const separator = needsComma ? `${preChar},` : preChar;
16263
+ return `${separator}${newline}${createdByValue}
16264
+ ${closeBrace}${tail}`;
16265
+ });
16266
+ }
16267
+ }
16268
+ });
16269
+
16331
16270
  // dist/opencode-integration/task-tracker/derived-progress.js
16332
16271
  var require_derived_progress = __commonJS({
16333
16272
  "dist/opencode-integration/task-tracker/derived-progress.js"(exports2) {
@@ -16336,12 +16275,12 @@ var require_derived_progress = __commonJS({
16336
16275
  exports2.DerivedProgressReporter = void 0;
16337
16276
  exports2.deriveProgressSteps = deriveProgressSteps;
16338
16277
  var ditto_codegen_types_12 = require_dist4();
16339
- var constants_1 = require_constants5();
16340
- var agents_1 = require_agents();
16278
+ var detect_1 = require_detect();
16279
+ var subagents_1 = require_subagents();
16341
16280
  var SUBAGENT_STEPS = {
16342
- [agents_1.VALIDATOR_SUBAGENT_NAME]: "Building project",
16343
- [agents_1.WIX_DOCS_SUBAGENT_NAME]: "Reading documentation",
16344
- [agents_1.WDS_DOCS_SUBAGENT_NAME]: "Reading documentation"
16281
+ [subagents_1.VALIDATOR_SUBAGENT_NAME]: "Building project",
16282
+ [subagents_1.WIX_DOCS_SUBAGENT_NAME]: "Reading documentation",
16283
+ [subagents_1.WDS_DOCS_SUBAGENT_NAME]: "Reading documentation"
16345
16284
  };
16346
16285
  var REGISTRY_FILE_PATTERN = /(^|\/)extensions\.ts$/;
16347
16286
  var EXTENSION_DEFINITION_PATTERN = /\.extension\.ts$/;
@@ -16349,7 +16288,7 @@ var require_derived_progress = __commonJS({
16349
16288
  return token.replace(/[_-]+/g, " ").replace(/([a-z\d])([A-Z])/g, "$1 $2").split(/\s+/).filter(Boolean).map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(" ");
16350
16289
  }
16351
16290
  function humanizeExtensionType(type) {
16352
- return (0, constants_1.isSpiExtension)(type) ? "Service Plugin" : toTitleCaseWords(type);
16291
+ return (0, detect_1.isSpiExtension)(type) ? "Service Plugin" : toTitleCaseWords(type);
16353
16292
  }
16354
16293
  function extensionStep(verb, type) {
16355
16294
  return `${verb} ${humanizeExtensionType(type)}`;
@@ -16398,7 +16337,7 @@ var require_derived_progress = __commonJS({
16398
16337
  if (REGISTRY_FILE_PATTERN.test(file.path)) {
16399
16338
  steps.push("Registering extensions");
16400
16339
  } else if (EXTENSION_DEFINITION_PATTERN.test(file.path) && file.content) {
16401
- const type = (0, constants_1.detectExtension)(file.content);
16340
+ const type = (0, detect_1.detectExtension)(file.content);
16402
16341
  if (type)
16403
16342
  steps.push(extensionStep("Editing", type));
16404
16343
  }
@@ -16505,9 +16444,9 @@ var require_utils9 = __commonJS({
16505
16444
  }
16506
16445
  });
16507
16446
 
16508
- // dist/plugins-runtime.js
16447
+ // dist/plugin-system/plugins-runtime.js
16509
16448
  var require_plugins_runtime = __commonJS({
16510
- "dist/plugins-runtime.js"(exports2) {
16449
+ "dist/plugin-system/plugins-runtime.js"(exports2) {
16511
16450
  "use strict";
16512
16451
  Object.defineProperty(exports2, "__esModule", { value: true });
16513
16452
  exports2.getActivePlugins = getActivePlugins;
@@ -16657,15 +16596,15 @@ var require_task_tracker2 = __commonJS({
16657
16596
  }
16658
16597
  });
16659
16598
 
16660
- // dist/opencode-integration/tool-usage.js
16599
+ // dist/opencode-integration/execution/tool-usage.js
16661
16600
  var require_tool_usage = __commonJS({
16662
- "dist/opencode-integration/tool-usage.js"(exports2) {
16601
+ "dist/opencode-integration/execution/tool-usage.js"(exports2) {
16663
16602
  "use strict";
16664
16603
  Object.defineProperty(exports2, "__esModule", { value: true });
16665
16604
  exports2.ToolUsageCollector = void 0;
16666
16605
  exports2.commandSignature = commandSignature;
16667
16606
  exports2.emptyToolUsage = emptyToolUsage;
16668
- var subagent_tool_logger_12 = require_subagent_tool_logger();
16607
+ var subagent_tool_logger_1 = require_subagent_tool_logger();
16669
16608
  var MAX_REPORTED_TOOLS = 50;
16670
16609
  var MAX_DETAIL_CHARS = 200;
16671
16610
  var MAX_DETAIL_LABELS = 2;
@@ -16702,7 +16641,7 @@ var require_tool_usage = __commonJS({
16702
16641
  return duration > 0 ? duration : 0;
16703
16642
  }
16704
16643
  function isCompletedToolCall(event) {
16705
- if (event.type !== "tool_use" && event.type !== subagent_tool_logger_12.SUBAGENT_TOOL_EVENT_TYPE) {
16644
+ if (event.type !== "tool_use" && event.type !== subagent_tool_logger_1.SUBAGENT_TOOL_EVENT_TYPE) {
16706
16645
  return false;
16707
16646
  }
16708
16647
  if (!event.part?.tool)
@@ -16758,18 +16697,18 @@ var require_tool_usage = __commonJS({
16758
16697
  }
16759
16698
  });
16760
16699
 
16761
- // dist/opencode-integration/process-manager.js
16700
+ // dist/opencode-integration/execution/process-manager.js
16762
16701
  var require_process_manager = __commonJS({
16763
- "dist/opencode-integration/process-manager.js"(exports2) {
16702
+ "dist/opencode-integration/execution/process-manager.js"(exports2) {
16764
16703
  "use strict";
16765
16704
  Object.defineProperty(exports2, "__esModule", { value: true });
16766
- exports2.MAX_STARTS_WITHOUT_FINISH = exports2.KILL_GRACE_PERIOD_MS = exports2.IDLE_CHECK_INTERVAL_MS = exports2.IDLE_TIMEOUT_MS = void 0;
16705
+ exports2.MAX_STARTS_WITHOUT_FINISH = exports2.IDLE_CHECK_INTERVAL_MS = exports2.IDLE_TIMEOUT_MS = void 0;
16767
16706
  exports2.clearTimers = clearTimers;
16768
16707
  exports2.killProcess = killProcess;
16769
16708
  var logger_12 = require_logger();
16770
16709
  exports2.IDLE_TIMEOUT_MS = 6e5;
16771
16710
  exports2.IDLE_CHECK_INTERVAL_MS = 15e3;
16772
- exports2.KILL_GRACE_PERIOD_MS = 5e3;
16711
+ var KILL_GRACE_PERIOD_MS = 5e3;
16773
16712
  exports2.MAX_STARTS_WITHOUT_FINISH = 3;
16774
16713
  function clearTimers(timers) {
16775
16714
  if (timers.timeoutId) {
@@ -16805,14 +16744,14 @@ var require_process_manager = __commonJS({
16805
16744
  if (child && !resolved) {
16806
16745
  killSignal("SIGKILL");
16807
16746
  }
16808
- }, exports2.KILL_GRACE_PERIOD_MS);
16747
+ }, KILL_GRACE_PERIOD_MS);
16809
16748
  }
16810
16749
  }
16811
16750
  });
16812
16751
 
16813
- // dist/opencode-integration/result-builder.js
16752
+ // dist/opencode-integration/execution/result-builder.js
16814
16753
  var require_result_builder = __commonJS({
16815
- "dist/opencode-integration/result-builder.js"(exports2) {
16754
+ "dist/opencode-integration/execution/result-builder.js"(exports2) {
16816
16755
  "use strict";
16817
16756
  Object.defineProperty(exports2, "__esModule", { value: true });
16818
16757
  exports2.createTimeoutResult = createTimeoutResult;
@@ -16880,9 +16819,9 @@ var require_result_builder = __commonJS({
16880
16819
  }
16881
16820
  });
16882
16821
 
16883
- // dist/opencode-integration/process-handlers.js
16822
+ // dist/opencode-integration/execution/process-handlers.js
16884
16823
  var require_process_handlers = __commonJS({
16885
- "dist/opencode-integration/process-handlers.js"(exports2) {
16824
+ "dist/opencode-integration/execution/process-handlers.js"(exports2) {
16886
16825
  "use strict";
16887
16826
  Object.defineProperty(exports2, "__esModule", { value: true });
16888
16827
  exports2.setupTotalTimeout = setupTotalTimeout;
@@ -17012,12 +16951,11 @@ var require_process_handlers = __commonJS({
17012
16951
  }
17013
16952
  });
17014
16953
 
17015
- // dist/opencode-integration/executor.js
16954
+ // dist/opencode-integration/execution/executor.js
17016
16955
  var require_executor = __commonJS({
17017
- "dist/opencode-integration/executor.js"(exports2) {
16956
+ "dist/opencode-integration/execution/executor.js"(exports2) {
17018
16957
  "use strict";
17019
16958
  Object.defineProperty(exports2, "__esModule", { value: true });
17020
- exports2.notifyValidatorOutputsToSlack = notifyValidatorOutputsToSlack;
17021
16959
  exports2.classifyAttempt = classifyAttempt;
17022
16960
  exports2.executeOpenCode = executeOpenCode;
17023
16961
  exports2.resolveFinalRunCost = resolveFinalRunCost;
@@ -17027,9 +16965,8 @@ var require_executor = __commonJS({
17027
16965
  var model_knobs_1 = require_model_knobs();
17028
16966
  var job_context_storage_12 = require_job_context_storage();
17029
16967
  var parser_1 = require_parser();
17030
- var codeGenerationService_12 = require_codeGenerationService();
17031
16968
  var prompts_1 = require_prompts();
17032
- var git_file_changes_1 = require_git_file_changes();
16969
+ var file_changes_1 = require_file_changes();
17033
16970
  var cost_tracker_1 = require_cost_tracker();
17034
16971
  var task_tracker_1 = require_task_tracker2();
17035
16972
  var tool_usage_1 = require_tool_usage();
@@ -17038,37 +16975,6 @@ var require_executor = __commonJS({
17038
16975
  var logger_12 = require_logger();
17039
16976
  var MAX_RETRIES = 5;
17040
16977
  var MAX_STALL_ATTEMPTS = 2;
17041
- async function notifyValidatorOutputsToSlack(stdout, costUsd) {
17042
- try {
17043
- const store = job_context_storage_12.jobContextStorage.getStore();
17044
- const outputs = (0, parser_1.parseValidatorTaskOutputs)(stdout);
17045
- if (outputs.length === 0)
17046
- return;
17047
- const durationMs = store?.flowStartTime ? Date.now() - store.flowStartTime : void 0;
17048
- const context = {
17049
- jobId: store?.jobId,
17050
- metasiteId: store?.metasiteId,
17051
- costUsd: costUsd > 0 ? costUsd : void 0,
17052
- durationMs
17053
- };
17054
- for (const output of outputs) {
17055
- if (!(0, parser_1.shouldReportValidatorOutput)(output)) {
17056
- continue;
17057
- }
17058
- try {
17059
- await codeGenerationService_12.codeGenerationService.handleValidationErrors(output, context);
17060
- } catch (err) {
17061
- logger_12.logger.warn("[OpenCode] Failed to report validator output to Slack", {
17062
- error: err instanceof Error ? err.message : String(err)
17063
- });
17064
- }
17065
- }
17066
- } catch (err) {
17067
- logger_12.logger.warn("[OpenCode] Unexpected error in notifyValidatorOutputsToSlack", {
17068
- error: err instanceof Error ? err.message : String(err)
17069
- });
17070
- }
17071
- }
17072
16978
  function failureReason(result) {
17073
16979
  if (result.stalled)
17074
16980
  return "stall";
@@ -17105,7 +17011,7 @@ var require_executor = __commonJS({
17105
17011
  if (attempt > 1) {
17106
17012
  const failureDetail = lastResult?.error?.message || lastResult?.stderr || "Process timed out";
17107
17013
  logger_12.logger.info(`[OpenCode] Retry attempt ${attempt}/${MAX_RETRIES} after ${lastFailureReason} - starting fresh session with recovery context`, { reason: lastFailureReason, detail: failureDetail.slice(0, 500) });
17108
- const filesChanged = await (0, git_file_changes_1.collectGitFileChanges)(options.outputPath, options.gitBaseline);
17014
+ const filesChanged = await (0, file_changes_1.collectGitFileChanges)(options.outputPath, options.gitBaseline);
17109
17015
  currentPrompt = (0, prompts_1.buildRecoveryPrompt)(options.prompt, filesChanged, failureDetail, lastFailureReason);
17110
17016
  continueSession = false;
17111
17017
  }
@@ -17259,9 +17165,9 @@ var require_executor = __commonJS({
17259
17165
  }
17260
17166
  });
17261
17167
 
17262
- // dist/opencode-integration/opencode-runner.js
17168
+ // dist/opencode-integration/execution/opencode-runner.js
17263
17169
  var require_opencode_runner = __commonJS({
17264
- "dist/opencode-integration/opencode-runner.js"(exports2) {
17170
+ "dist/opencode-integration/execution/opencode-runner.js"(exports2) {
17265
17171
  "use strict";
17266
17172
  Object.defineProperty(exports2, "__esModule", { value: true });
17267
17173
  exports2.runOpenCodeInit = runOpenCodeInit;
@@ -17330,20 +17236,106 @@ var require_opencode_runner = __commonJS({
17330
17236
  }
17331
17237
  });
17332
17238
 
17333
- // dist/opencode-integration/extension-metadata.js
17334
- var require_extension_metadata = __commonJS({
17335
- "dist/opencode-integration/extension-metadata.js"(exports2) {
17239
+ // dist/opencode-integration/index.js
17240
+ var require_opencode_integration = __commonJS({
17241
+ "dist/opencode-integration/index.js"(exports2) {
17242
+ "use strict";
17243
+ Object.defineProperty(exports2, "__esModule", { value: true });
17244
+ exports2.OpenCodeTaskTracker = exports2.runOpenCodeGitConflicts = exports2.runOpenCodeAsk = exports2.runOpenCodeIteration = exports2.runOpenCodeInit = void 0;
17245
+ var opencode_runner_1 = require_opencode_runner();
17246
+ Object.defineProperty(exports2, "runOpenCodeInit", { enumerable: true, get: function() {
17247
+ return opencode_runner_1.runOpenCodeInit;
17248
+ } });
17249
+ Object.defineProperty(exports2, "runOpenCodeIteration", { enumerable: true, get: function() {
17250
+ return opencode_runner_1.runOpenCodeIteration;
17251
+ } });
17252
+ Object.defineProperty(exports2, "runOpenCodeAsk", { enumerable: true, get: function() {
17253
+ return opencode_runner_1.runOpenCodeAsk;
17254
+ } });
17255
+ Object.defineProperty(exports2, "runOpenCodeGitConflicts", { enumerable: true, get: function() {
17256
+ return opencode_runner_1.runOpenCodeGitConflicts;
17257
+ } });
17258
+ var task_tracker_1 = require_task_tracker2();
17259
+ Object.defineProperty(exports2, "OpenCodeTaskTracker", { enumerable: true, get: function() {
17260
+ return task_tracker_1.OpenCodeTaskTracker;
17261
+ } });
17262
+ }
17263
+ });
17264
+
17265
+ // dist/orchestrators/opencode-orchestrator.js
17266
+ var require_opencode_orchestrator = __commonJS({
17267
+ "dist/orchestrators/opencode-orchestrator.js"(exports2) {
17268
+ "use strict";
17269
+ Object.defineProperty(exports2, "__esModule", { value: true });
17270
+ exports2.OpenCodeOrchestrator = void 0;
17271
+ var ditto_codegen_types_12 = require_dist4();
17272
+ var DittoEventEmitter_1 = require_DittoEventEmitter();
17273
+ var opencode_integration_1 = require_opencode_integration();
17274
+ var logger_12 = require_logger();
17275
+ var OpenCodeOrchestrator = class extends DittoEventEmitter_1.DittoEventEmitter {
17276
+ constructor() {
17277
+ super();
17278
+ }
17279
+ async generateCode(request) {
17280
+ const { blueprint, outputPath, projectId, chatHistory, gitBaseline } = request;
17281
+ this.emitEvent("start:init", {
17282
+ appName: blueprint.appName ?? "",
17283
+ summary: blueprint.summary ?? "",
17284
+ outputPath,
17285
+ extensionsCount: blueprint.extensions?.length || 0
17286
+ });
17287
+ const start = Date.now();
17288
+ this.emitEvent("opencode:start", { outputPath });
17289
+ const result = await (0, opencode_integration_1.runOpenCodeInit)({
17290
+ blueprint,
17291
+ outputPath,
17292
+ projectId,
17293
+ chatHistory,
17294
+ gitBaseline,
17295
+ onStdout: (data) => {
17296
+ this.emitEvent("opencode:output", { data });
17297
+ },
17298
+ onStderr: (data) => {
17299
+ logger_12.logger.error("[OpenCode] stderr", { output: data });
17300
+ }
17301
+ });
17302
+ this.lastUsage = result.usage;
17303
+ this.lastStdout = result.stdout;
17304
+ const durationMs = Date.now() - start;
17305
+ if (!result.success) {
17306
+ this.emitEvent("opencode:error", {
17307
+ error: result.error?.message,
17308
+ exitCode: result.exitCode,
17309
+ durationMs
17310
+ });
17311
+ throw result.error ?? new ditto_codegen_types_12.ProcessExecutionError(`Code generation failed (exit code ${result.exitCode})`, {
17312
+ processType: ditto_codegen_types_12.ProcessType.EXECUTION,
17313
+ exitCode: result.exitCode ?? void 0
17314
+ });
17315
+ }
17316
+ this.emitEvent("opencode:done", { durationMs });
17317
+ this.emitEvent("finish:init", { outputPath, durationMs });
17318
+ return result;
17319
+ }
17320
+ };
17321
+ exports2.OpenCodeOrchestrator = OpenCodeOrchestrator;
17322
+ OpenCodeOrchestrator.DEFAULT_OUTPUT_PATH = "generated-app";
17323
+ }
17324
+ });
17325
+
17326
+ // dist/extension-reporting/metadata.js
17327
+ var require_metadata = __commonJS({
17328
+ "dist/extension-reporting/metadata.js"(exports2) {
17336
17329
  "use strict";
17337
17330
  Object.defineProperty(exports2, "__esModule", { value: true });
17338
- exports2.buildJobExtension = exports2.resolveFilePath = exports2.isFileInExtensionFolder = exports2.getExtensionDirectory = void 0;
17331
+ exports2.buildJobExtension = exports2.resolveFilePath = exports2.isFileInExtensionFolder = void 0;
17339
17332
  exports2.collectDataCollectionEntries = collectDataCollectionEntries;
17340
17333
  var path_12 = require("path");
17341
17334
  var promises_1 = require("fs/promises");
17342
- var constants_1 = require_constants5();
17335
+ var detect_1 = require_detect();
17343
17336
  var DATA_COLLECTION_MARKER = /import\s+(?:type\s+)?\{[^}]*\bDataCollection\b[^}]*\}\s+from\s+['"](?:@wix\/astro\/builders|@wix\/custom-extensions)['"]/;
17344
17337
  var getExtensionDirectory = (extensionDefinitionPath) => `${path_12.posix.dirname(extensionDefinitionPath)}/`;
17345
- exports2.getExtensionDirectory = getExtensionDirectory;
17346
- var isFileInExtensionFolder = (filePath, extensionDefinitionPath) => filePath === extensionDefinitionPath || filePath.startsWith((0, exports2.getExtensionDirectory)(extensionDefinitionPath));
17338
+ var isFileInExtensionFolder = (filePath, extensionDefinitionPath) => filePath === extensionDefinitionPath || filePath.startsWith(getExtensionDirectory(extensionDefinitionPath));
17347
17339
  exports2.isFileInExtensionFolder = isFileInExtensionFolder;
17348
17340
  var resolveFilePath = (outputPath, filePath) => (0, path_12.isAbsolute)(filePath) ? filePath : (0, path_12.join)(outputPath, filePath);
17349
17341
  exports2.resolveFilePath = resolveFilePath;
@@ -17365,51 +17357,51 @@ var require_extension_metadata = __commonJS({
17365
17357
  return entries;
17366
17358
  }
17367
17359
  var buildJobExtension = (definitionPath, extensionType, contentForTitle, titlePath, files) => {
17368
- const routePath = (0, constants_1.matchQuotedExtensionConfigProperty)(contentForTitle, "routePath");
17369
- const id = (0, constants_1.matchQuotedExtensionConfigProperty)(contentForTitle, "id");
17360
+ const routePath = (0, detect_1.matchQuotedExtensionConfigProperty)(contentForTitle, "routePath");
17361
+ const id = (0, detect_1.matchQuotedExtensionConfigProperty)(contentForTitle, "id");
17370
17362
  return {
17371
17363
  path: definitionPath,
17372
17364
  extensionType,
17373
- title: (0, constants_1.extractExtensionDisplayTitle)(contentForTitle, titlePath),
17365
+ title: (0, detect_1.extractExtensionDisplayTitle)(contentForTitle, titlePath),
17374
17366
  ...routePath !== null && { routePath },
17375
17367
  ...id !== null && { id },
17376
17368
  files: [...files],
17377
- isSpi: (0, constants_1.isSpiExtension)(extensionType)
17369
+ isSpi: (0, detect_1.isSpiExtension)(extensionType)
17378
17370
  };
17379
17371
  };
17380
17372
  exports2.buildJobExtension = buildJobExtension;
17381
17373
  }
17382
17374
  });
17383
17375
 
17384
- // dist/opencode-integration/collect-extensions-created.js
17385
- var require_collect_extensions_created = __commonJS({
17386
- "dist/opencode-integration/collect-extensions-created.js"(exports2) {
17376
+ // dist/extension-reporting/collect-created.js
17377
+ var require_collect_created = __commonJS({
17378
+ "dist/extension-reporting/collect-created.js"(exports2) {
17387
17379
  "use strict";
17388
17380
  Object.defineProperty(exports2, "__esModule", { value: true });
17389
17381
  exports2.collectInsertedExtensionsMetadata = collectInsertedExtensionsMetadata;
17390
17382
  var promises_1 = require("fs/promises");
17391
17383
  var ditto_codegen_types_12 = require_dist4();
17392
- var constants_1 = require_constants5();
17393
- var extension_metadata_1 = require_extension_metadata();
17384
+ var detect_1 = require_detect();
17385
+ var metadata_1 = require_metadata();
17394
17386
  async function collectInsertedExtensionsMetadata(outputPath, files) {
17395
17387
  const results = [];
17396
17388
  for (const fileChange of files) {
17397
17389
  if (fileChange.operation !== ditto_codegen_types_12.ExtensionGenerationOperation.INSERT)
17398
17390
  continue;
17399
- if (!(0, constants_1.isExtensionsFile)(fileChange.path))
17391
+ if (!(0, detect_1.isExtensionsFile)(fileChange.path))
17400
17392
  continue;
17401
17393
  try {
17402
- const content = await (0, promises_1.readFile)((0, extension_metadata_1.resolveFilePath)(outputPath, fileChange.path), "utf-8");
17403
- const extensionType = (0, constants_1.detectExtension)(content);
17394
+ const content = await (0, promises_1.readFile)((0, metadata_1.resolveFilePath)(outputPath, fileChange.path), "utf-8");
17395
+ const extensionType = (0, detect_1.detectExtension)(content);
17404
17396
  if (!extensionType)
17405
17397
  continue;
17406
- const folderFiles = files.filter((file) => (0, extension_metadata_1.isFileInExtensionFolder)(file.path, fileChange.path));
17398
+ const folderFiles = files.filter((file) => (0, metadata_1.isFileInExtensionFolder)(file.path, fileChange.path));
17407
17399
  if (extensionType === "dataCollections") {
17408
- const dataCollectionEntries = await (0, extension_metadata_1.collectDataCollectionEntries)(outputPath, fileChange.path, folderFiles);
17400
+ const dataCollectionEntries = await (0, metadata_1.collectDataCollectionEntries)(outputPath, fileChange.path, folderFiles);
17409
17401
  results.push(...dataCollectionEntries);
17410
17402
  continue;
17411
17403
  }
17412
- results.push((0, extension_metadata_1.buildJobExtension)(fileChange.path, extensionType, content, fileChange.path, folderFiles));
17404
+ results.push((0, metadata_1.buildJobExtension)(fileChange.path, extensionType, content, fileChange.path, folderFiles));
17413
17405
  } catch {
17414
17406
  continue;
17415
17407
  }
@@ -17419,9 +17411,9 @@ var require_collect_extensions_created = __commonJS({
17419
17411
  }
17420
17412
  });
17421
17413
 
17422
- // dist/opencode-integration/collect-extensions-updated.js
17423
- var require_collect_extensions_updated = __commonJS({
17424
- "dist/opencode-integration/collect-extensions-updated.js"(exports2) {
17414
+ // dist/extension-reporting/collect-updated.js
17415
+ var require_collect_updated = __commonJS({
17416
+ "dist/extension-reporting/collect-updated.js"(exports2) {
17425
17417
  "use strict";
17426
17418
  Object.defineProperty(exports2, "__esModule", { value: true });
17427
17419
  exports2.collectUpdatedExtensionsMetadata = collectUpdatedExtensionsMetadata;
@@ -17429,12 +17421,12 @@ var require_collect_extensions_updated = __commonJS({
17429
17421
  var path_12 = require("path");
17430
17422
  var util_1 = require("util");
17431
17423
  var promises_1 = require("fs/promises");
17432
- var constants_1 = require_constants5();
17424
+ var detect_1 = require_detect();
17433
17425
  var logger_12 = require_logger();
17434
- var extension_metadata_1 = require_extension_metadata();
17426
+ var metadata_1 = require_metadata();
17435
17427
  var execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
17436
17428
  var ownsItsFolder = (candidate) => {
17437
- if (!(0, constants_1.isExtensionsFile)(candidate))
17429
+ if (!(0, detect_1.isExtensionsFile)(candidate))
17438
17430
  return false;
17439
17431
  const directory = path_12.posix.dirname(candidate);
17440
17432
  return directory !== "." && path_12.posix.dirname(directory) !== ".";
@@ -17454,7 +17446,7 @@ var require_collect_extensions_updated = __commonJS({
17454
17446
  }
17455
17447
  }
17456
17448
  var resolveOwningDefinitionPath = (filePath, candidates) => {
17457
- if ((0, constants_1.isExtensionsFile)(filePath))
17449
+ if ((0, detect_1.isExtensionsFile)(filePath))
17458
17450
  return filePath;
17459
17451
  let longest;
17460
17452
  let longestFolderLength = -1;
@@ -17470,146 +17462,51 @@ var require_collect_extensions_updated = __commonJS({
17470
17462
  async function collectUpdatedExtensionsMetadata(outputPath, files, insertedDefinitionPaths) {
17471
17463
  const candidates = await listCandidateDefinitionPaths(outputPath);
17472
17464
  const definitionPaths = /* @__PURE__ */ new Set();
17473
- for (const fileChange of files) {
17474
- const definitionPath = resolveOwningDefinitionPath(fileChange.path, candidates);
17475
- if (definitionPath && !insertedDefinitionPaths.has(definitionPath)) {
17476
- definitionPaths.add(definitionPath);
17477
- }
17478
- }
17479
- const results = [];
17480
- for (const definitionPath of definitionPaths) {
17481
- try {
17482
- const content = await (0, promises_1.readFile)((0, extension_metadata_1.resolveFilePath)(outputPath, definitionPath), "utf-8");
17483
- const extensionType = (0, constants_1.detectExtension)(content);
17484
- if (!extensionType)
17485
- continue;
17486
- const folderFiles = files.filter((file) => (0, extension_metadata_1.isFileInExtensionFolder)(file.path, definitionPath));
17487
- if (extensionType === "dataCollections") {
17488
- const dataCollectionEntries = await (0, extension_metadata_1.collectDataCollectionEntries)(outputPath, definitionPath, folderFiles);
17489
- results.push(...dataCollectionEntries);
17490
- continue;
17491
- }
17492
- results.push((0, extension_metadata_1.buildJobExtension)(definitionPath, extensionType, content, definitionPath, folderFiles));
17493
- } catch {
17494
- continue;
17495
- }
17496
- }
17497
- return results;
17498
- }
17499
- }
17500
- });
17501
-
17502
- // dist/opencode-integration/extensions-job-payload.js
17503
- var require_extensions_job_payload = __commonJS({
17504
- "dist/opencode-integration/extensions-job-payload.js"(exports2) {
17505
- "use strict";
17506
- Object.defineProperty(exports2, "__esModule", { value: true });
17507
- exports2.buildExtensionsJobPayload = buildExtensionsJobPayload;
17508
- var ditto_codegen_types_12 = require_dist4();
17509
- var constants_1 = require_constants5();
17510
- var collect_extensions_created_1 = require_collect_extensions_created();
17511
- var collect_extensions_updated_1 = require_collect_extensions_updated();
17512
- async function buildExtensionsJobPayload(outputPath, files) {
17513
- const created = await (0, collect_extensions_created_1.collectInsertedExtensionsMetadata)(outputPath, files);
17514
- const insertedDefinitionPaths = new Set(files.filter((file) => file.operation === ditto_codegen_types_12.ExtensionGenerationOperation.INSERT && (0, constants_1.isExtensionsFile)(file.path)).map((file) => file.path));
17515
- const updated = await (0, collect_extensions_updated_1.collectUpdatedExtensionsMetadata)(outputPath, files, insertedDefinitionPaths);
17516
- return { created, updated };
17517
- }
17518
- }
17519
- });
17520
-
17521
- // dist/opencode-integration/index.js
17522
- var require_opencode_integration = __commonJS({
17523
- "dist/opencode-integration/index.js"(exports2) {
17524
- "use strict";
17525
- Object.defineProperty(exports2, "__esModule", { value: true });
17526
- exports2.buildExtensionsJobPayload = exports2.collectInsertedExtensionsMetadata = exports2.OpenCodeTaskTracker = exports2.runOpenCodeGitConflicts = exports2.runOpenCodeAsk = exports2.runOpenCodeIteration = exports2.runOpenCodeInit = void 0;
17527
- var opencode_runner_1 = require_opencode_runner();
17528
- Object.defineProperty(exports2, "runOpenCodeInit", { enumerable: true, get: function() {
17529
- return opencode_runner_1.runOpenCodeInit;
17530
- } });
17531
- Object.defineProperty(exports2, "runOpenCodeIteration", { enumerable: true, get: function() {
17532
- return opencode_runner_1.runOpenCodeIteration;
17533
- } });
17534
- Object.defineProperty(exports2, "runOpenCodeAsk", { enumerable: true, get: function() {
17535
- return opencode_runner_1.runOpenCodeAsk;
17536
- } });
17537
- Object.defineProperty(exports2, "runOpenCodeGitConflicts", { enumerable: true, get: function() {
17538
- return opencode_runner_1.runOpenCodeGitConflicts;
17539
- } });
17540
- var task_tracker_1 = require_task_tracker2();
17541
- Object.defineProperty(exports2, "OpenCodeTaskTracker", { enumerable: true, get: function() {
17542
- return task_tracker_1.OpenCodeTaskTracker;
17543
- } });
17544
- var collect_extensions_created_1 = require_collect_extensions_created();
17545
- Object.defineProperty(exports2, "collectInsertedExtensionsMetadata", { enumerable: true, get: function() {
17546
- return collect_extensions_created_1.collectInsertedExtensionsMetadata;
17547
- } });
17548
- var extensions_job_payload_1 = require_extensions_job_payload();
17549
- Object.defineProperty(exports2, "buildExtensionsJobPayload", { enumerable: true, get: function() {
17550
- return extensions_job_payload_1.buildExtensionsJobPayload;
17551
- } });
17465
+ for (const fileChange of files) {
17466
+ const definitionPath = resolveOwningDefinitionPath(fileChange.path, candidates);
17467
+ if (definitionPath && !insertedDefinitionPaths.has(definitionPath)) {
17468
+ definitionPaths.add(definitionPath);
17469
+ }
17470
+ }
17471
+ const results = [];
17472
+ for (const definitionPath of definitionPaths) {
17473
+ try {
17474
+ const content = await (0, promises_1.readFile)((0, metadata_1.resolveFilePath)(outputPath, definitionPath), "utf-8");
17475
+ const extensionType = (0, detect_1.detectExtension)(content);
17476
+ if (!extensionType)
17477
+ continue;
17478
+ const folderFiles = files.filter((file) => (0, metadata_1.isFileInExtensionFolder)(file.path, definitionPath));
17479
+ if (extensionType === "dataCollections") {
17480
+ const dataCollectionEntries = await (0, metadata_1.collectDataCollectionEntries)(outputPath, definitionPath, folderFiles);
17481
+ results.push(...dataCollectionEntries);
17482
+ continue;
17483
+ }
17484
+ results.push((0, metadata_1.buildJobExtension)(definitionPath, extensionType, content, definitionPath, folderFiles));
17485
+ } catch {
17486
+ continue;
17487
+ }
17488
+ }
17489
+ return results;
17490
+ }
17552
17491
  }
17553
17492
  });
17554
17493
 
17555
- // dist/OpenCodeOrchestrator.js
17556
- var require_OpenCodeOrchestrator = __commonJS({
17557
- "dist/OpenCodeOrchestrator.js"(exports2) {
17494
+ // dist/extension-reporting/job-payload.js
17495
+ var require_job_payload2 = __commonJS({
17496
+ "dist/extension-reporting/job-payload.js"(exports2) {
17558
17497
  "use strict";
17559
17498
  Object.defineProperty(exports2, "__esModule", { value: true });
17560
- exports2.OpenCodeOrchestrator = void 0;
17499
+ exports2.buildExtensionsJobPayload = buildExtensionsJobPayload;
17561
17500
  var ditto_codegen_types_12 = require_dist4();
17562
- var DittoEventEmitter_1 = require_DittoEventEmitter();
17563
- var opencode_integration_1 = require_opencode_integration();
17564
- var logger_12 = require_logger();
17565
- var OpenCodeOrchestrator = class extends DittoEventEmitter_1.DittoEventEmitter {
17566
- constructor() {
17567
- super();
17568
- }
17569
- async generateCode(request) {
17570
- const { blueprint, outputPath, projectId, chatHistory, gitBaseline } = request;
17571
- this.emitEvent("start:init", {
17572
- appName: blueprint.appName ?? "",
17573
- summary: blueprint.summary ?? "",
17574
- outputPath,
17575
- extensionsCount: blueprint.extensions?.length || 0
17576
- });
17577
- const start = Date.now();
17578
- this.emitEvent("opencode:start", { outputPath });
17579
- const result = await (0, opencode_integration_1.runOpenCodeInit)({
17580
- blueprint,
17581
- outputPath,
17582
- projectId,
17583
- chatHistory,
17584
- gitBaseline,
17585
- onStdout: (data) => {
17586
- this.emitEvent("opencode:output", { data });
17587
- },
17588
- onStderr: (data) => {
17589
- logger_12.logger.error("[OpenCode] stderr", { output: data });
17590
- }
17591
- });
17592
- this.lastUsage = result.usage;
17593
- this.lastStdout = result.stdout;
17594
- const durationMs = Date.now() - start;
17595
- if (!result.success) {
17596
- this.emitEvent("opencode:error", {
17597
- error: result.error?.message,
17598
- exitCode: result.exitCode,
17599
- durationMs
17600
- });
17601
- throw result.error ?? new ditto_codegen_types_12.ProcessExecutionError(`Code generation failed (exit code ${result.exitCode})`, {
17602
- processType: ditto_codegen_types_12.ProcessType.EXECUTION,
17603
- exitCode: result.exitCode ?? void 0
17604
- });
17605
- }
17606
- this.emitEvent("opencode:done", { durationMs });
17607
- this.emitEvent("finish:init", { outputPath, durationMs });
17608
- return result;
17609
- }
17610
- };
17611
- exports2.OpenCodeOrchestrator = OpenCodeOrchestrator;
17612
- OpenCodeOrchestrator.DEFAULT_OUTPUT_PATH = "generated-app";
17501
+ var detect_1 = require_detect();
17502
+ var collect_created_1 = require_collect_created();
17503
+ var collect_updated_1 = require_collect_updated();
17504
+ async function buildExtensionsJobPayload(outputPath, files) {
17505
+ const created = await (0, collect_created_1.collectInsertedExtensionsMetadata)(outputPath, files);
17506
+ const insertedDefinitionPaths = new Set(files.filter((file) => file.operation === ditto_codegen_types_12.ExtensionGenerationOperation.INSERT && (0, detect_1.isExtensionsFile)(file.path)).map((file) => file.path));
17507
+ const updated = await (0, collect_updated_1.collectUpdatedExtensionsMetadata)(outputPath, files, insertedDefinitionPaths);
17508
+ return { created, updated };
17509
+ }
17613
17510
  }
17614
17511
  });
17615
17512
 
@@ -17687,8 +17584,8 @@ var require_codegen_flow_helpers = __commonJS({
17687
17584
  exports2.getOutputPath = getOutputPath;
17688
17585
  var path_12 = __importDefault2(require("path"));
17689
17586
  var codeGenerationService_12 = require_codeGenerationService();
17690
- var git_file_changes_1 = require_git_file_changes();
17691
- var extensions_job_payload_1 = require_extensions_job_payload();
17587
+ var file_changes_1 = require_file_changes();
17588
+ var job_payload_1 = require_job_payload2();
17692
17589
  var agent_io_1 = require_agent_io();
17693
17590
  var utils_12 = require_utils9();
17694
17591
  var DEFAULT_OUTPUT_PATH = "generated-app";
@@ -17696,8 +17593,8 @@ var require_codegen_flow_helpers = __commonJS({
17696
17593
  await codeGenerationService_12.codeGenerationService.updateJob(jobContext.jobId, payload);
17697
17594
  }
17698
17595
  async function buildFailedRunPayload(error, outputPath, gitBaseline) {
17699
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
17700
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
17596
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
17597
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
17701
17598
  return {
17702
17599
  requiredPermissions: [],
17703
17600
  error,
@@ -17718,22 +17615,22 @@ var require_codegen_flow_helpers = __commonJS({
17718
17615
  }
17719
17616
  });
17720
17617
 
17721
- // dist/opencode-integration/inject-created-by.js
17618
+ // dist/extension-reporting/inject-created-by.js
17722
17619
  var require_inject_created_by = __commonJS({
17723
- "dist/opencode-integration/inject-created-by.js"(exports2) {
17620
+ "dist/extension-reporting/inject-created-by.js"(exports2) {
17724
17621
  "use strict";
17725
17622
  Object.defineProperty(exports2, "__esModule", { value: true });
17726
17623
  exports2.injectCreatedByIntoExtensionFiles = injectCreatedByIntoExtensionFiles;
17727
17624
  var promises_1 = require("fs/promises");
17728
17625
  var path_12 = require("path");
17729
17626
  var logger_12 = require_logger();
17730
- var constants_1 = require_constants5();
17627
+ var detect_1 = require_detect();
17731
17628
  async function injectCreatedByIntoExtensionFiles(cwd, createdExtensions) {
17732
17629
  for (const { path: filePath } of createdExtensions) {
17733
17630
  const absolutePath = (0, path_12.join)(cwd, filePath);
17734
17631
  try {
17735
17632
  const original = await (0, promises_1.readFile)(absolutePath, "utf-8");
17736
- const injected = (0, constants_1.injectCreatedBy)(original);
17633
+ const injected = (0, detect_1.injectCreatedBy)(original);
17737
17634
  if (injected !== original) {
17738
17635
  await (0, promises_1.writeFile)(absolutePath, injected, "utf-8");
17739
17636
  logger_12.logger.info("[OpenCode] Injected createdBy into extension file", {
@@ -22559,9 +22456,9 @@ var require_src2 = __commonJS({
22559
22456
  }
22560
22457
  });
22561
22458
 
22562
- // dist/biLogger.js
22563
- var require_biLogger = __commonJS({
22564
- "dist/biLogger.js"(exports2) {
22459
+ // dist/telemetry/bi-logger.js
22460
+ var require_bi_logger2 = __commonJS({
22461
+ "dist/telemetry/bi-logger.js"(exports2) {
22565
22462
  "use strict";
22566
22463
  var __importDefault2 = exports2 && exports2.__importDefault || function(mod) {
22567
22464
  return mod && mod.__esModule ? mod : { "default": mod };
@@ -22580,9 +22477,9 @@ var require_biLogger = __commonJS({
22580
22477
  }
22581
22478
  });
22582
22479
 
22583
- // dist/biEvents.js
22584
- var require_biEvents = __commonJS({
22585
- "dist/biEvents.js"(exports2) {
22480
+ // dist/telemetry/bi-events.js
22481
+ var require_bi_events = __commonJS({
22482
+ "dist/telemetry/bi-events.js"(exports2) {
22586
22483
  "use strict";
22587
22484
  Object.defineProperty(exports2, "__esModule", { value: true });
22588
22485
  exports2.reportSessionStart = reportSessionStart;
@@ -22591,7 +22488,7 @@ var require_biEvents = __commonJS({
22591
22488
  var v2_1 = require_v2();
22592
22489
  var v2_2 = require_v22();
22593
22490
  var types_1 = require_types_impl();
22594
- var biLogger_1 = require_biLogger();
22491
+ var bi_logger_1 = require_bi_logger2();
22595
22492
  var logger_12 = require_logger();
22596
22493
  var MAX_JOB_INPUT_LENGTH = 3e4;
22597
22494
  var TRUNCATION_SUFFIX = "\u2026";
@@ -22629,7 +22526,7 @@ var require_biEvents = __commonJS({
22629
22526
  if (report.environment === types_1.Environment.APP_BUILDER) {
22630
22527
  logger_12.logger.info("Reporting BI event 200 (session start)", devibeParams);
22631
22528
  try {
22632
- await biLogger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionStartSrc196Evid200)(devibeParams));
22529
+ await bi_logger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionStartSrc196Evid200)(devibeParams));
22633
22530
  } catch (err) {
22634
22531
  logger_12.logger.warn("BI event 200 report failed", { error: err });
22635
22532
  }
@@ -22647,7 +22544,7 @@ var require_biEvents = __commonJS({
22647
22544
  };
22648
22545
  logger_12.logger.info("Reporting BI event 299 (generic session start)", codegenAgentParams);
22649
22546
  try {
22650
- await biLogger_1.biLogger.report((0, v2_2.codegenAgentSessionStartSrc11Evid299)(codegenAgentParams));
22547
+ await bi_logger_1.biLogger.report((0, v2_2.codegenAgentSessionStartSrc11Evid299)(codegenAgentParams));
22651
22548
  } catch (err) {
22652
22549
  logger_12.logger.warn("BI event 299 report failed", { error: err });
22653
22550
  }
@@ -22674,7 +22571,7 @@ var require_biEvents = __commonJS({
22674
22571
  if (report.environment === types_1.Environment.APP_BUILDER) {
22675
22572
  logger_12.logger.info("Reporting BI event 201 (session end)", devibeParams);
22676
22573
  try {
22677
- await biLogger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionEndSrc196Evid201)(devibeParams));
22574
+ await bi_logger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionEndSrc196Evid201)(devibeParams));
22678
22575
  } catch (err) {
22679
22576
  logger_12.logger.warn("BI event 201 report failed", { error: err });
22680
22577
  }
@@ -22696,7 +22593,7 @@ var require_biEvents = __commonJS({
22696
22593
  };
22697
22594
  logger_12.logger.info("Reporting BI event 304 (generic session end)", codegenAgentParams);
22698
22595
  try {
22699
- await biLogger_1.biLogger.report((0, v2_2.codegenAgentSessionEndSrc11Evid304)(codegenAgentParams));
22596
+ await bi_logger_1.biLogger.report((0, v2_2.codegenAgentSessionEndSrc11Evid304)(codegenAgentParams));
22700
22597
  } catch (err) {
22701
22598
  logger_12.logger.warn("BI event 304 report failed", { error: err });
22702
22599
  }
@@ -22723,7 +22620,7 @@ var require_biEvents = __commonJS({
22723
22620
  if (report.environment === types_1.Environment.APP_BUILDER) {
22724
22621
  logger_12.logger.info("Reporting BI event 202 (session error)", devibeParams);
22725
22622
  try {
22726
- await biLogger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionErrorSrc196Evid202)(devibeParams));
22623
+ await bi_logger_1.biLogger.report((0, v2_1.devibeCodegenAgentSessionErrorSrc196Evid202)(devibeParams));
22727
22624
  } catch (err) {
22728
22625
  logger_12.logger.warn("BI event 202 report failed", { error: err });
22729
22626
  }
@@ -22746,7 +22643,7 @@ var require_biEvents = __commonJS({
22746
22643
  };
22747
22644
  logger_12.logger.info("Reporting BI event 305 (generic session error)", codegenAgentParams);
22748
22645
  try {
22749
- await biLogger_1.biLogger.report((0, v2_2.codegenAgentSessionErrorSrc11Evid305)(codegenAgentParams));
22646
+ await bi_logger_1.biLogger.report((0, v2_2.codegenAgentSessionErrorSrc11Evid305)(codegenAgentParams));
22750
22647
  } catch (err) {
22751
22648
  logger_12.logger.warn("BI event 305 report failed", { error: err });
22752
22649
  }
@@ -22754,9 +22651,53 @@ var require_biEvents = __commonJS({
22754
22651
  }
22755
22652
  });
22756
22653
 
22757
- // dist/opencode-integration/report-expensive-run.js
22758
- var require_report_expensive_run = __commonJS({
22759
- "dist/opencode-integration/report-expensive-run.js"(exports2) {
22654
+ // dist/opencode-integration/slack-reports/validator-outputs.js
22655
+ var require_validator_outputs = __commonJS({
22656
+ "dist/opencode-integration/slack-reports/validator-outputs.js"(exports2) {
22657
+ "use strict";
22658
+ Object.defineProperty(exports2, "__esModule", { value: true });
22659
+ exports2.notifyValidatorOutputsToSlack = notifyValidatorOutputsToSlack;
22660
+ var logger_12 = require_logger();
22661
+ var job_context_storage_12 = require_job_context_storage();
22662
+ var codeGenerationService_12 = require_codeGenerationService();
22663
+ var parser_1 = require_parser();
22664
+ async function notifyValidatorOutputsToSlack(stdout, costUsd) {
22665
+ try {
22666
+ const store = job_context_storage_12.jobContextStorage.getStore();
22667
+ const outputs = (0, parser_1.parseValidatorTaskOutputs)(stdout);
22668
+ if (outputs.length === 0)
22669
+ return;
22670
+ const durationMs = store?.flowStartTime ? Date.now() - store.flowStartTime : void 0;
22671
+ const context = {
22672
+ jobId: store?.jobId,
22673
+ metasiteId: store?.metasiteId,
22674
+ costUsd: costUsd > 0 ? costUsd : void 0,
22675
+ durationMs
22676
+ };
22677
+ for (const output of outputs) {
22678
+ if (!(0, parser_1.shouldReportValidatorOutput)(output)) {
22679
+ continue;
22680
+ }
22681
+ try {
22682
+ await codeGenerationService_12.codeGenerationService.handleValidationErrors(output, context);
22683
+ } catch (err) {
22684
+ logger_12.logger.warn("[OpenCode] Failed to report validator output to Slack", {
22685
+ error: err instanceof Error ? err.message : String(err)
22686
+ });
22687
+ }
22688
+ }
22689
+ } catch (err) {
22690
+ logger_12.logger.warn("[OpenCode] Unexpected error in notifyValidatorOutputsToSlack", {
22691
+ error: err instanceof Error ? err.message : String(err)
22692
+ });
22693
+ }
22694
+ }
22695
+ }
22696
+ });
22697
+
22698
+ // dist/opencode-integration/slack-reports/expensive-run.js
22699
+ var require_expensive_run = __commonJS({
22700
+ "dist/opencode-integration/slack-reports/expensive-run.js"(exports2) {
22760
22701
  "use strict";
22761
22702
  Object.defineProperty(exports2, "__esModule", { value: true });
22762
22703
  exports2.notifyExpensiveRunToSlack = notifyExpensiveRunToSlack;
@@ -22823,7 +22764,7 @@ var require_opencode_init = __commonJS({
22823
22764
  var codeGenerationService_12 = require_codeGenerationService();
22824
22765
  var cli_listeners_1 = require_cli_listeners();
22825
22766
  var job_context_storage_12 = require_job_context_storage();
22826
- var OpenCodeOrchestrator_1 = require_OpenCodeOrchestrator();
22767
+ var opencode_orchestrator_1 = require_opencode_orchestrator();
22827
22768
  var ditto_codegen_types_12 = require_dist4();
22828
22769
  var codegen_flow_helpers_12 = require_codegen_flow_helpers();
22829
22770
  var agent_io_1 = require_agent_io();
@@ -22832,12 +22773,12 @@ var require_opencode_init = __commonJS({
22832
22773
  var context_12 = require_context();
22833
22774
  var logger_12 = require_logger();
22834
22775
  var model_knobs_1 = require_model_knobs();
22835
- var git_file_changes_1 = require_git_file_changes();
22776
+ var file_changes_1 = require_file_changes();
22836
22777
  var inject_created_by_1 = require_inject_created_by();
22837
- var extensions_job_payload_1 = require_extensions_job_payload();
22838
- var biEvents_1 = require_biEvents();
22839
- var executor_1 = require_executor();
22840
- var report_expensive_run_1 = require_report_expensive_run();
22778
+ var job_payload_1 = require_job_payload2();
22779
+ var bi_events_1 = require_bi_events();
22780
+ var validator_outputs_1 = require_validator_outputs();
22781
+ var expensive_run_1 = require_expensive_run();
22841
22782
  var pre_run_decision_1 = require_pre_run_decision();
22842
22783
  var environments_12 = require_environments();
22843
22784
  var plugins_runtime_1 = require_plugins_runtime();
@@ -22864,16 +22805,16 @@ var require_opencode_init = __commonJS({
22864
22805
  logger_12.logger.info("[OpenCode Init] Starting task", { taskId });
22865
22806
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.RUNNING, {});
22866
22807
  logger_12.logger.info("[OpenCode Init] Marked task RUNNING", { taskId });
22867
- await (0, biEvents_1.reportSessionStart)({
22808
+ await (0, bi_events_1.reportSessionStart)({
22868
22809
  ...biBase,
22869
22810
  taskModel,
22870
22811
  taskType: kind,
22871
22812
  jobInput: userInput
22872
22813
  });
22873
22814
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
22874
- const gitBaseline = await (0, git_file_changes_1.captureGitBaseline)(outputPath);
22815
+ const gitBaseline = await (0, file_changes_1.captureGitBaseline)(outputPath);
22875
22816
  store.gitBaseline = gitBaseline;
22876
- const orchestrator = new OpenCodeOrchestrator_1.OpenCodeOrchestrator();
22817
+ const orchestrator = new opencode_orchestrator_1.OpenCodeOrchestrator();
22877
22818
  let caughtError;
22878
22819
  try {
22879
22820
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
@@ -22895,9 +22836,9 @@ var require_opencode_init = __commonJS({
22895
22836
  gitBaseline
22896
22837
  });
22897
22838
  store.lastAgentMessage = result.agentMessage;
22898
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
22839
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
22899
22840
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
22900
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
22841
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
22901
22842
  await (0, inject_created_by_1.injectCreatedByIntoExtensionFiles)(outputPath, extensions.created);
22902
22843
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
22903
22844
  requiredPermissions: result.requiredPermissions,
@@ -22913,8 +22854,8 @@ var require_opencode_init = __commonJS({
22913
22854
  requiredPermissions: result.requiredPermissions
22914
22855
  });
22915
22856
  if (orchestrator.lastStdout && !(0, model_knobs_1.hasModelOverride)() && !(0, model_knobs_1.hasSmallModelOverride)()) {
22916
- void (0, executor_1.notifyValidatorOutputsToSlack)(orchestrator.lastStdout, result.usage.cost);
22917
- void (0, report_expensive_run_1.notifyExpensiveRunToSlack)({
22857
+ void (0, validator_outputs_1.notifyValidatorOutputsToSlack)(orchestrator.lastStdout, result.usage.cost);
22858
+ void (0, expensive_run_1.notifyExpensiveRunToSlack)({
22918
22859
  usage: result.usage,
22919
22860
  durationMs: Date.now() - flowStartTime,
22920
22861
  agentMessage: result.agentMessage,
@@ -22924,7 +22865,7 @@ var require_opencode_init = __commonJS({
22924
22865
  if (!store.isCompleted) {
22925
22866
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.COMPLETED, {});
22926
22867
  }
22927
- await (0, biEvents_1.reportSessionEnd)({
22868
+ await (0, bi_events_1.reportSessionEnd)({
22928
22869
  ...biBase,
22929
22870
  taskModel,
22930
22871
  taskType: kind,
@@ -22943,7 +22884,7 @@ var require_opencode_init = __commonJS({
22943
22884
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, failedRunPayload);
22944
22885
  await (0, codegen_flow_helpers_12.updateParentTaskStatus)(localJobContext, ditto_codegen_types_12.Status.FAILED, codegenError);
22945
22886
  const taskCost = orchestrator.lastUsage ? Math.round(orchestrator.lastUsage.cost * 1e6) : void 0;
22946
- await (0, biEvents_1.reportSessionEnd)({
22887
+ await (0, bi_events_1.reportSessionEnd)({
22947
22888
  ...biBase,
22948
22889
  taskModel,
22949
22890
  taskType: kind,
@@ -22952,7 +22893,7 @@ var require_opencode_init = __commonJS({
22952
22893
  agentOutput: JSON.stringify({ files: failedRunPayload.files }),
22953
22894
  jobDuration: String(Date.now() - flowStartTime)
22954
22895
  });
22955
- await (0, biEvents_1.reportSessionError)({
22896
+ await (0, bi_events_1.reportSessionError)({
22956
22897
  ...biBase,
22957
22898
  taskModel,
22958
22899
  taskType: kind,
@@ -22976,9 +22917,9 @@ var require_opencode_init = __commonJS({
22976
22917
  }
22977
22918
  });
22978
22919
 
22979
- // dist/OpenCodeIterationOrchestrator.js
22980
- var require_OpenCodeIterationOrchestrator = __commonJS({
22981
- "dist/OpenCodeIterationOrchestrator.js"(exports2) {
22920
+ // dist/orchestrators/opencode-iteration-orchestrator.js
22921
+ var require_opencode_iteration_orchestrator = __commonJS({
22922
+ "dist/orchestrators/opencode-iteration-orchestrator.js"(exports2) {
22982
22923
  "use strict";
22983
22924
  Object.defineProperty(exports2, "__esModule", { value: true });
22984
22925
  exports2.OpenCodeIterationOrchestrator = void 0;
@@ -23040,7 +22981,7 @@ var require_opencode_iterate = __commonJS({
23040
22981
  var cli_listeners_1 = require_cli_listeners();
23041
22982
  var job_context_storage_12 = require_job_context_storage();
23042
22983
  var ditto_codegen_types_12 = require_dist4();
23043
- var OpenCodeIterationOrchestrator_1 = require_OpenCodeIterationOrchestrator();
22984
+ var opencode_iteration_orchestrator_1 = require_opencode_iteration_orchestrator();
23044
22985
  var types_1 = require_types_impl();
23045
22986
  var codegen_flow_helpers_12 = require_codegen_flow_helpers();
23046
22987
  var agent_io_1 = require_agent_io();
@@ -23048,12 +22989,12 @@ var require_opencode_iterate = __commonJS({
23048
22989
  var context_12 = require_context();
23049
22990
  var logger_12 = require_logger();
23050
22991
  var model_knobs_1 = require_model_knobs();
23051
- var git_file_changes_1 = require_git_file_changes();
22992
+ var file_changes_1 = require_file_changes();
23052
22993
  var inject_created_by_1 = require_inject_created_by();
23053
- var extensions_job_payload_1 = require_extensions_job_payload();
23054
- var executor_1 = require_executor();
23055
- var report_expensive_run_1 = require_report_expensive_run();
23056
- var biEvents_1 = require_biEvents();
22994
+ var job_payload_1 = require_job_payload2();
22995
+ var validator_outputs_1 = require_validator_outputs();
22996
+ var expensive_run_1 = require_expensive_run();
22997
+ var bi_events_1 = require_bi_events();
23057
22998
  var plugins_runtime_1 = require_plugins_runtime();
23058
22999
  var runOpencodeIterateFlow = async (chatHistory, agentData) => {
23059
23000
  const store = job_context_storage_12.jobContextStorage.getStore();
@@ -23078,16 +23019,16 @@ var require_opencode_iterate = __commonJS({
23078
23019
  logger_12.logger.info("[OpenCode Iterate] Starting task", { taskId });
23079
23020
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.RUNNING, {});
23080
23021
  logger_12.logger.info("[OpenCode Iterate] Marked task RUNNING", { taskId });
23081
- await (0, biEvents_1.reportSessionStart)({
23022
+ await (0, bi_events_1.reportSessionStart)({
23082
23023
  ...biBase,
23083
23024
  taskModel,
23084
23025
  taskType: kind,
23085
23026
  jobInput: userInput
23086
23027
  });
23087
23028
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
23088
- const gitBaseline = await (0, git_file_changes_1.captureGitBaseline)(outputPath);
23029
+ const gitBaseline = await (0, file_changes_1.captureGitBaseline)(outputPath);
23089
23030
  store.gitBaseline = gitBaseline;
23090
- const iterationOrchestrator = new OpenCodeIterationOrchestrator_1.OpenCodeIterationOrchestrator();
23031
+ const iterationOrchestrator = new opencode_iteration_orchestrator_1.OpenCodeIterationOrchestrator();
23091
23032
  let caughtError;
23092
23033
  try {
23093
23034
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
@@ -23099,9 +23040,9 @@ var require_opencode_iterate = __commonJS({
23099
23040
  gitBaseline
23100
23041
  });
23101
23042
  store.lastAgentMessage = result.agentMessage;
23102
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23043
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23103
23044
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
23104
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23045
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23105
23046
  await (0, inject_created_by_1.injectCreatedByIntoExtensionFiles)(outputPath, extensions.created);
23106
23047
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
23107
23048
  requiredPermissions: result.requiredPermissions,
@@ -23117,8 +23058,8 @@ var require_opencode_iterate = __commonJS({
23117
23058
  requiredPermissions: result.requiredPermissions
23118
23059
  });
23119
23060
  if (iterationOrchestrator.lastStdout && !(0, model_knobs_1.hasModelOverride)() && !(0, model_knobs_1.hasSmallModelOverride)()) {
23120
- void (0, executor_1.notifyValidatorOutputsToSlack)(iterationOrchestrator.lastStdout, result.usage.cost);
23121
- void (0, report_expensive_run_1.notifyExpensiveRunToSlack)({
23061
+ void (0, validator_outputs_1.notifyValidatorOutputsToSlack)(iterationOrchestrator.lastStdout, result.usage.cost);
23062
+ void (0, expensive_run_1.notifyExpensiveRunToSlack)({
23122
23063
  usage: result.usage,
23123
23064
  durationMs: Date.now() - flowStartTime,
23124
23065
  agentMessage: result.agentMessage,
@@ -23128,7 +23069,7 @@ var require_opencode_iterate = __commonJS({
23128
23069
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.COMPLETED, {
23129
23070
  taskOutput: { files }
23130
23071
  });
23131
- await (0, biEvents_1.reportSessionEnd)({
23072
+ await (0, bi_events_1.reportSessionEnd)({
23132
23073
  ...biBase,
23133
23074
  taskModel,
23134
23075
  taskType: kind,
@@ -23147,7 +23088,7 @@ var require_opencode_iterate = __commonJS({
23147
23088
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, failedRunPayload);
23148
23089
  await (0, codegen_flow_helpers_12.updateParentTaskStatus)(localJobContext, ditto_codegen_types_12.Status.FAILED, codegenError);
23149
23090
  const taskCost = iterationOrchestrator.lastUsage ? Math.round(iterationOrchestrator.lastUsage.cost * 1e6) : void 0;
23150
- await (0, biEvents_1.reportSessionEnd)({
23091
+ await (0, bi_events_1.reportSessionEnd)({
23151
23092
  ...biBase,
23152
23093
  taskModel,
23153
23094
  taskType: kind,
@@ -23156,7 +23097,7 @@ var require_opencode_iterate = __commonJS({
23156
23097
  agentOutput: JSON.stringify({ files: failedRunPayload.files }),
23157
23098
  jobDuration: String(Date.now() - flowStartTime)
23158
23099
  });
23159
- await (0, biEvents_1.reportSessionError)({
23100
+ await (0, bi_events_1.reportSessionError)({
23160
23101
  ...biBase,
23161
23102
  taskModel,
23162
23103
  taskType: kind,
@@ -23180,9 +23121,9 @@ var require_opencode_iterate = __commonJS({
23180
23121
  }
23181
23122
  });
23182
23123
 
23183
- // dist/OpenCodeAskOrchestrator.js
23184
- var require_OpenCodeAskOrchestrator = __commonJS({
23185
- "dist/OpenCodeAskOrchestrator.js"(exports2) {
23124
+ // dist/orchestrators/opencode-ask-orchestrator.js
23125
+ var require_opencode_ask_orchestrator = __commonJS({
23126
+ "dist/orchestrators/opencode-ask-orchestrator.js"(exports2) {
23186
23127
  "use strict";
23187
23128
  Object.defineProperty(exports2, "__esModule", { value: true });
23188
23129
  exports2.OpenCodeAskOrchestrator = void 0;
@@ -23242,17 +23183,17 @@ var require_opencode_ask = __commonJS({
23242
23183
  var cli_listeners_1 = require_cli_listeners();
23243
23184
  var job_context_storage_12 = require_job_context_storage();
23244
23185
  var ditto_codegen_types_12 = require_dist4();
23245
- var OpenCodeAskOrchestrator_1 = require_OpenCodeAskOrchestrator();
23186
+ var opencode_ask_orchestrator_1 = require_opencode_ask_orchestrator();
23246
23187
  var types_1 = require_types_impl();
23247
23188
  var codegen_flow_helpers_12 = require_codegen_flow_helpers();
23248
23189
  var ditto_codegen_types_2 = require_dist4();
23249
23190
  var context_12 = require_context();
23250
23191
  var logger_12 = require_logger();
23251
23192
  var model_knobs_1 = require_model_knobs();
23252
- var git_file_changes_1 = require_git_file_changes();
23193
+ var file_changes_1 = require_file_changes();
23253
23194
  var inject_created_by_1 = require_inject_created_by();
23254
- var extensions_job_payload_1 = require_extensions_job_payload();
23255
- var biEvents_1 = require_biEvents();
23195
+ var job_payload_1 = require_job_payload2();
23196
+ var bi_events_1 = require_bi_events();
23256
23197
  var runOpencodeAskFlow = async (chatHistory) => {
23257
23198
  const store = job_context_storage_12.jobContextStorage.getStore();
23258
23199
  if (!store?.jobId || !store?.taskId) {
@@ -23276,16 +23217,16 @@ var require_opencode_ask = __commonJS({
23276
23217
  logger_12.logger.info("[OpenCode Ask] Starting task", { taskId });
23277
23218
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.RUNNING, {});
23278
23219
  logger_12.logger.info("[OpenCode Ask] Marked task RUNNING", { taskId });
23279
- await (0, biEvents_1.reportSessionStart)({
23220
+ await (0, bi_events_1.reportSessionStart)({
23280
23221
  ...biBase,
23281
23222
  taskModel,
23282
23223
  taskType: kind,
23283
23224
  jobInput: userInput
23284
23225
  });
23285
23226
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
23286
- const gitBaseline = await (0, git_file_changes_1.captureGitBaseline)(outputPath);
23227
+ const gitBaseline = await (0, file_changes_1.captureGitBaseline)(outputPath);
23287
23228
  store.gitBaseline = gitBaseline;
23288
- const askOrchestrator = new OpenCodeAskOrchestrator_1.OpenCodeAskOrchestrator();
23229
+ const askOrchestrator = new opencode_ask_orchestrator_1.OpenCodeAskOrchestrator();
23289
23230
  try {
23290
23231
  (0, cli_listeners_1.attachOrchestratorListeners)(askOrchestrator);
23291
23232
  const result = await askOrchestrator.ask({
@@ -23294,8 +23235,8 @@ var require_opencode_ask = __commonJS({
23294
23235
  chatHistory,
23295
23236
  gitBaseline
23296
23237
  });
23297
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23298
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23238
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23239
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23299
23240
  await (0, inject_created_by_1.injectCreatedByIntoExtensionFiles)(outputPath, extensions.created);
23300
23241
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
23301
23242
  files,
@@ -23307,7 +23248,7 @@ var require_opencode_ask = __commonJS({
23307
23248
  answer: result.answer
23308
23249
  }
23309
23250
  });
23310
- await (0, biEvents_1.reportSessionEnd)({
23251
+ await (0, bi_events_1.reportSessionEnd)({
23311
23252
  ...biBase,
23312
23253
  taskModel,
23313
23254
  taskType: kind,
@@ -23320,8 +23261,8 @@ var require_opencode_ask = __commonJS({
23320
23261
  logger_12.logger.info("[OpenCode Ask] Completed task", { taskId });
23321
23262
  } catch (error) {
23322
23263
  const codegenError = (0, ditto_codegen_types_2.toCodegenError)(error);
23323
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23324
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23264
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23265
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23325
23266
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
23326
23267
  files,
23327
23268
  extensions,
@@ -23329,7 +23270,7 @@ var require_opencode_ask = __commonJS({
23329
23270
  });
23330
23271
  await (0, codegen_flow_helpers_12.updateParentTaskStatus)(localJobContext, ditto_codegen_types_12.Status.FAILED, codegenError);
23331
23272
  const taskCost = askOrchestrator.lastUsage ? Math.round(askOrchestrator.lastUsage.cost * 1e6) : void 0;
23332
- await (0, biEvents_1.reportSessionEnd)({
23273
+ await (0, bi_events_1.reportSessionEnd)({
23333
23274
  ...biBase,
23334
23275
  taskModel,
23335
23276
  taskType: kind,
@@ -23338,7 +23279,7 @@ var require_opencode_ask = __commonJS({
23338
23279
  agentOutput: JSON.stringify({ files }),
23339
23280
  jobDuration: String(Date.now() - flowStartTime)
23340
23281
  });
23341
- await (0, biEvents_1.reportSessionError)({
23282
+ await (0, bi_events_1.reportSessionError)({
23342
23283
  ...biBase,
23343
23284
  taskModel,
23344
23285
  taskType: kind,
@@ -23360,9 +23301,9 @@ var require_opencode_ask = __commonJS({
23360
23301
  }
23361
23302
  });
23362
23303
 
23363
- // dist/OpenCodeGitConflictsOrchestrator.js
23364
- var require_OpenCodeGitConflictsOrchestrator = __commonJS({
23365
- "dist/OpenCodeGitConflictsOrchestrator.js"(exports2) {
23304
+ // dist/orchestrators/opencode-git-conflicts-orchestrator.js
23305
+ var require_opencode_git_conflicts_orchestrator = __commonJS({
23306
+ "dist/orchestrators/opencode-git-conflicts-orchestrator.js"(exports2) {
23366
23307
  "use strict";
23367
23308
  Object.defineProperty(exports2, "__esModule", { value: true });
23368
23309
  exports2.OpenCodeGitConflictsOrchestrator = void 0;
@@ -23424,17 +23365,17 @@ var require_opencode_fix_git_conflicts = __commonJS({
23424
23365
  var cli_listeners_1 = require_cli_listeners();
23425
23366
  var job_context_storage_12 = require_job_context_storage();
23426
23367
  var ditto_codegen_types_12 = require_dist4();
23427
- var OpenCodeGitConflictsOrchestrator_1 = require_OpenCodeGitConflictsOrchestrator();
23368
+ var opencode_git_conflicts_orchestrator_1 = require_opencode_git_conflicts_orchestrator();
23428
23369
  var types_1 = require_types_impl();
23429
23370
  var codegen_flow_helpers_12 = require_codegen_flow_helpers();
23430
23371
  var context_12 = require_context();
23431
23372
  var logger_12 = require_logger();
23432
23373
  var model_knobs_1 = require_model_knobs();
23433
- var git_file_changes_1 = require_git_file_changes();
23434
- var extensions_job_payload_1 = require_extensions_job_payload();
23435
- var executor_1 = require_executor();
23436
- var report_expensive_run_1 = require_report_expensive_run();
23437
- var biEvents_1 = require_biEvents();
23374
+ var file_changes_1 = require_file_changes();
23375
+ var job_payload_1 = require_job_payload2();
23376
+ var validator_outputs_1 = require_validator_outputs();
23377
+ var expensive_run_1 = require_expensive_run();
23378
+ var bi_events_1 = require_bi_events();
23438
23379
  var plugins_runtime_1 = require_plugins_runtime();
23439
23380
  var runOpencodeGitConflictsFlow = async (chatHistory) => {
23440
23381
  const store = job_context_storage_12.jobContextStorage.getStore();
@@ -23459,15 +23400,15 @@ var require_opencode_fix_git_conflicts = __commonJS({
23459
23400
  logger_12.logger.info("[OpenCode Git Conflicts] Starting task", { taskId });
23460
23401
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.RUNNING, {});
23461
23402
  logger_12.logger.info("[OpenCode Git Conflicts] Marked task RUNNING", { taskId });
23462
- await (0, biEvents_1.reportSessionStart)({
23403
+ await (0, bi_events_1.reportSessionStart)({
23463
23404
  ...biBase,
23464
23405
  taskModel,
23465
23406
  taskType: kind
23466
23407
  });
23467
23408
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
23468
- const gitBaseline = await (0, git_file_changes_1.captureGitBaseline)(outputPath);
23409
+ const gitBaseline = await (0, file_changes_1.captureGitBaseline)(outputPath);
23469
23410
  store.gitBaseline = gitBaseline;
23470
- const orchestrator = new OpenCodeGitConflictsOrchestrator_1.OpenCodeGitConflictsOrchestrator();
23411
+ const orchestrator = new opencode_git_conflicts_orchestrator_1.OpenCodeGitConflictsOrchestrator();
23471
23412
  let caughtError;
23472
23413
  try {
23473
23414
  (0, cli_listeners_1.attachOrchestratorListeners)(orchestrator);
@@ -23478,8 +23419,8 @@ var require_opencode_fix_git_conflicts = __commonJS({
23478
23419
  gitBaseline
23479
23420
  });
23480
23421
  store.lastAgentMessage = result.agentMessage;
23481
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23482
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23422
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23423
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23483
23424
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
23484
23425
  requiredPermissions: result.requiredPermissions,
23485
23426
  agentMessage: result.agentMessage,
@@ -23493,8 +23434,8 @@ var require_opencode_fix_git_conflicts = __commonJS({
23493
23434
  requiredPermissions: result.requiredPermissions
23494
23435
  });
23495
23436
  if (orchestrator.lastStdout && !(0, model_knobs_1.hasModelOverride)() && !(0, model_knobs_1.hasSmallModelOverride)()) {
23496
- void (0, executor_1.notifyValidatorOutputsToSlack)(orchestrator.lastStdout, result.usage.cost);
23497
- void (0, report_expensive_run_1.notifyExpensiveRunToSlack)({
23437
+ void (0, validator_outputs_1.notifyValidatorOutputsToSlack)(orchestrator.lastStdout, result.usage.cost);
23438
+ void (0, expensive_run_1.notifyExpensiveRunToSlack)({
23498
23439
  usage: result.usage,
23499
23440
  durationMs: Date.now() - flowStartTime,
23500
23441
  agentMessage: result.agentMessage,
@@ -23504,7 +23445,7 @@ var require_opencode_fix_git_conflicts = __commonJS({
23504
23445
  await codeGenerationService_12.codeGenerationService.updateTask(jobId, taskId, ditto_codegen_types_12.Status.COMPLETED, {
23505
23446
  taskOutput: { files }
23506
23447
  });
23507
- await (0, biEvents_1.reportSessionEnd)({
23448
+ await (0, bi_events_1.reportSessionEnd)({
23508
23449
  ...biBase,
23509
23450
  taskModel,
23510
23451
  taskType: kind,
@@ -23518,8 +23459,8 @@ var require_opencode_fix_git_conflicts = __commonJS({
23518
23459
  } catch (error) {
23519
23460
  caughtError = error;
23520
23461
  const codegenError = (0, ditto_codegen_types_12.toCodegenError)(error);
23521
- const files = await (0, git_file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23522
- const extensions = await (0, extensions_job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23462
+ const files = await (0, file_changes_1.collectGitFileChanges)(outputPath, gitBaseline);
23463
+ const extensions = await (0, job_payload_1.buildExtensionsJobPayload)(outputPath, files);
23523
23464
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
23524
23465
  requiredPermissions: [],
23525
23466
  error: codegenError,
@@ -23528,7 +23469,7 @@ var require_opencode_fix_git_conflicts = __commonJS({
23528
23469
  });
23529
23470
  await (0, codegen_flow_helpers_12.updateParentTaskStatus)(localJobContext, ditto_codegen_types_12.Status.FAILED, codegenError);
23530
23471
  const taskCost = orchestrator.lastUsage ? Math.round(orchestrator.lastUsage.cost * 1e6) : void 0;
23531
- await (0, biEvents_1.reportSessionEnd)({
23472
+ await (0, bi_events_1.reportSessionEnd)({
23532
23473
  ...biBase,
23533
23474
  taskModel,
23534
23475
  taskType: kind,
@@ -23537,7 +23478,7 @@ var require_opencode_fix_git_conflicts = __commonJS({
23537
23478
  agentOutput: JSON.stringify({ files }),
23538
23479
  jobDuration: String(Date.now() - flowStartTime)
23539
23480
  });
23540
- await (0, biEvents_1.reportSessionError)({
23481
+ await (0, bi_events_1.reportSessionError)({
23541
23482
  ...biBase,
23542
23483
  taskModel,
23543
23484
  taskType: kind,
@@ -23561,9 +23502,9 @@ var require_opencode_fix_git_conflicts = __commonJS({
23561
23502
  }
23562
23503
  });
23563
23504
 
23564
- // dist/job-cancellation-monitor.js
23505
+ // dist/jobs/job-cancellation-monitor.js
23565
23506
  var require_job_cancellation_monitor = __commonJS({
23566
- "dist/job-cancellation-monitor.js"(exports2) {
23507
+ "dist/jobs/job-cancellation-monitor.js"(exports2) {
23567
23508
  "use strict";
23568
23509
  Object.defineProperty(exports2, "__esModule", { value: true });
23569
23510
  exports2.JobCancellationMonitor = void 0;
@@ -23572,7 +23513,7 @@ var require_job_cancellation_monitor = __commonJS({
23572
23513
  var logger_12 = require_logger();
23573
23514
  var job_context_storage_12 = require_job_context_storage();
23574
23515
  var types_1 = require_types_impl();
23575
- var biEvents_1 = require_biEvents();
23516
+ var bi_events_1 = require_bi_events();
23576
23517
  var STATUS_CHECK_INTERVAL_MS = 2e3;
23577
23518
  var JobCancellationMonitor = class {
23578
23519
  constructor(codeGenerationService) {
@@ -23620,7 +23561,7 @@ var require_job_cancellation_monitor = __commonJS({
23620
23561
  if (!store)
23621
23562
  return;
23622
23563
  const jobDuration = store.flowStartTime ? String(Date.now() - store.flowStartTime) : void 0;
23623
- await (0, biEvents_1.reportSessionEnd)({
23564
+ await (0, bi_events_1.reportSessionEnd)({
23624
23565
  jobId,
23625
23566
  taskId: store.taskId,
23626
23567
  appId: this.projectId,
@@ -23637,9 +23578,9 @@ var require_job_cancellation_monitor = __commonJS({
23637
23578
  }
23638
23579
  });
23639
23580
 
23640
- // dist/job-timeout-monitor.js
23581
+ // dist/jobs/job-timeout-monitor.js
23641
23582
  var require_job_timeout_monitor = __commonJS({
23642
- "dist/job-timeout-monitor.js"(exports2) {
23583
+ "dist/jobs/job-timeout-monitor.js"(exports2) {
23643
23584
  "use strict";
23644
23585
  Object.defineProperty(exports2, "__esModule", { value: true });
23645
23586
  exports2.JobTimeoutMonitor = exports2.JOB_TIMEOUT_MS = void 0;
@@ -23650,7 +23591,7 @@ var require_job_timeout_monitor = __commonJS({
23650
23591
  var job_context_storage_12 = require_job_context_storage();
23651
23592
  var codegen_flow_helpers_12 = require_codegen_flow_helpers();
23652
23593
  var types_1 = require_types_impl();
23653
- var biEvents_1 = require_biEvents();
23594
+ var bi_events_1 = require_bi_events();
23654
23595
  exports2.JOB_TIMEOUT_MS = 1e3 * 60 * 20;
23655
23596
  var JobTimeoutMonitor = class {
23656
23597
  constructor(codeGenerationService) {
@@ -23718,12 +23659,12 @@ var require_job_timeout_monitor = __commonJS({
23718
23659
  runKind: store.kind,
23719
23660
  environment
23720
23661
  };
23721
- await (0, biEvents_1.reportSessionEnd)({
23662
+ await (0, bi_events_1.reportSessionEnd)({
23722
23663
  ...biBase,
23723
23664
  taskStatus: ditto_codegen_types_12.Status.FAILED,
23724
23665
  jobDuration
23725
23666
  });
23726
- await (0, biEvents_1.reportSessionError)({
23667
+ await (0, bi_events_1.reportSessionError)({
23727
23668
  ...biBase,
23728
23669
  errorDesc: codegenError.errorType,
23729
23670
  errorMessage: codegenError.message,
@@ -23737,9 +23678,9 @@ var require_job_timeout_monitor = __commonJS({
23737
23678
  }
23738
23679
  });
23739
23680
 
23740
- // dist/opencode-integration/skills-override.js
23681
+ // dist/opencode-integration/skills/skills-override.js
23741
23682
  var require_skills_override = __commonJS({
23742
- "dist/opencode-integration/skills-override.js"(exports2) {
23683
+ "dist/opencode-integration/skills/skills-override.js"(exports2) {
23743
23684
  "use strict";
23744
23685
  Object.defineProperty(exports2, "__esModule", { value: true });
23745
23686
  exports2.SKILLS_DIR = void 0;
@@ -23799,9 +23740,9 @@ var require_skills_override = __commonJS({
23799
23740
  }
23800
23741
  });
23801
23742
 
23802
- // dist/opencode-integration/skills-installer.js
23743
+ // dist/opencode-integration/skills/skills-installer.js
23803
23744
  var require_skills_installer = __commonJS({
23804
- "dist/opencode-integration/skills-installer.js"(exports2) {
23745
+ "dist/opencode-integration/skills/skills-installer.js"(exports2) {
23805
23746
  "use strict";
23806
23747
  Object.defineProperty(exports2, "__esModule", { value: true });
23807
23748
  exports2.applySkillsOverride = applySkillsOverride;
@@ -23939,31 +23880,79 @@ var require_tools_writer = __commonJS({
23939
23880
  }
23940
23881
  });
23941
23882
 
23942
- // dist/opencode-integration/tool-policies.js
23883
+ // dist/opencode-integration/plugins/generated-files-guard.js
23884
+ var require_generated_files_guard = __commonJS({
23885
+ "dist/opencode-integration/plugins/generated-files-guard.js"(exports2) {
23886
+ "use strict";
23887
+ Object.defineProperty(exports2, "__esModule", { value: true });
23888
+ exports2.GUARD_PLUGIN_FILENAME = exports2.GUARD_MESSAGE = void 0;
23889
+ exports2.isEditorComponentManifest = isEditorComponentManifest;
23890
+ exports2.extractWritePaths = extractWritePaths;
23891
+ exports2.buildGeneratedFilesGuardSource = buildGeneratedFilesGuardSource;
23892
+ exports2.writeGeneratedFilesGuardPlugin = writeGeneratedFilesGuardPlugin;
23893
+ var write_plugin_1 = require_write_plugin();
23894
+ var ERC_MANIFEST_RE = /(^|\/)src\/extensions\/site\/components\/.+\.generated\.tsx?$/;
23895
+ exports2.GUARD_MESSAGE = "BLOCKED: this editor-react-component manifest is auto-generated. Do not create or edit it by hand \u2014 edit the *.tsx / *.module.css / *.props.ts source and regenerate with `npx wix build && npx wix generate manifest`, or override values in the component's *.extension.ts. Do not re-attempt the blocked path; the whole call was rejected, so resubmit any other paths it carried \u2014 they were not written. Only *.generated.ts under src/extensions/site/components/ is blocked.";
23896
+ function isEditorComponentManifest(path) {
23897
+ return ERC_MANIFEST_RE.test(path);
23898
+ }
23899
+ function extractWritePaths(tool, args) {
23900
+ if (tool === "write" || tool === "edit") {
23901
+ return typeof args.filePath === "string" ? [args.filePath] : [];
23902
+ }
23903
+ const list = tool === "batch-write" ? args.files : tool === "multi-edit" ? args.edits : void 0;
23904
+ if (!list)
23905
+ return [];
23906
+ return list.map((item) => item.path).filter((p) => typeof p === "string");
23907
+ }
23908
+ exports2.GUARD_PLUGIN_FILENAME = "generated-files-guard.ts";
23909
+ function buildGeneratedFilesGuardSource() {
23910
+ return `// Generated by @wix/ditto-codegen (generated-files-guard). Do not edit.
23911
+ const ERC_MANIFEST_RE = /${ERC_MANIFEST_RE.source}/;
23912
+ const GUARD_MESSAGE = ${JSON.stringify(exports2.GUARD_MESSAGE)};
23913
+
23914
+ function extractWritePaths(tool, args) {
23915
+ if (tool === "${"write"}" || tool === "${"edit"}") {
23916
+ return typeof args.filePath === "string" ? [args.filePath] : [];
23917
+ }
23918
+ const list =
23919
+ tool === "${"batch-write"}" ? args.files : tool === "${"multi-edit"}" ? args.edits : undefined;
23920
+ if (!list) return [];
23921
+ return list
23922
+ .map((item) => item.path)
23923
+ .filter((p) => typeof p === "string");
23924
+ }
23925
+
23926
+ export const GeneratedFilesGuard = async () => ({
23927
+ "tool.execute.before": async (input, output) => {
23928
+ const blocked = extractWritePaths(input.tool, output.args).filter((p) =>
23929
+ ERC_MANIFEST_RE.test(p),
23930
+ );
23931
+ if (blocked.length > 0) {
23932
+ throw new Error(GUARD_MESSAGE + " (blocked: " + blocked.join(", ") + ")");
23933
+ }
23934
+ },
23935
+ });
23936
+ `;
23937
+ }
23938
+ async function writeGeneratedFilesGuardPlugin() {
23939
+ await (0, write_plugin_1.writeGeneratedPlugin)(exports2.GUARD_PLUGIN_FILENAME, buildGeneratedFilesGuardSource());
23940
+ }
23941
+ }
23942
+ });
23943
+
23944
+ // dist/opencode-integration/plugins/tool-policies.js
23943
23945
  var require_tool_policies3 = __commonJS({
23944
- "dist/opencode-integration/tool-policies.js"(exports2) {
23946
+ "dist/opencode-integration/plugins/tool-policies.js"(exports2) {
23945
23947
  "use strict";
23946
23948
  Object.defineProperty(exports2, "__esModule", { value: true });
23947
- exports2.TOOL_POLICIES_PLUGIN_FILENAME = exports2.GENERATE_CMD_RE = void 0;
23948
- exports2.policyMatchesPath = policyMatchesPath;
23949
- exports2.skillRootOf = skillRootOf;
23949
+ exports2.TOOL_POLICIES_FILENAME = exports2.GENERATE_CMD_RE = void 0;
23950
23950
  exports2.buildToolPoliciesPluginSource = buildToolPoliciesPluginSource;
23951
23951
  exports2.writeToolPoliciesPlugin = writeToolPoliciesPlugin;
23952
- exports2.validateToolPolicies = validateToolPolicies;
23953
- var promises_1 = require("fs/promises");
23954
- var path_12 = require("path");
23955
23952
  var ditto_codegen_types_12 = require_dist4();
23956
- var logger_12 = require_logger();
23957
- var generated_plugins_1 = require_generated_plugins();
23958
- var skills_override_12 = require_skills_override();
23953
+ var write_plugin_1 = require_write_plugin();
23959
23954
  exports2.GENERATE_CMD_RE = /\bwix\s+(schema\s+)?generate\b/;
23960
- function policyMatchesPath(policy, path) {
23961
- return policy.pathFragments.some((fragment) => path.includes(fragment));
23962
- }
23963
- function skillRootOf(fragment) {
23964
- return fragment.split("/")[0];
23965
- }
23966
- exports2.TOOL_POLICIES_PLUGIN_FILENAME = "tool-policies.ts";
23955
+ exports2.TOOL_POLICIES_FILENAME = "tool-policies.ts";
23967
23956
  function buildToolPoliciesPluginSource(policies) {
23968
23957
  const emitKind = (type, toRuntime, extraFilter = () => true) => JSON.stringify(policies.filter((policy) => policy.type === type).filter(extraFilter).map(toRuntime));
23969
23958
  const emitReads = (mode) => emitKind("read", ({ pathFragments, message }) => ({ pathFragments, message }), (policy) => policy.mode === mode);
@@ -24086,7 +24075,26 @@ export const ToolPolicies = async () => ({
24086
24075
  `;
24087
24076
  }
24088
24077
  async function writeToolPoliciesPlugin(policies) {
24089
- await (0, generated_plugins_1.writeGeneratedPlugin)(exports2.TOOL_POLICIES_PLUGIN_FILENAME, buildToolPoliciesPluginSource(policies));
24078
+ await (0, write_plugin_1.writeGeneratedPlugin)(exports2.TOOL_POLICIES_FILENAME, buildToolPoliciesPluginSource(policies));
24079
+ }
24080
+ }
24081
+ });
24082
+
24083
+ // dist/opencode-integration/plugins/tool-policies-drift.js
24084
+ var require_tool_policies_drift = __commonJS({
24085
+ "dist/opencode-integration/plugins/tool-policies-drift.js"(exports2) {
24086
+ "use strict";
24087
+ Object.defineProperty(exports2, "__esModule", { value: true });
24088
+ exports2.validateToolPolicies = validateToolPolicies;
24089
+ var promises_1 = require("fs/promises");
24090
+ var path_12 = require("path");
24091
+ var logger_12 = require_logger();
24092
+ var skills_override_12 = require_skills_override();
24093
+ function policyMatchesPath(policy, path) {
24094
+ return policy.pathFragments.some((fragment) => path.includes(fragment));
24095
+ }
24096
+ function skillRootOf(fragment) {
24097
+ return fragment.split("/")[0];
24090
24098
  }
24091
24099
  async function walkFiles(dir, depth = 6) {
24092
24100
  if (depth === 0)
@@ -24188,70 +24196,33 @@ export const ToolPolicies = async () => ({
24188
24196
  }
24189
24197
  });
24190
24198
 
24191
- // dist/opencode-integration/generated-files-guard.js
24192
- var require_generated_files_guard = __commonJS({
24193
- "dist/opencode-integration/generated-files-guard.js"(exports2) {
24199
+ // dist/opencode-integration/plugins/index.js
24200
+ var require_plugins3 = __commonJS({
24201
+ "dist/opencode-integration/plugins/index.js"(exports2) {
24194
24202
  "use strict";
24195
24203
  Object.defineProperty(exports2, "__esModule", { value: true });
24196
- exports2.GUARD_MESSAGE = void 0;
24197
- exports2.isEditorComponentManifest = isEditorComponentManifest;
24198
- exports2.extractWritePaths = extractWritePaths;
24199
- exports2.buildGeneratedFilesGuardSource = buildGeneratedFilesGuardSource;
24200
- exports2.writeGeneratedFilesGuardPlugin = writeGeneratedFilesGuardPlugin;
24201
- var generated_plugins_1 = require_generated_plugins();
24202
- var ERC_MANIFEST_RE = /(^|\/)src\/extensions\/site\/components\/.+\.generated\.tsx?$/;
24203
- exports2.GUARD_MESSAGE = "BLOCKED: this editor-react-component manifest is auto-generated. Do not create or edit it by hand \u2014 edit the *.tsx / *.module.css / *.props.ts source and regenerate with `npx wix build && npx wix generate manifest`, or override values in the component's *.extension.ts. Do not re-attempt the blocked path; the whole call was rejected, so resubmit any other paths it carried \u2014 they were not written. Only *.generated.ts under src/extensions/site/components/ is blocked.";
24204
- function isEditorComponentManifest(path) {
24205
- return ERC_MANIFEST_RE.test(path);
24206
- }
24207
- function extractWritePaths(tool, args) {
24208
- if (tool === "write" || tool === "edit") {
24209
- return typeof args.filePath === "string" ? [args.filePath] : [];
24210
- }
24211
- const list = tool === "batch-write" ? args.files : tool === "multi-edit" ? args.edits : void 0;
24212
- if (!list)
24213
- return [];
24214
- return list.map((item) => item.path).filter((p) => typeof p === "string");
24215
- }
24216
- var GUARD_PLUGIN_FILENAME = "generated-files-guard.ts";
24217
- function buildGeneratedFilesGuardSource() {
24218
- return `// Generated by @wix/ditto-codegen (generated-files-guard). Do not edit.
24219
- const ERC_MANIFEST_RE = /${ERC_MANIFEST_RE.source}/;
24220
- const GUARD_MESSAGE = ${JSON.stringify(exports2.GUARD_MESSAGE)};
24221
-
24222
- function extractWritePaths(tool, args) {
24223
- if (tool === "${"write"}" || tool === "${"edit"}") {
24224
- return typeof args.filePath === "string" ? [args.filePath] : [];
24225
- }
24226
- const list =
24227
- tool === "${"batch-write"}" ? args.files : tool === "${"multi-edit"}" ? args.edits : undefined;
24228
- if (!list) return [];
24229
- return list
24230
- .map((item) => item.path)
24231
- .filter((p) => typeof p === "string");
24232
- }
24233
-
24234
- export const GeneratedFilesGuard = async () => ({
24235
- "tool.execute.before": async (input, output) => {
24236
- const blocked = extractWritePaths(input.tool, output.args).filter((p) =>
24237
- ERC_MANIFEST_RE.test(p),
24238
- );
24239
- if (blocked.length > 0) {
24240
- throw new Error(GUARD_MESSAGE + " (blocked: " + blocked.join(", ") + ")");
24241
- }
24242
- },
24243
- });
24244
- `;
24245
- }
24246
- async function writeGeneratedFilesGuardPlugin() {
24247
- await (0, generated_plugins_1.writeGeneratedPlugin)(GUARD_PLUGIN_FILENAME, buildGeneratedFilesGuardSource());
24204
+ exports2.validateToolPolicies = void 0;
24205
+ exports2.writeGeneratedPlugins = writeGeneratedPlugins;
24206
+ var generated_files_guard_1 = require_generated_files_guard();
24207
+ var subagent_tool_logger_1 = require_subagent_tool_logger();
24208
+ var tool_policies_1 = require_tool_policies3();
24209
+ var tool_policies_drift_1 = require_tool_policies_drift();
24210
+ Object.defineProperty(exports2, "validateToolPolicies", { enumerable: true, get: function() {
24211
+ return tool_policies_drift_1.validateToolPolicies;
24212
+ } });
24213
+ async function writeGeneratedPlugins(toolPolicies) {
24214
+ await Promise.all([
24215
+ (0, generated_files_guard_1.writeGeneratedFilesGuardPlugin)(),
24216
+ (0, subagent_tool_logger_1.writeSubagentToolLoggerPlugin)(),
24217
+ (0, tool_policies_1.writeToolPoliciesPlugin)(toolPolicies)
24218
+ ]);
24248
24219
  }
24249
24220
  }
24250
24221
  });
24251
24222
 
24252
- // dist/plugin-host.js
24223
+ // dist/plugin-system/plugin-host.js
24253
24224
  var require_plugin_host = __commonJS({
24254
- "dist/plugin-host.js"(exports2) {
24225
+ "dist/plugin-system/plugin-host.js"(exports2) {
24255
24226
  "use strict";
24256
24227
  Object.defineProperty(exports2, "__esModule", { value: true });
24257
24228
  exports2.buildPluginHost = void 0;
@@ -24271,9 +24242,9 @@ var require_plugin_host = __commonJS({
24271
24242
  }
24272
24243
  });
24273
24244
 
24274
- // dist/plugin-artifacts.js
24245
+ // dist/plugin-system/plugin-artifacts.js
24275
24246
  var require_plugin_artifacts = __commonJS({
24276
- "dist/plugin-artifacts.js"(exports2) {
24247
+ "dist/plugin-system/plugin-artifacts.js"(exports2) {
24277
24248
  "use strict";
24278
24249
  Object.defineProperty(exports2, "__esModule", { value: true });
24279
24250
  exports2.collectPluginArtifacts = collectPluginArtifacts;
@@ -24297,9 +24268,9 @@ var require_plugin_artifacts = __commonJS({
24297
24268
  }
24298
24269
  });
24299
24270
 
24300
- // dist/fetch-scheduler.js
24271
+ // dist/jobs/fetch-scheduler.js
24301
24272
  var require_fetch_scheduler = __commonJS({
24302
- "dist/fetch-scheduler.js"(exports2) {
24273
+ "dist/jobs/fetch-scheduler.js"(exports2) {
24303
24274
  "use strict";
24304
24275
  Object.defineProperty(exports2, "__esModule", { value: true });
24305
24276
  exports2.FetchScheduler = exports2.MAX_AWAITED_JOB_IDS = exports2.MAX_MISSING_JOB_RECHECKS = exports2.ERROR_BACKOFF_MS = exports2.POST_JOB_INTERVAL_MS = exports2.MIN_FETCH_INTERVAL_MS = void 0;
@@ -24449,21 +24420,21 @@ var require_fetch_scheduler = __commonJS({
24449
24420
  }
24450
24421
  });
24451
24422
 
24452
- // dist/nudge-listener-server.js
24423
+ // dist/jobs/nudge-listener-server.js
24453
24424
  var require_nudge_listener_server = __commonJS({
24454
- "dist/nudge-listener-server.js"(exports2) {
24425
+ "dist/jobs/nudge-listener-server.js"(exports2) {
24455
24426
  "use strict";
24456
24427
  Object.defineProperty(exports2, "__esModule", { value: true });
24457
- exports2.NudgeListenerServer = exports2.BIND_RETRY_DELAY_MS = exports2.BIND_RETRIES = exports2.MAX_LOGGED_PATH_LENGTH = exports2.JOB_ID_PATTERN = exports2.JOB_FETCH_PATH = exports2.JOB_FETCH_PORT = void 0;
24428
+ exports2.NudgeListenerServer = exports2.BIND_RETRY_DELAY_MS = exports2.MAX_LOGGED_PATH_LENGTH = exports2.JOB_FETCH_PATH = exports2.JOB_FETCH_PORT = void 0;
24458
24429
  var node_http_1 = require("node:http");
24459
24430
  var logger_12 = require_logger();
24460
24431
  var utils_12 = require_utils9();
24461
24432
  var fetch_scheduler_1 = require_fetch_scheduler();
24462
24433
  exports2.JOB_FETCH_PORT = 52402;
24463
24434
  exports2.JOB_FETCH_PATH = "/_wix/codegen/fetch-jobs";
24464
- exports2.JOB_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
24435
+ var JOB_ID_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
24465
24436
  exports2.MAX_LOGGED_PATH_LENGTH = 128;
24466
- exports2.BIND_RETRIES = 5;
24437
+ var BIND_RETRIES = 5;
24467
24438
  exports2.BIND_RETRY_DELAY_MS = 300;
24468
24439
  var NudgeListenerServer = class {
24469
24440
  constructor(deps, port = exports2.JOB_FETCH_PORT) {
@@ -24515,7 +24486,7 @@ var require_nudge_listener_server = __commonJS({
24515
24486
  try {
24516
24487
  return await this.listenOnce();
24517
24488
  } catch (error) {
24518
- const inUse = error?.code === "EADDRINUSE" && attempt < exports2.BIND_RETRIES;
24489
+ const inUse = error?.code === "EADDRINUSE" && attempt < BIND_RETRIES;
24519
24490
  if (!inUse)
24520
24491
  throw error;
24521
24492
  await (0, utils_12.delay)(exports2.BIND_RETRY_DELAY_MS);
@@ -24563,7 +24534,7 @@ var require_nudge_listener_server = __commonJS({
24563
24534
  return;
24564
24535
  }
24565
24536
  const nudgedId = url.searchParams.get("jobId");
24566
- const usable = nudgedId === null || exports2.JOB_ID_PATTERN.test(nudgedId);
24537
+ const usable = nudgedId === null || JOB_ID_PATTERN.test(nudgedId);
24567
24538
  if (!usable) {
24568
24539
  logger_12.logger.warn("[JobFetch] Nudge carried an unusable jobId", {
24569
24540
  length: nudgedId.length
@@ -24587,9 +24558,9 @@ var require_nudge_listener_server = __commonJS({
24587
24558
  }
24588
24559
  });
24589
24560
 
24590
- // dist/job-fetching.js
24561
+ // dist/jobs/job-fetching.js
24591
24562
  var require_job_fetching = __commonJS({
24592
- "dist/job-fetching.js"(exports2) {
24563
+ "dist/jobs/job-fetching.js"(exports2) {
24593
24564
  "use strict";
24594
24565
  Object.defineProperty(exports2, "__esModule", { value: true });
24595
24566
  exports2.JobDeliveryMode = void 0;
@@ -24679,10 +24650,8 @@ var logger_1 = require_logger();
24679
24650
  var skills_installer_1 = require_skills_installer();
24680
24651
  var rules_writer_1 = require_rules_writer();
24681
24652
  var tools_writer_1 = require_tools_writer();
24682
- var tool_policies_1 = require_tool_policies3();
24653
+ var plugins_1 = require_plugins3();
24683
24654
  var skills_override_1 = require_skills_override();
24684
- var generated_files_guard_1 = require_generated_files_guard();
24685
- var subagent_tool_logger_1 = require_subagent_tool_logger();
24686
24655
  var plugin_artifacts_1 = require_plugin_artifacts();
24687
24656
  var config_1 = require_config();
24688
24657
  var environments_1 = require_environments();
@@ -24766,11 +24735,9 @@ async function initOpenCode() {
24766
24735
  ]),
24767
24736
  (0, skills_installer_1.applySkillsOverride)((0, codegen_flow_helpers_1.getOutputPath)(), logger_1.logger),
24768
24737
  (0, tools_writer_1.writeToolFiles)(pluginArtifacts.tools),
24769
- (0, generated_files_guard_1.writeGeneratedFilesGuardPlugin)(),
24770
- (0, subagent_tool_logger_1.writeSubagentToolLoggerPlugin)(),
24771
- (0, tool_policies_1.writeToolPoliciesPlugin)(toolPolicies)
24738
+ (0, plugins_1.writeGeneratedPlugins)(toolPolicies)
24772
24739
  ]);
24773
- void (0, tool_policies_1.validateToolPolicies)(toolPolicies, [
24740
+ void (0, plugins_1.validateToolPolicies)(toolPolicies, [
24774
24741
  skills_override_1.SKILLS_DIR,
24775
24742
  (0, path_1.join)((0, codegen_flow_helpers_1.getOutputPath)(), ".agents", "skills")
24776
24743
  ]);