apexrest 1.3.0-beta.1 → 1.3.0

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 (182) hide show
  1. package/README.md +90 -140
  2. package/dist/codex-compat/.claude-plugin/marketplace.json +20 -0
  3. package/dist/codex-compat/plugins/apexrest-apex/.claude-plugin/plugin.json +28 -0
  4. package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +7 -7
  5. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/generator.json +1 -1
  6. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/manifest.json +6 -6
  7. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +1 -1
  8. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +1 -1
  9. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/block.yaml +1 -1
  10. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +1 -1
  11. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/block.yaml +1 -1
  12. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +1 -1
  13. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-blueprint.schema.json +5 -4
  14. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-contract.schema.json +2 -2
  15. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-entity.schema.json +2 -1
  16. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-field.schema.json +2 -1
  17. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-instance.schema.json +1 -1
  18. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-operation.schema.json +1 -1
  19. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-plan.schema.json +5 -4
  20. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +18 -24
  21. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +352 -569
  22. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/policy.schema.json +21 -0
  23. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +4 -7
  24. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.md +0 -2
  25. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.md +1 -3
  26. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.md +0 -2
  27. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +70 -44
  28. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5PCC7GZM.mjs +4090 -0
  29. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-BVPAS3TD.mjs +18 -0
  30. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-CVMECW6D.mjs +65 -0
  31. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-EBBEN4AV.mjs → chunk-JYN3YHP3.mjs} +4220 -10639
  32. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-KGTE7Q5Y.mjs +23 -0
  33. package/dist/{runtime/chunk-33GE2NWZ.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-KKRFM7Q7.mjs} +21 -4
  34. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2VBZESVC.mjs → chunk-MNU54A7W.mjs} +7 -1
  35. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-N4C2SKCN.mjs +6912 -0
  36. package/dist/{runtime/chunk-KQ5IDT7Z.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-P3CVQAZW.mjs} +822 -102
  37. package/dist/{runtime/chunk-BAHECVGO.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-QKYF6N6U.mjs} +192 -114
  38. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-G3KR57BY.mjs → chunk-RBJJNQ5O.mjs} +7 -7
  39. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-YPLIIQ4Y.mjs → chunk-TMSMKVRP.mjs} +486 -352
  40. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2Z3BZF66.mjs → chunk-WPS3CSQJ.mjs} +124 -11
  41. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +5 -10
  42. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +22 -25
  43. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/agents/openai.yaml +3 -3
  44. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/component-routes.md +1 -5
  45. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/SKILL.md +4 -4
  46. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/agents/openai.yaml +1 -1
  47. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/references/capture-and-curation.md +2 -2
  48. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-safety/SKILL.md +18 -0
  49. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-safety/agents/openai.yaml +4 -0
  50. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/SKILL.md +20 -10
  51. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/agents/openai.yaml +3 -3
  52. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +11 -8
  53. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/agents/openai.yaml +3 -3
  54. package/dist/resources/blocks/generator.json +1 -1
  55. package/dist/resources/blocks/manifest.json +6 -6
  56. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +1 -1
  57. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +1 -1
  58. package/dist/resources/blocks/packages/read/detail/1.0.0/block.yaml +1 -1
  59. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +1 -1
  60. package/dist/resources/blocks/packages/read/history/1.0.0/block.yaml +1 -1
  61. package/dist/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +1 -1
  62. package/dist/resources/schemas/composer-blueprint.schema.json +5 -4
  63. package/dist/resources/schemas/composer-contract.schema.json +2 -2
  64. package/dist/resources/schemas/composer-entity.schema.json +2 -1
  65. package/dist/resources/schemas/composer-field.schema.json +2 -1
  66. package/dist/resources/schemas/composer-instance.schema.json +1 -1
  67. package/dist/resources/schemas/composer-operation.schema.json +1 -1
  68. package/dist/resources/schemas/composer-plan.schema.json +5 -4
  69. package/dist/resources/schemas/deploy-plan.schema.json +18 -24
  70. package/dist/resources/schemas/operations.schema.json +352 -569
  71. package/dist/resources/schemas/policy.schema.json +21 -0
  72. package/dist/resources/schemas/project.schema.json +4 -7
  73. package/dist/resources/templates/blank-app/README.md +0 -2
  74. package/dist/resources/templates/customer-crm/README.md +1 -3
  75. package/dist/resources/templates/existing-app/README.md +0 -2
  76. package/dist/runtime/apexrest.mjs +70 -44
  77. package/dist/runtime/chunk-5PCC7GZM.mjs +4090 -0
  78. package/dist/runtime/chunk-BVPAS3TD.mjs +18 -0
  79. package/dist/runtime/chunk-CVMECW6D.mjs +65 -0
  80. package/dist/runtime/{chunk-EBBEN4AV.mjs → chunk-JYN3YHP3.mjs} +4220 -10639
  81. package/dist/runtime/chunk-KGTE7Q5Y.mjs +23 -0
  82. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-33GE2NWZ.mjs → runtime/chunk-KKRFM7Q7.mjs} +21 -4
  83. package/dist/runtime/{chunk-2VBZESVC.mjs → chunk-MNU54A7W.mjs} +7 -1
  84. package/dist/runtime/chunk-N4C2SKCN.mjs +6912 -0
  85. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-KQ5IDT7Z.mjs → runtime/chunk-P3CVQAZW.mjs} +822 -102
  86. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-BAHECVGO.mjs → runtime/chunk-QKYF6N6U.mjs} +192 -114
  87. package/dist/runtime/{chunk-G3KR57BY.mjs → chunk-RBJJNQ5O.mjs} +7 -7
  88. package/dist/runtime/{chunk-YPLIIQ4Y.mjs → chunk-TMSMKVRP.mjs} +486 -352
  89. package/dist/runtime/{chunk-2Z3BZF66.mjs → chunk-WPS3CSQJ.mjs} +124 -11
  90. package/dist/runtime/mcp.mjs +5 -10
  91. package/package.json +6 -6
  92. package/README.uk.md +0 -212
  93. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +0 -68
  94. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.css +0 -627
  95. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +0 -861
  96. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.uk.md +0 -5
  97. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.uk.md +0 -7
  98. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/database-control/install.sql +0 -17
  99. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.uk.md +0 -9
  100. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__LICENSE +0 -202
  101. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__NOTICE +0 -5
  102. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__node__LICENSE +0 -21
  103. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__yauzl__LICENSE +0 -21
  104. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +0 -55
  105. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +0 -436
  106. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__esbuild__LICENSE.md +0 -21
  107. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fflate__LICENSE +0 -21
  108. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__marked__LICENSE +0 -44
  109. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__LICENSE +0 -202
  110. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__NOTICE +0 -5
  111. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__LICENSE +0 -202
  112. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__NOTICE +0 -5
  113. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__prettier__LICENSE +0 -7
  114. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__LICENSE +0 -55
  115. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__NOTICE.txt +0 -436
  116. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__undici-types__LICENSE +0 -21
  117. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2BBNJVKW.mjs +0 -1996
  118. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5JI3XEAK.mjs +0 -14
  119. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-CYPFCUNE.mjs +0 -150
  120. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ESDVN7DS.mjs +0 -14
  121. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-FTTPESNK.mjs +0 -203
  122. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-HKJVCGQQ.mjs +0 -1302
  123. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-RWGJITHZ.mjs +0 -992
  124. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-TLYYCRQA.mjs +0 -329
  125. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-WXP75UUP.mjs +0 -18
  126. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YQHHPRJH.mjs +0 -14
  127. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/SKILL.md +0 -18
  128. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/agents/openai.yaml +0 -4
  129. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-compose/references/workflow.md +0 -15
  130. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/SKILL.md +0 -9
  131. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/agents/openai.yaml +0 -4
  132. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/SKILL.md +0 -9
  133. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/agents/openai.yaml +0 -4
  134. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +0 -21
  135. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/agents/openai.yaml +0 -4
  136. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/SKILL.md +0 -38
  137. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/agents/openai.yaml +0 -4
  138. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +0 -30
  139. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/agents/openai.yaml +0 -4
  140. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +0 -30
  141. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/SKILL.md +0 -14
  142. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/agents/openai.yaml +0 -4
  143. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +0 -11
  144. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/agents/openai.yaml +0 -4
  145. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/SKILL.md +0 -11
  146. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/agents/openai.yaml +0 -4
  147. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/SKILL.md +0 -29
  148. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/agents/openai.yaml +0 -4
  149. package/dist/resources/panel/index.html +0 -68
  150. package/dist/resources/panel/panel.css +0 -627
  151. package/dist/resources/panel/panel.js +0 -861
  152. package/dist/resources/templates/blank-app/README.uk.md +0 -5
  153. package/dist/resources/templates/customer-crm/README.uk.md +0 -7
  154. package/dist/resources/templates/database-control/install.sql +0 -17
  155. package/dist/resources/templates/existing-app/README.uk.md +0 -9
  156. package/dist/resources/third-party/node_modules__@playwright__test__LICENSE +0 -202
  157. package/dist/resources/third-party/node_modules__@playwright__test__NOTICE +0 -5
  158. package/dist/resources/third-party/node_modules__@types__node__LICENSE +0 -21
  159. package/dist/resources/third-party/node_modules__@types__yauzl__LICENSE +0 -21
  160. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +0 -55
  161. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +0 -436
  162. package/dist/resources/third-party/node_modules__esbuild__LICENSE.md +0 -21
  163. package/dist/resources/third-party/node_modules__fflate__LICENSE +0 -21
  164. package/dist/resources/third-party/node_modules__marked__LICENSE +0 -44
  165. package/dist/resources/third-party/node_modules__playwright-core__LICENSE +0 -202
  166. package/dist/resources/third-party/node_modules__playwright-core__NOTICE +0 -5
  167. package/dist/resources/third-party/node_modules__playwright__LICENSE +0 -202
  168. package/dist/resources/third-party/node_modules__playwright__NOTICE +0 -5
  169. package/dist/resources/third-party/node_modules__prettier__LICENSE +0 -7
  170. package/dist/resources/third-party/node_modules__typescript__LICENSE +0 -55
  171. package/dist/resources/third-party/node_modules__typescript__NOTICE.txt +0 -436
  172. package/dist/resources/third-party/node_modules__undici-types__LICENSE +0 -21
  173. package/dist/runtime/chunk-2BBNJVKW.mjs +0 -1996
  174. package/dist/runtime/chunk-5JI3XEAK.mjs +0 -14
  175. package/dist/runtime/chunk-CYPFCUNE.mjs +0 -150
  176. package/dist/runtime/chunk-ESDVN7DS.mjs +0 -14
  177. package/dist/runtime/chunk-FTTPESNK.mjs +0 -203
  178. package/dist/runtime/chunk-HKJVCGQQ.mjs +0 -1302
  179. package/dist/runtime/chunk-RWGJITHZ.mjs +0 -992
  180. package/dist/runtime/chunk-TLYYCRQA.mjs +0 -329
  181. package/dist/runtime/chunk-WXP75UUP.mjs +0 -18
  182. package/dist/runtime/chunk-YQHHPRJH.mjs +0 -14
