apexrest 0.4.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 (461) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +18 -0
  3. package/README.md +201 -0
  4. package/README.uk.md +201 -0
  5. package/dist/codex-compat/.agents/plugins/marketplace.json +23 -0
  6. package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +32 -0
  7. package/dist/codex-compat/plugins/apexrest-apex/.mcp.json +11 -0
  8. package/dist/codex-compat/plugins/apexrest-apex/LICENSE +202 -0
  9. package/dist/codex-compat/plugins/apexrest-apex/NOTICE +18 -0
  10. package/dist/codex-compat/plugins/apexrest-apex/assets/apexrest-icon.svg +27 -0
  11. package/dist/codex-compat/plugins/apexrest-apex/assets/apexrest-logo.svg +27 -0
  12. package/dist/codex-compat/plugins/apexrest-apex/resources/ords/OrdsBridge.java +323 -0
  13. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/LICENCE.txt +118 -0
  14. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/bulbasaur.png +0 -0
  15. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/charmander.png +0 -0
  16. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/mewtwo.png +0 -0
  17. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/pikachu.png +0 -0
  18. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/sources.json +36 -0
  19. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/squirtle.png +0 -0
  20. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +68 -0
  21. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.css +805 -0
  22. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +951 -0
  23. package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/auth.mjs +17 -0
  24. package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/package-lock.json +57 -0
  25. package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/package.json +9 -0
  26. package/dist/codex-compat/plugins/apexrest-apex/resources/references/ORACLE-LICENSE.txt +35 -0
  27. package/dist/codex-compat/plugins/apexrest-apex/resources/references/index.json +54432 -0
  28. package/dist/codex-compat/plugins/apexrest-apex/resources/references/oracle-snapshot.json +648 -0
  29. package/dist/codex-compat/plugins/apexrest-apex/resources/references/search.json +1 -0
  30. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +210 -0
  31. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +1721 -0
  32. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/policy.schema.json +63 -0
  33. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +250 -0
  34. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/toolchain-lock.schema.json +118 -0
  35. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/vendor/mcp.schema.json +120 -0
  36. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/vendor/plugin.schema.json +65 -0
  37. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.md +5 -0
  38. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.uk.md +5 -0
  39. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/.apex/apexlang.json +3 -0
  40. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/application.apx +51 -0
  41. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/deployments/default.json +2 -0
  42. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/page-groups.apx +4 -0
  43. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p00000-global-page.apx +4 -0
  44. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p00001-home.apx +35 -0
  45. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p09999-login.apx +254 -0
  46. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/authentications.apx +5 -0
  47. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/authorizations.apx +11 -0
  48. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/breadcrumbs.apx +18 -0
  49. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/build-options.apx +4 -0
  50. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/component-settings.apx +92 -0
  51. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/lists.apx +81 -0
  52. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/lovs.apx +20 -0
  53. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-144-rounded.png +0 -0
  54. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-192.png +0 -0
  55. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-256-rounded.png +0 -0
  56. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-32.png +0 -0
  57. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-512.png +0 -0
  58. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files.apx +25 -0
  59. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/themes/universal-theme/theme.apx +57 -0
  60. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/supporting-objects/deinstall-script.sql +0 -0
  61. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/supporting-objects/supporting-objects.apx +9 -0
  62. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.md +7 -0
  63. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.uk.md +7 -0
  64. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00010-customers.apx +164 -0
  65. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00020-dashboard.apx +54 -0
  66. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00080-customer.apx +332 -0
  67. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/migrations/0001__customers.sql +10 -0
  68. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/packages/0010__customer_api.sql +28 -0
  69. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/packages/0020__customer_validation_trigger.sql +10 -0
  70. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/tests/e2e/customer-crud.spec.mjs +25 -0
  71. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/tests/sql/test_customers.sql +49 -0
  72. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/database-control/install.sql +17 -0
  73. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.md +9 -0
  74. package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.uk.md +9 -0
  75. package/dist/codex-compat/plugins/apexrest-apex/resources/testkit/apex.mjs +58 -0
  76. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@hono__node-server__LICENSE +21 -0
  77. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@isaacs__fs-minipass__LICENSE +15 -0
  78. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@modelcontextprotocol__sdk__LICENSE +21 -0
  79. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__LICENSE +202 -0
  80. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__NOTICE +5 -0
  81. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__node__LICENSE +21 -0
  82. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__yauzl__LICENSE +21 -0
  83. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +55 -0
  84. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +436 -0
  85. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__accepts__LICENSE +23 -0
  86. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ajv-formats__LICENSE +21 -0
  87. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ajv__LICENSE +22 -0
  88. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__body-parser__LICENSE +23 -0
  89. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__body-parser__node_modules__content-type__LICENSE +22 -0
  90. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__bytes__LICENSE +23 -0
  91. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__call-bind-apply-helpers__LICENSE +21 -0
  92. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__call-bound__LICENSE +21 -0
  93. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__chownr__LICENSE.md +63 -0
  94. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__content-disposition__LICENSE +22 -0
  95. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__content-type__LICENSE +22 -0
  96. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cookie-signature__LICENSE +22 -0
  97. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cookie__LICENSE +24 -0
  98. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cors__LICENSE +22 -0
  99. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cross-spawn__LICENSE +21 -0
  100. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__debug__LICENSE +20 -0
  101. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__depd__LICENSE +22 -0
  102. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__dunder-proto__LICENSE +21 -0
  103. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ee-first__LICENSE +22 -0
  104. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__encodeurl__LICENSE +22 -0
  105. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-define-property__LICENSE +21 -0
  106. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-errors__LICENSE +21 -0
  107. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-object-atoms__LICENSE +21 -0
  108. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__esbuild__LICENSE.md +21 -0
  109. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__escape-html__LICENSE +24 -0
  110. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__etag__LICENSE +22 -0
  111. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__eventsource-parser__LICENSE +21 -0
  112. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__eventsource__LICENSE +22 -0
  113. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__express-rate-limit__license +21 -0
  114. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__express__LICENSE +24 -0
  115. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fast-deep-equal__LICENSE +21 -0
  116. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fast-uri__LICENSE +30 -0
  117. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fflate__LICENSE +21 -0
  118. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__finalhandler__LICENSE +22 -0
  119. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__forwarded__LICENSE +22 -0
  120. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fresh__LICENSE +23 -0
  121. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__function-bind__LICENSE +20 -0
  122. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__get-intrinsic__LICENSE +21 -0
  123. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__get-proto__LICENSE +21 -0
  124. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__gopd__LICENSE +21 -0
  125. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__has-symbols__LICENSE +21 -0
  126. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__hasown__LICENSE +21 -0
  127. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__hono__LICENSE +21 -0
  128. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__http-errors__LICENSE +23 -0
  129. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__iconv-lite__LICENSE +21 -0
  130. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__inherits__LICENSE +16 -0
  131. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ip-address__LICENSE +19 -0
  132. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ipaddr.js__LICENSE +19 -0
  133. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__is-promise__LICENSE +19 -0
  134. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__isexe__LICENSE +15 -0
  135. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__jose__LICENSE.md +21 -0
  136. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__json-schema-traverse__LICENSE +21 -0
  137. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__json-schema-typed__LICENSE.md +57 -0
  138. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__marked__LICENSE +44 -0
  139. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__math-intrinsics__LICENSE +21 -0
  140. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__media-typer__LICENSE +22 -0
  141. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__merge-descriptors__license +11 -0
  142. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__mime-db__LICENSE +23 -0
  143. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__mime-types__LICENSE +23 -0
  144. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__minipass__LICENSE.md +55 -0
  145. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__minizlib__LICENSE +26 -0
  146. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ms__license.md +21 -0
  147. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__negotiator__LICENSE +24 -0
  148. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__negotiator__node_modules__content-type__LICENSE +22 -0
  149. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__object-assign__license +21 -0
  150. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__object-inspect__LICENSE +21 -0
  151. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__on-finished__LICENSE +23 -0
  152. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__once__LICENSE +15 -0
  153. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__parseurl__LICENSE +24 -0
  154. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__path-key__license +9 -0
  155. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__path-to-regexp__LICENSE +21 -0
  156. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__pend__LICENSE +23 -0
  157. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__pkce-challenge__LICENSE +21 -0
  158. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__LICENSE +202 -0
  159. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__NOTICE +5 -0
  160. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__LICENSE +202 -0
  161. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__NOTICE +5 -0
  162. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__prettier__LICENSE +7 -0
  163. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__proxy-addr__LICENSE +22 -0
  164. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__qs__LICENSE.md +29 -0
  165. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__range-parser__LICENSE +23 -0
  166. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__raw-body__LICENSE +22 -0
  167. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__require-from-string__license +21 -0
  168. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__router__LICENSE +23 -0
  169. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__safer-buffer__LICENSE +21 -0
  170. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__send__LICENSE +23 -0
  171. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__serve-static__LICENSE +25 -0
  172. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__setprototypeof__LICENSE +13 -0
  173. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__shebang-command__license +9 -0
  174. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__shebang-regex__license +9 -0
  175. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-list__LICENSE +21 -0
  176. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-map__LICENSE +21 -0
  177. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-weakmap__LICENSE +21 -0
  178. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel__LICENSE +21 -0
  179. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__statuses__LICENSE +23 -0
  180. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__tar__LICENSE.md +55 -0
  181. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__toidentifier__LICENSE +21 -0
  182. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__type-is__LICENSE +23 -0
  183. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__type-is__node_modules__content-type__LICENSE +22 -0
  184. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__LICENSE +55 -0
  185. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__NOTICE.txt +436 -0
  186. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__undici-types__LICENSE +21 -0
  187. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__unpipe__LICENSE +22 -0
  188. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__vary__LICENSE +22 -0
  189. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__which__LICENSE +15 -0
  190. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__wrappy__LICENSE +15 -0
  191. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yallist__LICENSE.md +63 -0
  192. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yauzl__LICENSE +21 -0
  193. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__zod-to-json-schema__LICENSE +15 -0
  194. package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__zod__LICENSE +21 -0
  195. package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/compatibility.json +50 -0
  196. package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/sources.lock.json +14 -0
  197. package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/toolchain.lock.json +204 -0
  198. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +226 -0
  199. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2SZCZZ3J.mjs +37111 -0
  200. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2VGE5Y5J.mjs +994 -0
  201. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-3GSS6SJH.mjs +1424 -0
  202. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5GOWABKB.mjs +409 -0
  203. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ARMO5ZAQ.mjs +25 -0
  204. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ED2YPDPS.mjs +1123 -0
  205. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-FPOEB42H.mjs +100 -0
  206. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-GFRSRK3K.mjs +16 -0
  207. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ICWYSHJ7.mjs +19 -0
  208. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-IPU64TJI.mjs +291 -0
  209. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-JWX4UQAZ.mjs +14 -0
  210. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-K3KT6RZY.mjs +1064 -0
  211. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-QLRGI23I.mjs +1307 -0
  212. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-RF4XQO6I.mjs +13 -0
  213. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-VPCUV5QA.mjs +237 -0
  214. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-WMJTK7ZB.mjs +201 -0
  215. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-WROK6RQH.mjs +200 -0
  216. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-XDJEGHUX.mjs +1179 -0
  217. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YK34QNHH.mjs +15 -0
  218. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-Z6Y72JVG.mjs +37 -0
  219. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ZQFJ2BNZ.mjs +329 -0
  220. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +15 -0
  221. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +32 -0
  222. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/agents/openai.yaml +4 -0
  223. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/assets/p00020-filtered-components.apx +152 -0
  224. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/component-routes.md +35 -0
  225. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/native-dashboard.md +11 -0
  226. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/SKILL.md +11 -0
  227. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/agents/openai.yaml +4 -0
  228. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/SKILL.md +11 -0
  229. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/agents/openai.yaml +4 -0
  230. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +19 -0
  231. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/agents/openai.yaml +4 -0
  232. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/SKILL.md +38 -0
  233. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/agents/openai.yaml +4 -0
  234. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +27 -0
  235. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/agents/openai.yaml +4 -0
  236. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +22 -0
  237. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/SKILL.md +20 -0
  238. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/agents/openai.yaml +4 -0
  239. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +9 -0
  240. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/agents/openai.yaml +4 -0
  241. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/SKILL.md +9 -0
  242. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/agents/openai.yaml +4 -0
  243. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/SKILL.md +15 -0
  244. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/agents/openai.yaml +4 -0
  245. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/references/ords.md +3 -0
  246. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/SKILL.md +24 -0
  247. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/agents/openai.yaml +4 -0
  248. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/SKILL.md +27 -0
  249. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/agents/openai.yaml +4 -0
  250. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +17 -0
  251. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/agents/openai.yaml +7 -0
  252. package/dist/resources/ords/OrdsBridge.java +323 -0
  253. package/dist/resources/panel/assets/LICENCE.txt +118 -0
  254. package/dist/resources/panel/assets/bulbasaur.png +0 -0
  255. package/dist/resources/panel/assets/charmander.png +0 -0
  256. package/dist/resources/panel/assets/mewtwo.png +0 -0
  257. package/dist/resources/panel/assets/pikachu.png +0 -0
  258. package/dist/resources/panel/assets/sources.json +36 -0
  259. package/dist/resources/panel/assets/squirtle.png +0 -0
  260. package/dist/resources/panel/index.html +68 -0
  261. package/dist/resources/panel/panel.css +805 -0
  262. package/dist/resources/panel/panel.js +951 -0
  263. package/dist/resources/playwright/auth.mjs +17 -0
  264. package/dist/resources/playwright/package-lock.json +57 -0
  265. package/dist/resources/playwright/package.json +9 -0
  266. package/dist/resources/references/ORACLE-LICENSE.txt +35 -0
  267. package/dist/resources/references/index.json +54432 -0
  268. package/dist/resources/references/oracle-snapshot.json +648 -0
  269. package/dist/resources/references/search.json +1 -0
  270. package/dist/resources/schemas/deploy-plan.schema.json +210 -0
  271. package/dist/resources/schemas/operations.schema.json +1721 -0
  272. package/dist/resources/schemas/policy.schema.json +63 -0
  273. package/dist/resources/schemas/project.schema.json +250 -0
  274. package/dist/resources/schemas/toolchain-lock.schema.json +118 -0
  275. package/dist/resources/schemas/vendor/mcp.schema.json +120 -0
  276. package/dist/resources/schemas/vendor/plugin.schema.json +65 -0
  277. package/dist/resources/templates/blank-app/README.md +5 -0
  278. package/dist/resources/templates/blank-app/README.uk.md +5 -0
  279. package/dist/resources/templates/blank-app/application/.apex/apexlang.json +3 -0
  280. package/dist/resources/templates/blank-app/application/application.apx +51 -0
  281. package/dist/resources/templates/blank-app/application/deployments/default.json +2 -0
  282. package/dist/resources/templates/blank-app/application/page-groups.apx +4 -0
  283. package/dist/resources/templates/blank-app/application/pages/p00000-global-page.apx +4 -0
  284. package/dist/resources/templates/blank-app/application/pages/p00001-home.apx +35 -0
  285. package/dist/resources/templates/blank-app/application/pages/p09999-login.apx +254 -0
  286. package/dist/resources/templates/blank-app/application/shared-components/authentications.apx +5 -0
  287. package/dist/resources/templates/blank-app/application/shared-components/authorizations.apx +11 -0
  288. package/dist/resources/templates/blank-app/application/shared-components/breadcrumbs.apx +18 -0
  289. package/dist/resources/templates/blank-app/application/shared-components/build-options.apx +4 -0
  290. package/dist/resources/templates/blank-app/application/shared-components/component-settings.apx +92 -0
  291. package/dist/resources/templates/blank-app/application/shared-components/lists.apx +81 -0
  292. package/dist/resources/templates/blank-app/application/shared-components/lovs.apx +20 -0
  293. package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-144-rounded.png +0 -0
  294. package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-192.png +0 -0
  295. package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-256-rounded.png +0 -0
  296. package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-32.png +0 -0
  297. package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-512.png +0 -0
  298. package/dist/resources/templates/blank-app/application/shared-components/static-files.apx +25 -0
  299. package/dist/resources/templates/blank-app/application/shared-components/themes/universal-theme/theme.apx +57 -0
  300. package/dist/resources/templates/blank-app/application/supporting-objects/deinstall-script.sql +0 -0
  301. package/dist/resources/templates/blank-app/application/supporting-objects/supporting-objects.apx +9 -0
  302. package/dist/resources/templates/customer-crm/README.md +7 -0
  303. package/dist/resources/templates/customer-crm/README.uk.md +7 -0
  304. package/dist/resources/templates/customer-crm/apex-overlay/pages/p00010-customers.apx +164 -0
  305. package/dist/resources/templates/customer-crm/apex-overlay/pages/p00020-dashboard.apx +54 -0
  306. package/dist/resources/templates/customer-crm/apex-overlay/pages/p00080-customer.apx +332 -0
  307. package/dist/resources/templates/customer-crm/project/src/database/migrations/0001__customers.sql +10 -0
  308. package/dist/resources/templates/customer-crm/project/src/database/packages/0010__customer_api.sql +28 -0
  309. package/dist/resources/templates/customer-crm/project/src/database/packages/0020__customer_validation_trigger.sql +10 -0
  310. package/dist/resources/templates/customer-crm/project/tests/e2e/customer-crud.spec.mjs +25 -0
  311. package/dist/resources/templates/customer-crm/project/tests/sql/test_customers.sql +49 -0
  312. package/dist/resources/templates/database-control/install.sql +17 -0
  313. package/dist/resources/templates/existing-app/README.md +9 -0
  314. package/dist/resources/templates/existing-app/README.uk.md +9 -0
  315. package/dist/resources/testkit/apex.mjs +58 -0
  316. package/dist/resources/third-party/node_modules__@hono__node-server__LICENSE +21 -0
  317. package/dist/resources/third-party/node_modules__@isaacs__fs-minipass__LICENSE +15 -0
  318. package/dist/resources/third-party/node_modules__@modelcontextprotocol__sdk__LICENSE +21 -0
  319. package/dist/resources/third-party/node_modules__@playwright__test__LICENSE +202 -0
  320. package/dist/resources/third-party/node_modules__@playwright__test__NOTICE +5 -0
  321. package/dist/resources/third-party/node_modules__@types__node__LICENSE +21 -0
  322. package/dist/resources/third-party/node_modules__@types__yauzl__LICENSE +21 -0
  323. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +55 -0
  324. package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +436 -0
  325. package/dist/resources/third-party/node_modules__accepts__LICENSE +23 -0
  326. package/dist/resources/third-party/node_modules__ajv-formats__LICENSE +21 -0
  327. package/dist/resources/third-party/node_modules__ajv__LICENSE +22 -0
  328. package/dist/resources/third-party/node_modules__body-parser__LICENSE +23 -0
  329. package/dist/resources/third-party/node_modules__body-parser__node_modules__content-type__LICENSE +22 -0
  330. package/dist/resources/third-party/node_modules__bytes__LICENSE +23 -0
  331. package/dist/resources/third-party/node_modules__call-bind-apply-helpers__LICENSE +21 -0
  332. package/dist/resources/third-party/node_modules__call-bound__LICENSE +21 -0
  333. package/dist/resources/third-party/node_modules__chownr__LICENSE.md +63 -0
  334. package/dist/resources/third-party/node_modules__content-disposition__LICENSE +22 -0
  335. package/dist/resources/third-party/node_modules__content-type__LICENSE +22 -0
  336. package/dist/resources/third-party/node_modules__cookie-signature__LICENSE +22 -0
  337. package/dist/resources/third-party/node_modules__cookie__LICENSE +24 -0
  338. package/dist/resources/third-party/node_modules__cors__LICENSE +22 -0
  339. package/dist/resources/third-party/node_modules__cross-spawn__LICENSE +21 -0
  340. package/dist/resources/third-party/node_modules__debug__LICENSE +20 -0
  341. package/dist/resources/third-party/node_modules__depd__LICENSE +22 -0
  342. package/dist/resources/third-party/node_modules__dunder-proto__LICENSE +21 -0
  343. package/dist/resources/third-party/node_modules__ee-first__LICENSE +22 -0
  344. package/dist/resources/third-party/node_modules__encodeurl__LICENSE +22 -0
  345. package/dist/resources/third-party/node_modules__es-define-property__LICENSE +21 -0
  346. package/dist/resources/third-party/node_modules__es-errors__LICENSE +21 -0
  347. package/dist/resources/third-party/node_modules__es-object-atoms__LICENSE +21 -0
  348. package/dist/resources/third-party/node_modules__esbuild__LICENSE.md +21 -0
  349. package/dist/resources/third-party/node_modules__escape-html__LICENSE +24 -0
  350. package/dist/resources/third-party/node_modules__etag__LICENSE +22 -0
  351. package/dist/resources/third-party/node_modules__eventsource-parser__LICENSE +21 -0
  352. package/dist/resources/third-party/node_modules__eventsource__LICENSE +22 -0
  353. package/dist/resources/third-party/node_modules__express-rate-limit__license +21 -0
  354. package/dist/resources/third-party/node_modules__express__LICENSE +24 -0
  355. package/dist/resources/third-party/node_modules__fast-deep-equal__LICENSE +21 -0
  356. package/dist/resources/third-party/node_modules__fast-uri__LICENSE +30 -0
  357. package/dist/resources/third-party/node_modules__fflate__LICENSE +21 -0
  358. package/dist/resources/third-party/node_modules__finalhandler__LICENSE +22 -0
  359. package/dist/resources/third-party/node_modules__forwarded__LICENSE +22 -0
  360. package/dist/resources/third-party/node_modules__fresh__LICENSE +23 -0
  361. package/dist/resources/third-party/node_modules__function-bind__LICENSE +20 -0
  362. package/dist/resources/third-party/node_modules__get-intrinsic__LICENSE +21 -0
  363. package/dist/resources/third-party/node_modules__get-proto__LICENSE +21 -0
  364. package/dist/resources/third-party/node_modules__gopd__LICENSE +21 -0
  365. package/dist/resources/third-party/node_modules__has-symbols__LICENSE +21 -0
  366. package/dist/resources/third-party/node_modules__hasown__LICENSE +21 -0
  367. package/dist/resources/third-party/node_modules__hono__LICENSE +21 -0
  368. package/dist/resources/third-party/node_modules__http-errors__LICENSE +23 -0
  369. package/dist/resources/third-party/node_modules__iconv-lite__LICENSE +21 -0
  370. package/dist/resources/third-party/node_modules__inherits__LICENSE +16 -0
  371. package/dist/resources/third-party/node_modules__ip-address__LICENSE +19 -0
  372. package/dist/resources/third-party/node_modules__ipaddr.js__LICENSE +19 -0
  373. package/dist/resources/third-party/node_modules__is-promise__LICENSE +19 -0
  374. package/dist/resources/third-party/node_modules__isexe__LICENSE +15 -0
  375. package/dist/resources/third-party/node_modules__jose__LICENSE.md +21 -0
  376. package/dist/resources/third-party/node_modules__json-schema-traverse__LICENSE +21 -0
  377. package/dist/resources/third-party/node_modules__json-schema-typed__LICENSE.md +57 -0
  378. package/dist/resources/third-party/node_modules__marked__LICENSE +44 -0
  379. package/dist/resources/third-party/node_modules__math-intrinsics__LICENSE +21 -0
  380. package/dist/resources/third-party/node_modules__media-typer__LICENSE +22 -0
  381. package/dist/resources/third-party/node_modules__merge-descriptors__license +11 -0
  382. package/dist/resources/third-party/node_modules__mime-db__LICENSE +23 -0
  383. package/dist/resources/third-party/node_modules__mime-types__LICENSE +23 -0
  384. package/dist/resources/third-party/node_modules__minipass__LICENSE.md +55 -0
  385. package/dist/resources/third-party/node_modules__minizlib__LICENSE +26 -0
  386. package/dist/resources/third-party/node_modules__ms__license.md +21 -0
  387. package/dist/resources/third-party/node_modules__negotiator__LICENSE +24 -0
  388. package/dist/resources/third-party/node_modules__negotiator__node_modules__content-type__LICENSE +22 -0
  389. package/dist/resources/third-party/node_modules__object-assign__license +21 -0
  390. package/dist/resources/third-party/node_modules__object-inspect__LICENSE +21 -0
  391. package/dist/resources/third-party/node_modules__on-finished__LICENSE +23 -0
  392. package/dist/resources/third-party/node_modules__once__LICENSE +15 -0
  393. package/dist/resources/third-party/node_modules__parseurl__LICENSE +24 -0
  394. package/dist/resources/third-party/node_modules__path-key__license +9 -0
  395. package/dist/resources/third-party/node_modules__path-to-regexp__LICENSE +21 -0
  396. package/dist/resources/third-party/node_modules__pend__LICENSE +23 -0
  397. package/dist/resources/third-party/node_modules__pkce-challenge__LICENSE +21 -0
  398. package/dist/resources/third-party/node_modules__playwright-core__LICENSE +202 -0
  399. package/dist/resources/third-party/node_modules__playwright-core__NOTICE +5 -0
  400. package/dist/resources/third-party/node_modules__playwright__LICENSE +202 -0
  401. package/dist/resources/third-party/node_modules__playwright__NOTICE +5 -0
  402. package/dist/resources/third-party/node_modules__prettier__LICENSE +7 -0
  403. package/dist/resources/third-party/node_modules__proxy-addr__LICENSE +22 -0
  404. package/dist/resources/third-party/node_modules__qs__LICENSE.md +29 -0
  405. package/dist/resources/third-party/node_modules__range-parser__LICENSE +23 -0
  406. package/dist/resources/third-party/node_modules__raw-body__LICENSE +22 -0
  407. package/dist/resources/third-party/node_modules__require-from-string__license +21 -0
  408. package/dist/resources/third-party/node_modules__router__LICENSE +23 -0
  409. package/dist/resources/third-party/node_modules__safer-buffer__LICENSE +21 -0
  410. package/dist/resources/third-party/node_modules__send__LICENSE +23 -0
  411. package/dist/resources/third-party/node_modules__serve-static__LICENSE +25 -0
  412. package/dist/resources/third-party/node_modules__setprototypeof__LICENSE +13 -0
  413. package/dist/resources/third-party/node_modules__shebang-command__license +9 -0
  414. package/dist/resources/third-party/node_modules__shebang-regex__license +9 -0
  415. package/dist/resources/third-party/node_modules__side-channel-list__LICENSE +21 -0
  416. package/dist/resources/third-party/node_modules__side-channel-map__LICENSE +21 -0
  417. package/dist/resources/third-party/node_modules__side-channel-weakmap__LICENSE +21 -0
  418. package/dist/resources/third-party/node_modules__side-channel__LICENSE +21 -0
  419. package/dist/resources/third-party/node_modules__statuses__LICENSE +23 -0
  420. package/dist/resources/third-party/node_modules__tar__LICENSE.md +55 -0
  421. package/dist/resources/third-party/node_modules__toidentifier__LICENSE +21 -0
  422. package/dist/resources/third-party/node_modules__type-is__LICENSE +23 -0
  423. package/dist/resources/third-party/node_modules__type-is__node_modules__content-type__LICENSE +22 -0
  424. package/dist/resources/third-party/node_modules__typescript__LICENSE +55 -0
  425. package/dist/resources/third-party/node_modules__typescript__NOTICE.txt +436 -0
  426. package/dist/resources/third-party/node_modules__undici-types__LICENSE +21 -0
  427. package/dist/resources/third-party/node_modules__unpipe__LICENSE +22 -0
  428. package/dist/resources/third-party/node_modules__vary__LICENSE +22 -0
  429. package/dist/resources/third-party/node_modules__which__LICENSE +15 -0
  430. package/dist/resources/third-party/node_modules__wrappy__LICENSE +15 -0
  431. package/dist/resources/third-party/node_modules__yallist__LICENSE.md +63 -0
  432. package/dist/resources/third-party/node_modules__yauzl__LICENSE +21 -0
  433. package/dist/resources/third-party/node_modules__zod-to-json-schema__LICENSE +15 -0
  434. package/dist/resources/third-party/node_modules__zod__LICENSE +21 -0
  435. package/dist/resources/toolchains/compatibility.json +50 -0
  436. package/dist/resources/toolchains/sources.lock.json +14 -0
  437. package/dist/resources/toolchains/toolchain.lock.json +204 -0
  438. package/dist/runtime/apexrest.mjs +226 -0
  439. package/dist/runtime/chunk-2SZCZZ3J.mjs +37111 -0
  440. package/dist/runtime/chunk-2VGE5Y5J.mjs +994 -0
  441. package/dist/runtime/chunk-3GSS6SJH.mjs +1424 -0
  442. package/dist/runtime/chunk-5GOWABKB.mjs +409 -0
  443. package/dist/runtime/chunk-ARMO5ZAQ.mjs +25 -0
  444. package/dist/runtime/chunk-ED2YPDPS.mjs +1123 -0
  445. package/dist/runtime/chunk-FPOEB42H.mjs +100 -0
  446. package/dist/runtime/chunk-GFRSRK3K.mjs +16 -0
  447. package/dist/runtime/chunk-ICWYSHJ7.mjs +19 -0
  448. package/dist/runtime/chunk-IPU64TJI.mjs +291 -0
  449. package/dist/runtime/chunk-JWX4UQAZ.mjs +14 -0
  450. package/dist/runtime/chunk-K3KT6RZY.mjs +1064 -0
  451. package/dist/runtime/chunk-QLRGI23I.mjs +1307 -0
  452. package/dist/runtime/chunk-RF4XQO6I.mjs +13 -0
  453. package/dist/runtime/chunk-VPCUV5QA.mjs +237 -0
  454. package/dist/runtime/chunk-WMJTK7ZB.mjs +201 -0
  455. package/dist/runtime/chunk-WROK6RQH.mjs +200 -0
  456. package/dist/runtime/chunk-XDJEGHUX.mjs +1179 -0
  457. package/dist/runtime/chunk-YK34QNHH.mjs +15 -0
  458. package/dist/runtime/chunk-Z6Y72JVG.mjs +37 -0
  459. package/dist/runtime/chunk-ZQFJ2BNZ.mjs +329 -0
  460. package/dist/runtime/mcp.mjs +15 -0
  461. package/package.json +70 -0
