gina 0.3.1 → 0.3.2

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 (501) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/CONVENTIONS.md +42 -0
  3. package/README.md +8 -6
  4. package/ROADMAP.md +5 -2
  5. package/bin/cli +1 -0
  6. package/bin/gina +4 -0
  7. package/framework/v0.3.2/VERSION +1 -0
  8. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  9. package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +4 -0
  10. package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +160 -9
  11. package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +250 -7
  12. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js +532 -0
  13. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  14. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  15. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +8 -0
  16. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  17. package/framework/v0.3.2/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  18. package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/index.js +33 -13
  19. package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.js +20 -1
  20. package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.render-json.js +60 -14
  21. package/framework/v0.3.2/core/deps/swig-1.4.2/dist/swig.min.js +7 -0
  22. package/framework/{v0.3.1 → v0.3.2}/core/gna.js +35 -1
  23. package/framework/{v0.3.1 → v0.3.2}/core/server.isaac.js +30 -8
  24. package/framework/{v0.3.1 → v0.3.2}/core/server.js +50 -9
  25. package/framework/{v0.3.1 → v0.3.2}/helpers/context.js +1 -0
  26. package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/add.js +0 -1
  27. package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/start.js +11 -13
  28. package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/restart.js +10 -1
  29. package/framework/v0.3.2/lib/cmd/inspector/help.js +48 -0
  30. package/framework/v0.3.2/lib/cmd/inspector/help.txt +28 -0
  31. package/framework/v0.3.2/lib/cmd/inspector/open.js +510 -0
  32. package/framework/{v0.3.1 → v0.3.2}/lib/index.js +1 -0
  33. package/framework/{v0.3.1 → v0.3.2}/lib/model.js +27 -3
  34. package/llms.txt +6 -1
  35. package/package.json +101 -101
  36. package/schema/connectors.json +99 -12
  37. package/schema/routing.json +93 -7
  38. package/schema/watchers.json +29 -0
  39. package/script/post_install.js +5 -1
  40. package/framework/v0.3.1/VERSION +0 -1
  41. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -21544
  42. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  43. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  44. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -286
  45. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  46. package/framework/v0.3.1/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  47. /package/framework/{v0.3.1 → v0.3.2}/AUTHORS +0 -0
  48. /package/framework/{v0.3.1 → v0.3.2}/LICENSE +0 -0
  49. /package/framework/{v0.3.1 → v0.3.2}/core/asset/html/nolayout.html +0 -0
  50. /package/framework/{v0.3.1 → v0.3.2}/core/asset/html/static.html +0 -0
  51. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/android-chrome-192x192.png +0 -0
  52. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/android-chrome-512x512.png +0 -0
  53. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/apple-touch-icon.png +0 -0
  54. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/favicon-16x16.png +0 -0
  55. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/favicon-32x32.png +0 -0
  56. /package/framework/{v0.3.1 → v0.3.2}/core/asset/img/favicon.ico +0 -0
  57. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/README.md +0 -0
  58. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  59. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  60. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  61. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  62. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  63. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  64. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +0 -0
  65. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  66. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  67. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  68. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  69. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  70. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  71. /package/framework/{v0.3.1 → v0.3.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  72. /package/framework/{v0.3.1 → v0.3.2}/core/config.js +0 -0
  73. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/ai/index.js +0 -0
  74. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/ai/lib/connector.js +0 -0
  75. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/connector.js +0 -0
  76. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  77. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  78. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  79. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
  80. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/session-store.js +0 -0
  81. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  82. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  83. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  84. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/mysql/index.js +0 -0
  85. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/mysql/lib/connector.js +0 -0
  86. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/postgresql/index.js +0 -0
  87. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/postgresql/lib/connector.js +0 -0
  88. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/redis/index.js +0 -0
  89. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/redis/lib/session-store.js +0 -0
  90. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/sql-parser.js +0 -0
  91. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/sqlite/index.js +0 -0
  92. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/sqlite/lib/connector.js +0 -0
  93. /package/framework/{v0.3.1 → v0.3.2}/core/connectors/sqlite/lib/session-store.js +0 -0
  94. /package/framework/{v0.3.1 → v0.3.2}/core/content.encoding +0 -0
  95. /package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.framework.js +0 -0
  96. /package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.render-stream.js +0 -0
  97. /package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.render-swig.js +0 -0
  98. /package/framework/{v0.3.1 → v0.3.2}/core/controller/controller.render-v1.js +0 -0
  99. /package/framework/{v0.3.1 → v0.3.2}/core/controller/index.js +0 -0
  100. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/LICENSE +0 -0
  101. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/README.md +0 -0
  102. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  103. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  104. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  105. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  106. /package/framework/{v0.3.1 → v0.3.2}/core/deps/busboy-1.6.0/package.json +0 -0
  107. /package/framework/{v0.3.1 → v0.3.2}/core/deps/optimist-0.6.1/LICENSE +0 -0
  108. /package/framework/{v0.3.1 → v0.3.2}/core/deps/optimist-0.6.1/index.js +0 -0
  109. /package/framework/{v0.3.1 → v0.3.2}/core/deps/optimist-0.6.1/package.json +0 -0
  110. /package/framework/{v0.3.1 → v0.3.2}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  111. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/CONTRIBUTING.md +0 -0
  112. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/HISTORY.md +0 -0
  113. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/LICENSE +0 -0
  114. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/Makefile +0 -0
  115. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/README.md +0 -0
  116. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/bin/swig.js +0 -0
  117. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/browser/comments.js +0 -0
  118. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/browser/index.js +0 -0
  119. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/api.html +0 -0
  120. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/browser.html +0 -0
  121. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/cli.html +0 -0
  122. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/extending.html +0 -0
  123. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/filters.html +0 -0
  124. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/includes/TYPES.html +0 -0
  125. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/includes/macros.html +0 -0
  126. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/index.html +0 -0
  127. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/layout.html +0 -0
  128. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/loaders.html +0 -0
  129. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/previous.html +0 -0
  130. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs/tags.html +0 -0
  131. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/docs.json +0 -0
  132. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/index.html +0 -0
  133. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/index.json +0 -0
  134. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/js/lib/rainbow.min.js +0 -0
  135. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/js/master.js +0 -0
  136. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/layouts/html5.html +0 -0
  137. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/layouts/master.html +0 -0
  138. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/button.less +0 -0
  139. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/fork.less +0 -0
  140. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/header.less +0 -0
  141. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/layout.less +0 -0
  142. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/mixins.less +0 -0
  143. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/rainbow.less +0 -0
  144. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/reset.less +0 -0
  145. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/sidenav.less +0 -0
  146. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/swig.less +0 -0
  147. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/docs/less/variables.less +0 -0
  148. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/index.js +0 -0
  149. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/dateformatter.js +0 -0
  150. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/filters.js +0 -0
  151. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/lexer.js +0 -0
  152. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/loaders/filesystem.js +0 -0
  153. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/loaders/index.js +0 -0
  154. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/loaders/memory.js +0 -0
  155. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/parser.js +0 -0
  156. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/swig.js +0 -0
  157. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/autoescape.js +0 -0
  158. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/block.js +0 -0
  159. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/else.js +0 -0
  160. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/elseif.js +0 -0
  161. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/extends.js +0 -0
  162. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/filter.js +0 -0
  163. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/for.js +0 -0
  164. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/if.js +0 -0
  165. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/import.js +0 -0
  166. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/include.js +0 -0
  167. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/index.js +0 -0
  168. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/macro.js +0 -0
  169. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/parent.js +0 -0
  170. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/raw.js +0 -0
  171. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/set.js +0 -0
  172. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/tags/spaceless.js +0 -0
  173. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/lib/utils.js +0 -0
  174. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/package.json +0 -0
  175. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/scripts/config-lint.js +0 -0
  176. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/scripts/githooks/post-merge +0 -0
  177. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/scripts/githooks/pre-commit +0 -0
  178. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/basic.test.js +0 -0
  179. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/bin.filters.js +0 -0
  180. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/bin.locals.js +0 -0
  181. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/bin.locals.json +0 -0
  182. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/bin.tags.js +0 -0
  183. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/bin.test.js +0 -0
  184. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/custom_filter.bin.html +0 -0
  185. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/custom_tag.bin.html +0 -0
  186. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/custom_tagControls.bin.html +0 -0
  187. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/custom_varControls.bin.html +0 -0
  188. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/bin/options.js +0 -0
  189. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_1.expectation.html +0 -0
  190. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_1.test.html +0 -0
  191. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_2.expectation.html +0 -0
  192. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_2.test.html +0 -0
  193. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_base.html +0 -0
  194. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.base.html +0 -0
  195. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_4.middle.html +0 -0
  196. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_bare.html +0 -0
  197. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_base.html +0 -0
  198. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_include.html +0 -0
  199. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_layouts/extends_real_base.html +0 -0
  200. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_set.expectation.html +0 -0
  201. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_set.test.html +0 -0
  202. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.expectation.html +0 -0
  203. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_3.test.html +0 -0
  204. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.expectation.html +0 -0
  205. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/extends_tests/extends_4.test.html +0 -0
  206. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/import.expectation.html +0 -0
  207. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/import.test.html +0 -0
  208. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/include.expectation.html +0 -0
  209. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/include.test.html +0 -0
  210. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/include_bar.html +0 -0
  211. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/include_extends.expectation.html +0 -0
  212. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/include_extends.test.html +0 -0
  213. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/includes.html +0 -0
  214. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/macros.expectation.html +0 -0
  215. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/macros.html +0 -0
  216. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/macros.test.html +0 -0
  217. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/nested_blocks.expectation.html +0 -0
  218. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/nested_blocks.test.html +0 -0
  219. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/nested_blocks_parent.html +0 -0
  220. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/parent-parent.expectation.html +0 -0
  221. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/parent-parent.test.html +0 -0
  222. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/parent.expectation.html +0 -0
  223. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/parent.test.html +0 -0
  224. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/set.expectation.html +0 -0
  225. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases/set.test.html +0 -0
  226. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases-error/circular.test.html +0 -0
  227. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases-error/circular_parent.html +0 -0
  228. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases-error/extends-non-existent.test.html +0 -0
  229. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases-error/report-filename-partial.html +0 -0
  230. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/cases-error/report-filename.test.html +0 -0
  231. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/comments.test.js +0 -0
  232. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/filters.test.js +0 -0
  233. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/loaders.test.js +0 -0
  234. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/regressions.test.js +0 -0
  235. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/autoescape.test.js +0 -0
  236. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/else.test.js +0 -0
  237. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/extend.test.js +0 -0
  238. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/filter.test.js +0 -0
  239. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/for.test.js +0 -0
  240. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/if.test.js +0 -0
  241. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/import.test.js +0 -0
  242. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/include.test.js +0 -0
  243. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/macro.test.js +0 -0
  244. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/parent.test.js +0 -0
  245. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/raw.test.js +0 -0
  246. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/set.test.js +0 -0
  247. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags/spaceless.test.js +0 -0
  248. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/tags.test.js +0 -0
  249. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/templates.test.js +0 -0
  250. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/variables.test.js +0 -0
  251. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-1.4.2/tests/whitespace.test.js +0 -0
  252. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-client/swig-2.0.0.min.js +0 -0
  253. /package/framework/{v0.3.1 → v0.3.2}/core/deps/swig-client/swig.js +0 -0
  254. /package/framework/{v0.3.1 → v0.3.2}/core/dev/index.js +0 -0
  255. /package/framework/{v0.3.1 → v0.3.2}/core/dev/lib/class.js +0 -0
  256. /package/framework/{v0.3.1 → v0.3.2}/core/dev/lib/factory.js +0 -0
  257. /package/framework/{v0.3.1 → v0.3.2}/core/dev/lib/tools.js +0 -0
  258. /package/framework/{v0.3.1 → v0.3.2}/core/locales/README.md +0 -0
  259. /package/framework/{v0.3.1 → v0.3.2}/core/locales/currency.json +0 -0
  260. /package/framework/{v0.3.1 → v0.3.2}/core/locales/dist/language/en.json +0 -0
  261. /package/framework/{v0.3.1 → v0.3.2}/core/locales/dist/language/fr.json +0 -0
  262. /package/framework/{v0.3.1 → v0.3.2}/core/locales/dist/region/en.json +0 -0
  263. /package/framework/{v0.3.1 → v0.3.2}/core/locales/dist/region/fr.json +0 -0
  264. /package/framework/{v0.3.1 → v0.3.2}/core/locales/index.js +0 -0
  265. /package/framework/{v0.3.1 → v0.3.2}/core/mime.types +0 -0
  266. /package/framework/{v0.3.1 → v0.3.2}/core/model/entity.js +0 -0
  267. /package/framework/{v0.3.1 → v0.3.2}/core/model/index.js +0 -0
  268. /package/framework/{v0.3.1 → v0.3.2}/core/model/template/entityFactory.js +0 -0
  269. /package/framework/{v0.3.1 → v0.3.2}/core/model/template/index.js +0 -0
  270. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/README.md +0 -0
  271. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/index.js +0 -0
  272. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/file/README.md +0 -0
  273. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/file/build.json +0 -0
  274. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/file/package.json +0 -0
  275. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/intl/README.md +0 -0
  276. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/intl/build.json +0 -0
  277. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/intl/package.json +0 -0
  278. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/intl/src/main.js +0 -0
  279. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/storage/README.md +0 -0
  280. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/storage/build.json +0 -0
  281. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/storage/package.json +0 -0
  282. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/storage/src/main.js +0 -0
  283. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/validator/README.md +0 -0
  284. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/validator/build.json +0 -0
  285. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/validator/package.json +0 -0
  286. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
  287. /package/framework/{v0.3.1 → v0.3.2}/core/plugins/lib/validator/src/main.js +0 -0
  288. /package/framework/{v0.3.1 → v0.3.2}/core/router.js +0 -0
  289. /package/framework/{v0.3.1 → v0.3.2}/core/server.express.js +0 -0
  290. /package/framework/{v0.3.1 → v0.3.2}/core/status.codes +0 -0
  291. /package/framework/{v0.3.1 → v0.3.2}/core/template/_gitignore +0 -0
  292. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/app.json +0 -0
  293. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  294. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
  295. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
  296. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  297. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
  298. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  299. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  300. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  301. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  302. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle/index.js +0 -0
  303. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  304. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  305. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  306. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  307. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  308. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  309. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
  310. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  311. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  312. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  313. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  314. /package/framework/{v0.3.1 → v0.3.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  315. /package/framework/{v0.3.1 → v0.3.2}/core/template/command/gina.bat.tpl +0 -0
  316. /package/framework/{v0.3.1 → v0.3.2}/core/template/command/gina.tpl +0 -0
  317. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/env.json +0 -0
  318. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/manifest.json +0 -0
  319. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/package.json +0 -0
  320. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/settings.json +0 -0
  321. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/statics.json +0 -0
  322. /package/framework/{v0.3.1 → v0.3.2}/core/template/conf/templates.json +0 -0
  323. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/client/json/401.json +0 -0
  324. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/client/json/403.json +0 -0
  325. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/client/json/404.json +0 -0
  326. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/server/html/50x.html +0 -0
  327. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/server/json/500.json +0 -0
  328. /package/framework/{v0.3.1 → v0.3.2}/core/template/error/server/json/503.json +0 -0
  329. /package/framework/{v0.3.1 → v0.3.2}/core/template/extensions/logger/config.json +0 -0
  330. /package/framework/{v0.3.1 → v0.3.2}/helpers/console.js +0 -0
  331. /package/framework/{v0.3.1 → v0.3.2}/helpers/data/LICENSE +0 -0
  332. /package/framework/{v0.3.1 → v0.3.2}/helpers/data/README.md +0 -0
  333. /package/framework/{v0.3.1 → v0.3.2}/helpers/data/package.json +0 -0
  334. /package/framework/{v0.3.1 → v0.3.2}/helpers/data/src/main.js +0 -0
  335. /package/framework/{v0.3.1 → v0.3.2}/helpers/dateFormat.js +0 -0
  336. /package/framework/{v0.3.1 → v0.3.2}/helpers/index.js +0 -0
  337. /package/framework/{v0.3.1 → v0.3.2}/helpers/json/LICENSE +0 -0
  338. /package/framework/{v0.3.1 → v0.3.2}/helpers/json/README.md +0 -0
  339. /package/framework/{v0.3.1 → v0.3.2}/helpers/json/package.json +0 -0
  340. /package/framework/{v0.3.1 → v0.3.2}/helpers/json/src/main.js +0 -0
  341. /package/framework/{v0.3.1 → v0.3.2}/helpers/path.js +0 -0
  342. /package/framework/{v0.3.1 → v0.3.2}/helpers/plugins/README.md +0 -0
  343. /package/framework/{v0.3.1 → v0.3.2}/helpers/plugins/package.json +0 -0
  344. /package/framework/{v0.3.1 → v0.3.2}/helpers/plugins/src/api-error.js +0 -0
  345. /package/framework/{v0.3.1 → v0.3.2}/helpers/plugins/src/main.js +0 -0
  346. /package/framework/{v0.3.1 → v0.3.2}/helpers/prototypes.js +0 -0
  347. /package/framework/{v0.3.1 → v0.3.2}/helpers/task.js +0 -0
  348. /package/framework/{v0.3.1 → v0.3.2}/helpers/text.js +0 -0
  349. /package/framework/{v0.3.1 → v0.3.2}/lib/archiver/README.md +0 -0
  350. /package/framework/{v0.3.1 → v0.3.2}/lib/archiver/build.json +0 -0
  351. /package/framework/{v0.3.1 → v0.3.2}/lib/archiver/package.json +0 -0
  352. /package/framework/{v0.3.1 → v0.3.2}/lib/archiver/src/dep/jszip.min.js +0 -0
  353. /package/framework/{v0.3.1 → v0.3.2}/lib/archiver/src/main.js +0 -0
  354. /package/framework/{v0.3.1 → v0.3.2}/lib/async/package.json +0 -0
  355. /package/framework/{v0.3.1 → v0.3.2}/lib/async/src/main.js +0 -0
  356. /package/framework/{v0.3.1 → v0.3.2}/lib/cache/README.md +0 -0
  357. /package/framework/{v0.3.1 → v0.3.2}/lib/cache/build.json +0 -0
  358. /package/framework/{v0.3.1 → v0.3.2}/lib/cache/package.json +0 -0
  359. /package/framework/{v0.3.1 → v0.3.2}/lib/cache/src/main.js +0 -0
  360. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/aliases.json +0 -0
  361. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/arguments.json +0 -0
  362. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/build.js +0 -0
  363. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/copy.js +0 -0
  364. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/cp.js +0 -0
  365. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/help.js +0 -0
  366. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/help.txt +0 -0
  367. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/list.js +0 -0
  368. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/remove.js +0 -0
  369. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/rename.js +0 -0
  370. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/restart.js +0 -0
  371. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/rm.js +0 -0
  372. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/status.js +0 -0
  373. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/bundle/stop.js +0 -0
  374. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/cache/stats.js +0 -0
  375. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/add.js +0 -0
  376. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/get.js +0 -0
  377. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/help.js +0 -0
  378. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/help.txt +0 -0
  379. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/link-dev.js +0 -0
  380. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/list.js +0 -0
  381. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/remove.js +0 -0
  382. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/rm.js +0 -0
  383. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/set.js +0 -0
  384. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/unset.js +0 -0
  385. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/env/use.js +0 -0
  386. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/arguments.json +0 -0
  387. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/build.js +0 -0
  388. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/dot.js +0 -0
  389. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/get.js +0 -0
  390. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/help.js +0 -0
  391. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/help.txt +0 -0
  392. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/init.js +0 -0
  393. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/link-node-modules.js +0 -0
  394. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/link.js +0 -0
  395. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/msg.json +0 -0
  396. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/open.js +0 -0
  397. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/set.js +0 -0
  398. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/start.js +0 -0
  399. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/status.js +0 -0
  400. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/stop.js +0 -0
  401. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/tail.js +0 -0
  402. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/update.js +0 -0
  403. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/framework/version.js +0 -0
  404. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/gina-dev.1.md +0 -0
  405. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/gina-framework.1.md +0 -0
  406. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/gina.1.md +0 -0
  407. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/helper.js +0 -0
  408. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/index.js +0 -0
  409. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/minion/help.js +0 -0
  410. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/minion/help.txt +0 -0
  411. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/msg.json +0 -0
  412. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/help.js +0 -0
  413. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/help.txt +0 -0
  414. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/inc/scan.js +0 -0
  415. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/list.js +0 -0
  416. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/reset.js +0 -0
  417. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/port/set.js +0 -0
  418. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/add.js +0 -0
  419. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/arguments.json +0 -0
  420. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/build.js +0 -0
  421. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/help.js +0 -0
  422. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/help.txt +0 -0
  423. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/import.js +0 -0
  424. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/list.js +0 -0
  425. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/move.js +0 -0
  426. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/remove.js +0 -0
  427. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/rename.js +0 -0
  428. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/restart.js +0 -0
  429. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/rm.js +0 -0
  430. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/start.js +0 -0
  431. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/status.js +0 -0
  432. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/project/stop.js +0 -0
  433. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/protocol/help.js +0 -0
  434. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/protocol/help.txt +0 -0
  435. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/protocol/list.js +0 -0
  436. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/protocol/set.js +0 -0
  437. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/add.js +0 -0
  438. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/help.js +0 -0
  439. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/help.txt +0 -0
  440. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/link-local.js +0 -0
  441. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/link-production.js +0 -0
  442. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/list.js +0 -0
  443. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/remove.js +0 -0
  444. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/rm.js +0 -0
  445. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/scope/use.js +0 -0
  446. /package/framework/{v0.3.1 → v0.3.2}/lib/cmd/view/add.js +0 -0
  447. /package/framework/{v0.3.1 → v0.3.2}/lib/collection/README.md +0 -0
  448. /package/framework/{v0.3.1 → v0.3.2}/lib/collection/build.json +0 -0
  449. /package/framework/{v0.3.1 → v0.3.2}/lib/collection/package.json +0 -0
  450. /package/framework/{v0.3.1 → v0.3.2}/lib/collection/src/main.js +0 -0
  451. /package/framework/{v0.3.1 → v0.3.2}/lib/config.js +0 -0
  452. /package/framework/{v0.3.1 → v0.3.2}/lib/cron/README.md +0 -0
  453. /package/framework/{v0.3.1 → v0.3.2}/lib/cron/package.json +0 -0
  454. /package/framework/{v0.3.1 → v0.3.2}/lib/cron/src/main.js +0 -0
  455. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/LICENSE +0 -0
  456. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/README.md +0 -0
  457. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  458. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/dist/public_suffix_list.dat +0 -0
  459. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  460. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  461. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/package.json +0 -0
  462. /package/framework/{v0.3.1 → v0.3.2}/lib/domain/src/main.js +0 -0
  463. /package/framework/{v0.3.1 → v0.3.2}/lib/generator/index.js +0 -0
  464. /package/framework/{v0.3.1 → v0.3.2}/lib/inherits/LICENSE +0 -0
  465. /package/framework/{v0.3.1 → v0.3.2}/lib/inherits/README.md +0 -0
  466. /package/framework/{v0.3.1 → v0.3.2}/lib/inherits/package.json +0 -0
  467. /package/framework/{v0.3.1 → v0.3.2}/lib/inherits/src/main.js +0 -0
  468. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/README.md +0 -0
  469. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/package.json +0 -0
  470. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/default/index.js +0 -0
  471. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/file/index.js +0 -0
  472. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  473. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  474. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/mq/index.js +0 -0
  475. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/mq/listener.js +0 -0
  476. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/containers/mq/speaker.js +0 -0
  477. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/helper.js +0 -0
  478. /package/framework/{v0.3.1 → v0.3.2}/lib/logger/src/main.js +0 -0
  479. /package/framework/{v0.3.1 → v0.3.2}/lib/math/index.js +0 -0
  480. /package/framework/{v0.3.1 → v0.3.2}/lib/merge/README.md +0 -0
  481. /package/framework/{v0.3.1 → v0.3.2}/lib/merge/package.json +0 -0
  482. /package/framework/{v0.3.1 → v0.3.2}/lib/merge/src/main.js +0 -0
  483. /package/framework/{v0.3.1 → v0.3.2}/lib/proc.js +0 -0
  484. /package/framework/{v0.3.1 → v0.3.2}/lib/routing/README.md +0 -0
  485. /package/framework/{v0.3.1 → v0.3.2}/lib/routing/build.json +0 -0
  486. /package/framework/{v0.3.1 → v0.3.2}/lib/routing/package.json +0 -0
  487. /package/framework/{v0.3.1 → v0.3.2}/lib/routing/src/main.js +0 -0
  488. /package/framework/{v0.3.1 → v0.3.2}/lib/routing/src/radix.js +0 -0
  489. /package/framework/{v0.3.1 → v0.3.2}/lib/session-store.js +0 -0
  490. /package/framework/{v0.3.1 → v0.3.2}/lib/shell.js +0 -0
  491. /package/framework/{v0.3.1 → v0.3.2}/lib/state.js +0 -0
  492. /package/framework/{v0.3.1 → v0.3.2}/lib/swig-filters/README.md +0 -0
  493. /package/framework/{v0.3.1 → v0.3.2}/lib/swig-filters/package.json +0 -0
  494. /package/framework/{v0.3.1 → v0.3.2}/lib/swig-filters/src/main.js +0 -0
  495. /package/framework/{v0.3.1 → v0.3.2}/lib/url/README.md +0 -0
  496. /package/framework/{v0.3.1 → v0.3.2}/lib/url/index.js +0 -0
  497. /package/framework/{v0.3.1 → v0.3.2}/lib/url/routing.json +0 -0
  498. /package/framework/{v0.3.1 → v0.3.2}/lib/validator.js +0 -0
  499. /package/framework/{v0.3.1 → v0.3.2}/lib/watcher/package.json +0 -0
  500. /package/framework/{v0.3.1 → v0.3.2}/lib/watcher/src/main.js +0 -0
  501. /package/framework/{v0.3.1 → v0.3.2}/package.json +0 -0
@@ -100,6 +100,8 @@
100
100
  var TAB_LAYOUT_KEY = '__gina_inspector_tab_layout';
101
101
  /** @constant {string} localStorage key — user-defined custom tab order */
102
102
  var CUSTOM_ORDER_KEY = '__gina_inspector_tab_layout_custom';
103
+ /** @constant {string} localStorage key — hidden tabs in custom layout (JSON array of tab names) */
104
+ var HIDDEN_TABS_KEY = '__gina_inspector_tab_layout_hidden';
103
105
 
104
106
  /**
105
107
  * Tab order definitions for each layout preset.
@@ -949,6 +951,22 @@
949
951
  var keys = Object.keys(view);
950
952
  keys.sort();
951
953
 
954
+ // Empty state — no view data and no page metrics (JSON-only API)
955
+ var _emptyMetrics = true;
956
+ try {
957
+ if (source && source !== 'localStorage' && source.performance) {
958
+ _emptyMetrics = false;
959
+ }
960
+ } catch (e) {}
961
+ if (keys.length === 0 && _emptyMetrics) {
962
+ return '<div class="bm-tab-empty">'
963
+ + '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="bm-tab-empty-icon">'
964
+ + '<rect x="2" y="3" width="20" height="14" rx="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>'
965
+ + '<p>No views attached to this response</p>'
966
+ + '<span class="bm-tab-empty-hint">This tab shows DOM properties, page metrics, and template data for HTML responses.</span>'
967
+ + '</div>';
968
+ }
969
+
952
970
  var objectSections = [];
953
971
  var propKeys = {};
954
972
  var ginaPropKeys = {};
@@ -1136,6 +1154,17 @@
1136
1154
  var formKeys = Object.keys(formsData);
1137
1155
 
1138
1156
  if (pageForms.length === 0 && formKeys.length === 0) {
1157
+ // Richer empty state when no opener page exists (JSON-only API)
1158
+ var _hasOpener = false;
1159
+ try { _hasOpener = !!(source && source !== 'localStorage' && source.document); } catch (e) {}
1160
+ if (!_hasOpener) {
1161
+ return '<div class="bm-tab-empty">'
1162
+ + '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="bm-tab-empty-icon">'
1163
+ + '<path d="M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/><polyline points="14 2 14 8 20 8"/><line x1="16" y1="13" x2="8" y2="13"/><line x1="16" y1="17" x2="8" y2="17"/></svg>'
1164
+ + '<p>No forms in this response</p>'
1165
+ + '<span class="bm-tab-empty-hint">This tab shows form fields, validation state, and submitted data for HTML pages with forms.</span>'
1166
+ + '</div>';
1167
+ }
1139
1168
  return '<span class="bm-empty">No forms detected on this page</span>';
1140
1169
  }
1141
1170
 
@@ -1314,8 +1343,10 @@
1314
1343
  var order;
1315
1344
  var nav = qs('.bm-tabs');
1316
1345
  if (!nav) return;
1346
+ var hidden = [];
1317
1347
  if (layout === 'custom') {
1318
1348
  order = getCustomOrder();
1349
+ hidden = getHiddenTabs();
1319
1350
  // Only enable drag-mode when settings panel is open
1320
1351
  var _panel = qs('#bm-settings');
1321
1352
  if (_panel && !_panel.classList.contains('hidden')) {
@@ -1328,10 +1359,26 @@
1328
1359
  nav.classList.remove('bm-drag-mode');
1329
1360
  }
1330
1361
  if (!order) return;
1362
+ // Reorder visible tabs and append hidden ones at the end
1363
+ var allTabs = nav.querySelectorAll('.bm-tab');
1331
1364
  for (var i = 0; i < order.length; i++) {
1332
1365
  var btn = qs('.bm-tab[data-tab="' + order[i] + '"]');
1333
1366
  if (btn) nav.appendChild(btn);
1334
1367
  }
1368
+ // Show/hide based on hidden list
1369
+ for (var j = 0; j < allTabs.length; j++) {
1370
+ var name = allTabs[j].dataset.tab;
1371
+ if (layout === 'custom' && hidden.indexOf(name) !== -1) {
1372
+ allTabs[j].style.display = 'none';
1373
+ } else {
1374
+ allTabs[j].style.display = '';
1375
+ }
1376
+ }
1377
+ // Toggle × close buttons visibility
1378
+ var closeBtns = nav.querySelectorAll('.bm-tab-close');
1379
+ for (var c = 0; c < closeBtns.length; c++) {
1380
+ closeBtns[c].style.display = (layout === 'custom') ? '' : 'none';
1381
+ }
1335
1382
  }
1336
1383
 
1337
1384
  /**
@@ -1346,14 +1393,16 @@
1346
1393
  var raw = localStorage.getItem(CUSTOM_ORDER_KEY);
1347
1394
  if (raw) {
1348
1395
  var arr = JSON.parse(raw);
1349
- if (Array.isArray(arr) && arr.length === 6) return arr;
1396
+ // Accept arrays of 1-6 known tab names (tabs may be hidden)
1397
+ if (Array.isArray(arr) && arr.length >= 1 && arr.length <= 6) return arr;
1350
1398
  }
1351
1399
  } catch (e) {}
1352
1400
  return null;
1353
1401
  }
1354
1402
 
1355
1403
  /**
1356
- * Save the current DOM tab order as the custom layout in localStorage.
1404
+ * Save the current visible DOM tab order as the custom layout in localStorage.
1405
+ * Only saves tabs that are not hidden (display !== 'none').
1357
1406
  * @inner
1358
1407
  */
1359
1408
  function saveCustomOrder() {
@@ -1362,11 +1411,92 @@
1362
1411
  var order = [];
1363
1412
  var tabs = nav.querySelectorAll('.bm-tab');
1364
1413
  for (var i = 0; i < tabs.length; i++) {
1365
- order.push(tabs[i].dataset.tab);
1414
+ if (tabs[i].style.display !== 'none') {
1415
+ order.push(tabs[i].dataset.tab);
1416
+ }
1366
1417
  }
1367
1418
  try { localStorage.setItem(CUSTOM_ORDER_KEY, JSON.stringify(order)); } catch (e) {}
1368
1419
  }
1369
1420
 
1421
+ /**
1422
+ * Read the list of hidden tab names from localStorage.
1423
+ * @inner
1424
+ * @returns {string[]} Array of hidden tab names (empty if none)
1425
+ */
1426
+ function getHiddenTabs() {
1427
+ try {
1428
+ var raw = localStorage.getItem(HIDDEN_TABS_KEY);
1429
+ if (raw) {
1430
+ var arr = JSON.parse(raw);
1431
+ if (Array.isArray(arr)) return arr;
1432
+ }
1433
+ } catch (e) {}
1434
+ return [];
1435
+ }
1436
+
1437
+ /**
1438
+ * Save the list of hidden tab names to localStorage.
1439
+ * @inner
1440
+ * @param {string[]} hidden - Array of tab names to hide
1441
+ */
1442
+ function saveHiddenTabs(hidden) {
1443
+ try { localStorage.setItem(HIDDEN_TABS_KEY, JSON.stringify(hidden)); } catch (e) {}
1444
+ }
1445
+
1446
+ /**
1447
+ * Hide a tab in custom layout mode. Hides the tab button, persists the
1448
+ * hidden list, updates the custom order, and switches to the first
1449
+ * visible tab if the hidden tab was active.
1450
+ * @inner
1451
+ * @param {string} tabName - Tab name to hide (e.g. 'view', 'forms')
1452
+ */
1453
+ function hideTab(tabName) {
1454
+ var btn = qs('.bm-tab[data-tab="' + tabName + '"]');
1455
+ if (!btn) return;
1456
+ btn.style.display = 'none';
1457
+
1458
+ // Persist
1459
+ var hidden = getHiddenTabs();
1460
+ if (hidden.indexOf(tabName) === -1) hidden.push(tabName);
1461
+ saveHiddenTabs(hidden);
1462
+ saveCustomOrder();
1463
+ renderLayoutPreview('custom');
1464
+
1465
+ // Show the reset button (fade in)
1466
+ var resetBtn = qs('#bm-layout-reset');
1467
+ if (resetBtn) resetBtn.classList.remove('fade-out');
1468
+
1469
+ // If the hidden tab was active, switch to first visible
1470
+ if (btn.classList.contains('active')) {
1471
+ var nav = qs('.bm-tabs');
1472
+ var visible = nav ? nav.querySelectorAll('.bm-tab') : [];
1473
+ for (var i = 0; i < visible.length; i++) {
1474
+ if (visible[i].style.display !== 'none') {
1475
+ switchTab(visible[i].dataset.tab);
1476
+ return;
1477
+ }
1478
+ }
1479
+ }
1480
+ }
1481
+
1482
+ /**
1483
+ * Restore all hidden tabs in custom layout mode. Shows all tab buttons,
1484
+ * clears the hidden list from localStorage, and rebuilds the custom order
1485
+ * to include all tabs.
1486
+ * @inner
1487
+ */
1488
+ function restoreAllTabs() {
1489
+ var nav = qs('.bm-tabs');
1490
+ if (!nav) return;
1491
+ var tabs = nav.querySelectorAll('.bm-tab');
1492
+ for (var i = 0; i < tabs.length; i++) {
1493
+ tabs[i].style.display = '';
1494
+ }
1495
+ saveHiddenTabs([]);
1496
+ saveCustomOrder();
1497
+ renderLayoutPreview('custom');
1498
+ }
1499
+
1370
1500
  /**
1371
1501
  * Read the current tab order from the DOM.
1372
1502
  * @inner
@@ -1383,6 +1513,33 @@
1383
1513
  return order;
1384
1514
  }
1385
1515
 
1516
+ /**
1517
+ * Briefly animate visible tab buttons to indicate they can be dragged
1518
+ * or hidden. Applied when entering custom mode. Each tab gets a staggered
1519
+ * nudge animation (subtle horizontal wiggle).
1520
+ * @inner
1521
+ */
1522
+ function nudgeTabs() {
1523
+ var nav = qs('.bm-tabs');
1524
+ if (!nav) return;
1525
+ var tabs = nav.querySelectorAll('.bm-tab');
1526
+ for (var i = 0; i < tabs.length; i++) {
1527
+ if (tabs[i].style.display === 'none') continue;
1528
+ (function (tab, delay) {
1529
+ tab.classList.remove('bm-tab-nudge');
1530
+ // Force reflow so re-adding the class triggers the animation
1531
+ void tab.offsetWidth;
1532
+ setTimeout(function () {
1533
+ tab.classList.add('bm-tab-nudge');
1534
+ tab.addEventListener('animationend', function _h() {
1535
+ tab.classList.remove('bm-tab-nudge');
1536
+ tab.removeEventListener('animationend', _h);
1537
+ });
1538
+ }, delay);
1539
+ })(tabs[i], i * 60);
1540
+ }
1541
+ }
1542
+
1386
1543
  /**
1387
1544
  * Tab name → category color mapping for the layout preview pills.
1388
1545
  * Uses the same theme variables as the Flow tab category bars.
@@ -1425,14 +1582,31 @@
1425
1582
  ? (getCustomOrder() || getCurrentTabOrder())
1426
1583
  : TAB_LAYOUTS[layout];
1427
1584
  if (!order) { el.innerHTML = ''; return; }
1585
+ var hidden = (layout === 'custom') ? getHiddenTabs() : [];
1428
1586
  var html = '';
1587
+ // Show visible tabs, then hidden ones as dimmed
1588
+ var visibleFirst = true;
1429
1589
  for (var i = 0; i < order.length; i++) {
1430
1590
  var tab = order[i];
1431
- if (i > 0) html += '<span class="bm-lp-arrow">\u203A</span>';
1432
- html += '<span class="bm-lp-pill" style="--pill-color:' + TAB_PREVIEW_COLORS[tab] + '">'
1433
- + TAB_PREVIEW_LABELS[tab] + '</span>';
1591
+ var isHidden = hidden.indexOf(tab) !== -1;
1592
+ if (!isHidden) {
1593
+ if (!visibleFirst) html += '<span class="bm-lp-arrow">\u203A</span>';
1594
+ html += '<span class="bm-lp-pill" style="--pill-color:' + TAB_PREVIEW_COLORS[tab] + '">'
1595
+ + TAB_PREVIEW_LABELS[tab] + '</span>';
1596
+ visibleFirst = false;
1597
+ }
1598
+ }
1599
+ // Append hidden tabs as dimmed pills
1600
+ for (var h = 0; h < hidden.length; h++) {
1601
+ if (!visibleFirst) html += '<span class="bm-lp-arrow bm-lp-arrow-dim">\u203A</span>';
1602
+ html += '<span class="bm-lp-pill bm-lp-pill-hidden" style="--pill-color:' + TAB_PREVIEW_COLORS[hidden[h]] + '">'
1603
+ + TAB_PREVIEW_LABELS[hidden[h]] + '</span>';
1604
+ visibleFirst = false;
1434
1605
  }
1435
1606
  el.innerHTML = html;
1607
+ // Fade reset button in/out based on active layout
1608
+ var resetEl = qs('#bm-layout-reset');
1609
+ if (resetEl) resetEl.classList.toggle('fade-out', layout !== 'custom');
1436
1610
  }
1437
1611
 
1438
1612
  /**
@@ -1443,6 +1617,18 @@
1443
1617
  * @param {string} name - Tab name to activate
1444
1618
  */
1445
1619
  function switchTab(name) {
1620
+ // Guard: if the tab is hidden, fall back to the first visible tab
1621
+ var targetBtn = qs('.bm-tab[data-tab="' + name + '"]');
1622
+ if (targetBtn && targetBtn.style.display === 'none') {
1623
+ var nav = qs('.bm-tabs');
1624
+ var tabs = nav ? nav.querySelectorAll('.bm-tab') : [];
1625
+ for (var _fi = 0; _fi < tabs.length; _fi++) {
1626
+ if (tabs[_fi].style.display !== 'none') {
1627
+ name = tabs[_fi].dataset.tab;
1628
+ break;
1629
+ }
1630
+ }
1631
+ }
1446
1632
  qsa('.bm-tab').forEach(function (t) { t.classList.toggle('active', t.dataset.tab === name); });
1447
1633
  qsa('.bm-panel').forEach(function (p) { p.classList.toggle('active', p.id === 'tab-' + name); });
1448
1634
  if (name !== 'logs') renderTab(name);
@@ -2726,7 +2912,8 @@
2726
2912
  // Footer version
2727
2913
  var verEl = qs('#bm-footer-version');
2728
2914
  if (verEl && env['gina']) {
2729
- verEl.innerHTML = '<span class="bm-footer-brand">Gina</span> v' + env['gina'].replace(/</g, '&lt;');
2915
+ verEl.innerHTML = '<span class="bm-footer-brand">Gina</span>'
2916
+ + '<span class="bm-footer-ver">v' + env['gina'].replace(/</g, '&lt;') + '</span>';
2730
2917
  }
2731
2918
  }
2732
2919
 
@@ -3411,6 +3598,20 @@
3411
3598
  });
