@wix/ditto-codegen-public 1.0.312 → 1.0.314

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 +125 -5
  2. package/package.json +2 -2
package/dist/out.js CHANGED
@@ -504,6 +504,7 @@ var require_context = __commonJS({
504
504
  projectId: process.env.PROJECT_ID || "test",
505
505
  appNamespace: process.env.APP_NAMESPACE,
506
506
  codeIdentifier: process.env.CODE_IDENTIFIER,
507
+ metasiteId: process.env.METASITE_ID,
507
508
  hasActiveJobs: () => {
508
509
  return Object.keys(exports2.ctx.activeJobs).some((jobId) => exports2.ctx.activeJobs[jobId] === types_1.Status.RUNNING);
509
510
  },
@@ -11434,6 +11435,7 @@ var require_prompt_utils = __commonJS({
11434
11435
  function buildAppContext() {
11435
11436
  const appNamespace = process.env.APP_NAMESPACE;
11436
11437
  const codeIdentifier = process.env.CODE_IDENTIFIER;
11438
+ const metasiteId = process.env.METASITE_ID;
11437
11439
  const parts = [];
11438
11440
  if (appNamespace) {
11439
11441
  parts.push(`APP_NAMESPACE: ${appNamespace}
@@ -11443,6 +11445,9 @@ Use this namespace when creating data collections (for idSuffix scoping).`);
11443
11445
  parts.push(`CODE_IDENTIFIER: ${codeIdentifier}
11444
11446
  When generating editor React component or function library extensions, use this identifier as the type prefix (e.g. type: '${codeIdentifier}.ComponentName').`);
11445
11447
  }
11448
+ if (metasiteId) {
11449
+ parts.push(`METASITE_ID: ${metasiteId}`);
11450
+ }
11446
11451
  return parts.join("\n\n");
11447
11452
  }
11448
11453
  function extractUserRequestAndFilteredHistory(chatHistory) {
@@ -12090,7 +12095,8 @@ var require_app_builder = __commonJS({
12090
12095
  { filename: "codegen-instructions.md", content: codegen_rules_1.CODEGEN_RULES }
12091
12096
  ],
12092
12097
  askRules: [{ filename: "ask-instructions.md", content: ask_rules_1.ASK_RULES }],
12093
- decisionCheckers: [pre_run_decision_1.checkSiteUIDecision]
12098
+ decisionCheckers: [pre_run_decision_1.checkSiteUIDecision],
12099
+ hooks: []
12094
12100
  };
12095
12101
  }
12096
12102
  });
@@ -12108,20 +12114,93 @@ var require_studio_2 = __commonJS({
12108
12114
  { filename: "codegen-instructions.md", content: codegen_rules_1.CODEGEN_RULES }
12109
12115
  ],
12110
12116
  askRules: [{ filename: "ask-instructions.md", content: ask_rules_1.ASK_RULES }],
12111
- decisionCheckers: []
12117
+ decisionCheckers: [],
12118
+ hooks: []
12112
12119
  };
12113
12120
  }
12114
12121
  });
12115
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
+
12116
12190
  // dist/environments/index.js
