apexrest 1.2.0 → 1.3.0-beta.1

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 (151) hide show
  1. package/README.md +9 -3
  2. package/README.uk.md +9 -3
  3. package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +1 -1
  4. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  5. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  6. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  7. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  8. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  9. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  10. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/generator.json +5 -0
  11. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/manifest.json +29 -0
  12. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  13. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  14. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  15. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  16. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  17. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  18. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  19. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  20. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  21. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  22. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  23. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  24. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/profiles.json +10 -0
  25. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/revocations.json +1 -0
  26. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/crm.yaml +172 -0
  27. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/index.json +12 -0
  28. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/service-desk.yaml +120 -0
  29. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +7 -0
  30. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +234 -2
  31. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-allocation.schema.json +33 -0
  32. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-block.schema.json +208 -0
  33. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-blueprint.schema.json +664 -0
  34. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-command.schema.json +106 -0
  35. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-contract.schema.json +174 -0
  36. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-diagnostic.schema.json +26 -0
  37. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-entity.schema.json +141 -0
  38. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-evidence.schema.json +95 -0
  39. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-field.schema.json +53 -0
  40. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-instance.schema.json +117 -0
  41. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-lock.schema.json +54 -0
  42. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-operation.schema.json +55 -0
  43. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-owner.schema.json +105 -0
  44. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-parameters.schema.json +61 -0
  45. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-plan.schema.json +1010 -0
  46. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-renderer.schema.json +69 -0
  47. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-state.schema.json +146 -0
  48. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +760 -169
  49. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +486 -0
  50. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +13 -0
  51. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/sync-state.schema.json +238 -0
  52. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yaml__LICENSE +13 -0
  53. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +21 -11
  54. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2BBNJVKW.mjs +1996 -0
  55. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-HOKFFGSZ.mjs → chunk-33GE2NWZ.mjs} +1 -1
  56. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5JI3XEAK.mjs +14 -0
  57. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2ZUNLCLK.mjs → chunk-BAHECVGO.mjs} +30 -10
  58. package/dist/{runtime/chunk-SPZVXAM5.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-CYPFCUNE.mjs} +7 -4
  59. package/dist/{runtime/chunk-3MDDJFXN.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-EBBEN4AV.mjs} +29 -6
  60. package/dist/{runtime/chunk-NDZ2RWQU.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-ESDVN7DS.mjs} +3 -2
  61. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-AQZLLQ3D.mjs → chunk-FTTPESNK.mjs} +2 -2
  62. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-S24BD6PY.mjs → chunk-G3KR57BY.mjs} +1 -1
  63. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-TXVQLYTH.mjs → chunk-HKJVCGQQ.mjs} +118 -87
  64. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-WK5GP4ES.mjs → chunk-KQ5IDT7Z.mjs} +2 -2
  65. package/dist/{runtime/chunk-7RZW5QV2.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-RWGJITHZ.mjs} +5 -5
  66. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-IX6V6ZGW.mjs → chunk-WXP75UUP.mjs} +5 -5
  67. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YPLIIQ4Y.mjs +10233 -0
  68. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-QIVPMPU3.mjs → chunk-YQHHPRJH.mjs} +1 -1
  69. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +7 -7
  70. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +1 -1
  71. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/SKILL.md +18 -0
  72. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/agents/openai.yaml +4 -0
  73. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/references/workflow.md +15 -0
  74. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +3 -1
  75. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +3 -1
  76. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +8 -1
  77. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +2 -0
  78. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +3 -1
  79. package/dist/resources/blocks/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  80. package/dist/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  81. package/dist/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  82. package/dist/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  83. package/dist/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  84. package/dist/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  85. package/dist/resources/blocks/generator.json +5 -0
  86. package/dist/resources/blocks/manifest.json +29 -0
  87. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  88. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  89. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  90. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  91. package/dist/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  92. package/dist/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  93. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  94. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  95. package/dist/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  96. package/dist/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  97. package/dist/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  98. package/dist/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  99. package/dist/resources/blocks/profiles.json +10 -0
  100. package/dist/resources/blocks/revocations.json +1 -0
  101. package/dist/resources/blueprints/crm.yaml +172 -0
  102. package/dist/resources/blueprints/index.json +12 -0
  103. package/dist/resources/blueprints/service-desk.yaml +120 -0
  104. package/dist/resources/panel/index.html +7 -0
  105. package/dist/resources/panel/panel.js +234 -2
  106. package/dist/resources/schemas/composer-allocation.schema.json +33 -0
  107. package/dist/resources/schemas/composer-block.schema.json +208 -0
  108. package/dist/resources/schemas/composer-blueprint.schema.json +664 -0
  109. package/dist/resources/schemas/composer-command.schema.json +106 -0
  110. package/dist/resources/schemas/composer-contract.schema.json +174 -0
  111. package/dist/resources/schemas/composer-diagnostic.schema.json +26 -0
  112. package/dist/resources/schemas/composer-entity.schema.json +141 -0
  113. package/dist/resources/schemas/composer-evidence.schema.json +95 -0
  114. package/dist/resources/schemas/composer-field.schema.json +53 -0
  115. package/dist/resources/schemas/composer-instance.schema.json +117 -0
  116. package/dist/resources/schemas/composer-lock.schema.json +54 -0
  117. package/dist/resources/schemas/composer-operation.schema.json +55 -0
  118. package/dist/resources/schemas/composer-owner.schema.json +105 -0
  119. package/dist/resources/schemas/composer-parameters.schema.json +61 -0
  120. package/dist/resources/schemas/composer-plan.schema.json +1010 -0
  121. package/dist/resources/schemas/composer-renderer.schema.json +69 -0
  122. package/dist/resources/schemas/composer-state.schema.json +146 -0
  123. package/dist/resources/schemas/deploy-plan.schema.json +760 -169
  124. package/dist/resources/schemas/operations.schema.json +486 -0
  125. package/dist/resources/schemas/project.schema.json +13 -0
  126. package/dist/resources/schemas/sync-state.schema.json +238 -0
  127. package/dist/resources/third-party/node_modules__yaml__LICENSE +13 -0
  128. package/dist/runtime/apexrest.mjs +21 -11
  129. package/dist/runtime/chunk-2BBNJVKW.mjs +1996 -0
  130. package/dist/runtime/{chunk-HOKFFGSZ.mjs → chunk-33GE2NWZ.mjs} +1 -1
  131. package/dist/runtime/chunk-5JI3XEAK.mjs +14 -0
  132. package/dist/runtime/{chunk-2ZUNLCLK.mjs → chunk-BAHECVGO.mjs} +30 -10
  133. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-SPZVXAM5.mjs → runtime/chunk-CYPFCUNE.mjs} +7 -4
  134. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-3MDDJFXN.mjs → runtime/chunk-EBBEN4AV.mjs} +29 -6
  135. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-NDZ2RWQU.mjs → runtime/chunk-ESDVN7DS.mjs} +3 -2
  136. package/dist/runtime/{chunk-AQZLLQ3D.mjs → chunk-FTTPESNK.mjs} +2 -2
  137. package/dist/runtime/{chunk-S24BD6PY.mjs → chunk-G3KR57BY.mjs} +1 -1
  138. package/dist/runtime/{chunk-TXVQLYTH.mjs → chunk-HKJVCGQQ.mjs} +118 -87
  139. package/dist/runtime/{chunk-WK5GP4ES.mjs → chunk-KQ5IDT7Z.mjs} +2 -2
  140. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-7RZW5QV2.mjs → runtime/chunk-RWGJITHZ.mjs} +5 -5
  141. package/dist/runtime/{chunk-IX6V6ZGW.mjs → chunk-WXP75UUP.mjs} +5 -5
  142. package/dist/runtime/chunk-YPLIIQ4Y.mjs +10233 -0
  143. package/dist/runtime/{chunk-QIVPMPU3.mjs → chunk-YQHHPRJH.mjs} +1 -1
  144. package/dist/runtime/mcp.mjs +7 -7
  145. package/package.json +10 -3
  146. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  147. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-BD2AVCFU.mjs +0 -367
  148. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YLXJ6H4J.mjs +0 -14
  149. package/dist/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  150. package/dist/runtime/chunk-BD2AVCFU.mjs +0 -367
  151. package/dist/runtime/chunk-YLXJ6H4J.mjs +0 -14