3412
3599
  }
3413
3600
 
3601
+ // Inject × close buttons into each tab (hidden by default, shown in custom mode)
3602
+ qsa('.bm-tab').forEach(function (tab) {
3603
+ var closeBtn = document.createElement('span');
3604
+ closeBtn.className = 'bm-tab-close';
3605
+ closeBtn.innerHTML = '\u00d7';
3606
+ closeBtn.title = 'Hide this tab';
3607
+ closeBtn.style.display = 'none';
3608
+ closeBtn.addEventListener('click', function (e) {
3609
+ e.stopPropagation(); // Don't trigger tab switch
3610
+ hideTab(tab.dataset.tab);
3611
+ });
3612
+ tab.appendChild(closeBtn);
3613
+ });
3614
+
3414
3615
  // Tab layout segmented control — restore persisted layout, wire click
3415
3616
  var layoutBtns = qsa('.bm-layout-btn');
3416
3617
  if (layoutBtns.length) {
@@ -3436,10 +3637,18 @@
3436
3637
  applyTabLayout(layout);
3437
3638
  renderLayoutPreview(layout);
3438
3639
  try { localStorage.setItem(TAB_LAYOUT_KEY, layout); } catch (e) {}
3640
+ // Animate tabs when entering custom mode
3641
+ if (layout === 'custom') nudgeTabs();
3439
3642
  });
