@akanjs/cli 2.4.1-rc.2 → 2.4.1-rc.3

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.
@@ -209,6 +209,7 @@ var createTunnel = async (service, { app, environment, port = service === "postg
209
209
  // pkgs/@akanjs/devkit/incrementalBuilder/incrementalBuilder.host.ts
210
210
  import path from "path";
211
211
  import { Logger as Logger2 } from "akanjs/common";
212
+ import { MemoryLimit } from "akanjs/server/memoryLimit";
212
213
  var builderMsgTypeSet = new Set([
213
214
  "build-route-res",
214
215
  "build-csr-res",
@@ -216,12 +217,15 @@ var builderMsgTypeSet = new Set([
216
217
  "invalidate",
217
218
  "css-updated",
218
219
  "pages-updated",
219
- "build-status"
220
+ "build-status",
221
+ "builder-metrics"
220
222
  ]);
221
223
 
222
224
  class IncrementalBuilderHost {
223
225
  static #restartBaseDelayMs = 1000;
224
226
  static #restartMaxDelayMs = 30000;
227
+ static #recycleDrainTimeoutMs = 30000;
228
+ static #devMaxRssBytes = 1200 * 1024 * 1024;
225
229
  logger = new Logger2("IncrementalBuilderHost");
226
230
  entry;
227
231
  env;
@@ -232,6 +236,9 @@ class IncrementalBuilderHost {
232
236
  #status = "stopped";
233
237
  #restartAttempts = 0;
234
238
  #restartTimer = null;
239
+ #recycleTimer = null;
240
+ #recycleRequested = false;
241
+ #spawnAfterRecycle = false;
235
242
  #manualStop = false;
236
243
  #startOptions = {};
237
244
  constructor({ app, entry, env, onMessage }) {
@@ -254,10 +261,12 @@ class IncrementalBuilderHost {
254
261
  #spawn(isRestart) {
255
262
  this.#status = isRestart ? "restarting" : "starting";
256
263
  this.ready = false;
264
+ const afterRecycle = this.#spawnAfterRecycle;
265
+ this.#spawnAfterRecycle = false;
257
266
  let proc;
258
267
  proc = Bun.spawn(["bun", this.entry], {
259
268
  cwd: this.app.cwdPath,
260
- env: { ...this.env, AKAN_WATCH: "1" },
269
+ env: { ...this.env, AKAN_WATCH: "1", ...afterRecycle ? { AKAN_BUILDER_RECYCLED: "1" } : {} },
261
270
  stdio: ["ignore", "inherit", "inherit"],
262
271
  ipc: (msg) => {
263
272
  if (this.#proc !== proc)
@@ -282,6 +291,8 @@ class IncrementalBuilderHost {
282
291
  return;
283
292
  this.#proc = null;
284
293
  const wasReady = this.ready;
294
+ const wasRecycle = this.#recycleRequested;
295
+ this.#clearRecycle();
285
296
  this.ready = false;
286
297
  if (this.#manualStop || this.#status === "stopped")
287
298
  return;
@@ -290,6 +301,12 @@ class IncrementalBuilderHost {
290
301
  this.#startOptions.onExit?.();
291
302
  return;
292
303
  }
304
+ if (wasRecycle) {
305
+ this.logger.verbose("builder exited for a recycle; spawning its replacement now");
306
+ this.#spawnAfterRecycle = true;
307
+ this.#spawn(true);
308
+ return;
309
+ }
293
310
  this.#scheduleRestart();
294
311
  }
295
312
  });
@@ -311,6 +328,40 @@ class IncrementalBuilderHost {
311
328
  this.#spawn(true);
312
329
  }, delay);
313
330
  }
331
+ recycle(reason) {
332
+ if (!this.#proc || this.#status !== "ready" || this.#recycleRequested)
333
+ return false;
334
+ const proc = this.#proc;
335
+ if (!this.send({ type: "builder-shutdown", reason }))
336
+ return false;
337
+ this.#recycleRequested = true;
338
+ this.logger.info(`recycling builder pid=${proc.pid} (${reason})`);
339
+ this.#recycleTimer = setTimeout(() => {
340
+ this.#recycleTimer = null;
341
+ if (this.#proc !== proc)
342
+ return;
343
+ this.logger.warn(`builder pid=${proc.pid} did not exit within ${IncrementalBuilderHost.#recycleDrainTimeoutMs}ms of the recycle request; killing it`);
344
+ proc.kill();
345
+ }, IncrementalBuilderHost.#recycleDrainTimeoutMs);
346
+ return true;
347
+ }
348
+ #clearRecycle() {
349
+ this.#recycleRequested = false;
350
+ if (!this.#recycleTimer)
351
+ return;
352
+ clearTimeout(this.#recycleTimer);
353
+ this.#recycleTimer = null;
354
+ }
355
+ static maxRssBytes() {
356
+ if (process.env.AKAN_BUILDER_MAX_RSS_MB === "0")
357
+ return null;
358
+ return MemoryLimit.resolveMaxRssBytes({
359
+ megabytesEnv: "AKAN_BUILDER_MAX_RSS_MB",
360
+ bytesEnv: "AKAN_BUILDER_MAX_RSS",
361
+ limitFraction: 0.35,
362
+ fallbackBytes: IncrementalBuilderHost.#devMaxRssBytes
363
+ });
364
+ }
314
365
  send(message) {
315
366
  if (!this.#proc || this.#status !== "ready") {
316
367
  this.logger.warn(`incrementalBuilderHost is ${this.#status}; cannot send ${message.type}`);
@@ -326,6 +377,7 @@ class IncrementalBuilderHost {
326
377
  }
327
378
  stop() {
328
379
  this.#manualStop = true;
380
+ this.#clearRecycle();
329
381
  if (this.#restartTimer) {
330
382
  clearTimeout(this.#restartTimer);
331
383
  this.#restartTimer = null;
@@ -359,6 +411,9 @@ var BACKEND_RECOVERY_MAX_ATTEMPTS = 5;
359
411
  var BACKEND_STDERR_TAIL_LIMIT = 40;
360
412
  var BUILDER_READY_TIMEOUT_MS = 150000;
361
413
  var BUILDER_START_MAX_ATTEMPTS = 3;
414
+ var BUILDER_RSS_RECYCLE_QUIET_MS = 750;
415
+ var BUILDER_MIN_RSS_RECYCLE_INTERVAL_MS = 30000;
416
+ var BUILDER_INEFFECTIVE_RSS_RECYCLE_LIMIT = 2;
362
417
  var BUILDER_RECOVERY_BASE_DELAY_MS = 2000;
363
418
  var BUILDER_RECOVERY_MAX_DELAY_MS = 60000;
364
419
  var SOURCE_EXTS = new Set([".ts", ".tsx", ".js", ".jsx", ".mjs", ".cjs"]);
@@ -446,6 +501,33 @@ var hasBuildFailureForGeneration = (statusByPhase, generation) => {
446
501
  }
447
502
  return false;
448
503
  };
504
+ var decideBuilderRssRecycle = ({
505
+ rssBytes,
506
+ ceilingBytes,
507
+ buildFailed,
508
+ msSinceLastRecycle,
509
+ minIntervalMs = BUILDER_MIN_RSS_RECYCLE_INTERVAL_MS
510
+ }) => {
511
+ if (!ceilingBytes)
512
+ return "unbounded";
513
+ if (rssBytes < ceilingBytes)
514
+ return "below-ceiling";
515
+ if (buildFailed)
516
+ return "build-failed";
517
+ if (msSinceLastRecycle !== null && msSinceLastRecycle < minIntervalMs)
518
+ return "too-soon";
519
+ return "recycle";
520
+ };
521
+ var shouldAbandonBuilderRssCeiling = (ineffectiveRecycles, limit = BUILDER_INEFFECTIVE_RSS_RECYCLE_LIMIT) => ineffectiveRecycles >= limit;
522
+ var shouldRelayRecycledFrontendState = (current, next) => {
523
+ if (!current || current.type !== next.type)
524
+ return true;
525
+ if (current.type === "pages-updated" && next.type === "pages-updated")
526
+ return current.data.bundlePath !== next.data.bundlePath;
527
+ if (current.type === "css-updated" && next.type === "css-updated")
528
+ return JSON.stringify(current.data.cssAssets) !== JSON.stringify(next.data.cssAssets);
529
+ return true;
530
+ };
449
531
  var mergeDevPlans = (current, next) => {
450
532
  if (!current)
451
533
  return next;
@@ -606,6 +688,11 @@ class AkanAppHost {
606
688
  #backendBuildStatusGeneration = 0;
607
689
  #backendStderrTail = [];
608
690
  #lastGoodFrontend = {};
691
+ #rssRecycleTimer = null;
692
+ #rssRecycleReason = null;
693
+ #lastRssRecycleAtMono = null;
694
+ #rssCeilingIneffective = 0;
695
+ #rssCeilingAbandoned = false;
609
696
  #buildStatusByPhase = new Map;
610
697
  #pendingBuildStatusReplay = [];
611
698
  #builderMessageQueue = Promise.resolve();
@@ -901,18 +988,96 @@ ${this.#backendStderrTail.join(`
901
988
  this.#reviveBackendAfterGreenBuild(message.data);
902
989
  return;
903
990
  }
904
- if (message.type === "pages-updated")
905
- this.#recordLastGood(message);
906
- if (message.type === "css-updated")
907
- this.#recordLastGood(message);
991
+ if (message.type === "builder-metrics") {
992
+ this.#handleBuilderMetrics(message.data);
993
+ return;
994
+ }
995
+ if (message.type === "pages-updated" || message.type === "css-updated") {
996
+ const recycled = message.data.reason === "builder-recycle";
997
+ if (recycled && !this.#shouldRelayRecycledState(message))
998
+ return;
999
+ this.#recordLastGood(message, { supersede: recycled });
1000
+ }
908
1001
  if (message.type === "invalidate") {
909
1002
  await this.#handleInvalidate(message);
910
1003
  return;
911
1004
  }
912
1005
  this.#sendToBackend(message);
913
1006
  }
1007
+ #shouldRelayRecycledState(message) {
1008
+ const current = message.type === "pages-updated" ? this.#lastGoodFrontend.pages : this.#lastGoodFrontend.css;
1009
+ if (shouldRelayRecycledFrontendState(current, message)) {
1010
+ this.logger.verbose(`[builder-recycle] ${message.type} moved during the recycle; pushing it to the backend`);
1011
+ return true;
1012
+ }
1013
+ this.logger.verbose(`[builder-recycle] ${message.type} unchanged after the recycle; backend left as is`);
1014
+ return false;
1015
+ }
1016
+ #handleBuilderMetrics(metrics) {
1017
+ if (this.#rssCeilingAbandoned)
1018
+ return;
1019
+ const ceilingBytes = IncrementalBuilderHost.maxRssBytes();
1020
+ const asMib = (bytes) => Math.round(bytes / 1024 / 1024);
1021
+ const decision = decideBuilderRssRecycle({
1022
+ rssBytes: metrics.rssBytes,
1023
+ ceilingBytes,
1024
+ buildFailed: hasBuildFailureForGeneration(this.#buildStatusByPhase, metrics.generation),
1025
+ msSinceLastRecycle: this.#lastRssRecycleAtMono === null ? null : performance.now() - this.#lastRssRecycleAtMono
1026
+ });
1027
+ if (decision === "below-ceiling") {
1028
+ this.#rssCeilingIneffective = 0;
1029
+ return;
1030
+ }
1031
+ if (decision === "unbounded")
1032
+ return;
1033
+ if (decision === "build-failed") {
1034
+ this.logger.verbose(`[builder-recycle] deferred: generation=${metrics.generation} has a failing build, so a replacement would hit the same error`);
1035
+ return;
1036
+ }
1037
+ if (decision === "too-soon") {
1038
+ this.#rssCeilingIneffective += 1;
1039
+ if (!shouldAbandonBuilderRssCeiling(this.#rssCeilingIneffective))
1040
+ return;
1041
+ this.#rssCeilingAbandoned = true;
1042
+ this.logger.error(`[builder-recycle] the builder is still at ${asMib(metrics.rssBytes)}MiB right after being recycled, so the ${asMib(ceilingBytes ?? 0)}MiB ceiling cannot be met for this app; no longer enforcing it this session. Raise AKAN_BUILDER_MAX_RSS_MB, or set it to 0 to leave the builder unbounded.`);
1043
+ return;
1044
+ }
1045
+ this.#armRssRecycle(`rss=${asMib(metrics.rssBytes)}MiB>=${asMib(ceilingBytes ?? 0)}MiB after ${metrics.workCount} build(s)`);
1046
+ }
1047
+ #armRssRecycle(reason) {
1048
+ if (this.#rssRecycleReason !== reason)
1049
+ this.logger.verbose(`[builder-recycle] armed (${reason}); replacing the builder once it stays quiet`);
1050
+ this.#rssRecycleReason = reason;
1051
+ if (this.#rssRecycleTimer)
1052
+ clearTimeout(this.#rssRecycleTimer);
1053
+ this.#rssRecycleTimer = setTimeout(() => {
1054
+ this.#rssRecycleTimer = null;
1055
+ const pendingReason = this.#rssRecycleReason;
1056
+ this.#rssRecycleReason = null;
1057
+ if (pendingReason)
1058
+ this.#recycleBuilderForRss(pendingReason);
1059
+ }, BUILDER_RSS_RECYCLE_QUIET_MS);
1060
+ }
1061
+ #cancelRssRecycle() {
1062
+ this.#rssRecycleReason = null;
1063
+ if (!this.#rssRecycleTimer)
1064
+ return;
1065
+ clearTimeout(this.#rssRecycleTimer);
1066
+ this.#rssRecycleTimer = null;
1067
+ }
1068
+ #recycleBuilderForRss(reason) {
1069
+ if (this.#pendingRecycle || this.#restartTimer) {
1070
+ this.logger.verbose(`[builder-recycle] skipped (${reason}); a dev restart is already pending`);
1071
+ return;
1072
+ }
1073
+ if (!this.#builder?.recycle(reason))
1074
+ return;
1075
+ this.#lastRssRecycleAtMono = performance.now();
1076
+ }
914
1077
  async#handleInvalidate(message) {
915
1078
  this.#logDevPlan(message);
1079
+ if (this.#rssRecycleReason)
1080
+ this.#armRssRecycle(this.#rssRecycleReason);
916
1081
  const wantsDevHostRestart = shouldRestartDevHostByDevPlan(message);
917
1082
  const pending = this.#pendingRecycle;
918
1083
  if (wantsDevHostRestart || shouldRestartBuilderByDevPlan(message) || pending && message.kinds.includes("code")) {
@@ -1045,15 +1210,15 @@ ${this.#backendStderrTail.join(`
1045
1210
  await this.#startBuilder();
1046
1211
  this.#startBackend({ generation, files: message.files });
1047
1212
  }
1048
- #recordLastGood(message) {
1213
+ #recordLastGood(message, { supersede = false } = {}) {
1049
1214
  if (message.type === "pages-updated") {
1050
- if (!shouldReplaceLastGoodMessage(this.#lastGoodFrontend.pages, message))
1215
+ if (!supersede && !shouldReplaceLastGoodMessage(this.#lastGoodFrontend.pages, message))
1051
1216
  return;
1052
1217
  this.#lastGoodFrontend.pages = message;
1053
1218
  this.logger.verbose(`[last-good] pages generation=${message.data.generation ?? "(unknown)"} buildId=${message.data.buildId}`);
1054
1219
  return;
1055
1220
  }
1056
- if (!shouldReplaceLastGoodMessage(this.#lastGoodFrontend.css, message))
1221
+ if (!supersede && !shouldReplaceLastGoodMessage(this.#lastGoodFrontend.css, message))
1057
1222
  return;
1058
1223
  this.#lastGoodFrontend.css = message;
1059
1224
  this.logger.verbose(`[last-good] css generation=${message.data.generation ?? "(unknown)"} assets=${Object.keys(message.data.cssAssets).length}`);
@@ -1212,6 +1377,7 @@ ${this.#backendStderrTail.join(`
1212
1377
  this.logger.warn("akanAppHost builder is not running");
1213
1378
  }
1214
1379
  #stopBuilder() {
1380
+ this.#cancelRssRecycle();
1215
1381
  if (!this.#builder)
1216
1382
  return;
1217
1383
  this.#builder.stop();
@@ -1259,7 +1425,7 @@ function openBrowser(url) {
1259
1425
  }
1260
1426
 
1261
1427
  // pkgs/@akanjs/cli/application/application.runner.ts
1262
- var loadBuildRunner = async () => (await import("./applicationBuildRunner-yz144508.js")).ApplicationBuildRunner;
1428
+ var loadBuildRunner = async () => (await import("./applicationBuildRunner-ny84tjhc.js")).ApplicationBuildRunner;
1263
1429
  var loadReleasePackager = async () => (await import("./applicationReleasePackager-brvth6rs.js")).ApplicationReleasePackager;
1264
1430
  var loadCapacitorApp = async () => (await import("./capacitorApp-y0h6cgft.js")).CapacitorApp;
1265
1431
  var loadPrompts = async () => await import("@inquirer/prompts");
package/index.js CHANGED
@@ -17,22 +17,22 @@ import path from "path";
17
17
 
18
18
  // pkgs/@akanjs/cli/commandModules.ts
19
19
  var commandModules = {
20
- workspace: async () => (await import("./workspace.command-875aj35r.js")).WorkspaceCommand,
20
+ workspace: async () => (await import("./workspace.command-pmfxxfew.js")).WorkspaceCommand,
21
21
  agent: async () => (await import("./agent.command-h4afc69n.js")).AgentCommand,
22
- application: async () => (await import("./application.command-47mj9qsy.js")).ApplicationCommand,
22
+ application: async () => (await import("./application.command-jkmbsd1x.js")).ApplicationCommand,
23
23
  library: async () => (await import("./library.command-r15zdqvp.js")).LibraryCommand,
24
- localRegistry: async () => (await import("./localRegistry.command-6z4s13mj.js")).LocalRegistryCommand,
24
+ localRegistry: async () => (await import("./localRegistry.command-25sv5hmt.js")).LocalRegistryCommand,
25
25
  package: async () => (await import("./package.command-5x5m0ej1.js")).PackageCommand,
26
- module: async () => (await import("./module.command-qrj3kmyz.js")).ModuleCommand,
26
+ module: async () => (await import("./module.command-tnj2bzst.js")).ModuleCommand,
27
27
  page: async () => (await import("./page.command-c6xdx0xm.js")).PageCommand,
28
- context: async () => (await import("./context.command-nqbtak4f.js")).ContextCommand,
29
- cloud: async () => (await import("./cloud.command-hxcgsf80.js")).CloudCommand,
28
+ context: async () => (await import("./context.command-ds3mka9p.js")).ContextCommand,
29
+ cloud: async () => (await import("./cloud.command-53j76grx.js")).CloudCommand,
30
30
  guideline: async () => (await import("./guideline.command-ya0dh44f.js")).GuidelineCommand,
31
- scalar: async () => (await import("./scalar.command-kabkd6wd.js")).ScalarCommand,
32
- primitive: async () => (await import("./primitive.command-pv9ssmtf.js")).PrimitiveCommand,
31
+ scalar: async () => (await import("./scalar.command-bmrmp8n4.js")).ScalarCommand,
32
+ primitive: async () => (await import("./primitive.command-q1ycj5vr.js")).PrimitiveCommand,
33
33
  quality: async () => (await import("./quality.command-es67wvdp.js")).QualityCommand,
34
34
  repair: async () => (await import("./repair.command-677675vw.js")).RepairCommand,
35
- workflow: async () => (await import("./workflow.command-64r6cw0w.js")).WorkflowCommand
35
+ workflow: async () => (await import("./workflow.command-64550hka.js")).WorkflowCommand
36
36
  };
37
37
  var commandModuleIds = Object.keys(commandModules);
38
38
 
@@ -2,16 +2,16 @@
2
2
  import {
3
3
  CloudRunner,
4
4
  getNpmRegistryUrl
5
- } from "./index-sgmas1fc.js";
5
+ } from "./index-dynknvzd.js";
6
+ import"./index-5vvwc0cz.js";
6
7
  import {
7
8
  ApplicationScript
8
- } from "./index-77crfweb.js";
9
+ } from "./index-rgfxj6qc.js";
9
10
  import"./index-76rn3g2c.js";
10
11
  import"./index-pmm9e2jf.js";
11
12
  import {
12
13
  PackageScript
13
14
  } from "./index-n6h3482q.js";
14
- import"./index-5vvwc0cz.js";
15
15
  import {
16
16
  Workspace,
17
17
  command,
@@ -1,13 +1,13 @@
1
1
  // @bun
2
2
  import {
3
3
  ModuleScript
4
- } from "./index-8pkbzj26.js";
4
+ } from "./index-fmky5k3p.js";
5
5
  import"./index-swf4bmbg.js";
6
6
  import"./index-ss469dec.js";
7
- import"./index-qaq13qk3.js";
8
7
  import {
9
8
  renderPrimitiveReport
10
9
  } from "./index-h6ca6qg0.js";
10
+ import"./index-qaq13qk3.js";
11
11
  import"./index-5vvwc0cz.js";
12
12
  import {
13
13
  Module,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/cli",
3
- "version": "2.4.1-rc.2",
3
+ "version": "2.4.1-rc.3",
4
4
  "sourceType": "module",
5
5
  "type": "module",
6
6
  "publishConfig": {
@@ -34,7 +34,7 @@
34
34
  "@langchain/openai": "^1.4.6",
35
35
  "@tailwindcss/node": "^4.3.0",
36
36
  "@trapezedev/project": "^7.1.4",
37
- "akanjs": "2.4.1-rc.2",
37
+ "akanjs": "2.4.1-rc.3",
38
38
  "chalk": "^5.6.2",
39
39
  "commander": "^14.0.3",
40
40
  "daisyui": "5.5.23",
@@ -1,14 +1,14 @@
1
1
  // @bun
2
2
  import {
3
3
  PrimitiveScript
4
- } from "./index-73pr2cmy.js";
5
- import"./index-8pkbzj26.js";
4
+ } from "./index-m9pca6jv.js";
5
+ import"./index-fmky5k3p.js";
6
6
  import"./index-swf4bmbg.js";
7
7
  import"./index-ss469dec.js";
8
- import"./index-qaq13qk3.js";
9
8
  import {
10
9
  renderPrimitiveReport
11
10
  } from "./index-h6ca6qg0.js";
11
+ import"./index-qaq13qk3.js";
12
12
  import"./index-5vvwc0cz.js";
13
13
  import {
14
14
  Workspace,
@@ -1,12 +1,12 @@
1
1
  // @bun
2
2
  import {
3
3
  ScalarScript
4
- } from "./index-y3hdhy4p.js";
4
+ } from "./index-gb26e7z0.js";
5
5
  import"./index-ss469dec.js";
6
- import"./index-qaq13qk3.js";
7
6
  import {
8
7
  renderPrimitiveReport
9
8
  } from "./index-h6ca6qg0.js";
9
+ import"./index-qaq13qk3.js";
10
10
  import"./index-5vvwc0cz.js";
11
11
  import {
12
12
  Sys,
@@ -4,20 +4,20 @@ import {
4
4
  } from "./index-45aj5ry0.js";
5
5
  import {
6
6
  ScalarScript
7
- } from "./index-y3hdhy4p.js";
7
+ } from "./index-gb26e7z0.js";
8
8
  import {
9
9
  PrimitiveScript
10
- } from "./index-73pr2cmy.js";
11
- import"./index-8rc0bm04.js";
10
+ } from "./index-m9pca6jv.js";
12
11
  import {
13
12
  ModuleScript
14
- } from "./index-8pkbzj26.js";
13
+ } from "./index-fmky5k3p.js";
15
14
  import"./index-swf4bmbg.js";
16
15
  import"./index-ss469dec.js";
17
- import"./index-qaq13qk3.js";
16
+ import"./index-8rc0bm04.js";
18
17
  import {
19
18
  createWorkflowStepRegistry
20
19
  } from "./index-h6ca6qg0.js";
20
+ import"./index-qaq13qk3.js";
21
21
  import"./index-5vvwc0cz.js";
22
22
  import {
23
23
  Workspace,
@@ -1,26 +1,34 @@
1
1
  // @bun
2
2
  import {
3
3
  ContextScript
4
- } from "./index-qhtr07v8.js";
4
+ } from "./index-1fpjvqhs.js";
5
+ import"./index-85msc0wg.js";
5
6
  import"./index-45aj5ry0.js";
6
7
  import {
7
8
  CloudScript
8
- } from "./index-mq6ns0f9.js";
9
- import"./index-y3hdhy4p.js";
10
- import"./index-73pr2cmy.js";
11
- import"./index-85msc0wg.js";
9
+ } from "./index-0hjg9qs5.js";
10
+ import"./index-gb26e7z0.js";
11
+ import"./index-m9pca6jv.js";
12
+ import"./index-fmky5k3p.js";
13
+ import"./index-swf4bmbg.js";
14
+ import"./index-ss469dec.js";
12
15
  import"./index-1xdrsbry.js";
13
16
  import {
14
17
  AgentScript
15
18
  } from "./index-hwzpw9c1.js";
16
19
  import"./index-8rc0bm04.js";
20
+ import"./index-h6ca6qg0.js";
21
+ import"./index-qaq13qk3.js";
17
22
  import {
18
23
  getLatestPackageVersion,
19
24
  getNpmRegistryUrl
20
- } from "./index-sgmas1fc.js";
25
+ } from "./index-dynknvzd.js";
26
+ import {
27
+ GlobalConfig
28
+ } from "./index-5vvwc0cz.js";
21
29
  import {
22
30
  ApplicationScript
23
- } from "./index-77crfweb.js";
31
+ } from "./index-rgfxj6qc.js";
24
32
  import"./index-76rn3g2c.js";
25
33
  import {
26
34
  LibraryScript
@@ -28,14 +36,6 @@ import {
28
36
  import {
29
37
  PackageScript
30
38
  } from "./index-n6h3482q.js";
31
- import"./index-8pkbzj26.js";
32
- import"./index-swf4bmbg.js";
33
- import"./index-ss469dec.js";
34
- import"./index-qaq13qk3.js";
35
- import"./index-h6ca6qg0.js";
36
- import {
37
- GlobalConfig
38
- } from "./index-5vvwc0cz.js";
39
39
  import {
40
40
  Exec,
41
41
  Workspace,
@@ -5,9 +5,6 @@ import {
5
5
  import {
6
6
  pluralizeName
7
7
  } from "./index-ss469dec.js";
8
- import {
9
- Prompter
10
- } from "./index-qaq13qk3.js";
11
8
  import {
12
9
  bilingualDescriptionForField,
13
10
  bilingualLabelForField,
@@ -16,6 +13,9 @@ import {
16
13
  moduleSourcePaths,
17
14
  sourceFile
18
15
  } from "./index-h6ca6qg0.js";
16
+ import {
17
+ Prompter
18
+ } from "./index-qaq13qk3.js";
19
19
  import {
20
20
  AiSession
21
21
  } from "./index-5vvwc0cz.js";
@@ -2,14 +2,14 @@
2
2
  import {
3
3
  pluralizeName
4
4
  } from "./index-ss469dec.js";
5
- import {
6
- Prompter
7
- } from "./index-qaq13qk3.js";
8
5
  import {
9
6
  createPassedPrimitiveReport,
10
7
  generatedFilesForSync,
11
8
  scalarChangedFiles
12
9
  } from "./index-h6ca6qg0.js";
10
+ import {
11
+ Prompter
12
+ } from "./index-qaq13qk3.js";
13
13
  import {
14
14
  AiSession
15
15
  } from "./index-5vvwc0cz.js";