@@ -42,6 +42,27 @@
42
42
  "planDigest": {
43
43
  "type": "string",
44
44
  "pattern": "^[a-f0-9]{64}$"
45
+ },
46
+ "note": {
47
+ "type": "string",
48
+ "maxLength": 2000
49
+ },
50
+ "grantedBy": {
51
+ "type": "string",
52
+ "enum": [
53
+ "user",
54
+ "ship"
55
+ ]
56
+ },
57
+ "grantedAt": {
58
+ "type": "string",
59
+ "format": "date-time",
60
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d(?:\\.\\d+)?(?:Z))$"
61
+ },
62
+ "workerPid": {
63
+ "type": "integer",
64
+ "exclusiveMinimum": 0,
65
+ "maximum": 9007199254740991
45
66
  }
46
67
  },
47
68
  "required": [
@@ -140,13 +140,6 @@
140
140
  "expectedMarker": {
141
141
  "type": "string",
142
142
  "minLength": 1
143
- },
144
- "deploymentControl": {
145
- "type": "string",
146
- "enum": [
147
- "local",
148
- "database"
149
- ]
150
143
  }
151
144
  },
152
145
  "required": [
@@ -215,6 +208,10 @@
215
208
  ],
216
209
  "additionalProperties": false
217
210
  },
