@geekmidas/cli 10.0.0-alpha.92 → 10.0.0-alpha.93

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 (152) hide show
  1. package/dist/{GoDaddyProvider-CJwg2r_9.cjs → GoDaddyProvider-BZb-V14e.cjs} +2 -2
  2. package/dist/{GoDaddyProvider-CJwg2r_9.cjs.map → GoDaddyProvider-BZb-V14e.cjs.map} +1 -1
  3. package/dist/{GoDaddyProvider-BqYGk9XT.mjs → GoDaddyProvider-Mi3vptSR.mjs} +2 -2
  4. package/dist/{GoDaddyProvider-BqYGk9XT.mjs.map → GoDaddyProvider-Mi3vptSR.mjs.map} +1 -1
  5. package/dist/{LegacyStateStore-CeEwayMB.cjs → LegacyStateStore-BlYXQQSE.cjs} +44 -10
  6. package/dist/LegacyStateStore-BlYXQQSE.cjs.map +1 -0
  7. package/dist/LegacyStateStore-CtwO7fwy.mjs +123 -0
  8. package/dist/LegacyStateStore-CtwO7fwy.mjs.map +1 -0
  9. package/dist/{LocalStateStore-Y8XHdoCR.mjs → LocalStateStore-D40_SDmJ.mjs} +2 -2
  10. package/dist/{LocalStateStore-Y8XHdoCR.mjs.map → LocalStateStore-D40_SDmJ.mjs.map} +1 -1
  11. package/dist/{LocalStateStore-BMfseje2.cjs → LocalStateStore-oX_zxj9V.cjs} +2 -2
  12. package/dist/{LocalStateStore-BMfseje2.cjs.map → LocalStateStore-oX_zxj9V.cjs.map} +1 -1
  13. package/dist/{S3StateStore-BfoY4MvD.mjs → S3StateStore-BzS0IeSt.mjs} +2 -2
  14. package/dist/{S3StateStore-BfoY4MvD.mjs.map → S3StateStore-BzS0IeSt.mjs.map} +1 -1
  15. package/dist/{S3StateStore-BmMt2HhW.cjs → S3StateStore-DeI7jtvi.cjs} +2 -2
  16. package/dist/{S3StateStore-BmMt2HhW.cjs.map → S3StateStore-DeI7jtvi.cjs.map} +1 -1
  17. package/dist/{SSMStateStore-D9K62wM4.cjs → SSMStateStore-CaCtrzFL.cjs} +2 -2
  18. package/dist/{SSMStateStore-D9K62wM4.cjs.map → SSMStateStore-CaCtrzFL.cjs.map} +1 -1
  19. package/dist/{SSMStateStore-Bdyw_0Jj.mjs → SSMStateStore-k_Ew7TWx.mjs} +2 -2
  20. package/dist/{SSMStateStore-Bdyw_0Jj.mjs.map → SSMStateStore-k_Ew7TWx.mjs.map} +1 -1
  21. package/dist/{add-2Opn2VVE.mjs → add-CP1podDH.mjs} +2 -3
  22. package/dist/{add-2Opn2VVE.mjs.map → add-CP1podDH.mjs.map} +1 -1
  23. package/dist/{add-oN0b18HN.cjs → add-VcyJnsPX.cjs} +3 -4
  24. package/dist/{add-oN0b18HN.cjs.map → add-VcyJnsPX.cjs.map} +1 -1
  25. package/dist/{bundler-C-AdesaG.mjs → bundler-BWrh-AJH.mjs} +3 -3
  26. package/dist/{bundler-C-AdesaG.mjs.map → bundler-BWrh-AJH.mjs.map} +1 -1
  27. package/dist/{bundler-CXQDrhzN.cjs → bundler-Dfsr6KXU.cjs} +3 -3
  28. package/dist/{bundler-CXQDrhzN.cjs.map → bundler-Dfsr6KXU.cjs.map} +1 -1
  29. package/dist/{cli-BjhaVObS.mjs → cli-B8otnZfX.mjs} +4 -4
  30. package/dist/{cli-BjhaVObS.mjs.map → cli-B8otnZfX.mjs.map} +1 -1
  31. package/dist/{cli-BRZFYvdb.cjs → cli-DL19w4OE.cjs} +2 -2
  32. package/dist/{cli-BRZFYvdb.cjs.map → cli-DL19w4OE.cjs.map} +1 -1
  33. package/dist/compose-BHVKLluX.cjs +1523 -0
  34. package/dist/compose-BHVKLluX.cjs.map +1 -0
  35. package/dist/compose-DrEB_4F-.mjs +1476 -0
  36. package/dist/compose-DrEB_4F-.mjs.map +1 -0
  37. package/dist/{config-BJo8Wggp.d.mts → config-CHX5GOo3.d.mts} +4 -4
  38. package/dist/{config-BJo8Wggp.d.mts.map → config-CHX5GOo3.d.mts.map} +1 -1
  39. package/dist/{config-C9zx7KsX.d.cts → config-DCCcrOSo.d.cts} +4 -4
  40. package/dist/{config-C9zx7KsX.d.cts.map → config-DCCcrOSo.d.cts.map} +1 -1
  41. package/dist/config.d.cts +3 -3
  42. package/dist/config.d.mts +3 -3
  43. package/dist/deploy/public.cjs +6 -5
  44. package/dist/deploy/public.d.cts +6 -6
  45. package/dist/deploy/public.d.cts.map +1 -1
  46. package/dist/deploy/public.d.mts +6 -6
  47. package/dist/deploy/public.d.mts.map +1 -1
  48. package/dist/deploy/public.mjs +6 -6
  49. package/dist/{deploy-6ToUHJmM.cjs → deploy-C3Mhnmus.cjs} +4 -3
  50. package/dist/deploy-C3Mhnmus.cjs.map +1 -0
  51. package/dist/{deploy-yuJHlkY0.mjs → deploy-DYIyIUYd.mjs} +4 -3
  52. package/dist/deploy-DYIyIUYd.mjs.map +1 -0
  53. package/dist/{discover-CRMhvHG9.d.cts → discover-DqwlBVyY.d.mts} +2 -2
  54. package/dist/{discover-CRMhvHG9.d.cts.map → discover-DqwlBVyY.d.mts.map} +1 -1
  55. package/dist/{discover-G76EQ4vY.d.mts → discover-vk2r5giK.d.cts} +2 -2
  56. package/dist/{discover-G76EQ4vY.d.mts.map → discover-vk2r5giK.d.cts.map} +1 -1
  57. package/dist/{dokploy-BvbJ_A4Q.mjs → dokploy-o4I6vb9W.mjs} +2 -2
  58. package/dist/{dokploy-BvbJ_A4Q.mjs.map → dokploy-o4I6vb9W.mjs.map} +1 -1
  59. package/dist/{dokploy-Bvvfj2qe.cjs → dokploy-rivb1RFt.cjs} +2 -2
  60. package/dist/{dokploy-Bvvfj2qe.cjs.map → dokploy-rivb1RFt.cjs.map} +1 -1
  61. package/dist/{encryption-C9Jm9dfn.mjs → encryption-B6ilrT7p.mjs} +2 -2
  62. package/dist/{encryption-C9Jm9dfn.mjs.map → encryption-B6ilrT7p.mjs.map} +1 -1
  63. package/dist/{encryption-CgW167LO.cjs → encryption-D7zmwzWz.cjs} +2 -2
  64. package/dist/{encryption-CgW167LO.cjs.map → encryption-D7zmwzWz.cjs.map} +1 -1
  65. package/dist/{engine-Dj7ZKO8H.cjs → engine-Cfx8fEZU.cjs} +6 -5
  66. package/dist/engine-Cfx8fEZU.cjs.map +1 -0
  67. package/dist/{engine-C8Ye9MUm.mjs → engine-DjEcovm-.mjs} +6 -5
  68. package/dist/engine-DjEcovm-.mjs.map +1 -0
  69. package/dist/{github-B1k42hIt.mjs → github-CzBbs43W.mjs} +2 -2
  70. package/dist/{github-B1k42hIt.mjs.map → github-CzBbs43W.mjs.map} +1 -1
  71. package/dist/{github-BD051KZZ.cjs → github-zneTMvnO.cjs} +2 -2
  72. package/dist/{github-BD051KZZ.cjs.map → github-zneTMvnO.cjs.map} +1 -1
  73. package/dist/{index-D1pHwqkK.d.mts → index-BiYU7cUl.d.mts} +2 -2
  74. package/dist/{index-B5uuwx-Y.d.cts.map → index-BiYU7cUl.d.mts.map} +1 -1
  75. package/dist/{index-B5uuwx-Y.d.cts → index-Dm6V9bwh.d.cts} +2 -2
  76. package/dist/{index-D1pHwqkK.d.mts.map → index-Dm6V9bwh.d.cts.map} +1 -1
  77. package/dist/index.cjs +143 -184
  78. package/dist/index.cjs.map +1 -1
  79. package/dist/index.mjs +141 -181
  80. package/dist/index.mjs.map +1 -1
  81. package/dist/{migrate-IZsYyZ5F.mjs → migrate-BaC4w0sb.mjs} +2 -2
  82. package/dist/{migrate-IZsYyZ5F.mjs.map → migrate-BaC4w0sb.mjs.map} +1 -1
  83. package/dist/{migrate-D3VVsiHp.cjs → migrate-C8wTpakT.cjs} +2 -2
  84. package/dist/{migrate-D3VVsiHp.cjs.map → migrate-C8wTpakT.cjs.map} +1 -1
  85. package/dist/{migrate-BSbZ7-9n.mjs → migrate-CsBZKALY.mjs} +3 -3
  86. package/dist/{migrate-BSbZ7-9n.mjs.map → migrate-CsBZKALY.mjs.map} +1 -1
  87. package/dist/{migrate-f6JDjyCp.cjs → migrate-DFjbGnSr.cjs} +2 -2
  88. package/dist/{migrate-f6JDjyCp.cjs.map → migrate-DFjbGnSr.cjs.map} +1 -1
  89. package/dist/openapi.d.cts +1 -1
  90. package/dist/openapi.d.mts +1 -1
  91. package/dist/reconcile/public.d.cts +2 -2
  92. package/dist/reconcile/public.d.mts +2 -2
  93. package/dist/{reconcile-Dh1Jk7WE.mjs → reconcile--I7V4Klj.mjs} +2 -2
  94. package/dist/{reconcile-Dh1Jk7WE.mjs.map → reconcile--I7V4Klj.mjs.map} +1 -1
  95. package/dist/{resolve-Be4bF1w4.mjs → resolve-Ccjlpnd9.mjs} +3 -3
  96. package/dist/{resolve-Be4bF1w4.mjs.map → resolve-Ccjlpnd9.mjs.map} +1 -1
  97. package/dist/{resolve-DUp65SnJ.cjs → resolve-g8htuR80.cjs} +3 -3
  98. package/dist/{resolve-DUp65SnJ.cjs.map → resolve-g8htuR80.cjs.map} +1 -1
  99. package/dist/{rollback-DDHtd0GJ.cjs → rollback--ympG9ss.cjs} +5 -4
  100. package/dist/rollback--ympG9ss.cjs.map +1 -0
  101. package/dist/{rollback-D1d-fW0r.mjs → rollback-Drbg0OeR.mjs} +5 -4
  102. package/dist/rollback-Drbg0OeR.mjs.map +1 -0
  103. package/dist/{runtime-Es1V4e9M.d.mts → runtime-D_J3ExJn.d.cts} +2 -2
  104. package/dist/{runtime-DDrHlYe5.d.cts.map → runtime-D_J3ExJn.d.cts.map} +1 -1
  105. package/dist/{runtime-DDrHlYe5.d.cts → runtime-_wEVtshH.d.mts} +2 -2
  106. package/dist/{runtime-Es1V4e9M.d.mts.map → runtime-_wEVtshH.d.mts.map} +1 -1
  107. package/dist/{sandbox-C3WsTa5m.d.mts → sandbox-CPJq1Kia.d.mts} +2 -2
  108. package/dist/{sandbox-C3WsTa5m.d.mts.map → sandbox-CPJq1Kia.d.mts.map} +1 -1
  109. package/dist/{sandbox-MaxSeU92.d.cts → sandbox-JwuPAl7I.d.cts} +2 -2
  110. package/dist/{sandbox-MaxSeU92.d.cts.map → sandbox-JwuPAl7I.d.cts.map} +1 -1
  111. package/dist/secrets-DJteijZo.cjs +47 -0
  112. package/dist/secrets-DJteijZo.cjs.map +1 -0
  113. package/dist/secrets-DbPmAS4k.mjs +36 -0
  114. package/dist/secrets-DbPmAS4k.mjs.map +1 -0
  115. package/dist/{seeds-CvGQJnPO.mjs → seeds-BSL55F6q.mjs} +897 -59
  116. package/dist/seeds-BSL55F6q.mjs.map +1 -0
  117. package/dist/{seeds-BKoJYsE7.cjs → seeds-c-ByX9je.cjs} +1014 -80
  118. package/dist/seeds-c-ByX9je.cjs.map +1 -0
  119. package/dist/stack-1PeLJS2j.cjs +1346 -0
  120. package/dist/stack-1PeLJS2j.cjs.map +1 -0
  121. package/dist/stack-Co4uZkAo.mjs +1239 -0
  122. package/dist/stack-Co4uZkAo.mjs.map +1 -0
  123. package/dist/target/public.cjs +1 -1
  124. package/dist/target/public.d.cts +2 -2
  125. package/dist/target/public.d.mts +2 -2
  126. package/dist/target/public.mjs +1 -1
  127. package/dist/{terminal-Dtd6BZX9.mjs → terminal-C4XRdwnU.mjs} +2 -2
  128. package/dist/{terminal-Dtd6BZX9.mjs.map → terminal-C4XRdwnU.mjs.map} +1 -1
  129. package/dist/{types-Bk9st2cd.d.cts → types-B6lmD3en.d.mts} +77 -26
  130. package/dist/types-B6lmD3en.d.mts.map +1 -0
  131. package/dist/{types-B3Gqs175.d.mts → types-BibpiHKB.d.cts} +78 -25
  132. package/dist/types-BibpiHKB.d.cts.map +1 -0
  133. package/dist/workspace/index.d.cts +2 -2
  134. package/dist/workspace/index.d.mts +2 -2
  135. package/package.json +15 -15
  136. package/dist/LegacyStateStore-CeEwayMB.cjs.map +0 -1
  137. package/dist/LegacyStateStore-DdJ1bCRV.mjs +0 -89
  138. package/dist/LegacyStateStore-DdJ1bCRV.mjs.map +0 -1
  139. package/dist/compose-CTdVeeVk.mjs +0 -3151
  140. package/dist/compose-CTdVeeVk.mjs.map +0 -1
  141. package/dist/compose-fnYmPk_c.cjs +0 -3276
  142. package/dist/compose-fnYmPk_c.cjs.map +0 -1
  143. package/dist/deploy-6ToUHJmM.cjs.map +0 -1
  144. package/dist/deploy-yuJHlkY0.mjs.map +0 -1
  145. package/dist/engine-C8Ye9MUm.mjs.map +0 -1
  146. package/dist/engine-Dj7ZKO8H.cjs.map +0 -1
  147. package/dist/rollback-D1d-fW0r.mjs.map +0 -1
  148. package/dist/rollback-DDHtd0GJ.cjs.map +0 -1
  149. package/dist/seeds-BKoJYsE7.cjs.map +0 -1
  150. package/dist/seeds-CvGQJnPO.mjs.map +0 -1
  151. package/dist/types-B3Gqs175.d.mts.map +0 -1
  152. package/dist/types-Bk9st2cd.d.cts.map +0 -1
