@wix/ditto-codegen-public 1.0.313 → 1.0.315

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 +209 -54
  2. package/package.json +2 -2
package/dist/out.js CHANGED
@@ -12095,7 +12095,8 @@ var require_app_builder = __commonJS({
12095
12095
  { filename: "codegen-instructions.md", content: codegen_rules_1.CODEGEN_RULES }
12096
12096
  ],
12097
12097
  askRules: [{ filename: "ask-instructions.md", content: ask_rules_1.ASK_RULES }],
12098
- decisionCheckers: [pre_run_decision_1.checkSiteUIDecision]
12098
+ decisionCheckers: [pre_run_decision_1.checkSiteUIDecision],
12099
+ hooks: []
12099
12100
  };
12100
12101
  }
12101
12102
  });
@@ -12113,20 +12114,93 @@ var require_studio_2 = __commonJS({
12113
12114
  { filename: "codegen-instructions.md", content: codegen_rules_1.CODEGEN_RULES }
12114
12115
  ],
12115
12116
  askRules: [{ filename: "ask-instructions.md", content: ask_rules_1.ASK_RULES }],
12116
- decisionCheckers: []
12117
+ decisionCheckers: [],
12118
+ hooks: []
12117
12119
  };
12118
12120
  }
12119
12121
  });
12120
12122
 
12123
+ // dist/environments/hooks/run-hooks.js
12124
+ var require_run_hooks = __commonJS({
12125
+ "dist/environments/hooks/run-hooks.js"(exports2) {
12126
+ "use strict";
12127
+ Object.defineProperty(exports2, "__esModule", { value: true });
12128
+ exports2.getActiveHooks = getActiveHooks;
12129
+ exports2.runOnToolUse = runOnToolUse;
12130
+ exports2.runOnFlowEnd = runOnFlowEnd;
12131
+ var logger_12 = require_logger();
12132
+ var job_context_storage_12 = require_job_context_storage();
12133
+ function getActiveHooks() {
12134
+ return job_context_storage_12.jobContextStorage.getStore()?.hooks ?? [];
12135
+ }
12136
+ async function runOnToolUse(hooks, event) {
12137
+ for (const hook of hooks) {
12138
+ if (!hook.onToolUse)
12139
+ continue;
12140
+ try {
12141
+ await hook.onToolUse(event);
12142
+ } catch (error) {
12143
+ logger_12.logger.error("[Hook] onToolUse failed", {
12144
+ hook: hook.name,
12145
+ error: error instanceof Error ? error.message : String(error)
12146
+ });
12147
+ }
12148
+ }
12149
+ }
12150
+ async function runOnFlowEnd(hooks, ctx) {
12151
+ for (const hook of hooks) {
12152
+ if (!hook.onFlowEnd)
12153
+ continue;
12154
+ try {
12155
+ await hook.onFlowEnd(ctx);
12156
+ } catch (hookError) {
12157
+ if (ctx.failed) {
12158
+ logger_12.logger.error("[Hook] onFlowEnd failed after flow failure", {
12159
+ hook: hook.name,
12160
+ error: hookError instanceof Error ? hookError.message : String(hookError)
12161
+ });
12162
+ continue;
12163
+ }
12164
+ throw hookError;
12165
+ }
12166
+ }
12167
+ }
12168
+ }
12169
+ });
12170
+
12171
+ // dist/environments/hooks/index.js
12172
+ var require_hooks = __commonJS({
12173
+ "dist/environments/hooks/index.js"(exports2) {
12174
+ "use strict";
12175
+ Object.defineProperty(exports2, "__esModule", { value: true });
12176
+ exports2.runOnFlowEnd = exports2.runOnToolUse = exports2.getActiveHooks = void 0;
12177
+ var run_hooks_1 = require_run_hooks();
12178
+ Object.defineProperty(exports2, "getActiveHooks", { enumerable: true, get: function() {
12179
+ return run_hooks_1.getActiveHooks;
12180
+ } });
12181
+ Object.defineProperty(exports2, "runOnToolUse", { enumerable: true, get: function() {
12182
+ return run_hooks_1.runOnToolUse;
12183
+ } });
12184
+ Object.defineProperty(exports2, "runOnFlowEnd", { enumerable: true, get: function() {
12185
+ return run_hooks_1.runOnFlowEnd;
12186
+ } });
12187
+ }
12188
+ });
12189
+
12121
12190
  // dist/environments/index.js