211
+ "deploymentControl": {
212
+ "type": "string",
213
+ "const": "local"
214
+ },
218
215
  "composer": {
219
216
  "type": "object",
220
217
  "properties": {
@@ -1,5 +1,3 @@
1
1
  # Blank application
2
2
 
3
- English | [Українська](README.uk.md)
4
-
5
3
  This is a real Oracle SQLcl-generated starter reference with its original `.apex/apexlang.json`. New projects run the real generator; they do not fabricate metadata from this fixture. Requires SQLcl 26.1.2+ and Java 21. Authentication remains the Oracle starter default. Local compilation has been verified; deployment requires an explicitly configured APEX 26.1+ workspace/schema.
@@ -1,7 +1,5 @@
1
1
  # Customer CRM
2
2
 
3
- English | [Українська](README.uk.md)
4
-
5
3
  A real APEXlang overlay on the Oracle-generated starter: customers report (page 10), dashboard (20), modal form (80), server validation package/trigger, immutable table migration, utPLSQL tests and authenticated browser CRUD with unique synthetic records. It retains default authentication; configure a dedicated test account through authorized APEX administration. No password or ORDS endpoint is included.
6
4
 
7
- `project init ./crm --template customer-crm` generates fresh Oracle metadata and applies the reviewed overlay. Local SQLcl compilation passed on 26.1.2 with MMD 26.1.0+3102. Live target deployment, test selectors and SQL results still need integration evidence. Required suites are SQL and E2E. Configure the environment and authorized test grants, provide utPLSQL for the SQL suite, then authenticate interactively. Control tables are needed only for explicitly selected database coordination; local coordination is the default.
5
+ `project init ./crm --template customer-crm` generates fresh Oracle metadata and applies the reviewed overlay. Local SQLcl compilation passed on 26.1.2 with MMD 26.1.0+3102. Live target deployment, test selectors and SQL results still need integration evidence. Required suites are SQL and E2E. Configure the environment and authorized test grants, provide utPLSQL for the SQL suite, then authenticate interactively.
@@ -1,7 +1,5 @@
1
1
  # Adopt an existing application
2
2
 
3
- English | [Українська](README.uk.md)
4
-
5
3
  Create an `existing-app` project skeleton, configure the exact existing test target and named read connection, then run `project adopt --env dev --app-id ID`. It exports through a private staging directory and installs only into a new source directory. If that directory exists, adoption fails with LOCAL_EDITS_CONFLICT; local edits are preserved. For later exports use a fresh `apex export --env dev --output review/export-UUID` directory.
6
4
 
7
5
  Keep `.apex`, Oracle IDs, shared LOVs, authentication and all page files under version control. `apex diff --env dev` compares source file hashes with a fresh Oracle export. It is a textual inventory, not proof of complete semantic component coverage. SQLcl exports use original IDs and omit export timestamps; no invented normalization removes metadata.
@@ -2,20 +2,21 @@
2
2
  import { createRequire as __createRequire } from 'node:module'; const require = __createRequire(import.meta.url);
3
3
  import {
4
4
  dispatch,
5
+ executeJob,
6
+ failQueuedJob,
7
+ internalOperations,
5
8
  schemas
6
- } from "./chunk-HKJVCGQQ.mjs";
7
- import {
8
- executeJob
9
- } from "./chunk-2BBNJVKW.mjs";
10
- import "./chunk-YPLIIQ4Y.mjs";
11
- import "./chunk-G3KR57BY.mjs";
9
+ } from "./chunk-5PCC7GZM.mjs";
10
+ import "./chunk-TMSMKVRP.mjs";
11
+ import "./chunk-RBJJNQ5O.mjs";
12
12
  import {
13
13
  loadProject
14
- } from "./chunk-EBBEN4AV.mjs";
14
+ } from "./chunk-N4C2SKCN.mjs";
15
+ import "./chunk-JYN3YHP3.mjs";
15
16
  import {
16
17
  Fault,
17
18
  failure
18
- } from "./chunk-2Z3BZF66.mjs";
19
+ } from "./chunk-WPS3CSQJ.mjs";
19
20
 