package/dist/index.cjs CHANGED
@@ -7,7 +7,7 @@ const require_discover = require("./discover-DPgu-ScS.cjs");
7
7
  const require_derive = require("./derive-DAbo49sm.cjs");
8
8
  const require_workspace = require("./workspace-CHOB2Xg3.cjs");
9
9
  const require_config = require("./config.cjs");
10
- const require_seeds = require("./seeds-BKoJYsE7.cjs");
10
+ const require_seeds = require("./seeds-c-ByX9je.cjs");
11
11
  const require_EndpointGenerator = require("./EndpointGenerator-De03t1hd.cjs");
12
12
  const require_openapi = require("./openapi.cjs");
13
13
  const require_SubscriberGenerator = require("./SubscriberGenerator-Dvz7EzqK.cjs");
@@ -16,10 +16,11 @@ const require_drivers = require("./drivers-DDojgzz0.cjs");
16
16
  const require_emit = require("./emit-Dmc1nvdS.cjs");
17
17
  const require_local = require("./local-B61kUh0w.cjs");
18
18
  const require_sniffer = require("./sniffer-Dq5BS98f.cjs");
19
- const require_deploy = require("./deploy-6ToUHJmM.cjs");
20
- const require_compose = require("./compose-fnYmPk_c.cjs");
19
+ const require_deploy = require("./deploy-C3Mhnmus.cjs");
20
+ const require_compose = require("./compose-BHVKLluX.cjs");
21
+ const require_stack = require("./stack-1PeLJS2j.cjs");
21
22
  const require_credentialSchemas = require("./credentialSchemas-CAPKFkrG.cjs");
