gina 0.5.6-alpha.2 → 0.5.6

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 (493) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/README.md +7 -10
  3. package/ROADMAP.md +5 -0
  4. package/framework/v0.5.6/VERSION +1 -0
  5. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/inspector/index.html +10 -0
  6. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +103 -6
  7. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/js/gina.js +39 -2
  8. package/framework/v0.5.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js +573 -0
  9. package/framework/v0.5.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  10. package/framework/v0.5.6/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  11. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/ai/lib/connector.js +13 -5
  12. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/index.js +16 -4
  13. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.js +39 -1
  14. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-json.js +4 -0
  15. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-nunjucks.js +4 -0
  16. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-swig.js +9 -0
  17. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/inspector-window-emit.js +4 -0
  18. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/gna.js +42 -2
  19. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/model/entity.js +19 -0
  20. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/model/index.js +32 -1
  21. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/server.isaac.js +10 -0
  22. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/server.js +32 -1
  23. package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/settings.json +17 -0
  24. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/add.js +4 -4
  25. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/arguments.json +8 -1
  26. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/help.txt +121 -4
  27. package/framework/v0.5.6/lib/cmd/connector/infer.js +607 -0
  28. package/framework/v0.5.6/lib/cmd/connector/test.js +907 -0
  29. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/help.txt +17 -0
  30. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/stop.js +89 -1
  31. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/gina.1.md +11 -0
  32. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/helper.js +41 -2
  33. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/add.js +35 -9
  34. package/framework/v0.5.6/lib/connector-config/package.json +17 -0
  35. package/framework/v0.5.6/lib/connector-config/src/main.js +202 -0
  36. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/index.js +11 -0
  37. package/framework/v0.5.6/lib/inspector-events/package.json +8 -0
  38. package/framework/v0.5.6/lib/inspector-events/src/main.js +198 -0
  39. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/model.js +36 -0
  40. package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing/src/main.js +15 -2
  41. package/framework/{v0.5.6-alpha.2 → v0.5.6}/package.json +1 -1
  42. package/gna.js +4 -4
  43. package/llms.txt +17 -5
  44. package/package.json +3 -3
  45. package/framework/v0.5.6-alpha.2/VERSION +0 -1
  46. package/framework/v0.5.6-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -573
  47. package/framework/v0.5.6-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  48. package/framework/v0.5.6-alpha.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  49. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/AUTHORS +0 -0
  50. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/LICENSE +0 -0
  51. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/html/nolayout.html +0 -0
  52. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/html/static.html +0 -0
  53. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/android-chrome-192x192.png +0 -0
  54. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/android-chrome-512x512.png +0 -0
  55. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/apple-touch-icon.png +0 -0
  56. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/favicon-16x16.png +0 -0
  57. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/favicon-32x32.png +0 -0
  58. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/img/favicon.ico +0 -0
  59. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/README.md +0 -0
  60. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  61. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  62. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  63. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  64. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  65. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  66. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  67. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  68. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  69. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  70. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +0 -0
  71. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  72. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  73. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  74. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  75. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/config.js +0 -0
  76. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/ai/index.js +0 -0
  77. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/connector.js +0 -0
  78. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  79. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  80. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/n1ql.js +0 -0
  81. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/session-store.js +0 -0
  82. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  83. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  84. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mongodb/index.js +0 -0
  85. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mongodb/lib/connector.js +0 -0
  86. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
  87. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mongodb/lib/session-store.js +0 -0
  88. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mysql/index.js +0 -0
  89. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/mysql/lib/connector.js +0 -0
  90. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/postgresql/index.js +0 -0
  91. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/postgresql/lib/connector.js +0 -0
  92. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/redis/index.js +0 -0
  93. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/redis/lib/session-store.js +0 -0
  94. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/scylladb/index.js +0 -0
  95. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/scylladb/lib/connector.js +0 -0
  96. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/scylladb/lib/session-store.js +0 -0
  97. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/sql-parser.js +0 -0
  98. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/sqlite/index.js +0 -0
  99. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/sqlite/lib/connector.js +0 -0
  100. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/connectors/sqlite/lib/session-store.js +0 -0
  101. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/content.encoding +0 -0
  102. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.framework.js +0 -0
  103. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-nunjucks-async.js +0 -0
  104. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-stream.js +0 -0
  105. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-swig-async.js +0 -0
  106. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/controller.render-v1.js +0 -0
  107. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/controller/index.js +0 -0
  108. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/LICENSE +0 -0
  109. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/README.md +0 -0
  110. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  111. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  112. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  113. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  114. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/busboy-1.6.0/package.json +0 -0
  115. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  116. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  117. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/deps/streamsearch-1.1.0/package.json +0 -0
  118. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/dev/index.js +0 -0
  119. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/dev/lib/class.js +0 -0
  120. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/dev/lib/factory.js +0 -0
  121. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/dev/lib/tools.js +0 -0
  122. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/README.md +0 -0
  123. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/currency.json +0 -0
  124. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/dist/language/en.json +0 -0
  125. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/dist/language/fr.json +0 -0
  126. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/dist/region/en.json +0 -0
  127. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/dist/region/fr.json +0 -0
  128. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/locales/index.js +0 -0
  129. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/mime.types +0 -0
  130. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/model/template/entityFactory.js +0 -0
  131. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/model/template/index.js +0 -0
  132. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/README.md +0 -0
  133. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/index.js +0 -0
  134. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/csrf/README.md +0 -0
  135. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/csrf/package.json +0 -0
  136. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/csrf/src/main.js +0 -0
  137. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/README.md +0 -0
  138. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coep/README.md +0 -0
  139. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coep/package.json +0 -0
  140. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
  141. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coop/README.md +0 -0
  142. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coop/package.json +0 -0
  143. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
  144. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/corp/README.md +0 -0
  145. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/corp/package.json +0 -0
  146. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
  147. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/csp/README.md +0 -0
  148. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/csp/package.json +0 -0
  149. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/csp/src/main.js +0 -0
  150. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
  151. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
  152. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
  153. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hsts/README.md +0 -0
  154. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hsts/package.json +0 -0
  155. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
  156. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
  157. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
  158. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
  159. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/package.json +0 -0
  160. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
  161. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
  162. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
  163. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/src/main.js +0 -0
  164. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
  165. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
  166. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
  167. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
  168. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
  169. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
  170. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
  171. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
  172. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
  173. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
  174. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
  175. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
  176. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
  177. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
  178. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
  179. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
  180. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
  181. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
  182. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/session/README.md +0 -0
  183. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/session/package.json +0 -0
  184. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/session/src/main.js +0 -0
  185. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/storage/README.md +0 -0
  186. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/storage/build.json +0 -0
  187. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/storage/package.json +0 -0
  188. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/storage/src/main.js +0 -0
  189. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/validator/README.md +0 -0
  190. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/validator/build.json +0 -0
  191. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/validator/package.json +0 -0
  192. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/validator/src/form-validator.js +0 -0
  193. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/plugins/lib/validator/src/main.js +0 -0
  194. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/router.js +0 -0
  195. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/server.express.js +0 -0
  196. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/status.codes +0 -0
  197. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/_gitignore +0 -0
  198. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/app.json +0 -0
  199. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  200. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/routing.json +0 -0
  201. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/settings.json +0 -0
  202. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  203. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/templates.json +0 -0
  204. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  205. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  206. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  207. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  208. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/index.js +0 -0
  209. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle/locales/en.json +0 -0
  210. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  211. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  212. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  213. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  214. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  215. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  216. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
  217. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/readme.md +0 -0
  218. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_public/sw.js +0 -0
  219. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  220. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  221. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  222. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  223. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  224. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/command/gina.bat.tpl +0 -0
  225. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/command/gina.tpl +0 -0
  226. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/env.json +0 -0
  227. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/manifest.json +0 -0
  228. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/package.json +0 -0
  229. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/statics.json +0 -0
  230. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/conf/templates.json +0 -0
  231. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/client/json/401.json +0 -0
  232. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/client/json/403.json +0 -0
  233. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/client/json/404.json +0 -0
  234. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/server/html/50x.html +0 -0
  235. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/server/json/500.json +0 -0
  236. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/error/server/json/503.json +0 -0
  237. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/core/template/extensions/logger/config.json +0 -0
  238. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/console.js +0 -0
  239. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/context.js +0 -0
  240. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/data/LICENSE +0 -0
  241. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/data/README.md +0 -0
  242. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/data/package.json +0 -0
  243. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/data/src/main.js +0 -0
  244. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/dateFormat.js +0 -0
  245. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/index.js +0 -0
  246. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/json/LICENSE +0 -0
  247. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/json/README.md +0 -0
  248. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/json/package.json +0 -0
  249. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/json/src/main.js +0 -0
  250. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/path.js +0 -0
  251. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/plugins/README.md +0 -0
  252. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/plugins/package.json +0 -0
  253. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/plugins/src/api-error.js +0 -0
  254. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/plugins/src/main.js +0 -0
  255. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/prototypes.js +0 -0
  256. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/task.js +0 -0
  257. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/helpers/text.js +0 -0
  258. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/admin/package.json +0 -0
  259. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/admin/src/main.js +0 -0
  260. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/archiver/README.md +0 -0
  261. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/archiver/build.json +0 -0
  262. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/archiver/package.json +0 -0
  263. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/archiver/src/dep/jszip.min.js +0 -0
  264. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/archiver/src/main.js +0 -0
  265. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/async/package.json +0 -0
  266. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/async/src/main.js +0 -0
  267. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cache/README.md +0 -0
  268. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cache/build.json +0 -0
  269. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cache/package.json +0 -0
  270. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cache/src/main.js +0 -0
  271. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/aliases.json +0 -0
  272. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/add.js +0 -0
  273. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/arguments.json +0 -0
  274. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/build.js +0 -0
  275. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/copy.js +0 -0
  276. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/cp.js +0 -0
  277. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/help.js +0 -0
  278. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/help.txt +0 -0
  279. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/inc/name-rewrite.js +0 -0
  280. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/list.js +0 -0
  281. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/man.js +0 -0
  282. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/mcp-start.js +0 -0
  283. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/mcp.js +0 -0
  284. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/oas.js +0 -0
  285. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/openapi.js +0 -0
  286. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/remove.js +0 -0
  287. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/rename.js +0 -0
  288. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/restart.js +0 -0
  289. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/rm.js +0 -0
  290. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/start.js +0 -0
  291. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/status.js +0 -0
  292. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/bundle/stop.js +0 -0
  293. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/cache/stats.js +0 -0
  294. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/help.js +0 -0
  295. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/list.js +0 -0
  296. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/migrate.js +0 -0
  297. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/remove.js +0 -0
  298. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/connector/rm.js +0 -0
  299. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/add.js +0 -0
  300. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/get.js +0 -0
  301. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/help.js +0 -0
  302. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/help.txt +0 -0
  303. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/link-dev.js +0 -0
  304. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/list.js +0 -0
  305. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/remove.js +0 -0
  306. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/rm.js +0 -0
  307. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/set.js +0 -0
  308. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/unset.js +0 -0
  309. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/env/use.js +0 -0
  310. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/add.js +0 -0
  311. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/arguments.json +0 -0
  312. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/build.js +0 -0
  313. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/dot.js +0 -0
  314. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/get.js +0 -0
  315. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/help.js +0 -0
  316. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/init.js +0 -0
  317. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/link-node-modules.js +0 -0
  318. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/link.js +0 -0
  319. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/list.js +0 -0
  320. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/man.js +0 -0
  321. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/msg.json +0 -0
  322. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/open.js +0 -0
  323. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/remove.js +0 -0
  324. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/reset.js +0 -0
  325. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/restart.js +0 -0
  326. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/set.js +0 -0
  327. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/start.js +0 -0
  328. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/status.js +0 -0
  329. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/tail.js +0 -0
  330. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/update.js +0 -0
  331. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/framework/version.js +0 -0
  332. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/gina-dev.1.md +0 -0
  333. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/gina-framework.1.md +0 -0
  334. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/add.js +0 -0
  335. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/arguments.json +0 -0
  336. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/export.js +0 -0
  337. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/help.js +0 -0
  338. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/help.txt +0 -0
  339. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/import.js +0 -0
  340. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/i18n/scan.js +0 -0
  341. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/index.js +0 -0
  342. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/inspector/help.js +0 -0
  343. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/inspector/help.txt +0 -0
  344. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/inspector/open.js +0 -0
  345. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/man-render.js +0 -0
  346. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/minion/arguments.json +0 -0
  347. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/minion/help.js +0 -0
  348. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/minion/help.txt +0 -0
  349. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/minion/kill.js +0 -0
  350. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/minion/list.js +0 -0
  351. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/msg.json +0 -0
  352. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/help.js +0 -0
  353. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/help.txt +0 -0
  354. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/inc/scan.js +0 -0
  355. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/list.js +0 -0
  356. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/reset.js +0 -0
  357. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/port/set.js +0 -0
  358. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/arguments.json +0 -0
  359. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/backup.js +0 -0
  360. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/build.js +0 -0
  361. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/help.js +0 -0
  362. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/help.txt +0 -0
  363. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/import.js +0 -0
  364. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/list.js +0 -0
  365. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/man.js +0 -0
  366. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/move.js +0 -0
  367. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/remove.js +0 -0
  368. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/rename.js +0 -0
  369. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/restart.js +0 -0
  370. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/restore.js +0 -0
  371. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/rm.js +0 -0
  372. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/start.js +0 -0
  373. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/status.js +0 -0
  374. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/project/stop.js +0 -0
  375. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/arguments.json +0 -0
  376. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/help.js +0 -0
  377. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/help.txt +0 -0
  378. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/list.js +0 -0
  379. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/remove.js +0 -0
  380. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/protocol/set.js +0 -0
  381. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/add.js +0 -0
  382. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/help.js +0 -0
  383. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/help.txt +0 -0
  384. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/link-local.js +0 -0
  385. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/link-production.js +0 -0
  386. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/list.js +0 -0
  387. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/remove.js +0 -0
  388. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/rm.js +0 -0
  389. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/scope/use.js +0 -0
  390. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/secrets/arguments.json +0 -0
  391. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/secrets/check.js +0 -0
  392. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/secrets/help.js +0 -0
  393. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/secrets/help.txt +0 -0
  394. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/secrets/scan.js +0 -0
  395. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/service/help.js +0 -0
  396. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/service/help.txt +0 -0
  397. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/service/list.js +0 -0
  398. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/service/man.js +0 -0
  399. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/service/start.js +0 -0
  400. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd/view/add.js +0 -0
  401. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd-status-format/package.json +0 -0
  402. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cmd-status-format/src/main.js +0 -0
  403. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/collection/README.md +0 -0
  404. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/collection/build.json +0 -0
  405. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/collection/package.json +0 -0
  406. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/collection/src/main.js +0 -0
  407. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/config.js +0 -0
  408. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/connector-registry/package.json +0 -0
  409. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/connector-registry/src/main.js +0 -0
  410. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cron/README.md +0 -0
  411. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cron/package.json +0 -0
  412. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/cron/src/main.js +0 -0
  413. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/domain/LICENSE +0 -0
  414. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/domain/README.md +0 -0
  415. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/domain/package.json +0 -0
  416. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/domain/src/main.js +0 -0
  417. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/generator/index.js +0 -0
  418. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/i18n/package.json +0 -0
  419. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/i18n/src/main.js +0 -0
  420. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inherits/LICENSE +0 -0
  421. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inherits/README.md +0 -0
  422. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inherits/package.json +0 -0
  423. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inherits/src/main.js +0 -0
  424. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inspector-redact/package.json +0 -0
  425. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/inspector-redact/src/main.js +0 -0
  426. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/instrument/package.json +0 -0
  427. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/instrument/src/main.js +0 -0
  428. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/job/package.json +0 -0
  429. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/job/src/main.js +0 -0
  430. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/README.md +0 -0
  431. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/package.json +0 -0
  432. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/default/index.js +0 -0
  433. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/file/index.js +0 -0
  434. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  435. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  436. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/mq/index.js +0 -0
  437. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/mq/listener.js +0 -0
  438. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/containers/mq/speaker.js +0 -0
  439. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/helper.js +0 -0
  440. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/logger/src/main.js +0 -0
  441. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/math/index.js +0 -0
  442. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-dispatch/package.json +0 -0
  443. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-dispatch/src/main.js +0 -0
  444. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-http/package.json +0 -0
  445. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-http/src/main.js +0 -0
  446. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-server/package.json +0 -0
  447. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/mcp-server/src/main.js +0 -0
  448. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/merge/README.md +0 -0
  449. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/merge/package.json +0 -0
  450. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/merge/src/main.js +0 -0
  451. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/metrics/package.json +0 -0
  452. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/metrics/src/main.js +0 -0
  453. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/nunjucks-filters/README.md +0 -0
  454. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/nunjucks-filters/package.json +0 -0
  455. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/nunjucks-filters/src/main.js +0 -0
  456. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/nunjucks-resolver/package.json +0 -0
  457. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/nunjucks-resolver/src/main.js +0 -0
  458. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/proc.js +0 -0
  459. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing/README.md +0 -0
  460. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing/build.json +0 -0
  461. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing/package.json +0 -0
  462. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing/src/radix.js +0 -0
  463. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing-introspect/package.json +0 -0
  464. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/routing-introspect/src/main.js +0 -0
  465. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/secrets/package.json +0 -0
  466. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/secrets/src/backends/env.js +0 -0
  467. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/secrets/src/main.js +0 -0
  468. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/session-store.js +0 -0
  469. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/shell.js +0 -0
  470. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/state.js +0 -0
  471. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/swig-filters/README.md +0 -0
  472. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/swig-filters/package.json +0 -0
  473. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/swig-filters/src/main.js +0 -0
  474. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/swig-resolver/package.json +0 -0
  475. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/swig-resolver/src/main.js +0 -0
  476. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/template-loaders/package.json +0 -0
  477. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/template-loaders/src/loaders/http.js +0 -0
  478. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/template-loaders/src/loaders/memory.js +0 -0
  479. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/template-loaders/src/main.js +0 -0
  480. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/url/README.md +0 -0
  481. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/url/index.js +0 -0
  482. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/url/routing.json +0 -0
  483. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/uuid/package.json +0 -0
  484. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/uuid/src/main.js +0 -0
  485. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/validator.js +0 -0
  486. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/watcher/package.json +0 -0
  487. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/watcher/src/main.js +0 -0
  488. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-framing/package.json +0 -0
  489. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-framing/src/main.js +0 -0
  490. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-query/package.json +0 -0
  491. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-query/src/main.js +0 -0
  492. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-session/package.json +0 -0
  493. /package/framework/{v0.5.6-alpha.2 → v0.5.6}/lib/ws-session/src/main.js +0 -0