@@ -0,0 +1,951 @@
1
+ (() => {
2
+ // packages/core/src/team-identity.ts
3
+ var teamIdentities = {
4
+ manager: { name: "Mewtwo", pokemon: 150, label: "Project manager" },
5
+ "developer-1": { name: "Pikachu", pokemon: 25, label: "Developer 1" },
6
+ "developer-2": { name: "Charmander", pokemon: 4, label: "Developer 2" },
7
+ "developer-3": { name: "Bulbasaur", pokemon: 1, label: "Developer 3" },
8
+ qa: { name: "Squirtle", pokemon: 7, label: "Independent QA" }
9
+ };
10
+ var teamLabel = (role) => role === "user" ? "You" : teamIdentities[role].name + " \xB7 " + teamIdentities[role].label;
11
+
12
+ // packages/panel/assets/mewtwo.png
13
+ var mewtwo_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAJFBMVEUAAAAAAAA5IFI5OVJqMZyDe5yUQb20Su60rMXe1ebu5u7////IHWIfAAAAAXRSTlMAQObYZgAAAytJREFUWMPtlrFu2zAQhqmoKjpKsQXIY42gswMmhYUuMSo4HaOqBKysdfUIzWyoBKhugSuA17VL7Vfoy/VIKXYLWBQ9FF18i5T4Pt79pzuShJzsZCf7r/aCM/Xw2J0l4MFaPXKo238kSdIDwJ0GeOtfFEVyYwYmChAN8KxIgqRYmkIA1Ixeg2g0zJcBIcPCNwA5sA3UUkyaADP1GM5MQL3dQi6FXvR5s7ZjBO4RgBaYLxsgMeTEtgoQLdAuPewGvHy73SggVH+9sgDuQZkQK6X5KRUTgPl83zAEsExnO6BbtYvA9keNQLkHnMQA/ISvmze/hCgXEzuAQ/74WgHsT8BQ12lVpZ9Q9CXjCMz6gWtVIiH4JMx2wNAEONq/pCRMCbmwAQTnjDLfYehz0TgaAS9kA8pSEv4FmLrPGfguS50AM2pFoGYTQHB+eBqJwBbwcOQqKbiK0ORkrKoaOTRZBraAG4NE4JoFDTDrGVEnjKECKBnLw70IQ1EjHkuMUGYsf/TJ7lt3+o8ki+saREhpDo8BOQs6088mxMtiENStueChT4IRgB/LrmFjgtMYYE2x/Rilqe4qWMdwdRjIqK7mCv1JJDhTAB2tp0IeBjxVGZAD/SPqUH3kQTlF9HBKblVjPo9NYSsEMIKLuxnP6GHRriizXLbz+CXhKgQC+LzqqBKdUMn1T+7lvHjHKPcdkYbdAK7HqX6Jvz0Uy6ySKcnOX2aLdRfgQNDKv30oChTEz8dJElRw2TmZfturLVCneLq97QZI8NTct5+Lj9ACybSc9R2iMC8agA1ViKsbW4BrwDxrO2CmAZ3TrO9gzyUCyQjU17YIgJ3HP6BbKFgD9AbAS8Z75ccaYNYbgLiMjVUIDQT9/mp82PhCh0gDq+sMhvDPxuMB00NhB+BxqAk7gERMXzNw+04tAd4AjiWAw9e+hUcDdiKm+tLQ5GQDuJXMjgLwOtnOHqr3LToJN+4WcIToVe0tKpCrtiMcLrJewWUOTwkRJxLtJzQAuN2v9vuI4H0ALip2PhGIat2XkxMMdq8VLPBEsb/mIxCBPAIg0crZC7IKgcfcMQFOdrJ/ar8BJycwp3/4ZdUAAAAASUVORK5CYII=";
14
+
15
+ // packages/panel/assets/pikachu.png
16
+ var pikachu_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAKlBMVEUAAAAAAAApKSlBQUpiMQhzc4OcUgDFIBjelADmWkH2vSD25lL/9qT////Vai+KAAAAAXRSTlMAQObYZgAAAdlJREFUWMPtlsFqwkAQhjclhB6ztRRReqiHXnoSbz0piLX2JcwliD6A0JsgEuoDlNJTQKzsnkJpSDN9A3PpG3U2ST12J4dCKftjNML/MTObndkwZmRkZPTX5Vb0Wxe/DrQq5nRSHehWBK4PQKtFAWpiU9wctTodygI0SsCZQqfTJgK+P3ZmgAClfltsJ9k+Qf8bKQACQZZlgHptqwC+lhh+ZNleAVz5HRjrAEwGUi4Tr/wX61JaSMzm8wrygo9BD5wjENVKYI3hNDnZbRiqlHJfAHrAuVQmeH9eqooJwB3AABN5egyL+rVF3MrldDtJ5/OwDKADbkSuHJAVgJf7kE1FTmg2lCNKheoOCa7froU2OSo5owLSHeG33s+aJQCuTfKzJhQBsNjRlpEAJHZSrY4tKBNkHeNSqk3XZXUKYEFSApH18D1BfgYAmwZ7CKJhsOsRgHUB7CAMgj5lGM9AIfgJ6wtGA2Ko45UK7lPmUjPGmRThlQr3zCMAM/BxhXz1MLhPAKyiBwCkEH2PkJIlCn+apiKklGDlPQBCYoSQdKBMxUG0o6hx8O9oh53VEAHnqndIj42x/kotpjWYrGgB7Djp5c6R8GgR+Gn5G0cVXwl41bcUIyMjo/+qLw92FGczGN4XAAAAAElFTkSuQmCC";
17
+
18
+ // packages/panel/assets/charmander.png
19
+ var charmander_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAALVBMVEUAAAAIOYsQEBAYi7QxrO6LKQDeUjnmOQDmrFr2pAD/lEH/xWL/1Qj/1Xv///8NIPGPAAAAAXRSTlMAQObYZgAAAchJREFUWMPtlb9Lw0AUx49A7FwQB6dyYggdOol/h8ulpaDDQY4QF7dQ6FSwHILgFgouFsxwgoOj/gFFyCwi3CJ08a/wXX6s3ouTyH2HJMP75N67+753hDg5OTk5/UntxKxbfKpUJ+JcgQYdFnh5/g2wxgPpg1JFJwD+n6oCn9OeAfoCDxwDcNeP8MAXAI8HHYChAXZb4MIa7+8DcH/U1jC3A9UxiC6A2dS4AXq39hqmsEAccfgCB/bKGytAwasjwQlj3KywsWV0QijNIhEzpQywebUAXsyCmIkADFJAHVlWWjbWSxUfFlQI2ChKSJbP85+BACI5xINM3fNNaSnCC0QjbjZ2VtoAQ8SJFIJVBzFblTmxErGUy7TuoF6+yqwH4UVav7ctl43t9iMTrXXbcv4YYfBTAzRzw39CA3VOPmIa+NcAXDXAFANAvP6oAWYMZRMzwJspwmeYceMXJqUlmJVBayQIQCVaS3DrGhyYLDBTYyKlAQqwlRxggHUNiEDIBWouFaGUEfRPKBeYceZBQ4QyAoOHlyeo0Qepc3oID4aLB8D0TiQ4crZ6dXNOFRYYnVVTL0LfKR6l1Wu7/ex2vVM6IE5OTk7/Ud/V9spBc5Q2fAAAAABJRU5ErkJggg==";
20
+
21
+ // packages/panel/assets/bulbasaur.png
22
+ var bulbasaur_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAQEBAYSkoxc3M5lJRSYili1bRzrDGD7sWk1UGsADG9/3PNzc3uIDn/amL///87EAzGAAAAAXRSTlMAQObYZgAAAZ1JREFUWMPtlL9Lw0AUx9NUce1JwMGlLUfbrdAGcVAkl0fI5iSloxiOrg4hiJuWcP+AlPwLASm4lWzB0dG9/0HAunbwpbjfq6PcZ/5+8n5weZZlMBgMhv/F4b75KaOHj5L4ZppMWuT8Y1Gssge6gPmiSLKYINjtukBRvJ0kK5IQPrXHyGhwWxTZyz1BUGOlUjlQOyHRlwhDpSCUKq2FBWFqX6k5hKmU0Wkt6Hs6xwKgdsIqW8Q0IVQpoJBlSawdojmYKRz6+aMHXrYgCPZnqubh7HJZgtdPiALUwmYnTLTCxTpUoObrfAtCUISrZYAzRMtqCz7040S7pbM8kLjSvHoHANHXCx35C/Da0D8NfiyDO8yPGLjQhY7+dV/nUt512DdgiS4X+tfK/bzGBYEdcWhrhYbjv1aVC54D2BRBQAOnBeaAK7CKR/hHPYagwz0cgiAcyAg3KiQIhyZYrsQoD6I9BPAYh1oQQDlMgYw8K0Ch4bouRWhGtSCjll2WJeXqDYe8ZfUC7IYx0qlsMGbZm83Xfqee+HGDwWAwGP7KD5Vqm0oTWykbAAAAAElFTkSuQmCC";
23
+
24
+ // packages/panel/assets/squirtle.png
25
+ var squirtle_default = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgBAMAAAAQtmoLAAAAMFBMVEUAAAAQEBApc4NanKRiKQCDKQCLxc205u69agDNeynVlFLVzc3mrFr/1Wr/5pz///8R5ETqAAAAAXRSTlMAQObYZgAAAb1JREFUWMPtlL9KxEAQxi/JC2QvnihaeAkXCwtNBheus7eUPIBZXLGy82ohnZVi4cIl76A2h1ZqJaz2Bxd7C1PoCzgr9jcpBIv9uoX5sfPnm+l0rKysrKz+pwDCdvGjkWxDeBgv5RodWB+dIJCT491D80GLL1wMFm2ACIM5cJlSgYH5YeVWJFRgk0u5z26ADAwM0PukA31M6bgF4JqmHvS+yIBzwjEnAfSUumZqEIHvhZRRbG05iyIMB3uwxkmdjVOW9JTKIOEy8glOxWyC7SyDtCtzCmCMtB9hxcu3kjZrdJJIGVvVsaT1yQWAcV3rRy7AJ3U1hGFZT9UFprWDL8KqsuG7GtfTCJaKTigFYRbVx2vzMX1gk8LFmRPWomoQ0Hp3UkS03f4BSgROgeexmF+6equaaa3PJgsAcU4AqmelVT27uisg5ZLQ3Kqpmlk5u7w/hYTicq80NTw/pRtEgB/VL9glvDPXAMH8jDx5pJXWT+gpY0JGMTjWrB8RCCjxxuDbWqsLBPqMYj8HbZppfc4l9QwEmHnGWES+GxjJfjnaIRNxYlJ3cJNoG8ScnzhHLPb9Thv9glZWVlZWf69vfHii3k2wjfUAAAAASUVORK5CYII=";
26
+
27
+ // packages/panel/src/avatars.ts
28
+ var avatars = {
29
+ manager: mewtwo_default,
30
+ "developer-1": pikachu_default,
31
+ "developer-2": charmander_default,
32
+ "developer-3": bulbasaur_default,
33
+ qa: squirtle_default
34
+ };
35
+
36
+ // plugins/apexrest-apex/assets/apexrest-logo.svg
37
+ 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`;
38
+
39
+ // packages/panel/src/panel.ts
40
+ var $ = (id) => document.getElementById(id);
41
+ var input = (id) => $(id);
42
+ var node = (tag, cls = "", text = "") => {
43
+ const element = document.createElement(tag);
44
+ element.className = cls;
45
+ element.textContent = text;
46
+ return element;
47
+ };
48
+ var human = (value) => value === "qa" ? "QA" : value === "inProgress" ? "Working" : value.replaceAll("_", " ").replaceAll("-", " ").replace(/\b\w/g, (c) => c.toUpperCase());
49
+ var active = (s) => ["running", "queued", "inProgress", "cancelling"].includes(s);
50
+ var badge = (value) => node(
51
+ "span",
52
+ "badge " + (["completed", "pass", "passed", "approve", "succeeded", "live"].includes(value) ? "good" : active(value) ? "running" : [
53
+ "failed",
54
+ "fail",
55
+ "blocked",
56
+ "review_failed",
57
+ "verification_failed",
58
+ "outcome_unknown",
59
+ "unavailable"
60
+ ].includes(value) ? "bad" : ["revise", "review_stale", "result_stale", "not_run", "cancelled"].includes(value) ? "warn" : ""),
61
+ human(value)
62
+ );
63
+ var empty = (message) => node("div", "empty", message);
64
+ var card = (title, content, subtitle) => {
65
+ const box = node("div", "card"), heading = node("div", "section-heading"), label = node("div");
66
+ label.append(node("h2", "", title));
67
+ if (subtitle) label.append(node("p", "subtle", subtitle));
68
+ heading.append(label);
69
+ box.append(heading, content);
70
+ return box;
71
+ };
72
+ var kv = (items) => {
73
+ const dl = node("dl");
74
+ for (const [key, value] of items) {
75
+ const row = node("div", "kv");
76
+ row.append(node("dt", "", key), node("dd", "", value == null ? "Not available" : String(value)));
77
+ dl.append(row);
78
+ }
79
+ return dl;
80
+ };
81
+ var codeDetails = (title, value) => {
82
+ const d = node("details");
83
+ d.append(node("summary", "", title), node("pre", "", JSON.stringify(value, null, 2)));
84
+ return d;
85
+ };
86
+ var notice = (message, error = false) => {
87
+ const box = $("notice");
88
+ box.hidden = !message;
89
+ box.classList.toggle("error", error);
90
+ box.textContent = message;
91
+ };
92
+ var launch = new URLSearchParams(location.hash.slice(1));
93
+ var snapshot;
94
+ var chosenTeam = launch.get("team") ?? void 0;
95
+ var busy = false;
96
+ var connected = false;
97
+ var initialized = false;
98
+ var sqlclDirty = false;
99
+ var sqlclSignature = "";
100
+ var preferencesDirty = false;
101
+ var preferencesSignature = "";
102
+ var bridgeProject;
103
+ var bridgeReady = false;
104
+ var requestId = 0;
105
+ var currentView = "overview";
106
+ var savedConnectionsState = "idle";
107
+ var savedConnectionNames = [];
108
+ var savedConnectionsError = "";
109
+ var embedded = window.parent !== window;
110
+ var token = launch.get("session") ?? "";
111
+ var pending = /* @__PURE__ */ new Map();
112
+ function bridge(method, params) {
113
+ const id = ++requestId;
114
+ return new Promise((resolve, reject) => {
115
+ const timer = setTimeout(() => {
116
+ pending.delete(id);
117
+ reject(new Error("Codex did not answer the panel request."));
118
+ }, 2e4);
119
+ pending.set(id, { resolve, reject, timer });
120
+ window.parent.postMessage({ jsonrpc: "2.0", id, method, params }, "*");
121
+ });
122
+ }
123
+ window.addEventListener("message", (event) => {
124
+ if (event.source !== window.parent || !embedded || !event.data || event.data.jsonrpc !== "2.0") return;
125
+ const message = event.data;
126
+ const waiter = pending.get(message.id);
127
+ if (waiter) {
128
+ clearTimeout(waiter.timer);
129
+ pending.delete(message.id);
130
+ if (message.error) waiter.reject(new Error(String(message.error.message)));
131
+ else waiter.resolve(message.result);
132
+ }
133
+ if (message.method === "ui/notifications/tool-input" && typeof message.params?.arguments?.project === "string")
134
+ bridgeProject = message.params.arguments.project;
135
+ if (message.method === "ui/notifications/tool-result") {
136
+ const result = message.params?._meta?.["apexrest/panelResult"] ?? message.params?.structuredContent;
137
+ if (typeof result?.data?.project === "string") bridgeProject = result.data.project;
138
+ if (bridgeProject) void refresh();
139
+ }
140
+ });
141
+ async function api(action) {
142
+ if (embedded) {
143
+ if (action?.kind === "connection" && action.password)
144
+ throw new Error("Enter the password in the local dashboard or use CLI --password-file.");
145
+ if (!bridgeReady || !bridgeProject) throw new Error("Waiting for the Codex workspace context.");
146
+ const response2 = await bridge("tools/call", {
147
+ name: action ? "apexrest_panel_action" : "apexrest_panel_status",
148
+ arguments: {
149
+ project: bridgeProject,
150
+ ...action ? { action } : chosenTeam ? { team: chosenTeam } : {}
151
+ }
152
+ });
153
+ const envelope = response2._meta?.["apexrest/panelResult"] ?? response2.structuredContent ?? JSON.parse(response2.content?.find((c) => c.type === "text")?.text ?? "{}");
154
+ if (!envelope.ok) throw new Error(envelope.summary ?? "Codex rejected this panel action.");
155
+ return envelope.data;
156
+ }
157
+ const response = await fetch(
158
+ action ? "/api/action" : "/api/status" + (chosenTeam ? "?team=" + encodeURIComponent(chosenTeam) : ""),
159
+ {
160
+ method: action ? "POST" : "GET",
161
+ headers: {
162
+ Authorization: "Bearer " + token,
163
+ ...action ? { "Content-Type": "application/json" } : {}
164
+ },
165
+ ...action ? { body: JSON.stringify(action) } : {},
166
+ signal: AbortSignal.timeout(action?.kind === "saved-connections" ? 6e4 : 15e3)
167
+ }
168
+ );
169
+ const result = await response.json();
170
+ if (!response.ok) throw new Error(result.summary ?? result.error ?? "The local panel request failed.");
171
+ return result;
172
+ }
173
+ function renderSavedConnections(selected = input("connection-direct").value) {
174
+ const select = $("connection-direct"), current = snapshot?.connections[input("connection-ref").value.trim()]?.name, selectedCurrent = !!current && selected === current, names = [
175
+ .../* @__PURE__ */ new Set([...savedConnectionNames, ...current ? [current] : [], ...selected ? [selected] : []])
176
+ ];
177
+ const placeholder = node("option", "", "Choose a saved connection");
178
+ placeholder.value = "";
179
+ select.replaceChildren(
180
+ placeholder,
181
+ ...names.map((name) => {
182
+ const retained = !savedConnectionNames.includes(name);
183
+ 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;
184
+ const option = node("option", "", label);
185
+ option.value = name;
186
+ return option;
187
+ })
188
+ );
189
+ select.value = selected;
190
+ select.disabled = savedConnectionsState === "loading";
191
+ const status = $("saved-connections-status");
192
+ status.dataset.state = savedConnectionsState;
193
+ 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.";
194
+ $("saved-connections-refresh").textContent = savedConnectionsState === "loading" ? "Loading\u2026" : savedConnectionsState === "error" ? "Retry" : savedConnectionsState === "idle" ? "Load saved connections" : "Refresh saved connections";
195
+ controls();
196
+ }
197
+ async function loadSavedConnections(force = false) {
198
+ if (!connected || !snapshot?.trusted || busy || savedConnectionsState === "loading" || !force && savedConnectionsState === "loaded")
199
+ return;
200
+ savedConnectionsState = "loading";
201
+ savedConnectionsError = "";
202
+ renderSavedConnections();
203
+ try {
204
+ const result = await api({ kind: "saved-connections" });
205
+ if (result.source !== "sqlcl-store" || !Array.isArray(result.connections) || result.connections.some((connection) => typeof connection?.name !== "string" || !connection.name))
206
+ throw new Error("SQLcl returned an invalid connection list.");
207
+ savedConnectionNames = result.connections.map((connection) => connection.name);
208
+ savedConnectionsState = "loaded";
209
+ } catch (error) {
210
+ savedConnectionsState = "error";
211
+ savedConnectionsError = error instanceof Error ? error.message : String(error);
212
+ }
213
+ renderSavedConnections();
214
+ }
215
+ function controls() {
216
+ const canAct = connected && !!snapshot?.trusted && !busy;
217
+ for (const id of ["new-task", "validate", "run-tests", "plan"])
218
+ $(id).disabled = !canAct || !snapshot?.configured;
219
+ for (const form of ["sqlcl-form", "connection-form", "preferences-form", "task-form"])
220
+ $(form).querySelectorAll("button[type=submit]").forEach((button) => {
221
+ button.disabled = !canAct;
222
+ });
223
+ $("saved-connections-refresh").disabled = !canAct || savedConnectionsState === "loading";
224
+ $("connection-save").disabled = !canAct || input("sqlcl-transport").value === "direct" && savedConnectionsState === "loading";
225
+ $("message-form").querySelectorAll("button").forEach((b) => {
226
+ b.disabled = !canAct || !snapshot?.team || !active(snapshot.team.status);
227
+ });
228
+ }
229
+ async function act(action) {
230
+ if (busy || !connected) return;
231
+ busy = true;
232
+ controls();
233
+ try {
234
+ const result = await api(action);
235
+ if (action.kind === "start" && result.teamId) {
236
+ chosenTeam = result.teamId;
237
+ $("task-dialog").close();
238
+ view("team");
239
+ }
240
+ notice(
241
+ result.executionHost === "current_session" ? "Continue this task in your current Codex chat. No background agent was started." : ["sqlcl", "connection", "preferences"].includes(action.kind) ? "Settings saved for future runs." : action.kind === "message" ? "Task update queued for the active workflow." : action.kind.startsWith("cancel") ? "Stop requested. Existing changes are not rolled back." : "Operation accepted. Follow its actual status below."
242
+ );
243
+ if (action.kind === "message") input("message").value = "";
244
+ if (action.kind === "preferences") preferencesDirty = false;
245
+ if (action.kind === "sqlcl") sqlclDirty = false;
246
+ if (action.kind === "connection") input("connection-ords-password").value = "";
247
+ await refresh();
248
+ } catch (error) {
249
+ notice(error instanceof Error ? error.message : String(error), true);
250
+ } finally {
251
+ busy = false;
252
+ controls();
253
+ }
254
+ }
255
+ var rendered = /* @__PURE__ */ new Map();
256
+ function draw(id, data, render2) {
257
+ const key = JSON.stringify(data);
258
+ if (rendered.get(id) === key) return;
259
+ if ($(id).contains(document.activeElement) && document.activeElement !== document.body) return;
260
+ $(id).replaceChildren(...render2());
261
+ rendered.set(id, key);
262
+ }
263
+ function pipeline(data) {
264
+ const team = data.team, box = node("div");
265
+ if (!team) {
266
+ box.append(empty("No run yet. Start a task to follow its agents, tools and verification here."));
267
+ return card("Development workflow", box);
268
+ }
269
+ const head = node("div", "section-heading");
270
+ if (data.task) box.append(node("p", "task-summary", data.task));
271
+ if (team.executionHost === "current_session") {
272
+ box.append(
273
+ node(
274
+ "p",
275
+ "",
276
+ "Continue in your current Codex chat. This is a task receipt, not a completed result. Progress, verification, steering and cancellation stay in that conversation."
277
+ )
278
+ );
279
+ return card("Current Codex session", box);
280
+ }
281
+ head.append(node("h3", "", "Revision " + team.revision), badge(team.status));
282
+ box.append(head);
283
+ if (team.modelPolicy)
284
+ box.append(
285
+ node(
286
+ "p",
287
+ "subtle",
288
+ "Auto models \xB7 " + team.modelPolicy.complexity + " task \xB7 " + team.modelPolicy.reason
289
+ )
290
+ );
291
+ if (team.limits)
292
+ box.append(
293
+ node(
294
+ "p",
295
+ "subtle",
296
+ "Task time limit: " + team.limits.timeoutSeconds + " seconds. Token counts are cumulative, including cached input; they are not a cost estimate."
297
+ )
298
+ );
299
+ const stages = team.executionMode === "single" ? ["planning", "development", "verification"] : ["planning", "development", "code_review", "qa", "final_review"], index = stages.indexOf(team.phase);
300
+ const bar = node("div", "steps");
301
+ stages.forEach(
302
+ (phase, i) => bar.append(
303
+ node(
304
+ "div",
305
+ "step " + (team.status === "completed" || i < index ? "done" : i === index ? "active" : ""),
306
+ human(phase)
307
+ )
308
+ )
309
+ );
310
+ box.append(bar);
311
+ const agents = node("div", "agents");
312
+ for (const member of team.members) {
313
+ const cell = node("article", "agent"), title = node("div", "agent-title"), label = node("h3"), avatar = node("img", "avatar"), identity = teamIdentities[member.role];
314
+ avatar.src = avatars[member.role];
315
+ avatar.alt = identity.name;
316
+ avatar.width = 64;
317
+ avatar.height = 64;
318
+ label.append(
319
+ node("span", "", member.name ?? identity.name),
320
+ node("small", "subtle", team.executionMode === "single" ? "Single agent" : identity.label)
321
+ );
322
+ title.append(avatar);
323
+ title.append(label);
324
+ cell.append(
325
+ title,
326
+ badge(member.status),
327
+ node(
328
+ "p",
329
+ "agent-action",
330
+ member.currentAction?.title ?? (member.status === "completed" ? "Assigned step completed" : member.status === "inProgress" ? "Working on the current phase" : "Waiting for the scheduled step")
331
+ )
332
+ );
333
+ const meta = node("div", "agent-meta");
334
+ meta.append(
335
+ node("span", "", member.configuration?.model ?? "Model not reported"),
336
+ node(
337
+ "span",
338
+ "",
339
+ [
340
+ member.configuration?.reasoningEffort,
341
+ member.configuration?.sandbox,
342
+ member.totalTokens == null ? "" : member.totalTokens.toLocaleString() + " cumulative tokens"
343
+ ].filter(Boolean).join(" \xB7 ")
344
+ )
345
+ );
346
+ if (member.selection)
347
+ meta.append(node("span", "", "Auto \xB7 " + member.selection.tier + " \xB7 " + member.selection.reason));
348
+ if (member.tokenUsage)
349
+ meta.append(
350
+ node(
351
+ "span",
352
+ "",
353
+ [
354
+ member.tokenUsage.inputTokens == null ? "" : "Input " + member.tokenUsage.inputTokens.toLocaleString(),
355
+ member.tokenUsage.cachedInputTokens == null ? "" : "Cached input " + member.tokenUsage.cachedInputTokens.toLocaleString(),
356
+ member.tokenUsage.outputTokens == null ? "" : "Output " + member.tokenUsage.outputTokens.toLocaleString(),
357
+ member.tokenUsage.reasoningOutputTokens == null ? "" : "Reasoning output " + member.tokenUsage.reasoningOutputTokens.toLocaleString()
358
+ ].filter(Boolean).join(" \xB7 ")
359
+ )
360
+ );
361
+ cell.append(meta);
362
+ agents.append(cell);
363
+ }
364
+ box.append(agents);
365
+ if (team.diagnostics.length) box.append(node("p", "notice error", team.diagnostics.join("\n")));
366
+ if (team.result) box.append(node("p", "notice", team.result));
367
+ return card(
368
+ "Development workflow",
369
+ box,
370
+ (team.executionMode === "single" ? "Single agent \xB7 implementation and self-verification" : "Agent team \xB7 mandatory manager and QA reviews") + " \xB7 Browser: " + (team.browserMode === "external" ? "External" : "Codex in-app")
371
+ );
372
+ }
373
+ function reviews(data) {
374
+ const box = node("div"), team = data.team;
375
+ if (team?.executionMode === "single")
376
+ box.append(
377
+ node(
378
+ "p",
379
+ "subtle",
380
+ "Checks performed by the implementation agent. Independent manager review and QA are not part of this run."
381
+ )
382
+ );
383
+ if (!team?.reviews.length && !team?.qa.length && !team?.verification?.length)
384
+ box.append(empty("Review evidence appears after development."));
385
+ for (const item of team?.reviews ?? []) {
386
+ const row = node("div", "review"), head = node("div", "section-heading");
387
+ head.append(
388
+ node("h3", "", human(item.phase) + " \xB7 revision " + item.revision),
389
+ badge(item.report.decision)
390
+ );
391
+ row.append(head, node("p", "", item.report.summary));
392
+ const list = node("ul");
393
+ item.report.findings.forEach((finding) => list.append(node("li", "", finding)));
394
+ if (list.childNodes.length) row.append(list);
395
+ box.append(row);
396
+ }
397
+ for (const item of team?.executionMode === "single" ? team.verification ?? [] : team?.qa ?? []) {
398
+ const row = node("div", "review"), head = node("div", "section-heading");
399
+ head.append(
400
+ node(
401
+ "h3",
402
+ "",
403
+ (team?.executionMode === "single" ? "Agent verification \xB7 revision " : "Independent QA \xB7 revision ") + item.revision
404
+ ),
405
+ badge(item.report.decision)
406
+ );
407
+ row.append(head, node("p", "", item.report.summary));
408
+ for (const check of item.report.checks) {
409
+ const checkRow = node("div", "review");
410
+ checkRow.append(badge(check.status), node("p", "", check.name), node("p", "subtle", check.evidence));
411
+ row.append(checkRow);
412
+ }
413
+ box.append(row);
414
+ }
415
+ return card("Reviews & verification", box);
416
+ }
417
+ function activity(data) {
418
+ const box = node("div"), records = data.team?.observations ?? [];
419
+ if (!records.length) box.append(empty("Observed tool activity will appear here."));
420
+ for (const item of [...records].reverse()) {
421
+ const row = node("div", "activity");
422
+ row.append(
423
+ node("h3", "", teamLabel(item.role) + " \xB7 " + human(item.kind)),
424
+ node("span", "subtle", "Revision " + item.revision + " \xB7 " + human(item.phase)),
425
+ node("p", "", item.detail)
426
+ );
427
+ box.append(row);
428
+ }
429
+ return card("Observed activity", box, "From Codex events, not estimated progress");
430
+ }
431
+ function messages(data) {
432
+ const box = node("div");
433
+ if (!data.team?.messages.length) box.append(empty("Task updates and agent messages will appear here."));
434
+ for (const message of data.team?.messages ?? []) {
435
+ const row = node("div", "activity");
436
+ row.append(
437
+ node("h3", "", teamLabel(message.from) + " \u2192 " + teamLabel(message.to)),
438
+ badge(message.status),
439
+ node("p", "", message.text)
440
+ );
441
+ box.append(row);
442
+ }
443
+ return card("Communication", box);
444
+ }
445
+ function operations(data) {
446
+ const box = node("div", "table-wrap");
447
+ if (!data.jobs.length) box.append(empty("No APEX operation jobs recorded for this project."));
448
+ else {
449
+ const table = node("table"), head = node("tr");
450
+ ["Operation", "Status", "Result", ""].forEach((s) => head.append(node("th", "", s)));
451
+ const thead = node("thead");
452
+ thead.append(head);
453
+ table.append(thead);
454
+ const body = node("tbody");
455
+ for (const job of data.jobs) {
456
+ const row = node("tr"), state = node("td"), summary = node("td"), action = node("td");
457
+ state.append(badge(job.status));
458
+ summary.append(node("p", "", job.summary || "Awaiting a result"));
459
+ if (job.diagnostics.length || job.artifacts.length)
460
+ summary.append(
461
+ codeDetails("Diagnostics & artifacts", { diagnostics: job.diagnostics, artifacts: job.artifacts })
462
+ );
463
+ if (active(job.status)) {
464
+ const stop = node("button", "danger", "Stop");
465
+ stop.disabled = !connected || busy || !data.trusted;
466
+ stop.onclick = () => {
467
+ void act({ kind: "cancel-job", id: job.id });
468
+ };
469
+ action.append(stop);
470
+ }
471
+ row.append(node("td", "", job.operation), state, summary, action);
472
+ body.append(row);
473
+ }
474
+ table.append(body);
475
+ box.append(table);
476
+ }
477
+ const output = [card("Operation jobs", box, "Compile, export, tests and deployment work")];
478
+ const deployments = node("div");
479
+ if (!data.deployments.length) deployments.append(empty("No deployment runs recorded."));
480
+ for (const deployment of data.deployments) {
481
+ const row = node("div", "review");
482
+ row.append(
483
+ badge(deployment.status),
484
+ node("p", "subtle", new Date(deployment.at).toLocaleString()),
485
+ node("pre", "", deployment.details)
486
+ );
487
+ deployments.append(row);
488
+ }
489
+ output.push(
490
+ card(
491
+ "Deployment & import journal",
492
+ deployments,
493
+ "Actual durable runtime state; an unknown outcome remains unknown"
494
+ )
495
+ );
496
+ return output;
497
+ }
498
+ function render(data) {
499
+ const connectionsChanged = JSON.stringify(snapshot?.connections) !== JSON.stringify(data.connections);
500
+ snapshot = data;
501
+ connected = true;
502
+ $("project-name").textContent = data.configuration?.application.alias ?? "Unconfigured workspace";
503
+ $("project-path").textContent = data.project;
504
+ $("version").textContent = data.version;
505
+ $("connection").className = "badge good";
506
+ $("connection").textContent = "Live";
507
+ $("updated").textContent = "Updated " + new Date(data.updatedAt).toLocaleTimeString();
508
+ $("connection-error").hidden = true;
509
+ document.body.dataset.disconnected = "false";
510
+ const nextPreferences = JSON.stringify(data.preferences);
511
+ const nextSqlcl = JSON.stringify(data.sqlcl);
512
+ if (!sqlclDirty && nextSqlcl !== sqlclSignature) {
513
+ input("sqlcl-mode").value = data.sqlcl.mode;
514
+ input("sqlcl-level").value = data.sqlcl.mcpRestrictLevel;
515
+ input("sqlcl-transport").value = data.sqlcl.databaseTransport ?? "direct";
516
+ sqlclControls();
517
+ sqlclSignature = nextSqlcl;
518
+ }
519
+ if (!preferencesDirty && nextPreferences !== preferencesSignature) {
520
+ for (const prefix of ["default", "task"]) {
521
+ input(prefix + "-execution-mode").value = data.preferences.executionMode;
522
+ input(prefix + "-browser-mode").value = data.preferences.browserMode;
523
+ input(prefix + "-developers").value = String(data.preferences.developers);
524
+ modeControls(prefix);
525
+ input(prefix + "-sandbox").value = data.preferences.sandbox;
526
+ input(prefix + "-timeout").value = String(data.preferences.timeoutSeconds);
527
+ }
528
+ preferencesSignature = nextPreferences;
529
+ }
530
+ if (!initialized) {
531
+ initialized = true;
532
+ if (embedded) {
533
+ input("connection-ords-password").disabled = true;
534
+ $("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.";
535
+ }
536
+ const environment = $("environment");
537
+ for (const [name, env] of Object.entries(data.configuration?.environments ?? {})) {
538
+ const option = node("option", "", name + " \xB7 " + env.kind);
539
+ option.value = name;
540
+ environment.append(option);
541
+ }
542
+ if (!data.configured)
543
+ notice(
544
+ "This folder has no apexrest.json. Initialize or open an APEXREST application project to run development tasks."
545
+ );
546
+ else if (!data.trusted)
547
+ notice(
548
+ "This project is not trusted in APEXREST. The panel can display its state; actions require the existing project trust setup."
549
+ );
550
+ }
551
+ draw(
552
+ "connection-refs",
553
+ [data.connections, data.configuration?.environments],
554
+ () => Array.from(
555
+ /* @__PURE__ */ new Set([
556
+ ...Object.keys(data.connections),
557
+ ...Object.values(data.configuration?.environments ?? {}).flatMap((env) => [
558
+ env.readConnectionRef,
559
+ env.deployConnectionRef
560
+ ])
561
+ ])
562
+ ).map((name) => {
563
+ const option = node("option");
564
+ option.value = name;
565
+ return option;
566
+ })
567
+ );
568
+ const teamSelect = $("team-select");
569
+ if (document.activeElement !== teamSelect) {
570
+ const options = data.teams.map((team) => {
571
+ const option = node(
572
+ "option",
573
+ "",
574
+ human(team.status) + " \xB7 revision " + team.revision + " \xB7 " + new Date(team.updatedAt).toLocaleTimeString()
575
+ );
576
+ option.value = team.id;
577
+ return option;
578
+ });
579
+ teamSelect.replaceChildren(...options);
580
+ teamSelect.value = data.team?.id ?? "";
581
+ teamSelect.disabled = !options.length;
582
+ }
583
+ draw(
584
+ "metrics",
585
+ [
586
+ data.teams,
587
+ data.sqlcl,
588
+ data.jobs,
589
+ data.team?.status,
590
+ data.team?.executionMode,
591
+ data.preferences.executionMode
592
+ ],
593
+ () => [
594
+ [
595
+ "Active runs",
596
+ String(data.teams.filter((team) => active(team.status)).length),
597
+ data.team ? human(data.team.phase) : "Ready for a new task"
598
+ ],
599
+ [
600
+ (data.team?.executionMode ?? data.preferences.executionMode) === "single" ? "Verification" : "Review gate",
601
+ data.team ? human(data.team.status) : "No result",
602
+ (data.team?.executionMode ?? data.preferences.executionMode) === "single" ? "Single-agent checks" : "Manager + independent QA"
603
+ ],
604
+ [
605
+ "APEX operations",
606
+ String(data.jobs.filter((job) => active(job.status)).length),
607
+ "Running or queued"
608
+ ],
609
+ [
610
+ "Database connectivity",
611
+ data.sqlcl.databaseTransport === "ords" ? "ORDS HTTP(S)" : "Direct Oracle",
612
+ data.sqlcl.mode === "mcp" ? "SQLcl MCP \xB7 restriction " + data.sqlcl.mcpRestrictLevel : "SQLcl CLI"
613
+ ]
614
+ ].map(([label, value, sub]) => {
615
+ const box = node("div", "metric");
616
+ box.append(node("div", "subtle", label), node("div", "value", value), node("div", "subtle", sub));
617
+ return box;
618
+ })
619
+ );
620
+ const stableTeam = data.team ? { ...data.team, updatedAt: "" } : null;
621
+ draw("overview-live", [stableTeam, data.changes, data.configuration, data.trusted], () => {
622
+ const columns = node("div", "two-columns"), changeBox = node("div");
623
+ changeBox.append(
624
+ data.changes.files.length ? node("pre", "", data.changes.files.join("\n")) : empty(
625
+ data.changes.status === "available" ? "No uncommitted Git changes." : "Git status is unavailable for this folder."
626
+ )
627
+ );
628
+ columns.append(
629
+ card(
630
+ "Project context",
631
+ kv([
632
+ ["Application", data.configuration?.application.alias],
633
+ ["Source", data.configuration?.application.sourceDir],
634
+ [
635
+ "Environments",
636
+ Object.keys(data.configuration?.environments ?? {}).join(", ") || "None configured"
637
+ ],
638
+ ["Required suites", data.configuration?.tests.requiredSuites.join(", ") || "None declared"],
639
+ ["Trust", data.trusted ? "Trusted project" : "Not granted"]
640
+ ])
641
+ ),
642
+ card("Working changes", changeBox)
643
+ );
644
+ return [pipeline(data), columns, activity(data)];
645
+ });
646
+ draw("team-live", stableTeam, () => {
647
+ const columns = node("div", "two-columns");
648
+ columns.append(reviews(data), messages(data));
649
+ return [pipeline(data), columns, activity(data)];
650
+ });
651
+ draw("operations-live", [data.jobs, data.deployments, busy], () => operations(data));
652
+ draw(
653
+ "settings-live",
654
+ [
655
+ data.preferences,
656
+ data.configuration,
657
+ data.connections,
658
+ data.toolchain,
659
+ data.permissions,
660
+ stableTeam?.members.map((m) => m.configuration)
661
+ ],
662
+ () => {
663
+ const box = node("div");
664
+ box.append(
665
+ card(
666
+ "Project & target settings",
667
+ kv([
668
+ ["Project", data.project],
669
+ ["Source directory", data.configuration?.application.sourceDir],
670
+ ["Artifacts", data.configuration?.artifacts.directory],
671
+ [
672
+ "Artifact retention",
673
+ data.configuration ? data.configuration.artifacts.retentionDays + " days" : null
674
+ ],
675
+ ["Required suites", data.configuration?.tests.requiredSuites.join(", ") || "None declared"],
676
+ ["Automated browser", data.configuration?.tests.defaultBrowser],
677
+ [
678
+ "Verification browser",
679
+ data.preferences.browserMode === "external" ? "External system browser" : "Codex in-app browser"
680
+ ],
681
+ ["Execution mode", data.preferences.executionMode === "single" ? "Single agent" : "Agent team"],
682
+ ["Active deploy/test grants", data.permissions.activeGrants.length]
683
+ ])
684
+ )
685
+ );
686
+ for (const [name, env] of Object.entries(data.configuration?.environments ?? {}))
687
+ box.append(
688
+ card(
689
+ name + " \xB7 " + human(env.kind),
690
+ kv([
691
+ ["Application ID", env.applicationId],
692
+ ["Workspace", env.workspace],
693
+ ["Parsing schema", env.parsingSchema],
694
+ ["Database", env.databaseIdentity.dbUniqueName],
695
+ ["Service", env.databaseIdentity.serviceName],
696
+ ["Read connection", env.readConnectionRef],
697
+ ["Deploy connection", env.deployConnectionRef],
698
+ ["Control mode", env.deploymentControl ?? "local"],
699
+ ["Application URL", env.baseUrl]
700
+ ])
701
+ )
702
+ );
703
+ box.append(
704
+ card(
705
+ "Configuration details",
706
+ codeDetails("Project, toolchain and connection references", {
707
+ configuration: data.configuration,
708
+ toolchain: data.toolchain,
709
+ connectionReferences: data.connections,
710
+ authorization: data.permissions
711
+ })
712
+ )
713
+ );
714
+ return [box];
715
+ }
716
+ );
717
+ if (connectionsChanged) renderSavedConnections();
718
+ controls();
719
+ if (currentView === "settings" && input("sqlcl-transport").value === "direct" && savedConnectionsState === "idle")
720
+ void loadSavedConnections();
721
+ }
722
+ var refreshing = false;
723
+ async function refresh() {
724
+ if (refreshing) return;
725
+ refreshing = true;
726
+ try {
727
+ render(await api());
728
+ } catch (error) {
729
+ connected = false;
730
+ $("connection").textContent = "Disconnected";
731
+ $("connection").className = "badge bad";
732
+ $("connection-error").hidden = false;
733
+ $("connection-error").textContent = (error instanceof Error ? error.message : String(error)) + (snapshot ? " Showing the last received state." : "");
734
+ document.body.dataset.disconnected = "true";
735
+ controls();
736
+ } finally {
737
+ refreshing = false;
738
+ }
739
+ }
740
+ var views = {
741
+ overview: ["Workspace overview", "Your team, settings and APEX work in one place."],
742
+ team: ["Agents", "Follow implementation, communication and verification."],
743
+ operations: ["APEX operations", "Compile, verify and follow deployment state."],
744
+ settings: ["Workspace settings", "Inspect effective configuration and choose defaults for future work."]
745
+ };
746
+ function view(name) {
747
+ currentView = name;
748
+ document.querySelectorAll("[data-page]").forEach((page) => {
749
+ page.hidden = page.dataset.page !== name;
750
+ });
751
+ document.querySelectorAll("[data-view]").forEach((button) => {
752
+ if (button.dataset.view === name) button.setAttribute("aria-current", "page");
753
+ else button.removeAttribute("aria-current");
754
+ });
755
+ const titles = views[name];
756
+ $("view-title").textContent = titles[0];
757
+ $("view-subtitle").textContent = titles[1];
758
+ if (name === "settings" && input("sqlcl-transport").value === "direct") void loadSavedConnections();
759
+ }
760
+ document.querySelectorAll("[data-view]").forEach((button) => {
761
+ button.onclick = () => view(button.dataset.view);
762
+ });
763
+ $("refresh").onclick = () => {
764
+ void refresh();
765
+ };
766
+ $("new-task").onclick = () => {
767
+ if (snapshot) {
768
+ input("task-execution-mode").value = snapshot.preferences.executionMode;
769
+ input("task-browser-mode").value = snapshot.preferences.browserMode;
770
+ input("task-developers").value = String(snapshot.preferences.developers);
771
+ modeControls("task");
772
+ input("task-sandbox").value = snapshot.preferences.sandbox;
773
+ input("task-timeout").value = String(snapshot.preferences.timeoutSeconds);
774
+ }
775
+ $("task-dialog").showModal();
776
+ input("task").focus();
777
+ };
778
+ $("close-task").onclick = () => $("task-dialog").close();
779
+ $("team-select").onchange = () => {
780
+ chosenTeam = input("team-select").value || void 0;
781
+ void refresh();
782
+ };
783
+ $("task-form").onsubmit = (event) => {
784
+ event.preventDefault();
785
+ void act({
786
+ kind: "start",
787
+ request: {
788
+ task: input("task").value,
789
+ executionMode: input("task-execution-mode").value,
790
+ browserMode: input("task-browser-mode").value,
791
+ developers: Number(input("task-developers").value),
792
+ sandbox: input("task-sandbox").value,
793
+ timeoutSeconds: Number(input("task-timeout").value)
794
+ }
795
+ });
796
+ };
797
+ function modeControls(prefix) {
798
+ if (prefix === "task") {
799
+ const teamOption = $("task-execution-mode").querySelector("option[value=team]");
800
+ teamOption.disabled = !snapshot?.preferences.multiAgentEnabled;
801
+ if (teamOption.disabled) input("task-execution-mode").value = "single";
802
+ }
803
+ const single = input(prefix + "-execution-mode").value === "single";
804
+ input(prefix + "-developers").disabled = single;
805
+ if (prefix === "task")
806
+ input("task-developers").value = single ? "1" : String(snapshot?.preferences.developers ?? 1);
807
+ $(prefix + "-workflow-note").textContent = single ? "Single agent uses your current Codex chat. No new agent starts. Continue tasks and view results in that conversation." : "Plan \u2192 developers \u2192 manager review \u2192 independent QA \u2192 final manager review. Reviewers remain read only.";
808
+ }
809
+ for (const prefix of ["default", "task"])
810
+ input(prefix + "-execution-mode").onchange = () => modeControls(prefix);
811
+ $("preferences-form").oninput = () => {
812
+ preferencesDirty = true;
813
+ };
814
+ $("preferences-form").onsubmit = (event) => {
815
+ event.preventDefault();
816
+ void act({
817
+ kind: "preferences",
818
+ settings: {
819
+ executionMode: input("default-execution-mode").value,
820
+ multiAgentEnabled: input("default-execution-mode").value === "team",
821
+ browserMode: input("default-browser-mode").value,
822
+ developers: Number(input("default-developers").value),
823
+ sandbox: input("default-sandbox").value,
824
+ timeoutSeconds: Number(input("default-timeout").value)
825
+ }
826
+ });
827
+ };
828
+ $("sqlcl-form").onsubmit = (event) => {
829
+ event.preventDefault();
830
+ void act({
831
+ kind: "sqlcl",
832
+ settings: {
833
+ schemaVersion: 1,
834
+ mode: input("sqlcl-mode").value,
835
+ mcpRestrictLevel: input("sqlcl-level").value,
836
+ databaseTransport: input("sqlcl-transport").value
837
+ }
838
+ });
839
+ };
840
+ function sqlclControls() {
841
+ const ords = input("sqlcl-transport").value === "ords";
842
+ if (ords) input("sqlcl-mode").value = "cli";
843
+ $("sqlcl-mode").querySelector("option[value=mcp]").disabled = ords;
844
+ input("sqlcl-level").disabled = input("sqlcl-mode").value !== "mcp";
845
+ $("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.";
846
+ for (const [id, enabled] of [
847
+ ["connection-direct-group", !ords],
848
+ ["connection-ords-group", ords]
849
+ ]) {
850
+ const group = $(id);
851
+ group.hidden = !enabled;
852
+ group.disabled = !enabled;
853
+ }
854
+ input("connection-ords-password").disabled = embedded;
855
+ $("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.";
856
+ $("connection-save").textContent = ords ? "Save ORDS connection" : "Save direct connection";
857
+ controls();
858
+ }
859
+ $("sqlcl-form").oninput = (event) => {
860
+ sqlclDirty = true;
861
+ sqlclControls();
862
+ if (event.target.id === "sqlcl-transport" && input("sqlcl-transport").value === "direct" && currentView === "settings")
863
+ void loadSavedConnections();
864
+ };
865
+ $("saved-connections-refresh").onclick = () => {
866
+ void loadSavedConnections(true);
867
+ };
868
+ input("connection-direct").onchange = () => renderSavedConnections();
869
+ input("connection-ref").onchange = () => {
870
+ const connection = snapshot?.connections[input("connection-ref").value.trim()];
871
+ renderSavedConnections(connection?.name ?? "");
872
+ input("connection-ords-url").value = connection?.ords?.url ?? "";
873
+ input("connection-ords-user").value = connection?.ords?.username ?? "";
874
+ input("connection-ords-password").value = "";
875
+ };
876
+ $("connection-form").onsubmit = (event) => {
877
+ event.preventDefault();
878
+ 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;
879
+ if (ords && embedded && password) {
880
+ notice("Enter the password in the local dashboard or use CLI --password-file.", true);
881
+ return;
882
+ }
883
+ if (!ords && !sqlclName) {
884
+ notice("Choose a saved SQLcl connection for this reference.", true);
885
+ return;
886
+ }
887
+ if (ords && (!ordsUrl || !ordsUsername)) {
888
+ notice("Enter the ORDS schema URL and your database username.", true);
889
+ return;
890
+ }
891
+ void act({
892
+ kind: "connection",
893
+ name: input("connection-ref").value.trim(),
894
+ ...!ords ? { sqlclName } : { ordsUrl, ordsUsername, ...password ? { password } : {} }
895
+ });
896
+ };
897
+ $("message-form").onsubmit = (event) => {
898
+ event.preventDefault();
899
+ if (snapshot?.team) void act({ kind: "message", id: snapshot.team.id, message: input("message").value });
900
+ };
901
+ $("cancel-team").onclick = () => {
902
+ if (snapshot?.team) void act({ kind: "cancel-team", id: snapshot.team.id });
903
+ };
904
+ $("validate").onclick = () => {
905
+ void act({ kind: "validate" });
906
+ };
907
+ $("plan").onclick = () => {
908
+ const env = input("environment").value;
909
+ if (!env) {
910
+ notice("Choose an explicit environment before planning a deployment.", true);
911
+ return;
912
+ }
913
+ void act({ kind: "plan", env });
914
+ };
915
+ $("run-tests").onclick = () => {
916
+ const suite = input("suite").value, env = input("environment").value;
917
+ if (suite !== "unit" && !env) {
918
+ notice("Choose an explicit environment for this test suite.", true);
919
+ return;
920
+ }
921
+ void act({ kind: "test", suite, ...env ? { env } : {} });
922
+ };
923
+ controls();
924
+ if (launch.get("view") === "team") view("team");
925
+ var mark = document.querySelector(".brand-mark");
926
+ if (mark) {
927
+ const icon = node("img");
928
+ icon.src = apexrest_logo_default;
929
+ icon.alt = "";
930
+ icon.width = 38;
931
+ icon.height = 38;
932
+ mark.replaceChildren(icon);
933
+ }
934
+ if (embedded) {
935
+ void bridge("ui/initialize", {
936
+ protocolVersion: "2026-01-26",
937
+ appInfo: { name: "apexrest-panel", version: "1.0.0" },
938
+ appCapabilities: {}
939
+ }).then(() => {
940
+ bridgeReady = true;
941
+ window.parent.postMessage({ jsonrpc: "2.0", method: "ui/notifications/initialized", params: {} }, "*");
942
+ void refresh();
943
+ }).catch((error) => notice(String(error), true));
944
+ } else void refresh();
945
+ setInterval(() => {
946
+ if (!document.hidden) void refresh();
947
+ }, 2e3);
948
+ document.addEventListener("visibilitychange", () => {
949
+ if (!document.hidden) void refresh();
950
+ });
951
+ })();