@@ -2,7 +2,7 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  import {
3
3
  managedHome,
4
4
  runtimeState
5
- } from "./chunk-3MDDJFXN.mjs";
5
+ } from "./chunk-EBBEN4AV.mjs";
6
6
  import {
7
7
  Fault,
8
8
  exists,
@@ -0,0 +1,14 @@
1
+ import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
+ import {
3
+ startMcp
4
+ } from "./chunk-BAHECVGO.mjs";
5
+ import "./chunk-HKJVCGQQ.mjs";
6
+ import "./chunk-FTTPESNK.mjs";
7
+ import "./chunk-2BBNJVKW.mjs";
8
+ import "./chunk-YPLIIQ4Y.mjs";
9
+ import "./chunk-G3KR57BY.mjs";
10
+ import "./chunk-EBBEN4AV.mjs";
11
+ import "./chunk-2Z3BZF66.mjs";
12
+ export {
13
+ startMcp
14
+ };
@@ -3,19 +3,19 @@ import {
3
3
  dispatch,
4
4
  schemas,
5
5
  toolCatalog
6
- } from "./chunk-TXVQLYTH.mjs";
6
+ } from "./chunk-HKJVCGQQ.mjs";
7
7
  import {
8
8
  panelDocument
9
- } from "./chunk-AQZLLQ3D.mjs";
9
+ } from "./chunk-FTTPESNK.mjs";
10
10
  import {
11
11
  JobService
12
- } from "./chunk-BD2AVCFU.mjs";
12
+ } from "./chunk-2BBNJVKW.mjs";
13
13
  import {
14
14
  ArtifactService
15
- } from "./chunk-4MYHJ2IU.mjs";
15
+ } from "./chunk-YPLIIQ4Y.mjs";
16
16
  import {
17
17
  VERSION
18
- } from "./chunk-S24BD6PY.mjs";
18
+ } from "./chunk-G3KR57BY.mjs";
19
19
  import {
20
20
  AjvJsonSchemaValidator,
21
21
  CallToolRequestSchema,
@@ -49,7 +49,7 @@ import {
49
49
  parse,
50
50
  safeParse,
51
51
  serializeMessage
52
- } from "./chunk-3MDDJFXN.mjs";
52
+ } from "./chunk-EBBEN4AV.mjs";
53
53
  import {
54
54
  Fault,
55
55
  failure,
@@ -747,13 +747,24 @@ function preview(value, depth = 0) {
747
747
  "scope",
748
748
  "compiler",
749
749
  "approval",
750
- "backupRequired"
750
+ "backupRequired",
751
+ "mode",
752
+ "backupStrategy",
753
+ "syncId",
754
+ "revision",
755
+ "exportedAt",
756
+ "dirty",
757
+ "blocked",
758
+ "blockedReason",
759
+ "serverFreshness",
760
+ "backupId",
761
+ "importingRunId"
751
762
  ]) {
752
763
  const entry = data[key];
753
764
  if (["string", "number", "boolean"].includes(typeof entry))
754
765
  result[key] = typeof entry === "string" ? entry.slice(0, 400) : entry;
755
766
  }
