apexrest 1.2.0 → 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 (239) hide show
  1. package/README.md +90 -134
  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/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  6. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  7. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  8. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  9. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  10. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  11. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/generator.json +5 -0
  12. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/manifest.json +29 -0
  13. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  14. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  15. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  16. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  17. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  18. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  19. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  20. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  21. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  22. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  23. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  24. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  25. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/profiles.json +10 -0
  26. package/dist/codex-compat/plugins/apexrest-apex/resources/blocks/revocations.json +1 -0
  27. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/crm.yaml +172 -0
  28. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/index.json +12 -0
  29. package/dist/codex-compat/plugins/apexrest-apex/resources/blueprints/service-desk.yaml +120 -0
  30. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-allocation.schema.json +33 -0
  31. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-block.schema.json +208 -0
  32. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-blueprint.schema.json +665 -0
  33. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-command.schema.json +106 -0
  34. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-contract.schema.json +174 -0
  35. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-diagnostic.schema.json +26 -0
  36. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-entity.schema.json +142 -0
  37. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-evidence.schema.json +95 -0
  38. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-field.schema.json +54 -0
  39. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-instance.schema.json +117 -0
  40. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-lock.schema.json +54 -0
  41. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-operation.schema.json +55 -0
  42. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-owner.schema.json +105 -0
  43. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-parameters.schema.json +61 -0
  44. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-plan.schema.json +1011 -0
  45. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-renderer.schema.json +69 -0
  46. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/composer-state.schema.json +146 -0
  47. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +754 -169
  48. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +525 -256
  49. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/policy.schema.json +21 -0
  50. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +17 -7
  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/templates/blank-app/README.md +0 -2
  53. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.md +1 -3
  54. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.md +0 -2
  55. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yaml__LICENSE +13 -0
  56. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +81 -45
  57. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5PCC7GZM.mjs +4090 -0
  58. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-BVPAS3TD.mjs +18 -0
  59. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-CVMECW6D.mjs +65 -0
  60. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-3MDDJFXN.mjs → chunk-JYN3YHP3.mjs} +4220 -10616
  61. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-KGTE7Q5Y.mjs +23 -0
  62. package/dist/{runtime/chunk-HOKFFGSZ.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-KKRFM7Q7.mjs} +21 -4
  63. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2VBZESVC.mjs → chunk-MNU54A7W.mjs} +7 -1
  64. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-N4C2SKCN.mjs +6912 -0
  65. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-WK5GP4ES.mjs → chunk-P3CVQAZW.mjs} +822 -102
  66. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2ZUNLCLK.mjs → chunk-QKYF6N6U.mjs} +210 -112
  67. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-S24BD6PY.mjs → chunk-RBJJNQ5O.mjs} +7 -7
  68. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-TMSMKVRP.mjs +10367 -0
  69. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2Z3BZF66.mjs → chunk-WPS3CSQJ.mjs} +124 -11
  70. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +5 -10
  71. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +22 -25
  72. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/agents/openai.yaml +3 -3
  73. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/component-routes.md +1 -5
  74. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/SKILL.md +4 -4
  75. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/agents/openai.yaml +1 -1
  76. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-pattern-catalog/references/capture-and-curation.md +2 -2
  77. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-safety/SKILL.md +18 -0
  78. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-safety/agents/openai.yaml +4 -0
  79. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/SKILL.md +20 -10
  80. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/agents/openai.yaml +3 -3
  81. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +11 -6
  82. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/agents/openai.yaml +3 -3
  83. package/dist/resources/blocks/evidence/block%3Aanalytics%2Fstatus-summary%401.0.0.json +19 -0
  84. package/dist/resources/blocks/evidence/block%3Acrud%2Freport-dialog%401.0.0.json +19 -0
  85. package/dist/resources/blocks/evidence/block%3Aread%2Fdetail%401.0.0.json +19 -0
  86. package/dist/resources/blocks/evidence/block%3Aread%2Ffiltered-list%401.0.0.json +19 -0
  87. package/dist/resources/blocks/evidence/block%3Aread%2Fhistory%401.0.0.json +19 -0
  88. package/dist/resources/blocks/evidence/block%3Aread%2Fmaster-detail%401.0.0.json +19 -0
  89. package/dist/resources/blocks/generator.json +5 -0
  90. package/dist/resources/blocks/manifest.json +29 -0
  91. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/block.yaml +59 -0
  92. package/dist/resources/blocks/packages/analytics/status-summary/1.0.0/renderer.json +14 -0
  93. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/block.yaml +66 -0
  94. package/dist/resources/blocks/packages/crud/report-dialog/1.0.0/renderer.json +14 -0
  95. package/dist/resources/blocks/packages/read/detail/1.0.0/block.yaml +59 -0
  96. package/dist/resources/blocks/packages/read/detail/1.0.0/renderer.json +14 -0
  97. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/block.yaml +59 -0
  98. package/dist/resources/blocks/packages/read/filtered-list/1.0.0/renderer.json +14 -0
  99. package/dist/resources/blocks/packages/read/history/1.0.0/block.yaml +59 -0
  100. package/dist/resources/blocks/packages/read/history/1.0.0/renderer.json +14 -0
  101. package/dist/resources/blocks/packages/read/master-detail/1.0.0/block.yaml +59 -0
  102. package/dist/resources/blocks/packages/read/master-detail/1.0.0/renderer.json +14 -0
  103. package/dist/resources/blocks/profiles.json +10 -0
  104. package/dist/resources/blocks/revocations.json +1 -0
  105. package/dist/resources/blueprints/crm.yaml +172 -0
  106. package/dist/resources/blueprints/index.json +12 -0
  107. package/dist/resources/blueprints/service-desk.yaml +120 -0
  108. package/dist/resources/schemas/composer-allocation.schema.json +33 -0
  109. package/dist/resources/schemas/composer-block.schema.json +208 -0
  110. package/dist/resources/schemas/composer-blueprint.schema.json +665 -0
  111. package/dist/resources/schemas/composer-command.schema.json +106 -0
  112. package/dist/resources/schemas/composer-contract.schema.json +174 -0
  113. package/dist/resources/schemas/composer-diagnostic.schema.json +26 -0
  114. package/dist/resources/schemas/composer-entity.schema.json +142 -0
  115. package/dist/resources/schemas/composer-evidence.schema.json +95 -0
  116. package/dist/resources/schemas/composer-field.schema.json +54 -0
  117. package/dist/resources/schemas/composer-instance.schema.json +117 -0
  118. package/dist/resources/schemas/composer-lock.schema.json +54 -0
  119. package/dist/resources/schemas/composer-operation.schema.json +55 -0
  120. package/dist/resources/schemas/composer-owner.schema.json +105 -0
  121. package/dist/resources/schemas/composer-parameters.schema.json +61 -0
  122. package/dist/resources/schemas/composer-plan.schema.json +1011 -0
  123. package/dist/resources/schemas/composer-renderer.schema.json +69 -0
  124. package/dist/resources/schemas/composer-state.schema.json +146 -0
  125. package/dist/resources/schemas/deploy-plan.schema.json +754 -169
  126. package/dist/resources/schemas/operations.schema.json +525 -256
  127. package/dist/resources/schemas/policy.schema.json +21 -0
  128. package/dist/resources/schemas/project.schema.json +17 -7
  129. package/dist/resources/schemas/sync-state.schema.json +238 -0
  130. package/dist/resources/templates/blank-app/README.md +0 -2
  131. package/dist/resources/templates/customer-crm/README.md +1 -3
  132. package/dist/resources/templates/existing-app/README.md +0 -2
  133. package/dist/resources/third-party/node_modules__yaml__LICENSE +13 -0
  134. package/dist/runtime/apexrest.mjs +81 -45
  135. package/dist/runtime/chunk-5PCC7GZM.mjs +4090 -0
  136. package/dist/runtime/chunk-BVPAS3TD.mjs +18 -0
  137. package/dist/runtime/chunk-CVMECW6D.mjs +65 -0
  138. package/dist/runtime/{chunk-3MDDJFXN.mjs → chunk-JYN3YHP3.mjs} +4220 -10616
  139. package/dist/runtime/chunk-KGTE7Q5Y.mjs +23 -0
  140. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-HOKFFGSZ.mjs → runtime/chunk-KKRFM7Q7.mjs} +21 -4
  141. package/dist/runtime/{chunk-2VBZESVC.mjs → chunk-MNU54A7W.mjs} +7 -1
  142. package/dist/runtime/chunk-N4C2SKCN.mjs +6912 -0
  143. package/dist/runtime/{chunk-WK5GP4ES.mjs → chunk-P3CVQAZW.mjs} +822 -102
  144. package/dist/runtime/{chunk-2ZUNLCLK.mjs → chunk-QKYF6N6U.mjs} +210 -112
  145. package/dist/runtime/{chunk-S24BD6PY.mjs → chunk-RBJJNQ5O.mjs} +7 -7
  146. package/dist/runtime/chunk-TMSMKVRP.mjs +10367 -0
  147. package/dist/runtime/{chunk-2Z3BZF66.mjs → chunk-WPS3CSQJ.mjs} +124 -11
  148. package/dist/runtime/mcp.mjs +5 -10
  149. package/package.json +14 -7
  150. package/README.uk.md +0 -206
  151. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +0 -61
  152. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.css +0 -627
  153. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +0 -629
  154. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.uk.md +0 -5
  155. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.uk.md +0 -7
  156. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/database-control/install.sql +0 -17
  157. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.uk.md +0 -9
  158. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__LICENSE +0 -202
  159. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__NOTICE +0 -5
  160. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__node__LICENSE +0 -21
  161. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__yauzl__LICENSE +0 -21
  162. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +0 -55
  163. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +0 -436
  164. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__esbuild__LICENSE.md +0 -21
  165. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fflate__LICENSE +0 -21
  166. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__marked__LICENSE +0 -44
  167. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__LICENSE +0 -202
  168. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__NOTICE +0 -5
  169. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__LICENSE +0 -202
  170. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__NOTICE +0 -5
  171. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__prettier__LICENSE +0 -7
  172. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__LICENSE +0 -55
  173. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__NOTICE.txt +0 -436
  174. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__undici-types__LICENSE +0 -21
  175. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  176. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-7RZW5QV2.mjs +0 -992
  177. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-AQZLLQ3D.mjs +0 -203
  178. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-BD2AVCFU.mjs +0 -367
  179. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-IX6V6ZGW.mjs +0 -18
  180. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-NDZ2RWQU.mjs +0 -13
  181. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-QIVPMPU3.mjs +0 -14
  182. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-SPZVXAM5.mjs +0 -147
  183. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-TLYYCRQA.mjs +0 -329
  184. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-TXVQLYTH.mjs +0 -1271
  185. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YLXJ6H4J.mjs +0 -14
  186. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/SKILL.md +0 -9
  187. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/agents/openai.yaml +0 -4
  188. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/SKILL.md +0 -9
  189. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/agents/openai.yaml +0 -4
  190. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +0 -19
  191. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/agents/openai.yaml +0 -4
  192. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/SKILL.md +0 -38
  193. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/agents/openai.yaml +0 -4
  194. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +0 -28
  195. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/agents/openai.yaml +0 -4
  196. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +0 -23
  197. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/SKILL.md +0 -14
  198. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/agents/openai.yaml +0 -4
  199. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +0 -9
  200. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/agents/openai.yaml +0 -4
  201. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/SKILL.md +0 -11
  202. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/agents/openai.yaml +0 -4
  203. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/SKILL.md +0 -29
  204. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/agents/openai.yaml +0 -4
  205. package/dist/resources/panel/index.html +0 -61
  206. package/dist/resources/panel/panel.css +0 -627
  207. package/dist/resources/panel/panel.js +0 -629
  208. package/dist/resources/templates/blank-app/README.uk.md +0 -5
  209. package/dist/resources/templates/customer-crm/README.uk.md +0 -7
  210. package/dist/resources/templates/database-control/install.sql +0 -17
  211. package/dist/resources/templates/existing-app/README.uk.md +0 -9
  212. package/dist/resources/third-party/node_modules__@playwright__test__LICENSE +0 -202
  213. package/dist/resources/third-party/node_modules__@playwright__test__NOTICE +0 -5
  214. package/dist/resources/third-party/node_modules__@types__node__LICENSE +0 -21
  215. package/dist/resources/third-party/node_modules__@types__yauzl__LICENSE +0 -21
  216. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +0 -55
  217. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +0 -436
  218. package/dist/resources/third-party/node_modules__esbuild__LICENSE.md +0 -21
  219. package/dist/resources/third-party/node_modules__fflate__LICENSE +0 -21
  220. package/dist/resources/third-party/node_modules__marked__LICENSE +0 -44
  221. package/dist/resources/third-party/node_modules__playwright-core__LICENSE +0 -202
  222. package/dist/resources/third-party/node_modules__playwright-core__NOTICE +0 -5
  223. package/dist/resources/third-party/node_modules__playwright__LICENSE +0 -202
  224. package/dist/resources/third-party/node_modules__playwright__NOTICE +0 -5
  225. package/dist/resources/third-party/node_modules__prettier__LICENSE +0 -7
  226. package/dist/resources/third-party/node_modules__typescript__LICENSE +0 -55
  227. package/dist/resources/third-party/node_modules__typescript__NOTICE.txt +0 -436
  228. package/dist/resources/third-party/node_modules__undici-types__LICENSE +0 -21
  229. package/dist/runtime/chunk-4MYHJ2IU.mjs +0 -1208
  230. package/dist/runtime/chunk-7RZW5QV2.mjs +0 -992
  231. package/dist/runtime/chunk-AQZLLQ3D.mjs +0 -203
  232. package/dist/runtime/chunk-BD2AVCFU.mjs +0 -367
  233. package/dist/runtime/chunk-IX6V6ZGW.mjs +0 -18
  234. package/dist/runtime/chunk-NDZ2RWQU.mjs +0 -13
  235. package/dist/runtime/chunk-QIVPMPU3.mjs +0 -14
  236. package/dist/runtime/chunk-SPZVXAM5.mjs +0 -147
  237. package/dist/runtime/chunk-TLYYCRQA.mjs +0 -329
  238. package/dist/runtime/chunk-TXVQLYTH.mjs +0 -1271
  239. package/dist/runtime/chunk-YLXJ6H4J.mjs +0 -14
