gina 0.5.4-alpha.1 → 0.5.4

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 (475) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/README.md +11 -9
  3. package/ROADMAP.md +1 -0
  4. package/framework/v0.5.4/VERSION +1 -0
  5. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +40 -1
  6. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  7. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  8. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +180 -100
  9. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.js +91 -15
  10. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +216 -215
  11. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  12. package/framework/v0.5.4/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  13. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.js +26 -0
  14. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-swig.js +15 -7
  15. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/validator/src/form-validator.js +73 -13
  16. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/validator/src/main.js +6 -1
  17. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/router.js +15 -2
  18. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/server.isaac.js +2 -38
  19. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/server.js +195 -30
  20. package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/settings.json +1 -1
  21. package/framework/v0.5.4/lib/admin/package.json +17 -0
  22. package/framework/v0.5.4/lib/admin/src/main.js +93 -0
  23. package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/add.js +38 -2
  24. package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/arguments.json +1 -0
  25. package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/help.txt +15 -1
  26. package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/index.js +27 -5
  27. package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing/src/main.js +12 -1
  28. package/framework/{v0.5.4-alpha.1 → v0.5.4}/package.json +1 -1
  29. package/gna.js +4 -4
  30. package/llms.txt +27 -1
  31. package/package.json +4 -4
  32. package/framework/v0.5.4-alpha.1/VERSION +0 -1
  33. package/framework/v0.5.4-alpha.1/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  34. package/framework/v0.5.4-alpha.1/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  35. package/framework/v0.5.4-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  36. package/framework/v0.5.4-alpha.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  37. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/AUTHORS +0 -0
  38. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/LICENSE +0 -0
  39. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/html/nolayout.html +0 -0
  40. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/html/static.html +0 -0
  41. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/android-chrome-192x192.png +0 -0
  42. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/android-chrome-512x512.png +0 -0
  43. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/apple-touch-icon.png +0 -0
  44. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/favicon-16x16.png +0 -0
  45. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/favicon-32x32.png +0 -0
  46. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/img/favicon.ico +0 -0
  47. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/README.md +0 -0
  48. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  49. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  50. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  51. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  52. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  55. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  56. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  57. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  58. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  59. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  60. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  61. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/config.js +0 -0
  62. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/ai/index.js +0 -0
  63. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/ai/lib/connector.js +0 -0
  64. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/index.js +0 -0
  65. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/connector.js +0 -0
  66. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  67. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  68. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/n1ql.js +0 -0
  69. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/session-store.js +0 -0
  70. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  71. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  72. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mongodb/index.js +0 -0
  73. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mongodb/lib/connector.js +0 -0
  74. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  75. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mongodb/lib/session-store.js +0 -0
  76. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mysql/index.js +0 -0
  77. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/mysql/lib/connector.js +0 -0
  78. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/postgresql/index.js +0 -0
  79. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/postgresql/lib/connector.js +0 -0
  80. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/redis/index.js +0 -0
  81. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/redis/lib/session-store.js +0 -0
  82. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/scylladb/index.js +0 -0
  83. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/scylladb/lib/connector.js +0 -0
  84. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/scylladb/lib/session-store.js +0 -0
  85. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/sql-parser.js +0 -0
  86. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/sqlite/index.js +0 -0
  87. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/sqlite/lib/connector.js +0 -0
  88. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/connectors/sqlite/lib/session-store.js +0 -0
  89. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/content.encoding +0 -0
  90. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.framework.js +0 -0
  91. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-json.js +0 -0
  92. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-nunjucks-async.js +0 -0
  93. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-nunjucks.js +0 -0
  94. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-stream.js +0 -0
  95. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-swig-async.js +0 -0
  96. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/controller.render-v1.js +0 -0
  97. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/index.js +0 -0
  98. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/controller/inspector-window-emit.js +0 -0
  99. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/LICENSE +0 -0
  100. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/README.md +0 -0
  101. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  102. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  103. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  104. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  105. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/busboy-1.6.0/package.json +0 -0
  106. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  107. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  108. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/deps/streamsearch-1.1.0/package.json +0 -0
  109. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/dev/index.js +0 -0
  110. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/dev/lib/class.js +0 -0
  111. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/dev/lib/factory.js +0 -0
  112. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/dev/lib/tools.js +0 -0
  113. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/gna.js +0 -0
  114. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/README.md +0 -0
  115. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/currency.json +0 -0
  116. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/dist/language/en.json +0 -0
  117. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/dist/language/fr.json +0 -0
  118. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/dist/region/en.json +0 -0
  119. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/dist/region/fr.json +0 -0
  120. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/locales/index.js +0 -0
  121. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/mime.types +0 -0
  122. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/model/entity.js +0 -0
  123. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/model/index.js +0 -0
  124. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/model/template/entityFactory.js +0 -0
  125. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/model/template/index.js +0 -0
  126. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/README.md +0 -0
  127. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/index.js +0 -0
  128. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/csrf/README.md +0 -0
  129. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/csrf/package.json +0 -0
  130. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/csrf/src/main.js +0 -0
  131. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/README.md +0 -0
  132. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coep/README.md +0 -0
  133. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coep/package.json +0 -0
  134. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  135. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coop/README.md +0 -0
  136. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coop/package.json +0 -0
  137. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  138. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/corp/README.md +0 -0
  139. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/corp/package.json +0 -0
  140. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  141. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/csp/README.md +0 -0
  142. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/csp/package.json +0 -0
  143. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  144. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  145. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  146. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  147. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  148. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  149. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  150. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  151. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  152. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  153. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/package.json +0 -0
  154. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  155. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  156. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  157. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/src/main.js +0 -0
  158. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  159. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  160. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  161. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  162. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  163. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  164. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  165. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  166. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  167. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  168. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  169. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  170. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  171. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  172. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  173. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  174. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  175. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  176. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/session/README.md +0 -0
  177. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/session/package.json +0 -0
  178. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/session/src/main.js +0 -0
  179. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/storage/README.md +0 -0
  180. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/storage/build.json +0 -0
  181. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/storage/package.json +0 -0
  182. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/storage/src/main.js +0 -0
  183. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/validator/README.md +0 -0
  184. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/validator/build.json +0 -0
  185. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/plugins/lib/validator/package.json +0 -0
  186. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/server.express.js +0 -0
  187. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/status.codes +0 -0
  188. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/_gitignore +0 -0
  189. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/app.json +0 -0
  190. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  191. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/routing.json +0 -0
  192. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/settings.json +0 -0
  193. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  194. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/templates.json +0 -0
  195. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  196. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  197. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  198. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  199. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/index.js +0 -0
  200. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle/locales/en.json +0 -0
  201. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  202. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  203. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  204. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  205. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  206. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  207. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  208. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/readme.md +0 -0
  209. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_public/sw.js +0 -0
  210. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  211. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  212. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  213. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  214. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  215. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/command/gina.bat.tpl +0 -0
  216. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/command/gina.tpl +0 -0
  217. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/env.json +0 -0
  218. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/manifest.json +0 -0
  219. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/package.json +0 -0
  220. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/statics.json +0 -0
  221. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/conf/templates.json +0 -0
  222. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/client/json/401.json +0 -0
  223. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/client/json/403.json +0 -0
  224. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/client/json/404.json +0 -0
  225. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/server/html/50x.html +0 -0
  226. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/server/json/500.json +0 -0
  227. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/error/server/json/503.json +0 -0
  228. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/core/template/extensions/logger/config.json +0 -0
  229. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/console.js +0 -0
  230. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/context.js +0 -0
  231. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/data/LICENSE +0 -0
  232. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/data/README.md +0 -0
  233. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/data/package.json +0 -0
  234. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/data/src/main.js +0 -0
  235. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/dateFormat.js +0 -0
  236. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/index.js +0 -0
  237. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/json/LICENSE +0 -0
  238. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/json/README.md +0 -0
  239. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/json/package.json +0 -0
  240. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/json/src/main.js +0 -0
  241. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/path.js +0 -0
  242. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/plugins/README.md +0 -0
  243. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/plugins/package.json +0 -0
  244. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/plugins/src/api-error.js +0 -0
  245. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/plugins/src/main.js +0 -0
  246. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/prototypes.js +0 -0
  247. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/task.js +0 -0
  248. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/helpers/text.js +0 -0
  249. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/archiver/README.md +0 -0
  250. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/archiver/build.json +0 -0
  251. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/archiver/package.json +0 -0
  252. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/archiver/src/dep/jszip.min.js +0 -0
  253. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/archiver/src/main.js +0 -0
  254. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/async/package.json +0 -0
  255. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/async/src/main.js +0 -0
  256. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cache/README.md +0 -0
  257. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cache/build.json +0 -0
  258. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cache/package.json +0 -0
  259. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cache/src/main.js +0 -0
  260. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/aliases.json +0 -0
  261. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/build.js +0 -0
  262. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/copy.js +0 -0
  263. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/cp.js +0 -0
  264. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/help.js +0 -0
  265. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  266. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/list.js +0 -0
  267. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/mcp-start.js +0 -0
  268. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/mcp.js +0 -0
  269. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/oas.js +0 -0
  270. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/openapi.js +0 -0
  271. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/remove.js +0 -0
  272. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/rename.js +0 -0
  273. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/restart.js +0 -0
  274. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/rm.js +0 -0
  275. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/start.js +0 -0
  276. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/status.js +0 -0
  277. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/bundle/stop.js +0 -0
  278. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/cache/stats.js +0 -0
  279. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/add.js +0 -0
  280. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/arguments.json +0 -0
  281. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/help.js +0 -0
  282. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/help.txt +0 -0
  283. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/list.js +0 -0
  284. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/migrate.js +0 -0
  285. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/remove.js +0 -0
  286. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/connector/rm.js +0 -0
  287. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/add.js +0 -0
  288. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/get.js +0 -0
  289. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/help.js +0 -0
  290. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/help.txt +0 -0
  291. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/link-dev.js +0 -0
  292. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/list.js +0 -0
  293. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/remove.js +0 -0
  294. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/rm.js +0 -0
  295. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/set.js +0 -0
  296. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/unset.js +0 -0
  297. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/env/use.js +0 -0
  298. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/arguments.json +0 -0
  299. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/build.js +0 -0
  300. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/dot.js +0 -0
  301. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/get.js +0 -0
  302. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/help.js +0 -0
  303. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/help.txt +0 -0
  304. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/init.js +0 -0
  305. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/link-node-modules.js +0 -0
  306. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/link.js +0 -0
  307. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/msg.json +0 -0
  308. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/open.js +0 -0
  309. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/restart.js +0 -0
  310. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/set.js +0 -0
  311. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/start.js +0 -0
  312. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/status.js +0 -0
  313. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/stop.js +0 -0
  314. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/tail.js +0 -0
  315. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/update.js +0 -0
  316. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/framework/version.js +0 -0
  317. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/gina-dev.1.md +0 -0
  318. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/gina-framework.1.md +0 -0
  319. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/gina.1.md +0 -0
  320. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/helper.js +0 -0
  321. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/add.js +0 -0
  322. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/arguments.json +0 -0
  323. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/export.js +0 -0
  324. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/help.js +0 -0
  325. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/help.txt +0 -0
  326. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/import.js +0 -0
  327. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/i18n/scan.js +0 -0
  328. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/index.js +0 -0
  329. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/inspector/help.js +0 -0
  330. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/inspector/help.txt +0 -0
  331. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/inspector/open.js +0 -0
  332. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/minion/arguments.json +0 -0
  333. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/minion/help.js +0 -0
  334. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/minion/help.txt +0 -0
  335. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/minion/kill.js +0 -0
  336. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/minion/list.js +0 -0
  337. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/msg.json +0 -0
  338. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/help.js +0 -0
  339. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/help.txt +0 -0
  340. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/inc/scan.js +0 -0
  341. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/list.js +0 -0
  342. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/reset.js +0 -0
  343. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/port/set.js +0 -0
  344. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/add.js +0 -0
  345. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/arguments.json +0 -0
  346. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/build.js +0 -0
  347. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/help.js +0 -0
  348. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/help.txt +0 -0
  349. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/import.js +0 -0
  350. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/list.js +0 -0
  351. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/move.js +0 -0
  352. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/remove.js +0 -0
  353. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/rename.js +0 -0
  354. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/restart.js +0 -0
  355. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/rm.js +0 -0
  356. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/start.js +0 -0
  357. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/status.js +0 -0
  358. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/project/stop.js +0 -0
  359. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/arguments.json +0 -0
  360. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/help.js +0 -0
  361. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/help.txt +0 -0
  362. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/list.js +0 -0
  363. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/remove.js +0 -0
  364. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/protocol/set.js +0 -0
  365. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/add.js +0 -0
  366. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/help.js +0 -0
  367. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/help.txt +0 -0
  368. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/link-local.js +0 -0
  369. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/link-production.js +0 -0
  370. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/list.js +0 -0
  371. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/remove.js +0 -0
  372. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/rm.js +0 -0
  373. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/scope/use.js +0 -0
  374. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/secrets/arguments.json +0 -0
  375. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/secrets/check.js +0 -0
  376. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/secrets/help.js +0 -0
  377. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/secrets/help.txt +0 -0
  378. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/secrets/scan.js +0 -0
  379. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/service/help.js +0 -0
  380. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/service/help.txt +0 -0
  381. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/service/list.js +0 -0
  382. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/service/start.js +0 -0
  383. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd/view/add.js +0 -0
  384. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd-status-format/package.json +0 -0
  385. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cmd-status-format/src/main.js +0 -0
  386. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/collection/README.md +0 -0
  387. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/collection/build.json +0 -0
  388. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/collection/package.json +0 -0
  389. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/collection/src/main.js +0 -0
  390. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/config.js +0 -0
  391. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/connector-registry/package.json +0 -0
  392. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/connector-registry/src/main.js +0 -0
  393. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cron/README.md +0 -0
  394. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cron/package.json +0 -0
  395. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/cron/src/main.js +0 -0
  396. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/domain/LICENSE +0 -0
  397. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/domain/README.md +0 -0
  398. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/domain/package.json +0 -0
  399. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/domain/src/main.js +0 -0
  400. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/generator/index.js +0 -0
  401. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/i18n/package.json +0 -0
  402. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/i18n/src/main.js +0 -0
  403. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inherits/LICENSE +0 -0
  404. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inherits/README.md +0 -0
  405. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inherits/package.json +0 -0
  406. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inherits/src/main.js +0 -0
  407. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inspector-redact/package.json +0 -0
  408. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/inspector-redact/src/main.js +0 -0
  409. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/instrument/package.json +0 -0
  410. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/instrument/src/main.js +0 -0
  411. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/job/package.json +0 -0
  412. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/job/src/main.js +0 -0
  413. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/README.md +0 -0
  414. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/package.json +0 -0
  415. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/default/index.js +0 -0
  416. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/file/index.js +0 -0
  417. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  418. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  419. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/mq/index.js +0 -0
  420. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/mq/listener.js +0 -0
  421. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/containers/mq/speaker.js +0 -0
  422. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/helper.js +0 -0
  423. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/logger/src/main.js +0 -0
  424. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/math/index.js +0 -0
  425. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-dispatch/package.json +0 -0
  426. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-dispatch/src/main.js +0 -0
  427. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-http/package.json +0 -0
  428. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-http/src/main.js +0 -0
  429. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-server/package.json +0 -0
  430. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/mcp-server/src/main.js +0 -0
  431. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/merge/README.md +0 -0
  432. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/merge/package.json +0 -0
  433. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/merge/src/main.js +0 -0
  434. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/metrics/package.json +0 -0
  435. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/metrics/src/main.js +0 -0
  436. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/model.js +0 -0
  437. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/nunjucks-filters/README.md +0 -0
  438. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/nunjucks-filters/package.json +0 -0
  439. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/nunjucks-filters/src/main.js +0 -0
  440. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/nunjucks-resolver/package.json +0 -0
  441. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/nunjucks-resolver/src/main.js +0 -0
  442. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/proc.js +0 -0
  443. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing/README.md +0 -0
  444. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing/build.json +0 -0
  445. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing/package.json +0 -0
  446. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing/src/radix.js +0 -0
  447. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing-introspect/package.json +0 -0
  448. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/routing-introspect/src/main.js +0 -0
  449. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/secrets/package.json +0 -0
  450. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/secrets/src/backends/env.js +0 -0
  451. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/secrets/src/main.js +0 -0
  452. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/session-store.js +0 -0
  453. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/shell.js +0 -0
  454. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/state.js +0 -0
  455. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/swig-filters/README.md +0 -0
  456. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/swig-filters/package.json +0 -0
  457. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/swig-filters/src/main.js +0 -0
  458. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/swig-resolver/package.json +0 -0
  459. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/swig-resolver/src/main.js +0 -0
  460. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/template-loaders/package.json +0 -0
  461. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/template-loaders/src/loaders/http.js +0 -0
  462. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/template-loaders/src/loaders/memory.js +0 -0
  463. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/template-loaders/src/main.js +0 -0
  464. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/url/README.md +0 -0
  465. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/url/index.js +0 -0
  466. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/url/routing.json +0 -0
  467. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/uuid/package.json +0 -0
  468. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/uuid/src/main.js +0 -0
  469. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/validator.js +0 -0
  470. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/watcher/package.json +0 -0
  471. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/watcher/src/main.js +0 -0
  472. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/ws-framing/package.json +0 -0
  473. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/ws-framing/src/main.js +0 -0
  474. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/ws-session/package.json +0 -0
  475. /package/framework/{v0.5.4-alpha.1 → v0.5.4}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,30 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.4 - 2026-06-19