22
- const require_LocalStateStore = require("./LocalStateStore-BMfseje2.cjs");
23
+ const require_LocalStateStore = require("./LocalStateStore-oX_zxj9V.cjs");
23
24
  const require_utils = require("./utils-D2Nk1Nv2.cjs");
24
25
  require("./awsStore-B5We7bMg.cjs");
25
26
  const require_ready = require("./ready-D3PIjx3S.cjs");
@@ -55,7 +56,7 @@ crypto = require_rolldown_runtime.__toESM(crypto, 1);
55
56
  let _geekmidas_constructs_functions = require("@geekmidas/constructs/functions");
56
57
  let _geekmidas_constructs_topic = require("@geekmidas/constructs/topic");
57
58
  //#region package.json
58
- var version = "10.0.0-alpha.92";
59
+ var version = "10.0.0-alpha.93";
59
60
  //#endregion
60
61
  //#region src/prompt.ts
61
62
  /**
@@ -2332,9 +2333,9 @@ async function workspaceDevCommand(configured, options) {
2332
2333
  for (const { id, port } of fakes) logger$5.log(`🎭 ${id} fake: http://localhost:${port}`);
2333
2334
  logger$5.log(options.migrate || options.seed ? "🗄️ Migrating the databases" : "🗄️ Checking for pending migrations");
2334
2335
  if (options.migrate || options.seed) {
2335
- const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs"));
2336
+ const { prepareDevDatabases } = await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs"));
2336
2337
  await prepareDevDatabases(workspace, reconciled.env, { seed: !!options.seed });
2337
- } else await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2338
+ } else await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs")).then(({ reportPendingMigrations }) => reportPendingMigrations(workspace, reconciled.env)).catch((error) => {
2338
2339
  logger$5.log(`⚠️ Could not check for pending migrations: ${error instanceof Error ? error.message : String(error)}`);
2339
2340
  });
2340
2341
  const appUrls = {};
@@ -3387,7 +3388,7 @@ async function buildApp(input) {
3387
3388
  ...production,
3388
3389
  ...telemetry ? { telemetry } : {}
3389
3390
  });
3390
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-CXQDrhzN.cjs"));
3391
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-Dfsr6KXU.cjs"));
3391
3392
  await bundleServer({
3392
3393
  entryPoint,
3393
3394
  outputDir: (0, node_path.join)(outputDir, "dist"),
@@ -3532,7 +3533,7 @@ async function buildWorkers(input) {
3532
3533
  });
3533
3534
  logger$4.log(`Generated worker ${worker.id}: ${crons.length} crons, ${queues.length} queues, ${subscribers.length} subscribers`);
3534
3535
  if (!input.bundle) continue;
3535
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-CXQDrhzN.cjs"));
3536
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-Dfsr6KXU.cjs"));
3536
3537
  const outfile = require_seeds.workerBundleName(worker.id);
3537
3538
  await bundleServer({
3538
3539
  entryPoint,
@@ -3618,7 +3619,7 @@ async function buildForTarget(target, context, appRoot, workspaceRoot, endpointG
3618
3619
  let masterKey;
3619
3620
  if (context.production?.bundle && !skipBundle) {
3620
3621
  logger$4.log(`\n📦 Bundling production server...`);
3621
- const { bundleServer } = await Promise.resolve().then(() => require("./bundler-CXQDrhzN.cjs"));
3622
+ const { bundleServer } = await Promise.resolve().then(() => require("./bundler-Dfsr6KXU.cjs"));
3622
3623
  const allConstructs = [
3623
3624
  ...endpoints.map((e) => e.construct),
3624
3625
  ...functions.map((f) => f.construct),
@@ -3864,7 +3865,7 @@ var ComposeModeConflict = class extends require_errors.GkmError {
3864
3865
  };
3865
3866
  /** Each pushed image as `<ref>@sha256:…`, by app. */