@@ -1,629 +0,0 @@
1
- (() => {
2
- // plugins/apexrest-apex/assets/apexrest-logo.svg
3
- var apexrest_logo_default = `data:image/svg+xml,<?xml version='1.0' encoding='utf-8'?>%0A<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" viewBox="100 66 98 98" xml:space="preserve" width="98" height="98" role="img" aria-labelledby="logo-title">%0A <title id="logo-title">APEXREST pencil and ruler symbol</title>%0A <style type="text/css">%0A%09.st0{fill:%2331BEF9;}%0A%09.st1{fill:%23FFD541;}%0A%09.st2{fill:%23FF4141;}%0A%09.st3{fill:%231E1E1E;}%0A</style>%0A <g id="\u0421\u043B\u043E\u0439_2">%0A <polygon class="st0" points="133,149 177,106 160,89 116,132 " />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_3">%0A <polygon class="st1" points="128,114 147,95 128,76 126,75 123,76 108,91 107,93 110,97 127,114 " />%0A <polygon class="st1" points="151,137 170,118 189,137 190,140 189,142 186,146 173,157 170,157 " />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_4">%0A <path class="st2" d="M166,83l16,16l4-3l2-5v-4c0,0-1-2-1-3s-3-4-3-4l-5-3h-3h-3l-3,2l-2,2L166,83L166,83z" />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_1">%0A <g>%0A <path class="st3" d="M126.7,115.5l1.7-1.7l-2.2-2.2l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-4.1-4.1 l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-4.1-4.1l9.4-9.5c0.5-0.5,0.4-1.3-0.1-1.7 c-0.5-0.4-1.2-0.4-1.7,0l-9.5,9.5l-3.6-3.6c-0.8-0.8-0.8-2,0-2.8L123.9,77c0.8-0.8,2-0.8,2.8,0L146,96.2l1.7-1.7l-19.2-19.2 c-1.7-1.7-4.6-1.7-6.3,0L107.5,90c-1.7,1.7-1.7,4.6,0,6.3L126.7,115.5z" />%0A <path class="st3" d="M182.7,100.8l3-3c5-5.1,4.9-13.3-0.2-18.3c-5-5-13.1-5-18.2,0l-51.9,51.9c-0.1,0.1-0.2,0.2-0.2,0.4v0.1 l-7.2,23.8c-0.2,0.6,0.2,1.3,0.8,1.5c0.2,0.1,0.5,0.1,0.7,0l23.8-7.2h0.1c0.1-0.1,0.2-0.1,0.4-0.2L182.7,100.8L182.7,100.8z M159.3,91l6.6,6.6l-41.3,41.3l-6.6-6.6L159.3,91z M110.9,154.2l1-3.5c1.1,0.5,2,1.3,2.5,2.4L110.9,154.2z M116.9,152.4 c-0.8-1.8-2.4-3.2-4.2-4l4.2-13.9l13.7,13.7L116.9,152.4z M132.9,147.1l-6.6-6.6l41.3-41.3l6.6,6.6L132.9,147.1z M175.9,104.1 l-7.4-7.4l-7.4-7.4l4.2-4.2l14.9,14.9L175.9,104.1z M167,83.3l2.1-2.1c4.3-4,10.9-3.7,14.9,0.6c3.7,4,3.7,10.3,0,14.3l-2.1,2.1 L167,83.3z" />%0A <path class="st3" d="M189.9,136.7l-19.2-19.2l-1.7,1.7l19.2,19.2c0.8,0.8,0.8,2,0,2.8l-14.7,14.7c-0.8,0.8-2.1,0.8-2.8,0l-3.6-3.6 l9.5-9.5c0.5-0.4,0.6-1.2,0.2-1.7c-0.4-0.5-1.2-0.6-1.7-0.2c-0.1,0.1-0.1,0.1-0.2,0.2l-9.5,9.5l-4.1-4.1l4.3-4.3 c0.5-0.5,0.5-1.2,0.1-1.7c-0.5-0.5-1.2-0.5-1.7-0.1c0,0,0,0-0.1,0.1l-4.3,4.3l-4.1-4.1l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7 c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-2.2-2.2l-1.8,1.7l19.2,19.2c1.7,1.7,4.6,1.7,6.3,0l14.7-14.7 C191.6,141.3,191.6,138.4,189.9,136.7C189.9,136.7,189.9,136.7,189.9,136.7z" />%0A </g>%0A </g>%0A</svg>%0A`;
4
-
5
- // packages/panel/src/panel.ts
6
- var $ = (id) => document.getElementById(id);
7
- var input = (id) => $(id);
8
- var node = (tag, cls = "", text = "") => {
9
- const element = document.createElement(tag);
10
- element.className = cls;
11
- element.textContent = text;
12
- return element;
13
- };
14
- var human = (value) => value.replaceAll("_", " ").replaceAll("-", " ").replace(/\b\w/g, (c) => c.toUpperCase());
15
- var active = (status) => ["running", "queued", "cancelling"].includes(status);
16
- var badge = (value) => node(
17
- "span",
18
- "badge " + (["completed", "pass", "passed", "approve", "succeeded", "live"].includes(value) ? "good" : active(value) ? "running" : ["failed", "fail", "blocked", "verification_failed", "outcome_unknown", "unavailable"].includes(
19
- value
20
- ) ? "bad" : ["not_run", "cancelled"].includes(value) ? "warn" : ""),
21
- human(value)
22
- );
23
- var empty = (message) => node("div", "empty", message);
24
- var card = (title, content, subtitle) => {
25
- const box = node("div", "card"), heading = node("div", "section-heading"), label = node("div");
26
- label.append(node("h2", "", title));
27
- if (subtitle) label.append(node("p", "subtle", subtitle));
28
- heading.append(label);
29
- box.append(heading, content);
30
- return box;
31
- };
32
- var kv = (items) => {
33
- const dl = node("dl");
34
- for (const [key, value] of items) {
35
- const row = node("div", "kv");
36
- row.append(node("dt", "", key), node("dd", "", value == null ? "Not available" : String(value)));
37
- dl.append(row);
38
- }
39
- return dl;
40
- };
41
- var codeDetails = (title, value) => {
42
- const d = node("details");
43
- d.append(node("summary", "", title), node("pre", "", JSON.stringify(value, null, 2)));
44
- return d;
45
- };
46
- var notice = (message, error = false) => {
47
- const box = $("notice");
48
- box.hidden = !message;
49
- box.classList.toggle("error", error);
50
- box.textContent = message;
51
- };
52
- var launch = new URLSearchParams(location.hash.slice(1));
53
- var snapshot;
54
- var busy = false;
55
- var connected = false;
56
- var initialized = false;
57
- var sqlclDirty = false;
58
- var sqlclSignature = "";
59
- var preferencesDirty = false;
60
- var preferencesSignature = "";
61
- var bridgeProject;
62
- var bridgeReady = false;
63
- var requestId = 0;
64
- var currentView = "overview";
65
- var savedConnectionsState = "idle";
66
- var savedConnectionNames = [];
67
- var savedConnectionsError = "";
68
- var embedded = window.parent !== window;
69
- var token = launch.get("session") ?? "";
70
- var pending = /* @__PURE__ */ new Map();
71
- function bridge(method, params) {
72
- const id = ++requestId;
73
- return new Promise((resolve, reject) => {
74
- const timer = setTimeout(() => {
75
- pending.delete(id);
76
- reject(new Error("Codex did not answer the panel request."));
77
- }, 2e4);
78
- pending.set(id, { resolve, reject, timer });
79
- window.parent.postMessage({ jsonrpc: "2.0", id, method, params }, "*");
80
- });
81
- }
82
- window.addEventListener("message", (event) => {
83
- if (event.source !== window.parent || !embedded || !event.data || event.data.jsonrpc !== "2.0") return;
84
- const message = event.data;
85
- const waiter = pending.get(message.id);
86
- if (waiter) {
87
- clearTimeout(waiter.timer);
88
- pending.delete(message.id);
89
- if (message.error) waiter.reject(new Error(String(message.error.message)));
90
- else waiter.resolve(message.result);
91
- }
92
- if (message.method === "ui/notifications/tool-input" && typeof message.params?.arguments?.project === "string")
93
- bridgeProject = message.params.arguments.project;
94
- if (message.method === "ui/notifications/tool-result") {
95
- const result = message.params?._meta?.["apexrest/panelResult"] ?? message.params?.structuredContent;
96
- if (typeof result?.data?.project === "string") bridgeProject = result.data.project;
97
- if (bridgeProject) void refresh();
98
- }
99
- });
100
- async function api(action) {
101
- if (embedded) {
102
- if (action?.kind === "connection" && action.password)
103
- throw new Error("Enter the password in the local dashboard or use CLI --password-file.");
104
- if (!bridgeReady || !bridgeProject) throw new Error("Waiting for the Codex workspace context.");
105
- const response2 = await bridge("tools/call", {
106
- name: action ? "apexrest_panel_action" : "apexrest_panel_status",
107
- arguments: {
108
- project: bridgeProject,
109
- ...action ? { action } : {}
110
- }
111
- });
112
- const envelope = response2._meta?.["apexrest/panelResult"] ?? response2.structuredContent ?? JSON.parse(response2.content?.find((c) => c.type === "text")?.text ?? "{}");
113
- if (!envelope.ok) throw new Error(envelope.summary ?? "Codex rejected this panel action.");
114
- return envelope.data;
115
- }
116
- const response = await fetch(action ? "/api/action" : "/api/status", {
117
- method: action ? "POST" : "GET",
118
- headers: {
119
- Authorization: "Bearer " + token,
120
- ...action ? { "Content-Type": "application/json" } : {}
121
- },
122
- ...action ? { body: JSON.stringify(action) } : {},
123
- signal: AbortSignal.timeout(action?.kind === "saved-connections" ? 6e4 : 15e3)
124
- });
125
- const result = await response.json();
126
- if (!response.ok) throw new Error(result.summary ?? result.error ?? "The local panel request failed.");
127
- return result;
128
- }
129
- function renderSavedConnections(selected = input("connection-direct").value) {
130
- const select = $("connection-direct"), current = snapshot?.connections[input("connection-ref").value.trim()]?.name, selectedCurrent = !!current && selected === current, names = [
131
- .../* @__PURE__ */ new Set([...savedConnectionNames, ...current ? [current] : [], ...selected ? [selected] : []])
132
- ];
133
- const placeholder = node("option", "", "Choose a saved connection");
134
- placeholder.value = "";
135
- select.replaceChildren(
136
- placeholder,
137
- ...names.map((name) => {
138
- const retained = !savedConnectionNames.includes(name);
139
- const label = retained && savedConnectionsState === "loaded" ? `${name} \xB7 ${name === current ? "current mapping" : "previous selection"} (not in SQLcl list)` : retained && name === current ? `${name} \xB7 current mapping` : name;
140
- const option = node("option", "", label);
141
- option.value = name;
142
- return option;
143
- })
144
- );
145
- select.value = selected;
146
- select.disabled = savedConnectionsState === "loading";
147
- const status = $("saved-connections-status");
148
- status.dataset.state = savedConnectionsState;
149
- status.textContent = savedConnectionsState === "loading" ? "Loading saved connections from SQLcl\u2026" : savedConnectionsState === "error" ? "Could not load saved SQLcl connections. " + savedConnectionsError + " Use Retry to try again." : savedConnectionsState === "loaded" ? savedConnectionNames.length ? `${savedConnectionNames.length} saved SQLcl connection${savedConnectionNames.length === 1 ? "" : "s"} loaded.${selectedCurrent && !savedConnectionNames.includes(current) ? " The current mapping is retained even though SQLcl did not list it." : ""}` : "No saved SQLcl connections found. Save a direct connection in SQLcl, then refresh." + (selectedCurrent ? " The current mapping is retained." : "") : snapshot && !snapshot.trusted ? "Trust this project before loading saved SQLcl connections." : "Saved connections load when you open Direct connection settings.";
150
- $("saved-connections-refresh").textContent = savedConnectionsState === "loading" ? "Loading\u2026" : savedConnectionsState === "error" ? "Retry" : savedConnectionsState === "idle" ? "Load saved connections" : "Refresh saved connections";
151
- controls();
152
- }
153
- async function loadSavedConnections(force = false) {
154
- if (!connected || !snapshot?.trusted || busy || savedConnectionsState === "loading" || !force && savedConnectionsState === "loaded")
155
- return;
156
- savedConnectionsState = "loading";
157
- savedConnectionsError = "";
158
- renderSavedConnections();
159
- try {
160
- const result = await api({ kind: "saved-connections" });
161
- if (result.source !== "sqlcl-store" || !Array.isArray(result.connections) || result.connections.some((connection) => typeof connection?.name !== "string" || !connection.name))
162
- throw new Error("SQLcl returned an invalid connection list.");
163
- savedConnectionNames = result.connections.map((connection) => connection.name);
164
- savedConnectionsState = "loaded";
165
- } catch (error) {
166
- savedConnectionsState = "error";
167
- savedConnectionsError = error instanceof Error ? error.message : String(error);
168
- }
169
- renderSavedConnections();
170
- }
171
- function controls() {
172
- const canAct = connected && !!snapshot?.trusted && !busy;
173
- for (const id of ["validate", "run-tests", "plan", "open-browser"])
174
- $(id).disabled = !canAct || !snapshot?.configured;
175
- for (const form of ["sqlcl-form", "connection-form", "preferences-form"])
176
- $(form).querySelectorAll("button[type=submit]").forEach((button) => {
177
- button.disabled = !canAct;
178
- });
179
- $("saved-connections-refresh").disabled = !canAct || savedConnectionsState === "loading";
180
- $("connection-save").disabled = !canAct || input("sqlcl-transport").value === "direct" && savedConnectionsState === "loading";
181
- }
182
- async function act(action) {
183
- if (busy || !connected) return;
184
- busy = true;
185
- controls();
186
- try {
187
- const result = await api(action);
188
- notice(
189
- action.kind === "browser" ? result.status === "host_action_required" ? "Open this application in the Codex in-app browser: " + result.url + ". Opening it does not verify the application." : "Verification browser opened. Inspect the affected behavior; opening it does not verify the application." : ["sqlcl", "connection", "preferences"].includes(action.kind) ? "Settings saved." : action.kind === "cancel-job" ? "Stop requested. Existing changes are not rolled back." : "Operation accepted. Follow its actual status below."
190
- );
191
- if (action.kind === "preferences") preferencesDirty = false;
192
- if (action.kind === "sqlcl") sqlclDirty = false;
193
- if (action.kind === "connection") input("connection-ords-password").value = "";
194
- await refresh();
195
- } catch (error) {
196
- notice(error instanceof Error ? error.message : String(error), true);
197
- } finally {
198
- busy = false;
199
- controls();
200
- }
201
- }
202
- var rendered = /* @__PURE__ */ new Map();
203
- function draw(id, data, render2) {
204
- const key = JSON.stringify(data);
205
- if (rendered.get(id) === key) return;
206
- if ($(id).contains(document.activeElement) && document.activeElement !== document.body) return;
207
- $(id).replaceChildren(...render2());
208
- rendered.set(id, key);
209
- }
210
- function operations(data) {
211
- const box = node("div", "table-wrap");
212
- if (!data.jobs.length) box.append(empty("No APEX operation jobs recorded for this project."));
213
- else {
214
- const table = node("table"), head = node("tr");
215
- ["Operation", "Status", "Result", ""].forEach((s) => head.append(node("th", "", s)));
216
- const thead = node("thead");
217
- thead.append(head);
218
- table.append(thead);
219
- const body = node("tbody");
220
- for (const job of data.jobs) {
221
- const row = node("tr"), state = node("td"), summary = node("td"), action = node("td");
222
- state.append(badge(job.status));
223
- summary.append(node("p", "", job.summary || "Awaiting a result"));
224
- if (job.diagnostics.length || job.artifacts.length)
225
- summary.append(
226
- codeDetails("Diagnostics & artifacts", { diagnostics: job.diagnostics, artifacts: job.artifacts })
227
- );
228
- if (active(job.status)) {
229
- const stop = node("button", "danger", "Stop");
230
- stop.disabled = !connected || busy || !data.trusted;
231
- stop.onclick = () => {
232
- void act({ kind: "cancel-job", id: job.id });
233
- };
234
- action.append(stop);
235
- }
236
- row.append(node("td", "", job.operation), state, summary, action);
237
- body.append(row);
238
- }
239
- table.append(body);
240
- box.append(table);
241
- }
242
- const output = [card("Operation jobs", box, "Compile, export, tests and deployment work")];
243
- const deployments = node("div");
244
- if (!data.deployments.length) deployments.append(empty("No deployment runs recorded."));
245
- for (const deployment of data.deployments) {
246
- const row = node("div", "journal-entry");
247
- row.append(
248
- badge(deployment.status),
249
- node("p", "subtle", new Date(deployment.at).toLocaleString()),
250
- node("pre", "", deployment.details)
251
- );
252
- deployments.append(row);
253
- }
254
- output.push(
255
- card(
256
- "Deployment & import journal",
257
- deployments,
258
- "Actual durable runtime state; an unknown outcome remains unknown"
259
- )
260
- );
261
- return output;
262
- }
263
- function render(data) {
264
- const connectionsChanged = JSON.stringify(snapshot?.connections) !== JSON.stringify(data.connections);
265
- snapshot = data;
266
- connected = true;
267
- $("project-name").textContent = data.configuration?.application.alias ?? "Unconfigured workspace";
268
- $("project-path").textContent = data.project;
269
- $("version").textContent = data.version;
270
- $("connection").className = "badge good";
271
- $("connection").textContent = "Live";
272
- $("updated").textContent = "Updated " + new Date(data.updatedAt).toLocaleTimeString();
273
- $("connection-error").hidden = true;
274
- document.body.dataset.disconnected = "false";
275
- const nextPreferences = JSON.stringify(data.preferences);
276
- const nextSqlcl = JSON.stringify(data.sqlcl);
277
- if (!sqlclDirty && nextSqlcl !== sqlclSignature) {
278
- input("sqlcl-mode").value = data.sqlcl.mode;
279
- input("sqlcl-level").value = data.sqlcl.mcpRestrictLevel;
280
- input("sqlcl-transport").value = data.sqlcl.databaseTransport ?? "direct";
281
- sqlclControls();
282
- sqlclSignature = nextSqlcl;
283
- }
284
- if (!preferencesDirty && nextPreferences !== preferencesSignature) {
285
- input("default-browser-mode").value = data.preferences.browserMode;
286
- preferencesSignature = nextPreferences;
287
- }
288
- if (!initialized) {
289
- initialized = true;
290
- if (embedded) {
291
- input("connection-ords-password").disabled = true;
292
- $("connection-password-note").textContent = "Set the password in the local dashboard opened by apexrest panel open, or use CLI --password-file. Passwords are never sent through the embedded Codex panel.";
293
- }
294
- const environment = $("environment");
295
- for (const [name, env] of Object.entries(data.configuration?.environments ?? {})) {
296
- const option = node("option", "", name + " \xB7 " + env.kind);
297
- option.value = name;
298
- environment.append(option);
299
- }
300
- if (!data.configured)
301
- notice(
302
- "This folder has no apexrest.json. Initialize or open an APEXREST application project to run APEX operations."
303
- );
304
- else if (!data.trusted)
305
- notice(
306
- "This project is not trusted in APEXREST. The panel can display its state; actions require the existing project trust setup."
307
- );
308
- }
309
- draw(
310
- "connection-refs",
311
- [data.connections, data.configuration?.environments],
312
- () => Array.from(
313
- /* @__PURE__ */ new Set([
314
- ...Object.keys(data.connections),
315
- ...Object.values(data.configuration?.environments ?? {}).flatMap((env) => [
316
- env.readConnectionRef,
317
- env.deployConnectionRef
318
- ])
319
- ])
320
- ).map((name) => {
321
- const option = node("option");
322
- option.value = name;
323
- return option;
324
- })
325
- );
326
- draw(
327
- "metrics",
328
- [data.sqlcl, data.jobs, data.deployments, data.trusted],
329
- () => [
330
- ["APEX operations", String(data.jobs.filter((job) => active(job.status)).length), "Running or queued"],
331
- ["Recorded deployments", String(data.deployments.length), "Recent deployment journal entries"],
332
- ["Project access", data.trusted ? "Trusted" : "Read only", "Existing authorization gates apply"],
333
- [
334
- "Database connectivity",
335
- data.sqlcl.databaseTransport === "ords" ? "ORDS HTTP(S)" : "Direct Oracle",
336
- data.sqlcl.mode === "mcp" ? "SQLcl MCP \xB7 restriction " + data.sqlcl.mcpRestrictLevel : "SQLcl CLI"
337
- ]
338
- ].map(([label, value, sub]) => {
339
- const box = node("div", "metric");
340
- box.append(node("div", "subtle", label), node("div", "value", value), node("div", "subtle", sub));
341
- return box;
342
- })
343
- );
344
- draw("overview-live", [data.changes, data.configuration, data.trusted], () => {
345
- const columns = node("div", "two-columns"), changeBox = node("div");
346
- changeBox.append(
347
- data.changes.files.length ? node("pre", "", data.changes.files.join("\n")) : empty(
348
- data.changes.status === "available" ? "No uncommitted Git changes." : "Git status is unavailable for this folder."
349
- )
350
- );
351
- columns.append(
352
- card(
353
- "Project context",
354
- kv([
355
- ["Application", data.configuration?.application.alias],
356
- ["Source", data.configuration?.application.sourceDir],
357
- [
358
- "Environments",
359
- Object.keys(data.configuration?.environments ?? {}).join(", ") || "None configured"
360
- ],
361
- ["Required suites", data.configuration?.tests.requiredSuites.join(", ") || "None declared"],
362
- ["Trust", data.trusted ? "Trusted project" : "Not granted"]
363
- ])
364
- ),
365
- card("Working changes", changeBox)
366
- );
367
- return [
368
- card(
369
- "Current Codex session",
370
- node(
371
- "p",
372
- "subtle",
373
- "Describe changes and review results in your open Codex conversation. This panel runs APEX operations and manages project settings."
374
- )
375
- ),
376
- columns
377
- ];
378
- });
379
- draw("operations-live", [data.jobs, data.deployments, busy], () => operations(data));
380
- draw(
381
- "settings-live",
382
- [data.preferences, data.configuration, data.connections, data.toolchain, data.permissions],
383
- () => {
384
- const box = node("div");
385
- box.append(
386
- card(
387
- "Project & target settings",
388
- kv([
389
- ["Project", data.project],
390
- ["Source directory", data.configuration?.application.sourceDir],
391
- ["Artifacts", data.configuration?.artifacts.directory],
392
- [
393
- "Artifact retention",
394
- data.configuration ? data.configuration.artifacts.retentionDays + " days" : null
395
- ],
396
- ["Required suites", data.configuration?.tests.requiredSuites.join(", ") || "None declared"],
397
- ["Automated browser", data.configuration?.tests.defaultBrowser],
398
- [
399
- "Verification browser",
400
- data.preferences.browserMode === "external" ? "External system browser" : "Codex in-app browser"
401
- ],
402
- ["Active deploy/test grants", data.permissions.activeGrants.length]
403
- ])
404
- )
405
- );
406
- for (const [name, env] of Object.entries(data.configuration?.environments ?? {}))
407
- box.append(
408
- card(
409
- name + " \xB7 " + human(env.kind),
410
- kv([
411
- ["Application ID", env.applicationId],
412
- ["Workspace", env.workspace],
413
- ["Parsing schema", env.parsingSchema],
414
- ["Database", env.databaseIdentity.dbUniqueName],
415
- ["Service", env.databaseIdentity.serviceName],
416
- ["Read connection", env.readConnectionRef],
417
- ["Deploy connection", env.deployConnectionRef],
418
- ["Control mode", env.deploymentControl ?? "local"],
419
- ["Application URL", env.baseUrl]
420
- ])
421
- )
422
- );
423
- box.append(
424
- card(
425
- "Configuration details",
426
- codeDetails("Project, toolchain and connection references", {
427
- configuration: data.configuration,
428
- toolchain: data.toolchain,
429
- connectionReferences: data.connections,
430
- authorization: data.permissions
431
- })
432
- )
433
- );
434
- return [box];
435
- }
436
- );
437
- if (connectionsChanged) renderSavedConnections();
438
- controls();
439
- if (currentView === "settings" && input("sqlcl-transport").value === "direct" && savedConnectionsState === "idle")
440
- void loadSavedConnections();
441
- }
442
- var refreshing = false;
443
- async function refresh() {
444
- if (refreshing) return;
445
- refreshing = true;
446
- try {
447
- render(await api());
448
- } catch (error) {
449
- connected = false;
450
- $("connection").textContent = "Disconnected";
451
- $("connection").className = "badge bad";
452
- $("connection-error").hidden = false;
453
- $("connection-error").textContent = (error instanceof Error ? error.message : String(error)) + (snapshot ? " Showing the last received state." : "");
454
- document.body.dataset.disconnected = "true";
455
- controls();
456
- } finally {
457
- refreshing = false;
458
- }
459
- }
460
- var views = {
461
- overview: ["Workspace overview", "Project settings and APEX operations for your current Codex session."],
462
- operations: ["APEX operations", "Compile, verify and follow deployment state."],
463
- settings: ["Workspace settings", "Inspect configuration, database connections and browser preferences."]
464
- };
465
- function view(name) {
466
- currentView = name;
467
- document.querySelectorAll("[data-page]").forEach((page) => {
468
- page.hidden = page.dataset.page !== name;
469
- });
470
- document.querySelectorAll("[data-view]").forEach((button) => {
471
- if (button.dataset.view === name) button.setAttribute("aria-current", "page");
472
- else button.removeAttribute("aria-current");
473
- });
474
- const titles = views[name];
475
- $("view-title").textContent = titles[0];
476
- $("view-subtitle").textContent = titles[1];
477
- if (name === "settings" && input("sqlcl-transport").value === "direct") void loadSavedConnections();
478
- }
479
- document.querySelectorAll("[data-view]").forEach((button) => {
480
- button.onclick = () => view(button.dataset.view);
481
- });
482
- $("refresh").onclick = () => {
483
- void refresh();
484
- };
485
- $("preferences-form").oninput = () => {
486
- preferencesDirty = true;
487
- };
488
- $("preferences-form").onsubmit = (event) => {
489
- event.preventDefault();
490
- void act({
491
- kind: "preferences",
492
- settings: {
493
- browserMode: input("default-browser-mode").value
494
- }
495
- });
496
- };
497
- $("sqlcl-form").onsubmit = (event) => {
498
- event.preventDefault();
499
- void act({
500
- kind: "sqlcl",
501
- settings: {
502
- schemaVersion: 1,
503
- mode: input("sqlcl-mode").value,
504
- mcpRestrictLevel: input("sqlcl-level").value,
505
- databaseTransport: input("sqlcl-transport").value
506
- }
507
- });
508
- };
509
- function sqlclControls() {
510
- const ords = input("sqlcl-transport").value === "ords";
511
- if (ords) input("sqlcl-mode").value = "cli";
512
- $("sqlcl-mode").querySelector("option[value=mcp]").disabled = ords;
513
- input("sqlcl-level").disabled = input("sqlcl-mode").value !== "mcp";
514
- $("sqlcl-transport-note").textContent = ords ? "Connect through ORDS over HTTP(S) when the Oracle listener is unavailable. Uses SQLcl CLI and the ORDS settings for each connection reference below." : "Connect through the Oracle listener using saved SQLcl connections.";
515
- for (const [id, enabled] of [
516
- ["connection-direct-group", !ords],
517
- ["connection-ords-group", ords]
518
- ]) {
519
- const group = $(id);
520
- group.hidden = !enabled;
521
- group.disabled = !enabled;
522
- }
523
- input("connection-ords-password").disabled = embedded;
524
- $("connection-mode-note").textContent = ords ? "Editing ORDS HTTP(S) settings for the selected connection reference." : "Editing the direct Oracle connection for the selected connection reference.";
525
- $("connection-save").textContent = ords ? "Save ORDS connection" : "Save direct connection";
526
- controls();
527
- }
528
- $("sqlcl-form").oninput = (event) => {
529
- sqlclDirty = true;
530
- sqlclControls();
531
- if (event.target.id === "sqlcl-transport" && input("sqlcl-transport").value === "direct" && currentView === "settings")
532
- void loadSavedConnections();
533
- };
534
- $("saved-connections-refresh").onclick = () => {
535
- void loadSavedConnections(true);
536
- };
537
- input("connection-direct").onchange = () => renderSavedConnections();
538
- input("connection-ref").onchange = () => {
539
- const connection = snapshot?.connections[input("connection-ref").value.trim()];
540
- renderSavedConnections(connection?.name ?? "");
541
- input("connection-ords-url").value = connection?.ords?.url ?? "";
542
- input("connection-ords-user").value = connection?.ords?.username ?? "";
543
- input("connection-ords-password").value = "";
544
- };
545
- $("connection-form").onsubmit = (event) => {
546
- event.preventDefault();
547
- const ords = input("sqlcl-transport").value === "ords", sqlclName = input("connection-direct").value, ordsUrl = input("connection-ords-url").value.trim(), ordsUsername = input("connection-ords-user").value.trim(), password = input("connection-ords-password").value;
548
- if (ords && embedded && password) {
549
- notice("Enter the password in the local dashboard or use CLI --password-file.", true);
550
- return;
551
- }
552
- if (!ords && !sqlclName) {
553
- notice("Choose a saved SQLcl connection for this reference.", true);
554
- return;
555
- }
556
- if (ords && (!ordsUrl || !ordsUsername)) {
557
- notice("Enter the ORDS schema URL and your database username.", true);
558
- return;
559
- }
560
- void act({
561
- kind: "connection",
562
- name: input("connection-ref").value.trim(),
563
- ...!ords ? { sqlclName } : { ordsUrl, ordsUsername, ...password ? { password } : {} }
564
- });
565
- };
566
- $("validate").onclick = () => {
567
- void act({ kind: "validate" });
568
- };
569
- $("open-browser").onclick = () => {
570
- const env = input("environment").value;
571
- if (!env) {
572
- notice("Choose an explicit environment before opening its application.", true);
573
- return;
574
- }
575
- void act({ kind: "browser", env });
576
- };
577
- $("plan").onclick = () => {
578
- const env = input("environment").value;
579
- if (!env) {
580
- notice("Choose an explicit environment before planning a deployment.", true);
581
- return;
582
- }
583
- void act({ kind: "plan", env });
584
- };
585
- $("run-tests").onclick = () => {
586
- const suite = input("suite").value, env = input("environment").value;
587
- if (suite !== "unit" && !env) {
588
- notice("Choose an explicit environment for this test suite.", true);
589
- return;
590
- }
591
- void act({ kind: "test", suite, ...env ? { env } : {} });
592
- };
593
- controls();
594
- var initialView = launch.get("view");
595
- if (initialView && views[initialView]) view(initialView);
596
- var mark = document.querySelector(".brand-mark");
597
- if (mark) {
598
- const icon = node("img");
599
- icon.src = apexrest_logo_default;
600
- icon.alt = "";
601
- icon.width = 38;
602
- icon.height = 38;
603
- mark.replaceChildren(icon);
604
- }
605
- if (embedded) {
606
- void bridge("ui/initialize", {
607
- protocolVersion: "2026-01-26",
608
- appInfo: { name: "apexrest-panel", version: "1.0.0" },
609
- appCapabilities: {}
610
- }).then(() => {
611
- bridgeReady = true;
612
- window.parent.postMessage({ jsonrpc: "2.0", method: "ui/notifications/initialized", params: {} }, "*");
613
- void refresh();
614
- }).catch((error) => notice(String(error), true));
615
- } else void refresh();
616
- function scheduleRefresh() {
617
- setTimeout(
618
- () => {
619
- if (!document.hidden) void refresh();
620
- scheduleRefresh();
621
- },
622
- snapshot?.jobs.some((job) => active(job.status)) ? 2e3 : 1e4
623
- );
624
- }
625
- scheduleRefresh();
626
- document.addEventListener("visibilitychange", () => {
627
- if (!document.hidden) void refresh();
628
- });
629
- })();
@@ -1,5 +0,0 @@
1
- # Порожній застосунок
2
-
3
- [English](README.md) | Українська
4
-
5
- Це справжній стартовий приклад, згенерований Oracle SQLcl, з початковим `.apex/apexlang.json`. Нові проєкти запускають справжній генератор, а не вигадують метадані з цієї фікстури. Потрібні SQLcl 26.1.2+ і Java 21. Автентифікація залишається типовою для стартового застосунку Oracle. Локальну компіляцію перевірено; розгортання потребує явно налаштованих workspace/schema APEX 26.1+.
@@ -1,7 +0,0 @@
1
- # CRM клієнтів
2
-
3
- [English](README.md) | Українська
4
-
5
- Справжнє доповнення APEXlang до згенерованого Oracle стартового застосунку: звіт клієнтів (сторінка 10), дашборд (20), модальна форма (80), серверний пакет/тригер валідації, незмінна міграція таблиці, тести utPLSQL та автентифіковані браузерні CRUD з унікальними синтетичними записами. Типова автентифікація зберігається; налаштуйте окремий тестовий обліковий запис через дозволене адміністрування APEX. Паролів чи ORDS endpoint немає.
6
-
7
- `project init ./crm --template customer-crm` генерує свіжі метадані Oracle й застосовує перевірене доповнення. Локальна компіляція SQLcl пройшла на 26.1.2 з MMD 26.1.0+3102. Розгортання на живу ціль, тестові селектори й результати SQL ще потребують інтеграційних доказів. Обов’язкові набори — SQL та E2E. Налаштуйте середовище й дозволені test grants, забезпечте utPLSQL для SQL-набору, потім автентифікуйтеся інтерактивно. Службові таблиці потрібні лише для явно вибраної координації БД; локальна координація є типовою.
@@ -1,17 +0,0 @@
1
- -- Optional deploymentControl=database mode only. Default local mode needs no service tables.
2
- -- Review and run explicitly in the dedicated parsing/control schema.
3
- -- Never executed automatically by setup, plan, doctor or test.
4
- create table apexrest_deploy_locks (
5
- target_key varchar2(64) primary key,
6
- owner_id varchar2(36) not null,
7
- lease_until timestamp with time zone not null,
8
- phase varchar2(20) default 'preparing' not null check (phase in ('preparing','writing'))
9
- );
10
- create table apexrest_migrations (
11
- version varchar2(255) primary key,
12
- checksum varchar2(64) not null,
13
- status varchar2(20) check (status in ('started','succeeded','failed','outcome_unknown')),
14
- run_id varchar2(36) not null,
15
- started_at timestamp with time zone default systimestamp not null,
16
- finished_at timestamp with time zone
17
- );