12122
12191
  var require_environments = __commonJS({
12123
12192
  "dist/environments/index.js"(exports2) {
12124
12193
  "use strict";
12125
12194
  Object.defineProperty(exports2, "__esModule", { value: true });
12195
+ exports2.getActiveHooks = void 0;
12126
12196
  exports2.getCodegenEnvironmentConfig = getCodegenEnvironmentConfig;
12127
12197
  var types_1 = require_types_impl();
12128
12198
  var app_builder_1 = require_app_builder();
12129
12199
  var studio_2_1 = require_studio_2();
12200
+ var hooks_1 = require_hooks();
12201
+ Object.defineProperty(exports2, "getActiveHooks", { enumerable: true, get: function() {
12202
+ return hooks_1.getActiveHooks;
12203
+ } });
12130
12204
  function getCodegenEnvironmentConfig(environment) {
12131
12205
  switch (environment) {
12132
12206
  case types_1.Environment.STUDIO_2:
@@ -12531,26 +12605,69 @@ var require_cost_tracker = __commonJS({
12531
12605
  }
12532
12606
  });
12533
12607
 
12608
+ // dist/opencode-integration/task-tracker/init-task.js
12609
+ var require_init_task = __commonJS({
12610
+ "dist/opencode-integration/task-tracker/init-task.js"(exports2) {
12611
+ "use strict";
12612
+ Object.defineProperty(exports2, "__esModule", { value: true });
12613
+ exports2.completeInitTask = completeInitTask;
12614
+ var ditto_codegen_types_12 = require_dist4();
12615
+ var codeGenerationService_12 = require_codeGenerationService();
12616
+ var logger_12 = require_logger();
12617
+ async function completeInitTask(ctx) {
12618
+ const { store } = ctx;
12619
+ if (store?.isCompleted || store?.kind !== ditto_codegen_types_12.TaskKind.INIT_CODEGEN)
12620
+ return;
12621
+ if (!store.jobId || !store.taskId)
12622
+ return;
12623
+ store.isCompleted = true;
12624
+ try {
12625
+ await codeGenerationService_12.codeGenerationService.updateTask(store.jobId, store.taskId, ditto_codegen_types_12.Status.COMPLETED, {});
12626
+ logger_12.logger.info("[OpenCode] Completed init task before sub-tasks");
12627
+ } catch (error) {
12628
+ logger_12.logger.error("[OpenCode] Failed to complete init task", {
12629
+ error: error instanceof Error ? error.message : String(error)
12630
+ });
12631
+ }
12632
+ }
12633
+ }
12634
+ });
12635
+
12534
12636
  // dist/opencode-integration/task-tracker/extension-handler.js
12535
12637
  var require_extension_handler = __commonJS({
12536
12638
  "dist/opencode-integration/task-tracker/extension-handler.js"(exports2) {
12537
12639
  "use strict";
12538
12640
  Object.defineProperty(exports2, "__esModule", { value: true });
12539
12641
  exports2.ExtensionTaskHandler = void 0;
12642
+ exports2.buildExtensionTaskPayload = buildExtensionTaskPayload;
12540
12643
  var promises_1 = require("fs/promises");
12541
12644
  var path_1 = require("path");
12542
12645
  var ditto_codegen_types_12 = require_dist4();
12543
12646
  var codeGenerationService_12 = require_codeGenerationService();
12544
12647
  var logger_12 = require_logger();
12545
12648
  var constants_1 = require_constants5();
12649
+ var init_task_1 = require_init_task();
12650
+ function buildExtensionTaskPayload(tracked, collectedFiles) {
12651
+ if (!tracked.extensionFolder)
12652
+ return {};
12653
+ const extensionFiles = collectedFiles.filter((f) => f.path.startsWith(tracked.extensionFolder));
12654
+ return {
12655
+ taskOutput: {
12656
+ files: extensionFiles.map((f) => ({
12657
+ path: f.path,
12658
+ operation: f.operation
12659
+ }))
12660
+ }
12661
+ };
12662
+ }
12546
12663
  var ExtensionTaskHandler = class {
12547
12664
  constructor() {
12548
- this.extensionTasksCreated = /* @__PURE__ */ new Map();
12665
+ this.extensionTypesByPath = /* @__PURE__ */ new Map();
12549
12666
  }
12550
12667
  getExtensionTypesCreated() {
12551
- return Array.from(this.extensionTasksCreated.values());
12668
+ return Array.from(this.extensionTypesByPath.values());
12552
12669
  }
12553
- /** Inspects a write/edit event; if it targets an extension file, creates a tracked sub-task. */
12670
+ /** Inspects a write/edit event; creates a RUNNING sub-task on first sight, completes on the completed event. */
12554
12671
  async handle(tool, state, ctx) {
12555
12672
  const filePath = state.input?.filePath || state.title || "";
12556
12673
  if (!(0, constants_1.isExtensionsFile)(filePath))
@@ -12561,13 +12678,25 @@ var require_extension_handler = __commonJS({
12561
12678
  const extension = (0, constants_1.detectExtension)(content);
12562
12679
  if (!extension)
12563
12680
  return;
12564
- await this.ensureCreatedBy(filePath, ctx.workingDirectory);
12565
12681
  const normalizedPath = (0, constants_1.normalizeFilePath)(filePath);
12566
- if (this.extensionTasksCreated.has(normalizedPath))
12682
+ const isCompleted = state.status === "completed";
12683
+ if (isCompleted) {
12684
+ await this.ensureCreatedBy(filePath, ctx.workingDirectory);
12685
+ }
12686
+ if (!this.extensionTypesByPath.has(normalizedPath)) {
12687
+ this.extensionTypesByPath.set(normalizedPath, extension.extensionType);
12688
+ await (0, init_task_1.completeInitTask)(ctx);
12689
+ await this.createExtensionTask(normalizedPath, extension.label, filePath, ctx);
12690
+ }
12691
+ if (!isCompleted)
12692
+ return;
12693
+ const tracked = ctx.trackedTasks.get(`ext-${normalizedPath}`);
12694
+ if (!tracked || tracked.status !== ditto_codegen_types_12.Status.RUNNING)
12695
+ return;
12696
+ const jobContext = ctx.getJobContext();
12697
+ if (!jobContext)
12567
12698
  return;
12568
- this.extensionTasksCreated.set(normalizedPath, extension.extensionType);
12569
- await this.completeInitTask(ctx);
12570
- await this.createExtensionTask(normalizedPath, extension.label, filePath, ctx);
12699
+ await this.completeExtensionTask(tracked, jobContext.jobId, ctx);
12571
12700
  }
12572
12701
  /** Reads an extension file from disk and injects createdBy if missing. */
12573
12702
  async ensureCreatedBy(filePath, workingDirectory) {
@@ -12590,24 +12719,7 @@ var require_extension_handler = __commonJS({
12590
12719
  });
12591
12720
  }
12592
12721
  }
12593
- /** Completes the INIT_CODEGEN task once the extension tasks are created. */
12594
- async completeInitTask(ctx) {
12595
- const { store } = ctx;
12596
- if (store?.isCompleted || store?.kind !== ditto_codegen_types_12.TaskKind.INIT_CODEGEN)
12597
- return;
12598
- if (!store.jobId || !store.taskId)
12599
- return;
12600
- store.isCompleted = true;
12601
- try {
12602
- await codeGenerationService_12.codeGenerationService.updateTask(store.jobId, store.taskId, ditto_codegen_types_12.Status.COMPLETED, {});
12603
- logger_12.logger.info("[OpenCode] Completed init task before extension tasks");
12604
- } catch (error) {
12605
- logger_12.logger.error("[OpenCode] Failed to complete init task", {
12606
- error: error instanceof Error ? error.message : String(error)
12607
- });
12608
- }
12609
- }
12610
- /** Registers a new RUNNING sub-task in the job service for a detected extension. */
12722
+ /** Registers a RUNNING sub-task in the job service for a detected extension. */
12611
12723
  async createExtensionTask(normalizedPath, extensionType, originalPath, ctx) {
12612
12724
  const jobContext = ctx.getJobContext();
12613
12725
  if (!jobContext)
@@ -12618,12 +12730,13 @@ var require_extension_handler = __commonJS({
12618
12730
  ctx.taskCounter++;
12619
12731
  const taskId = `${jobContext.taskId}-ext-${ctx.taskCounter}`;
12620
12732
  const extensionFolder = normalizedPath.substring(0, normalizedPath.lastIndexOf("/") + 1);
12621
- ctx.trackedTasks.set(extensionKey, {
12733
+ const tracked = {
12622
12734
  taskId,
12623
12735
  description,
12624
12736
  status: ditto_codegen_types_12.Status.RUNNING,
12625
12737
  extensionFolder
12626
- });
12738
+ };
12739
+ ctx.trackedTasks.set(extensionKey, tracked);
12627
12740
  try {
12628
12741
  await codeGenerationService_12.codeGenerationService.addTask(jobContext.jobId, {
12629
12742
  id: taskId,
@@ -12640,6 +12753,20 @@ var require_extension_handler = __commonJS({
12640
12753
  });
12641
12754
  }
12642
12755
  }
12756
+ /** Marks the extension task COMPLETED with the file list collected so far for its folder. */
12757
+ async completeExtensionTask(tracked, jobId, ctx) {
12758
+ tracked.status = ditto_codegen_types_12.Status.COMPLETED;
12759
+ try {
12760
+ await codeGenerationService_12.codeGenerationService.updateTask(jobId, tracked.taskId, ditto_codegen_types_12.Status.COMPLETED, buildExtensionTaskPayload(tracked, ctx.collectedFiles));
12761
+ logger_12.logger.info("[OpenCode] Completed extension task", {
12762
+ description: tracked.description
12763
+ });
12764
+ } catch (error) {
12765
+ logger_12.logger.error("[OpenCode] Failed to complete extension task", {
12766
+ error: error instanceof Error ? error.message : String(error)
12767
+ });
12768
+ }
12769
+ }
12643
12770
  };
12644
12771
  exports2.ExtensionTaskHandler = ExtensionTaskHandler;
12645
12772
  }
@@ -12655,6 +12782,7 @@ var require_category_handler = __commonJS({
12655
12782
  var codeGenerationService_12 = require_codeGenerationService();
12656
12783
  var logger_12 = require_logger();
12657
12784
  var constants_1 = require_constants5();
12785
+ var init_task_1 = require_init_task();
12658
12786
  var CategoryKey;
12659
12787
  (function(CategoryKey2) {
12660
12788
  CategoryKey2["CodeSearch"] = "code-search";
@@ -12690,10 +12818,10 @@ var require_category_handler = __commonJS({
12690
12818
  await this.track(CategoryKey.RunCommands, ctx, state);
12691
12819
  }
12692
12820
  if (tool === "validate") {
12693
- await this.track(CategoryKey.Validate, ctx, state);
12821
+ await this.track(CategoryKey.Validate, ctx);
12694
12822
  }
12695
12823
  if (constants_1.WRITE_TOOLS.has(tool)) {
12696
- await this.track(CategoryKey.WriteCode, ctx);
12824
+ await this.track(CategoryKey.WriteCode, ctx, state);
12697
12825
  }
12698
12826
  }
12699
12827
  async trackLoadSkill(ctx, state) {
@@ -12712,6 +12840,7 @@ var require_category_handler = __commonJS({
12712
12840
  const jobContext = ctx.getJobContext();
12713
12841
  if (!jobContext)
12714
12842
  return;
12843
+ await (0, init_task_1.completeInitTask)(ctx);
12715
12844
  const description = CATEGORY_DESCRIPTIONS[key];
12716
12845
  const taskId = `${jobContext.taskId}-${key}`;
12717
12846
  ctx.trackedTasks.set(key, {
@@ -12774,6 +12903,7 @@ var require_task_tracker = __commonJS({
12774
12903
  var constants_1 = require_constants5();
12775
12904
  var extension_handler_1 = require_extension_handler();
12776
12905
  var category_handler_1 = require_category_handler();
12906
+ var hooks_1 = require_hooks();
12777
12907
  var OpenCodeTaskTracker = class {
12778
12908
  constructor(workingDirectory) {
12779
12909
  this.trackedTasks = /* @__PURE__ */ new Map();
@@ -12830,14 +12960,16 @@ var require_task_tracker = __commonJS({
12830
12960
  const ctx = this.handlerContext;
12831
12961
  await this.categoryHandler.handle(tool, ctx, state);
12832
12962
  this.taskCounter = ctx.taskCounter;
12963
+ await (0, hooks_1.runOnToolUse)((0, hooks_1.getActiveHooks)(), { tool, state });
12833
12964
  }
12834
12965
  async handleWriteEvent(tool, state) {
12835
- if (state.status !== "completed")
12836
- return;
12966
+ const isCompleted = state.status === "completed";
12837
12967
  const fileStates = tool === "batch-write" ? this.expandBatchWrite(state) : [state];
12838
12968
  const effectiveTool = tool === "batch-write" ? "write" : tool;
12839
12969
  for (const fileState of fileStates) {
12840
- this.trackFileChange(effectiveTool, fileState);
12970
+ if (isCompleted) {
12971
+ this.trackFileChange(effectiveTool, fileState);
12972
+ }
12841
12973
  const ctx = this.handlerContext;
12842
12974
  await this.extensionHandler.handle(effectiveTool, fileState, ctx);
12843
12975
  this.taskCounter = ctx.taskCounter;
@@ -12845,7 +12977,7 @@ var require_task_tracker = __commonJS({
12845
12977
  }
12846
12978
  expandBatchWrite(state) {
12847
12979
  return (state.input?.files ?? []).map((f) => ({
12848
- status: "completed",
12980
+ status: state.status,
12849
12981
  input: { filePath: f.path, content: f.content },
12850
12982
  metadata: { exists: false }
12851
12983
  }));
@@ -12866,21 +12998,6 @@ var require_task_tracker = __commonJS({
12866
12998
  logger_12.logger.info("[OpenCode] Loaded skill", { skillName });
12867
12999
  await this.categoryHandler.trackLoadSkill(this.handlerContext, state);
12868
13000
  }
12869
- /** Builds the task completion payload — includes file list for extension tasks. */
12870
- buildTaskPayload(tracked) {
12871
- if (tracked.extensionFolder) {
12872
- const extensionFiles = this.collectedFiles.filter((f) => f.path.startsWith(tracked.extensionFolder));
12873
- return {
12874
- taskOutput: {
12875
- files: extensionFiles.map((f) => ({
12876
- path: f.path,
12877
- operation: f.operation
12878
- }))
12879
- }
12880
- };
12881
- }
12882
- return {};
12883
- }
12884
13001
  /** Marks all still-running tracked tasks as COMPLETED (called on successful process exit). */
12885
13002
  async completeRemainingTasks() {
12886
13003
  const jobContext = this.getJobContext();
@@ -12888,7 +13005,7 @@ var require_task_tracker = __commonJS({
12888
13005
  return;
12889
13006
  for (const [, tracked] of this.trackedTasks) {
12890
13007
  if (tracked.status === ditto_codegen_types_12.Status.RUNNING) {
12891
- const payload = this.buildTaskPayload(tracked);
13008
+ const payload = (0, extension_handler_1.buildExtensionTaskPayload)(tracked, this.collectedFiles);
12892
13009
  try {
12893
13010
  await codeGenerationService_12.codeGenerationService.updateTask(jobContext.jobId, tracked.taskId, ditto_codegen_types_12.Status.COMPLETED, payload);
12894
13011
  logger_12.logger.info("[OpenCode] Completed task", {
@@ -17895,6 +18012,7 @@ var require_opencode_init = __commonJS({
17895
18012
  var pre_run_decision_1 = require_pre_run_decision();
17896
18013
  var experiments_1 = require_experiments();
17897
18014
  var environments_12 = require_environments();
18015
+ var hooks_1 = require_hooks();
17898
18016
  var runOpencodeInitFlow = async (blueprint, history, agentData) => {
17899
18017
  const store = job_context_storage_12.jobContextStorage.getStore();
17900
18018
  if (!store?.jobId || !store?.taskId) {
@@ -17919,6 +18037,7 @@ var require_opencode_init = __commonJS({
17919
18037
  Task_type: kind
17920
18038
  });
17921
18039
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
18040
+ let caughtError;
17922
18041
  try {
17923
18042
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
17924
18043
  let finalBlueprint = blueprint;
@@ -17967,6 +18086,7 @@ var require_opencode_init = __commonJS({
17967
18086
  });
17968
18087
  logger_12.logger.info("[OpenCode Init] Completed task", { taskId });
17969
18088
  } catch (error) {
18089
+ caughtError = error;
17970
18090
  const codegenError = (0, ditto_codegen_types_2.toCodegenError)(error);
17971
18091
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
17972
18092
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
@@ -17998,6 +18118,11 @@ var require_opencode_init = __commonJS({
17998
18118
  taskId,
17999
18119
  error: error instanceof Error ? error.message : String(error)
18000
18120
  });
18121
+ } finally {
18122
+ await (0, hooks_1.runOnFlowEnd)((0, hooks_1.getActiveHooks)(), {
18123
+ failed: caughtError !== void 0,
18124
+ error: caughtError
18125
+ });
18001
18126
  }
18002
18127
  };
18003
18128
  exports2.runOpencodeInitFlow = runOpencodeInitFlow;
@@ -18073,6 +18198,7 @@ var require_opencode_iterate = __commonJS({
18073
18198
  var logger_12 = require_logger();
18074
18199
  var config_1 = require_config();
18075
18200
  var biEvents_1 = require_biEvents();
18201
+ var hooks_1 = require_hooks();
18076
18202
  var runOpencodeIterateFlow = async (chatHistory, agentData) => {
18077
18203
  const store = job_context_storage_12.jobContextStorage.getStore();
18078
18204
  if (!store?.jobId || !store?.taskId) {
@@ -18097,6 +18223,7 @@ var require_opencode_iterate = __commonJS({
18097
18223
  Task_type: kind
18098
18224
  });
18099
18225
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
18226
+ let caughtError;
18100
18227
  try {
18101
18228
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
18102
18229
  const iterationOrchestrator = new OpenCodeIterationOrchestrator_1.OpenCodeIterationOrchestrator();
@@ -18132,6 +18259,7 @@ var require_opencode_iterate = __commonJS({
18132
18259
  });
18133
18260
  logger_12.logger.info("[OpenCode Iterate] Completed task", { taskId });
18134
18261
  } catch (error) {
18262
+ caughtError = error;
18135
18263
  const codegenError = (0, ditto_codegen_types_2.toCodegenError)(error);
18136
18264
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
18137
18265
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
@@ -18162,6 +18290,11 @@ var require_opencode_iterate = __commonJS({
18162
18290
  taskId,
18163
18291
  error: error instanceof Error ? error.message : String(error)
18164
18292
  });
18293
+ } finally {
18294
+ await (0, hooks_1.runOnFlowEnd)((0, hooks_1.getActiveHooks)(), {
18295
+ failed: caughtError !== void 0,
18296
+ error: caughtError
18297
+ });
18165
18298
  }
18166
18299
  };
18167
18300
  exports2.runOpencodeIterateFlow = runOpencodeIterateFlow;
@@ -18648,6 +18781,27 @@ async function main(ctx) {
18648
18781
  var getFirstTask = (job) => {
18649
18782
  return job.tasks?.[0];
18650
18783
  };
18784
+ function buildHooksForTask(jobId, taskId, kind, payload) {
18785
+ if (kind !== CodeGenService_1.TaskKind.INIT_CODEGEN && kind !== CodeGenService_1.TaskKind.ITERATE_CODEGEN) {
18786
+ return void 0;
18787
+ }
18788
+ const userInput = extractUserInput(kind, payload);
18789
+ return (0, environments_1.getCodegenEnvironmentConfig)().hooks.map((factory) => factory({ projectId: context_1.ctx.projectId, jobId, taskId, kind, userInput }));
18790
+ }
18791
+ function extractUserInput(kind, payload) {
18792
+ if (kind === CodeGenService_1.TaskKind.INIT_CODEGEN) {
18793
+ return payload.blueprint?.summary?.trim() || void 0;
18794
+ }
18795
+ if (kind === CodeGenService_1.TaskKind.ITERATE_CODEGEN) {
18796
+ const history = payload.history ?? [];
18797
+ for (let i = history.length - 1; i >= 0; i--) {
18798
+ if (history[i].role === "USER") {
18799
+ return history[i].text.trim() || void 0;
18800
+ }
18801
+ }
18802
+ }
18803
+ return void 0;
18804
+ }
18651
18805
  async function processJob(job) {
18652
18806
  if (!job.id) {
18653
18807
  throw new ditto_codegen_types_1.MissingJobIdError();
@@ -18658,14 +18812,15 @@ async function processJob(job) {
18658
18812
  logger_1.logger.warn("[Job] No initial task found, skipping", { jobId });
18659
18813
  return;
18660
18814
  }
18661
- await job_context_storage_1.jobContextStorage.run({ jobId, taskId: task.id, kind: task.kind }, async () => {
18815
+ const payload = task.payload ?? {};
18816
+ const hooks = buildHooksForTask(jobId, task.id, task.kind, payload);
18817
+ await job_context_storage_1.jobContextStorage.run({ jobId, taskId: task.id, kind: task.kind, hooks }, async () => {
18662
18818
  logger_1.logger.info("[Job] Start processing", { taskKind: task.kind });
18663
18819
  context_1.ctx.setJobStatus(jobId, CodeGenService_1.Status.RUNNING);
18664
18820
  logger_1.logger.info("[Job] Marked job RUNNING", { initTaskId: task.id });
18665
18821
  jobCancellationMonitor.start(jobId);
18666
18822
  jobTimeoutMonitor.start(jobId);
18667
18823
  try {
18668
- const payload = task.payload ?? {};
18669
18824
  const history = payload.history ?? [];
18670
18825
  const blueprint = payload.blueprint;
18671
18826
  const agentData = payload.agentData;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/ditto-codegen-public",
3
- "version": "1.0.313",
3
+ "version": "1.0.315",
4
4
  "description": "AI-powered Wix CLI app generator - standalone executable",
5
5
  "scripts": {
6
6
  "build": "node build.mjs",
@@ -27,5 +27,5 @@
27
27
  "@wix/ditto-codegen": "1.0.0",
28
28
  "esbuild": "^0.27.2"
29
29
  },
30
- "falconPackageHash": "e6d1a5f7a174a6739d369cde99966269aa4eca433ac218e6dd63e79f"
30
+ "falconPackageHash": "a729cdb06df2c35379619880dc60336a5505a5a382a7b737b17b1c05"
31
31
  }