3866
3867
  function pushedDigests(run) {
3867
- return Object.fromEntries(Object.entries(run.images).filter(([, image]) => image.digest).sort(([a], [b]) => a.localeCompare(b)).map(([app, image]) => [app, require_compose.pinnedRef(image.ref, image.digest)]));
3868
+ return Object.fromEntries(Object.entries(run.images).filter(([, image]) => image.digest).sort(([a], [b]) => a.localeCompare(b)).map(([app, image]) => [app, require_stack.pinnedRef(image.ref, image.digest)]));
3868
3869
  }
3869
3870
  /** `gkm compose`. */
3870
3871
  async function composeCommand(options, deps = {}) {
@@ -3878,12 +3879,12 @@ async function composeCommand(options, deps = {}) {
3878
3879
  if (options.down) {
3879
3880
  const override = require_compose.stackOverrideFile(workspace.root, stage);
3880
3881
  const ref = {
3881
- project: require_compose.composeProject(require_seeds.deployIdentity(workspace, stage)),
3882
- file: (0, node_path.join)(workspace.root, require_compose.stackDir(stage), "docker-compose.yml"),
3882
+ project: require_stack.composeProject(require_seeds.deployIdentity(workspace, stage)),
3883
+ file: (0, node_path.join)(workspace.root, require_stack.stackDir(stage), "docker-compose.yml"),
3883
3884
  ...(0, node_fs.existsSync)(override) ? { overrides: [override] } : {},
3884
3885
  cwd: workspace.root
3885
3886
  };
3886
- if (await require_compose.removeEdgeRoutes(require_compose.edgeDir(deps.env ?? process.env), ref.project)) console.log(`🌐 Removed ${ref.project}'s routes from ${require_compose.EDGE_PROJECT}.`);
3887
+ if (await require_compose.removeEdgeRoutes(require_compose.edgeDir(deps.env ?? process.env), ref.project)) console.log(`🌐 Removed ${ref.project}'s routes from ${require_stack.EDGE_PROJECT}.`);
3887
3888
  await (deps.docker ?? require_compose.dockerCompose).down(ref);
3888
3889
  console.log(`🛑 Stopped ${ref.project}. Its volumes are kept.`);
3889
3890
  return;
@@ -3893,7 +3894,7 @@ async function composeCommand(options, deps = {}) {
3893
3894
  const tag = options.tag ?? (options.pull ? "latest" : void 0);
3894
3895
  const pin = options.digestsFile && pulls ? {
3895
3896
  file: options.digestsFile,
3896
- digests: require_compose.parseDigests(options.digestsFile, await (0, node_fs_promises.readFile)((0, node_path.resolve)(cwd, options.digestsFile), "utf-8"))
3897
+ digests: require_stack.parseDigests(options.digestsFile, await (0, node_fs_promises.readFile)((0, node_path.resolve)(cwd, options.digestsFile), "utf-8"))
3897
3898
  } : void 0;
3898
3899
  const result = await require_deploy.deploy({
3899
3900
  cwd,
@@ -4139,6 +4140,7 @@ const MASKED = "********";
4139
4140
  */
4140
4141
  function maskStateSecrets(state) {
4141
4142
  const masked = structuredClone(state);
4143
+ if (masked.provider !== "dokploy") return masked;
4142
4144
  for (const credentials of Object.values(masked.appCredentials ?? {})) credentials.dbPassword = MASKED;
4143
4145
  for (const secrets of Object.values(masked.generatedSecrets ?? {})) for (const name of Object.keys(secrets)) secrets[name] = MASKED;
4144
4146
  if (masked.backups) {
@@ -4194,6 +4196,7 @@ async function stateShowCommand(options) {
4194
4196
  if (options.json) console.log(JSON.stringify(state, null, 2));
4195
4197
  else {
4196
4198
  printStateDetails(state);
4199
+ printDnsRecords(stored.resources);
4197
4200
  printUnfinished(stored.resources);
4198
4201
  }
4199
4202
  }
@@ -4238,8 +4241,8 @@ async function stateDiffCommand(options) {
4238
4241
  if (!remote) console.log("Remote: (none)");
4239
4242
  else console.log(`Remote: Last deployed ${remote.lastDeployedAt}`);
4240
4243
  console.log("");
4241
- const localApps = local?.applications ?? {};
4242
- const remoteApps = remote?.applications ?? {};
4244
+ const localApps = dokploy(local)?.applications ?? {};
4245
+ const remoteApps = dokploy(remote)?.applications ?? {};
4243
4246
  const allApps = /* @__PURE__ */ new Set([...Object.keys(localApps), ...Object.keys(remoteApps)]);
4244
4247
  if (allApps.size > 0) {
4245
4248
  console.log("Applications:");
@@ -4252,8 +4255,8 @@ async function stateDiffCommand(options) {
4252
4255
  else console.log(` ${app}: ${localId} (local) != ${remoteId} (remote) [MISMATCH]`);
4253
4256
  }
4254
4257
  }
4255
- const localServices = local?.services ?? {};
4256
- const remoteServices = remote?.services ?? {};
4258
+ const localServices = dokploy(local)?.services ?? {};
4259
+ const remoteServices = dokploy(remote)?.services ?? {};
4257
4260
  if (Object.keys(localServices).length > 0 || Object.keys(remoteServices).length > 0) {
4258
4261
  console.log("\nServices:");
4259
4262
  const serviceKeys = /* @__PURE__ */ new Set([...Object.keys(localServices), ...Object.keys(remoteServices)]);
@@ -4318,6 +4321,10 @@ async function copyStage(from, to, stage) {
4318
4321
  for (const { updatedAt: _stamped, ...record } of Object.values(source.resources)) version = await to.putResource(stage, record, { expectedVersion: version });
4319
4322
  return source;
4320
4323
  }
4324
+ /** `state` if Dokploy wrote it — the only shape with ids of its own. */
4325
+ function dokploy(state) {
4326
+ return state?.provider === "dokploy" ? state : null;
4327
+ }
4321
4328
  function describeRecord(record) {
4322
4329
  if (!record) return "(none)";
4323
4330
  return record.id ? `${record.status} ${record.id}` : record.status;
@@ -4331,6 +4338,12 @@ function printUnfinished(resources) {
4331
4338
  for (const record of pending) console.log(` ${record.key}`);
4332
4339
  }
4333
4340
  function printStateSummary(state) {
4341
+ if (state.provider !== "dokploy") {
4342
+ console.log(` Stage: ${state.stage} (${state.provider})`);
4343
+ console.log(` Apps released: ${Object.keys(state.releases ?? {}).length}`);
4344
+ console.log(` Last deployed: ${state.lastDeployedAt}`);
4345
+ return;
4346
+ }
4334
4347
  const appCount = Object.keys(state.applications).length;
4335
4348
  const hasPostgres = !!state.services.postgresId;
4336
4349
  const hasRedis = !!state.services.redisId;
@@ -4341,6 +4354,14 @@ function printStateSummary(state) {
4341
4354
  console.log(` Last deployed: ${state.lastDeployedAt}`);
4342
4355
  }
4343
4356
  function printStateDetails(state) {
4357
+ if (state.provider !== "dokploy") {
4358
+ console.log(`Stage: ${state.stage} (${state.provider})`);
4359
+ console.log(`Last Deployed: ${state.lastDeployedAt}`);
4360
+ if (state.identity) console.log(`Identity: ${state.identity}`);
4361
+ console.log("");
4362
+ printReleases(state.releases);
4363
+ return;
4364
+ }
4344
4365
  console.log(`Stage: ${state.stage}`);
4345
4366
  console.log(`Environment ID: ${state.environmentId}`);
4346
4367
  console.log(`Last Deployed: ${state.lastDeployedAt}`);
@@ -4382,6 +4403,62 @@ function printStateDetails(state) {
4382
4403
  for (const [hostname, info] of Object.entries(state.dnsVerified)) console.log(` ${hostname}: ${info.serverIp} (${info.verifiedAt})`);
4383
4404
  }
4384
4405
  }
4406
+ /** Each app's current release, and who released it. */
4407
+ function printReleases(releases) {
4408
+ console.log("Releases:");
4409
+ const apps = Object.entries(releases ?? {});
4410
+ if (apps.length === 0) {
4411
+ console.log(" (none)");
4412
+ return;
4413
+ }
4414
+ for (const [app, { current }] of apps) console.log(` ${app}: ${describeRelease(current)}`);
4415
+ }
4416
+ /** `ghcr.io/acme/api:v2 (sha256:…) · 2026-… · ada@laptop` */
4417
+ function describeRelease(release) {
4418
+ return [
4419
+ `${release.ref}${release.digest ? ` (${release.digest})` : ""}`,
4420
+ release.releasedAt,
4421
+ require_seeds.describeActor(release.releasedBy)
4422
+ ].join(" · ");
4423
+ }
4424
+ /** The DNS records gkm wrote for the stage. */
4425
+ function printDnsRecords(resources) {
4426
+ const records = require_seeds.dnsResources(resources);
4427
+ if (records.length === 0) return;
4428
+ console.log("");
4429
+ console.log("DNS Records:");
4430
+ for (const record of records) console.log(` ${record.fqdn} ${record.type} ${record.value} (TTL ${record.ttl}${record.provider ? `, ${record.provider}` : ""})`);
4431
+ }
4432
+ /**
4433
+ * Who wrote a stage's state, newest first, and what each app runs.
4434
+ * `gkm state:history --stage=<stage>`
4435
+ */
4436
+ async function stateHistoryCommand(options) {
4437
+ const { workspace } = await require_config.loadWorkspaceConfig();
4438
+ const stored = await (await require_seeds.createStateStore({
4439
+ config: workspace.state,
4440
+ workspaceRoot: workspace.root,
4441
+ workspaceName: workspace.name
4442
+ })).read(options.stage);
4443
+ if (!stored) {
4444
+ console.log(`No state found for stage: ${options.stage}`);
4445
+ return;
4446
+ }
4447
+ const history = {
4448
+ stage: options.stage,
4449
+ history: stored.history,
4450
+ releases: Object.fromEntries(Object.entries(stored.state.releases ?? {}).map(([app, releases]) => [app, releases.current]))
4451
+ };
4452
+ if (options.json) {
4453
+ console.log(JSON.stringify(history, null, 2));
4454
+ return;
4455
+ }
4456
+ console.log(`History of stage ${options.stage} (newest first):`);
4457
+ if (history.history.length === 0) console.log(" (none recorded)");
4458
+ for (const entry of history.history) console.log(` ${entry.serial} · ${entry.at} · ${require_seeds.describeActor(entry.by)} · ${entry.operation}`);
4459
+ console.log("");
4460
+ printReleases(stored.state.releases);
4461
+ }
4385
4462
  //#endregion
4386
4463
  //#region src/secrets/generator.ts
4387
4464
  /**
@@ -5353,25 +5430,25 @@ function loadPackageJson() {
5353
5430
  * Run: pnpm --filter @geekmidas/cli sync-versions
5354
5431
  */
5355
5432
  const GEEKMIDAS_VERSIONS = {
5356
- "@geekmidas/audit": "~10.0.0-alpha.92",
5357
- "@geekmidas/auth": "~10.0.0-alpha.92",
5358
- "@geekmidas/cache": "~10.0.0-alpha.92",
5359
- "@geekmidas/client": "~10.0.0-alpha.92",
5360
- "@geekmidas/cloud": "~10.0.0-alpha.92",
5361
- "@geekmidas/constructs": "~10.0.0-alpha.92",
5362
- "@geekmidas/db": "~10.0.0-alpha.92",
5363
- "@geekmidas/emailkit": "~10.0.0-alpha.92",
5364
- "@geekmidas/envkit": "~10.0.0-alpha.92",
5365
- "@geekmidas/errors": "~10.0.0-alpha.92",
5366
- "@geekmidas/events": "~10.0.0-alpha.92",
5367
- "@geekmidas/logger": "~10.0.0-alpha.92",
5368
- "@geekmidas/manifest": "~10.0.0-alpha.92",
5369
- "@geekmidas/rate-limit": "~10.0.0-alpha.92",
5370
- "@geekmidas/schema": "~10.0.0-alpha.92",
5371
- "@geekmidas/services": "~10.0.0-alpha.92",
5372
- "@geekmidas/storage": "~10.0.0-alpha.92",
5373
- "@geekmidas/telescope": "~10.0.0-alpha.92",
5374
- "@geekmidas/testkit": "~10.0.0-alpha.92",
5433
+ "@geekmidas/audit": "~10.0.0-alpha.93",
5434
+ "@geekmidas/auth": "~10.0.0-alpha.93",
5435
+ "@geekmidas/cache": "~10.0.0-alpha.93",
5436
+ "@geekmidas/client": "~10.0.0-alpha.93",
5437
+ "@geekmidas/cloud": "~10.0.0-alpha.93",
5438
+ "@geekmidas/constructs": "~10.0.0-alpha.93",
5439
+ "@geekmidas/db": "~10.0.0-alpha.93",
5440
+ "@geekmidas/emailkit": "~10.0.0-alpha.93",
5441
+ "@geekmidas/envkit": "~10.0.0-alpha.93",
5442
+ "@geekmidas/errors": "~10.0.0-alpha.93",
5443
+ "@geekmidas/events": "~10.0.0-alpha.93",
5444
+ "@geekmidas/logger": "~10.0.0-alpha.93",
5445
+ "@geekmidas/manifest": "~10.0.0-alpha.93",
5446
+ "@geekmidas/rate-limit": "~10.0.0-alpha.93",
5447
+ "@geekmidas/schema": "~10.0.0-alpha.93",
5448
+ "@geekmidas/services": "~10.0.0-alpha.93",
5449
+ "@geekmidas/storage": "~10.0.0-alpha.93",
5450
+ "@geekmidas/telescope": "~10.0.0-alpha.93",
5451
+ "@geekmidas/testkit": "~10.0.0-alpha.93",
5375
5452
  "@geekmidas/cli": `~${loadPackageJson().version}`
5376
5453
  };
5377
5454
  //#endregion
@@ -5772,7 +5849,7 @@ const COMMIT = /^[0-9a-f]{40}$/;
5772
5849
  * The `uses:` value for the stages action, with a comment saying which CLI
5773
5850
  * release the pinned commit is.
5774
5851
  */
5775
- function stagesActionUses(commit = "446c06603533dd304ee5655661784b7a4f07e2b7", version = cliVersion()) {
5852
+ function stagesActionUses(commit = "a619ff213e362417b184dff08c8175a86f5d9d07", version = cliVersion()) {
5776
5853
  return commit && COMMIT.test(commit) ? `${STAGES_ACTION}@${commit} # @geekmidas/cli ${version}` : `${STAGES_ACTION}@main # pin to a commit SHA: see the action's README`;
5777
5854
  }
5778
5855
  //#endregion
@@ -11054,135 +11131,6 @@ function maskUrl(url) {
11054
11131
  }
11055
11132
  }
11056
11133
  //#endregion
11057
- //#region src/providers/dns.ts
11058
- /** Whether the workspace deploys through the compose target. */
11059
- function deploysWithCompose(workspace) {
11060
- return workspace.deploy?.default === "compose" || Object.values(workspace.apps).some((app) => app.resolvedDeployTarget === "compose");
11061
- }
11062
- /**
11063
- * A compose stage that serves a domain has its server's address in its
11064
- * secrets — checked before `gkm setup --stage` does anything else.
11065
- *
11066
- * @throws {ServerAddressMissing} for a compose stage with a domain and none
11067
- * @throws {ServerAddressInvalid} for a value that is not an address
11068
- */
11069
- function assertStageServer(workspace, stage, secrets) {
11070
- if (stage === workspace.stages.local) return void 0;
11071
- if (!deploysWithCompose(workspace)) return require_compose.serverAddress(stage, secrets?.custom);
11072
- return require_compose.requiredServerAddress(stage, workspace.domains?.[stage], secrets?.custom);
11073
- }
11074
- /**
11075
- * The hosts a compose stage serves: its stack composed as a deploy would —
11076
- * with the secrets it would generate made up in memory, never written — and
11077
- * every route's host read off it.
11078
- */
11079
- async function composeStageHosts(options) {
11080
- const { workspace, stage } = options;
11081
- const runnables = options.runnables ?? {};
11082
- const background = options.background ?? {};
11083
- const manifest = options.manifest ?? await require_discover.discover({
11084
- patterns: require_seeds.constructGlobs(workspace),
11085
- cwd: workspace.root,
11086
- runnables,
11087
- background
11088
- });
11089
- const stored = await (await require_seeds.secretsStoreFor(workspace, stage, {
11090
- ...options.profile ? { profile: options.profile } : {},
11091
- ...options.home ? { home: options.home } : {}
11092
- })).read(stage);
11093
- const { deployedStackSecrets } = await Promise.resolve().then(() => require("./compose-fnYmPk_c.cjs")).then((n) => n.secrets_exports);
11094
- const { composeStack } = await Promise.resolve().then(() => require("./compose-fnYmPk_c.cjs")).then((n) => n.stack_exports);
11095
- const { secrets } = deployedStackSecrets(workspace, stage, stored, manifest);
11096
- const stack = composeStack({
11097
- workspace,
11098
- manifest,
11099
- runnables,
11100
- background,
11101
- stage,
11102
- identity: require_seeds.deployIdentity(workspace, stage),
11103
- images: {
11104
- mode: "pull",
11105
- tag: "dns",
11106
- ...workspace.deploy?.registry ? { registry: workspace.deploy.registry } : {}
11107
- },
11108
- secrets,
11109
- buildOnly: true,
11110
- allowDevServices: true
11111
- });
11112
- return require_compose.stackHosts(stack);
11113
- }
11114
- /**
11115
- * `GKM_SERVER_IPV4` from the stage's secrets and `dns`: each public host's
11116
- * records, created or corrected. A dry run reads and prints, and writes
11117
- * nothing.
11118
- */
11119
- async function provisionStageDns(options) {
11120
- const { workspace, stage } = options;
11121
- const log = options.log ?? ((line) => console.log(line));
11122
- if (stage === workspace.stages.local || !workspace.dns || !deploysWithCompose(workspace)) return {
11123
- mode: "none",
11124
- hosts: [],
11125
- changes: []
11126
- };
11127
- const store = await require_seeds.secretsStoreFor(workspace, stage, {
11128
- ...options.profile ? { profile: options.profile } : {},
11129
- ...options.home ? { home: options.home } : {}
11130
- });
11131
- const server = require_compose.serverAddress(stage, (await store.read(stage))?.custom);
11132
- if (!server) {
11133
- log(`\n🌐 DNS for '${stage}': no GKM_SERVER_IPV4 in its secrets, so no records — ${require_compose.serverAddressHint(stage)}`);
11134
- return {
11135
- mode: "none",
11136
- hosts: [],
11137
- changes: []
11138
- };
11139
- }
11140
- const hosts = [...options.hosts ?? await composeStageHosts({
11141
- workspace,
11142
- stage,
11143
- ...options.profile ? { profile: options.profile } : {},
11144
- ...options.home ? { home: options.home } : {},
11145
- ...options.manifest ? { manifest: options.manifest } : {},
11146
- ...options.runnables ? { runnables: options.runnables } : {},
11147
- ...options.background ? { background: options.background } : {}
11148
- })];
11149
- log(`\n🌐 DNS for '${stage}' → ${server.ipv4}${server.ipv6 ? ` / ${server.ipv6}` : ""}${options.dryRun ? " (dry run — nothing is written)" : ""}`);
11150
- const plan = require_compose.planStackDns({
11151
- stage,
11152
- hosts,
11153
- server,
11154
- dns: workspace.dns
11155
- });
11156
- try {
11157
- return {
11158
- mode: "records",
11159
- hosts,
11160
- changes: await require_compose.applyStackDns(plan, {
11161
- ...options.dryRun ? { dryRun: true } : {},
11162
- log,
11163
- credentials: {
11164
- env: options.env ?? process.env,
11165
- ...options.home ? { home: options.home } : {},
11166
- log
11167
- },
11168
- ...options.providerFor ? { providerFor: options.providerFor } : {}
11169
- })
11170
- };
11171
- } catch (error) {
11172
- if (error instanceof require_credentials.MissingCredential) {
11173
- log(` ⚠ ${error.message}`);
11174
- log(" Until then, create these records yourself:");
11175
- for (const domain of plan.domains) for (const r of domain.records) log(` ${r.host.padEnd(32)} ${r.type.padEnd(5)} ${r.value} (TTL ${r.ttl})`);
11176
- return {
11177
- mode: "records",
11178
- hosts,
11179
- changes: []
11180
- };
11181
- }
11182
- throw error;
11183
- }
11184
- }
11185
- //#endregion
11186
11134
  //#region src/setup/index.ts
11187
11135
  var setup_exports = /* @__PURE__ */ require_rolldown_runtime.__exportAll({
11188
11136
  createFreshWorkspaceSecrets: () => createFreshWorkspaceSecrets,
@@ -11216,7 +11164,10 @@ async function setupCommand(options = {}) {
11216
11164
  logger$1.log(`📦 Workspace: ${workspace.name}`);
11217
11165
  logger$1.log(`📱 Apps: ${Object.keys(workspace.apps).join(", ")}`);
11218
11166
  logger$1.log(`🔑 Stage: ${stage}\n`);
11219
- if (!local) assertStageServer(workspace, stage, await (await require_seeds.secretsStoreFor(workspace, stage, { ...options.profile ? { profile: options.profile } : {} })).read(stage));
11167
+ if (!local) {
11168
+ const store = await require_seeds.secretsStoreFor(workspace, stage, { ...options.profile ? { profile: options.profile } : {} });
11169
+ require_seeds.assertStageServer(workspace, stage, await store.read(stage));
11170
+ }
11220
11171
  if (!local && options.dryRun) {
11221
11172
  await provisionDeployed(workspace, stage, options);
11222
11173
  return;
@@ -11251,7 +11202,7 @@ async function provisionDeployed(workspace, stage, options) {
11251
11202
  log: (line) => logger$1.log(line)
11252
11203
  })).filter((r) => r.mode === "provider");
11253
11204
  if (configured.length === 0) logger$1.log(` None configured: '${stage}' takes every key from its secrets (gkm secrets:add --stage ${stage}). Name one in gkm.config.ts — deploy: { objects: { ${stage}: { provider: 's3' } } } — to have ${require_seeds.provisionCommand(stage)} create it.`);
11254
- const dns = await provisionStageDns({
11205
+ const dns = await require_seeds.provisionStageDns({
11255
11206
  workspace,
11256
11207
  stage,
11257
11208
  ...options.dryRun ? { dryRun: true } : {},
@@ -11614,7 +11565,7 @@ function testDatabases(reconciled) {
11614
11565
  * starts without the reference data the app needs.
11615
11566
  */
11616
11567
  async function migrateTestStage(workspace, env) {
11617
- const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs"));
11568
+ const { migrateAndSeed } = await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs"));
11618
11569
  const { discover } = await Promise.resolve().then(() => require("./discover-DPgu-ScS.cjs")).then((n) => n.discover_exports);
11619
11570
  const sources = {};
11620
11571
  const manifest = await discover({
@@ -12050,7 +12001,7 @@ program.command("migrate").description("Apply each database construct's migratio
12050
12001
  try {
12051
12002
  const globalOptions = program.opts();
12052
12003
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12053
- const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs"));
12004
+ const { migrateCommand } = await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs"));
12054
12005
  await migrateCommand({
12055
12006
  ...options,
12056
12007
  ...construct ? { construct } : {}
@@ -12063,7 +12014,7 @@ program.command("seed").description("Migrate, then run each database construct's
12063
12014
  try {
12064
12015
  const globalOptions = program.opts();
12065
12016
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12066
- const { seedCommand } = await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs"));
12017
+ const { seedCommand } = await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs"));
12067
12018
  await seedCommand({
12068
12019
  ...options,
12069
12020
  ...construct ? { construct } : {}
@@ -12076,7 +12027,7 @@ program.command("migration").description("Write a construct's next migration: an
12076
12027
  try {
12077
12028
  const globalOptions = program.opts();
12078
12029
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12079
- const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-D3VVsiHp.cjs"));
12030
+ const { migrationCommand } = await Promise.resolve().then(() => require("./migrate-C8wTpakT.cjs"));
12080
12031
  await migrationCommand({
12081
12032
  construct,
12082
12033
  ...name ? { name } : {}
@@ -12176,7 +12127,7 @@ program.command("secrets:add").description("Build the keys a stage must be given
12176
12127
  try {
12177
12128
  const globalOptions = program.opts();
12178
12129
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12179
- const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-oN0b18HN.cjs"));
12130
+ const { secretsAddCommand } = await Promise.resolve().then(() => require("./add-VcyJnsPX.cjs"));
12180
12131
  await secretsAddCommand(options);
12181
12132
  } catch (error) {
12182
12133
  exitWithError(error);
@@ -12186,7 +12137,7 @@ program.command("encryption:rotate").description("Add a new current key to an En
12186
12137
  try {
12187
12138
  const globalOptions = program.opts();
12188
12139
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12189
- const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-CgW167LO.cjs"));
12140
+ const { encryptionRotateCommand } = await Promise.resolve().then(() => require("./encryption-D7zmwzWz.cjs"));
12190
12141
  await encryptionRotateCommand(construct, options);
12191
12142
  } catch (error) {
12192
12143
  exitWithError(error);
@@ -12196,7 +12147,7 @@ program.command("encryption:retire").description("Remove an old key from an Encr
12196
12147
  try {
12197
12148
  const globalOptions = program.opts();
12198
12149
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12199
- const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-CgW167LO.cjs"));
12150
+ const { encryptionRetireCommand } = await Promise.resolve().then(() => require("./encryption-D7zmwzWz.cjs"));
12200
12151
  await encryptionRetireCommand(construct, key, options);
12201
12152
  } catch (error) {
12202
12153
  exitWithError(error);
@@ -12235,7 +12186,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
12235
12186
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12236
12187
  const { loadWorkspaceConfig } = await Promise.resolve().then(() => require("./config.cjs"));
12237
12188
  const { reconcileMissingSecrets } = await Promise.resolve().then(() => require("./reconcile-CuCQBa5-.cjs"));
12238
- const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-BKoJYsE7.cjs")).then((n) => n.store_exports);
12189
+ const { secretsStoreFor } = await Promise.resolve().then(() => require("./seeds-c-ByX9je.cjs")).then((n) => n.store_exports);
12239
12190
  const { workspace } = await loadWorkspaceConfig();
12240
12191
  const stage = options.stage ?? workspace.stages.local;
12241
12192
  const store = await secretsStoreFor(workspace, stage);
@@ -12244,7 +12195,7 @@ program.command("secrets:reconcile").description("Backfill missing custom secret
12244
12195
  console.error(`No secrets found for stage "${stage}". Run "gkm secrets:init --stage ${stage}" first.`);
12245
12196
  process.exit(1);
12246
12197
  }
12247
- const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-BKoJYsE7.cjs")).then((n) => n.workspace_exports);
12198
+ const { derivedContainers } = await Promise.resolve().then(() => require("./seeds-c-ByX9je.cjs")).then((n) => n.workspace_exports);
12248
12199
  const result = reconcileMissingSecrets(secrets, workspace, await derivedContainers(workspace, stage));
12249
12200
  if (!result) {
12250
12201
  console.log(`\n✓ Secrets for stage "${stage}" are up-to-date`);
@@ -12261,14 +12212,14 @@ program.command("secrets:migrate").description("Copy a deployed stage's secrets
12261
12212
  try {
12262
12213
  const globalOptions = program.opts();
12263
12214
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12264
- const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-f6JDjyCp.cjs"));
12215
+ const { secretsMigrateCommand } = await Promise.resolve().then(() => require("./migrate-DFjbGnSr.cjs"));
12265
12216
  await secretsMigrateCommand(options);
12266
12217
  } catch (error) {
12267
12218
  exitWithError(error);
12268
12219
  }
12269
12220
  });
12270
12221
  program.command("deploy").description("Deploy a stage through its target").option("--target <name>", "Deploy target: dokploy, compose, sst, or one named in deploy.targets (default: deploy.default)").option("--provider <provider>", "[DEPRECATED] Use --target instead").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").option("--tag <tag>", "Image tag (default: stage-timestamp; compose: the commit). Compose pulls a given tag").option("--skip-push", "Skip pushing image to registry").option("--skip-build", "Skip build step (use existing build)").option("--json", "Write events as JSON lines instead of progress; never prompts").option("--dry-run", "Show what would be created or reused; change, build and push nothing").option("--atomic", "If the release fails, roll back every app it released, not only the failed ones").option("--allow-dev-services", "Server targets: run the dev service (MinIO, Mailpit) for every bucket and mail the stage doesn't account for. Not production-grade").option("--skip-dns-check", "Compose: do not check that each public host resolves to GKM_SERVER_IPV4 in the stage secrets before starting (a CDN or proxy in front)").action(async (options) => {
12271
- const { deployCli } = await Promise.resolve().then(() => require("./cli-BRZFYvdb.cjs"));
12222
+ const { deployCli } = await Promise.resolve().then(() => require("./cli-DL19w4OE.cjs"));
12272
12223
  const globalOptions = program.opts();
12273
12224
  const code = await deployCli({
12274
12225
  cwd: (0, node_path.resolve)(globalOptions.cwd ?? process.cwd()),
@@ -12286,7 +12237,7 @@ program.command("deploy").description("Deploy a stage through its target").optio
12286
12237
  });
12287
12238
  program.command("deploy:rollback").description("Put a stage's app back on its previous release (Dokploy): one app with --app, every app with --atomic").requiredOption("--stage <stage>", "A deployed stage").option("--app <app>", "The app to roll back").option("--atomic", "Roll back every app that has an earlier release").action(async (options) => {
12288
12239
  try {
12289
- const { rollbackStage } = await Promise.resolve().then(() => require("./rollback-DDHtd0GJ.cjs")).then((n) => n.rollback_exports);
12240
+ const { rollbackStage } = await Promise.resolve().then(() => require("./rollback--ympG9ss.cjs")).then((n) => n.rollback_exports);
12290
12241
  const { terminalCredentials } = await Promise.resolve().then(() => require("./terminal-8XngdSTo.cjs"));
12291
12242
  const globalOptions = program.opts();
12292
12243
  await rollbackStage({
@@ -12320,7 +12271,7 @@ program.command("deploy:github").description("Let GitHub Actions deploy a stage:
12320
12271
  try {
12321
12272
  const globalOptions = program.opts();
12322
12273
  if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12323
- const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-BD051KZZ.cjs"));
12274
+ const { deployGithubCommand } = await Promise.resolve().then(() => require("./github-zneTMvnO.cjs"));
12324
12275
  await deployGithubCommand(options);
12325
12276
  } catch (error) {
12326
12277
  exitWithError(error);
@@ -12429,6 +12380,15 @@ program.command("state:show").description("Show deployment state for a stage").r
12429
12380
  exitWithError(error);
12430
12381
  }
12431
12382
  });
12383
+ program.command("state:history").description("Show who wrote a stage's deploy state, newest first, and what each app runs").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").option("--json", "Output as JSON").action(async (options) => {
12384
+ try {
12385
+ const globalOptions = program.opts();
12386
+ if (globalOptions.cwd) process.chdir(globalOptions.cwd);
12387
+ await stateHistoryCommand(options);
12388
+ } catch (error) {
12389
+ exitWithError(error);
12390
+ }
12391
+ });
12432
12392
  program.command("state:unlock").description("Release a stage deploy lock left behind by a run that crashed").requiredOption("--stage <stage>", "Deployment stage (e.g., production, staging)").action(async (options) => {
12433
12393
  try {
12434
12394
  const globalOptions = program.opts();
@@ -12464,7 +12424,6 @@ try {
12464
12424
  program.parse();
12465
12425
  //#endregion
12466
12426
  exports.canPrompt = canPrompt;
12467
- exports.deploysWithCompose = deploysWithCompose;
12468
12427
  exports.formatError = formatError;
12469
12428
  exports.generateFullstackCustomSecrets = generateFullstackCustomSecrets;
12470
12429
  exports.prompt = prompt;