12117
12191
  var require_environments = __commonJS({
12118
12192
  "dist/environments/index.js"(exports2) {
12119
12193
  "use strict";
12120
12194
  Object.defineProperty(exports2, "__esModule", { value: true });
12195
+ exports2.getActiveHooks = void 0;
12121
12196
  exports2.getCodegenEnvironmentConfig = getCodegenEnvironmentConfig;
12122
12197
  var types_1 = require_types_impl();
12123
12198
  var app_builder_1 = require_app_builder();
12124
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
+ } });
12125
12204
  function getCodegenEnvironmentConfig(environment) {
12126
12205
  switch (environment) {
12127
12206
  case types_1.Environment.STUDIO_2:
@@ -12769,6 +12848,7 @@ var require_task_tracker = __commonJS({
12769
12848
  var constants_1 = require_constants5();
12770
12849
  var extension_handler_1 = require_extension_handler();
12771
12850
  var category_handler_1 = require_category_handler();
12851
+ var hooks_1 = require_hooks();
12772
12852
  var OpenCodeTaskTracker = class {
12773
12853
  constructor(workingDirectory) {
12774
12854
  this.trackedTasks = /* @__PURE__ */ new Map();
@@ -12825,6 +12905,7 @@ var require_task_tracker = __commonJS({
12825
12905
  const ctx = this.handlerContext;
12826
12906
  await this.categoryHandler.handle(tool, ctx, state);
12827
12907
  this.taskCounter = ctx.taskCounter;
12908
+ await (0, hooks_1.runOnToolUse)((0, hooks_1.getActiveHooks)(), { tool, state });
12828
12909
  }
12829
12910
  async handleWriteEvent(tool, state) {
12830
12911
  if (state.status !== "completed")
@@ -17890,6 +17971,7 @@ var require_opencode_init = __commonJS({
17890
17971
  var pre_run_decision_1 = require_pre_run_decision();
17891
17972
  var experiments_1 = require_experiments();
17892
17973
  var environments_12 = require_environments();
17974
+ var hooks_1 = require_hooks();
17893
17975
  var runOpencodeInitFlow = async (blueprint, history, agentData) => {
17894
17976
  const store = job_context_storage_12.jobContextStorage.getStore();
17895
17977
  if (!store?.jobId || !store?.taskId) {
@@ -17914,6 +17996,7 @@ var require_opencode_init = __commonJS({
17914
17996
  Task_type: kind
17915
17997
  });
17916
17998
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
17999
+ let caughtError;
17917
18000
  try {
17918
18001
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
17919
18002
  let finalBlueprint = blueprint;
@@ -17962,6 +18045,7 @@ var require_opencode_init = __commonJS({
17962
18045
  });
17963
18046
  logger_12.logger.info("[OpenCode Init] Completed task", { taskId });
17964
18047
  } catch (error) {
18048
+ caughtError = error;
17965
18049
  const codegenError = (0, ditto_codegen_types_2.toCodegenError)(error);
17966
18050
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
17967
18051
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
@@ -17993,6 +18077,11 @@ var require_opencode_init = __commonJS({
17993
18077
  taskId,
17994
18078
  error: error instanceof Error ? error.message : String(error)
17995
18079
  });
18080
+ } finally {
18081
+ await (0, hooks_1.runOnFlowEnd)((0, hooks_1.getActiveHooks)(), {
18082
+ failed: caughtError !== void 0,
18083
+ error: caughtError
18084
+ });
17996
18085
  }
17997
18086
  };
17998
18087
  exports2.runOpencodeInitFlow = runOpencodeInitFlow;
@@ -18068,6 +18157,7 @@ var require_opencode_iterate = __commonJS({
18068
18157
  var logger_12 = require_logger();
18069
18158
  var config_1 = require_config();
18070
18159
  var biEvents_1 = require_biEvents();
18160
+ var hooks_1 = require_hooks();
18071
18161
  var runOpencodeIterateFlow = async (chatHistory, agentData) => {
18072
18162
  const store = job_context_storage_12.jobContextStorage.getStore();
18073
18163
  if (!store?.jobId || !store?.taskId) {
@@ -18092,6 +18182,7 @@ var require_opencode_iterate = __commonJS({
18092
18182
  Task_type: kind
18093
18183
  });
18094
18184
  const outputPath = (0, codegen_flow_helpers_12.getOutputPath)();
18185
+ let caughtError;
18095
18186
  try {
18096
18187
  (0, agent_io_1.writeAgentInput)(outputPath, agentData);
18097
18188
  const iterationOrchestrator = new OpenCodeIterationOrchestrator_1.OpenCodeIterationOrchestrator();
@@ -18127,6 +18218,7 @@ var require_opencode_iterate = __commonJS({
18127
18218
  });
18128
18219
  logger_12.logger.info("[OpenCode Iterate] Completed task", { taskId });
18129
18220
  } catch (error) {
18221
+ caughtError = error;
18130
18222
  const codegenError = (0, ditto_codegen_types_2.toCodegenError)(error);
18131
18223
  const agentOutput = (0, agent_io_1.readAgentOutput)(outputPath);
18132
18224
  await (0, codegen_flow_helpers_12.updateJobPayload)(localJobContext, {
@@ -18157,6 +18249,11 @@ var require_opencode_iterate = __commonJS({
18157
18249
  taskId,
18158
18250
  error: error instanceof Error ? error.message : String(error)
18159
18251
  });
18252
+ } finally {
18253
+ await (0, hooks_1.runOnFlowEnd)((0, hooks_1.getActiveHooks)(), {
18254
+ failed: caughtError !== void 0,
18255
+ error: caughtError
18256
+ });
18160
18257
  }
18161
18258
  };
18162
18259
  exports2.runOpencodeIterateFlow = runOpencodeIterateFlow;
@@ -18634,7 +18731,8 @@ async function main(ctx) {
18634
18731
  logger_1.logger.info("[Startup] CodeGen CLI starting", {
18635
18732
  projectId: ctx.projectId,
18636
18733
  appNameSpace: ctx.appNamespace,
18637
- codeIdentifier: ctx.codeIdentifier
18734
+ codeIdentifier: ctx.codeIdentifier,
18735
+ metasiteId: ctx.metasiteId
18638
18736
  });
18639
18737
  await initOpenCode();
18640
18738
  await alwaysOnLoop();
@@ -18642,6 +18740,27 @@ async function main(ctx) {
18642
18740
  var getFirstTask = (job) => {
18643
18741
  return job.tasks?.[0];
18644
18742
  };
18743
+ function buildHooksForTask(jobId, taskId, kind, payload) {
18744
+ if (kind !== CodeGenService_1.TaskKind.INIT_CODEGEN && kind !== CodeGenService_1.TaskKind.ITERATE_CODEGEN) {
18745
+ return void 0;
18746
+ }
18747
+ const userInput = extractUserInput(kind, payload);
18748
+ return (0, environments_1.getCodegenEnvironmentConfig)().hooks.map((factory) => factory({ projectId: context_1.ctx.projectId, jobId, taskId, kind, userInput }));
18749
+ }
18750
+ function extractUserInput(kind, payload) {
18751
+ if (kind === CodeGenService_1.TaskKind.INIT_CODEGEN) {
18752
+ return payload.blueprint?.summary?.trim() || void 0;
18753
+ }
18754
+ if (kind === CodeGenService_1.TaskKind.ITERATE_CODEGEN) {
18755
+ const history = payload.history ?? [];
18756
+ for (let i = history.length - 1; i >= 0; i--) {
18757
+ if (history[i].role === "USER") {
18758
+ return history[i].text.trim() || void 0;
18759
+ }
18760
+ }
18761
+ }
18762
+ return void 0;
18763
+ }
18645
18764
  async function processJob(job) {
18646
18765
  if (!job.id) {
18647
18766
  throw new ditto_codegen_types_1.MissingJobIdError();
@@ -18652,14 +18771,15 @@ async function processJob(job) {
18652
18771
  logger_1.logger.warn("[Job] No initial task found, skipping", { jobId });
18653
18772
  return;
18654
18773
  }
18655
- await job_context_storage_1.jobContextStorage.run({ jobId, taskId: task.id, kind: task.kind }, async () => {
18774
+ const payload = task.payload ?? {};
18775
+ const hooks = buildHooksForTask(jobId, task.id, task.kind, payload);
18776
+ await job_context_storage_1.jobContextStorage.run({ jobId, taskId: task.id, kind: task.kind, hooks }, async () => {
18656
18777
  logger_1.logger.info("[Job] Start processing", { taskKind: task.kind });
18657
18778
  context_1.ctx.setJobStatus(jobId, CodeGenService_1.Status.RUNNING);
18658
18779
  logger_1.logger.info("[Job] Marked job RUNNING", { initTaskId: task.id });
18659
18780
  jobCancellationMonitor.start(jobId);
18660
18781
  jobTimeoutMonitor.start(jobId);
18661
18782
  try {
18662
- const payload = task.payload ?? {};
18663
18783
  const history = payload.history ?? [];
18664
18784
  const blueprint = payload.blueprint;
18665
18785
  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.312",
3
+ "version": "1.0.314",
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": "54314505ec73d8bc89e0dd1b9bb6d3ef4e00022671f6894440dcb6ce"
30
+ "falconPackageHash": "d9b12ec21f21078ba1ac9393765773db4870fefd00a8a85fc542cd50"
31
31
  }