apexrest 0.5.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/NOTICE +0 -6
  2. package/README.md +13 -36
  3. package/README.uk.md +13 -36
  4. package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +4 -4
  5. package/dist/codex-compat/plugins/apexrest-apex/NOTICE +0 -6
  6. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +4 -11
  7. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.css +4 -182
  8. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +61 -383
  9. package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/package.json +1 -1
  10. package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +0 -327
  11. package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +12 -43
  12. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-QDAKHEPF.mjs → chunk-3XRCAA5S.mjs} +4 -4
  13. package/dist/{runtime/chunk-HYOURJBW.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-4GIV3RLJ.mjs} +2 -2
  14. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-RF4XQO6I.mjs → chunk-CJC3ESO4.mjs} +2 -2
  15. package/dist/{runtime/chunk-XKBZJ36H.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-DLUIX7FA.mjs} +20 -62
  16. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-JWX4UQAZ.mjs → chunk-EG2NPDAF.mjs} +1 -1
  17. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-EMRXOSVH.mjs +14 -0
  18. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-FPOEB42H.mjs → chunk-JN3KZCDI.mjs} +1 -1
  19. package/dist/{runtime/chunk-QLRGI23I.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-K5BV3TBZ.mjs} +9 -108
  20. package/dist/{runtime/chunk-QWQVXUVG.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-MNYOWIHJ.mjs} +24 -77
  21. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-TTVGX5LP.mjs → chunk-NHYXXMBY.mjs} +21 -213
  22. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-2SZCZZ3J.mjs → chunk-R6MER5QH.mjs} +0 -1
  23. package/dist/{runtime/chunk-XEK2R5AU.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-SVB7G3KQ.mjs} +5 -7
  24. package/dist/{runtime/chunk-L7BXN3LU.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-SWW7SKB4.mjs} +19 -42
  25. package/dist/{runtime/chunk-KJOSAKHX.mjs → codex-compat/plugins/apexrest-apex/runtime/chunk-XZNIV6UL.mjs} +5 -6
  26. package/dist/codex-compat/plugins/apexrest-apex/runtime/{chunk-DNJL7OYO.mjs → chunk-YXHLPFQX.mjs} +15 -13
  27. package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +7 -8
  28. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +1 -1
  29. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/SKILL.md +0 -2
  30. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/SKILL.md +0 -2
  31. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +13 -14
  32. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +14 -15
  33. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/SKILL.md +4 -10
  34. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/agents/openai.yaml +3 -3
  35. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +1 -1
  36. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +5 -8
  37. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/agents/openai.yaml +3 -3
  38. package/dist/resources/panel/index.html +4 -11
  39. package/dist/resources/panel/panel.css +4 -182
  40. package/dist/resources/panel/panel.js +61 -383
  41. package/dist/resources/playwright/package.json +1 -1
  42. package/dist/resources/schemas/operations.schema.json +0 -327
  43. package/dist/runtime/apexrest.mjs +12 -43
  44. package/dist/runtime/{chunk-QDAKHEPF.mjs → chunk-3XRCAA5S.mjs} +4 -4
  45. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-HYOURJBW.mjs → runtime/chunk-4GIV3RLJ.mjs} +2 -2
  46. package/dist/runtime/{chunk-RF4XQO6I.mjs → chunk-CJC3ESO4.mjs} +2 -2
  47. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-XKBZJ36H.mjs → runtime/chunk-DLUIX7FA.mjs} +20 -62
  48. package/dist/runtime/{chunk-JWX4UQAZ.mjs → chunk-EG2NPDAF.mjs} +1 -1
  49. package/dist/runtime/chunk-EMRXOSVH.mjs +14 -0
  50. package/dist/runtime/{chunk-FPOEB42H.mjs → chunk-JN3KZCDI.mjs} +1 -1
  51. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-QLRGI23I.mjs → runtime/chunk-K5BV3TBZ.mjs} +9 -108
  52. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-QWQVXUVG.mjs → runtime/chunk-MNYOWIHJ.mjs} +24 -77
  53. package/dist/runtime/{chunk-TTVGX5LP.mjs → chunk-NHYXXMBY.mjs} +21 -213
  54. package/dist/runtime/{chunk-2SZCZZ3J.mjs → chunk-R6MER5QH.mjs} +0 -1
  55. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-XEK2R5AU.mjs → runtime/chunk-SVB7G3KQ.mjs} +5 -7
  56. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-L7BXN3LU.mjs → runtime/chunk-SWW7SKB4.mjs} +19 -42
  57. package/dist/{codex-compat/plugins/apexrest-apex/runtime/chunk-KJOSAKHX.mjs → runtime/chunk-XZNIV6UL.mjs} +5 -6
  58. package/dist/runtime/{chunk-DNJL7OYO.mjs → chunk-YXHLPFQX.mjs} +15 -13
  59. package/dist/runtime/mcp.mjs +7 -8
  60. package/package.json +1 -2
  61. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/LICENCE.txt +0 -118
  62. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/bulbasaur.png +0 -0
  63. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/charmander.png +0 -0
  64. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/mewtwo.png +0 -0
  65. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/pikachu.png +0 -0
  66. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/sources.json +0 -36
  67. package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/squirtle.png +0 -0
  68. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ED2YPDPS.mjs +0 -1123
  69. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-GFRSRK3K.mjs +0 -16
  70. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-N5G4ADI7.mjs +0 -15
  71. package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-VPCUV5QA.mjs +0 -237
  72. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/SKILL.md +0 -24
  73. package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/agents/openai.yaml +0 -4
  74. package/dist/resources/panel/assets/LICENCE.txt +0 -118
  75. package/dist/resources/panel/assets/bulbasaur.png +0 -0
  76. package/dist/resources/panel/assets/charmander.png +0 -0
  77. package/dist/resources/panel/assets/mewtwo.png +0 -0
  78. package/dist/resources/panel/assets/pikachu.png +0 -0
  79. package/dist/resources/panel/assets/sources.json +0 -36
  80. package/dist/resources/panel/assets/squirtle.png +0 -0
  81. package/dist/runtime/chunk-ED2YPDPS.mjs +0 -1123
  82. package/dist/runtime/chunk-GFRSRK3K.mjs +0 -16
  83. package/dist/runtime/chunk-N5G4ADI7.mjs +0 -15
  84. package/dist/runtime/chunk-VPCUV5QA.mjs +0 -237
