@wix/ditto-codegen-public 1.0.352 → 1.0.353

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 +471 -372
  2. package/package.json +2 -2
package/dist/out.js CHANGED
@@ -39,13 +39,62 @@ var require_types_impl = __commonJS({
39
39
  "../../node_modules/@wix/ambassador-ctp-codegen-job-service-v1-job/cjs/build/types.impl.js"(exports2) {
40
40
  "use strict";
41
41
  Object.defineProperty(exports2, "__esModule", { value: true });
42
- exports2.UserDecisionQuestionType = exports2.TaskKind = exports2.Status = exports2.Environment = void 0;
42
+ exports2.UserDecisionQuestionType = exports2.TaskKind = exports2.Status = exports2.ProcessType = exports2.FileOperation = exports2.ErrorType = exports2.Environment = exports2.ChatMessageRole = exports2.ExtensionType = void 0;
43
+ var ExtensionType;
44
+ (function(ExtensionType2) {
45
+ ExtensionType2["UNDEFINED_EXTENSION_TYPE"] = "UNDEFINED_EXTENSION_TYPE";
46
+ ExtensionType2["DASHBOARD_PAGE"] = "DASHBOARD_PAGE";
47
+ ExtensionType2["DASHBOARD_PLUGIN"] = "DASHBOARD_PLUGIN";
48
+ ExtensionType2["DASHBOARD_MODAL"] = "DASHBOARD_MODAL";
49
+ ExtensionType2["SITE_WIDGET"] = "SITE_WIDGET";
50
+ ExtensionType2["EMBEDDED_SCRIPT"] = "EMBEDDED_SCRIPT";
51
+ ExtensionType2["BACKEND_API"] = "BACKEND_API";
52
+ ExtensionType2["BACKEND_EVENT"] = "BACKEND_EVENT";
53
+ ExtensionType2["SERVICE_PLUGIN"] = "SERVICE_PLUGIN";
54
+ ExtensionType2["WEB_METHODS"] = "WEB_METHODS";
55
+ ExtensionType2["SITE_COMPONENT"] = "SITE_COMPONENT";
56
+ ExtensionType2["WEBHOOK"] = "WEBHOOK";
57
+ ExtensionType2["SITE_PLUGIN"] = "SITE_PLUGIN";
58
+ ExtensionType2["DATA_COLLECTION"] = "DATA_COLLECTION";
59
+ ExtensionType2["DASHBOARD_MENU_PLUGIN"] = "DASHBOARD_MENU_PLUGIN";
60
+ ExtensionType2["CUSTOM_ELEMENT_WIDGET"] = "CUSTOM_ELEMENT_WIDGET";
61
+ ExtensionType2["EDITOR_REACT_COMPONENT"] = "EDITOR_REACT_COMPONENT";
62
+ })(ExtensionType || (exports2.ExtensionType = ExtensionType = {}));
63
+ var ChatMessageRole;
64
+ (function(ChatMessageRole2) {
65
+ ChatMessageRole2["UNKNOWN_CHAT_MESSAGE_ROLE"] = "UNKNOWN_CHAT_MESSAGE_ROLE";
66
+ ChatMessageRole2["USER"] = "USER";
67
+ ChatMessageRole2["ASSISTANT"] = "ASSISTANT";
68
+ })(ChatMessageRole || (exports2.ChatMessageRole = ChatMessageRole = {}));
43
69
  var Environment;
44
70
  (function(Environment2) {
45
71
  Environment2["UNKNOWN_ENVIRONMENT"] = "UNKNOWN_ENVIRONMENT";
46
72
  Environment2["APP_BUILDER"] = "APP_BUILDER";
47
73
  Environment2["STUDIO_2"] = "STUDIO_2";
74
+ Environment2["HARMONY"] = "HARMONY";
48
75
  })(Environment || (exports2.Environment = Environment = {}));
76
+ var ErrorType;
77
+ (function(ErrorType2) {
78
+ ErrorType2["UNKNOWN_ERROR_TYPE"] = "UNKNOWN_ERROR_TYPE";
79
+ ErrorType2["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
80
+ ErrorType2["PROCESS_EXECUTION_ERROR"] = "PROCESS_EXECUTION_ERROR";
81
+ ErrorType2["UNEXPECTED_ERROR"] = "UNEXPECTED_ERROR";
82
+ ErrorType2["MISSING_JOB_ID_ERROR"] = "MISSING_JOB_ID_ERROR";
83
+ })(ErrorType || (exports2.ErrorType = ErrorType = {}));
84
+ var FileOperation;
85
+ (function(FileOperation2) {
86
+ FileOperation2["UNKNOWN_FILE_OPERATION"] = "UNKNOWN_FILE_OPERATION";
87
+ FileOperation2["INSERT"] = "INSERT";
88
+ FileOperation2["DELETE"] = "DELETE";
89
+ FileOperation2["EDIT"] = "EDIT";
90
+ })(FileOperation || (exports2.FileOperation = FileOperation = {}));
91
+ var ProcessType;
92
+ (function(ProcessType2) {
93
+ ProcessType2["UNKNOWN_PROCESS_TYPE"] = "UNKNOWN_PROCESS_TYPE";
94
+ ProcessType2["SPAWN"] = "SPAWN";
95
+ ProcessType2["EXECUTION"] = "EXECUTION";
96
+ ProcessType2["INITIALIZATION"] = "INITIALIZATION";
97
+ })(ProcessType || (exports2.ProcessType = ProcessType = {}));
49
98
  var Status;
50
99
  (function(Status2) {
51
100
  Status2["UNKNOWN_STATUS"] = "UNKNOWN_STATUS";
@@ -65,6 +114,7 @@ var require_types_impl = __commonJS({
65
114
  TaskKind2["RUN_AGENT"] = "RUN_AGENT";
66
115
  TaskKind2["FIX_CODE"] = "FIX_CODE";
67
116
  TaskKind2["ASK_CODEGEN"] = "ASK_CODEGEN";
117
+ TaskKind2["FIX_GIT_CONFLICTS"] = "FIX_GIT_CONFLICTS";
68
118
  })(TaskKind || (exports2.TaskKind = TaskKind = {}));
69
119
  var UserDecisionQuestionType;
70
120
  (function(UserDecisionQuestionType2) {
@@ -10335,373 +10385,65 @@ var require_wixTokenRefresh = __commonJS({
10335
10385
  }
10336
10386
  });
10337
10387
 
10338
- // dist/services/CodeGenService.js
10339
- var require_CodeGenService = __commonJS({
10340
- "dist/services/CodeGenService.js"(exports2) {
10388
+ // ../codegen-types/dist/errors/ErrorTypes.js
10389
+ var require_ErrorTypes = __commonJS({
10390
+ "../codegen-types/dist/errors/ErrorTypes.js"(exports2) {
10341
10391
  "use strict";
10342
10392
  Object.defineProperty(exports2, "__esModule", { value: true });
10343
- exports2.CodeGenService = exports2.TaskKind = exports2.Status = void 0;
10344
- exports2.createCodeGenErrorHandler = createCodeGenErrorHandler;
10345
- var http_client_1 = require_index_node();
10346
- var http_1 = require_http_impl();
10347
- var wixTokenRefresh_1 = require_wixTokenRefresh();
10348
- var types_1 = require_types_impl();
10349
- Object.defineProperty(exports2, "Status", { enumerable: true, get: function() {
10350
- return types_1.Status;
10351
- } });
10352
- Object.defineProperty(exports2, "TaskKind", { enumerable: true, get: function() {
10353
- return types_1.TaskKind;
10354
- } });
10355
- var logger_12 = require_logger();
10356
- function createCodeGenErrorHandler(getHttpClient) {
10357
- return {
10358
- handleError: (error, { requestOptions }) => {
10359
- if (!http_client_1.HttpClient.isHttpError(error))
10360
- return;
10361
- if (getHttpClient().isCancel(error))
10362
- return;
10363
- logger_12.logger.error("[CodeGenService] HTTP request failed", {
10364
- method: error.config?.method?.toUpperCase(),
10365
- url: requestOptions.url ?? error.config?.url,
10366
- status: error.response?.status,
10367
- code: error.code,
10368
- requestId: error.requestId || void 0,
10369
- message: error.message,
10370
- data: error.response?.data
10371
- });
10372
- }
10373
- };
10374
- }
10375
- var CodeGenService = class {
10376
- constructor(projectId, httpClient) {
10377
- this.projectId = projectId;
10378
- this.accessToken = process.env.WIX_ACCESS_TOKEN;
10379
- this.sandboxId = process.env.SANDBOX_ID;
10380
- this.refreshAccessToken = async () => {
10381
- const token = await (0, wixTokenRefresh_1.refreshWixAccessToken)();
10382
- this.setAccessToken(token);
10383
- return token;
10384
- };
10385
- this.request = async (req) => {
10386
- try {
10387
- return await this.httpClient.request(this.withAuth(req));
10388
- } catch (err) {
10389
- if (!this.isUnauthorized(err))
10390
- throw err;
10391
- logger_12.logger.warn("[CodeGenService] 401 received, refreshing token and retrying once");
10392
- await this.refreshAccessToken();
10393
- return await this.httpClient.request(this.withAuth(req));
10394
- }
10395
- };
10396
- this.fetchPendingJobs = async () => {
10397
- const resp = await this.request((0, http_1.listProjectJobs)({
10398
- projectId: this.projectId
10399
- }));
10400
- const jobs = resp.data?.jobs ?? [];
10401
- return jobs.filter(this.shouldProcessJob);
10402
- };
10403
- this.shouldProcessJob = (job) => {
10404
- if (job.status !== types_1.Status.PENDING)
10405
- return false;
10406
- if (this.sandboxId)
10407
- return job.sandboxId === this.sandboxId;
10408
- return true;
10409
- };
10410
- this.markJobAsCompleted = async (jobId) => {
10411
- await this.request((0, http_1.updateJob)({
10412
- projectId: this.projectId,
10413
- job: {
10414
- id: jobId,
10415
- projectId: this.projectId,
10416
- status: types_1.Status.COMPLETED
10417
- }
10418
- }));
10419
- };
10420
- this.markJobAsRuninng = async (jobId) => {
10421
- await this.request((0, http_1.updateJob)({
10422
- projectId: this.projectId,
10423
- job: {
10424
- id: jobId,
10425
- projectId: this.projectId,
10426
- status: types_1.Status.RUNNING
10427
- }
10428
- }));
10429
- };
10430
- this.markJobAsCancelled = async (jobId) => {
10431
- await this.request((0, http_1.updateJob)({
10432
- projectId: this.projectId,
10433
- job: {
10434
- id: jobId,
10435
- projectId: this.projectId,
10436
- status: types_1.Status.CANCELLED
10437
- }
10438
- }));
10439
- };
10440
- this.updateJob = async (jobId, payload) => {
10441
- await this.request((0, http_1.updateJob)({
10442
- projectId: this.projectId,
10443
- job: {
10444
- id: jobId,
10445
- projectId: this.projectId,
10446
- payload
10447
- }
10448
- }));
10449
- };
10450
- this.updateJobStatus = async (jobId, status) => {
10451
- logger_12.logger.info("Updating job status", {
10452
- jobId,
10453
- status
10454
- });
10455
- await this.request((0, http_1.updateJob)({
10456
- projectId: this.projectId,
10457
- job: {
10458
- id: jobId,
10459
- projectId: this.projectId,
10460
- status
10461
- }
10462
- }));
10463
- };
10464
- this.updateJobWithPendingDecision = async (jobId, userDecision) => {
10465
- logger_12.logger.info("Setting job to await user decision", {
10466
- jobId,
10467
- decisionId: userDecision.id,
10468
- userDecision: JSON.stringify(userDecision, null, 2)
10469
- });
10470
- await this.request((0, http_1.updateJob)({
10471
- projectId: this.projectId,
10472
- job: {
10473
- id: jobId,
10474
- projectId: this.projectId,
10475
- status: types_1.Status.AWAITING_USER_INPUT,
10476
- pendingUserDecisions: [userDecision]
10477
- }
10478
- }));
10479
- };
10480
- this.resumeJobFromDecision = async (jobId) => {
10481
- logger_12.logger.info("Resuming job from user decision");
10482
- await this.request((0, http_1.updateJob)({
10483
- projectId: this.projectId,
10484
- job: {
10485
- id: jobId,
10486
- projectId: this.projectId,
10487
- status: types_1.Status.RUNNING,
10488
- pendingUserDecisions: []
10489
- }
10490
- }));
10491
- };
10492
- this.updateTask = async (jobId, taskId, status, payload) => {
10493
- await this.request((0, http_1.updateTask)({
10494
- projectId: this.projectId,
10495
- jobId,
10496
- task: {
10497
- id: taskId,
10498
- status,
10499
- payload
10500
- }
10501
- }));
10502
- };
10503
- this.addTask = async (jobId, task) => {
10504
- await this.request((0, http_1.createTask)({
10505
- projectId: this.projectId,
10506
- jobId,
10507
- task: {
10508
- id: task.id,
10509
- kind: task.kind,
10510
- name: task.name,
10511
- status: task.status,
10512
- payload: task.payload,
10513
- agentName: task.agentName,
10514
- description: typeof task?.description === "string" ? task.description : task?.payload ? JSON.stringify(task.payload) : ""
10515
- }
10516
- }));
10517
- };
10518
- this.getJob = async (jobId) => {
10519
- const resp = await this.request((0, http_1.getJob)({
10520
- projectId: this.projectId,
10521
- jobId
10522
- }));
10523
- return resp.data?.job ?? null;
10524
- };
10525
- if (httpClient) {
10526
- this.httpClient = httpClient;
10527
- return;
10528
- }
10529
- const serverUrl = process.env.CODEGEN_SERVER_BASE_URL || "https://manage.wix.com";
10530
- this.httpClient = (0, http_client_1.createHttpClient)({
10531
- baseURL: serverUrl,
10532
- errorHandler: createCodeGenErrorHandler(() => this.httpClient)
10533
- });
10534
- }
10535
- getAccessToken() {
10536
- return this.accessToken;
10537
- }
10538
- setAccessToken(token) {
10539
- this.accessToken = token;
10540
- }
10541
- isUnauthorized(error) {
10542
- if (!http_client_1.HttpClient.isHttpError(error))
10543
- return false;
10544
- if (this.httpClient.isCancel(error))
10545
- return false;
10546
- return error.response?.status === 401;
10547
- }
10548
- withAuth(req) {
10549
- const authHeader = { authorization: `Bearer ${this.accessToken}` };
10550
- if (typeof req === "function") {
10551
- return (ctx) => {
10552
- const r = req(ctx);
10553
- return { ...r, headers: { ...r.headers ?? {}, ...authHeader } };
10554
- };
10555
- }
10556
- return { ...req, headers: { ...req.headers ?? {}, ...authHeader } };
10557
- }
10558
- };
10559
- exports2.CodeGenService = CodeGenService;
10560
- }
10561
- });
10562
-
10563
- // dist/services/codeGenerationService.js
10564
- var require_codeGenerationService = __commonJS({
10565
- "dist/services/codeGenerationService.js"(exports2) {
10566
- "use strict";
10567
- Object.defineProperty(exports2, "__esModule", { value: true });
10568
- exports2.codeGenerationService = void 0;
10569
- var CodeGenService_12 = require_CodeGenService();
10570
- var context_12 = require_context();
10571
- exports2.codeGenerationService = new CodeGenService_12.CodeGenService(context_12.ctx.projectId);
10572
- }
10573
- });
10574
-
10575
- // dist/events/cli-listeners.js
10576
- var require_cli_listeners = __commonJS({
10577
- "dist/events/cli-listeners.js"(exports2) {
10578
- "use strict";
10579
- Object.defineProperty(exports2, "__esModule", { value: true });
10580
- exports2.attachOrchestratorListeners = attachOrchestratorListeners;
10581
- var logger_12 = require_logger();
10582
- function attachOrchestratorListeners(eventEmitter) {
10583
- eventEmitter.onEvent("start:init", (info) => {
10584
- logger_12.logger.info("\u{1F680} Starting initial code generation for app", {
10585
- appName: info.appName,
10586
- summary: info.summary,
10587
- outputPath: info.outputPath,
10588
- extensionsCount: info.extensionsCount
10589
- });
10590
- });
10591
- eventEmitter.onEvent("start:iteration", ({ outputPath }) => {
10592
- logger_12.logger.info("\u{1F680} Starting code iteration", { outputPath });
10593
- });
10594
- eventEmitter.onEvent("start:ask", ({ outputPath }) => {
10595
- logger_12.logger.info("\u{1F680} Starting ask", { outputPath });
10596
- });
10597
- eventEmitter.onEvent("finish:init", ({ outputPath, durationMs }) => {
10598
- logger_12.logger.info("\u2705 Init completed", {
10599
- outputPath,
10600
- durationMs,
10601
- durationFormatted: getFormattedDuration(durationMs)
10602
- });
10603
- });
10604
- eventEmitter.onEvent("finish:iteration", ({ outputPath, durationMs }) => {
10605
- logger_12.logger.info("\u2705 Iteration completed", {
10606
- outputPath,
10607
- durationMs,
10608
- durationFormatted: getFormattedDuration(durationMs)
10609
- });
10610
- });
10611
- eventEmitter.onEvent("finish:ask", ({ durationMs }) => {
10612
- logger_12.logger.info("\u2705 Ask completed", {
10613
- durationMs,
10614
- durationFormatted: getFormattedDuration(durationMs)
10615
- });
10616
- });
10617
- eventEmitter.onEvent("opencode:start", ({ outputPath }) => {
10618
- logger_12.logger.info("\u{1F527} OpenCode starting", { outputPath });
10619
- });
10620
- eventEmitter.onEvent("opencode:output", ({ data }) => {
10621
- process.stdout.write(data);
10622
- });
10623
- eventEmitter.onEvent("opencode:done", ({ durationMs }) => {
10624
- logger_12.logger.info("\u{1F527} OpenCode completed", {
10625
- durationMs,
10626
- durationFormatted: getFormattedDuration(durationMs)
10627
- });
10628
- });
10629
- eventEmitter.onEvent("opencode:error", ({ error, exitCode, durationMs }) => {
10630
- logger_12.logger.error("\u274C OpenCode failed", {
10631
- error,
10632
- exitCode,
10633
- durationMs,
10634
- durationFormatted: getFormattedDuration(durationMs)
10635
- });
10636
- });
10637
- }
10638
- var getFormattedDuration = (ms) => {
10639
- const seconds = ms / 1e3;
10640
- const minutes = seconds / 60;
10641
- return `${ms} ms (${minutes.toFixed(2)} min or ${seconds.toFixed(2)} sec)`;
10642
- };
10643
- }
10644
- });
10645
-
10646
- // ../codegen-types/dist/errors/ErrorTypes.js
10647
- var require_ErrorTypes = __commonJS({
10648
- "../codegen-types/dist/errors/ErrorTypes.js"(exports2) {
10649
- "use strict";
10650
- Object.defineProperty(exports2, "__esModule", { value: true });
10651
- exports2.ErrorType = void 0;
10652
- var ErrorType;
10653
- (function(ErrorType2) {
10654
- ErrorType2["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
10655
- ErrorType2["PROCESS_EXECUTION_ERROR"] = "PROCESS_EXECUTION_ERROR";
10656
- ErrorType2["UNEXPECTED_ERROR"] = "UNEXPECTED_ERROR";
10657
- ErrorType2["MISSING_JOB_ID_ERROR"] = "MISSING_JOB_ID_ERROR";
10658
- })(ErrorType || (exports2.ErrorType = ErrorType = {}));
10659
- }
10660
- });
10661
-
10662
- // ../codegen-types/dist/errors/enums.js
10663
- var require_enums = __commonJS({
10664
- "../codegen-types/dist/errors/enums.js"(exports2) {
10665
- "use strict";
10666
- Object.defineProperty(exports2, "__esModule", { value: true });
10667
- exports2.ExtensionGenerationOperation = exports2.ProcessType = void 0;
10668
- var ProcessType;
10669
- (function(ProcessType2) {
10670
- ProcessType2["SPAWN"] = "spawn";
10671
- ProcessType2["EXECUTION"] = "execution";
10672
- ProcessType2["INITIALIZATION"] = "initialization";
10673
- })(ProcessType || (exports2.ProcessType = ProcessType = {}));
10674
- var ExtensionGenerationOperation;
10675
- (function(ExtensionGenerationOperation2) {
10676
- ExtensionGenerationOperation2["INSERT"] = "insert";
10677
- ExtensionGenerationOperation2["DELETE"] = "delete";
10678
- ExtensionGenerationOperation2["EDIT"] = "edit";
10679
- })(ExtensionGenerationOperation || (exports2.ExtensionGenerationOperation = ExtensionGenerationOperation = {}));
10680
- }
10681
- });
10682
-
10683
- // ../codegen-types/dist/errors/BaseCodegenError.js
10684
- var require_BaseCodegenError = __commonJS({
10685
- "../codegen-types/dist/errors/BaseCodegenError.js"(exports2) {
10686
- "use strict";
10687
- Object.defineProperty(exports2, "__esModule", { value: true });
10688
- exports2.BaseCodegenError = void 0;
10689
- var BaseCodegenError = class extends Error {
10690
- constructor(message) {
10691
- super(message);
10692
- }
10693
- /**
10694
- * Convert error to JSON format for API responses
10695
- */
10696
- toJSON() {
10697
- const additional = this.getAdditionalProperties();
10698
- return {
10699
- name: this.name,
10700
- message: this.message,
10701
- errorType: this.errorType,
10702
- retryable: this.retryable,
10703
- expected: this.expected,
10704
- ...Object.keys(additional).length > 0 ? additional : {}
10393
+ exports2.ErrorType = void 0;
10394
+ var ErrorType;
10395
+ (function(ErrorType2) {
10396
+ ErrorType2["TIMEOUT_ERROR"] = "TIMEOUT_ERROR";
10397
+ ErrorType2["PROCESS_EXECUTION_ERROR"] = "PROCESS_EXECUTION_ERROR";
10398
+ ErrorType2["UNEXPECTED_ERROR"] = "UNEXPECTED_ERROR";
10399
+ ErrorType2["MISSING_JOB_ID_ERROR"] = "MISSING_JOB_ID_ERROR";
10400
+ })(ErrorType || (exports2.ErrorType = ErrorType = {}));
10401
+ }
10402
+ });
10403
+
10404
+ // ../codegen-types/dist/errors/enums.js
10405
+ var require_enums = __commonJS({
10406
+ "../codegen-types/dist/errors/enums.js"(exports2) {
10407
+ "use strict";
10408
+ Object.defineProperty(exports2, "__esModule", { value: true });
10409
+ exports2.ExtensionGenerationOperation = exports2.ProcessType = void 0;
10410
+ var ProcessType;
10411
+ (function(ProcessType2) {
10412
+ ProcessType2["SPAWN"] = "spawn";
10413
+ ProcessType2["EXECUTION"] = "execution";
10414
+ ProcessType2["INITIALIZATION"] = "initialization";
10415
+ })(ProcessType || (exports2.ProcessType = ProcessType = {}));
10416
+ var ExtensionGenerationOperation;
10417
+ (function(ExtensionGenerationOperation2) {
10418
+ ExtensionGenerationOperation2["INSERT"] = "insert";
10419
+ ExtensionGenerationOperation2["DELETE"] = "delete";
10420
+ ExtensionGenerationOperation2["EDIT"] = "edit";
10421
+ })(ExtensionGenerationOperation || (exports2.ExtensionGenerationOperation = ExtensionGenerationOperation = {}));
10422
+ }
10423
+ });
10424
+
10425
+ // ../codegen-types/dist/errors/BaseCodegenError.js
10426
+ var require_BaseCodegenError = __commonJS({
10427
+ "../codegen-types/dist/errors/BaseCodegenError.js"(exports2) {
10428
+ "use strict";
10429
+ Object.defineProperty(exports2, "__esModule", { value: true });
10430
+ exports2.BaseCodegenError = void 0;
10431
+ var BaseCodegenError = class extends Error {
10432
+ constructor(message) {
10433
+ super(message);
10434
+ }
10435
+ /**
10436
+ * Convert error to JSON format for API responses
10437
+ */
10438
+ toJSON() {
10439
+ const additional = this.getAdditionalProperties();
10440
+ return {
10441
+ name: this.name,
10442
+ message: this.message,
10443
+ errorType: this.errorType,
10444
+ retryable: this.retryable,
10445
+ expected: this.expected,
10446
+ ...Object.keys(additional).length > 0 ? additional : {}
10705
10447
  };
10706
10448
  }
10707
10449
  /**
@@ -11021,6 +10763,363 @@ var require_dist4 = __commonJS({
11021
10763
  }
11022
10764
  });
11023
10765
 
10766
+ // dist/services/CodeGenService.js
10767
+ var require_CodeGenService = __commonJS({
10768
+ "dist/services/CodeGenService.js"(exports2) {
10769
+ "use strict";
10770
+ Object.defineProperty(exports2, "__esModule", { value: true });
10771
+ exports2.CodeGenService = exports2.TaskKind = exports2.Status = void 0;
10772
+ exports2.createCodeGenErrorHandler = createCodeGenErrorHandler;
10773
+ var http_client_1 = require_index_node();
10774
+ var http_1 = require_http_impl();
10775
+ var wixTokenRefresh_1 = require_wixTokenRefresh();
10776
+ var types_1 = require_types_impl();
10777
+ Object.defineProperty(exports2, "Status", { enumerable: true, get: function() {
10778
+ return types_1.Status;
10779
+ } });
10780
+ Object.defineProperty(exports2, "TaskKind", { enumerable: true, get: function() {
10781
+ return types_1.TaskKind;
10782
+ } });
10783
+ var logger_12 = require_logger();
10784
+ var ditto_codegen_types_12 = require_dist4();
10785
+ var FILE_OPERATION = {
10786
+ [ditto_codegen_types_12.ExtensionGenerationOperation.INSERT]: types_1.FileOperation.INSERT,
10787
+ [ditto_codegen_types_12.ExtensionGenerationOperation.DELETE]: types_1.FileOperation.DELETE,
10788
+ [ditto_codegen_types_12.ExtensionGenerationOperation.EDIT]: types_1.FileOperation.EDIT
10789
+ };
10790
+ var PROCESS_TYPE = {
10791
+ [ditto_codegen_types_12.ProcessType.SPAWN]: types_1.ProcessType.SPAWN,
10792
+ [ditto_codegen_types_12.ProcessType.EXECUTION]: types_1.ProcessType.EXECUTION,
10793
+ [ditto_codegen_types_12.ProcessType.INITIALIZATION]: types_1.ProcessType.INITIALIZATION
10794
+ };
10795
+ function toApiError(error) {
10796
+ if (!error)
10797
+ return void 0;
10798
+ return {
10799
+ name: error.name,
10800
+ message: error.message,
10801
+ errorType: error.errorType,
10802
+ retryable: error.retryable,
10803
+ expected: error.expected,
10804
+ ..."processType" in error && error.processType && { processType: PROCESS_TYPE[error.processType] },
10805
+ ..."exitCode" in error && { exitCode: error.exitCode },
10806
+ ..."stderr" in error && { stderr: error.stderr }
10807
+ };
10808
+ }
10809
+ function toJobOutput(payload) {
10810
+ const { requiredPermissions, files, extensions, error, agentMessage, ...rest } = payload;
10811
+ return {
10812
+ requiredPermissions,
10813
+ files: files?.map((file) => ({
10814
+ path: file.path,
10815
+ operation: FILE_OPERATION[file.operation] ?? types_1.FileOperation.UNKNOWN_FILE_OPERATION
10816
+ })),
10817
+ extensions: extensions?.created?.map((ext) => ({
10818
+ path: ext.path,
10819
+ extensionType: ext.extensionType,
10820
+ title: ext.title,
10821
+ files: ext.files.map((f) => ({
10822
+ path: f.path,
10823
+ operation: FILE_OPERATION[f.operation] ?? types_1.FileOperation.UNKNOWN_FILE_OPERATION
10824
+ }))
10825
+ })),
10826
+ error: toApiError(error),
10827
+ agentMessage,
10828
+ agentOutput: Object.keys(rest).length > 0 ? rest : void 0
10829
+ };
10830
+ }
10831
+ function createCodeGenErrorHandler(getHttpClient) {
10832
+ return {
10833
+ handleError: (error, { requestOptions }) => {
10834
+ if (!http_client_1.HttpClient.isHttpError(error))
10835
+ return;
10836
+ if (getHttpClient().isCancel(error))
10837
+ return;
10838
+ logger_12.logger.error("[CodeGenService] HTTP request failed", {
10839
+ method: error.config?.method?.toUpperCase(),
10840
+ url: requestOptions.url ?? error.config?.url,
10841
+ status: error.response?.status,
10842
+ code: error.code,
10843
+ requestId: error.requestId || void 0,
10844
+ message: error.message,
10845
+ data: error.response?.data
10846
+ });
10847
+ }
10848
+ };
10849
+ }
10850
+ var CodeGenService = class {
10851
+ constructor(projectId, httpClient) {
10852
+ this.projectId = projectId;
10853
+ this.accessToken = process.env.WIX_ACCESS_TOKEN;
10854
+ this.sandboxId = process.env.SANDBOX_ID;
10855
+ this.refreshAccessToken = async () => {
10856
+ const token = await (0, wixTokenRefresh_1.refreshWixAccessToken)();
10857
+ this.setAccessToken(token);
10858
+ return token;
10859
+ };
10860
+ this.request = async (req) => {
10861
+ try {
10862
+ return await this.httpClient.request(this.withAuth(req));
10863
+ } catch (err) {
10864
+ if (!this.isUnauthorized(err))
10865
+ throw err;
10866
+ logger_12.logger.warn("[CodeGenService] 401 received, refreshing token and retrying once");
10867
+ await this.refreshAccessToken();
10868
+ return await this.httpClient.request(this.withAuth(req));
10869
+ }
10870
+ };
10871
+ this.fetchPendingJobs = async () => {
10872
+ const resp = await this.request((0, http_1.listProjectJobs)({
10873
+ projectId: this.projectId
10874
+ }));
10875
+ const jobs = resp.data?.jobs ?? [];
10876
+ return jobs.filter(this.shouldProcessJob);
10877
+ };
10878
+ this.shouldProcessJob = (job) => {
10879
+ if (job.status !== types_1.Status.PENDING)
10880
+ return false;
10881
+ if (this.sandboxId)
10882
+ return job.sandboxId === this.sandboxId;
10883
+ return true;
10884
+ };
10885
+ this.markJobAsCompleted = async (jobId) => {
10886
+ await this.request((0, http_1.updateJob)({
10887
+ projectId: this.projectId,
10888
+ job: {
10889
+ id: jobId,
10890
+ projectId: this.projectId,
10891
+ status: types_1.Status.COMPLETED
10892
+ }
10893
+ }));
10894
+ };
10895
+ this.markJobAsRuninng = async (jobId) => {
10896
+ await this.request((0, http_1.updateJob)({
10897
+ projectId: this.projectId,
10898
+ job: {
10899
+ id: jobId,
10900
+ projectId: this.projectId,
10901
+ status: types_1.Status.RUNNING
10902
+ }
10903
+ }));
10904
+ };
10905
+ this.markJobAsCancelled = async (jobId) => {
10906
+ await this.request((0, http_1.updateJob)({
10907
+ projectId: this.projectId,
10908
+ job: {
10909
+ id: jobId,
10910
+ projectId: this.projectId,
10911
+ status: types_1.Status.CANCELLED
10912
+ }
10913
+ }));
10914
+ };
10915
+ this.updateJob = async (jobId, payload) => {
10916
+ await this.request((0, http_1.updateJob)({
10917
+ projectId: this.projectId,
10918
+ job: {
10919
+ id: jobId,
10920
+ projectId: this.projectId,
10921
+ payload,
10922
+ output: toJobOutput(payload)
10923
+ }
10924
+ }));
10925
+ };
10926
+ this.updateJobStatus = async (jobId, status) => {
10927
+ logger_12.logger.info("Updating job status", {
10928
+ jobId,
10929
+ status
10930
+ });
10931
+ await this.request((0, http_1.updateJob)({
10932
+ projectId: this.projectId,
10933
+ job: {
10934
+ id: jobId,
10935
+ projectId: this.projectId,
10936
+ status
10937
+ }
10938
+ }));
10939
+ };
10940
+ this.updateJobWithPendingDecision = async (jobId, userDecision) => {
10941
+ logger_12.logger.info("Setting job to await user decision", {
10942
+ jobId,
10943
+ decisionId: userDecision.id,
10944
+ userDecision: JSON.stringify(userDecision, null, 2)
10945
+ });
10946
+ await this.request((0, http_1.updateJob)({
10947
+ projectId: this.projectId,
10948
+ job: {
10949
+ id: jobId,
10950
+ projectId: this.projectId,
10951
+ status: types_1.Status.AWAITING_USER_INPUT,
10952
+ pendingUserDecisions: [userDecision]
10953
+ }
10954
+ }));
10955
+ };
10956
+ this.resumeJobFromDecision = async (jobId) => {
10957
+ logger_12.logger.info("Resuming job from user decision");
10958
+ await this.request((0, http_1.updateJob)({
10959
+ projectId: this.projectId,
10960
+ job: {
10961
+ id: jobId,
10962
+ projectId: this.projectId,
10963
+ status: types_1.Status.RUNNING,
10964
+ pendingUserDecisions: []
10965
+ }
10966
+ }));
10967
+ };
10968
+ this.updateTask = async (jobId, taskId, status, payload) => {
10969
+ await this.request((0, http_1.updateTask)({
10970
+ projectId: this.projectId,
10971
+ jobId,
10972
+ task: {
10973
+ id: taskId,
10974
+ status,
10975
+ payload
10976
+ }
10977
+ }));
10978
+ };
10979
+ this.addTask = async (jobId, task) => {
10980
+ await this.request((0, http_1.createTask)({
10981
+ projectId: this.projectId,
10982
+ jobId,
10983
+ task: {
10984
+ id: task.id,
10985
+ kind: task.kind,
10986
+ name: task.name,
10987
+ status: task.status,
10988
+ payload: task.payload,
10989
+ ...task.input !== void 0 && { input: task.input },
10990
+ agentName: task.agentName,
10991
+ description: typeof task.description === "string" ? task.description : task.payload ? JSON.stringify(task.payload) : ""
10992
+ }
10993
+ }));
10994
+ };
10995
+ this.getJob = async (jobId) => {
10996
+ const resp = await this.request((0, http_1.getJob)({
10997
+ projectId: this.projectId,
10998
+ jobId
10999
+ }));
11000
+ return resp.data?.job ?? null;
11001
+ };
11002
+ if (httpClient) {
11003
+ this.httpClient = httpClient;
11004
+ return;
11005
+ }
11006
+ const serverUrl = process.env.CODEGEN_SERVER_BASE_URL || "https://manage.wix.com";
11007
+ this.httpClient = (0, http_client_1.createHttpClient)({
11008
+ baseURL: serverUrl,
11009
+ errorHandler: createCodeGenErrorHandler(() => this.httpClient)
11010
+ });
11011
+ }
11012
+ getAccessToken() {
11013
+ return this.accessToken;
11014
+ }
11015
+ setAccessToken(token) {
11016
+ this.accessToken = token;
11017
+ }
11018
+ isUnauthorized(error) {
11019
+ if (!http_client_1.HttpClient.isHttpError(error))
11020
+ return false;
11021
+ if (this.httpClient.isCancel(error))
11022
+ return false;
11023
+ return error.response?.status === 401;
11024
+ }
11025
+ withAuth(req) {
11026
+ const authHeader = { authorization: `Bearer ${this.accessToken}` };
11027
+ if (typeof req === "function") {
11028
+ return (ctx) => {
11029
+ const r = req(ctx);
11030
+ return { ...r, headers: { ...r.headers ?? {}, ...authHeader } };
11031
+ };
11032
+ }
11033
+ return { ...req, headers: { ...req.headers ?? {}, ...authHeader } };
11034
+ }
11035
+ };
11036
+ exports2.CodeGenService = CodeGenService;
11037
+ }
11038
+ });
11039
+
11040
+ // dist/services/codeGenerationService.js
11041
+ var require_codeGenerationService = __commonJS({
11042
+ "dist/services/codeGenerationService.js"(exports2) {
11043
+ "use strict";
11044
+ Object.defineProperty(exports2, "__esModule", { value: true });
11045
+ exports2.codeGenerationService = void 0;
11046
+ var CodeGenService_12 = require_CodeGenService();
11047
+ var context_12 = require_context();
11048
+ exports2.codeGenerationService = new CodeGenService_12.CodeGenService(context_12.ctx.projectId);
11049
+ }
11050
+ });
11051
+
11052
+ // dist/events/cli-listeners.js
11053
+ var require_cli_listeners = __commonJS({
11054
+ "dist/events/cli-listeners.js"(exports2) {
11055
+ "use strict";
11056
+ Object.defineProperty(exports2, "__esModule", { value: true });
11057
+ exports2.attachOrchestratorListeners = attachOrchestratorListeners;
11058
+ var logger_12 = require_logger();
11059
+ function attachOrchestratorListeners(eventEmitter) {
11060
+ eventEmitter.onEvent("start:init", (info) => {
11061
+ logger_12.logger.info("\u{1F680} Starting initial code generation for app", {
11062
+ appName: info.appName,
11063
+ summary: info.summary,
11064
+ outputPath: info.outputPath,
11065
+ extensionsCount: info.extensionsCount
11066
+ });
11067
+ });
11068
+ eventEmitter.onEvent("start:iteration", ({ outputPath }) => {
11069
+ logger_12.logger.info("\u{1F680} Starting code iteration", { outputPath });
11070
+ });
11071
+ eventEmitter.onEvent("start:ask", ({ outputPath }) => {
11072
+ logger_12.logger.info("\u{1F680} Starting ask", { outputPath });
11073
+ });
11074
+ eventEmitter.onEvent("finish:init", ({ outputPath, durationMs }) => {
11075
+ logger_12.logger.info("\u2705 Init completed", {
11076
+ outputPath,
11077
+ durationMs,
11078
+ durationFormatted: getFormattedDuration(durationMs)
11079
+ });
11080
+ });
11081
+ eventEmitter.onEvent("finish:iteration", ({ outputPath, durationMs }) => {
11082
+ logger_12.logger.info("\u2705 Iteration completed", {
11083
+ outputPath,
11084
+ durationMs,
11085
+ durationFormatted: getFormattedDuration(durationMs)
11086
+ });
11087
+ });
11088
+ eventEmitter.onEvent("finish:ask", ({ durationMs }) => {
11089
+ logger_12.logger.info("\u2705 Ask completed", {
11090
+ durationMs,
11091
+ durationFormatted: getFormattedDuration(durationMs)
11092
+ });
11093
+ });
11094
+ eventEmitter.onEvent("opencode:start", ({ outputPath }) => {
11095
+ logger_12.logger.info("\u{1F527} OpenCode starting", { outputPath });
11096
+ });
11097
+ eventEmitter.onEvent("opencode:output", ({ data }) => {
11098
+ process.stdout.write(data);
11099
+ });
11100
+ eventEmitter.onEvent("opencode:done", ({ durationMs }) => {
11101
+ logger_12.logger.info("\u{1F527} OpenCode completed", {
11102
+ durationMs,
11103
+ durationFormatted: getFormattedDuration(durationMs)
11104
+ });
11105
+ });
11106
+ eventEmitter.onEvent("opencode:error", ({ error, exitCode, durationMs }) => {
11107
+ logger_12.logger.error("\u274C OpenCode failed", {
11108
+ error,
11109
+ exitCode,
11110
+ durationMs,
11111
+ durationFormatted: getFormattedDuration(durationMs)
11112
+ });
11113
+ });
11114
+ }
11115
+ var getFormattedDuration = (ms) => {
11116
+ const seconds = ms / 1e3;
11117
+ const minutes = seconds / 60;
11118
+ return `${ms} ms (${minutes.toFixed(2)} min or ${seconds.toFixed(2)} sec)`;
11119
+ };
11120
+ }
11121
+ });
11122
+
11024
11123
  // dist/events/DittoEventEmitter.js
11025
11124
  var require_DittoEventEmitter = __commonJS({
11026
11125
  "dist/events/DittoEventEmitter.js"(exports2) {
@@ -11073,14 +11172,14 @@ When generating editor React component or function library extensions, use this
11073
11172
  const lastUserMessage = [...chatHistory].reverse().find((msg) => msg.role === "USER");
11074
11173
  return {
11075
11174
  currentUserRequest: lastUserMessage?.text || "",
11076
- filteredChatHistory: chatHistory.filter((msg) => msg.text.length > 0)
11175
+ filteredChatHistory: chatHistory.filter((msg) => msg.text && msg.text.length > 0)
11077
11176
  };
11078
11177
  }
11079
11178
  function formatChatHistory(history, label) {
11080
11179
  if (!history || history.length === 0) {
11081
11180
  return "";
11082
11181
  }
11083
- const lines = history.map((msg) => `${msg.role.toUpperCase()}: ${msg.text}`).join("\n\n");
11182
+ const lines = history.map((msg) => `${msg.role?.toUpperCase()}: ${msg.text}`).join("\n\n");
11084
11183
  return `${label}:
11085
11184
  ${lines}`;
11086
11185
  }
@@ -12159,7 +12258,7 @@ var require_job_decision_manager = __commonJS({
12159
12258
  exports2.askJobConfirmation = askJobConfirmation;
12160
12259
  var types_1 = require_types_impl();
12161
12260
  var codeGenerationService_12 = require_codeGenerationService();
12162
- var CodeGenService_12 = require_CodeGenService();
12261
+ var types_2 = require_types_impl();
12163
12262
  var logger_12 = require_logger();
12164
12263
  var DECISION_POLL_INTERVAL_MS = 2e3;
12165
12264
  var UserDecisionCancelledError = class extends Error {
@@ -12203,7 +12302,7 @@ var require_job_decision_manager = __commonJS({
12203
12302
  if (!job) {
12204
12303
  throw new Error(`Job ${jobId} not found`);
12205
12304
  }
12206
- if (job.status === CodeGenService_12.Status.CANCELLED || job.status === CodeGenService_12.Status.PENDING_CANCEL) {
12305
+ if (job.status === types_2.Status.CANCELLED || job.status === types_2.Status.PENDING_CANCEL) {
12207
12306
  logger_12.logger.warn("[JobDecision] Job cancelled while waiting for user decision", { decisionId });
12208
12307
  throw new UserDecisionCancelledError(jobId, decisionId);
12209
12308
  }
@@ -19624,7 +19723,7 @@ function extractUserInput(kind, payload) {
19624
19723
  const history = payload.history ?? [];
19625
19724
  for (let i = history.length - 1; i >= 0; i--) {
19626
19725
  if (history[i].role === "USER") {
19627
- return history[i].text.trim() || void 0;
19726
+ return history[i]?.text?.trim() || void 0;
19628
19727
  }
19629
19728
  }
19630
19729
  }
@@ -19640,7 +19739,7 @@ async function processJob(job) {
19640
19739
  logger_1.logger.warn("[Job] No initial task found, skipping", { jobId });
19641
19740
  return;
19642
19741
  }
19643
- const payload = task.payload ?? {};
19742
+ const payload = task.input ?? task.payload ?? {};
19644
19743
  const plugins = buildPluginsForTask(jobId, task.id, task.kind, payload);
19645
19744
  await job_context_storage_1.jobContextStorage.run({ jobId, taskId: task.id, kind: task.kind, plugins }, async () => {
19646
19745
  logger_1.logger.info("[Job] Start processing", { taskKind: task.kind });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wix/ditto-codegen-public",
3
- "version": "1.0.352",
3
+ "version": "1.0.353",
4
4
  "description": "AI-powered Wix CLI app generator - standalone executable",
5
5
  "scripts": {
6
6
  "build": "node build.mjs",
@@ -29,5 +29,5 @@
29
29
  "esbuild": "^0.27.2",
30
30
  "vitest": "^4.0.16"
31
31
  },
32
- "falconPackageHash": "1eb9485337cb79d255ab44882d5de88973d8debe58775a6885bfa47e"
32
+ "falconPackageHash": "943d5f8ec00f0137ee6eb09d99039fcb25d9b2e45502f9ca49f7ba53"
33
33
  }