20
21
  // packages/cli/src/main.ts
21
22
  var argv = process.argv.slice(2);
@@ -30,29 +31,36 @@ var positional = {
30
31
  "jobs.cancel": ["id"],
31
32
  "artifacts.read": ["id"]
32
33
  };
34
+ var groupAliases = { job: "jobs", reference: "docs" };
35
+ var variadic = { "docs.search": "query" };
33
36
  function operationFrom(args) {
34
- const first = args[0];
35
- if (["doctor", "version", "setup"].includes(first ?? "")) return { op: first, start: 1 };
37
+ const first = groupAliases[args[0] ?? ""] ?? args[0];
38
+ if (["doctor", "version", "setup", "ship", "status"].includes(first ?? "")) return { op: first, start: 1 };
36
39
  if (first === "test" && ["unit", "sql", "api", "e2e", "all"].includes(args[1] ?? ""))
37
40
  return { op: "test.run", start: 2, suite: args[1] };
38
- return { op: args.slice(0, 2).join("."), start: 2 };
41
+ return { op: [first, args[1]].join("."), start: 2 };
39
42
  }
43
+ var listed = (op) => !internalOperations.includes(op);
40
44
  var selected = operationFrom(argv);
45
+ function knownHelpTarget() {
46
+ const first = argv[0] ?? "";
47
+ return first.startsWith("-") || ["mcp", "test"].includes(first) || selected.op in schemas || // A command group alone (apexrest deploy --help) lists the general help.
48
+ (argv[1] ?? "-").startsWith("-") && Object.keys(schemas).some((op) => op.startsWith((groupAliases[first] ?? first) + "."));
49
+ }
41
50
  function help() {
42
51
  const key = selected.op;
43
52
  const lines = [
44
53
  "APEXREST for Codex \u2014 independent Oracle APEX developer tools",
45
54
  "Usage: apexrest [command] [options]",
46
- "Run apexrest in a terminal to manage tools, plugins and saved SQLcl connections.",
47
- " tui [--project PATH] Open the terminal UI explicitly",
48
- " panel tui [--project PATH] Live development panel inside Codex CLI",
49
55
  "",
50
- ...Object.keys(schemas).filter((x) => x !== "test.run").map((x) => " " + x.replace(".", " ")),
56
+ ...Object.keys(schemas).filter((x) => x !== "test.run" && listed(x)).map((x) => " " + x.replace(".", " ")),
51
57
  " test unit|sql|api|e2e|all [--env NAME]",
58
+ " job status|cancel <id> (alias of jobs ...)",
52
59
  " mcp",
53
60
  "",
54
61
  "--json emits one structured JSON result; diagnostics use stderr.",
55
62
  "Use --project PATH for project operations. Environment never defaults.",
63
+ "ship --env NAME --mode plan|apply --user-request TEXT validates, plans and (apply) imports with a plan-bound grant.",
56
64
  "Exit codes: 0 success, 1 failed, 2 input, 3 dependency, 4 approval, 5 conflict, 6 unknown/cancelled."
57
65
  ];
58
66
  if (schemas[key])
@@ -85,16 +93,31 @@ function help() {
85
93
  "Read a result ID, grammar:production-name, component: ID or pattern: ID.",
86
94
  "Follow nextOffset using --offset; catalog navigationOffset recovers all dependency links."
87
95
  );
88
- if (key === "panel.action")
96
+ if (key === "panel.status")
89
97
  lines.push(
90
98
  "",
91
- "Pass --action as one JSON object. Supported kinds: preferences, sqlcl, connection, cancel-job, validate, test, browser, plan.",
92
- `Example: apexrest panel action --action '{"kind":"validate"}' --project PATH --json`
99
+ "Read-only local snapshot: settings, connections, Git changes, sync state, jobs and deployment journal.",
100
+ "No server, worker, job or database call is started. Same as: apexrest status --detail project --project PATH --json"
93
101
  );
94
102
  if (key === "jobs.status")
95
103
  lines.push(
96
- "Use --wait-seconds 25 to wait for an existing job without repeated status calls (default: immediate)."
104
+ "Use --wait-seconds N (up to 120) to wait for an existing job without repeated status calls (default: immediate)."
105
+ );
106
+ if (key === "ship")
107
+ lines.push(
108
+ "",
109
+ "mode plan: validate with the Oracle compiler, read the target and write .apexrest/plans/ship-<id>.json for review.",
110
+ "mode apply: non-production only. Records a deploy grant bound to this project, target and plan digest with the",
111
+ "user's literal --user-request, imports with backup/drift/identity checks, verifies, runs required suites, then",
112
+ "removes the grant. Production targets require the protected CI approval path (deploy apply)."
97
113
  );
114
+ if (key === "status")
115
+ lines.push(
116
+ "",
117
+ "--detail doctor probes local tools; --detail project (default) prints the read-only project snapshot."
118
+ );
119
+ if (key === "apex.validate")
120
+ lines.push("", "Runs in-process and returns structured diagnostics (file, line, column, type, hint).");
98
121
  if (key === "dependencies.install")
99
122
  lines.push(
100
123
  "",
@@ -133,7 +156,7 @@ function help() {
133
156
  "cli: SQLcl subprocess (default). mcp: official SQLcl stdio server (sql -mcp).",
134
157
  "direct: Oracle listener connection (default). ords: SQLcl OREST over HTTP(S), without port 1521.",
135
158
  "ORDS uses SQLcl CLI; select --mode cli with --database-transport ords.",
136
- "Configure the ORDS URL, username and password for each reference using connection add or panel Settings.",
159
+ "Configure the ORDS URL, username and password for each reference using connection add.",
137
160
  "--mcp-restrict-level 4|1: 4 is the default; 1 explicitly permits scripts but blocks host commands.",
138
161
  "Saved in APEXREST_HOME/sqlcl.json. No connection, download or Codex registration is changed.",
139
162
  "SQLcl MCP can write its own database audit log on connected operations. No silent CLI fallback."
@@ -141,28 +164,26 @@ function help() {
141
164
  console.log(lines.join("\n"));
142
165
  }
143
166
  try {
144
- if (argv.includes("--help") || argv.includes("-h")) help();
145
- else if (argv[0] === "tui" || !argv.length && process.stdin.isTTY && process.stdout.isTTY && process.env.TERM !== "dumb") {
146
- if (argv.length > 1 && (argv.length !== 3 || argv[1] !== "--project" || !argv[2] || argv[2].startsWith("--")))
147
- throw new Fault("INVALID_INPUT", "Usage: apexrest tui [--project PATH]", 2);
148
- const { runTui } = await import("./chunk-RWGJITHZ.mjs");
149
- await runTui(argv[2] ? { project: argv[2] } : {});
167
+ if (argv.includes("--help") || argv.includes("-h")) {
168
+ if (!knownHelpTarget())
169
+ throw new Fault(
170
+ "INVALID_INPUT",
171
+ `Unknown command: ${argv.filter((a) => !a.startsWith("-")).join(" ")}. Use apexrest --help.`,
172
+ 2
173
+ );
174
+ help();
150
175
  } else if (!argv.length) help();
151
- else if (argv[0] === "panel" && argv[1] === "tui") {
152
- if (argv.length !== 2 && (argv.length !== 4 || argv[2] !== "--project" || !argv[3]))
153
- throw new Fault("INVALID_INPUT", "Usage: apexrest panel tui [--project PATH]", 2);
154
- const { runPanelTui } = await import("./chunk-CYPFCUNE.mjs");
155
- await runPanelTui(argv[3] ?? process.cwd());
156
- } else if (argv[0] === "--panel-worker") {
157
- if (argv.length !== 2 || !argv[1]) throw new Fault("INVALID_INPUT", "Invalid panel worker request.", 2);
158
- const { servePanel } = await import("./chunk-WXP75UUP.mjs");
159
- await servePanel(argv[1]);
160
- } else if (argv[0] === "--job-worker") {
176
+ else if (argv[0] === "--job-worker") {
161
177
  if (argv.length !== 3) throw new Fault("INVALID_INPUT", "Invalid internal job request.", 2);
162
- await executeJob(await loadProject(argv[1]), argv[2], dispatch);
178
+ try {
179
+ await executeJob(await loadProject(argv[1]), argv[2], dispatch);
180
+ } catch (error) {
181
+ await failQueuedJob(argv[1], argv[2], error).catch(() => void 0);
182
+ throw error;
183
+ }
163
184
  } else if (argv[0] === "mcp") {
164
185
  if (argv.length !== 1) throw new Fault("INVALID_INPUT", "mcp accepts no arguments.", 2);
165
- const { startMcp } = await import("./chunk-5JI3XEAK.mjs");
186
+ const { startMcp } = await import("./chunk-QKYF6N6U.mjs");
166
187
  await startMcp();
167
188
  } else {
168
189
  const selectedOp = argv[0] === "--version" ? { op: "version", start: 1 } : selected;
@@ -182,10 +203,11 @@ try {
182
203
  "keepRuntime",
183
204
  "headed",
184
205
  "saved",
185
- "workingCopy"
206
+ "workingCopy",
207
+ "includeUnresolved"
186
208
  ]);
187
209
  const numbers = /* @__PURE__ */ new Set(["appId", "offset", "limit", "waitSeconds"]);
188
- let index = 0;
210
+ let index = 0, rest;
189
211
  for (let i = selectedOp.start; i < argv.length; i++) {
190
212
  const token = argv[i];
191
213
  if (token.startsWith("--")) {
@@ -198,12 +220,16 @@ try {
198
220
  const value = argv[++i];
199
221
  if (!value || value.startsWith("--"))
200
222
  throw new Fault("INVALID_INPUT", `Missing value for ${token}`, 2);
201
- input[name] = name === "action" && selectedOp.op === "panel.action" ? JSON.parse(value) : numbers.has(name) ? Number(value) : value;
223
+ input[name] = numbers.has(name) ? Number(value) : value;
202
224
  }
203
225
  } else {
204
- const field = positional[selectedOp.op]?.[index++];
205
- if (!field || field in input) throw new Fault("INVALID_INPUT", `Unexpected argument: ${token}`, 2);
206
- input[field] = token;
226
+ const field = positional[selectedOp.op]?.[index];
227
+ if (field && !(field in input)) {
228
+ index++;
229
+ input[field] = token;
230
+ if (variadic[selectedOp.op] === field) rest = field;
231
+ } else if (!field && rest) input[rest] = input[rest] + " " + token;
232
+ else throw new Fault("INVALID_INPUT", `Unexpected argument: ${token}`, 2);
207
233
  }
208
234
  }
209
235
  const result = await dispatch(selectedOp.op, input);