package/CHANGELOG.md CHANGED
@@ -6,6 +6,38 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
6
6
  and is generated by [Changie](https://github.com/miniscruff/changie).
7
7
 
8
8
 
9
+ ## 0.5.6 - 2026-07-01
10
+ ### Added
11
+ * Added a streaming variant to the AI connector: getModel('<name>').stream(messages, options) returns an EventEmitter emitting start/delta/done/error events for token-by-token inference, plus an .onComplete(cb) shim mirroring infer(). Works across Anthropic and every OpenAI-compatible provider; the buffered infer() is unchanged.
12
+ * The dev Inspector now has an "AI stream" tab that shows AI token streams per request. Streams started with getModel('<name>').stream(...) surface live as they arrive — token frames carrying model, role, running token counts and latency — plus an end-of-request snapshot of every stream the request made. Stream metadata is always captured in dev mode; the prompt and generated text ride the wire only when the new inspector.ai.captureText setting is enabled (default off).
13
+ * The dev Inspector can bridge selected framework entity events onto its live Event tab via a new settings.inspector.events.topics allow-list (default empty, so nothing is bridged by default). Whitelisted entity trigger names, matched exactly or by a single leading or trailing wildcard, surface as framework-sourced events alongside events emitted explicitly via self.emitEvent, carrying a safe ok/error summary rather than raw record data.
14
+ * Observable application events in the Inspector: emit a named runtime event with self.emitEvent(name, metadata) — or lib/inspector-events from model or background-job code — and see it live in a new Inspector "Events" tab. Events emitted within a request also appear in the end-of-request snapshot; events emitted outside a request (a background job or detached timer) still stream live. Capture is gated to dev mode or an open instrumentation window; the event name always rides the wire, while metadata values are opt-in via settings.inspector.events.captureArgs (default off).
15
+ * The dev Inspector can now surface framework connector-lifecycle events on its live Event tab: when a database connector re-establishes its connection (a "ready" lifecycle event, e.g. on reconnect), it appears as a framework-sourced <connector>#ready event carrying a safe ok/error summary. Bridging is opt-in through the same settings.inspector.events.topics allow-list as entity events (default empty, so nothing is bridged) and matched by exact name or a single leading or trailing wildcard; these lifecycle events stream live only, with no per-request snapshot.
16
+ * Added a `connector:infer` CLI command that runs a one-off inference against a configured AI connector outside a request: `gina connector:infer <connector> @<project> --message="..."` (or a messages JSON array piped on stdin). It resolves the project's shared + bundle connector config and credentials (`${secret:KEY}` from the environment, never echoed), instantiates the connector directly without booting the bundle, and prints the normalised result — `--format=json` for machine output. Useful for smoke-testing connectivity and credentials from CI/automation, or scripting a one-off inference from the shell. Errors cleanly on a non-AI connector.
17
+ * Added a `--stream` mode to `connector:infer` that streams the inference as newline-delimited JSON (NDJSON) — one frame per line on stdout: a `start` frame, a `delta` frame per token, then a terminal `done` frame (content, model, usage, latency) or an `error` frame. Token counters are passed through verbatim and never fabricated — they are `null` when the provider does not report them (some providers report token usage only in a final chunk, or omit it entirely). `--stream` always emits NDJSON regardless of `--format`, for token-by-token consumption from CI or a shell.
18
+ * `gina connector:test` — probe configured connectors for readiness and exit non-zero on any failure (CI-friendly). Validate-only by default and offline: for each connector it checks the type / `ai` protocol is recognised, the npm driver is installed, and every `${secret:KEY}` placeholder resolves from the environment. `--connect` adds a live probe — for `ai` connectors it calls the provider models.list (zero generation tokens; `ollama://` confirms the local server is up). `gina connector:test [<connector> [<bundle>]] @<project>` tests one connector or every connector in a project; `--format=json` emits a machine-readable readiness report.
19
+ * gina connector:infer gains a --raw flag that opts the heavy provider response back into the output (omitted by default for CLI use). With --format=json it adds a raw field carrying the full provider response; with --stream it adds raw to the final done frame (the final provider message object, or null for OpenAI-compatible streams, which expose no single final object). It has no effect in text mode.
20
+ ### Changed
21
+ * `gina stop` (alias of `framework:stop`) now lists any bundles still running when it exits and points to `gina bundle:stop` / `gina project:stop` — it stops the framework socket server only, not the detached bundle processes, which keep running. The framework CLI `--help` and man page now document `start`/`stop`/`restart` and make the daemon-only scope of `stop` explicit.
22
+ ### Fixed
23
+ * gina project:import is now additive across release targets. Previously, importing a project for one scope and env rebuilt the per-bundle manifest.json release map from scratch, dropping any targets registered under other scopes or envs (and resetting custom target paths and versions). Import now preserves the existing release map and only seeds a default target for the scope/env cells that have none, so registering a brand-new scope no longer wipes the release targets already in use.
24
+ * The development Inspector /_gina/agent SSE endpoint now streams live AI token-stream and application-event frames over the HTTP/1 server, matching the HTTP/2 (isaac) engine SSE and the WebSocket transport. Previously these two live frame types only reached Inspector clients connected over the isaac SSE or the WebSocket.
25
+ * The Couchbase connector now substitutes a positional placeholder used as a dynamic field-path key (a `<field>.$N` component, e.g. `SET doc.flags.$2 = $3`) at every occurrence in a prepared statement. Previously, when the same `$N` was used as a field-path component in more than one clause (for example once in SET and once in WHERE), only the last occurrence was interpolated and the earlier one was left as a literal `$N`, producing malformed N1QL; a lower-numbered placeholder could also bleed into a higher-numbered one (`$3` into `$30`). Value placeholders (`= $N`, `LIMIT $N`) are unaffected and still bind positionally.
26
+ * AI connectors now expose their inference API through getModel(): getModel(name).infer(...) and getModel(name).stream(...) work as documented. Previously the model loader treated an AI connector factory like an entity manager, so getModel() returned only a bare connection wrapper without infer/stream — and self.inferAsync plus AI token-stream capture, which build on it, were unreachable.
27
+ * The model loader no longer crashes with a ReferenceError when a connectors.json entry has no resolvable connector module. The "No connector found" error path referenced an undefined variable while constructing its own error, masking the real diagnostic; it now reports the missing connector cleanly.
28
+ * Model-initialization failures at boot on a bundle without an onInitialize handler are no longer silently swallowed. Previously such a bundle started in a degraded state (its model layer dead) and failed later with a cryptic call-time error; it now aborts the boot with a clear message, matching the fail-fast behavior of every other model-init failure path.
29
+ * A native `<dialog>` popin closed by the user agent — pressing Escape, or submitting a `<form method="dialog">` inside it — now runs the same cleanup as the close button. Previously only the framework's own close paths cleaned up, so a user-agent close left a reused AJAX popin with stale content and its open state stuck, making the next open of a shared-name popin show the previous fragment.
30
+ * The AI connector core now loads the framework's `lib` registry directly instead of going through the full framework bootstrap, so a configured AI connector can be instantiated outside a running bundle — e.g. by `gina connector:infer` in an offline/CLI context. Previously the bootstrap's bundle-boot path (which resolves a started bundle's listening port) made the connector core un-loadable anywhere but inside a live bundle.
31
+ * Multipart upload filenames carrying non-ASCII UTF-8 characters in the plain Content-Disposition `filename=` parameter are now decoded as UTF-8 instead of busboy's latin1 default. A filename such as "Accusé de réception.pdf" previously reached the upload handler mojibaked ("Accusé de réception.pdf") and was persisted under that mangled name. The RFC 5987 `filename*` form (self-describing) and ASCII field names are unaffected.
32
+ * gina connector:infer now writes its buffered result with synchronous I/O, so the full output is no longer truncated when stdout is a pipe (for example | jq, command substitution, or CI) — previously the process could exit before the OS pipe buffer was flushed, cutting off large responses. --message now takes precedence over a piped stdin messages array (an accidentally non-TTY stdin such as a heredoc or redirected file no longer overrides an explicit --message), and --format is matched strictly so only --format=json emits JSON while jsonl and json5 fall back to the text output.
33
+ * DELETE route matching no longer crashes with a 500 ("Invalid regular expression ... Unterminated group") when a route requirements pattern ends in a group-close immediately before the regex flag (for example /(^null$|^[0-9A-Za-z]{6}$)/i). An off-by-one in the DELETE-only requirement un-delimiting over-stripped the final pattern character, so the first such route reached while scanning broke the entire DELETE dispatch — even a DELETE to an unrelated route. A requirement ending )$/i previously lost its $ end anchor silently; it is now kept.
34
+ * DELETE route matching now honours the regex flags on a route requirements pattern (for example /^foo$/i), matching the GET path. Previously the DELETE-only matcher dropped the trailing flags when un-delimiting the pattern, so a requirement written to be case-insensitive matched case-sensitively on DELETE while the same pattern matched case-insensitively on GET.
35
+ * The connector:add --help output and the AI connector JSDoc examples now show the working ${secret:KEY} placeholder for injecting an API key or password into a connector entry, instead of a bare ${ENV_VAR} form. A bare ${ENV_VAR} placeholder is never substituted at config-load time — only ${secret:KEY} placeholders are resolved from the environment — so the previous examples would have produced a connector that used the literal placeholder string as its credential.
36
+ * gina connector:test now fails a connector whose config carries a bare ${ENV_VAR} placeholder (for example an apiKey of ${ANTHROPIC_API_KEY}). Such a placeholder is never substituted at config-load time — only ${secret:KEY} placeholders are resolved from the environment — so the connector would otherwise use the literal placeholder string as its value; the default validate-only run previously reported it as passing. A new `envvar` check surfaces the offending field and the fix (use ${secret:KEY}), and a registered project whose directory is missing is now reported as a failure in the all-projects report.
37
+ * connector:infer now recognises an AI connector declared as just "ai": { ... } with no explicit "connector" field (the shape connector:add writes when the name equals the type). It previously rejected such an entry with a self-contradictory "is a `ai` connector, not `ai`" error, because it required the "connector" field while connector:list and connector:test already accept the entry key as a fallback. Separately, the lib/connector-config resolver now returns a DEEP copy of the selected entry, so resolving a nested ${secret:KEY} placeholder in place can never mutate the shared parsed-JSON (requireJSON) cache.
38
+ * `gina connector:test` now resolves every connector entry through the shared connector-config resolver — the same deep-copying path `connector:infer` uses — instead of an inline shallow merge. When testing a whole project or every registered project, each entry is now a fresh deep copy, so an in-place ${secret:KEY} resolution during a --connect live probe can no longer mutate the shared parsed-config cache through a nested placeholder.
39
+ * A corrupt project registration in `~/.gina/projects.json` — an empty or missing path, or a path pointing at a deleted directory — no longer aborts EVERY gina command with a stack-trace dump. A registry entry with an empty/invalid path is now skipped with a clear warning (re-add it with `gina project:add`), and running a command against a project whose directory has been deleted prints an actionable message (re-add it, or remove the stale entry with `gina project:remove --force`) instead of crashing.
40
+
9
41
  ## 0.5.5 - 2026-06-22
10
42
  ### Added
11
43
  * Added gina project:move to relocate a project source tree to a new filesystem path. The project name, its home directory, the port matrix, and its bundles are preserved (only the registry path is updated). It refuses while any bundle in the project is running, refuses a cross-filesystem target (pointing you to project:import), and reverses the move on failure.
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Gina
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/gina)](https://www.npmjs.com/package/gina) [![npm downloads](https://img.shields.io/npm/dm/gina)](https://www.npmjs.com/package/gina) [![GitHub stars](https://img.shields.io/github/stars/gina-io/gina)](https://github.com/gina-io/gina/stargazers) [![Tests](https://github.com/gina-io/gina/actions/workflows/test.yml/badge.svg)](https://github.com/gina-io/gina/actions/workflows/test.yml) [![Socket Badge](https://socket.dev/api/badge/npm/package/gina)](https://socket.dev/npm/package/gina) [![Node.js >= 22](https://img.shields.io/badge/node-%3E%3D%2022-brightgreen)](https://nodejs.org) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
3
+ [![npm version](https://img.shields.io/npm/v/gina)](https://www.npmjs.com/package/gina) [![npm downloads](https://img.shields.io/npm/dm/gina)](https://www.npmjs.com/package/gina) [![GitHub stars](https://img.shields.io/github/stars/gina-io/gina)](https://github.com/gina-io/gina/stargazers) [![Tests](https://github.com/gina-io/gina/actions/workflows/test.yml/badge.svg)](https://github.com/gina-io/gina/actions/workflows/test.yml) [![Socket Badge](https://socket.dev/api/badge/npm/package/gina)](https://socket.dev/npm/package/gina) [![Node.js >= 22](https://img.shields.io/badge/node-%3E%3D%2022-brightgreen)](https://nodejs.org) [![Bun >= 1.2](https://img.shields.io/badge/Bun-%3E%3D%201.2-brightgreen)](https://bun.sh) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
4
4
 
5
5
  > **Documentation:** [gina.io/docs](https://gina.io/docs/) · **Issues:** [GitHub](https://github.com/gina-io/gina/issues) · **Changelog:** [CHANGELOG.md](./CHANGELOG.md)
6
6
 
@@ -40,16 +40,13 @@ gina bundle:start api @myproject
40
40
  open https://localhost:3100
41
41
  ```
42
42
 
43
- ## What's in 0.5.5
43
+ ## What's in 0.5.6
44
44
 
45
- - **WebSocket routes in `routing.json`.** Declare a WebSocket-over-HTTP/2 endpoint with `"method": "ws"` and a `param.wsHandler` pointing at a `channels/<name>.js` handler auto-registered at bundle start, no `app.onWebSocket()` call needed. Routes support `:param` path segments and per-route `param.wsOptions` (`maxPayload` / `protocol` / `closeTimeout`).
46
- - **Cross-bundle calls from a channel handler.** A WebSocket handler can now call another bundle over HTTP with `session.query()` the same warm-HTTP/2-session call a controller makes with `self.query()`.
47
- - **Framework versions side-by-side.** `gina framework:add <version>` installs a published framework version alongside the active one so a bundle can pin it via `--gina-version`; `framework:list` / `framework:remove` / `framework:update` / `framework:reset` round out the set.
48
- - **Project lifecycle CLI.** `gina project:move --to=<path>` relocates a project's source tree (and its registry entry); `project:backup` / `project:restore` archive a project to a `.zip` and rebuild it.
49
- - **Inline CLI man pages.** `gina framework:man` (and `project:man` / `bundle:man` / `service:man`) renders a command group's manual page in the terminal.
50
- - **Bun is now a supported runtime.** Install with `bun add -g gina`; the install + boot path is validated end-to-end by a CI Bun smoke.
51
- - **Idempotent HTTP/2 client retries.** Inter-bundle `self.query()` now auto-retries only HTTP safe methods on a transient transport failure, so a `POST` / `PUT` / `PATCH` / `DELETE` the upstream already executed is no longer silently replayed; opt a non-safe call back in with `retryUnsafe: true`.
52
- - **Security.** A WebSocket denial-of-service fix via an `ws` dependency override (reached through `engine.io`), plus log-tail restart hardening.
45
+ - **AI-connector CLI suite.** `gina connector:infer <connector> @<project> --message=""` runs a one-off inference against a configured AI connector **outside a running bundle** resolves the merged connector config + `${secret:KEY}` credentials (never echoed), instantiates the connector directly, and prints the normalised result. `--stream` emits token frames as NDJSON, `--raw` adds the full provider response, `--format=json` for machine output. `gina connector:test [<connector>] @<project>` probes connectors for readiness (driver installed, `${secret:KEY}` resolvable), exits non-zero on any failure (CI-friendly); `--connect` adds a zero-generation-token live provider check.
46
+ - **Streaming AI inference.** `getModel('<name>').stream(messages, options)` returns an EventEmitter emitting `start` / `delta` / `done` / `error` for token-by-token inference across Anthropic and every OpenAI-compatible provider (plus an `.onComplete(cb)` shim); the buffered `infer()` is unchanged.
47
+ - **AI stream + application events in the Inspector.** A new dev-Inspector **"AI stream"** tab shows token streams per request; a new **"Events"** tab surfaces named application events emitted with `self.emitEvent(name, metadata)`, with opt-in bridges (`settings.inspector.events.topics`) that surface whitelisted entity events and database connector-lifecycle (`<connector>#ready`) events.
48
+ - **`getModel()` exposes the AI inference API.** `getModel(name).infer(…)` and `getModel(name).stream(…)` now work as documented previously an AI connector returned only a bare connection wrapper.
49
+ - **Robustness fixes.** Boot aborts with a clear message on a model-init failure instead of starting degraded (#B57); a corrupt `~/.gina/projects.json` registration is skipped with a warning instead of crashing every command (#B59); DELETE-route requirement regexes honour their flags and no longer crash on a group-close-before-flag pattern; multipart upload filenames with non-ASCII UTF-8 characters are decoded correctly; a native `<dialog>` popin closed by the user agent (Escape / dialog-method form) runs the same cleanup as the close button; the Couchbase connector substitutes a positional placeholder used as a dynamic field-path key at every occurrence; `gina project:import` is now additive across release targets; `gina stop` reports any bundles still running.
53
50
 
54
51
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
55
52
 
package/ROADMAP.md CHANGED
@@ -30,6 +30,7 @@ This roadmap covers planned features, architectural improvements, new connectors
30
30
  | **Q2 2026** | `0.5.3` ✅ | Patch: released-response crash family finished — late `throwError(status, error)` (2- and 3-argument forms) and the HTML render delegates (swig / nunjucks + async variants) no longer crash or emit unhandled rejections when invoked on an already-released response · atomic `~/.gina` state-file writes (concurrent multi-bundle / multi-container boot can't read a torn file) · framework command-socket hardened against malformed / fragmented payloads · framework socket port no longer corrupted by a bundle's `--port` · synchronous boot-failure diagnostics under piped stdout/stderr · storage `_id` collision hardening · `gina port:set --force` |
31
31
  | **Q2 2026** | `0.5.4` ✅ | Node.js 26 support (engine `>= 22 <27`, CI matrix) · FormValidator fixes (`isFloat` accepts string floats · `isDate` non-ISO masks + rule chaining) · quieter live form validation (error message revealed on blur) · file-upload fixes (honour `tmpPath` / per-group `path` · enforce `maxFields` + `maxFieldsSize` unit suffix · **Security**: reject uploads to an unconfigured group, closing an `allowedExtensions` / `isMultipleAllowed` bypass) · two dev-mode heap fixes (hot-reload lib-eviction leak · HTTP/2 `self.query()` settled-stream retention) · tighter per-request config isolation (narrowed router clone · `getRouteByUrl` shared-config mutation) · dev Inspector reliability (per-tab channel under COOP · Swig render-race isolation · multi-bundle proxy log/index routing · SPA hardening) · Express-engine `/_gina/info` + `/_gina/cache/stats` parity · `bundle:add --ignore-ports` |
32
32
  | **Q2 2026** | `0.5.5` ✅ | WebSocket routes in `routing.json` (`method: "ws"` + `param.wsHandler` → `channels/<name>.js`, `:param` paths, per-route `param.wsOptions`) · cross-bundle `session.query()` from WebSocket channel handlers · framework version side-by-side CLI (`framework:add` / `framework:list` / `framework:remove` / `framework:update` / `framework:reset`) · `project:move` / `project:backup` / `project:restore` · inline CLI man pages (`framework:man` / `project:man` / `bundle:man` / `service:man`) · Bun promoted to a supported, CI-gated runtime · idempotent HTTP/2 client retries (safe-method gating + per-call `retryUnsafe` opt-in) · **Security**: WebSocket-DoS dependency hardening (`ws` override) · `tail` restart hardening |
33
+ | **Q3 2026** | `0.5.6` ✅ | AI-connector CLI suite — `connector:infer` (one-off inference · `--stream` NDJSON · `--raw`) + `connector:test` (CI readiness probe · `--connect` zero-token live check) · AI connector `stream()` + Inspector "AI stream" tab · application events in the Inspector — `self.emitEvent()` + a new "Events" tab, opt-in entity-event & connector-lifecycle bridges · `getModel()` exposes the AI `infer`/`stream` API · fixes: model-init fail-fast · corrupt `projects.json` registration skipped cleanly · DELETE-route regex flags + off-by-one crash · UTF-8 multipart upload filenames · native `<dialog>` popin close cleanup · Couchbase dynamic field-path placeholder · `project:import` additive across release targets · `gina stop` bundles-still-running notice |
33
34
  | **Q1 2027** | `0.5.x` | HTTP/2 priorities (blocked on Node scheduler hooks) · Beemaster admin + visual translation editor |
34
35
  | **Q3 2027** | `1.0.0` | First stable release — Windows alpha compatibility is a hard gate |
35
36
 
@@ -228,6 +229,8 @@ New database connectors follow the same interface as the existing Couchbase conn
228
229
  | ✅ | **Couchbase SDK v2 removal** | `0.4.0` | 2026-05-22 | `connector.v2.js` and `session-store.v2.js` removed, along with every `sdkVersion`-based v2 branch in `index.js` (consistency setup, prepared-statement builder, FTS substitution, query dispatch, and the `bulkInsert` path). The connector and session-store resolvers default to SDK v3 and fail fast with an explicit upgrade message when a project still pins `couchbase@2`. Migration is a driver bump (`npm install couchbase@^4`), not a `connectors.json` edit — `sdk.version` is derived from the installed `couchbase` npm major, never a config key. |
229
230
  | ✅ | **`peerDependencies` for connector clients** | `0.3.0` | 2026-04-01 | All connector client libraries (`ioredis`, `mysql2`, `pg`, `mongodb`, `@scylladb/scylla-driver`, `couchbase`, `openai`, `@anthropic-ai/sdk`) are declared as optional `peerDependencies`. Signals the tested version range to npm/yarn and surfaces a compatibility warning when a user pins an untested version. Zero framework runtime dependency — clients are always loaded from the project's `node_modules`. |
230
231
  | ✅ | **`connector:*` CLI group + lint/fix migration** | `0.3.8` | Q2 2026 | New CLI for managing `connectors.json` at project (shared) or bundle scope: `connector:list`, `connector:add`, `connector:rm`, `connector:migrate`. Positional-absence signals scope — omit `<bundle>` to operate on `shared/config/connectors.json`, include it to operate on the bundle's own. `list` cross-references declared connectors against the project's `node_modules` and prints install status per driver. `add` writes the JSON entry and prints the exact `npm install <driver>@<range>` command (no auto-install in v1). `rm` supports `--dry-run` / `--force` and scans sibling bundles for usage before removing at project scope. `migrate` lints every `connectors.json` (or a single bundle's file) and, with `--fix`, injects missing `$schema` entries while preserving comment headers and key order — dry-run by default. Framework-side auto-migrate hook deferred to `0.4.0` alongside the Couchbase SDK v2 removal where a concrete old-shape → new-shape delta will justify touching the boot path. Adds a `version` property to the `connectors.json` schema for install-version resolution. Optional follow-up: `--install` flag with lockfile-based package manager detection. **Session 1 (`connector:list`) shipped 2026-04-21, `0.3.7-alpha.3`** — read-only lister with overlay/override detection, driver install probing, version-pin disagreement warnings, JSON output, 89 source-inspection unit tests. **Session 2 (`connector:add` + schema `version`) shipped 2026-04-21, `0.3.7-alpha.3`** — writes shared or bundle-scoped connector entries, infers type from `<name>`, preserves comment headers and key order, pins `$schema` at the top, rejects overwrites without `--force`, prints `npm install <pkg>@"<range>"` install hint (AI resolves per protocol scheme, sqlite short-circuits to built-in note), adds `version` property to `schema/connectors.json`. 94 source-inspection unit tests; 7 live smoke tests. CLI flag rename (`--connector-port=`/`--driver-version=`) avoids framework-reserved `--port`/`--version`. **Session 3 (`connector:rm`) shipped 2026-04-21, `0.3.7-alpha.3`** — removes shared or bundle-scoped entries via positional-absence scoping (`remove` alias accepted); `--dry-run` previews without writing; `--force` skips the project-level usage guard that otherwise refuses when any bundle still references the same logical name; driver-retention hint prints after every removal naming sibling bundles that still use the same driver (sqlite exempt — built-in); inherited-from-shared hint fires when rm from a bundle targets an entry declared only in shared. Never runs `npm uninstall`. 81 source-inspection unit tests. **Session 4 (`connector:migrate`) shipped 2026-04-21, `0.3.7-alpha.3`** — CLI-only linter: dry-run by default, `--fix` applies auto-fixable issues in place. Two detection types: `missing-schema` (auto-fixable, injects `"$schema": "https://gina.io/schema/connectors.json"` pinned at top while preserving comment header and key order) and `bare-key-no-connector` (entry key not in `couchbase, mysql, postgresql, sqlite, redis, ai` enum with no `connector` field — warn-only since driver cannot be inferred). Two invocation modes via positional-absence: `@<project>` scans shared + every bundle; `<bundle> @<project>` scans just that bundle. `--format=json` emits `{project, scope, bundle, fixApplied, files[]}` envelope for CI. Registered as offline — no framework socket required. Idempotent. Never modifies `core/config.js` and never runs at bundle boot — explicit and opt-in. Real framework-side hook deferred to `0.4.0` alongside Couchbase SDK v2 removal. 87 source-inspection unit tests; full write-path smoke test on a disposable sandbox (shared + two bundles), plus a no-false-positive smoke on a real 7-bundle project. |
232
+ | ✅ | **`connector:infer` — one-off AI inference CLI** | `0.5.6-alpha.3` | Q2 2026 | Runs a single inference against a configured `ai` connector **outside a request** — the runtime sibling of the config-only `connector:list`/`add`/`rm`/`migrate` tooling. Resolves the project's shared (or shared+bundle merged) `connectors.json`, resolves `${secret:KEY}` credentials from the CLI's own environment (the resolved value is never echoed), instantiates the connector directly (no bundle boot, no framework socket), and prints the normalised result. `gina connector:infer <connector> [<bundle>] @<project> --message="..."`, with `--system` / `--model` / `--max-tokens` / `--temperature` per-call overrides; `--message` takes precedence over a messages JSON array piped on stdin. `--format=json` (matched strictly — `jsonl`/`json5` fall back to the text output) emits `{ content, model, usage }`, with `--raw` adding the full provider response as a `raw` field (omitted by default for CLI use); text mode writes the content to stdout and a model/usage footer to stderr. `--stream` streams the inference as newline-delimited JSON (NDJSON) — one frame per line on stdout: a `start` frame, a `delta` frame per token, then a terminal `done` (content, model, usage, latency; plus the provider `raw` object under `--raw` — `null` for OpenAI-family streams) or `error` frame; token counters are passed through verbatim and are `null` (never fabricated) when a provider does not report them. Errors cleanly on a non-`ai` connector, and surfaces missing-SDK / credential / transport failures with a non-zero exit and the reason on stderr. Useful for smoke-testing connectivity + credentials from CI/automation, or scripting a one-off inference from a shell; offline providers such as `ollama://` work with no paid-API key. Implemented 2026-06-30 (`connector:infer` + the `--stream` NDJSON mode; a later output-hardening pass added `--raw`, pipe-safe synchronous writes, and `--message`-over-stdin precedence). |
233
+ | ✅ | **`connector:test` — connector readiness probe CLI** | `0.5.6-alpha.3` | Q2 2026 | Probes a project's configured connectors for readiness **outside a request** — the CI-friendly sibling of `connector:list` (driver-install status only) and `secrets:check` (env presence only), answering "is this connector ready to use?". Default is validate-only and offline: per connector it checks the `connector` type / `ai` protocol is recognised, the npm driver is installed at `<project>/node_modules`, and every `${secret:KEY}` placeholder resolves from the environment — no network, no connector instantiated — exiting non-zero when any connector fails so it can gate a deploy. `gina connector:test [<connector> [<bundle>]] @<project>` tests one connector or every connector in a project (bare → every registered project), mirroring `connector:infer`'s positional grammar and `secrets:check`'s all-mode; `--format=json` emits a machine-readable readiness report. The `--connect` opt-in adds a live connectivity probe: for `ai` connectors it calls the provider's `models.list` (a credentialed request that authenticates with **zero generation tokens**; `ollama://` confirms the local server is up), resolving `${secret:KEY}` the way `connector:infer` does (the value is never printed). For DB/cache connectors the live `--connect` probe is reported as **skipped** for now (config / driver / secrets are still validated) — the live DB/cache probe is a follow-up, since those connector classes load `core/gna` (which exits the process outside a booted bundle) and cannot be instantiated the way the AI connector is. Implemented 2026-06-30. |
231
234
 
232
235
  ---
233
236
 
@@ -318,6 +321,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
318
321
  | ✅ | **AI connector** — Declare any LLM provider in `connectors.json` via named protocol (`anthropic://`, `openai://`, `deepseek://`, `qwen://`, `groq://`, `mistral://`, `gemini://`, `xai://`, `perplexity://`, `ollama://`). Unified `.infer(messages, options)` normaliser + raw `.client` for advanced use. | `0.3.0` | Q1 2026 |
319
322
  | ✅ | **`renderStream` — streaming responses** — `self.renderStream(asyncIterable, contentType)` streams SSE or chunked JSON without buffering. Required for LLM token streaming without bypassing the render pipeline. | `0.3.0` | 2026-03-31 |
320
323
  | ✅ | **Async job pattern for slow AI calls** — First-class "start job → return jobId → poll or webhook on completion" pattern, backed by the `lib/job` primitive (`self.startJob` / `self.inferAsync`, always-on `/_gina/jobs/:id` polling, opt-in completion webhook). Prevents LLM latency (1–30s) from blocking the response pipeline. | `0.4.0` | 2026-05-22 |
324
+ | ✅ | **AI connector streaming + Inspector AI-stream tab** — `getModel('<name>').stream(messages, options)` returns an EventEmitter emitting `start`/`delta`/`done`/`error` for token-by-token inference (plus an `.onComplete(cb)` shim mirroring `infer()`), across Anthropic and every OpenAI-compatible provider; the buffered `.infer()` is unchanged. The dev Inspector gains an "AI stream" tab — live token frames (model, role, running token counts, latency) plus an end-of-request snapshot; stream metadata is always captured in dev mode, while the prompt and generated text ride the wire only when the opt-in `inspector.ai.captureText` setting is enabled (default off). | `0.5.6-alpha.2` | 2026-06-24 |
321
325
 
322
326
  ### Phase 3 — AI agents can consume Gina apps
323
327
 
@@ -374,6 +378,7 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
374
378
  | ✅ | **Query tab** — Per-request query instrumentation via AsyncLocalStorage in the Couchbase connector. Cross-bundle propagation via `__ginaQueries` JSON sidecar. Split trigger badge (entity\|method), SQL syntax highlighting, params table, free-text search. Tagged with `origin` (bundle) and `connector`. | `0.3.0-alpha.1` | 2026-04-03 |
375
379
  | ✅ | **Remove legacy toolbar from `gina.min.js`** — Toolbar AMD module removed from RequireJS bundle. The `statusbar.html` shim is now the sole provider of `window.ginaToolbar` in dev mode. Guard fixes in `events.js` (unguarded call, `typeof == 'object'` null bug). Source directory retained for reference. | `0.3.0-alpha.1` | 2026-04-03 |
376
380
  | ✅ | **Reorganize Inspector source to match plugin conventions** — Source moved into `html/`, `css/`, `js/`, `sass/` subdirectories. CSS converted to SCSS with nesting. Build script Phase 2 skips Inspector; Phase 3 compiles SCSS and copies to flat dist. Inspector CSS served separately, not concatenated into `gina.min.css`. | `0.3.0-alpha.1` | 2026-04-04 |
381
+ | ✅ | **Events tab — application & framework events** — `self.emitEvent(name, metadata)` emits a named runtime event that streams live to a new Inspector "Events" tab (and appears in the end-of-request snapshot); events emitted outside a request still stream live. Opt-in bridges surface whitelisted **entity** trigger events and database **connector-lifecycle** (`<connector>#ready`) events as framework-sourced events via `settings.inspector.events.topics` (exact name or a single leading/trailing wildcard). Capture is gated to dev mode or an open instrumentation window; the event name always rides the wire, while metadata values are opt-in via `settings.inspector.events.captureArgs` (default off). | `0.5.6` | 2026-06-30 |
377
382
 
378
383
  ### Phase 3 — Production
379
384
 
@@ -0,0 +1 @@
1
+ 0.5.6
@@ -37,6 +37,9 @@
37
37
  <button class="bm-tab" data-tab="stream">
38
38
  <svg class="bm-tab-icon" viewBox="0 0 16 16"><path d="M3 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM9.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM16 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0z" fill="currentColor"/></svg>
39
39
  Stream</button>
40
+ <button class="bm-tab" data-tab="events">
41
+ <svg class="bm-tab-icon" viewBox="0 0 16 16"><path d="M1 8h3l2-5 3 11 2.5-6H15" fill="none" stroke="currentColor" stroke-width="1.3" stroke-linejoin="round" stroke-linecap="round"/></svg>
42
+ Events</button>
40
43
  </nav>
41
44
  <div class="bm-header-spacer"></div>
42
45
  <button class="bm-refresh-btn" id="bm-refresh" title="Refresh now (Shift+click: reload page)" aria-label="Refresh data">
@@ -187,6 +190,13 @@
187
190
  </div>
188
191
  </section>
189
192
 
193
+ <!-- Application events tab -->
194
+ <section id="tab-events" class="bm-panel" aria-label="Application events">
195
+ <div class="bm-scroll-area" data-tab="events">
196
+ <pre class="bm-raw-view" id="tree-events"></pre>
197
+ </div>
198
+ </section>
199
+
190
200
  <!-- ── Logs tab ── -->
191
201
  <section id="tab-logs" class="bm-panel" aria-label="Logs">
192
202
  <div class="bm-logs-controls">
@@ -106,17 +106,17 @@
106
106
  /**
107
107
  * Tab order definitions for each layout preset.
108
108
  *
109
- * - **balanced** (default) — Data, View, Logs, Forms, Query, Flow, Stream
110
- * - **backend** — Data, Query, Flow, Logs, View, Forms, Stream
111
- * - **frontend** — View, Data, Forms, Logs, Query, Flow, Stream
109
+ * - **balanced** (default) — Data, View, Logs, Forms, Query, Flow, Stream, Events
110
+ * - **backend** — Data, Query, Flow, Logs, View, Forms, Stream, Events
111
+ * - **frontend** — View, Data, Forms, Logs, Query, Flow, Stream, Events
112
112
  *
113
113
  * Each array contains `data-tab` attribute values in display order.
114
114
  * @constant {Object.<string, string[]>}
115
115
  */
116
116
  var TAB_LAYOUTS = {
117
- balanced: ['data', 'view', 'logs', 'forms', 'query', 'flow', 'stream'],
118
- backend: ['data', 'query', 'flow', 'logs', 'view', 'forms', 'stream'],
119
- frontend: ['view', 'data', 'forms', 'logs', 'query', 'flow', 'stream']
117
+ balanced: ['data', 'view', 'logs', 'forms', 'query', 'flow', 'stream', 'events'],
118
+ backend: ['data', 'query', 'flow', 'logs', 'view', 'forms', 'stream', 'events'],
119
+ frontend: ['view', 'data', 'forms', 'logs', 'query', 'flow', 'stream', 'events']
120
120
  };
121
121
 
122
122
  /**
@@ -171,6 +171,16 @@
171
171
  * @type {{id: ?string, frames: Object[]}}
172
172
  */
173
173
  var _aiStreamBuf = { id: null, frames: [] };
174
+ /**
175
+ * Live application-event buffer (#EVTBUS). Unlike the single-slot token buffer,
176
+ * this ACCUMULATES discrete events (capped at EVENT_BUF_MAX) so the Event tab
177
+ * shows the rolling sequence as they fire; the end-of-request snapshot
178
+ * (user.events) carries the events of one request.
179
+ * @type {Object[]}
180
+ */
181
+ var _eventBuf = [];
182
+ /** @constant {number} Cap on the rolling live event buffer. */
183
+ var EVENT_BUF_MAX = 500;
174
184
  /** @type {LogEntry[]} In-memory log buffer (capped at {@link MAX_LOG_ENTRIES}) */
175
185
  var logs = [];
176
186
  /** @type {number} Read offset into `source.__ginaLogs` for client-side polling */
@@ -1784,6 +1794,8 @@
1784
1794
  // #AISTREAM \u2014 the Stream tab renders its live token buffer even before
1785
1795
  // a snapshot exists, so don't blank it with the "Waiting\u2026" hint.
1786
1796
  if (name === 'stream') { renderAiStream(treeEl, null); return; }
1797
+ // #EVTBUS — same for the Event tab's rolling live buffer.
1798
+ if (name === 'events') { renderAppEvents(treeEl, null); return; }
1787
1799
  treeEl.innerHTML = '<span class="bm-hint">Waiting for source data\u2026</span>';
1788
1800
  return;
1789
1801
  }
@@ -1851,6 +1863,12 @@
1851
1863
  // and return before the innerHTML/fold path; token text is untrusted.
1852
1864
  renderAiStream(treeEl, u.aiStream);
1853
1865
  return;
1866
+ case 'events':
1867
+ // #EVTBUS — render the rolling live buffer (or the request snapshot)
1868
+ // via textContent; return before the innerHTML/fold path. Event
1869
+ // names + metadata are app-controlled but treated as untrusted.
1870
+ renderAppEvents(treeEl, u.events);
1871
+ return;
1854
1872
  }
1855
1873
 
1856
1874
  treeEl.innerHTML = content || '<span class="bm-empty">No data</span>';
@@ -1963,6 +1981,72 @@
1963
1981
  }
1964
1982
  }
1965
1983
 
1984
+ // ── Application-event tab (#EVTBUS) ──────────────────────────────────────
1985
+
1986
+ /**
1987
+ * Append one live application-event frame to the rolling buffer (capped at
1988
+ * EVENT_BUF_MAX) and, when the Event tab is active, re-render it directly.
1989
+ * Unlike appendTokenDelta (single-slot, reset per stream id), events ACCUMULATE
1990
+ * — each frame is one discrete event. Rendered via textContent (event names +
1991
+ * optional metadata are app-controlled but treated as untrusted).
1992
+ * @inner
1993
+ * @param {Object} frame - The inspector#event frame `{ name, id, t, meta? }`.
1994
+ */
1995
+ function appendAppEvent(frame) {
1996
+ if (!frame || typeof frame !== 'object' || !frame.name) { return; }
1997
+ _eventBuf.push(frame);
1998
+ if (_eventBuf.length > EVENT_BUF_MAX) { _eventBuf.shift(); }
1999
+ // Live-tail directly when the tab is open — NOT via renderTab (which a data
2000
+ // snapshot would re-render). Mirrors appendTokenDelta's direct-render.
2001
+ if (activeTab() === 'events') {
2002
+ var el = qs('#tree-events');
2003
+ if (el) { el.textContent = formatEventBuffer(_eventBuf); }
2004
+ }
2005
+ }
2006
+
2007
+ /**
2008
+ * Format an array of event frames/entries as a plain-text transcript — one line
2009
+ * per event (time · name · compact metadata, present only when captureArgs is
2010
+ * enabled server-side). Rendered via textContent by the caller; never innerHTML.
2011
+ * @inner
2012
+ * @param {Object[]} arr
2013
+ * @returns {string}
2014
+ */
2015
+ function formatEventBuffer(arr) {
2016
+ if (!arr || !arr.length) { return 'No events captured.'; }
2017
+ return arr.map(function (e) {
2018
+ var ts = '';
2019
+ try { ts = new Date(e.t).toISOString().substr(11, 12); } catch (x) { ts = ''; }
2020
+ var line = (ts ? ts + ' ' : '') + (e.name || '?');
2021
+ if (e.meta && typeof e.meta === 'object') {
2022
+ var s;
2023
+ try { s = JSON.stringify(e.meta); } catch (x) { s = '[unserialisable]'; }
2024
+ line += ' ' + s;
2025
+ }
2026
+ return line;
2027
+ }).join('\n');
2028
+ }
2029
+
2030
+ /**
2031
+ * Render the Event tab pane. Prefers the rolling live buffer (events accumulate
2032
+ * across the session); falls back to the request snapshot (`user.events`) when
2033
+ * no live frames have arrived (e.g. opener-only mode without an agent stream).
2034
+ * Always textContent — event names + metadata are treated as untrusted.
2035
+ * @inner
2036
+ * @param {Element} el - The `#tree-events` pane.
2037
+ * @param {?Object[]} snapshot - `user.events`, or null.
2038
+ */
2039
+ function renderAppEvents(el, snapshot) {
2040
+ if (!el) { return; }
2041
+ if (_eventBuf.length) {
2042
+ el.textContent = formatEventBuffer(_eventBuf);
2043
+ } else if (snapshot && snapshot.length) {
2044
+ el.textContent = formatEventBuffer(snapshot);
2045
+ } else {
2046
+ el.textContent = 'No events captured.';
2047
+ }
2048
+ }
2049
+
1966
2050
  /**
1967
2051
  * Render the Data tab in raw JSON mode (pretty-printed `<pre>` block).
1968
2052
  * @inner
@@ -4105,6 +4189,11 @@
4105
4189
  try { appendTokenDelta(JSON.parse(ev.data)); } catch (e) {}
4106
4190
  });
4107
4191
 
4192
+ es.addEventListener('event', function (ev) {
4193
+ // #EVTBUS — live application-event frame (textContent-rendered).
4194
+ try { appendAppEvent(JSON.parse(ev.data)); } catch (e) {}
4195
+ });
4196
+
4108
4197
  es.addEventListener('open', function () {
4109
4198
  qs('#bm-dot').className = 'bm-dot ok';
4110
4199
  // Label stays as "Connecting…" until the first data event updates it
@@ -4221,6 +4310,9 @@
4221
4310
  } else if (frame.event === 'token') {
4222
4311
  // #AISTREAM — live AI token-stream frame (textContent-rendered).
4223
4312
  appendTokenDelta(frame.data);
4313
+ } else if (frame.event === 'event') {
4314
+ // #EVTBUS — live application-event frame (textContent-rendered).
4315
+ appendAppEvent(frame.data);
4224
4316
  }
4225
4317
  } catch (e) {}
4226
4318
  };
@@ -4351,6 +4443,11 @@
4351
4443
  try { appendTokenDelta(JSON.parse(ev.data)); } catch (e) {}
4352
4444
  });
4353
4445
 
4446
+ es.addEventListener('event', function (ev) {
4447
+ // #EVTBUS — live application-event frame (textContent-rendered).
4448
+ try { appendAppEvent(JSON.parse(ev.data)); } catch (e) {}
4449
+ });
4450
+
4354
4451
  es.onerror = function () {
4355
4452
  // EventSource reconnects automatically. Opener polling is the
4356
4453
  // primary source here, so no UI state change is needed.
@@ -5405,8 +5405,21 @@ function Routing() {
5405
5405
  continue;
5406
5406
  }
5407
5407
  let condition = params.requirements[_key];
5408
+ let conditionFlags = '';
5408
5409
  if ( /^\//.test(condition) ) {
5409
- condition = condition.substring(1, condition.lastIndexOf('/')-1);
5410
+ // Strip the surrounding `/…/<flags>` delimiters to the bare pattern body.
5411
+ // End index is lastIndexOf('/') (exclusive), NOT -1: the `-1` over-stripped
5412
+ // the final body char, so a requirement ending `…)/i` (group-close right
5413
+ // before the flag) lost its closing `)` → `new RegExp(condition)` threw
5414
+ // "Invalid regular expression: Unterminated group", 500ing every DELETE
5415
+ // dispatch that scanned it (a `…)$/i` requirement merely lost its `$` anchor).
5416
+ // Preserve the trailing `/<flags>` too (the segment after the closing `/`)
5417
+ // and pass it to new RegExp, mirroring the GET path (fitsWithRequirements):
5418
+ // a requirement written `/.../i` now matches case-insensitively on DELETE as
5419
+ // well. Previously the flags were dropped here, so DELETE matched
5420
+ // case-sensitively while GET honoured them — a silent DELETE/GET mismatch.
5421
+ conditionFlags = condition.substring(condition.lastIndexOf('/') + 1);
5422
+ condition = condition.substring(1, condition.lastIndexOf('/'));
5410
5423
  } else if ( /^validator\:\:/.test(condition) && await fitsWithRequirements(uRo[p], uRe[p], params, request, response, next) ) {
5411
5424
  ++score;
5412
5425
  continue;
@@ -5414,7 +5427,7 @@ function Routing() {
5414
5427
  if (
5415
5428
  /^:/.test(uRo[p])
5416
5429
  && typeof(condition) != 'undefined'
5417
- && new RegExp(condition).test(uRe[p])
5430
+ && new RegExp(condition, conditionFlags).test(uRe[p])
5418
5431
  ) {
5419
5432
  ++score;
5420
5433
  request[method][uRo[p].substring(1)] = uRe[p];
@@ -19784,6 +19797,30 @@ define('gina/popin', [ 'require', 'lib/domain', 'lib/merge', 'utils/events' ], f
19784
19797
  }
19785
19798
  }
19786
19799
 
19800
+ // A native <dialog> can be closed by the user agent — pressing Escape, or
19801
+ // submitting a `<form method="dialog">` inside it — which fires the element's
19802
+ // native `close` event WITHOUT going through popinClose(). popinClose() is the
19803
+ // only path that resets `isOpen`, runs popinUnbind() (clearing an AJAX popin's
19804
+ // innerHTML + removing its `loaded.<id>` listener) and restores the toolbar, so
19805
+ // a UA close otherwise leaves the reused element stale and `isOpen` stuck true.
19806
+ // Bind a one-time native `close` listener that runs the same cleanup. We listen
19807
+ // to `close` (not `cancel`): `close` fires for BOTH Escape and method="dialog";
19808
+ // `cancel` is Escape-only. De-dup: on the plugin's own close, popinClose() sets
19809
+ // isOpen=false synchronously before the queued `close` event fires, so the guard
19810
+ // below sees isOpen===false and no-ops (popinClose() also re-guards on !isOpen),
19811
+ // and popinClose()'s $el.close() on an already-closed dialog is a spec no-op so
19812
+ // there is no recursion. `_ginaCloseSyncBound` keeps it to one listener across
19813
+ // element reuse; gated on useDialogMode (non-dialog mode is a <div>, no `close`
19814
+ // event). Native addEventListener — NOT gina's addListener (the custom event bus).
19815
+ if ( self.options.useDialogMode && $el && !$el._ginaCloseSyncBound ) {
19816
+ $el._ginaCloseSyncBound = true;
19817
+ $el.addEventListener('close', function () {
19818
+ if ( $popin.isOpen ) {
19819
+ popinClose($popin.name);
19820
+ }
19821
+ });
19822
+ }
19823
+
19787
19824
  $popin.isOpen = true;
19788
19825
  // so it can be forwarded to the handler who is listening
19789
19826
  $popin.target = $el;