756
- for (const key of ["jobs", "deployments", "diagnostics", "artifacts", "verification"])
767
+ for (const key of ["sync", "jobs", "deployments", "diagnostics", "artifacts", "verification"])
757
768
  if (Array.isArray(data[key])) result[key + "Count"] = data[key].length;
758
769
  if (Array.isArray(data.diagnostics))
759
770
  result.diagnostics = data.diagnostics.slice(0, 2).map(
@@ -766,6 +777,9 @@ function preview(value, depth = 0) {
766
777
  result[key] = data[key].slice(0, 4).map((entry) => String(entry).slice(0, 200));
767
778
  result[key + "Omitted"] = Math.max(0, data[key].length - 4);
768
779
  }
780
+ if (data.lastSuccessfulImport && typeof data.lastSuccessfulImport === "object")
781
+ result.lastSuccessfulImport = data.lastSuccessfulImport;
782
+ if (data.workingCopy && typeof data.workingCopy === "object") result.workingCopy = data.workingCopy;
769
783
  if (depth < 2 && data.result && typeof data.result === "object")
770
784
  result.result = preview(data.result, depth + 1);
771
785
  if (data.operation === "deploy.plan" && data.data && depth < 2) result.data = preview(data.data, depth + 1);
@@ -953,7 +967,9 @@ var absoluteProject = external_exports.string().min(1).max(4096).refine(
953
967
  var mcpSchemas = /* @__PURE__ */ new Map();
954
968
  for (const { operation, long } of toolCatalog) {
955
969
  const schema = schemas[operation];
956
- const transportSchema = "project" in schema.shape ? schema.extend({ project: operation === "doctor" ? absoluteProject.optional() : absoluteProject }) : schema;
970
+ const transportSchema = "project" in schema.shape ? schema.extend({
971
+ project: operation === "doctor" || operation.startsWith("docs.") ? absoluteProject.optional() : absoluteProject
972
+ }) : schema;
957
973
  mcpSchemas.set(operation, long ? transportSchema.extend({ waitSeconds: jobWaitSeconds }) : transportSchema);
958
974
  }
959
975
  async function startMcp() {
@@ -998,6 +1014,8 @@ async function startMcp() {
998
1014
  destructiveHint: t.destructive ?? !t.readOnly,
999
1015
  idempotentHint: t.readOnly,
1000
1016
  openWorldHint: ![
1017
+ "compose.plan",
1018
+ "compose.materialize",
1001
1019
  "doctor",
1002
1020
  "docs.search",
1003
1021
  "docs.read",
@@ -1018,7 +1036,9 @@ async function startMcp() {
1018
1036
  if (!tool) throw new Fault("UNKNOWN_TOOL", "Tool is not in the catalog.", 2);
1019
1037
  const input = parse(mcpSchemas.get(tool.operation), request.params.arguments ?? {});
1020
1038
  project = typeof input.project === "string" ? input.project : void 0;
1021
- result = tool.long ? jobToolResult(
1039
+ const localSync = tool.operation === "apex.sync" && input.action === "status";
1040
+ if (localSync) delete input.waitSeconds;
1041
+ result = tool.long && !localSync ? jobToolResult(
1022
1042
  tool.operation,
1023
1043
  await runJobTool(
1024
1044
  new JobService(await loadProject(String(input.project))),
@@ -6,10 +6,10 @@ import {
6
6
  } from "./chunk-TLYYCRQA.mjs";
7
7
  import {
8
8
  PanelService
9
- } from "./chunk-BD2AVCFU.mjs";
10
- import "./chunk-4MYHJ2IU.mjs";
11
- import "./chunk-S24BD6PY.mjs";
12
- import "./chunk-3MDDJFXN.mjs";
9
+ } from "./chunk-2BBNJVKW.mjs";
10
+ import "./chunk-YPLIIQ4Y.mjs";
11
+ import "./chunk-G3KR57BY.mjs";
12
+ import "./chunk-EBBEN4AV.mjs";
13
13
  import {
14
14
  Fault
15
15
  } from "./chunk-2Z3BZF66.mjs";
@@ -40,6 +40,9 @@ function panelLines(data, tab) {
40
40
  ...data.jobs.flatMap((job) => [`${job.operation} \xB7 ${job.status}`, job.summary]),
41
41
  ...data.jobs.length ? [] : ["No operation jobs recorded."],
42
42
  "",
43
+ "WORKING-COPY SYNC (local only)",
44
+ ...data.sync.flatMap((row) => [row.environment + " \xB7 " + row.status, JSON.stringify(row)]),
45
+ "",
43
46
  "DEPLOYMENT & IMPORT JOURNAL",
44
47
  ...data.deployments.flatMap((run) => [run.status + " \xB7 " + run.at, run.details]),
45
48
  "",
@@ -28745,6 +28745,7 @@ var projectSchema = external_exports.strictObject({
28745
28745
  defaultBrowser: external_exports.literal("chromium"),
28746
28746
  mutationAllowedEnvironments: external_exports.array(refName)
28747
28747
  }),
28748
+ composer: external_exports.strictObject({ allowSourceOnly: external_exports.boolean().default(false) }).optional(),
28748
28749
  artifacts: external_exports.strictObject({ directory: relativePath, retentionDays: external_exports.number().int().min(1).max(365) })
28749
28750
  });
28750
28751
  var managedHome = () => path.resolve(process.env.APEXREST_HOME ?? path.join(homedir(), ".apexrest"));
@@ -33195,7 +33196,7 @@ connect -orest -user "${selected.ords.username}" -password "${selected.ords.pass
33195
33196
  };
33196
33197
  }
33197
33198
  async exportApplication(env, connection, format = "APEXLANG") {
33198
- await this.requireCapability("export");
33199
+ const compiler = await this.requireCapability("export");
33199
33200
  const stage = await this.stage();
33200
33201
  const ords = (await this.settings()).databaseTransport === "ords";
33201
33202
  const exportRoot = ords ? path5.join(stage, "export") : stage;
@@ -33225,7 +33226,7 @@ connect -orest -user "${selected.ords.username}" -password "${selected.ords.pass
33225
33226
  const files = await inventory(directory);
33226
33227
  if (!Object.keys(files).length || format === "SQL" && !Object.keys(files).some((f2) => f2.endsWith(".sql")))
33227
33228
  throw new Fault("EMPTY_BACKUP", "Oracle export produced no usable files.", 1);
33228
- return { directory, files, digest: hash(canonical(files)), format, output: result.output };
33229
+ return { directory, files, digest: hash(canonical(files)), format, compiler, output: result.output };
33229
33230
  }
33230
33231
  async savedConnections(signal) {
33231
33232
  const marker = `APEXREST_CONNECTIONS_${randomUUID().replaceAll("-", "")}`;
@@ -33356,6 +33357,28 @@ ${sql};`,
33356
33357
  );
33357
33358
  return { identity, workspace: workspaces[0], application: applications[0] ?? null };
33358
33359
  }
33360
+ async applicationMetadata(env, connection) {
33361
+ const rows = await this.jsonQuery(
33362
+ `select to_char(last_updated_on, 'YYYY-MM-DD"T"HH24:MI:SS', 'NLS_DATE_LANGUAGE=American') last_updated_on,
33363
+ last_updated_by from apex_applications
33364
+ where application_id = :p_app_id and workspace = :p_workspace and owner = :p_owner`,
33365
+ connection,
33366
+ { p_app_id: env.applicationId, p_workspace: env.workspace, p_owner: env.parsingSchema }
33367
+ );
33368
+ if (rows.length !== 1 || !Object.hasOwn(rows[0], "last_updated_on") || !Object.hasOwn(rows[0], "last_updated_by"))
33369
+ throw new Fault(
33370
+ "SYNC_METADATA_UNCONFIRMED",
33371
+ "Application update metadata is absent or inaccessible.",
33372
+ 5
33373
+ );
33374
+ const row = rows[0];
33375
+ if ([row.last_updated_on, row.last_updated_by].some((v2) => v2 !== null && typeof v2 !== "string"))
33376
+ throw new Fault("SYNC_METADATA_UNCONFIRMED", "Unexpected application update metadata.", 5);
33377
+ return {
33378
+ lastUpdatedOn: row.last_updated_on,
33379
+ lastUpdatedBy: row.last_updated_by
33380
+ };
33381
+ }
33359
33382
  async nativeDeployment(ctx, env, source) {
33360
33383
  const output2 = path5.join(await this.stage(), "deployment.json");
33361
33384
  const defaults = path5.join(source, "deployments/default.json");
@@ -37025,7 +37048,6 @@ var ToolchainService = class {
37025
37048
  };
37026
37049
 
37027
37050
  export {
37028
- runProcess,
37029
37051
  external_exports,
37030
37052
  identifier,
37031
37053
  refName,
@@ -37043,6 +37065,7 @@ export {
37043
37065
  resolveConnection,
37044
37066
  editConnection,
37045
37067
  configureConnection,
37068
+ runProcess,
37046
37069
  sqlclMode,
37047
37070
  sqlclRestriction,
37048
37071
  databaseTransport,
@@ -37096,13 +37119,13 @@ export {
37096
37119
  ReadBuffer,
37097
37120
  serializeMessage,
37098
37121
  StdioClientTransport,
37122
+ resourceRoot,
37123
+ projectInit,
37124
+ projectInspect,
37099
37125
  sqlclToken,
37100
37126
  sqlLiteral,
37101
37127
  OracleAdapter,
37102
37128
  installSources,
37103
- resourceRoot,
37104
- projectInit,
37105
- projectInspect,
37106
37129
  lockSchema,
37107
37130
  runtimeState,
37108
37131
  platformProfile,
@@ -3,8 +3,9 @@ import {
3
3
  browserInstructions,
4
4
  externalBrowserCommand,
5
5
  openVerificationBrowser
6
- } from "./chunk-4MYHJ2IU.mjs";
7
- import "./chunk-3MDDJFXN.mjs";
6
+ } from "./chunk-YPLIIQ4Y.mjs";
7
+ import "./chunk-G3KR57BY.mjs";
8
+ import "./chunk-EBBEN4AV.mjs";
8
9
  import "./chunk-2Z3BZF66.mjs";
9
10
  export {
10
11
  browserInstructions,
@@ -2,11 +2,11 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  import {
3
3
  PanelService,
4
4
  panelActionSchema
5
- } from "./chunk-BD2AVCFU.mjs";
5
+ } from "./chunk-2BBNJVKW.mjs";
6
6
  import {
7
7
  parse,
8
8
  resourceRoot
9
- } from "./chunk-3MDDJFXN.mjs";
9
+ } from "./chunk-EBBEN4AV.mjs";
10
10
  import {
11
11
  Fault,
12
12
  contained,
@@ -3,7 +3,7 @@ import { createRequire as __createRequire } from 'node:module'; const require =
3
3
  // plugins/metadata.json
4
4
  var metadata_default = {
5
5
  name: "apexrest-apex",
6
- version: "1.2.0",
6
+ version: "1.3.0-beta.1",
7
7
  description: "Develop, deploy and test Oracle APEX applications with Codex.",
8
8
  author: {
9
9
  name: "APEXREST",
@@ -2,18 +2,28 @@ import { createRequire as __createRequire } from 'node:module'; const require =
2
2
  import {
3
3
  JobService,
4
4
  PanelService,
5
+ composeMaterialize,
6
+ composeMaterializeInput,
7
+ composePlan,
8
+ composePlanInput,
9
+ metadataInputSchema,
10
+ metadataRead,
5
11
  panelActionSchema,
6
12
  panelReadSchema,
7
13
  publicPanelActionSchema
8
- } from "./chunk-BD2AVCFU.mjs";
14
+ } from "./chunk-2BBNJVKW.mjs";
9
15
  import {
10
16
  ArtifactService,
11
17
  DeploymentService,
12
- TestService
13
- } from "./chunk-4MYHJ2IU.mjs";
18
+ SyncStore,
19
+ TestService,
20
+ catalogRead,
21
+ catalogSearch,
22
+ checkpoint
23
+ } from "./chunk-YPLIIQ4Y.mjs";
14
24
  import {
15
25
  VERSION
16
- } from "./chunk-S24BD6PY.mjs";
26
+ } from "./chunk-G3KR57BY.mjs";
17
27
  import {
18
28
  OracleAdapter,
19
29
  configureConnection,
@@ -23,7 +33,6 @@ import {
23
33
  editConnection,
24
34
  environment,
25
35
  external_exports,
26
- identifier,
27
36
  installSources,
28
37
  loadProject,
29
38
  managedHome,
@@ -43,7 +52,7 @@ import {
43
52
  sqlclConfig,
44
53
  sqlclMode,
45
54
  sqlclRestriction
46
- } from "./chunk-3MDDJFXN.mjs";
55
+ } from "./chunk-EBBEN4AV.mjs";
47
56
  import {
48
57
  Fault,
49
58
  artifactPage,
@@ -59,72 +68,6 @@ import {
59
68
  writeJson
60
69
  } from "./chunk-2Z3BZF66.mjs";
61
70
 
62
- // packages/core/src/metadata.ts
63
- var metadataOffset = external_exports.number().int().min(0).max(1e5);
64
- var metadataLimit = external_exports.number().int().min(1).max(100);
65
- var metadataRequest = external_exports.strictObject({
66
- kind: external_exports.enum(["objects", "columns", "constraints", "signatures", "applications", "pages"]),
67
- schema: identifier,
68
- name: identifier.optional(),
69
- offset: metadataOffset.default(0),
70
- limit: metadataLimit.default(30)
71
- });
72
- var metadataRequests = external_exports.array(metadataRequest).min(1).max(8);
73
- var metadataBatchRequest = external_exports.strictObject({ requests: metadataRequests });
74
- var metadataInputSchema = external_exports.strictObject({
75
- kind: metadataRequest.shape.kind.optional(),
76
- schema: metadataRequest.shape.schema.optional(),
77
- name: metadataRequest.shape.name,
78
- offset: metadataOffset.optional(),
79
- limit: metadataLimit.optional(),
80
- requests: metadataRequests.optional()
81
- });
82
- var queries = {
83
- objects: "select object_name, object_type from all_objects where owner=:p_owner and object_type in ('TABLE','VIEW','PACKAGE') and (:p_name is null or object_name=:p_name) order by object_name, object_type",
84
- columns: "select table_name,column_name,data_type,nullable,column_id from all_tab_columns where owner=:p_owner and table_name=:p_name order by column_id",
85
- constraints: "select table_name,constraint_name,constraint_type,r_owner,r_constraint_name,status from all_constraints where owner=:p_owner and table_name=:p_name order by constraint_name",
86
- signatures: "select package_name,object_name,argument_name,position,in_out,data_type,overload from all_arguments where owner=:p_owner and package_name=:p_name order by object_name,overload,sequence",
87
- applications: "select application_id,application_name,alias from apex_applications where owner=:p_owner and application_id=:p_app_id order by application_id",
88
- pages: "select application_id,page_id,page_name,page_alias from apex_application_pages where application_id=:p_app_id and workspace=:p_workspace order by page_id"
89
- };
90
- async function metadataRead(adapter, env2, connection, value) {
91
- const input = parse(external_exports.union([metadataRequest, metadataBatchRequest]), value);
92
- const batch = "requests" in input;
93
- const requests = batch ? input.requests : [input];
94
- for (const r of requests) {
95
- if (r.schema !== env2.parsingSchema)
96
- throw new Fault("SCHEMA_DENIED", "Metadata is restricted to the configured parsing schema.", 4);
97
- if (["columns", "constraints", "signatures"].includes(r.kind) && !r.name)
98
- throw new Fault("OBJECT_REQUIRED", "Select a specific object first.", 2);
99
- }
100
- await adapter.verifyTarget(env2, connection);
101
- const read = async (r) => {
102
- const rows = await adapter.jsonQuery(
103
- queries[r.kind] + " offset :p_offset rows fetch next :p_limit rows only",
104
- connection,
105
- {
106
- p_owner: r.schema,
107
- p_name: r.name ?? "",
108
- p_app_id: env2.applicationId,
109
- p_workspace: env2.workspace,
110
- p_offset: r.offset,
111
- p_limit: r.limit
112
- }
113
- );
114
- return {
115
- dataClassification: "untrusted_database_content",
116
- rows,
117
- offset: r.offset,
118
- nextOffset: rows.length === r.limit ? r.offset + r.limit : null
119
- };
120
- };
121
- if (!batch) return read(input);
122
- const results = [];
123
- for (const [index, r] of requests.entries())
124
- results.push({ index, kind: r.kind, ...r.name ? { name: r.name } : {}, ...await read(r) });
125
- return { results, targetVerifiedOnce: true };
126
- }
127
-
128
71
  // packages/core/src/operations.ts
129
72
  var project = external_exports.string().min(1).max(4096).optional();
130
73
  var env = refName;
@@ -182,7 +125,12 @@ var schemas = {
182
125
  template: external_exports.enum(["blank-app", "customer-crm", "existing-app"]).default("blank-app"),
183
126
  alias: refName.optional()
184
127
  }),
185
- "project.adopt": external_exports.strictObject({ ...base, env, appId: external_exports.number().int().positive() }),
128
+ "project.adopt": external_exports.strictObject({
129
+ ...base,
130
+ env,
131
+ appId: external_exports.number().int().positive(),
132
+ workingCopy: external_exports.boolean().default(false)
133
+ }),
186
134
  "project.inspect": external_exports.strictObject({ ...base, detail: external_exports.enum(["full", "summary"]).default("full") }),
187
135
  "connection.add": external_exports.strictObject({
188
136
  ...base,
@@ -202,16 +150,24 @@ var schemas = {
202
150
  saved: external_exports.boolean().default(false)
203
151
  }),
204
152
  "connection.remove": external_exports.strictObject({ ...base, name: refName }),
153
+ "compose.plan": composePlanInput,
154
+ "compose.materialize": composeMaterializeInput,
205
155
  "docs.search": external_exports.strictObject({
156
+ ...base,
206
157
  query: external_exports.string().min(1).max(256),
207
- corpus: external_exports.enum(["apexlang", "components", "patterns"]).default("apexlang"),
158
+ corpus: external_exports.enum(["apexlang", "components", "patterns", "blocks", "blueprints"]).default("apexlang"),
208
159
  version: external_exports.string().optional(),
209
160
  kind: external_exports.enum(["grammar", "template", "contract", "guide"]).optional(),
210
161
  family: external_exports.string().min(1).max(200).optional(),
162
+ profile: external_exports.string().max(200).optional(),
163
+ status: external_exports.enum(["draft", "experimental", "verified", "deprecated", "revoked"]).optional(),
164
+ locale: external_exports.enum(["en", "uk"]).optional(),
165
+ cursor: external_exports.string().regex(/^[a-f0-9]{64}$/).optional(),
211
166
  offset: external_exports.number().int().min(0).max(1e4).default(0),
212
167
  limit: external_exports.number().int().min(1).max(8).default(3)
213
168
  }),
214
169
  "docs.read": external_exports.strictObject({
170
+ ...base,
215
171
  id: external_exports.string().max(200),
216
172
  offset: external_exports.number().int().min(0).default(0),
217
173
  limit: external_exports.number().int().min(1).max(8192).default(4096)
@@ -224,9 +180,10 @@ var schemas = {
224
180
  output: relativePath,
225
181
  alias: refName.optional()
226
182
  }),
183
+ "apex.sync": external_exports.strictObject({ ...base, env, action: external_exports.enum(["init", "status", "refresh", "invalidate"]) }),
227
184
  "apex.export": external_exports.strictObject({ ...base, env, output: relativePath }),
228
185
  "apex.validate": external_exports.strictObject({ ...base, env: env.optional() }),
229
- "apex.diff": external_exports.strictObject({ ...base, env }),
186
+ "apex.diff": external_exports.strictObject({ ...base, env, comparison: external_exports.enum(["auto", "live"]).default("auto") }),
230
187
  "db.plan": external_exports.strictObject({ ...base, env }),
231
188
  "deploy.plan": external_exports.strictObject({ ...base, env, out: relativePath }),
232
189
  "deploy.apply": external_exports.strictObject({ ...base, plan: relativePath }),
@@ -258,6 +215,22 @@ var schemas = {
258
215
  "sandbox.down": external_exports.strictObject(base)
259
216
  };
260
217
  var toolCatalog = [
218
+ {
219
+ name: "apexrest_compose_plan",
220
+ operation: "compose.plan",
221
+ description: "Create an immutable Composer plan. Offline by default; connected requires an explicit environment. No import or database writes. Full plans are artifacts.",
222
+ readOnly: false,
223
+ destructive: false,
224
+ long: true
225
+ },
226
+ {
227
+ name: "apexrest_compose_materialize",
228
+ operation: "compose.materialize",
229
+ description: "Apply a reviewed Composer plan using its expected digest. Journaled local source writes only; never deploys. Recovery is explicit.",
230
+ readOnly: false,
231
+ destructive: false,
232
+ long: true
233
+ },
261
234
  {
262
235
  name: "apexrest_browser_open",
263
236
  operation: "browser.open",
@@ -321,6 +294,14 @@ var toolCatalog = [
321
294
  readOnly: false,
322
295
  long: true
323
296
  },
297
+ {
298
+ name: "apexrest_apex_sync",
299
+ operation: "apex.sync",
300
+ description: "Manage a single-editor working copy for an existing dev/test app: init, local status, explicit refresh or invalidate. Initial APEXlang and SQL exports only; blocked outcomes require reconciliation.",
301
+ readOnly: false,
302
+ destructive: false,
303
+ long: true
304
+ },
324
305
  {
325
306
  name: "apexrest_apex_export",
326
307
  operation: "apex.export",
@@ -828,6 +809,24 @@ function snippet(text, query, terms) {
828
809
  };
829
810
  }
830
811
  async function referenceSearch(query, version, options = {}) {
812
+ if (options.corpus === "blocks" || options.corpus === "blueprints") {
813
+ const found = await catalogSearch(query, { ...options, ...version ? { version } : {} });
814
+ return found.results.map((hit) => ({
815
+ ...hit,
816
+ source: "bundled-composer-catalog",
817
+ version: "version" in hit ? hit.version : "1",
818
+ kind: "template",
819
+ family: "composer",
820
+ text: hit.title,
821
+ offset: 0,
822
+ matchOffset: 0,
823
+ length: hit.title.length,
824
+ nextOffset: null,
825
+ requires: [],
826
+ totalMatches: found.totalMatches,
827
+ nextResultOffset: found.nextResultOffset
828
+ }));
829
+ }
831
830
  if (options.corpus === "components") return componentSearch(query, version, options);
832
831
  if (options.corpus === "patterns") return patternSearch(query, version, options);
833
832
  const terms = termsFor(query);
@@ -883,7 +882,8 @@ async function referenceSearch(query, version, options = {}) {
883
882
  };
884
883
  });
885
884
  }
886
- async function referenceRead(id, offset, limit) {
885
+ async function referenceRead(id, offset, limit, project2) {
886
+ if (id.startsWith("block:") || id.startsWith("blueprint:")) return catalogRead(id, offset, limit, project2);
887
887
  if (id.startsWith("component:")) return componentRead(id, offset, limit);
888
888
  if (id.startsWith("pattern:")) return patternRead(id, offset, limit);
889
889
  const index = await referenceIndex();
@@ -987,7 +987,7 @@ async function dispatch(operation, input = {}, signal) {
987
987
  let data;
988
988
  switch (operation) {
989
989
  case "panel.open": {
990
- const { openPanel } = await import("./chunk-IX6V6ZGW.mjs");
990
+ const { openPanel } = await import("./chunk-WXP75UUP.mjs");
991
991
  data = await openPanel(await realpath2(root));
992
992
  break;
993
993
  }
@@ -1024,29 +1024,29 @@ async function dispatch(operation, input = {}, signal) {
1024
1024
  );
1025
1025
  break;
1026
1026
  case "dependencies.install": {
1027
- const { ToolchainService } = await import("./chunk-QIVPMPU3.mjs");
1027
+ const { ToolchainService } = await import("./chunk-YQHHPRJH.mjs");
1028
1028
  data = await new ToolchainService().apply(parsed);
1029
1029
  break;
1030
1030
  }
1031
1031
  case "dependencies.uninstall": {
1032
- const { uninstallTools } = await import("./chunk-HOKFFGSZ.mjs");
1032
+ const { uninstallTools } = await import("./chunk-33GE2NWZ.mjs");
1033
1033
  data = await uninstallTools(parsed);
1034
1034
  break;
1035
1035
  }
1036
1036
  case "setup":
1037
1037
  case "plugin.install":
1038
1038
  case "plugin.update": {
1039
- const { setup: setup2 } = await import("./chunk-WK5GP4ES.mjs");
1039
+ const { setup: setup2 } = await import("./chunk-KQ5IDT7Z.mjs");
1040
1040
  data = await setup2(parsed);
1041
1041
  break;
1042
1042
  }
1043
1043
  case "plugin.validate": {
1044
- const { validateNative } = await import("./chunk-WK5GP4ES.mjs");
1044
+ const { validateNative } = await import("./chunk-KQ5IDT7Z.mjs");
1045
1045
  data = await validateNative(text("from"));
1046
1046
  break;
1047
1047
  }
1048
1048
  case "plugin.uninstall": {
1049
- const { uninstallNative } = await import("./chunk-WK5GP4ES.mjs");
1049
+ const { uninstallNative } = await import("./chunk-KQ5IDT7Z.mjs");
1050
1050
  data = await uninstallNative(text("home") ?? managedHome(), Boolean(parsed.keepRuntime));
1051
1051
  break;
1052
1052
  }
@@ -1089,7 +1089,7 @@ async function dispatch(operation, input = {}, signal) {
1089
1089
  data = await referenceSearch(text("query"), text("version"), schemas["docs.search"].parse(parsed));
1090
1090
  break;
1091
1091
  case "docs.read":
1092
- data = await referenceRead(text("id"), Number(parsed.offset), Number(parsed.limit));
1092
+ data = await referenceRead(text("id"), Number(parsed.offset), Number(parsed.limit), text("project"));
1093
1093
  break;
1094
1094
  case "docs.sync":
1095
1095
  data = await referenceSync(text("version"), Boolean(parsed.dryRun));
@@ -1102,6 +1102,12 @@ async function dispatch(operation, input = {}, signal) {
1102
1102
  default: {
1103
1103
  const ctx = await loadProject(root);
1104
1104
  switch (operation) {
1105
+ case "compose.plan":
1106
+ data = await composePlan(ctx, schemas["compose.plan"].parse(parsed), oracle, signal);
1107
+ break;
1108
+ case "compose.materialize":
1109
+ data = await composeMaterialize(ctx, schemas["compose.materialize"].parse(parsed), signal);
1110
+ break;
1105
1111
  case "project.inspect":
1106
1112
  data = await projectInspect(ctx, parsed.detail);
1107
1113
  break;
@@ -1123,6 +1129,14 @@ async function dispatch(operation, input = {}, signal) {
1123
1129
  };
1124
1130
  break;
1125
1131
  }
1132
+ case "apex.sync":
1133
+ data = await deployment.sync(
1134
+ ctx,
1135
+ text("env"),
1136
+ parsed.action,
1137
+ signal
1138
+ );
1139
+ break;
1126
1140
  case "project.adopt":
1127
1141
  case "apex.export": {
1128
1142
  await requireTrust(ctx.root);
@@ -1133,6 +1147,10 @@ async function dispatch(operation, input = {}, signal) {
1133
1147
  "Requested app ID differs from the environment mapping.",
1134
1148
  5
1135
1149
  );
1150
+ if (operation === "project.adopt" && parsed.workingCopy) {
1151
+ data = await deployment.sync(ctx, text("env"), "init", signal);
1152
+ break;
1153
+ }
1136
1154
  const connection = await resolveConnection(env2.readConnectionRef);
1137
1155
  await oracle.verifyTarget(env2, connection);
1138
1156
  const exported = await oracle.exportApplication(env2, connection);
@@ -1149,12 +1167,25 @@ async function dispatch(operation, input = {}, signal) {
1149
1167
  break;
1150
1168
  case "apex.diff": {
1151
1169
  await requireTrust(ctx.root);
1152
- const env2 = environment(ctx, text("env")), connection = await resolveConnection(env2.readConnectionRef);
1153
- await oracle.verifyTarget(env2, connection);
1154
- const exported = await oracle.exportApplication(env2, connection), local = (await projectInspect(ctx)).sources.apex;
1170
+ const env2 = environment(ctx, text("env"));
1171
+ const store = new SyncStore(ctx, env2, text("env"));
1172
+ const state = parsed.comparison === "live" ? null : await store.read();
1173
+ let exported, provenance;
1174
+ if (state && state.status !== "invalidated" && parsed.comparison !== "live") {
1175
+ await store.validate(state);
1176
+ exported = checkpoint(state);
1177
+ provenance = state.lastSuccessfulImport ? "last-successful-import" : "initial-baseline";
1178
+ } else {
1179
+ const connection = await resolveConnection(env2.readConnectionRef);
1180
+ await oracle.verifyTarget(env2, connection);
1181
+ exported = await oracle.exportApplication(env2, connection);
1182
+ provenance = "live-export";
1183
+ }
1184
+ const local = (await projectInspect(ctx)).sources.apex;
1155
1185
  data = {
1156
1186
  scope: "full-application-import",
1157
1187
  completeness: "textual-file-hashes-only",
1188
+ provenance,
1158
1189
  changes: [.../* @__PURE__ */ new Set([...Object.keys(exported.files), ...Object.keys(local ?? {})])].filter((f) => exported.files[f] !== local?.[f]).map((file) => ({
1159
1190
  file,
1160
1191
  before: exported.files[file] ?? null,
@@ -1231,7 +1262,7 @@ async function dispatch(operation, input = {}, signal) {
1231
1262
  data = await tests.auth(ctx, text("env"));
1232
1263
  break;
1233
1264
  case "browser.open": {
1234
- const { openVerificationBrowser } = await import("./chunk-NDZ2RWQU.mjs");
1265
+ const { openVerificationBrowser } = await import("./chunk-ESDVN7DS.mjs");
1235
1266
  data = await openVerificationBrowser(
1236
1267
  ctx,
1237
1268
  text("env"),
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
2
2
  import {
3
3
  VERSION
4
- } from "./chunk-S24BD6PY.mjs";
4
+ } from "./chunk-G3KR57BY.mjs";
5
5
  import {
6
6
  Client,
7
7
  StdioClientTransport,
@@ -27,7 +27,7 @@ import {
27
27
  resourceRoot,
28
28
  runProcess,
29
29
  runtimeState
30
- } from "./chunk-3MDDJFXN.mjs";
30
+ } from "./chunk-EBBEN4AV.mjs";
31
31
  import {
32
32
  Fault,
33
33
  __commonJS,