@@ -1,38 +1,4 @@
1
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
2
  // plugins/apexrest-apex/assets/apexrest-logo.svg
37
3
  var apexrest_logo_default = `data:image/svg+xml,<?xml version='1.0' encoding='utf-8'?>%0A<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" viewBox="100 66 98 98" xml:space="preserve" width="98" height="98" role="img" aria-labelledby="logo-title">%0A <title id="logo-title">APEXREST pencil and ruler symbol</title>%0A <style type="text/css">%0A%09.st0{fill:%2331BEF9;}%0A%09.st1{fill:%23FFD541;}%0A%09.st2{fill:%23FF4141;}%0A%09.st3{fill:%231E1E1E;}%0A</style>%0A <g id="\u0421\u043B\u043E\u0439_2">%0A <polygon class="st0" points="133,149 177,106 160,89 116,132 " />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_3">%0A <polygon class="st1" points="128,114 147,95 128,76 126,75 123,76 108,91 107,93 110,97 127,114 " />%0A <polygon class="st1" points="151,137 170,118 189,137 190,140 189,142 186,146 173,157 170,157 " />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_4">%0A <path class="st2" d="M166,83l16,16l4-3l2-5v-4c0,0-1-2-1-3s-3-4-3-4l-5-3h-3h-3l-3,2l-2,2L166,83L166,83z" />%0A </g>%0A <g id="\u0421\u043B\u043E\u0439_1">%0A <g>%0A <path class="st3" d="M126.7,115.5l1.7-1.7l-2.2-2.2l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-4.1-4.1 l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-4.1-4.1l9.4-9.5c0.5-0.5,0.4-1.3-0.1-1.7 c-0.5-0.4-1.2-0.4-1.7,0l-9.5,9.5l-3.6-3.6c-0.8-0.8-0.8-2,0-2.8L123.9,77c0.8-0.8,2-0.8,2.8,0L146,96.2l1.7-1.7l-19.2-19.2 c-1.7-1.7-4.6-1.7-6.3,0L107.5,90c-1.7,1.7-1.7,4.6,0,6.3L126.7,115.5z" />%0A <path class="st3" d="M182.7,100.8l3-3c5-5.1,4.9-13.3-0.2-18.3c-5-5-13.1-5-18.2,0l-51.9,51.9c-0.1,0.1-0.2,0.2-0.2,0.4v0.1 l-7.2,23.8c-0.2,0.6,0.2,1.3,0.8,1.5c0.2,0.1,0.5,0.1,0.7,0l23.8-7.2h0.1c0.1-0.1,0.2-0.1,0.4-0.2L182.7,100.8L182.7,100.8z M159.3,91l6.6,6.6l-41.3,41.3l-6.6-6.6L159.3,91z M110.9,154.2l1-3.5c1.1,0.5,2,1.3,2.5,2.4L110.9,154.2z M116.9,152.4 c-0.8-1.8-2.4-3.2-4.2-4l4.2-13.9l13.7,13.7L116.9,152.4z M132.9,147.1l-6.6-6.6l41.3-41.3l6.6,6.6L132.9,147.1z M175.9,104.1 l-7.4-7.4l-7.4-7.4l4.2-4.2l14.9,14.9L175.9,104.1z M167,83.3l2.1-2.1c4.3-4,10.9-3.7,14.9,0.6c3.7,4,3.7,10.3,0,14.3l-2.1,2.1 L167,83.3z" />%0A <path class="st3" d="M189.9,136.7l-19.2-19.2l-1.7,1.7l19.2,19.2c0.8,0.8,0.8,2,0,2.8l-14.7,14.7c-0.8,0.8-2.1,0.8-2.8,0l-3.6-3.6 l9.5-9.5c0.5-0.4,0.6-1.2,0.2-1.7c-0.4-0.5-1.2-0.6-1.7-0.2c-0.1,0.1-0.1,0.1-0.2,0.2l-9.5,9.5l-4.1-4.1l4.3-4.3 c0.5-0.5,0.5-1.2,0.1-1.7c-0.5-0.5-1.2-0.5-1.7-0.1c0,0,0,0-0.1,0.1l-4.3,4.3l-4.1-4.1l4.3-4.3c0.5-0.5,0.4-1.3-0.1-1.7 c-0.5-0.4-1.2-0.4-1.7,0l-4.3,4.3l-2.2-2.2l-1.8,1.7l19.2,19.2c1.7,1.7,4.6,1.7,6.3,0l14.7-14.7 C191.6,141.3,191.6,138.4,189.9,136.7C189.9,136.7,189.9,136.7,189.9,136.7z" />%0A </g>%0A </g>%0A</svg>%0A`;
