gina 0.6.6 → 0.6.7

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 (580) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/README.md +26 -23
  3. package/ROADMAP.md +2 -0
  4. package/bin/cli +1 -0
  5. package/framework/v0.6.7/VERSION +1 -0
  6. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css +1 -0
  7. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  8. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  9. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +27 -0
  10. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +93 -8
  11. package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.js +443 -28
  12. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js +647 -0
  13. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  14. package/framework/v0.6.7/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  15. package/framework/{v0.6.6 → v0.6.7}/core/config.js +22 -0
  16. package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/index.js +16 -4
  17. package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/index.js +5 -2
  18. package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/index.js +8 -3
  19. package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/index.js +5 -2
  20. package/framework/v0.6.7/core/connectors/param-redact.js +177 -0
  21. package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/index.js +5 -2
  22. package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/index.js +5 -2
  23. package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/index.js +5 -2
  24. package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.js +190 -23
  25. package/framework/{v0.6.6 → v0.6.7}/core/gna.js +186 -0
  26. package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/form-validator.js +91 -7
  27. package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/src/main.js +352 -21
  28. package/framework/{v0.6.6 → v0.6.7}/core/server.js +190 -1
  29. package/framework/{v0.6.6 → v0.6.7}/core/template/conf/settings.json +7 -8
  30. package/framework/v0.6.7/lib/cmd/storage/arguments.json +6 -0
  31. package/framework/v0.6.7/lib/cmd/storage/gc.js +418 -0
  32. package/framework/v0.6.7/lib/cmd/storage/help.txt +63 -0
  33. package/framework/v0.6.7/lib/cmd/storage/stats.js +396 -0
  34. package/framework/v0.6.7/lib/cmd/storage/verify.js +413 -0
  35. package/framework/{v0.6.6 → v0.6.7}/lib/index.js +14 -0
  36. package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/main.js +13 -6
  37. package/framework/v0.6.7/lib/storage/package.json +7 -0
  38. package/framework/v0.6.7/lib/storage/src/local-cas.js +1186 -0
  39. package/framework/v0.6.7/lib/storage/src/local.js +599 -0
  40. package/framework/v0.6.7/lib/storage/src/main.js +890 -0
  41. package/framework/v0.6.7/lib/storage/src/meta-store.js +506 -0
  42. package/framework/v0.6.7/lib/storage/src/util.js +336 -0
  43. package/framework/v0.6.7/lib/storage-store.js +110 -0
  44. package/framework/{v0.6.6 → v0.6.7}/package.json +1 -1
  45. package/gna.js +4 -4
  46. package/llms.txt +10 -9
  47. package/package.json +3 -3
  48. package/schema/settings.json +142 -2
  49. package/types/index.d.ts +7 -0
  50. package/framework/v0.6.6/VERSION +0 -1
  51. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -1
  52. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  53. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  54. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -643
  55. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  56. package/framework/v0.6.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  57. /package/framework/{v0.6.6 → v0.6.7}/AUTHORS +0 -0
  58. /package/framework/{v0.6.6 → v0.6.7}/LICENSE +0 -0
  59. /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/nolayout.html +0 -0
  60. /package/framework/{v0.6.6 → v0.6.7}/core/asset/html/static.html +0 -0
  61. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-192x192.png +0 -0
  62. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/android-chrome-512x512.png +0 -0
  63. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/apple-touch-icon.png +0 -0
  64. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-16x16.png +0 -0
  65. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon-32x32.png +0 -0
  66. /package/framework/{v0.6.6 → v0.6.7}/core/asset/img/favicon.ico +0 -0
  67. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/README.md +0 -0
  68. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  69. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  70. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  71. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  72. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  73. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  74. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  75. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/index.html +0 -0
  76. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  77. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  78. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  79. /package/framework/{v0.6.6 → v0.6.7}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  80. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/index.js +0 -0
  81. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/ai/lib/connector.js +0 -0
  82. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.js +0 -0
  83. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  84. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  85. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/n1ql.js +0 -0
  86. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.js +0 -0
  87. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  88. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  89. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/duckdb/lib/connector.js +0 -0
  90. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/connector.js +0 -0
  91. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/job-store.js +0 -0
  92. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  93. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mongodb/lib/session-store.js +0 -0
  94. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/mysql/lib/connector.js +0 -0
  95. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/postgresql/lib/connector.js +0 -0
  96. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/index.js +0 -0
  97. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/connector.js +0 -0
  98. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/job-store.js +0 -0
  99. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/render-cache-store.js +0 -0
  100. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/redis/lib/session-store.js +0 -0
  101. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/connector.js +0 -0
  102. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/scylladb/lib/session-store.js +0 -0
  103. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sql-parser.js +0 -0
  104. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/connector.js +0 -0
  105. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/job-store.js +0 -0
  106. /package/framework/{v0.6.6 → v0.6.7}/core/connectors/sqlite/lib/session-store.js +0 -0
  107. /package/framework/{v0.6.6 → v0.6.7}/core/content.encoding +0 -0
  108. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.framework.js +0 -0
  109. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-json.js +0 -0
  110. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks-async.js +0 -0
  111. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-nunjucks.js +0 -0
  112. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-stream.js +0 -0
  113. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig-async.js +0 -0
  114. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-swig.js +0 -0
  115. /package/framework/{v0.6.6 → v0.6.7}/core/controller/controller.render-v1.js +0 -0
  116. /package/framework/{v0.6.6 → v0.6.7}/core/controller/index.js +0 -0
  117. /package/framework/{v0.6.6 → v0.6.7}/core/controller/inspector-window-emit.js +0 -0
  118. /package/framework/{v0.6.6 → v0.6.7}/core/controller/release-banner.js +0 -0
  119. /package/framework/{v0.6.6 → v0.6.7}/core/dev/index.js +0 -0
  120. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/class.js +0 -0
  121. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/factory.js +0 -0
  122. /package/framework/{v0.6.6 → v0.6.7}/core/dev/lib/tools.js +0 -0
  123. /package/framework/{v0.6.6 → v0.6.7}/core/locales/README.md +0 -0
  124. /package/framework/{v0.6.6 → v0.6.7}/core/locales/currency.json +0 -0
  125. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/en.json +0 -0
  126. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/language/fr.json +0 -0
  127. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/en.json +0 -0
  128. /package/framework/{v0.6.6 → v0.6.7}/core/locales/dist/region/fr.json +0 -0
  129. /package/framework/{v0.6.6 → v0.6.7}/core/locales/index.js +0 -0
  130. /package/framework/{v0.6.6 → v0.6.7}/core/mime.types +0 -0
  131. /package/framework/{v0.6.6 → v0.6.7}/core/model/entity.js +0 -0
  132. /package/framework/{v0.6.6 → v0.6.7}/core/model/index.js +0 -0
  133. /package/framework/{v0.6.6 → v0.6.7}/core/model/template/entityFactory.js +0 -0
  134. /package/framework/{v0.6.6 → v0.6.7}/core/model/template/index.js +0 -0
  135. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/README.md +0 -0
  136. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/index.js +0 -0
  137. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/README.md +0 -0
  138. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/package.json +0 -0
  139. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/csrf/src/main.js +0 -0
  140. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/README.md +0 -0
  141. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/README.md +0 -0
  142. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/package.json +0 -0
  143. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  144. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/README.md +0 -0
  145. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/package.json +0 -0
  146. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  147. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/README.md +0 -0
  148. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/package.json +0 -0
  149. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  150. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/README.md +0 -0
  151. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/package.json +0 -0
  152. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  153. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  154. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  155. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  156. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  157. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  158. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  159. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  160. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  161. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  162. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/package.json +0 -0
  163. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  164. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  165. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  166. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/src/main.js +0 -0
  167. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  168. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  169. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  170. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  171. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  172. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  173. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  174. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  175. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  176. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  177. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  178. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  179. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  180. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  181. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  182. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  183. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  184. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  185. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/README.md +0 -0
  186. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/package.json +0 -0
  187. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/session/src/main.js +0 -0
  188. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/README.md +0 -0
  189. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/build.json +0 -0
  190. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/package.json +0 -0
  191. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/storage/src/main.js +0 -0
  192. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/README.md +0 -0
  193. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/build.json +0 -0
  194. /package/framework/{v0.6.6 → v0.6.7}/core/plugins/lib/validator/package.json +0 -0
  195. /package/framework/{v0.6.6 → v0.6.7}/core/router.js +0 -0
  196. /package/framework/{v0.6.6 → v0.6.7}/core/server.express.js +0 -0
  197. /package/framework/{v0.6.6 → v0.6.7}/core/server.isaac.js +0 -0
  198. /package/framework/{v0.6.6 → v0.6.7}/core/status.codes +0 -0
  199. /package/framework/{v0.6.6 → v0.6.7}/core/template/_gitignore +0 -0
  200. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/app.json +0 -0
  201. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  202. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/routing.json +0 -0
  203. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.json +0 -0
  204. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  205. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/templates.json +0 -0
  206. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  207. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  208. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  209. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  210. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/index.js +0 -0
  211. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle/locales/en.json +0 -0
  212. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  213. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  214. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  215. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  216. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  217. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/components/x-checklist.js +0 -0
  218. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  219. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  220. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/readme.md +0 -0
  221. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_public/sw.js +0 -0
  222. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  223. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  224. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  225. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  226. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/includes/x-checklist.html +0 -0
  227. /package/framework/{v0.6.6 → v0.6.7}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  228. /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.bat.tpl +0 -0
  229. /package/framework/{v0.6.6 → v0.6.7}/core/template/command/gina.tpl +0 -0
  230. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/env.json +0 -0
  231. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/manifest.json +0 -0
  232. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/package.json +0 -0
  233. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/statics.json +0 -0
  234. /package/framework/{v0.6.6 → v0.6.7}/core/template/conf/templates.json +0 -0
  235. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/401.json +0 -0
  236. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/403.json +0 -0
  237. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/client/json/404.json +0 -0
  238. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/html/50x.html +0 -0
  239. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/500.json +0 -0
  240. /package/framework/{v0.6.6 → v0.6.7}/core/template/error/server/json/503.json +0 -0
  241. /package/framework/{v0.6.6 → v0.6.7}/core/template/extensions/logger/config.json +0 -0
  242. /package/framework/{v0.6.6 → v0.6.7}/helpers/console.js +0 -0
  243. /package/framework/{v0.6.6 → v0.6.7}/helpers/context.js +0 -0
  244. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/LICENSE +0 -0
  245. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/README.md +0 -0
  246. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/package.json +0 -0
  247. /package/framework/{v0.6.6 → v0.6.7}/helpers/data/src/main.js +0 -0
  248. /package/framework/{v0.6.6 → v0.6.7}/helpers/dateFormat.js +0 -0
  249. /package/framework/{v0.6.6 → v0.6.7}/helpers/index.js +0 -0
  250. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/LICENSE +0 -0
  251. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/README.md +0 -0
  252. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/package.json +0 -0
  253. /package/framework/{v0.6.6 → v0.6.7}/helpers/json/src/main.js +0 -0
  254. /package/framework/{v0.6.6 → v0.6.7}/helpers/path.js +0 -0
  255. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/README.md +0 -0
  256. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/package.json +0 -0
  257. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/api-error.js +0 -0
  258. /package/framework/{v0.6.6 → v0.6.7}/helpers/plugins/src/main.js +0 -0
  259. /package/framework/{v0.6.6 → v0.6.7}/helpers/prototypes.js +0 -0
  260. /package/framework/{v0.6.6 → v0.6.7}/helpers/task.js +0 -0
  261. /package/framework/{v0.6.6 → v0.6.7}/helpers/text.js +0 -0
  262. /package/framework/{v0.6.6 → v0.6.7}/lib/admin/package.json +0 -0
  263. /package/framework/{v0.6.6 → v0.6.7}/lib/admin/src/main.js +0 -0
  264. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/README.md +0 -0
  265. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/build.json +0 -0
  266. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/package.json +0 -0
  267. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/dep/jszip.min.js +0 -0
  268. /package/framework/{v0.6.6 → v0.6.7}/lib/archiver/src/main.js +0 -0
  269. /package/framework/{v0.6.6 → v0.6.7}/lib/async/package.json +0 -0
  270. /package/framework/{v0.6.6 → v0.6.7}/lib/async/src/main.js +0 -0
  271. /package/framework/{v0.6.6 → v0.6.7}/lib/audit/package.json +0 -0
  272. /package/framework/{v0.6.6 → v0.6.7}/lib/audit/src/main.js +0 -0
  273. /package/framework/{v0.6.6 → v0.6.7}/lib/audit-store.js +0 -0
  274. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/package.json +0 -0
  275. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/lockout.js +0 -0
  276. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/main.js +0 -0
  277. /package/framework/{v0.6.6 → v0.6.7}/lib/authn/src/totp.js +0 -0
  278. /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/package.json +0 -0
  279. /package/framework/{v0.6.6 → v0.6.7}/lib/authz-gate/src/main.js +0 -0
  280. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/README.md +0 -0
  281. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/build.json +0 -0
  282. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/package.json +0 -0
  283. /package/framework/{v0.6.6 → v0.6.7}/lib/cache/src/main.js +0 -0
  284. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/aliases.json +0 -0
  285. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/arguments.json +0 -0
  286. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/help.txt +0 -0
  287. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/audit/verify.js +0 -0
  288. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/add.js +0 -0
  289. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/arguments.json +0 -0
  290. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/build.js +0 -0
  291. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/copy.js +0 -0
  292. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/cp.js +0 -0
  293. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.js +0 -0
  294. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/help.txt +0 -0
  295. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  296. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/list.js +0 -0
  297. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/man.js +0 -0
  298. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp-start.js +0 -0
  299. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/mcp.js +0 -0
  300. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/oas.js +0 -0
  301. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/openapi.js +0 -0
  302. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/remove.js +0 -0
  303. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rename.js +0 -0
  304. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/restart.js +0 -0
  305. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/rm.js +0 -0
  306. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/start.js +0 -0
  307. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/status.js +0 -0
  308. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/stop.js +0 -0
  309. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/bundle/types.js +0 -0
  310. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/arguments.json +0 -0
  311. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/clear.js +0 -0
  312. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/help.txt +0 -0
  313. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/cache/stats.js +0 -0
  314. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/add.js +0 -0
  315. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/arguments.json +0 -0
  316. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.js +0 -0
  317. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/help.txt +0 -0
  318. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/infer.js +0 -0
  319. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/list.js +0 -0
  320. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/migrate.js +0 -0
  321. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/models.js +0 -0
  322. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/remove.js +0 -0
  323. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/rm.js +0 -0
  324. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/connector/test.js +0 -0
  325. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/arguments.json +0 -0
  326. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.js +0 -0
  327. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/help.txt +0 -0
  328. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/man.js +0 -0
  329. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/ps.js +0 -0
  330. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/container/stop.js +0 -0
  331. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/add.js +0 -0
  332. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/arguments.json +0 -0
  333. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/help.txt +0 -0
  334. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/args.js +0 -0
  335. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/namespace.js +0 -0
  336. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-rewrite.js +0 -0
  337. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/reference-scan.js +0 -0
  338. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/inc/scaffold.js +0 -0
  339. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/remove.js +0 -0
  340. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rename.js +0 -0
  341. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/controller/rm.js +0 -0
  342. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/add.js +0 -0
  343. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/get.js +0 -0
  344. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.js +0 -0
  345. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/help.txt +0 -0
  346. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/link-dev.js +0 -0
  347. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/list.js +0 -0
  348. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/remove.js +0 -0
  349. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/rm.js +0 -0
  350. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/set.js +0 -0
  351. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/unset.js +0 -0
  352. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/env/use.js +0 -0
  353. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/add.js +0 -0
  354. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/arguments.json +0 -0
  355. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/build.js +0 -0
  356. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/dot.js +0 -0
  357. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/get.js +0 -0
  358. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.js +0 -0
  359. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/help.txt +0 -0
  360. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/init.js +0 -0
  361. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link-node-modules.js +0 -0
  362. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/link.js +0 -0
  363. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/list.js +0 -0
  364. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/man.js +0 -0
  365. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/msg.json +0 -0
  366. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/open.js +0 -0
  367. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/remove.js +0 -0
  368. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/reset.js +0 -0
  369. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/restart.js +0 -0
  370. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/set.js +0 -0
  371. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/start.js +0 -0
  372. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/status.js +0 -0
  373. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/stop.js +0 -0
  374. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/tail.js +0 -0
  375. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/update.js +0 -0
  376. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/framework/version.js +0 -0
  377. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-dev.1.md +0 -0
  378. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina-framework.1.md +0 -0
  379. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/gina.1.md +0 -0
  380. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/helper.js +0 -0
  381. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/add.js +0 -0
  382. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/arguments.json +0 -0
  383. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/export.js +0 -0
  384. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.js +0 -0
  385. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/help.txt +0 -0
  386. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/import.js +0 -0
  387. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/i18n/scan.js +0 -0
  388. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/_host.js +0 -0
  389. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/arguments.json +0 -0
  390. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/build.js +0 -0
  391. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.js +0 -0
  392. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/help.txt +0 -0
  393. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/list.js +0 -0
  394. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/man.js +0 -0
  395. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/rm.js +0 -0
  396. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/image/run.js +0 -0
  397. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/index.js +0 -0
  398. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.js +0 -0
  399. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/help.txt +0 -0
  400. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/inspector/open.js +0 -0
  401. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/man-render.js +0 -0
  402. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/arguments.json +0 -0
  403. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.js +0 -0
  404. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/help.txt +0 -0
  405. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/kill.js +0 -0
  406. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/minion/list.js +0 -0
  407. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/msg.json +0 -0
  408. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.js +0 -0
  409. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/help.txt +0 -0
  410. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/inc/scan.js +0 -0
  411. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/list.js +0 -0
  412. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/reset.js +0 -0
  413. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/port/set.js +0 -0
  414. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/add.js +0 -0
  415. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/arguments.json +0 -0
  416. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/backup.js +0 -0
  417. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/build.js +0 -0
  418. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.js +0 -0
  419. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/help.txt +0 -0
  420. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/import.js +0 -0
  421. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/list.js +0 -0
  422. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/man.js +0 -0
  423. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/move.js +0 -0
  424. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/remove.js +0 -0
  425. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rename.js +0 -0
  426. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restart.js +0 -0
  427. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/restore.js +0 -0
  428. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/rm.js +0 -0
  429. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/start.js +0 -0
  430. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/status.js +0 -0
  431. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/project/stop.js +0 -0
  432. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/arguments.json +0 -0
  433. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.js +0 -0
  434. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/help.txt +0 -0
  435. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/list.js +0 -0
  436. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/remove.js +0 -0
  437. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/protocol/set.js +0 -0
  438. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/add.js +0 -0
  439. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.js +0 -0
  440. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/help.txt +0 -0
  441. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-local.js +0 -0
  442. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/link-production.js +0 -0
  443. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/list.js +0 -0
  444. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/remove.js +0 -0
  445. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/rm.js +0 -0
  446. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/scope/use.js +0 -0
  447. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/arguments.json +0 -0
  448. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/check.js +0 -0
  449. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.js +0 -0
  450. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/help.txt +0 -0
  451. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/secrets/scan.js +0 -0
  452. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.js +0 -0
  453. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/help.txt +0 -0
  454. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/list.js +0 -0
  455. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/man.js +0 -0
  456. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/service/start.js +0 -0
  457. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd/view/add.js +0 -0
  458. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/package.json +0 -0
  459. /package/framework/{v0.6.6 → v0.6.7}/lib/cmd-status-format/src/main.js +0 -0
  460. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/README.md +0 -0
  461. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/build.json +0 -0
  462. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/package.json +0 -0
  463. /package/framework/{v0.6.6 → v0.6.7}/lib/collection/src/main.js +0 -0
  464. /package/framework/{v0.6.6 → v0.6.7}/lib/config.js +0 -0
  465. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/package.json +0 -0
  466. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-config/src/main.js +0 -0
  467. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/package.json +0 -0
  468. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-error/src/main.js +0 -0
  469. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/package.json +0 -0
  470. /package/framework/{v0.6.6 → v0.6.7}/lib/connector-registry/src/main.js +0 -0
  471. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/README.md +0 -0
  472. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/package.json +0 -0
  473. /package/framework/{v0.6.6 → v0.6.7}/lib/cron/src/main.js +0 -0
  474. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/LICENSE +0 -0
  475. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/README.md +0 -0
  476. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/package.json +0 -0
  477. /package/framework/{v0.6.6 → v0.6.7}/lib/domain/src/main.js +0 -0
  478. /package/framework/{v0.6.6 → v0.6.7}/lib/dto/package.json +0 -0
  479. /package/framework/{v0.6.6 → v0.6.7}/lib/dto/src/main.js +0 -0
  480. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/package.json +0 -0
  481. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-pipe/src/main.js +0 -0
  482. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/package.json +0 -0
  483. /package/framework/{v0.6.6 → v0.6.7}/lib/dto-types/src/main.js +0 -0
  484. /package/framework/{v0.6.6 → v0.6.7}/lib/generator/index.js +0 -0
  485. /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/package.json +0 -0
  486. /package/framework/{v0.6.6 → v0.6.7}/lib/i18n/src/main.js +0 -0
  487. /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/package.json +0 -0
  488. /package/framework/{v0.6.6 → v0.6.7}/lib/image-build/src/main.js +0 -0
  489. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/LICENSE +0 -0
  490. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/README.md +0 -0
  491. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/package.json +0 -0
  492. /package/framework/{v0.6.6 → v0.6.7}/lib/inherits/src/main.js +0 -0
  493. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/package.json +0 -0
  494. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-events/src/main.js +0 -0
  495. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/package.json +0 -0
  496. /package/framework/{v0.6.6 → v0.6.7}/lib/inspector-redact/src/main.js +0 -0
  497. /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/package.json +0 -0
  498. /package/framework/{v0.6.6 → v0.6.7}/lib/instrument/src/main.js +0 -0
  499. /package/framework/{v0.6.6 → v0.6.7}/lib/job/package.json +0 -0
  500. /package/framework/{v0.6.6 → v0.6.7}/lib/job/src/main.js +0 -0
  501. /package/framework/{v0.6.6 → v0.6.7}/lib/job-store.js +0 -0
  502. /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/package.json +0 -0
  503. /package/framework/{v0.6.6 → v0.6.7}/lib/json-config-header/src/main.js +0 -0
  504. /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/package.json +0 -0
  505. /package/framework/{v0.6.6 → v0.6.7}/lib/loading-state/src/main.js +0 -0
  506. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/README.md +0 -0
  507. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/package.json +0 -0
  508. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/default/index.js +0 -0
  509. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/index.js +0 -0
  510. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  511. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  512. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/index.js +0 -0
  513. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/listener.js +0 -0
  514. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/containers/mq/speaker.js +0 -0
  515. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/helper.js +0 -0
  516. /package/framework/{v0.6.6 → v0.6.7}/lib/logger/src/main.js +0 -0
  517. /package/framework/{v0.6.6 → v0.6.7}/lib/math/index.js +0 -0
  518. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/package.json +0 -0
  519. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-dispatch/src/main.js +0 -0
  520. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/package.json +0 -0
  521. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-http/src/main.js +0 -0
  522. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/package.json +0 -0
  523. /package/framework/{v0.6.6 → v0.6.7}/lib/mcp-server/src/main.js +0 -0
  524. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/README.md +0 -0
  525. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/package.json +0 -0
  526. /package/framework/{v0.6.6 → v0.6.7}/lib/merge/src/main.js +0 -0
  527. /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/package.json +0 -0
  528. /package/framework/{v0.6.6 → v0.6.7}/lib/metrics/src/main.js +0 -0
  529. /package/framework/{v0.6.6 → v0.6.7}/lib/model.js +0 -0
  530. /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/package.json +0 -0
  531. /package/framework/{v0.6.6 → v0.6.7}/lib/net-locality/src/main.js +0 -0
  532. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/README.md +0 -0
  533. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/package.json +0 -0
  534. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-filters/src/main.js +0 -0
  535. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/package.json +0 -0
  536. /package/framework/{v0.6.6 → v0.6.7}/lib/nunjucks-resolver/src/main.js +0 -0
  537. /package/framework/{v0.6.6 → v0.6.7}/lib/proc.js +0 -0
  538. /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/package.json +0 -0
  539. /package/framework/{v0.6.6 → v0.6.7}/lib/release-watch/src/main.js +0 -0
  540. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/package.json +0 -0
  541. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache/src/main.js +0 -0
  542. /package/framework/{v0.6.6 → v0.6.7}/lib/render-cache-store.js +0 -0
  543. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/README.md +0 -0
  544. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/build.json +0 -0
  545. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/package.json +0 -0
  546. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/main.js +0 -0
  547. /package/framework/{v0.6.6 → v0.6.7}/lib/routing/src/radix.js +0 -0
  548. /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/package.json +0 -0
  549. /package/framework/{v0.6.6 → v0.6.7}/lib/routing-introspect/src/main.js +0 -0
  550. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/package.json +0 -0
  551. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/env.js +0 -0
  552. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/backends/file.js +0 -0
  553. /package/framework/{v0.6.6 → v0.6.7}/lib/secrets/src/env-file.js +0 -0
  554. /package/framework/{v0.6.6 → v0.6.7}/lib/session-store.js +0 -0
  555. /package/framework/{v0.6.6 → v0.6.7}/lib/shell.js +0 -0
  556. /package/framework/{v0.6.6 → v0.6.7}/lib/sqlite-driver.js +0 -0
  557. /package/framework/{v0.6.6 → v0.6.7}/lib/state.js +0 -0
  558. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/README.md +0 -0
  559. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/package.json +0 -0
  560. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-filters/src/main.js +0 -0
  561. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/package.json +0 -0
  562. /package/framework/{v0.6.6 → v0.6.7}/lib/swig-resolver/src/main.js +0 -0
  563. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/package.json +0 -0
  564. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/http.js +0 -0
  565. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/loaders/memory.js +0 -0
  566. /package/framework/{v0.6.6 → v0.6.7}/lib/template-loaders/src/main.js +0 -0
  567. /package/framework/{v0.6.6 → v0.6.7}/lib/url/README.md +0 -0
  568. /package/framework/{v0.6.6 → v0.6.7}/lib/url/index.js +0 -0
  569. /package/framework/{v0.6.6 → v0.6.7}/lib/url/routing.json +0 -0
  570. /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/package.json +0 -0
  571. /package/framework/{v0.6.6 → v0.6.7}/lib/uuid/src/main.js +0 -0
  572. /package/framework/{v0.6.6 → v0.6.7}/lib/validator.js +0 -0
  573. /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/package.json +0 -0
  574. /package/framework/{v0.6.6 → v0.6.7}/lib/watcher/src/main.js +0 -0
  575. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/package.json +0 -0
  576. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-framing/src/main.js +0 -0
  577. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/package.json +0 -0
  578. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-query/src/main.js +0 -0
  579. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/package.json +0 -0
  580. /package/framework/{v0.6.6 → v0.6.7}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,32 @@ 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.6.7 - 2026-08-13