3440
3643
  });
3441
3644
  }
3442
3645
 
3646
+ // Reset link — restore all hidden tabs in custom mode
3647
+ var resetBtn = qs('#bm-layout-reset');
3648
+ if (resetBtn) {
3649
+ resetBtn.addEventListener('click', function () { restoreAllTabs(); });
3650
+ }
3651
+
3443
3652
  // ── Tab drag-to-reorder (custom layout mode) ──────────────────────
3444
3653
  setupTabDrag();
3445
3654
  }
@@ -3595,6 +3804,39 @@
3595
3804
  });
3596
3805
  }
3597
3806
 
3807
+ /**
3808
+ * Wire the copy button on the environment info panel. Copies all
3809
+ * key-value pairs as plain text (one per line, "key: value" format).
3810
+ * Shows a brief "Copied" visual feedback on the button.
3811
+ * @inner
3812
+ */
3813
+ function setupEnvCopy() {
3814
+ var btn = qs('#bm-env-copy');
3815
+ if (!btn) return;
3816
+ btn.addEventListener('click', function () {
3817
+ if (!ginaData || !ginaData.user || !ginaData.user.environment) return;
3818
+ var env = ginaData.user.environment;
3819
+ var skip = { routing: 1, reverseRouting: 1, forms: 1 };
3820
+ var lines = [];
3821
+ var keys = Object.keys(env);
3822
+ for (var i = 0; i < keys.length; i++) {
3823
+ var k = keys[i];
3824
+ if (skip[k]) continue;
3825
+ var v = env[k];
3826
+ if (typeof v === 'object' && v !== null) continue;
3827
+ lines.push(k + ': ' + String(v));
3828
+ }
3829
+ var text = lines.join('\n');
3830
+ if (navigator.clipboard && navigator.clipboard.writeText) {
3831
+ navigator.clipboard.writeText(text).catch(function () { fallbackCopy(text); });
3832
+ } else {
3833
+ fallbackCopy(text);
3834
+ }
3835
+ btn.classList.add('copied');
3836
+ setTimeout(function () { btn.classList.remove('copied'); }, 900);
3837
+ });
3838
+ }
3839
+
3598
3840
  /**
3599
3841
  * Set up drag-to-resize on the Flow tab label column.
3600
3842
  * A vertical handle between the label and the waterfall track lets
@@ -4084,6 +4326,7 @@
4084
4326
 
4085
4327
  setupSettings();
4086
4328
  setupEnvResize();
4329
+ setupEnvCopy();
4087
4330
  setupFlowResize();
4088
4331
  setupScrollToTop();
4089
4332