38
4
 
@@ -45,19 +11,13 @@
45
11
  element.textContent = text;
46
12
  return element;
47
13
  };
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);
14
+ var human = (value) => value.replaceAll("_", " ").replaceAll("-", " ").replace(/\b\w/g, (c) => c.toUpperCase());
15
+ var active = (status) => ["running", "queued", "cancelling"].includes(status);
50
16
  var badge = (value) => node(
51
17
  "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" : ""),
18
+ "badge " + (["completed", "pass", "passed", "approve", "succeeded", "live"].includes(value) ? "good" : active(value) ? "running" : ["failed", "fail", "blocked", "verification_failed", "outcome_unknown", "unavailable"].includes(
19
+ value
20
+ ) ? "bad" : ["not_run", "cancelled"].includes(value) ? "warn" : ""),
61
21
  human(value)
62
22
  );
63
23
  var empty = (message) => node("div", "empty", message);
@@ -91,7 +51,6 @@
91
51
  };
92
52
  var launch = new URLSearchParams(location.hash.slice(1));
93
53
  var snapshot;
94
- var chosenTeam = launch.get("team") ?? void 0;
95
54
  var busy = false;
96
55
  var connected = false;
97
56
  var initialized = false;
@@ -147,25 +106,22 @@
147
106
  name: action ? "apexrest_panel_action" : "apexrest_panel_status",
148
107
  arguments: {
149
108
  project: bridgeProject,
150
- ...action ? { action } : chosenTeam ? { team: chosenTeam } : {}
109
+ ...action ? { action } : {}
151
110
  }
152
111
  });
153
112
  const envelope = response2._meta?.["apexrest/panelResult"] ?? response2.structuredContent ?? JSON.parse(response2.content?.find((c) => c.type === "text")?.text ?? "{}");
154
113
  if (!envelope.ok) throw new Error(envelope.summary ?? "Codex rejected this panel action.");
155
114
  return envelope.data;
156
115
  }
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
- );
116
+ const response = await fetch(action ? "/api/action" : "/api/status", {
117
+ method: action ? "POST" : "GET",
118
+ headers: {
119
+ Authorization: "Bearer " + token,
120
+ ...action ? { "Content-Type": "application/json" } : {}
121
+ },
122
+ ...action ? { body: JSON.stringify(action) } : {},
123
+ signal: AbortSignal.timeout(action?.kind === "saved-connections" ? 6e4 : 15e3)
124
+ });
169
125
  const result = await response.json();
170
126
  if (!response.ok) throw new Error(result.summary ?? result.error ?? "The local panel request failed.");
171
127
  return result;
@@ -214,17 +170,14 @@
214
170
  }