10
+ ### Added
11
+ * Pluggable object storage. A storage block in settings.json declares named drivers (an adapter crossed with a strategy), and gina.storage() returns one. The local adapter with the sharded strategy stores every object atomically under a date-and-ULID key — as a published file, or inline in the metadata store when the object is smaller than the driver's size-tiering threshold — and records its metadata (original name, content type, size) through a pluggable store seam - an embedded SQLite file by default, or a connectors.json entry when several processes share one root. Storage keys are opaque, so a later layout change cannot break stored references. A driver root that sits inside a web-served directory refuses the boot, since objects there would be publicly fetchable.
12
+ * Upload groups can now route their self.store() step through the storage layer (#STO1 slice 1): a settings.json upload.groups.<name>.driver key publishes that group's files through the named settings.storage driver — result entries carry an opaque storage key plus group, driver and the layer's measured size instead of a moved-file path, one call may mix routed and moved files (result slots stay 1:1 with the input), and target may be null when every file routes. Files in groups without a driver keep the historical move path byte-for-byte. Boot refuses a group naming an undefined driver; a group path beside a driver stays the parse-time staging dir (a path inside the driver's root earns a boot warning).
13
+ * Size tiering for the storage layer. Objects strictly under a driver's inlineThreshold (a unit-suffixed string, default "64KB"; "0B" disables it per driver) are stored inline in the metadata store in a single transaction instead of the file tree — measured 2.7-13x faster than per-file writes at and below the default threshold. Keys keep the same shape in both tiers, stat() and release() behave identically, resolve() answers {kind:'inline'} for tiered objects, and capabilities.inline says whether a driver tiers. Changing the threshold affects only new writes: existing objects stay readable on either side, and a metadata database created before tiering is migrated in place. Two tradeoffs to know: sub-threshold objects are not individually visible on disk, and the metadata store now carries their bytes — losing it loses those objects, so back it up with the driver root (the embedded database already lives inside it).
14
+ * The cas storage strategy (#STO1). A driver declaring strategy: "cas" stores objects by content address: the key is derived from the object's digest (blobs/<algo>/<aa>/<bb>/<hex>, deliberately extension-less), so identical bytes stored twice yield the SAME key with a reference count of 2 and no second copy on disk — put() results carry a deduplicated flag saying which happened. release() drops a reference instead of deleting: a periodic sweep (sweepInterval, default "15m") collects blobs that have sat at zero references for longer than a grace window (sweepGrace, default "1h"), so re-uploading just-released content is free. findByDigest(algo, hex) answers whether content is already stored without transferring it — capability-gated (capabilities.dedup) and shipped as a driver verb only, because it is a dedup oracle: exposing it over HTTP is the consumer's decision and authentication burden. The digest algorithm is per-driver config (hash, default "sha256", validated at boot against the runtime's own crypto — sha256/sha512 exist on both supported runtimes, blake2b512 is Node-only), and since its name is a path segment, changing it later is additive rather than a re-key; changing a driver's STRATEGY on populated storage remains a re-key migration, and the boot now stamps every driver root with its strategy and warns on mismatch — for sharded drivers too. cas publishes fsync by default (fsync: true — the temp file before the atomic rename, the parent directory best-effort after; the first fsync anywhere in gina), because the strategy exists for immutable content where an acknowledged write must survive power loss; sharded durability is unchanged. Size tiering applies under cas exactly as under sharded. The metadata-store seam gains four refcount verbs the embedded store implements (existing databases migrate in place, idempotently); a connector-backed store must implement them to serve a cas driver.
15
+ * Storage maintenance CLI and endpoints (#STO1): gina storage:stats, storage:gc (--dry-run) and storage:verify (--fix) work per bundle with the cache-command grammar. A RUNNING bundle is served by new always-on, admin-gated /_gina/storage/stats|gc|verify endpoints, so the process that owns the store does the work; a STOPPED bundle is resolved offline from its settings.storage and the real driver is built directly; a bundle that answers neither way (e.g. a timeout) is reported as unknown and its store is never opened. storage:gc drives the cas sweep until drained (--dry-run lists what a pass would collect and touches nothing); storage:verify reports files-without-rows (sweep crash residue — fixable with --fix, offline only) and rows-without-files (loss evidence — reported, never auto-fixed), both age-gated past sweepGrace so in-flight work is never flagged. Drivers gain stats() on both strategies and sweepNow()/verify() on cas; the metadata-store seam gains optional stats and listKeys verbs (a store lacking them degrades gracefully). Connector-backed stores are reachable through the running bundle only; sharded drivers have no sweep and are named and skipped.
16
+ ### Changed
17
+ * Framework default styling for the state-hook attributes now ships inside a CSS cascade layer (`@layer gina`): the default looks for `data-gina-loading` and `data-gina-form-submit-gated` are overridden by any un-layered project rule regardless of selector specificity or stylesheet load order, so a project's own CSS always wins without `!important` or specificity games. Functional rules (popin structure, scroll lock) deliberately stay un-layered so generic project resets cannot break them. Browsers without cascade-layer support drop only the default look — the attributes are still written and project CSS keyed on them still applies.
18
+ ### Fixed
19
+ * The bundle settings template no longer advertises upload keys the runtime never reads — the per-group filePrefix/subFolder/maxFieldsSize samples and the block-level encoding key are retired and the misleading per-group-redefinability comments corrected — and schema/settings.json now declares the real upload key set at both block and group level, including the new per-group driver binding (#B224).
20
+ * req.files entries now carry the resolved upload group — untagged when the part had no group tag — instead of an undefined group field (#B140), matching what the group gate enforces and what self.store() routes on. A controller testing the field's truthiness now enters the branch for untagged files.
21
+ * FormValidator: a submit can no longer go out while an async `query` rule's verdict is still on the wire (#B332). A concurrent validation pass used to disarm the whole pass's async waiter when the field's `asyncCompleted` listener was already registered, completing on the sync-only verdict — `send()` fired before the query answered and the error rendered after the POST had left. The arm guard is pass-local now, waiters stack and self-detach per pass, and the engine marks each (field, value) request in flight (`ginaFormValidatorQueryPending`) so the same-value fast path never releases a verdict-less field while its request is pending. A failing query now blocks the submit entirely; the submit handler also refuses re-entry while a cycle is between click and settle.
22
+ * FormValidator: a submit trigger without a markup id was bound TWICE at page load, so every click ran two full validation cycles (#B333). `getOwnedElements` deduped collected controls by id — an id-less control entered once from `$form.elements` and again from the in-tree sweep (gina assigns the auto id only later, in the submit-binding loop) — and the rebind guard tested a registry key nothing writes (the bare button id, while `bindSubmitEl` registers `submit.<id>`). Collection is deduped by node identity now and the guard tests the key that actually gets registered. Id-carrying and form-reassociated controls are unaffected.
23
+ * FormValidator: every validation pass used to leave its `validated.<formId>` listener attached for the page's lifetime (the removal call carried no function reference, which detaches nothing), and each stale listener executed the DISPATCHING pass's callback — one completion dispatch could replay a submit once per leftover listener (#B334). The listener now registers only when the pass carries a callback, consumes only its own pass's dispatch (callback identity on `event.detail`), and detaches itself on consumption. Async query completions also dispatch on the node the pass's listener actually sits on, so a single-element live-check pass is no longer structurally deaf to its own completion.
24
+ * FormValidator: when an async `query` rule settles on a full-form submit, the completion payload now carries the WHOLE form's verdict instead of the query field's slice (#B337). Every other invalid field's error was adjudicated but never rendered on the submit path, and the first-invalid focus could only ever land on the query field; the inverse scene — query passes but another field is invalid — dispatched an empty error set and refused the submit silently. Single-element live-check passes are byte-equivalent (their validator instance holds one field), and the touched-field-only live-check display keeps its scope.
25
+ * getConfig().settings now carries the same substituted values as getConfig().content.settings. A settings value written with a ${bundlePath}, ${libPath}, ${publicPath}, ${handlersPath}, ${mountPath}, ${gina}, ${project}, ${root}, ${source} or ${<name>Port} placeholder used to reach the no-argument getConfig() surface as a literal token, because that alias was bound before the substitution pass and the pass returns a new object rather than rewriting the original one. Placeholders an earlier pass already resolved (${homedir}, ${scope}, ...) and ${secret:...} references were never affected (#B257).
26
+ * FormValidator: the engine's two synchronous `query` releases — the same-value cached verdict and the known-invalid wire skip — now fire through a microtask instead of mid-validation (#B338). A synchronous release completed the pass before fields declared after the query field were adjudicated, so a re-click on an unchanged value delivered a verdict missing those fields and CLEARED their rendered errors; the outcome depended on field declaration order. Every completion now takes the same post-pass shape a real network settle already had.
27
+ * Inspector Data tab no longer lists the framework-internal `__ginaFlow` and `__ginaQueries` transport keys. They are embedded in JSON responses in dev mode only, so a calling bundle can merge the upstream query log and timeline, and they are already shown first-class by the Query and Flow tabs — but they also appeared as top-level rows in the Data tree, in raw-JSON mode and in the download dialog. Any root key prefixed `__gina` is now hidden across every Data tab surface, including the payload size badge, which measures what the tab actually displays. Nested keys carrying the prefix are treated as application data and stay visible, and the response body on the wire is unchanged.
28
+ * A clean form whose async `query` rule sat on a field declared before the last one could never complete its submit: the async completion dispatched only when the query field was last in the rule set or when live-check was mid-validation, so the submit callback starved, no request ever left, and the form's re-entry latch stranded — silently swallowing every later click until the page was reloaded. A latched form's completion now dispatches unconditionally. This hole predates the recent submit-vs-query collision fixes and was masked by them: the duplicate validation pass they removed used to complete such submits prematurely, before the query verdict had arrived.
29
+ * The dev Inspector's Forms tab rendered the bundle's whole forms catalog (the walked forms/ directory groups — rules, mocks, validators) as pseudo-form sections above the page's real forms (#B343). Catalog groups are now demoted into a single collapsed "Bundle catalog" card at the bottom of the tab: page forms keep the prime space, each group stays inspectable inside the card with its fold state preserved, and runtime form state that outlived its DOM form (a closed popin's form) keeps its own card. When the payload carries no pristine catalog snapshot the tab falls back to the previous per-key rendering, so nothing is ever hidden.
30
+ * The `is` rule's security strip removed every `(`, `)` and literal `return` from a regex-literal condition BEFORE compiling it, silently changing what the pattern matched (#B345, issue #59): groups were destroyed and anchors rebound — `/^(a|b)$/` validated as `/^a|b$/`, substring-permissive for middle alternatives — and a quantified group like `(#TAG)?` became a literal `#TA` plus an optional `G`. The strip now runs only inside the binary-comparison branch, which keeps its grammar-locked protection and its tolerance of authored parens, while a regex literal compiles exactly as authored (that branch never evaluates the condition as JS, so parentheses there were never an injection vector). ACTION REQUIRED: parenthesized `is` patterns now match as authored, i.e. STRICTER — a rule such as `/^(a|b)$/` that previously accepted `aX` or `Xb` now rejects them; review `is` rules containing parentheses for values that were passing only through the mangled pattern. Patterns without parentheses are unaffected.
31
+ * A submit click landing while a field's live-check `query` was still on the wire was silently swallowed (#B346): with live-check enabled the submit trigger is gated while the form is not yet valid, and a pending verdict was misread as invalid — the refused click had nothing to reveal, no request left, and the user had to click again after the round trip (the dead window scales with query latency, not typing speed). The gate now recognizes the pending state: the click starts a normal submit cycle that waits for the verdict — the loading state arms while it waits, a valid verdict sends exactly once after the settle, and a failing one renders the errors and releases the form. The same carve-out covers the other submit doors: a click landing on markup nested inside the button (`<button type="submit"><span>`) and a programmatic `submit()` during the pending window now latch, wait for the verdict, and complete instead of stalling silently — and the loading state arms on the waiting trigger for those doors too. Authored `aria-disabled`/`disabled` marks and forms where a settled field carries a committed error keep the existing refuse-and-reveal behaviour.
32
+ ### Security
33
+ * Connector query instrumentation no longer discloses bound parameter values by default (gina-io/gina#61): the couchbase dev/instrumentation-window console line (`Found query params`), the per-connector dev console `params` lines, the mongodb resolved-body log line, the couchbase `bulkInsert` statement (which inlines full document values), and the Inspector query-log `params`/`statement` payload fields across couchbase, postgresql, mysql, sqlite, duckdb, scylladb and mongodb now carry count + type markers (e.g. `3 [string, number, string]`) instead of values. A positional bind array has no key names, so the key-based `inspector.redact` matching structurally cannot cover it, and a bind value is routinely a secret owned by the calling application (a session or credential token, an API key, a password hash). Real values ride only when `settings.inspector.queries.captureValues` is `true` (default `false`, fail-closed at boot) - the same opt-in contract as `inspector.ai.captureText` and `inspector.events.captureArgs`. Arity and type diagnostics survive in the redacted forms.
34
+
9
35
  ## 0.6.6 - 2026-08-09
10
36
  ### Added
11
37
  * The MQ log speaker now reconnects on its own. It previously dialled the listener exactly once, ever, so anything that ended that connection — a daemon restart, an OOM-killed listener, a container probe — left the bundle logging nowhere, with no error after the first and nothing in the logs to say so. It now redials when the connection closes, backing off exponentially to a 30 second ceiling, and logs a `reconnected` notice when it recovers; a failure is reported once per outage rather than once per attempt. The retry timer is unreferenced, so short-lived CLI processes still exit immediately instead of waiting out a backoff. Frames emitted while the transport is down are dropped rather than queued, which keeps memory bounded during a long outage — the `default` flow still carries those lines to stdout.
package/README.md CHANGED
@@ -60,34 +60,37 @@ open https://localhost:3100
60
60
 
61
61
  > **npm 12+** blocks install scripts by default, and gina's post-install bootstraps `~/.gina` and the framework dependencies. Install with `npm install -g gina@latest --allow-scripts=gina`, or allow it once for all global installs with `npm config set allow-scripts=gina --location=user`. (Not needed on npm ≤ 11.)
62
62
 
63
- ## What's in 0.6.6
64
-
65
- > **If you run gina in containers or Kubernetes, upgrade.** `0.6.5` shipped a
66
- > regression that could silence a bundle's logging permanently — for the whole
67
- > life of the process, with every startup line before it still reading healthy
68
- > (#B323, first below). Any deployment whose boot is slow enough to block the
69
- > event loop for two seconds — a container start, a mount off a network
70
- > filesystem — was exposed.
63
+ ## What's in 0.6.7
71
64
 
72
65
  > **Re-bake your bundles, not just restart them.** The browser bundle changed in
73
- > this release. The popin and link fixes below live in the bundle, so a restart
74
- > alone will not deliver them. Rebuild each bundle (`gina bundle:build`) as well
75
- > as restarting. The logging fixes are server-side and need only the restart.
66
+ > this release. The form-validation, styling and link fixes below live in the
67
+ > bundle, so a restart alone will not deliver them. Rebuild each bundle
68
+ > (`gina bundle:build`) as well as restarting. The storage layer and the
69
+ > instrumentation change are server-side and need only the restart.
76
70
 
77
- > **No settings reset.** `0.6.6` is a patch — the `shortVersion` stays `0.6`, so
71
+ > **No settings reset.** `0.6.7` is a patch — the `shortVersion` stays `0.6`, so
78
72
  > your `~/.gina/0.6/settings.json` is untouched. (`0.6.0` was the reset.)
79
73
 
80
- **Two items may need action before you upgrade:** cross-host log shipping via
81
- `host_v4` no longer reaches the log transports, and popin subscribers that
82
- worked around the `success` event by listening on `error` should move back. Both
83
- are called out below and in the [migration guide](https://gina.io/docs/migration).
84
-
85
- - **Fixed — a slow boot no longer silences a bundle's logging.** `0.6.5` added a two-second deadline so an unreachable log host could not stall a process. That deadline asked the socket whether it was still connecting — but Node clears that flag in the event loop's *poll* phase, and timers run *before* poll. So a boot that blocked the loop past the deadline resumed, ran the overdue deadline first, read a flag nothing had updated yet, and destroyed a connection the kernel had already established. Because the transport dialled exactly once, the bundle then logged nowhere for the rest of its life, with no error after the first. The deadline now reaches its verdict one phase later; a genuinely unreachable host is still given up on just as promptly.
86
- - **Added — the log transport reconnects.** Previously anything that ended the connection was permanent: a daemon restart under a live bundle orphaned its transport forever, and in a cluster that is a matter of when — liveness probes, out-of-memory kills, node drains. It now redials when the connection closes, backing off exponentially to a 30-second ceiling and logging a `reconnected` notice when it recovers. A failure is reported once per outage rather than once per attempt. Short-lived CLI processes still exit immediately, and frames emitted while the transport is down are dropped rather than queued, so a long outage cannot grow memory — the `default` flow still carries those lines to stdout.
87
- - **Fixedlog transports always deliver to the local daemon.** The MQ speaker and the file log container dialled `host_v4` verbatim, but their listener runs on the same machine by construction, while `host_v4` describes the address *external* clients use. On a `~/.gina` shared across hosts where every host rewrites `settings.json` at boot or after a stale address was left behind, every runtime log line was silently shipped off-host while all connection lines read healthy. Both now resolve their dial from the bind side only. **Action required only if** you deliberately pointed `host_v4` at a remote machine to ship logs cross-host; that was never a supported topology and no longer affects these two transports. `gina tail` and the CLI command socket keep their remote-capable resolution.
88
- - **Fixedthe popin `success` event fires again.** A popin whose JSON response carried neither a redirect nor a reload raised `error` with an HTTP 422 insteadand because the error branch replaces its payload with the parsed response body, that 422 carried the successful response itself, reading as a server-side failure that had never happened. Subscribers to `success` received nothing at all. **If you worked around this by listening on `error` and inspecting its payload, move that handler to `success`.**
89
- - **Fixeda link request belongs to the anchor you clicked.** Two `data-gina-link` anchors sharing one url collapsed onto whichever appeared first in the document: clicking the second armed the *first* one's loading state, read the first one's callback attributes, and fired the first one's events. The clicked anchor now owns all of it, on both dispatch paths a direct click, and a click on a nested child element. The programmatic `gina.link.request(url)` call keeps resolving the first registration matching the url, since a bare url is all it has.
90
- - **Fixedconstructing the link handler twice no longer corrupts the first one.** A second construction merged itself into the live published `gina.link`, freezing accessors and scalar state the shape the popin and nav plugins were already cured of. The first activated instance is now published once. Pages constructing a single handler, the common case, are unaffected.
74
+ **One item requires action before you upgrade:** the `is` validation rule now
75
+ compiles regex literals as authored, which makes any pattern containing
76
+ parentheses *stricter* than it was. Two more may need a look — `req.files[].group`
77
+ now reports `untagged` instead of `undefined`, and bound query parameter values
78
+ are redacted from dev logs by default. All are called out below and in the
79
+ [migration guide](https://gina.io/docs/migration).
80
+
81
+ - **Addedpluggable object storage.** A new optional `storage` block in `settings.json` declares named drivers an *adapter* (where bytes live) crossed with a *strategy* (how keys are laid out) reachable from application code as `gina.storage()`. Objects are published atomically under an opaque key, with their metadata recorded through a pluggable store seam. A driver root that sits inside a web-served directory refuses the boot, since objects there would be publicly fetchable without passing your authorization. With no `storage` block the whole feature is inert. See the [storage guide](https://gina.io/docs/guides/storage).
82
+ - **Addedcontent-addressed storage (`strategy: "cas"`).** Keys derived from the object's digest, so identical bytes stored twice yield the same key and no second copy — the blob gains a reference instead. `release()` drops a reference rather than deleting, and a grace-gated sweep reclaims blobs that have sat at zero. `findByDigest()` answers whether content is already stored without transferring it. cas publishes `fsync` by default, because the strategy exists for immutable content.
83
+ - **Addedsize tiering.** Objects strictly under a driver's `inlineThreshold` (default `"64KB"`, the measured knee) are stored inline in the metadata store in a single transaction rather than as individual files 2.7–13× faster than per-file writes at and below the default. Keys, `stat()` and `release()` are identical in both tiers. Two tradeoffs worth knowing: sub-threshold objects are not individually browsable on disk, and the metadata store then carries their bytes. Set `"0B"` per driver to turn it off.
84
+ - **Addedstorage maintenance CLI.** `gina storage:stats`, `storage:gc` (`--dry-run`) and `storage:verify` (`--fix`) follow whoever owns the store: a running bundle answers through new always-on, admin-gated `/_gina/storage/*` endpoints, a stopped one is opened offline, and an unreachable one is never touched. `verify` separates fixable sweep residue from loss evidence, and never auto-fixes the latter.
85
+ - **Added — upload groups can publish into a storage driver.** A `driver` key on an `upload` group routes that group's `self.store()` step through the named driver instead of moving files to the target directory. Entirely opt-in and per-group: groups without a `driver` keep the historical move path byte-for-byte. Routed entries come back with an opaque `key` and no `filename`.
86
+ - **Security — bound query parameter values are redacted by default.** Dev-mode console query lines, the Couchbase `bulkInsert` statement, the MongoDB resolved body and the Inspector query log no longer print bound parameter values; they carry count and type markers instead (`3 [string, number, string]`). A bind value is routinely a secret owned by your application — a session or credential token, an API key, a password hash — and a positional bind array has no key names, so the key-based `inspector.redact` matching structurally could not cover it. **Set `inspector.queries.captureValues` to `true`** if your debugging workflow needs the real values back.
87
+ - **Fixed — `is` regex literals compile as authored.** A security transform stripped every `(`, `)` and literal `return` from a regex-literal condition *before* compiling it, silently changing what the pattern matched: `/^(a|b)$/` behaved as `/^a|b$/`, accepting any value merely containing a middle alternative, and `(#TAG)?` became a literal `#TA` plus an optional `G`. The transform now applies only to the binary-comparison form, which keeps its grammar-locked protection. **Action required:** review `is` rules whose pattern contains parentheses — they now match as authored, i.e. stricter, so values that were passing only through the mangled pattern will start failing.
88
+ - **Fixed — forms with an async `query` rule complete correctly.** A cluster of interacting defects, each of which masked the others: a submit could leave before the query answered (with its error rendering after the POST); the completion carried only the query field's verdict, so other invalid fields were adjudicated but never shown; a re-click on an unchanged value cleared later fields' errors, with the outcome depending on field declaration order; a clean form whose query field was not declared last could never submit at all, stranding its re-entry latch and swallowing every later click until reload; stale listeners could replay a submit; and a submit trigger with no markup `id` was bound twice, running two validation cycles per click. A submit gesture landing while a live-check query is still on the wire now waits for the verdict instead of being silently refused.
89
+ - **Changed — framework default looks ship in a CSS cascade layer.** The defaults for `data-gina-loading` and `data-gina-form-submit-gated` now live inside `@layer gina`, so any un-layered project rule beats them regardless of specificity or load order — no `!important` needed. Functional rules (popin structure, scroll lock) deliberately stay un-layered so a generic project reset cannot break them. If your project organises its own CSS in layers, declare `@layer gina, app;` early to order yourself against gina explicitly.
90
+ - **Fixed — `getConfig().settings` resolves path placeholders.** A settings value written with `${bundlePath}`, `${publicPath}`, `${gina}`, `${<name>Port}` and friends reached the no-argument `getConfig()` surface as a literal token, because that alias was bound before the substitution pass and the pass returns a new object. It now agrees with `getConfig().content.settings`. `${secret:…}` references were never affected.
91
+ - **Fixed — `req.files[].group` carries the resolved upload group.** The parser always resolved each part's group — no tag resolves to `untagged` — but pushed the raw disposition parameter into the record, so the field was `undefined` in exactly the default case. **Code shaped like `if (file.group)` now enters the branch for untagged files** where it previously skipped them.
92
+ - **Fixed — the settings template stopped advertising upload keys the framework never read.** The per-group `filePrefix`, `subFolder` and `maxFieldsSize` samples and the block-level `encoding` key were shipped as scaffolding samples and documented as functional, and no code path read any of them. They are retired from the template, the reference page is corrected, and `schema/settings.json` now declares the real key set. Applications declaring their own per-group keys and applying them app-side are unaffected.
93
+ - **Fixed — the Inspector shows your data, not the framework's.** The Data tab no longer lists the `__ginaFlow` and `__ginaQueries` transport keys, which the Query and Flow tabs already present first-class; any root key prefixed `__gina` is hidden across every Data surface, while nested keys carrying the prefix stay visible as application data. The Forms tab demotes the bundle's forms catalog into a single collapsed **Bundle catalog** card at the bottom, so the page's real forms keep the prime space.
91
94
 
92
95
  ## Documentation
93
96
 
package/ROADMAP.md CHANGED
@@ -58,6 +58,7 @@ This roadmap covers planned features, architectural improvements, new connectors
58
58
  | **Q4 2026** | `0.6.4` ✅ | **Added**: a framework-owned loading state for busy controls — clicking a submit trigger, a `data-gina-link` anchor or a popin trigger sets `data-gina-loading="true"` on that control and flips it to `"false"` when the work settles, errors, times out, aborts or is rejected by validation (the case that stranded the state on forever, since a refused submit sends no request at all), with a shipped default look gated on `prefers-reduced-motion` and an opt-in attribute rename (#B247) · `gina.config.a11y` overrides for the status strings gina announces on its own behalf · an opt-in `secrets.file` layer resolving `${secret:KEY}` from `.env`-style files **beneath** the environment, so a non-empty environment value can never be shadowed by a stale file on disk, with later array entries winning, empty-value fall-through warning, and fail-closed resolution · **Security**: secret-file ignore rules now match by glob (`.env`, `.env.*`, `*.env`) in both the repository and published-package ignore lists, where the previous exact `.env` entry left `secrets.env` or `db.env` committable and publishable by default · **Fixed**: a submit trigger disabled by live validation was inert in appearance only and still ran the whole submit cycle when clicked (#B246) · a form's first validation error was the one least likely to be heard, because the polite live region was created, inserted and written in a single synchronous step · submitting a form dropped the keyboard user's focus to the document body, and nothing told assistive technology a submit was under way · validation messages kept `aria-invalid` asserted while `display: none` removed the message from the accessibility tree, and the first-invalid focus loop could stop on a control that never actually took focus · staged uploads gained progressbar semantics with the value dropped rather than zeroed while indeterminate, spoken start/complete/error, an operable reset control, and preview `alt` text taken from the user's own filename · a popin opened over another left the superseded one reachable in the tab order behind it · built-in error pages emitted no doctype, head, title or `lang` and never terminated the document on HTTP/1.1, and the `lang` gina emits is now normalised to BCP-47 · the link plugin reused one `XMLHttpRequest` for every click, so a second click aborted the first and its response vanished in total silence · `gina secrets:check` reported `UNSET` for keys a bundle would have started with once `secrets.file` was declared, and could not resolve version- or scope-templated paths (#B263, #B266) · a declared secrets file that exists but cannot be read was mistaken for an absent one, so a bundle booted healthily on the wrong credential (#B267) · an environment variable that is set but empty now warns as it falls through to the file (#B268) · a trailing `#` comment was read as part of the secret, diverging from the POSIX shell that sources the same file · requiring gina outside a bundle context hung the process instead of failing cleanly, because the logger's MQ socket kept the event loop alive (#B276, #B277) · a bundle starting in an undeclared environment could lose its refusal message to a truncated pipe (#B278) · a gina command died mid-run when an MQ speaker disconnected abruptly, leaving a half-created bundle (#B279) |
59
59
  | **Q4 2026** | `0.6.5` ✅ | **Fixed**: the silent-dead-control release — a family of defects where a control looked completely normal and did nothing at all. A submit trigger disabled by your own double-submit guard during the click (a `0.6.4` regression), a submit button whose DOM node an AJAX update or popin re-render replaced, a form left blocked after its async uniqueness check came back clean, a popin close button given your own id or wrapping an icon, a `data-gina-link` given your own id, and a popin holding several forms releasing only every other one — all now work. Trusted gestures (Enter, wrapped-label clicks) respect the submit gate; `data-gina-link` stops swallowing `download`, `target`, `#`-fragment and modified clicks, and gains the disabled gate it never had; download filenames parse and serialize per RFC 6266; `gina.setOptions()` writes the config the framework reads, having been silently ignored since it shipped; `isRequired` accepts padded input and `trim` strips both sides · **Changed**: the not-ready submit-trigger state moves off `aria-disabled` onto the framework-owned `data-gina-form-submit-gated`, with a default look — the marker no longer claims a control is inoperable while gina deliberately answers its click |
60
60
  | **Q4 2026** | `0.6.6` ✅ | **Fixed**: the logging-transport release. A slow boot no longer silences a bundle's logging for the life of the process — a two-second connect deadline added in `0.6.5` read a socket flag Node clears one event-loop phase later, so any boot that blocked the loop past it destroyed a connection the kernel had already established (every container start and network-filesystem mount was exposed, and the transport never redialled). The MQ and file log transports also stopped dialling `host_v4`, which on a `~/.gina` shared across hosts silently shipped every log line off-host while all connection lines read healthy. Plus: the popin `success` event fires again instead of raising a 422 carrying the successful response body; a link request belongs to the anchor you clicked rather than the first anchor sharing its url; and constructing the link handler twice no longer corrupts the first instance · **Added**: the log transport reconnects — exponential backoff to a 30-second ceiling, one report per outage, frames dropped rather than queued while down so an outage cannot grow memory |
61
+ | **Q4 2026** | `0.6.7` ✅ | **Added**: the object-storage release — a `storage` block declares named drivers (an adapter crossed with a strategy) reachable as `gina.storage()`, publishing objects atomically under opaque keys with their metadata written through a pluggable store seam; a content-addressed `cas` strategy deduplicates identical bytes behind a reference count, reclaiming them only after a grace-gated sweep; size tiering keeps sub-`64KB` objects inline in the metadata store, measurably faster than per-file writes; `storage:stats` / `storage:gc` / `storage:verify` operate a bundle's drivers whether it is running or stopped, through always-on admin-gated endpoints; and an upload group can route its `self.store()` step straight into a driver · **Security**: bound query parameter values no longer reach dev consoles or the Inspector query log — count and type markers replace them, with `inspector.queries.captureValues` to opt back in · **Fixed**: the `is` rule compiles regex literals as authored instead of stripping their parentheses (stricter — review patterns containing parens), forms with an async `query` rule complete correctly across a cluster of interacting defects (a submit leaving before the verdict landed, a completion carrying only the query field's slice, a re-click clearing later fields' errors, a clean form whose query field was not declared last never submitting at all, replayed submits from stale listeners, and an id-less trigger bound twice), `getConfig().settings` resolves path placeholders, `req.files[].group` reports the resolved group instead of `undefined`, and the Inspector's Data and Forms tabs stop putting framework-internal keys and the bundle catalog above your own data · **Changed**: framework default looks ship inside a `@layer gina` cascade layer, so any un-layered project rule overrides them without `!important` |
61
62
  | **Q1 2027** | `0.6.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
62
63
  | **2027** | `0.7.0` | Performance — remaining measure-gated candidates: multipart & WebSocket fast paths, render/log cleanups, SIMD scanner (the render-path deep-clone & id-mint reduction shipped early in `0.6.2` with a measured 4.4× render-throughput gain; the profiling baseline itself also shipped in `0.6.2`) |
63
64
  | **2027** | `0.8.0` | Financial-messaging foundations — XML request/response handling · pluggable message-schema validation · IBAN/BIC validation rules · money & ISO 4217 minor-unit utilities · idempotency keys · sequence primitive · OAuth2 client-credentials egress |
@@ -82,6 +83,7 @@ This roadmap covers planned features, architectural improvements, new connectors
82
83
  | ✅ | **Stale built-release watch** — For LOCAL production rehearsals. A bundle serving a built release under `local` scope + a non-dev env has no hot-reload, so after you edit source it silently keeps serving the stale build. Opt in via `server.releaseWatch` in `settings.json`: the bundle watches its SOURCE tree, compares fingerprints against the manifest release stamp, and surfaces staleness on `GET /_gina/release/status` and a live `GET /_gina/release/events` SSE stream (notify mode, the default) — or auto-rebuilds on change (opt-in `auto` mode). `POST /_gina/release/rebuild` rebuilds with an **idle-gated restart** that waits on in-flight HTTP requests and `gina.registerBusyProbe` application probes, so a restart never interrupts in-flight work. Hard-gated on `local` scope + a non-dev env — never active on a real cluster. | `0.5.18-alpha` | 2026-07-16 |
83
84
  | ✅ | **Popin eager preload** — Opt-in idle warming for AJAX popin content. Mark a trigger with `data-gina-dialog-preload="eager"` (case-insensitive) and the popin plugin fetches its content after `window` load, at browser idle — one trigger at a time, off the critical path — so opening feels instant with no second GET. Same safety gates as the hover/focus warm: the `"false"` opt-out and the disabled skip apply identically, and an eager warm and a hover warm coalesce into a single GET (whichever runs second is a no-op). The pass is skipped when the browser signals Save-Data. Default behavior is unchanged — hover/focus warm remains the default. | `0.5.21-alpha` | 2026-07-19 |
84
85
  | ✅ | **Upload progress + drag-and-drop** — Extend the `data-gina-form-upload-*` staged client layer with transfer progress and drop-target support. **Progress shipped** (`0.5.24-alpha.2`): the staging POST reports real upload progress (`xhr.upload.onprogress`) through the registered `uploadProgress.<id>` client event, a `data-gina-form-upload-on-progress` window callback, and a declarative indicator (`data-gina-form-upload-progress`, default `<fieldId>-progress`) with a fully managed lifecycle. **Drag-and-drop shipped** (`0.5.24-alpha.2`): an attribute-marked dropzone (`data-gina-form-upload-dropzone="<elementId>"`, explicit id, opt-in) accepting dropped files through the exact same staging pipeline as the native file input — group tagging, previews, hidden metadata fields, reset/delete and upload progress included — with `idle`/`over`/`dropped` CSS state hooks, file-drags-only reaction, and first-file truncation on single-file inputs. Opt-in attributes, zero new dependencies, no server-contract change. | `0.5.24-alpha.2` | 2026-07-22 |
86
+ | 📋 | **Pluggable object storage** — Named drivers pairing an **adapter** (where the bytes live) with a **strategy** (how keys are laid out), behind one callback-shaped contract. Keys are opaque, so a later layout change never breaks stored references; writes publish atomically by temp-and-rename, so a reader never observes a partial object; and every object carries a metadata row written through a pluggable store seam — an embedded SQLite file by default, or a `connectors.json` entry when several processes share one root. A driver root that sits inside any web-served directory refuses the boot, since objects there would be publicly fetchable. Much of the layer has already shipped: the `local` adapter with the `sharded` and `cas` (content-addressed, deduplicating, refcounted) strategies, size tiering, the metadata seam, boot validation, the `gina.storage()` accessor, upload groups publishing straight to a driver, and the `storage:stats` / `storage:gc` / `storage:verify` maintenance CLI with its admin-gated `/_gina/storage/*` endpoints. This milestone completes the layer — the `stream` strategy with resumable large-media uploads, an `s3` adapter, and HTTP Range serving in both engines. | `0.8.x` | 2027 |
85
87
 
86
88
  ---
87
89
 
package/bin/cli CHANGED
@@ -394,6 +394,7 @@ async function onExec() {
394
394
  'scheme:',
395
395
  'secrets:',
396
396
  'service:',
397
+ 'storage:',
397
398
  'view:',
398
399
  '--', //options or other aliases.
399
400
  '-' //options or other aliases.
@@ -0,0 +1 @@
1
+ 0.6.7
@@ -0,0 +1 @@
1
+ @charset "UTF-8";@keyframes gina-popin-skeleton-shimmer{0%{background-position:200%0}to{background-position:-200%0}}@layer gina{[data-gina-loading=true]{cursor:progress}@keyframes gina-loading-pulse{0%{opacity:1}to{opacity:.55}}@media (prefers-reduced-motion:no-preference){[data-gina-loading=true]{animation:gina-loading-pulse .9s ease-in-out infinite alternate}}@media (prefers-reduced-motion:reduce){[data-gina-loading=true]{opacity:.7}}[data-gina-form-submit-gated=true]{cursor:not-allowed;opacity:.7}}@font-face{font-family:"have_heart_oneregular";src:url(fonts/have_heart_one-webfont.woff2)format("woff2"),url(fonts/have_heart_one-webfont.woff)format("woff");font-weight:400;font-style:normal}.gina-popin-container{background:#fff}.gina-popins-overlay,div.gina-popin-container{visibility:hidden;opacity:0;z-index:1;transition:opacity .3s,visibility 0 .3s}.gina-popins-overlay.gina-popin-is-active,div.gina-popin-container.gina-popin-is-active{opacity:1;visibility:visible;transition-delay:0}dialog.gina-popin-container{padding:0;border:0;z-index:1}@media (prefers-reduced-motion:no-preference){dialog.gina-popin-container{opacity:0;transform:translateY(-.5rem);transition:opacity .2s ease,transform .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]{opacity:1;transform:translateY(0)}@starting-style{dialog.gina-popin-container[open]{opacity:0;transform:translateY(-.5rem)}}dialog.gina-popin-container::backdrop{opacity:0;transition:opacity .2s ease,overlay .2s ease allow-discrete,display .2s ease allow-discrete}dialog.gina-popin-container[open]::backdrop{opacity:1}@starting-style{dialog.gina-popin-container[open]::backdrop{opacity:0}}}body[data-gina-popin-scroll-lock]{overflow:hidden}.gina-popins-overlay{position:fixed;left:0;top:0;display:grid;place-items:center;width:100%;height:100%;transition:opacity .3s,visibility .3s;overflow:auto;background:rgba(0,0,0,.75)}.gina-popins-overlay.gina-popin-is-active{backdrop-filter:blur(6px)}dialog::backdrop{background-color:rgba(0,0,0,.75);backdrop-filter:blur(6px)}.gina-popin-skeleton{padding:1.5rem;min-width:18rem;max-width:90vw}.gina-popin-skeleton .gina-popin-skeleton-line{height:.85rem;margin-bottom:.75rem;border-radius:4px;background:linear-gradient(90deg,#ededed 25%,#f7f7f7 50%,#ededed 75%);background-size:200% 100%;animation:gina-popin-skeleton-shimmer 1.4s ease-in-out infinite}.gina-popin-skeleton .gina-popin-skeleton-line:last-child{margin-bottom:0}.gina-popin-skeleton .gina-popin-skeleton-title{height:1.4rem;width:60%;margin-bottom:1.25rem}.gina-popin-skeleton .gina-popin-skeleton-line--short{width:40%}@media (prefers-reduced-motion:reduce){.gina-popin-skeleton .gina-popin-skeleton-line{animation:none}}
@@ -1362,6 +1362,33 @@ body {
1362
1362
  color: var(--accent);
1363
1363
  }
1364
1364
 
1365
+ /* Forms tab — demoted bundle catalog card (#B343): whole-bundle `forms/`
1366
+ groups (rules, mocks, validators, …), collapsed + muted so page forms keep
1367
+ the prime space. Placed after the base .bm-form-card rules on purpose —
1368
+ the [open] overrides tie on specificity and must win by source order. */
1369
+ .bm-catalog-card {
1370
+ margin-top: 14px;
1371
+ background: transparent;
1372
+ border-style: dashed;
1373
+ }
1374
+ .bm-catalog-card > .bm-form-header {
1375
+ color: var(--text-dim);
1376
+ font-size: 10px;
1377
+ }
1378
+ .bm-catalog-card[open] {
1379
+ border-color: var(--border);
1380
+ }
1381
+ .bm-catalog-card[open] > .bm-form-header .bm-form-chevron {
1382
+ fill: var(--text-dim);
1383
+ }
1384
+ .bm-catalog-card .bm-catalog-hint {
1385
+ font: normal 9px/1.6 var(--sans);
1386
+ text-transform: none;
1387
+ letter-spacing: 0.4px;
1388
+ color: var(--text-dim);
1389
+ opacity: 0.7;
1390
+ }
1391
+
1365
1392
  /* ── JSON tree ────────────────────────────────────────────────────────────── */
1366
1393
  .bm-tree-root {
1367
1394
  font: 12px/1.7 var(--font);
@@ -151,6 +151,46 @@
151
151
  /** @constant {Object} Keys whose children are recursively flattened into PROPERTIES */
152
152
  var VIEW_FLATTEN = { html: 1, properties: 1 };
153
153
 
154
+ /**
155
+ * @constant {string} Prefix marking framework-internal transport keys.
156
+ *
157
+ * `controller.render-json.js` embeds `__ginaQueries` / `__ginaFlow` at the
158
+ * ROOT of a JSON body so a calling bundle can merge an upstream bundle's
159
+ * query log and timeline (dev-gated there — no production leak). They are
160
+ * transport, not application data, and the Query and Flow tabs already
161
+ * render them first-class, so the Data tab hides them on every surface it
162
+ * reads the payload from. #B340
163
+ */
164
+ var INTERNAL_KEY_PREFIX = '__gina';
165
+
166
+ /**
167
+ * Shallow-copy a data payload without its framework-internal transport keys.
168
+ *
169
+ * Root level only: {@link INTERNAL_KEY_PREFIX} keys are produced at the root
170
+ * of the JSON body, so a NESTED key carrying the prefix is application data
171
+ * and is deliberately left alone. Arrays and non-objects pass through by
172
+ * reference — a root payload is a plain object, and copying arrays would
173
+ * change how the tree renders them.
174
+ *
175
+ * @inner
176
+ * @param {*} obj - Data payload; only plain objects are filtered
177
+ * @returns {*} Filtered shallow copy, or `obj` unchanged when not a plain object
178
+ * @example
179
+ * stripInternalKeys({ status: 200, __ginaFlow: [] }); // → { status: 200 }
180
+ * stripInternalKeys({ a: { __ginaX: 1 } }); // → { a: { __ginaX: 1 } } (nested kept)
181
+ * stripInternalKeys([1, 2]); // → [1, 2] (unchanged, same ref)
182
+ */
183
+ function stripInternalKeys(obj) {
184
+ if (!obj || typeof obj !== 'object' || Array.isArray(obj)) return obj;
185
+ var out = {};
186
+ var keys = Object.keys(obj);
187
+ for (var i = 0; i < keys.length; i++) {
188
+ if (keys[i].indexOf(INTERNAL_KEY_PREFIX) === 0) continue;
189
+ out[keys[i]] = obj[keys[i]];
190
+ }
191
+ return out;
192
+ }
193
+
154
194
  // ── State ──────────────────────────────────────────────────────────────
155
195
  /** @type {?Window|string} Data source — `Window` (opener), `'localStorage'`, or `null` */
156
196
  var source = null;
@@ -1321,11 +1361,17 @@
1321
1361
  * and sent data sub-sections.
1322
1362
  *
1323
1363
  * Forms from the data payload that do not match any DOM form are rendered
1324
- * separately at the bottom.
1364
+ * separately at the bottom — split in two (#B343): keys also present in
1365
+ * the pristine gina half (`__ginaData.gina.forms` — the server-emitted
1366
+ * bundle catalog built from the bundle's `forms/` directory groups such
1367
+ * as `rules`, `mocks`, `validators`, which the statusbar merge never
1368
+ * writes to) are demoted into one collapsed "Bundle catalog" card; keys
1369
+ * only present in the user half are runtime form state (e.g. a departed
1370
+ * popin form) and keep their own card.
1325
1371
  *
1326
1372
  * @inner
1327
1373
  * @param {Object} formsData - Forms data from `__ginaData.user.forms`
1328
- * @param {Object} [ginaFormsData] - Gina forms data (for diff overlay)
1374
+ * @param {Object} [ginaFormsData] - Gina forms data (pristine server half; also the diff overlay source)
1329
1375
  * @returns {string} HTML string
1330
1376
  */
1331
1377
  function renderFormsContent(formsData, ginaFormsData) {
@@ -1460,10 +1506,22 @@
1460
1506
  h += '</div></details>';
1461
1507
  }
1462
1508
 
1463
- // Render forms from data that were NOT matched to a DOM form
1509
+ // Render forms from data that were NOT matched to a DOM form.
1510
+ // Keys also present in the pristine gina half are the server-emitted
1511
+ // bundle catalog (the walked `<bundle>/forms/` groups), not page
1512
+ // forms — collect them for the demoted catalog card below (#B343).
1513
+ // The statusbar merge only ever writes `u.forms[<id>]`, so `g.forms`
1514
+ // stays the untouched server snapshot: presence there is the
1515
+ // discriminator. When `g.forms` is absent every key falls through to
1516
+ // the legacy per-key card, so nothing is ever hidden.
1517
+ var catalogKeys = [];
1464
1518
  for (var dk = 0; dk < formKeys.length; dk++) {
1465
1519
  var dkName = formKeys[dk];
1466
1520
  if (rendered[dkName]) continue;
1521
+ if (Object.prototype.hasOwnProperty.call(ginaFormsData, dkName)) {
1522
+ catalogKeys.push(dkName);
1523
+ continue;
1524
+ }
1467
1525
  h += '<details class="bm-form-card" data-path="form.' + escHtml(dkName) + '">';
1468
1526
  h += '<summary class="bm-form-header">'
1469
1527
  + escHtml(dkName.toUpperCase())
@@ -1473,6 +1531,29 @@
1473
1531
  h += '</div></details>';
1474
1532
  }
1475
1533
 
1534
+ // Bundle catalog — whole-bundle definitions, one group per
1535
+ // `<bundle>/forms/` subdirectory, demoted to a single collapsed and
1536
+ // visually muted card at the bottom so page forms keep the prime
1537
+ // space (#B343).
1538
+ if (catalogKeys.length > 0) {
1539
+ h += '<details class="bm-form-card bm-catalog-card" data-path="form.__catalog">';
1540
+ h += '<summary class="bm-form-header bm-catalog-header">BUNDLE CATALOG'
1541
+ + '<span class="bm-catalog-hint">' + escHtml(catalogKeys.join(' · ')) + '</span>'
1542
+ + chevronSvg + '</summary>';
1543
+ h += '<div class="bm-form-body">';
1544
+ for (var ck = 0; ck < catalogKeys.length; ck++) {
1545
+ var ckName = catalogKeys[ck];
1546
+ h += '<details class="bm-form-card bm-catalog-sub" data-path="form.' + escHtml(ckName) + '">';
1547
+ h += '<summary class="bm-form-header">'
1548
+ + escHtml(ckName.toUpperCase())
1549
+ + chevronSvg + '</summary>';
1550
+ h += '<div class="bm-form-body">';
1551
+ h += renderFormDataSections(formsData[ckName], ginaFormsData[ckName]);
1552
+ h += '</div></details>';
1553
+ }
1554
+ h += '</div></details>';
1555
+ }
1556
+
1476
1557
  return h || '<span class="bm-empty">No forms detected on this page</span>';
1477
1558
  }
1478
1559
 
@@ -1960,8 +2041,12 @@
1960
2041
 
1961
2042
  switch (name) {
1962
2043
  case 'data':
1963
- var dataObj = hasXhr ? u['data-xhr'] : u.data;
1964
- var ginaObj = hasXhr ? (g['data-xhr'] || g.data) : g.data;
2044
+ // #B340 strip at the source resolution point so every Data
2045
+ // surface agrees: tree, root scalars, size badge and search all
2046
+ // read from `dataObj`. `ginaObj` is stripped in step so the diff
2047
+ // overlay does not report the hidden keys as removed.
2048
+ var dataObj = stripInternalKeys(hasXhr ? u['data-xhr'] : u.data);
2049
+ var ginaObj = stripInternalKeys(hasXhr ? (g['data-xhr'] || g.data) : g.data);
1965
2050
  var q = getDataSearchQuery();
1966
2051
  if (q && dataObj && typeof dataObj === 'object') {
1967
2052
  // Try exact dot-path resolve first
@@ -2242,7 +2327,7 @@
2242
2327
  if (!ginaData) { treeEl.innerHTML = '<span class="bm-hint">No data to display</span>'; return; }
2243
2328
  var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
2244
2329
  var u = src.user || {};
2245
- var data = u['data-xhr'] || u.data;
2330
+ var data = stripInternalKeys(u['data-xhr'] || u.data); // #B340
2246
2331
  treeEl.innerHTML = '<pre class="bm-raw-view">' + escHtml(JSON.stringify(data, null, 2)) + '</pre>';
2247
2332
  }
2248
2333
 
@@ -3574,7 +3659,7 @@
3574
3659
  if (!ginaData || !ginaData.user) return;
3575
3660
  var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
3576
3661
  var u = src.user || {};
3577
- var dataObj = u['data-xhr'] || u.data;
3662
+ var dataObj = stripInternalKeys(u['data-xhr'] || u.data); // #B340
3578
3663
  if (!dataObj || typeof dataObj !== 'object') return;
3579
3664
 
3580
3665
  var keys = Object.keys(dataObj).sort();
@@ -3602,7 +3687,7 @@
3602
3687
  if (!ginaData || !ginaData.user) return;
3603
3688
  var src = (_revealActive && _revealedData) ? _revealedData : ginaData;
3604
3689
  var u = src.user || {};
3605
- var dataObj = u['data-xhr'] || u.data;
3690
+ var dataObj = stripInternalKeys(u['data-xhr'] || u.data); // #B340
3606
3691
  var checks = qsa('#bm-dl-checks input:checked');
3607
3692
  var result = {};
3608
3693
  for (var i = 0; i < checks.length; i++) {