10
+ ### Added
11
+ * Added a `--ignore-ports` flag to `gina bundle:add`: pass a comma-separated list of port numbers (e.g. `--ignore-ports=3000,3001`) to exclude them from the availability scan when creating or importing a bundle, on top of the already-assigned ports and the reserved 4100-4199 range that are skipped automatically. Composable with `--start-port-from`.
12
+ ### Changed
13
+ * Widened the supported Node.js version range to include Node 26. The `engine.node` field is now `>= 22 <27`; the full test suite passes on Node 26.3.0 and Node 26 is now part of the CI test matrix.
14
+ ### Fixed
15
+ * FormValidator isFloat now accepts string float values (e.g. "1.5") by coercing with Number() before checking finiteness and a fractional part. Previously the strict Number(val) === val gate passed only a real JS number, so server-side validation of form and urlencoded input (always strings) wrongly rejected valid floats. Whole numbers still fail, preserving the rule that an integer is not a float.
16
+ * FormValidator isDate now validates non-ISO date masks (e.g. dd/mm/yyyy). It builds the date from explicit numeric components identified by the mask tokens with a round-trip range check, instead of reformatting a string and handing it to new Date(). Previously a slash mask with a day greater than 12 was parsed as US MM/DD and wrongly rejected; impossible dates such as 2023-02-30 are still rejected.
17
+ * Fixed multipart file uploads ignoring the configured upload directory. The handler read a non-existent `upload.uploadDir` key and always wrote to the OS temp dir, so the documented `upload.tmpPath` and per-group `path` settings had no effect. Uploads now stream to the configured `tmpPath` (or a per-group `path` when the group sets one), falling back to the OS temp dir only when neither is configured; a configured directory that does not exist yet is created automatically.
18
+ * Fixed two multipart upload limits that were declared in settings.json but inert. `upload.maxFields` (default 1000) is now enforced as a global per-request file-count cap — previously it was never read, so a group allowing multiple files accepted an unbounded number. `upload.maxFieldsSize` now honours its unit suffix (B/KB/MB/GB; a bare number is read as MB) instead of dropping it — previously `"512K"` was parsed as 512 and compared as 512 MB. Back-compat note: a `maxFieldsSize` with a non-MB suffix now means what it says (a tighter limit than before); the shipped `"2MB"` default is unchanged.
19
+ * Fixed a dev-mode memory leak: with hot-reload active (NODE_ENV_IS_DEV), the framework evicted and re-required its collection, merge, uuid, cache and archiver libraries on every request, so long-lived code that captured those libraries at startup accumulated dead module references that the per-request prune could not reach — a slow heap climb that ended in an out-of-memory crash under sustained dev traffic (for example a long end-to-end run). These five stable libraries are now loaded once (like the logger, job and state singletons), keeping the dev-mode heap flat. Production was never affected (it does not evict modules per request).
20
+ * Fixed a rare cross-request data mix-up in the dev Inspector and instrumentation-window data feed for Swig-rendered HTML pages: under concurrent requests, one page's captured query log and flow timeline could be attributed to another request. The Swig render path now isolates its per-request state the same way the Nunjucks path already does. This affects Inspector observability only — rendered page output was never affected.
21
+ * Fixed the dev Inspector misrouting its live server-log stream (/_gina/logs) and live database-index lookups (/_gina/indexes) to the wrong bundle in reverse-proxy multi-bundle setups, where several bundles share a host and differ only by a path prefix. Both now resolve the monitored bundle the same way the Data-tab Reveal already did — via the page opener or an explicit ?target= — instead of a bare path strip that hit the proxy default bundle. Single-bundle setups are unaffected. Dev Inspector tooling only.
22
+ * Hardened the dev Inspector SPA against two edge cases: a corrupted or tampered fold-state value in localStorage could throw and break the collapsible tree toggles, and a form-data section label was inserted into the panel without HTML-escaping. Both are now guarded. Dev Inspector tooling only; no impact on application pages.
23
+ * The default (Express) server engine now serves the admin endpoints /_gina/info and /_gina/cache/stats, which previously returned 404 there while the Isaac engine served them. Both engines now expose them with the same always-on, IP-allowlisted behaviour (loopback-only by default; configure via app.json admin.allowFrom), so process/runtime info and cache statistics are available regardless of which server engine a bundle runs.
24
+ * FormValidator's `isDate` rule now returns the field object on its valid path (like every other rule), so it chains — e.g. `field.isDate(mask).isRequired()`; the parsed Date stays available on the field's `value`.
25
+ * Fixed a dev-mode memory retention on the HTTP/2 `self.query()` client path. When an outbound query stream settled at a non-retry outcome — timeout, stream error, premature close, exhausted 502 retries, or normal completion — its event listeners stayed attached, and through them the per-request controller plus the large per-request configuration clone it had captured were retained until the cached HTTP/2 session was eventually torn down. Under sustained bursty inter-service traffic the retained clones accumulated and could push a long-running dev bundle toward its heap limit. The stream is now released at every non-retry terminal (its timeout cancelled, listeners detached, stream closed), which bounds live heap. Production was unaffected — it reuses a single controller class, so retention was already bounded — and the retry paths already destroyed the session.
26
+ * Narrowed the per-request configuration clone in the router so a matched request no longer deep-clones the entire bundle configuration. Only the routing table the request mutates is cloned per request; the large immutable remainder (templates, server configuration, application assets) is shared by reference. Under sustained concurrency this removes a heap high-water-mark proportional to configuration size. No behavior or API change.
27
+ * getRouteByUrl no longer mutates the shared route configuration in place when resolving a parameterised route. It now clones the route param subtree per request and propagates the resolved values onto the returned route, so a :placeholder in a route param field (path, namespace, file or title) no longer leaks the values resolved for one request into later requests for the same route, nor produces stale params across repeat client-side navigations. (#B52-residual)
28
+ * Dev Inspector: the data tabs (Data, View, Forms, Query, Flow) now reliably track the page that opened the Inspector, instead of intermittently showing another browser tab's data. When a bundle's pages set `Cross-Origin-Opener-Policy: same-origin`, the browser severs the Inspector popup's `window.opener`, which previously dropped the Inspector onto bundle-wide channels (the shared `localStorage` snapshot and the worker-wide `/_gina/agent` stream) that any open tab or background XHR could overwrite. The statusbar now opens the Inspector bound to the opener tab via a per-tab BroadcastChannel (`?ch=<tabId>`), so its data follows that one tab's navigation and is immune to other tabs' renders. No change when the Inspector is opened standalone (`?target=`) or directly by URL.
29
+ * Live form validation now shows only the soft warning border while a field is being edited; its error message is revealed once the field is committed (on blur or submit).
30
+ ### Security
31
+ * Uploads to an unconfigured upload group are now rejected with HTTP 400 instead of streaming through unchecked, closing a bypass of a group's `allowedExtensions` and `isMultipleAllowed` limits. A file with no group falls back to the default `untagged` group, and `untagged` is no longer exempt from its own configured limits. Back-compat: the shipped `untagged` default now sets `isMultipleAllowed: true`; bundles whose `settings.json` set it to `false`, or that uploaded without configuring `upload.groups`, must add or adjust their upload-group configuration.
32
+
9
33
  ## 0.5.3 - 2026-06-14
10
34
 
11
35
  _Patch release — no breaking changes. Finishes the released-response crash-family hardening (a late two-/three-argument `throwError()` and the swig / nunjucks render delegates, including their async variants, no longer crash or emit unhandled rejections when invoked on an already-released response) and adds bundle-boot / startup robustness — atomic `~/.gina` state-file writes, framework command-socket hardening, protection of the framework socket port from a bundle's `--port`, and synchronous boot-failure diagnostics under piped output — plus storage `_id` collision hardening, clearer unresolved-`${secret:KEY}` diagnostics, and the new `gina port:set --force`._
package/README.md CHANGED
@@ -39,15 +39,17 @@ gina bundle:start api @myproject
39
39
  open https://localhost:3100
40
40
  ```
41
41
 
42
- ## What's in 0.5.3
43
-
44
- - **Released-response crash family finished (bundle-killing).** The two remaining members are now guarded: a late `self.throwError(statusCode, error)` in its two- and three-argument forms (only the single-argument form was guarded before), and the HTML render delegates (swig and nunjucks, including their async variants) invoked after the response was already released. Both now log-and-ignore or no-op instead of dereferencing the released response — no `uncaughtException`, no SIGTERM, no unhandled promise rejection — matching `renderJSON()` and the streaming delegate.
45
- - **Atomic `~/.gina` state-file writes.** The five state files (`main.json`, `projects.json`, `settings.json`, `env.json`, `locals.json`) are now written via a temp file plus rename, so a concurrent boot of many bundles or containers against the same home directory can no longer read a partially-written file and crash on startup.
46
- - **Framework command-socket hardening.** The command socket now accumulates each connection's payload and parses it only once complete; a malformed, partial, or non-JSON payload is ignored instead of throwing an uncaught exception that could drop the command or shut the framework down.
47
- - **Framework socket port no longer corrupted by bundle flags.** A sub-topic command passed `--port` (e.g. `gina port:set`, `gina bundle:start`) no longer overwrites the framework socket port in `~/.gina/<short>/settings.json` which previously made later online commands fail with `[ gina ] not started`. The framework-connection flags (`--port`, `--mq-port`, `--host-v4`, `--hostname`, `--debug-port`) now apply as framework settings only for framework-scoped commands.
48
- - **Boot failures surface their cause.** The `gina-container` launcher and the framework boot path now flush the failure reason synchronously before `process.exit`, so a crash on a piped stdout/stderr (the norm under container log collectors) reports its cause instead of exiting with no message.
49
- - **`gina port:set --force`.** Reassigns a port already held by another bundle (evicting the prior holder from both port maps); without `--force`, an in-use port is still rejected as before. Enables deterministic per-bundle port pinning for one-bundle-per-container deployments.
50
- - **Storage `_id` collision hardening** (16 base-62 random suffix, matching the collection ID convention) and **clearer unresolved-`${secret:KEY}` diagnostics** (the failing key name and config path are logged at debug level; the propagated error still omits the key).
42
+ ## What's in 0.5.4
43
+
44
+ - **Node.js 26 support.** The supported range now includes Node 26 `engine.node` is `>= 22 <27`, the full test suite passes on 26.3.0, and Node 26 is part of the CI matrix.
45
+ - **Form-validation rule fixes (server + client).** `isFloat` now accepts string float values such as `"1.5"`, so server-side validation of form and urlencoded input (always strings) no longer rejects valid floats whole numbers still fail. `isDate` validates non-ISO masks like `dd/mm/yyyy` (a slash mask with a day past 12 is no longer mis-read as US `MM/DD`) and now returns the field object, so it chains: `field.isDate(mask).isRequired()`.
46
+ - **Quieter live form validation.** While a field is being edited only the soft warning border shows; the error message is revealed once the field is committed (on blur or submit).
47
+ - **File uploads honour their configured directory and limits.** Multipart uploads now write to the configured `upload.tmpPath` (or a per-group `path`), creating the directory if missing, instead of always using the OS temp dir. `upload.maxFields` (a global per-request file-count cap) is now enforced, and `upload.maxFieldsSize` honours its unit suffix (`B`/`KB`/`MB`/`GB`; a bare number is read as MB). **Security:** a file uploaded to an unconfigured group is now rejected with HTTP 400 instead of streaming through unchecked, closing a bypass of a group's `allowedExtensions` / `isMultipleAllowed` limits. **Back-compat:** the `untagged` default now sets `isMultipleAllowed: true`, and a non-MB `maxFieldsSize` suffix now means what it says see the [migration guide](https://gina.io/docs/migration) if your bundle configures uploads.
48
+ - **Dev-mode heap fixes.** Two retention paths that could push a long-running dev bundle toward an out-of-memory crash under sustained traffic are closed: the hot-reload path no longer accumulates dead module references for five core libraries (now loaded once, like the logger / job / state singletons), and the HTTP/2 `self.query()` client releases a settled stream at every non-retry outcome instead of retaining the per-request controller and its config clone. Production was never affected by either.
49
+ - **Tighter per-request config isolation.** The router now deep-clones only the routing table a matched request mutates, sharing the large immutable remainder by reference removing a concurrency heap high-water-mark proportional to config size. Relatedly, `getRouteByUrl` no longer mutates the shared route config in place, so a `:placeholder` route can't leak one request's resolved values (path / namespace / file / title) into later requests for the same route.
50
+ - **Dev Inspector reliability.** The data tabs now reliably track the page that opened the Inspector — a per-tab channel survives `Cross-Origin-Opener-Policy: same-origin` severing `window.opener`. The Swig render path isolates per-request query/flow capture (concurrent requests no longer cross data); `/_gina/logs` and `/_gina/indexes` resolve the right bundle in reverse-proxy multi-bundle setups; and the SPA is hardened against a corrupted localStorage fold-state and an unescaped form-data label. Dev tooling only.
51
+ - **Express-engine admin-endpoint parity.** The default (Express) engine now serves `/_gina/info` and `/_gina/cache/stats` with the same always-on, loopback-only, IP-allowlisted behaviour as the Isaac engine (they previously 404'd there).
52
+ - **`gina bundle:add --ignore-ports`.** Exclude specific ports from the availability scan when creating or importing a bundle (e.g. `--ignore-ports=3000,3001`); composable with `--start-port-from`.
51
53
 
52
54
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
53
55
 
package/ROADMAP.md CHANGED
@@ -28,6 +28,7 @@ This roadmap covers planned features, architectural improvements, new connectors
28
28
  | **Q2 2026** | `0.5.1` ✅ | Patch: released-response crash family — late `throwError()` and the HTTP/2 inter-bundle query retry / late-response / redirect-intercept paths no longer kill the bundle · dev-mode hot-reload `module.children` heap leak fixed (OOM under sustained load) · inter-bundle proxy JSON bodies keep their `application/json` label · ROADMAP consistency release gate |
29
29
  | **Q2 2026** | `0.5.2` ✅ | Patch: released-response crash family completed across the remaining synchronous controller surface — `renderJSON()` / `redirect()` / `store()` / `push()` / `renderStream()` / request-method + form-rule helpers no longer kill the bundle when called on an already-released response · exhausted HTTP/2 502 retries surface a typed `BAD_GATEWAY` error instead of being consumed as success |
30
30
  | **Q2 2026** | `0.5.3` ✅ | Patch: released-response crash family finished — late `throwError(status, error)` (2- and 3-argument forms) and the HTML render delegates (swig / nunjucks + async variants) no longer crash or emit unhandled rejections when invoked on an already-released response · atomic `~/.gina` state-file writes (concurrent multi-bundle / multi-container boot can't read a torn file) · framework command-socket hardened against malformed / fragmented payloads · framework socket port no longer corrupted by a bundle's `--port` · synchronous boot-failure diagnostics under piped stdout/stderr · storage `_id` collision hardening · `gina port:set --force` |
31
+ | **Q2 2026** | `0.5.4` ✅ | Node.js 26 support (engine `>= 22 <27`, CI matrix) · FormValidator fixes (`isFloat` accepts string floats · `isDate` non-ISO masks + rule chaining) · quieter live form validation (error message revealed on blur) · file-upload fixes (honour `tmpPath` / per-group `path` · enforce `maxFields` + `maxFieldsSize` unit suffix · **Security**: reject uploads to an unconfigured group, closing an `allowedExtensions` / `isMultipleAllowed` bypass) · two dev-mode heap fixes (hot-reload lib-eviction leak · HTTP/2 `self.query()` settled-stream retention) · tighter per-request config isolation (narrowed router clone · `getRouteByUrl` shared-config mutation) · dev Inspector reliability (per-tab channel under COOP · Swig render-race isolation · multi-bundle proxy log/index routing · SPA hardening) · Express-engine `/_gina/info` + `/_gina/cache/stats` parity · `bundle:add --ignore-ports` |
31
32
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · CLI Tier 3 (project:move, framework:update, backup/restore, man pages) · Beemaster admin + visual translation editor |
32
33
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
33
34
 
@@ -0,0 +1 @@
1
+ 0.5.4
@@ -3,6 +3,42 @@
3
3
  'use strict';
4
4
  var d = window.__ginaData;
5
5
  if (!d || !d.user) return;
6
+
7
+ // ── Inspector per-tab data channel (#INS) ─────────────────────────────
8
+ // COOP can sever window.opener for the Inspector popup, dropping the
9
+ // Inspector onto bundle-global channels (the shared localStorage slot +
10
+ // the worker-wide /_gina/agent SSE) that ANY tab's render or background
11
+ // XHR clobbers. A per-tab BroadcastChannel — keyed by a sessionStorage id
12
+ // that is stable across THIS tab's navigations — lets the Inspector bind
13
+ // to this tab only. We publish the tab's current __ginaData here (page
14
+ // load) and on every ginaToolbar.update()/restore() (in-tab XHR/pushState
15
+ // renders), so the bound Inspector follows this tab and ignores others.
16
+ var _ginaTabId = null;
17
+ try {
18
+ _ginaTabId = sessionStorage.getItem('__gina_tab_id');
19
+ if (!_ginaTabId) {
20
+ _ginaTabId = 'gt' + Math.random().toString(36).slice(2) + Date.now().toString(36);
21
+ sessionStorage.setItem('__gina_tab_id', _ginaTabId);
22
+ }
23
+ } catch (e) { _ginaTabId = null; }
24
+ var _ginaBC = null;
25
+ try {
26
+ if (_ginaTabId && typeof BroadcastChannel !== 'undefined') {
27
+ _ginaBC = new BroadcastChannel('gina-inspector-' + _ginaTabId);
28
+ }
29
+ } catch (e) { _ginaBC = null; }
30
+ function _ginaPublish() {
31
+ if (!_ginaBC) return;
32
+ try { _ginaBC.postMessage({ type: 'data', payload: window.__ginaData }); } catch (e) {}
33
+ }
34
+ // A freshly-opened Inspector posts {type:'request'} (BroadcastChannel does
35
+ // not replay past messages) — reply with the current payload.
36
+ if (_ginaBC) {
37
+ _ginaBC.onmessage = function (ev) {
38
+ if (ev && ev.data && ev.data.type === 'request') _ginaPublish();
39
+ };
40
+ }
41
+
6
42
  var env = d.user.environment || {};
7
43
  var data = d.user.data || {};
8
44
  var bundle = env.bundle || '?';
@@ -167,6 +203,7 @@
167
203
 
168
204
  // Sync localStorage for the Inspector's fallback channel
169
205
  try { localStorage.setItem('__ginaData', JSON.stringify(window.__ginaData)); } catch (e) {}
206
+ _ginaPublish();
170
207
  },
171
208
  restore: function () {
172
209
  if (!window.__ginaData) return;
@@ -182,6 +219,7 @@
182
219
  } catch (e) {}
183
220
  }
184
221
  try { localStorage.setItem('__ginaData', JSON.stringify(window.__ginaData)); } catch (e) {}
222
+ _ginaPublish();
185
223
  },
186
224
  hasParsedUrls: false
187
225
  };
@@ -213,6 +251,7 @@
213
251
 
214
252
  // Publish data for Inspector via localStorage (works regardless of opener)
215
253
  try { localStorage.setItem('__ginaData', JSON.stringify(d)); } catch (e) {}
254
+ _ginaPublish();
216
255
  var webroot = env.webroot || '/';
217
256
  if (webroot.charAt(webroot.length - 1) !== '/') webroot += '/';
218
257
  var el = document.createElement('div');
@@ -264,7 +303,7 @@
264
303
  }
265
304
  } catch (e) {}
266
305
  window.open(
267
- _embeddedUrl,
306
+ _embeddedUrl + (_ginaTabId ? '?ch=' + encodeURIComponent(_ginaTabId) : ''),
268
307
  'gina-inspector',
269
308
  'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top
270
309
  + ',menubar=no,toolbar=no,location=no,status=no,resizable=yes,scrollbars=yes'
@@ -146,6 +146,22 @@
146
146
  // ── State ──────────────────────────────────────────────────────────────
147
147
  /** @type {?Window|string} Data source — `Window` (opener), `'localStorage'`, or `null` */
148
148
  var source = null;
149
+ /**
150
+ * Bound mode (#INS) — the per-tab BroadcastChannel the Inspector binds to
151
+ * when the statusbar opened it with `?ch=<tabId>`. Scopes data to the ONE
152
+ * tab that opened the Inspector (immune to other tabs'/XHR renders that
153
+ * clobber the bundle-global localStorage + SSE channels COOP forces us onto
154
+ * when it severs window.opener). `null` outside bound mode.
155
+ * @type {?BroadcastChannel}
156
+ */
157
+ var _boundChannel = null;
158
+ /**
159
+ * Latest payload received over {@link _boundChannel}; read by pollData()
160
+ * (source === 'broadcast'). The channel handler also calls pollData() for an
161
+ * immediate apply, so the poll timer is only a fallback.
162
+ * @type {?Object}
163
+ */
164
+ var _bcLatest = null;
149
165
  /** @type {?Object} Latest parsed `__ginaData` payload */
150
166
  var ginaData = null;
151
167
  /** @type {LogEntry[]} In-memory log buffer (capped at {@link MAX_LOG_ENTRIES}) */
@@ -329,7 +345,13 @@
329
345
  function loadFoldStore() {
330
346
  try {
331
347
  var raw = localStorage.getItem(FOLD_STORAGE_KEY);
332
- return raw ? JSON.parse(raw) : {};
348
+ var o = raw ? JSON.parse(raw) : {};
349
+ // Shape-guard (mirrors getCustomOrder / getHiddenTabs / tryLocalStorage):
350
+ // a corrupted or tampered key could hold a JSON primitive (42 / true /
351
+ // "x"); returning it would make the un-try/caught toggle handler run
352
+ // `store[tab] = {}` on a primitive → strict-mode TypeError, breaking
353
+ // fold persistence on every <details> toggle.
354
+ return (o && typeof o === 'object' && !Array.isArray(o)) ? o : {};
333
355
  } catch (e) { return {}; }
334
356
  }
335
357
 
@@ -1399,7 +1421,7 @@
1399
1421
  // Remaining keys (e.g. "validated" — boolean set by gina.js form validator)
1400
1422
  for (var k = 0; k < keys.length; k++) {
1401
1423
  if (sectionOrder.indexOf(keys[k]) >= 0) continue;
1402
- h += '<h3 class="bm-sub-section-title">' + keys[k] + '</h3>';
1424
+ h += '<h3 class="bm-sub-section-title">' + escHtml(keys[k]) + '</h3>';
1403
1425
  h += renderTree(fd[keys[k]], 0, null, null, ginaFd ? ginaFd[keys[k]] : undefined);
1404
1426
  }
1405
1427
  return h;
@@ -1872,6 +1894,40 @@
1872
1894
  return (bytes / (1024 * 1024)).toFixed(1) + ' MB';
1873
1895
  }
1874
1896
 
1897
+ /**
1898
+ * Resolve the base URL prefix for a per-bundle `/_gina/*` endpoint.
1899
+ *
1900
+ * Three-fallback resolver (the same logic `toggleReveal()` uses): (1) a
1901
+ * `?target=` query param (standalone mode), (2) the opener's pathname
1902
+ * (statusbar-opened mode — routes to the bundle that rendered the current
1903
+ * page), (3) the Inspector's own pathname with `_gina/inspector...` stripped.
1904
+ * Critical in proxy-routed multi-bundle setups where bundles share a host and
1905
+ * differ only by a path prefix: a bare `/_gina/logs` or `/_gina/indexes` would
1906
+ * otherwise hit the proxy's default bundle instead of the monitored one.
1907
+ *
1908
+ * Used by every per-bundle `/_gina/*` consumer: `fetchLiveIndexes()`,
1909
+ * `tryServerLogs()`, `toggleReveal()`, `tryAgentPassive()`, and the
1910
+ * refresh-button re-reveal all resolve their base through this one helper
1911
+ * (pinned by inspector.test.js §54/§55/§56/§79). For `tryAgentPassive()`
1912
+ * the `?target=` branch is inert — it only runs when no `?target=` exists.
1913
+ *
1914
+ * @inner
1915
+ * @returns {string} Base URL prefix (no trailing slash), or '' for host root.
1916
+ */
1917
+ function resolveBundleBase() {
1918
+ try {
1919
+ var params = new URLSearchParams(window.location.search);
1920
+ var target = (params.get('target') || '').replace(/\/+$/, '');
1921
+ if (target) {
1922
+ return target;
1923
+ }
1924
+ if (window.opener && window.opener.location) {
1925
+ return (window.opener.location.pathname || '').replace(/\/+$/, '');
1926
+ }
1927
+ } catch (e) {}
1928
+ return window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
1929
+ }
1930
+
1875
1931
  /**
1876
1932
  * #QI2 — Fetch live index data from the /_gina/indexes endpoint.
1877
1933
  * Called when the Query tab renders queries with N/A index badges.
@@ -1882,7 +1938,10 @@
1882
1938
  function fetchLiveIndexes() {
1883
1939
  if (_liveIndexes !== null || _liveIndexesFetching) return;
1884
1940
  _liveIndexesFetching = true;
1885
- var base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '');
1941
+ // Route through the shared 3-fallback resolver so /_gina/indexes reaches
1942
+ // the monitored bundle in proxy-routed multi-bundle setups (was a bare
1943
+ // pathname strip that misrouted to the proxy's default bundle).
1944
+ var base = resolveBundleBase();
1886
1945
  var url = base + '/_gina/indexes';
1887
1946
  try {
1888
1947
  var xhr = new XMLHttpRequest();
@@ -3062,20 +3121,7 @@
3062
3121
  // one that produced the snapshot.
3063
3122
  // 3. Fallback — strip `_gina/inspector` from the Inspector's own
3064
3123
  // pathname (same approach as tryServerLogs).
3065
- var base = '';
3066
- try {
3067
- var params = new URLSearchParams(window.location.search);
3068
- var target = (params.get('target') || '').replace(/\/+$/, '');
3069
- if (target) {
3070
- base = target;
3071
- } else if (window.opener && window.opener.location) {
3072
- base = (window.opener.location.pathname || '').replace(/\/+$/, '');
3073
- } else {
3074
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
3075
- }
3076
- } catch (e) {
3077
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
3078
- }
3124
+ var base = resolveBundleBase();
3079
3125
  var url = base + '/_gina/reveal';
3080
3126
  var xhr = new XMLHttpRequest();
3081
3127
  try {
@@ -3202,6 +3248,41 @@
3202
3248
  } catch (e) { return false; }
3203
3249
  }
3204
3250
 
3251
+ /**
3252
+ * Bind the Inspector to the opener tab's per-tab BroadcastChannel (#INS).
3253
+ *
3254
+ * Used in "bound mode" — when the statusbar opened the Inspector with a
3255
+ * `?ch=<tabId>` param. The statusbar (running in the opener tab) publishes
3256
+ * that tab's CURRENT `__ginaData` on `gina-inspector-<tabId>` on every page
3257
+ * render and every `ginaToolbar.update()` (in-tab XHR / pushState), so the
3258
+ * data is scoped to exactly that tab and follows its navigation — unaffected
3259
+ * by other tabs' or background-XHR renders that clobber the bundle-global
3260
+ * localStorage / `/_gina/agent` SSE channels COOP forces the Inspector onto
3261
+ * when it severs `window.opener`.
3262
+ *
3263
+ * Sets `source = 'broadcast'` (pollData then reads {@link _bcLatest}). Posts
3264
+ * a `{type:'request'}` on connect so the opener replies with its current
3265
+ * payload (BroadcastChannel does not replay past messages).
3266
+ *
3267
+ * @inner
3268
+ * @param {string} ch The opener tab id from the `?ch=` param.
3269
+ * @returns {boolean} `true` when the channel was established.
3270
+ */
3271
+ function setupBoundChannel(ch) {
3272
+ if (!ch || typeof BroadcastChannel === 'undefined') return false;
3273
+ try {
3274
+ _boundChannel = new BroadcastChannel('gina-inspector-' + ch);
3275
+ } catch (e) { _boundChannel = null; return false; }
3276
+ source = 'broadcast';
3277
+ _boundChannel.onmessage = function (ev) {
3278
+ if (!ev || !ev.data || ev.data.type !== 'data' || !ev.data.payload) return;
3279
+ _bcLatest = ev.data.payload;
3280
+ pollData(); // immediate apply; the poll timer is the fallback
3281
+ };
3282
+ try { _boundChannel.postMessage({ type: 'request' }); } catch (e) {}
3283
+ return true;
3284
+ }
3285
+
3205
3286
  // ── Settings — environment info + memory gauge ────────────────────────
3206
3287
 
3207
3288
  /**
@@ -3335,6 +3416,14 @@
3335
3416
  if (tab !== 'logs') renderTab(tab);
3336
3417
  }
3337
3418
  return;
3419
+ } else if (source === 'broadcast') {
3420
+ // Bound mode (#INS) — data is pushed over the per-tab
3421
+ // BroadcastChannel into _bcLatest (the channel handler calls
3422
+ // pollData() for an immediate apply; this timer re-read is the
3423
+ // fallback). Scoped to the opener tab, so other tabs' renders
3424
+ // never appear here.
3425
+ gd = _bcLatest;
3426
+ if (!gd) return;
3338
3427
  } else if (source === 'localStorage') {
3339
3428
  var raw = localStorage.getItem('__ginaData');
3340
3429
  if (!raw) return;
@@ -3400,7 +3489,7 @@
3400
3489
  hideLoader();
3401
3490
  } catch (e) {
3402
3491
  hideLoader();
3403
- if (source !== 'localStorage') source = null;
3492
+ if (source !== 'localStorage' && source !== 'broadcast') source = null;
3404
3493
  qs('#bm-dot').className = 'bm-dot err';
3405
3494
  }
3406
3495
  }
@@ -3768,9 +3857,10 @@
3768
3857
  function tryServerLogs() {
3769
3858
  if (typeof EventSource === 'undefined') return;
3770
3859
 
3771
- // Derive the SSE URL from the inspector path:
3772
- // /{webroot}/_gina/inspector/ → /{webroot}/_gina/logs
3773
- var base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '');
3860
+ // Derive the SSE URL via the shared 3-fallback resolver so /_gina/logs
3861
+ // reaches the monitored bundle in proxy-routed multi-bundle setups (was a
3862
+ // bare pathname strip that misrouted to the proxy's default bundle).
3863
+ var base = resolveBundleBase();
3774
3864
  var url = base + '/_gina/logs';
3775
3865
 
3776
3866
  try {
@@ -4056,20 +4146,11 @@
4056
4146
  // Agent mode already covers data + logs via the primary tryAgent stream.
4057
4147
  if (source === 'agent') return false;
4058
4148
 
4059
- // Derive the bundle URL the same way toggleReveal() does: prefer the
4060
- // opener's pathname so multi-bundle proxy setups route to the bundle
4061
- // that rendered the current page, falling back to stripping the
4062
- // inspector path.
4063
- var base = '';
4064
- try {
4065
- if (window.opener && window.opener.location) {
4066
- base = (window.opener.location.pathname || '').replace(/\/+$/, '');
4067
- } else {
4068
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
4069
- }
4070
- } catch (e) {
4071
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
4072
- }
4149
+ // Resolve the bundle base via resolveBundleBase() (the one resolver
4150
+ // every /_gina/* consumer uses). Its ?target= branch is inert here:
4151
+ // tryAgentPassive only runs when source !== 'agent' (i.e. no ?target=),
4152
+ // so this falls through to the opener-pathname fallback as before.
4153
+ var base = resolveBundleBase();
4073
4154
  var url = base + '/_gina/agent';
4074
4155
 
4075
4156
  try {
@@ -5026,20 +5107,7 @@
5026
5107
  fetchLiveIndexes();
5027
5108
 
5028
5109
  if (_revealActive) {
5029
- var base = '';
5030
- try {
5031
- var params = new URLSearchParams(window.location.search);
5032
- var target = (params.get('target') || '').replace(/\/+$/, '');
5033
- if (target) {
5034
- base = target;
5035
- } else if (window.opener && window.opener.location) {
5036
- base = (window.opener.location.pathname || '').replace(/\/+$/, '');
5037
- } else {
5038
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
5039
- }
5040
- } catch (e) {
5041
- base = window.location.pathname.replace(/\/_gina\/inspector.*$/, '').replace(/\/+$/, '');
5042
- }
5110
+ var base = resolveBundleBase();
5043
5111
  try {
5044
5112
  var xhr = new XMLHttpRequest();
5045
5113
  xhr.open('GET', base + '/_gina/reveal', true);
@@ -5096,59 +5164,71 @@
5096
5164
  var isAgent = tryAgent();
5097
5165
 
5098
5166
  if (!isAgent) {
5099
- var ok = tryOpener() || tryLocalStorage();
5100
- if (!ok) {
5101
- hideLoader();
5102
- qs('#bm-no-source').classList.remove('hidden');
5103
- qs('#bm-dot').className = 'bm-dot err';
5104
- qs('#bm-label').textContent = 'No source';
5105
- }
5167
+ // Bound mode (#INS) the statusbar opened us with ?ch=<tabId>. Bind
5168
+ // to that tab's per-tab BroadcastChannel so the data tabs track THIS
5169
+ // tab only (immune to other tabs'/XHR renders that clobber the
5170
+ // bundle-global localStorage + SSE channels COOP forces us onto when
5171
+ // it severs window.opener). Server logs still arrive via the SSE.
5172
+ var _boundCh = (typeof URLSearchParams !== 'undefined')
5173
+ ? new URLSearchParams(window.location.search).get('ch') : null;
5174
+ if (setupBoundChannel(_boundCh)) {
5175
+ qs('#bm-no-source').classList.add('hidden');
5176
+ tryServerLogs(); // server logs only; data via the bound channel
5177
+ } else {
5178
+ var ok = tryOpener() || tryLocalStorage();
5179
+ if (!ok) {
5180
+ hideLoader();
5181
+ qs('#bm-no-source').classList.remove('hidden');
5182
+ qs('#bm-dot').className = 'bm-dot err';
5183
+ qs('#bm-label').textContent = 'No source';
5184
+ }
5106
5185
 
5107
- /**
5108
- * Manual connect form on the "No source" overlay.
5109
- *
5110
- * When the Inspector opens without a `?target=` param and without
5111
- * `window.opener`, a form is shown allowing the user to type a
5112
- * bundle URL. On submit the page reloads with `?target=<url>`,
5113
- * which activates `tryAgent()` and connects via SSE.
5114
- *
5115
- * The handler auto-prefixes `http://` when no scheme is provided
5116
- * and strips trailing slashes before encoding the target.
5117
- *
5118
- * @inner
5119
- */
5120
- var connectForm = qs('#bm-connect-form');
5121
- if (connectForm) {
5122
- connectForm.addEventListener('submit', function (ev) {
5123
- ev.preventDefault();
5124
- var urlInput = qs('#bm-connect-url');
5125
- var raw = (urlInput.value || '').trim();
5126
- if (!raw) return;
5127
- // Normalise: add scheme if missing, strip trailing slash
5128
- if (!/^https?:\/\//i.test(raw)) raw = 'http://' + raw;
5129
- raw = raw.replace(/\/+$/, '');
5130
- // Navigate with ?target= to activate agent mode
5131
- var loc = window.location.pathname + '?target=' + encodeURIComponent(raw);
5132
- // #INS9b — append the optional inspector key (?key=) for an
5133
- // auth-gated agent endpoint. Kept in the URL only (ephemeral);
5134
- // never persisted to localStorage.
5135
- var keyInput = qs('#bm-connect-key');
5136
- var keyRaw = keyInput ? (keyInput.value || '').trim() : '';
5137
- if (keyRaw) {
5138
- loc += '&key=' + encodeURIComponent(keyRaw);
5139
- }
5140
- window.location.href = loc;
5141
- });
5142
- }
5186
+ /**
5187
+ * Manual connect form on the "No source" overlay.
5188
+ *
5189
+ * When the Inspector opens without a `?target=` param and without
5190
+ * `window.opener`, a form is shown allowing the user to type a
5191
+ * bundle URL. On submit the page reloads with `?target=<url>`,
5192
+ * which activates `tryAgent()` and connects via SSE.
5193
+ *
5194
+ * The handler auto-prefixes `http://` when no scheme is provided
5195
+ * and strips trailing slashes before encoding the target.
5196
+ *
5197
+ * @inner
5198
+ */
5199
+ var connectForm = qs('#bm-connect-form');
5200
+ if (connectForm) {
5201
+ connectForm.addEventListener('submit', function (ev) {
5202
+ ev.preventDefault();
5203
+ var urlInput = qs('#bm-connect-url');
5204
+ var raw = (urlInput.value || '').trim();
5205
+ if (!raw) return;
5206
+ // Normalise: add scheme if missing, strip trailing slash
5207
+ if (!/^https?:\/\//i.test(raw)) raw = 'http://' + raw;
5208
+ raw = raw.replace(/\/+$/, '');
5209
+ // Navigate with ?target= to activate agent mode
5210
+ var loc = window.location.pathname + '?target=' + encodeURIComponent(raw);
5211
+ // #INS9b — append the optional inspector key (?key=) for an
5212
+ // auth-gated agent endpoint. Kept in the URL only (ephemeral);
5213
+ // never persisted to localStorage.
5214
+ var keyInput = qs('#bm-connect-key');
5215
+ var keyRaw = keyInput ? (keyInput.value || '').trim() : '';
5216
+ if (keyRaw) {
5217
+ loc += '&key=' + encodeURIComponent(keyRaw);
5218
+ }
5219
+ window.location.href = loc;
5220
+ });
5221
+ }
5143
5222
 
5144
- tryEngineIO();
5145
- // Subscribe to /_gina/agent in parallel with opener polling. Opener
5146
- // polling alone misses SPA (pushState) and XHR renders because
5147
- // those paths never rewrite window.__ginaData. The passive agent
5148
- // stream delivers pushed data + log frames from those renders.
5149
- // It also supersedes tryServerLogs() (same `event: log` frames).
5150
- var _passiveAgentActive = tryAgentPassive();
5151
- if (!_passiveAgentActive) tryServerLogs();
5223
+ tryEngineIO();
5224
+ // Subscribe to /_gina/agent in parallel with opener polling. Opener
5225
+ // polling alone misses SPA (pushState) and XHR renders because
5226
+ // those paths never rewrite window.__ginaData. The passive agent
5227
+ // stream delivers pushed data + log frames from those renders.
5228
+ // It also supersedes tryServerLogs() (same `event: log` frames).
5229
+ var _passiveAgentActive = tryAgentPassive();
5230
+ if (!_passiveAgentActive) tryServerLogs();
5231
+ }
5152
5232
  }
5153
5233
 
5154
5234
  // ── Persist window geometry on resize/move ──────────────────────────