215
171
  function controls() {
216
172
  const canAct = connected && !!snapshot?.trusted && !busy;
217
- for (const id of ["new-task", "validate", "run-tests", "plan"])
173
+ for (const id of ["validate", "run-tests", "plan", "open-browser"])
218
174
  $(id).disabled = !canAct || !snapshot?.configured;
219
- for (const form of ["sqlcl-form", "connection-form", "preferences-form", "task-form"])
175
+ for (const form of ["sqlcl-form", "connection-form", "preferences-form"])
220
176
  $(form).querySelectorAll("button[type=submit]").forEach((button) => {
221
177
  button.disabled = !canAct;
222
178
  });
223
179
  $("saved-connections-refresh").disabled = !canAct || savedConnectionsState === "loading";
224
180
  $("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
181
  }
229
182
  async function act(action) {
230
183
  if (busy || !connected) return;
@@ -232,15 +185,9 @@
232
185
  controls();
233
186
  try {
234
187
  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
188
  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."
189
+ action.kind === "browser" ? result.status === "host_action_required" ? "Open this application in the Codex in-app browser: " + result.url + ". Opening it does not verify the application." : "Verification browser opened. Inspect the affected behavior; opening it does not verify the application." : ["sqlcl", "connection", "preferences"].includes(action.kind) ? "Settings saved." : action.kind === "cancel-job" ? "Stop requested. Existing changes are not rolled back." : "Operation accepted. Follow its actual status below."
242
190
  );
243
- if (action.kind === "message") input("message").value = "";
244
191
  if (action.kind === "preferences") preferencesDirty = false;
245
192
  if (action.kind === "sqlcl") sqlclDirty = false;
246
193
  if (action.kind === "connection") input("connection-ords-password").value = "";
@@ -260,188 +207,6 @@
260
207
  $(id).replaceChildren(...render2());
261
208
  rendered.set(id, key);
262
209
  }
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
210
  function operations(data) {
446
211
  const box = node("div", "table-wrap");
447
212
  if (!data.jobs.length) box.append(empty("No APEX operation jobs recorded for this project."));
@@ -478,7 +243,7 @@
478
243
  const deployments = node("div");
479
244
  if (!data.deployments.length) deployments.append(empty("No deployment runs recorded."));
480
245
  for (const deployment of data.deployments) {
481
- const row = node("div", "review");
246
+ const row = node("div", "journal-entry");
482
247
  row.append(
483
248
  badge(deployment.status),
484
249
  node("p", "subtle", new Date(deployment.at).toLocaleString()),
@@ -517,14 +282,7 @@
517
282
  sqlclSignature = nextSqlcl;
518
283
  }
519
284
  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
- }
285
+ input("default-browser-mode").value = data.preferences.browserMode;
528
286
  preferencesSignature = nextPreferences;
529
287
  }
530
288
  if (!initialized) {
@@ -541,7 +299,7 @@
541
299
  }
542
300
  if (!data.configured)
543
301
  notice(
544
- "This folder has no apexrest.json. Initialize or open an APEXREST application project to run development tasks."
302
+ "This folder has no apexrest.json. Initialize or open an APEXREST application project to run APEX operations."
545
303
  );
546
304
  else if (!data.trusted)
547
305
  notice(
@@ -565,47 +323,13 @@
565
323
  return option;
566
324
  })
567
325
  );
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
326
  draw(
584
327
  "metrics",
585
- [
586
- data.teams,
587
- data.sqlcl,
588
- data.jobs,
589
- data.team?.status,
590
- data.team?.executionMode,
591
- data.preferences.executionMode
592
- ],
328
+ [data.sqlcl, data.jobs, data.deployments, data.trusted],
593
329
  () => [
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
- ],
330
+ ["APEX operations", String(data.jobs.filter((job) => active(job.status)).length), "Running or queued"],
331
+ ["Recorded deployments", String(data.deployments.length), "Recent deployment journal entries"],
332
+ ["Project access", data.trusted ? "Trusted" : "Read only", "Existing authorization gates apply"],
609
333
  [
610
334
  "Database connectivity",
611
335
  data.sqlcl.databaseTransport === "ords" ? "ORDS HTTP(S)" : "Direct Oracle",
@@ -617,8 +341,7 @@
617
341
  return box;
618
342
  })
619
343
  );
620
- const stableTeam = data.team ? { ...data.team, updatedAt: "" } : null;
621
- draw("overview-live", [stableTeam, data.changes, data.configuration, data.trusted], () => {
344
+ draw("overview-live", [data.changes, data.configuration, data.trusted], () => {
622
345
  const columns = node("div", "two-columns"), changeBox = node("div");
623
346
  changeBox.append(
624
347
  data.changes.files.length ? node("pre", "", data.changes.files.join("\n")) : empty(
@@ -641,24 +364,22 @@
641
364
  ),
642
365
  card("Working changes", changeBox)
643
366
  );
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)];
367
+ return [
368
+ card(
369
+ "Current Codex session",
370
+ node(
371
+ "p",
372
+ "subtle",
373
+ "Describe changes and review results in your open Codex conversation. This panel runs APEX operations and manages project settings."
374
+ )
375
+ ),
376
+ columns
377
+ ];
650
378
  });
651
379
  draw("operations-live", [data.jobs, data.deployments, busy], () => operations(data));
652
380
  draw(
653
381
  "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
- ],
382
+ [data.preferences, data.configuration, data.connections, data.toolchain, data.permissions],
662
383
  () => {
663
384
  const box = node("div");
664
385
  box.append(
@@ -678,7 +399,6 @@
678
399
  "Verification browser",
679
400
  data.preferences.browserMode === "external" ? "External system browser" : "Codex in-app browser"
680
401
  ],
681
- ["Execution mode", data.preferences.executionMode === "single" ? "Single agent" : "Agent team"],
682
402
  ["Active deploy/test grants", data.permissions.activeGrants.length]
683
403
  ])
684
404
  )
@@ -738,10 +458,9 @@
738
458
  }
739
459
  }
740
460
  var views = {
741
- overview: ["Workspace overview", "Your team, settings and APEX work in one place."],
742
- team: ["Agents", "Follow implementation, communication and verification."],
461
+ overview: ["Workspace overview", "Project settings and APEX operations for your current Codex session."],
743
462
  operations: ["APEX operations", "Compile, verify and follow deployment state."],
744
- settings: ["Workspace settings", "Inspect effective configuration and choose defaults for future work."]
463
+ settings: ["Workspace settings", "Inspect configuration, database connections and browser preferences."]
745
464
  };
746
465
  function view(name) {
747
466
  currentView = name;
@@ -763,51 +482,6 @@
763
482
  $("refresh").onclick = () => {
764
483
  void refresh();
765
484
  };
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
485
  $("preferences-form").oninput = () => {
812
486
  preferencesDirty = true;
813
487
  };
@@ -816,12 +490,7 @@
816
490
  void act({
817
491
  kind: "preferences",
818
492
  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)
493
+ browserMode: input("default-browser-mode").value
825
494
  }
826
495
  });
827
496
  };
@@ -894,16 +563,17 @@
894
563
  ...!ords ? { sqlclName } : { ordsUrl, ordsUsername, ...password ? { password } : {} }
895
564
  });
896
565
  };
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
566
  $("validate").onclick = () => {
905
567
  void act({ kind: "validate" });
906
568
  };
569
+ $("open-browser").onclick = () => {
570
+ const env = input("environment").value;
571
+ if (!env) {
572
+ notice("Choose an explicit environment before opening its application.", true);
573
+ return;
574
+ }
575
+ void act({ kind: "browser", env });
576
+ };
907
577
  $("plan").onclick = () => {
908
578
  const env = input("environment").value;
909
579
  if (!env) {
@@ -921,7 +591,8 @@
921
591
  void act({ kind: "test", suite, ...env ? { env } : {} });
922
592
  };
923
593
  controls();
924
- if (launch.get("view") === "team") view("team");
594
+ var initialView = launch.get("view");
595
+ if (initialView && views[initialView]) view(initialView);
925
596
  var mark = document.querySelector(".brand-mark");
926
597
  if (mark) {
927
598
  const icon = node("img");
@@ -942,9 +613,16 @@
942
613
  void refresh();
943
614
  }).catch((error) => notice(String(error), true));
944
615
  } else void refresh();
945
- setInterval(() => {
946
- if (!document.hidden) void refresh();
947
- }, 2e3);
616
+ function scheduleRefresh() {
617
+ setTimeout(
618
+ () => {
619
+ if (!document.hidden) void refresh();
620
+ scheduleRefresh();
621
+ },
622
+ snapshot?.jobs.some((job) => active(job.status)) ? 2e3 : 1e4
623
+ );
624
+ }
625
+ scheduleRefresh();
948
626
  document.addEventListener("visibilitychange", () => {
949
627
  if (!document.hidden) void refresh();
950
628
  });
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "apexrest-playwright-runtime",
3
- "version": "0.5.0",
3
+ "version": "1.0.0",
4
4
  "private": true,
5
5
  "type": "module",
6
6
  "dependencies": {