gina 0.3.6 → 0.3.7-alpha.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 (403) hide show
  1. package/.github/workflows/security.yml +6 -6
  2. package/.github/workflows/test.yml +17 -0
  3. package/AUTHORS +1 -1
  4. package/CHANGELOG.md +6 -6
  5. package/CONTRIBUTING.md +1 -1
  6. package/CONVENTIONS.md +52 -0
  7. package/GOVERNANCE.md +1 -1
  8. package/LICENSE +2 -0
  9. package/README.md +8 -6
  10. package/ROADMAP.md +4 -2
  11. package/bin/cli +13 -0
  12. package/framework/{v0.3.6 → v0.3.7-alpha.2}/AUTHORS +1 -1
  13. package/framework/{v0.3.6/lib/inherits → v0.3.7-alpha.2}/LICENSE +2 -0
  14. package/framework/v0.3.7-alpha.2/VERSION +1 -0
  15. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +46 -10
  16. package/framework/v0.3.7-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  17. package/framework/v0.3.7-alpha.2/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  18. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/index.html +4 -1
  19. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +12 -2
  20. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +341 -8
  21. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/config.js +12 -2
  22. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.js +90 -24
  23. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-json.js +17 -1
  24. package/framework/v0.3.7-alpha.2/core/controller/controller.render-nunjucks.js +580 -0
  25. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-swig.js +31 -0
  26. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/gna.js +476 -0
  27. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/package.json +1 -1
  28. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/package.json +1 -1
  29. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/package.json +1 -1
  30. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.isaac.js +70 -7
  31. package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.js +107 -9
  32. package/framework/v0.3.7-alpha.2/lib/cmd/bundle/arguments.json +17 -0
  33. package/framework/v0.3.7-alpha.2/lib/cmd/bundle/help.txt +191 -0
  34. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/list.js +125 -4
  35. package/framework/v0.3.7-alpha.2/lib/cmd/bundle/mcp-start.js +551 -0
  36. package/framework/v0.3.7-alpha.2/lib/cmd/bundle/mcp.js +460 -0
  37. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/openapi.js +12 -162
  38. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/start.js +8 -1
  39. package/framework/v0.3.7-alpha.2/lib/cmd/connector/add.js +646 -0
  40. package/framework/v0.3.7-alpha.2/lib/cmd/connector/arguments.json +20 -0
  41. package/framework/v0.3.7-alpha.2/lib/cmd/connector/help.js +46 -0
  42. package/framework/v0.3.7-alpha.2/lib/cmd/connector/help.txt +216 -0
  43. package/framework/v0.3.7-alpha.2/lib/cmd/connector/list.js +624 -0
  44. package/framework/v0.3.7-alpha.2/lib/cmd/connector/migrate.js +515 -0
  45. package/framework/v0.3.7-alpha.2/lib/cmd/connector/remove.js +522 -0
  46. package/framework/v0.3.7-alpha.2/lib/cmd/connector/rm.js +6 -0
  47. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/init.js +5 -1
  48. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina.1.md +2 -0
  49. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/helper.js +6 -1
  50. package/framework/v0.3.7-alpha.2/lib/cmd/inspector/help.txt +62 -0
  51. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/inspector/open.js +149 -9
  52. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/add.js +4 -1
  53. package/framework/v0.3.7-alpha.2/lib/cmd/service/help.js +46 -0
  54. package/framework/v0.3.7-alpha.2/lib/cmd/service/help.txt +31 -0
  55. package/framework/v0.3.7-alpha.2/lib/cmd/service/list.js +230 -0
  56. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/index.js +24 -0
  57. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inspector-redact/src/main.js +54 -15
  58. package/framework/v0.3.7-alpha.2/lib/mcp-dispatch/package.json +17 -0
  59. package/framework/v0.3.7-alpha.2/lib/mcp-dispatch/src/main.js +415 -0
  60. package/framework/v0.3.7-alpha.2/lib/mcp-http/package.json +17 -0
  61. package/framework/v0.3.7-alpha.2/lib/mcp-http/src/main.js +586 -0
  62. package/framework/v0.3.7-alpha.2/lib/mcp-server/package.json +17 -0
  63. package/framework/v0.3.7-alpha.2/lib/mcp-server/src/main.js +608 -0
  64. package/framework/v0.3.7-alpha.2/lib/nunjucks-resolver/package.json +17 -0
  65. package/framework/v0.3.7-alpha.2/lib/nunjucks-resolver/src/main.js +425 -0
  66. package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/proc.js +53 -2
  67. package/framework/v0.3.7-alpha.2/lib/routing-introspect/package.json +17 -0
  68. package/framework/v0.3.7-alpha.2/lib/routing-introspect/src/main.js +301 -0
  69. package/framework/v0.3.7-alpha.2/lib/swig-resolver/package.json +17 -0
  70. package/framework/v0.3.7-alpha.2/lib/swig-resolver/src/main.js +545 -0
  71. package/gna.js +34 -13
  72. package/llms.txt +119 -9
  73. package/package.json +6 -4
  74. package/resources/package.json.template +1 -1
  75. package/schema/connectors.json +5 -0
  76. package/schema/settings.json +48 -0
  77. package/script/check_changie_entries.js +247 -0
  78. package/script/{check_no_claude_leak.js → check_no_local_leak.js} +19 -9
  79. package/script/generate_gna_types.js +564 -0
  80. package/types/gna.d.ts +130 -4
  81. package/utils/helper.js +6 -3
  82. package/framework/v0.3.6/VERSION +0 -1
  83. package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
  84. package/framework/v0.3.6/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
  85. package/framework/v0.3.6/core/deps/swig-client/swig-2.0.0.min.js +0 -19
  86. package/framework/v0.3.6/core/deps/swig-client/swig.js +0 -5114
  87. package/framework/v0.3.6/lib/cmd/bundle/arguments.json +0 -10
  88. package/framework/v0.3.6/lib/cmd/bundle/help.txt +0 -107
  89. package/framework/v0.3.6/lib/cmd/inspector/help.txt +0 -28
  90. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/html/nolayout.html +0 -0
  91. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/html/static.html +0 -0
  92. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/android-chrome-192x192.png +0 -0
  93. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/android-chrome-512x512.png +0 -0
  94. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/apple-touch-icon.png +0 -0
  95. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon-16x16.png +0 -0
  96. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon-32x32.png +0 -0
  97. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/img/favicon.ico +0 -0
  98. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/README.md +0 -0
  99. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
  100. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
  101. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
  102. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
  103. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
  104. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
  105. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html +0 -0
  106. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.br +0 -0
  107. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/html/toolbar.html.gz +0 -0
  108. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
  109. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
  110. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
  111. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
  112. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
  113. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
  114. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
  115. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
  116. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
  117. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/ai/index.js +0 -0
  118. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/ai/lib/connector.js +0 -0
  119. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/index.js +0 -0
  120. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.js +0 -0
  121. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v2.js +0 -0
  122. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v3.js +0 -0
  123. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/connector.v4.js +0 -0
  124. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/n1ql.js +0 -0
  125. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.js +0 -0
  126. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v2.js +0 -0
  127. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
  128. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
  129. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/mysql/index.js +0 -0
  130. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/mysql/lib/connector.js +0 -0
  131. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/postgresql/index.js +0 -0
  132. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/postgresql/lib/connector.js +0 -0
  133. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/redis/index.js +0 -0
  134. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/redis/lib/session-store.js +0 -0
  135. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sql-parser.js +0 -0
  136. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/index.js +0 -0
  137. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/lib/connector.js +0 -0
  138. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/connectors/sqlite/lib/session-store.js +0 -0
  139. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/content.encoding +0 -0
  140. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.framework.js +0 -0
  141. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-stream.js +0 -0
  142. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/controller.render-v1.js +0 -0
  143. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/controller/index.js +0 -0
  144. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/LICENSE +0 -0
  145. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/README.md +0 -0
  146. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/index.js +0 -0
  147. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
  148. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
  149. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
  150. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/busboy-1.6.0/package.json +0 -0
  151. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/LICENSE +0 -0
  152. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/index.js +0 -0
  153. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/package.json +0 -0
  154. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/optimist-0.6.1/readme.markdown +0 -0
  155. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
  156. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
  157. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/deps/streamsearch-1.1.0/package.json +0 -0
  158. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/index.js +0 -0
  159. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/class.js +0 -0
  160. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/factory.js +0 -0
  161. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/dev/lib/tools.js +0 -0
  162. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/README.md +0 -0
  163. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/currency.json +0 -0
  164. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/language/en.json +0 -0
  165. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/language/fr.json +0 -0
  166. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/region/en.json +0 -0
  167. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/dist/region/fr.json +0 -0
  168. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/locales/index.js +0 -0
  169. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/mime.types +0 -0
  170. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/entity.js +0 -0
  171. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/index.js +0 -0
  172. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/template/entityFactory.js +0 -0
  173. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/model/template/index.js +0 -0
  174. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/README.md +0 -0
  175. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/index.js +0 -0
  176. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/README.md +0 -0
  177. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/file/build.json +0 -0
  178. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/README.md +0 -0
  179. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/build.json +0 -0
  180. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/intl/src/main.js +0 -0
  181. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/README.md +0 -0
  182. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/build.json +0 -0
  183. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/package.json +0 -0
  184. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/storage/src/main.js +0 -0
  185. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/README.md +0 -0
  186. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/build.json +0 -0
  187. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/src/form-validator.js +0 -0
  188. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/plugins/lib/validator/src/main.js +0 -0
  189. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/router.js +0 -0
  190. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/server.express.js +0 -0
  191. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/status.codes +0 -0
  192. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/_gitignore +0 -0
  193. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/app.json +0 -0
  194. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/connectors.json +0 -0
  195. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/routing.json +0 -0
  196. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/settings.json +0 -0
  197. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
  198. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/templates.json +0 -0
  199. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/config/watchers.json +0 -0
  200. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
  201. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
  202. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
  203. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle/index.js +0 -0
  204. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
  205. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/default.css +0 -0
  206. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/home.css +0 -0
  207. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
  208. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
  209. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
  210. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_public/readme.md +0 -0
  211. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
  212. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
  213. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
  214. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
  215. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
  216. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/command/gina.bat.tpl +0 -0
  217. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/command/gina.tpl +0 -0
  218. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/env.json +0 -0
  219. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/manifest.json +0 -0
  220. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/package.json +0 -0
  221. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/settings.json +0 -0
  222. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/statics.json +0 -0
  223. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/conf/templates.json +0 -0
  224. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/401.json +0 -0
  225. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/403.json +0 -0
  226. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/client/json/404.json +0 -0
  227. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/html/50x.html +0 -0
  228. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/json/500.json +0 -0
  229. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/error/server/json/503.json +0 -0
  230. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/core/template/extensions/logger/config.json +0 -0
  231. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/console.js +0 -0
  232. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/context.js +0 -0
  233. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/LICENSE +0 -0
  234. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/README.md +0 -0
  235. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/package.json +0 -0
  236. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/data/src/main.js +0 -0
  237. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/dateFormat.js +0 -0
  238. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/index.js +0 -0
  239. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/LICENSE +0 -0
  240. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/README.md +0 -0
  241. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/package.json +0 -0
  242. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/json/src/main.js +0 -0
  243. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/path.js +0 -0
  244. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/README.md +0 -0
  245. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/package.json +0 -0
  246. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/src/api-error.js +0 -0
  247. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/plugins/src/main.js +0 -0
  248. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/prototypes.js +0 -0
  249. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/task.js +0 -0
  250. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/helpers/text.js +0 -0
  251. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/README.md +0 -0
  252. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/build.json +0 -0
  253. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/package.json +0 -0
  254. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/src/dep/jszip.min.js +0 -0
  255. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/archiver/src/main.js +0 -0
  256. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/async/package.json +0 -0
  257. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/async/src/main.js +0 -0
  258. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/README.md +0 -0
  259. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/build.json +0 -0
  260. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/package.json +0 -0
  261. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cache/src/main.js +0 -0
  262. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/aliases.json +0 -0
  263. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/add.js +0 -0
  264. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/build.js +0 -0
  265. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/copy.js +0 -0
  266. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/cp.js +0 -0
  267. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/help.js +0 -0
  268. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/oas.js +0 -0
  269. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/remove.js +0 -0
  270. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/rename.js +0 -0
  271. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/restart.js +0 -0
  272. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/rm.js +0 -0
  273. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/status.js +0 -0
  274. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/bundle/stop.js +0 -0
  275. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/cache/stats.js +0 -0
  276. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/add.js +0 -0
  277. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/get.js +0 -0
  278. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/help.js +0 -0
  279. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/help.txt +0 -0
  280. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/link-dev.js +0 -0
  281. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/list.js +0 -0
  282. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/remove.js +0 -0
  283. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/rm.js +0 -0
  284. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/set.js +0 -0
  285. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/unset.js +0 -0
  286. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/env/use.js +0 -0
  287. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/arguments.json +0 -0
  288. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/build.js +0 -0
  289. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/dot.js +0 -0
  290. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/get.js +0 -0
  291. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/help.js +0 -0
  292. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/help.txt +0 -0
  293. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/link-node-modules.js +0 -0
  294. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/link.js +0 -0
  295. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/msg.json +0 -0
  296. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/open.js +0 -0
  297. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/restart.js +0 -0
  298. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/set.js +0 -0
  299. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/start.js +0 -0
  300. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/status.js +0 -0
  301. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/stop.js +0 -0
  302. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/tail.js +0 -0
  303. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/update.js +0 -0
  304. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/framework/version.js +0 -0
  305. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina-dev.1.md +0 -0
  306. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/gina-framework.1.md +0 -0
  307. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/index.js +0 -0
  308. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/inspector/help.js +0 -0
  309. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/minion/help.js +0 -0
  310. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/minion/help.txt +0 -0
  311. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/msg.json +0 -0
  312. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/help.js +0 -0
  313. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/help.txt +0 -0
  314. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/inc/scan.js +0 -0
  315. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/list.js +0 -0
  316. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/reset.js +0 -0
  317. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/port/set.js +0 -0
  318. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/arguments.json +0 -0
  319. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/build.js +0 -0
  320. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/help.js +0 -0
  321. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/help.txt +0 -0
  322. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/import.js +0 -0
  323. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/list.js +0 -0
  324. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/move.js +0 -0
  325. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/remove.js +0 -0
  326. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/rename.js +0 -0
  327. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/restart.js +0 -0
  328. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/rm.js +0 -0
  329. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/start.js +0 -0
  330. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/status.js +0 -0
  331. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/project/stop.js +0 -0
  332. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/help.js +0 -0
  333. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/help.txt +0 -0
  334. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/list.js +0 -0
  335. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/protocol/set.js +0 -0
  336. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/add.js +0 -0
  337. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/help.js +0 -0
  338. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/help.txt +0 -0
  339. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/link-local.js +0 -0
  340. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/link-production.js +0 -0
  341. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/list.js +0 -0
  342. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/remove.js +0 -0
  343. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/rm.js +0 -0
  344. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/scope/use.js +0 -0
  345. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cmd/view/add.js +0 -0
  346. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/README.md +0 -0
  347. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/build.json +0 -0
  348. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/package.json +0 -0
  349. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/collection/src/main.js +0 -0
  350. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/config.js +0 -0
  351. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/README.md +0 -0
  352. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/package.json +0 -0
  353. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/cron/src/main.js +0 -0
  354. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/LICENSE +0 -0
  355. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/README.md +0 -0
  356. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/2025-03-14_13-41-20_UTC.dat +0 -0
  357. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat +0 -0
  358. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat.br +0 -0
  359. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/dist/public_suffix_list.dat.gz +0 -0
  360. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/package.json +0 -0
  361. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/domain/src/main.js +0 -0
  362. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/generator/index.js +0 -0
  363. /package/framework/{v0.3.6 → v0.3.7-alpha.2/lib/inherits}/LICENSE +0 -0
  364. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/README.md +0 -0
  365. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/package.json +0 -0
  366. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inherits/src/main.js +0 -0
  367. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/inspector-redact/package.json +0 -0
  368. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/README.md +0 -0
  369. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/package.json +0 -0
  370. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/default/index.js +0 -0
  371. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/index.js +0 -0
  372. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
  373. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
  374. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/index.js +0 -0
  375. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/listener.js +0 -0
  376. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/containers/mq/speaker.js +0 -0
  377. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/helper.js +0 -0
  378. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/logger/src/main.js +0 -0
  379. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/math/index.js +0 -0
  380. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/README.md +0 -0
  381. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/package.json +0 -0
  382. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/merge/src/main.js +0 -0
  383. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/model.js +0 -0
  384. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/README.md +0 -0
  385. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/build.json +0 -0
  386. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/package.json +0 -0
  387. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/src/main.js +0 -0
  388. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/routing/src/radix.js +0 -0
  389. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/session-store.js +0 -0
  390. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/shell.js +0 -0
  391. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/state.js +0 -0
  392. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/README.md +0 -0
  393. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/package.json +0 -0
  394. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/swig-filters/src/main.js +0 -0
  395. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/README.md +0 -0
  396. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/index.js +0 -0
  397. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/url/routing.json +0 -0
  398. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/uuid/package.json +0 -0
  399. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/uuid/src/main.js +0 -0
  400. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/validator.js +0 -0
  401. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/watcher/package.json +0 -0
  402. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/lib/watcher/src/main.js +0 -0
  403. /package/framework/{v0.3.6 → v0.3.7-alpha.2}/package.json +0 -0
@@ -7,8 +7,8 @@ on:
7
7
  branches: [develop, master]
8
8
 
9
9
  jobs:
10
- claude-leak-check:
11
- name: Claude-leak scan
10
+ local-leak-check:
11
+ name: Local-tool leak scan
12
12
  runs-on: ubuntu-latest
13
13
 
14
14
  steps:
@@ -16,17 +16,17 @@ jobs:
16
16
 
17
17
  # #S6 — Backs up the local pre-commit hook (#S5) and the publish-boundary
18
18
  # gate in prepare_version.js (#S3). Fails the build if any tracked path
19
- # matches (^|/)(CLAUDE\.md|\.claude[a-z]*). Also retroactively catches
19
+ # matches local-tool configuration paths. Also retroactively catches
20
20
  # leaks that landed before the active defenses were wired.
21
- - name: Scan tracked files for Claude-related paths
21
+ - name: Scan tracked files for local-tool paths
22
22
  run: |
23
23
  matches=$(git ls-files | grep -iE '(^|/)(CLAUDE\.md|\.claude[a-z]*)' || true)
24
24
  if [ -n "$matches" ]; then
25
- echo "::error::Claude-related paths detected in git index:"
25
+ echo "::error::local-tool paths detected in git index:"
26
26
  echo "$matches" | sed 's/^/ - /'
27
27
  echo ""
28
28
  echo "These paths must never be tracked. Remove with: git rm --cached <path>"
29
29
  echo "If pushed already, scrub history with git filter-repo."
30
30
  exit 1
31
31
  fi
32
- echo "OK: no Claude-related paths in git index."
32
+ echo "OK: no local-tool paths in git index."
@@ -29,6 +29,23 @@ jobs:
29
29
  npm install --ignore-scripts
30
30
  ln -sf $(pwd) node_modules/gina
31
31
 
32
+ - name: Prepare framework dependencies
33
+ run: |
34
+ VERSION=$(node -p "require('./package.json').version")
35
+ FW_DIR="framework/v${VERSION}"
36
+ if [ ! -f "${FW_DIR}/package.json" ]; then
37
+ cat > "${FW_DIR}/package.json" <<EOF
38
+ {
39
+ "name": "gina-framework",
40
+ "version": "${VERSION}",
41
+ "dependencies": {
42
+ "@rhinostone/swig": "^1.6.0"
43
+ }
44
+ }
45
+ EOF
46
+ fi
47
+ (cd "${FW_DIR}" && npm install --ignore-scripts)
48
+
32
49
  - name: Run tests
33
50
  run: |
34
51
  node --test \
package/AUTHORS CHANGED
@@ -1,6 +1,6 @@
1
1
  # Authors (sorted alphabetically)
2
2
 
3
- John Doe <fabrice.delaneau@gina.io>
3
+ Fabrice DELANEAU <fabrice.delaneau@gina.io>
4
4
  Martin Luther ETOUMAN <martin-luther.etouman@gina.io>
5
5
 
6
6
  # Contributors (sorted alphabetically)
package/CHANGELOG.md CHANGED
@@ -15,10 +15,10 @@ and is generated by [Changie](https://github.com/miniscruff/changie).
15
15
  * Surfacing the real cause when `prepare_version.js` is run against a stale `~/.gina/<release>/settings.json` `dir` field. Publish now fails fast with an actionable message instead of wedging at `pushChangesToGitIfNeeded` with a misleading "No branch selected" error.
16
16
  * Preventing CORS preflight failure when a bundle's env.json `access-control-allow-headers` list omits a header the client actually sends. `completeHeaders()` no longer overwrites the echo that `checkPreflightRequest()` sets from the incoming `access-control-request-headers` (#B13).
17
17
  ### Security
18
- * Added pre-commit hook (.githooks/pre-commit) that blocks Claude-related paths (CLAUDE.md, .claude*) from entering git history. post_install.js installs core.hooksPath=.githooks for contributor clones only (gated on .git presence in gina repo root). #S5 follow-up to #S3.
19
- * Added GitHub Actions workflow (.github/workflows/security.yml) that greps the git index on every push/PR to develop and master for Claude-related paths (CLAUDE.md, .claude*). Fails the build if any are tracked. Backs up the local pre-commit hook (#S5) and publish-boundary gate (#S3). #S6 follow-up to #S3.
20
- * Added private-token leak gate (script/check_no_claude_leak.js) wired into the npm prepack hook and the prepare_version.js self.* chain before any git add --all. Fails the publish if the tarball listing contains Claude-related paths OR if pack contents contain private-token patterns (phone, private email, private address, private domain, co-author legal name). #G1 follow-up to #S3/#S4.
21
- * Added opt-in pre-commit hook (resources/git-hooks/pre-commit) that blocks commits authored under a private-domain git identity (.local hostnames, internal domains). Contributors install it once via cp resources/git-hooks/pre-commit .git/hooks/pre-commit. Complements the CI-side Claude-path guard (#S5/#S6). #G5.
18
+ * Added pre-commit hook (.githooks/pre-commit) that blocks local-tool configuration paths from entering git history. post_install.js installs core.hooksPath=.githooks for contributor clones only (gated on .git presence in gina repo root). #S5 follow-up to #S3.
19
+ * Added GitHub Actions workflow (.github/workflows/security.yml) that greps the git index on every push/PR to develop and master for local-tool configuration paths. Fails the build if any are tracked. Backs up the local pre-commit hook (#S5) and publish-boundary gate (#S3). #S6 follow-up to #S3.
20
+ * Added private-token leak gate (script/check_no_local_leak.js) wired into the npm prepack hook and the prepare_version.js self.* chain before any git add --all. Fails the publish if the tarball listing contains local-tool configuration paths OR if pack contents contain private-token patterns (phone, private email, private address, private domain, co-author legal name). #G1 follow-up to #S3/#S4.
21
+ * Added opt-in pre-commit hook (resources/git-hooks/pre-commit) that blocks commits authored under a private-domain git identity (.local hostnames, internal domains). Contributors install it once via cp resources/git-hooks/pre-commit .git/hooks/pre-commit. Complements the CI-side local-tool guard (#S5/#S6). #G5.
22
22
  * Redacting secret-looking fields from the dev-mode Inspector feed before any sink (window.__ginaData, localStorage.__ginaData, /_gina/agent SSE, engine.io push, ginaToolbar forms/XHR overlays). New lib/inspector-redact deep-clones the Inspector payload and replaces values whose keys match the default regex (password, pwd, secret, token, apikey, cvv, ssn, authorization, credentials, private_key) with [redacted]. Two complementary carve-outs preserve validation metadata: (1) NON_SECRET_SUFFIX — keys ending in rule/rules/policy/policies/validator/config/configuration/settings/requirements/strength/constraint/options/schema/definition/spec pass through untouched (e.g. passwordRule, passwordPolicy describe form rules, not user input); (2) primitive-only redaction — when a matched secret key holds an object or array, the walker recurses into it instead of replacing it, because such values are always metadata (e.g. rules.account[password] = {isRequired: true, isString: 7} — an HTML form field name under a rules: section). Nested primitive secrets inside preserved objects are still caught on recursion. Client-side shim in statusbar.html mirrors both carve-outs and additionally redacts any DOM input whose type matches configured types (default: password). Configurable via settings.json inspector.redact.{patterns,types,replacement}. Dev-mode only — the actual HTTP response body is never touched. #R7.
23
23
 
24
24
  ## 0.3.5 - 2026-04-13
@@ -167,7 +167,7 @@ Internal version bump — no user-facing changes. Repository URLs updated from R
167
167
  * Added GitHub Actions CI pipeline — runs the full test suite (494+ tests) on Node.js 18, 20, and 22 on every push and PR to `develop` and `master` (#A1)
168
168
  * Stable release now auto-tags, merges to master, and publishes the next alpha to npm
169
169
  * SQLite ORM connector v2: entity wiring + SQL method generation from .sql files, Option-B Promise/.onComplete() pattern, connector.js (WAL, FK, synchronous open), 56 unit tests
170
- * Added llms.txt — LLM-optimised framework reference for Cursor, Copilot, Claude.ai
170
+ * Added llms.txt — machine-readable framework reference following the llms.txt standard for IDE coding assistants
171
171
  * Added peerDependencies (all optional) for connector client libraries: couchbase, ioredis, mysql2, pg, mongodb, @scylladb/scylla-driver
172
172
  * Added GitHub issue templates (bug_report, feature_request) and PR template
173
173
  * SQLite state storage for ~/.gina/ config files (CN2 v3): lib/state.js StateStore routes all state-file writes through node:sqlite (DatabaseSync) for atomic writes and concurrent access safety; JSON sidecars kept for backwards-compat read paths
@@ -324,4 +324,4 @@ Internal version bump — no user-facing changes. Repository URLs updated from R
324
324
  ### Security
325
325
  * Fixed directory traversal vulnerability (CVE-2023-25345) in the swig template engine: a malicious template using `{% extends %}` or a path starting with `./`, `/`, or `\` could read arbitrary files outside the template root.
326
326
  * Removed dead framework version v0.1.1-alpha.1 from the repository. Its package.json declared sanitize-html ^2.5.0 (CVE-2021-26539, CVE-2021-26540 — XSS, high severity) and busboy ^0.2.14 (dicer ReDoS). Neither version nor its dependencies were in use.
327
- * Removed internal development files from the npm package. The published tarball no longer includes .env, CLAUDE.md, .claude/ (internal notes), .changes/ (changie entries), .changie.yaml, services/ (WIP bundles), vendor benchmark and CI files, library example and test files, locale build sources, and stray backup files. Previously .npmignore did not cover these paths.
327
+ * Removed internal development files from the npm package. The published tarball no longer includes .env, local IDE and tooling configuration files, .changes/ (changie entries), .changie.yaml, services/ (WIP bundles), vendor benchmark and CI files, library example and test files, locale build sources, and stray backup files. Previously .npmignore did not cover these paths.
package/CONTRIBUTING.md CHANGED
@@ -223,4 +223,4 @@ Open a GitHub issue describing the use case **before** writing code. Features th
223
223
  | Name | Role | Profile |
224
224
  | --- | --- | --- |
225
225
  | Martin Luther | Lead maintainer | [rhinostone.com](https://rhinostone.com) |
226
- | John Doe | Co-author | [fdelaneau.com](https://fdelaneau.com) |
226
+ | Fabrice DELANEAU | Co-author | [fdelaneau.com](https://fdelaneau.com) |
package/CONVENTIONS.md CHANGED
@@ -542,6 +542,40 @@ var bundles = [
542
542
 
543
543
  ---
544
544
 
545
+ ## 18. CLI Command Conventions
546
+
547
+ ### Scope grammar — positional-absence, not flags
548
+
549
+ Gina CLI commands that apply to either a single bundle or the whole project use positional-absence to signal scope — **never** a flag like `--scope=bundle` or `--shared`:
550
+
551
+ | Command form | Scope |
552
+ |---|---|
553
+ | `gina <group>:<action> <bundle> @<project>` | Bundle-only |
554
+ | `gina <group>:<action> @<project>` | Project-wide (all bundles + any `shared/config/` overlay) |
555
+
556
+ Precedents: `bundle:list`, `service:list`, `inspector:open`, `connector:list` / `add` / `rm` / `migrate` (#CN10).
557
+
558
+ **Why no `--scope`:** the word `scope` is reserved in gina for data isolation (`local` / `beta` / `production` / `testing`) — mixing CLI-scope meaning into the same word is ambiguous.
559
+
560
+ **Why no `--shared`:** positional-absence is shorter, consistent with the existing grammar, and doesn't invent a new flag surface. If a command needs to address the `shared/config/` file specifically (vs. "all bundles"), document the semantics on that command instead of adding a flag.
561
+
562
+ **Rule:** when a new CLI command needs a bundle-or-project distinction, follow the `[<bundle>] @<project>` pattern. Do not reintroduce flag-based scope selection.
563
+
564
+ ### Reserved CLI flags — `--port` and `--version`
565
+
566
+ Two flag names are reserved by the framework's global CLI parser and must **not** be used as subcommand-specific flags:
567
+
568
+ | Reserved flag | Framework meaning |
569
+ |---|---|
570
+ | `--port` | Runtime bundle port (consumed by `bundle:start` and related runtime commands) |
571
+ | `--version` | Global gina version request (handled before subcommand dispatch) |
572
+
573
+ **If a subcommand genuinely needs one of these semantics for a different purpose, rename with a qualified prefix.** Precedent set by #CN10 session 2 (`connector:add`): `--connector-port=` for the connector-entry port, `--driver-version=` for the npm driver version range. The un-prefixed forms are swallowed by the framework parser and the subcommand never sees them.
574
+
575
+ **Rule:** at design time for any new CLI command, grep `lib/cmd/**/arguments.json` and the global parser for reserved names before settling on flag names. If a candidate name collides, prefix it with the subcommand's domain (`--connector-port`, `--driver-version`, etc.) instead of hoping the parser will route it correctly.
576
+
577
+ ---
578
+
545
579
  ## Known Anti-Patterns
546
580
 
547
581
  | Anti-pattern | Location | Risk | Roadmap item |
@@ -604,3 +638,21 @@ it('name', async function() {
604
638
  **Rule**
605
639
 
606
640
  > Every async `it()` block must either be declared `async` or explicitly `return` a Promise. Any test that calls an async API without doing either will silently pass without testing anything.
641
+
642
+ ---
643
+
644
+ ## Debugging — measurement gotchas
645
+
646
+ Two reusable lessons that sit under the global "no fix without measurement" rule and refine *how* to measure.
647
+
648
+ ### `setAttribute` writes are not painting
649
+
650
+ A DOM attribute mutation is only a visible change if a CSS selector or JS observer reads it. Before treating an attribute write as the user-visible bug, confirm a reader exists — grep the deployed CSS for the selector, grep the JS for `getAttribute` / `MutationObserver` / `querySelector` on the attr. If nothing reads it, the write is dead metadata and cannot be the symptom no matter how often it fires. Same applies to class additions that have no rule, dataset writes that no script consumes, and ARIA attributes with no AT in the loop.
651
+
652
+ ### Pre-state matters more than the action
653
+
654
+ When a bug is described as "X happens when I do Y", lock the visible **pre-state of X** before running Y. The same Y can produce wildly different measurements against different pre-states.
655
+
656
+ In DOM bugs especially, "errors visible" (post-paint) and "errors appearing" (paint event) look identical in a screenshot but mean opposite things in a diff. If the pre-state already contains the symptom, the action diff is silent and you'll wrongly conclude "not reproducing."
657
+
658
+ Operational shortcut: ask the reporter for one sentence in user words describing the scenario before guessing the pre-state from code. A single sentence ("other fields not already filled get error messages") can disambiguate hours of wrong-pre-state runs in seconds.
package/GOVERNANCE.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gina follows the **BDFL** (Benevolent Dictator For Life) model with a commitment to transparency.
4
4
 
5
- Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com)) and **John Doe** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously.
5
+ Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously.
6
6
 
7
7
  ## How decisions are made
8
8
 
package/LICENSE CHANGED
@@ -1,3 +1,5 @@
1
+ MIT License
2
+
1
3
  Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
package/README.md CHANGED
@@ -37,12 +37,14 @@ gina bundle:start api @myproject
37
37
  open https://localhost:3100
38
38
  ```
39
39
 
40
- ## What's in 0.3.6
40
+ ## What's in 0.3.7
41
41
 
42
- - **Inspector payload redaction** — passwords, tokens, API keys, and secret-like fields are automatically stripped from all four Inspector data sinks (`window.__ginaData`, `localStorage`, `/_gina/agent` SSE, `ginaToolbar.update`). Configurable patterns via `inspector.redact` in bundle settings. Metadata carve-outs preserve validation rules and object-valued config under secret keys
43
- - **CORS preflight fix** — `completeHeaders()` no longer overwrites the echoed `access-control-allow-headers` on preflight responses, fixing browser CORS errors when the bundle's static ACAH list didn't include all client-sent headers
44
- - **Whisper silent-pass** — `whisper()` no longer emits a red stack trace on missing dictionary keys (first-install UX fix); `post_install.js` now seeds `def_global_mode` so the key is always present
45
- - See 0.3.5 for the swig 1.5.0 security extension, and 0.3.4 for the `require('gina/gna')` stale-path fix
42
+ - **Model Context Protocol (MCP) support** — `gina bundle:mcp` generates an MCP tool manifest (`mcp.json`) from `routing.json`. `gina bundle:mcp-start` runs a live MCP server over stdio (JSON-RPC 2.0) that dispatches `tools/call` as real HTTP requests against the running bundle. Any Gina app is now consumable by MCP-compatible IDE and agent tooling out of the box. MCP spec revision 2025-06-18
43
+ - **Standalone Inspector SPA + dual-mode resolution** — Inspector can now run as a separate single-page app served from its own origin, with the target bundle passed as `?target=<origin>`. The dev-mode statusbar and `gina inspector:open` both resolve the URL via a 4-level fallback (`--url=` → bundle `config/settings.json > inspector.url` `~/.gina/<shortVersion>/settings.json > inspector.url` → embedded `<target>/_gina/inspector/`), covering host-SPA + Docker-bundle splits
44
+ - **Inspector Reveal toggle** — dev-mode red-tinted toggle that swaps the redacted `__ginaData` for the unredacted snapshot via `/_gina/reveal`; only bundles running in `local` scope serve it, beta/production/testing return 403. Redactor now tokenizes camelCase so identifiers like `companyName` / `passportRequired` are no longer false-positive-redacted
45
+ - **`service:list` + `bundle:list` port and running-state columns** both commands now show each bundle's preferred dev port and whether the process is alive, read from `~/.gina/ports.reverse.json` and `~/.gina/run/<bundle>@<project>.pid`
46
+ - **Explicit exports from `require('gina')`** — every framework-injected global (`getContext`, `_`, `requireJSON`, `merge`, …) is now also reachable as a named property on `require('gina')` / `require('gina/gna')`, with JSDoc and auto-generated `types/gna.d.ts`. Runtime globals unchanged
47
+ - See 0.3.6 for Inspector payload redaction + CORS preflight fix, and 0.3.5 for the swig 1.5.0 security extension
46
48
 
47
49
  See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
48
50
 
@@ -65,7 +67,7 @@ Full installation guide, tutorials, configuration reference, and API docs at **[
65
67
 
66
68
  ## Governance
67
69
 
68
- Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com)) and **John Doe** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously. See [GOVERNANCE.md](./GOVERNANCE.md) for details.
70
+ Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com)) and **Fabrice DELANEAU** ([fdelaneau.com](https://fdelaneau.com)). Final decisions on direction, API design, and releases rest with Martin Luther. Community contributions and RFCs are welcome and taken seriously. See [GOVERNANCE.md](./GOVERNANCE.md) for details.
69
71
 
70
72
  ## License (MIT)
71
73
 
package/ROADMAP.md CHANGED
@@ -100,6 +100,7 @@ Stub commands confirmed in source — handler files exist but are empty or comme
100
100
  | --- | --- | --- | --- |
101
101
  | ✅ | **Explicit exports for global helpers** — `getContext`, `setContext`, `_`, `requireJSON` etc. available as explicit `require('gina/gna').getContext` imports alongside the existing global injection. Enables IDE navigation and static analysis. | `0.3.3-alpha.3` | 2026-04-09 |
102
102
  | ✅ | **TypeScript declaration files** — `.d.ts` declarations for the public surface: `SuperController`, `EntitySuper`, connector config shapes, `routing.json` schema, `PathObject`, `uuid`, all config file interfaces, `GinaRequest`/`GinaResponse`. No TS migration of internals — just declarations for consumer projects. `package.json` wired with `"types"` and `"typesVersions"`. | `0.3.3-alpha.3` | 2026-04-09 |
103
+ | ✅ | **Auto-generated `types/gna.d.ts` from JSDoc** (#M9) — `script/generate_gna_types.js` reads the `GLOBAL_EXPORTS` inventory from the gna-exports unit test plus the JSDoc on `framework/v*/core/gna.js` and emits `types/gna.d.ts` with one entry per global export. Two npm scripts: `npm run types:gen` regenerates, `npm run types:check` exits non-zero if drifted. A `gna-types-drift.test.js` unit test re-runs the generator in memory on every test pass — the JSDoc on `core/gna.js` is the single source of truth. Closes the #M8 → #M9 loop and removes the hand-written declaration. | `0.3.7-alpha.2` | 2026-04-18 |
103
104
  | 📋 | **`gina connector:audit [@project]`** — reads `connectors.json`, maps each declared connector to its npm peer package (`mysql2`, `pg`, `ioredis`, `couchbase`, `openai`, `@anthropic-ai/sdk`, etc.), and runs `npm audit --json` scoped to those packages in the project's `node_modules`. Reports CVEs with severity and fix availability. If `socket` is installed in the project, delegates to it for supply-chain analysis (malware, typosquatting, protestware) instead of `npm audit`. Exit code 1 on any high/critical finding — CI-friendly. Only audits packages actually declared in `connectors.json`, not the full dependency tree. | `0.4.0` | Q4 2026 |
104
105
 
105
106
  ### Phase 5 — Future
@@ -107,7 +108,7 @@ Stub commands confirmed in source — handler files exist but are empty or comme
107
108
  | Status | Feature | Version | Target |
108
109
  | --- | --- | --- | --- |
109
110
  | 📋 | **ESM compatibility layer** — Dual CJS/ESM entry points via `"exports"` in `package.json`. Framework internals stay CJS; public API gets ESM re-exports. | `0.5.0` | Q1 2027 |
110
- | 📋 | **Pluggable template engine** — Swig 1.4.2 stays fully integrated and remains the default. Nunjucks added as a supported alternative (opt-in per project via config). The render layer is abstracted behind a common interface so both engines co-exist. Switching to Nunjucks requires a per-project migration guide (breaking differences: `{% parent %}` → `{{ super() }}`, filter renames, autoescape default, `date` format strings, no `{% spaceless %}` — see docs). | `0.5.0` | Q1 2027 |
111
+ | 🚧 | **Pluggable template engine** — **Partially shipped in `0.3.7`**: opt-in `render.engine = "nunjucks"` dispatch per bundle. The project installs `nunjucks` itself (no framework dep); Gina loads it via `lib/nunjucks-resolver` and routes through `controller.render-nunjucks.js`. Swig remains the default, runs unchanged. Inspector dev payload and HTTP/2 `stream.respond()` direct path both shipped in `0.3.7` follow-ups. **Remaining `0.5.0` scope**: feature parity with render-swig (Early Hints 103 auto-send, static HTML cache, `setResources` / asset cataloguing, error-page template routing, within-Inspector `statusbar.html` include + flow/queries pipelines); per-template-extension dispatch so a single bundle can mix engines (`.swig` / `.njk`); optional auto-detect on `.njk` presence. Breaking syntax differences (`{% parent %}` → `{{ super() }}`, filter renames, `autoescape` default, `date` format strings, no `{% spaceless %}`) are nunjucks's own Gina doesn't paper over them. | `0.5.0` | Q1 2027 |
111
112
  | 📋 | **Structured logging** — JSON log output (`{ level, message, bundle, requestId, durationMs }`). Additive — existing consumers are unaffected. Enables log aggregation (Loki, Datadog, CloudWatch). | `0.5.0` | Q1 2027 |
112
113
  | 📋 | **Research `AsyncLocalStorage` for request context** — Evaluate `node:async_hooks` `AsyncLocalStorage` as a replacement for the `local` closure pattern, giving true async isolation across `setTimeout`, Promises, and `async/await` chains without any closure threading. Output: decision doc + proof-of-concept branch. | `0.5.0` | Q1 2027 |
113
114
 
@@ -128,6 +129,7 @@ New database connectors follow the same interface as the existing Couchbase conn
128
129
  | ✅ | **Couchbase SDK v2 deprecation** | `0.2.0` | 2026-03-27 | Couchbase Server SDK v2 reached end-of-life in 2021. `connector.v2.js` now logs a deprecation warning at connection time, and a fatal error when V8 pointer compression is active (NAN bindings are incompatible). Upgrade path: set `sdk.version` to `3` or `4` in your bundle's `connectors.json`. |
129
130
  | 📋 | **Couchbase SDK v2 removal** | `0.4.0` | Q4 2026 | `connector.v2.js` and all `sdk.version <= 2` branches removed. Default falls back to v3 when `sdk.version` is unset. Full migration guide in `CHANGELOG.md`. |
130
131
  | ✅ | **`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`. |
132
+ | ✅ | **`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. |
131
133
 
132
134
  ---
133
135
 
@@ -224,7 +226,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
224
226
  | Status | Feature | Version | Target |
225
227
  | --- | --- | --- | --- |
226
228
  | ✅ | **OpenAPI spec generation** — `gina bundle:openapi @myproject` emits `openapi.json` from `routing.json`. Zero manual spec writing — route annotations become `description` fields. Makes any Gina app consumable by AI agents, API gateways, and testing tools. Alias: `bundle:oas`. Supports `--output` flag for custom path. | `0.3.3-alpha.2` | 2026-04-08 |
227
- | 📋 | **MCP server wrapper** — `gina bundle:mcp @myproject` exposes `routing.json` routes as MCP (Model Context Protocol) tools. Makes any Gina app a native MCP server discoverable by AI agents. | `0.4.0` | Q4 2026 |
229
+ | | **MCP server wrapper** — Phase 1 (done, `0.3.7-alpha.2`, 2026-04-18): `gina bundle:mcp @myproject` emits a static MCP tool manifest (`mcp.json`) targeting MCP spec revision 2025-06-18. Phase 2a (done, `0.3.7-alpha.3`, 2026-04-18): `gina bundle:mcp-start <bundle> @myproject` serves the manifest as a live MCP server over stdio (JSON-RPC 2.0, newline-delimited). `tools/call` is dispatched as real HTTP requests against the running bundle. Phase 2b (done, `0.3.7-alpha.2`, 2026-04-22): Streamable HTTP transport for remote/containerised agents — `gina bundle:mcp-start <bundle> @myproject --transport=http`. Opt-in static bearer auth via `--auth-token`, built-in loopback `Origin` allowlist, full CORS echo, SSE response mode, JSON-RPC 2.0 batch, `Mcp-Session-Id` lifecycle. OAuth 2.1 intentionally out of scope — deploy behind a reverse proxy. Live end-to-end smoke recipe ready for the next alpha release. | `0.3.7-alpha.2` | 2026-04-22 |
228
230
 
229
231
  ---
230
232
 
package/bin/cli CHANGED
@@ -1,6 +1,17 @@
1
1
  #!/usr/bin/env node
2
2
  'use strict';
3
3
 
4
+ // MCP stdio transport isolation (#AI8b).
5
+ // `gina bundle:mcp-start` speaks JSON-RPC on stdout. Anything else written
6
+ // to process.stdout (framework logger, bootstrap noise, console.log) would
7
+ // corrupt the wire and kill the MCP client parser on the first byte.
8
+ // Stash the real write and redirect the rest to stderr before any framework
9
+ // module loads. The handler reads the real write from process.__ginaMcpStdout.
10
+ if (process.argv.indexOf('bundle:mcp-start') > -1) {
11
+ process.__ginaMcpStdout = process.stdout.write.bind(process.stdout);
12
+ process.stdout.write = process.stderr.write.bind(process.stderr);
13
+ }
14
+
4
15
  var fs = require('fs');
5
16
  var net = require('net');
6
17
  var util = require('util');
@@ -302,6 +313,7 @@ async function onExec() {
302
313
  'build:',
303
314
  'bundle:',
304
315
  'cache:',
316
+ 'connector:',
305
317
  'dev:',
306
318
  'env:',
307
319
  'inspector:',
@@ -312,6 +324,7 @@ async function onExec() {
312
324
  'project:',
313
325
  'protocol:',
314
326
  'scheme:',
327
+ 'service:',
315
328
  'view:',
316
329
  '--', //options or other aliases.
317
330
  '-' //options or other aliases.
@@ -3,5 +3,5 @@
3
3
  #
4
4
 
5
5
  Martin Luther ETOUMAN <contact@gina.io>
6
- John Doe <contact+gina@fdelaneau.com>
6
+ Fabrice DELANEAU <contact+gina@fdelaneau.com>
7
7
  Stephane HEAV <stephane.heav@gmail.com>
@@ -1,3 +1,5 @@
1
+ MIT License
2
+
1
3
  Copyright (c) 2009-2026 Rhinostone <contact@gina.io>
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -0,0 +1 @@
1
+ 0.3.7-alpha.2
@@ -24,22 +24,45 @@
24
24
  } else {
25
25
  _rdcTypes['password'] = true;
26
26
  }
27
+ // Patterns are anchored (`^(?:...)$`) and tested against tokens, not raw
28
+ // substrings. So `apikey` covers `apiKey` / `api_key` / `apikey` while
29
+ // `companyName` no longer false-positives on `pan`. Mirrors the server-side
30
+ // DEFAULT_PATTERNS in lib/inspector-redact — keep both in sync.
27
31
  var _rdcRe = [];
28
32
  var _rdcSrc = Array.isArray(_rdc.patterns) ? _rdc.patterns
29
- : ['password','passwd','pwd','secret','token','apikey','api[_-]?key','cvv','cvc','ccv','pan','ssn','authorization','credentials','private[_-]?key'];
33
+ : ['password','passwd','pwd','secret','token','apikey','cvv','cvc','ccv','pan','ssn','authorization','credentials','privatekey'];
30
34
  for (var _ri = 0; _ri < _rdcSrc.length; _ri++) {
31
- try { _rdcRe.push(new RegExp(_rdcSrc[_ri], 'i')); } catch (e) { /* skip */ }
35
+ try { _rdcRe.push(new RegExp('^(?:' + _rdcSrc[_ri] + ')$', 'i')); } catch (e) { /* skip */ }
32
36
  }
33
- // Keys ending in rule/policy/config/validator suffixes describe validation
34
- // metadata, not user input must not be redacted even when the name
35
- // contains a secret keyword (e.g. `passwordRule`). Mirrors the server-side
37
+ // Anchored both ends applied against the LAST token, not the raw key.
38
+ // Keys whose final token is a metadata word (rule/policy/config/etc.)
39
+ // describe validation, not user input. Mirrors the server-side
36
40
  // NON_SECRET_SUFFIX regex in lib/inspector-redact.
37
- var _rdcNonSecret = /(rule|rules|policy|policies|validator|config|configuration|settings|setting|meta|metadata|format|requirements|strength|constraint|constraints|options|option|schema|definition|definitions|spec|specs)$/i;
41
+ var _rdcNonSecret = /^(rule|rules|policy|policies|validator|config|configuration|settings|setting|meta|metadata|format|requirements|strength|constraint|constraints|options|option|schema|definition|definitions|spec|specs)$/i;
42
+ function _rdcTokenize(k) {
43
+ if (typeof k !== 'string' || k.length === 0) return [];
44
+ var spaced = k
45
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
46
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2');
47
+ var parts = spaced.split(/[\s_\-.\[\]:\/]+/);
48
+ var out = [];
49
+ for (var i = 0; i < parts.length; i++) {
50
+ if (parts[i].length > 0) out.push(parts[i].toLowerCase());
51
+ }
52
+ return out;
53
+ }
38
54
  function _rdcKeyHit(k) {
39
55
  if (typeof k !== 'string') return false;
40
- if (_rdcNonSecret.test(k)) return false;
56
+ var tokens = _rdcTokenize(k);
57
+ if (tokens.length === 0) return false;
58
+ if (_rdcNonSecret.test(tokens[tokens.length - 1])) return false;
59
+ var joined = tokens.join('');
41
60
  for (var i = 0; i < _rdcRe.length; i++) {
42
- if (_rdcRe[i].test(k)) return true;
61
+ var re = _rdcRe[i];
62
+ if (re.test(joined)) return true;
63
+ for (var t = 0; t < tokens.length; t++) {
64
+ if (re.test(tokens[t])) return true;
65
+ }
43
66
  }
44
67
  return false;
45
68
  }
@@ -211,12 +234,25 @@
211
234
  + '<span>' + bundle + '@' + envName + '</span>'
212
235
  + '<a id="insp">Inspector &#8599;</a>'
213
236
  + '</div>';
214
- var inspUrl = webroot + '_gina/inspector/';
237
+ // Standalone Inspector URL set in bundle settings.json as
238
+ // `inspector.url` (e.g. "http://localhost:4200/inspector/"). When present,
239
+ // the statusbar link opens the standalone SPA in a new tab with
240
+ // ?target=<this-origin+webroot>. When absent, falls back to the embedded
241
+ // same-origin popup at {webroot}/_gina/inspector/ (legacy behaviour).
242
+ var _standaloneUrl = (window.__ginaData && window.__ginaData.gina
243
+ && window.__ginaData.gina.inspectorUrl) ? window.__ginaData.gina.inspectorUrl : null;
244
+ var _embeddedUrl = webroot + '_gina/inspector/';
215
245
  function inject() {
216
246
  if (document.body) document.body.appendChild(el);
217
247
  var link = sr.getElementById('insp');
218
248
  if (link) link.addEventListener('click', function (ev) {
219
249
  ev.preventDefault();
250
+ if (_standaloneUrl) {
251
+ var _base = _standaloneUrl.replace(/\/+$/, '') + '/';
252
+ var _target = location.origin + webroot.replace(/\/$/, '');
253
+ window.open(_base + '?target=' + encodeURIComponent(_target), '_blank');
254
+ return;
255
+ }
220
256
  var w = Math.round(screen.availWidth / 3);
221
257
  var h = screen.availHeight;
222
258
  var left = screen.availWidth - w;
@@ -228,7 +264,7 @@
228
264
  }
229
265
  } catch (e) {}
230
266
  window.open(
231
- inspUrl,
267
+ _embeddedUrl,
232
268
  'gina-inspector',
233
269
  'width=' + w + ',height=' + h + ',left=' + left + ',top=' + top
234
270
  + ',menubar=no,toolbar=no,location=no,status=no,resizable=yes,scrollbars=yes'
@@ -36,7 +36,7 @@
36
36
  Logs<span class="bm-log-dot" id="bm-log-dot"></span></button>
37
37
  </nav>
38
38
  <div class="bm-header-spacer"></div>
39
- <button class="bm-refresh-btn" id="bm-refresh" title="Refresh now" aria-label="Refresh data">
39
+ <button class="bm-refresh-btn" id="bm-refresh" title="Refresh now (Shift+click: reload page)" aria-label="Refresh data">
40
40
  <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M8 1.5A6.5 6.5 0 0114.5 8h-2A4.5 4.5 0 008 3.5a4.48 4.48 0 00-3.18 1.32L6.5 6.5H1.5v-5l1.82 1.82A6.47 6.47 0 018 1.5zM1.5 8a6.5 6.5 0 006.5 6.5 6.47 6.47 0 004.68-1.98l-1.82-1.82a4.48 4.48 0 01-2.86 1.3 4.5 4.5 0 01-4.5-4h-2z"/></svg>
41
41
  </button>
42
42
  <div class="bm-header-end">
@@ -113,6 +113,9 @@
113
113
  <button class="bm-icon-btn" id="bm-download" title="Download as JSON">
114
114
  <svg viewBox="0 0 16 16"><path d="M.5 9.9a.5.5 0 01.5.5v2.5a1 1 0 001 1h12a1 1 0 001-1v-2.5a.5.5 0 011 0v2.5a2 2 0 01-2 2H2a2 2 0 01-2-2v-2.5a.5.5 0 01.5-.5z"/><path d="M7.646 11.854a.5.5 0 00.708 0l3-3a.5.5 0 00-.708-.708L8.5 10.293V1.5a.5.5 0 00-1 0v8.793L5.354 8.146a.5.5 0 10-.708.708l3 3z"/></svg>
115
115
  </button>
116
+ <button class="bm-icon-btn bm-hidden" id="bm-reveal" title="Reveal redacted secrets (local scope only)">
117
+ <svg viewBox="0 0 16 16"><path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 011.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0114.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 011.172 8z"/><path d="M8 5.5a2.5 2.5 0 100 5 2.5 2.5 0 000-5zM4.5 8a3.5 3.5 0 117 0 3.5 3.5 0 01-7 0z"/></svg>
118
+ </button>
116
119
  </div>
117
120
  <div class="bm-scroll-area" data-tab="data">
118
121
  <div class="bm-tree-root" id="tree-data"></div>
@@ -830,6 +830,8 @@ body {
830
830
  cursor: pointer;
831
831
  padding: 4px;
832
832
  transition: border-color 0.15s, background 0.15s;
833
+ /* Reveal toggle — red tint when active so the unredacted state is visually
834
+ distinct from the regular amber `.active` state used by RAW / fold-all. */
833
835
  }
834
836
  .bm-icon-btn svg {
835
837
  width: 14px;
@@ -850,6 +852,16 @@ body {
850
852
  .bm-icon-btn.active svg {
851
853
  fill: var(--accent);
852
854
  }
855
+ .bm-icon-btn.bm-hidden {
856
+ display: none;
857
+ }
858
+ .bm-icon-btn#bm-reveal.active {
859
+ border-color: var(--err);
860
+ background: rgba(231, 76, 60, 0.12);
861
+ }
862
+ .bm-icon-btn#bm-reveal.active svg {
863
+ fill: var(--err);
864
+ }
853
865
 
854
866
  /* ── Data search bar ─────────────────────────────────────────────────────── */
855
867
  .bm-data-search {
@@ -3591,5 +3603,3 @@ details[open] > summary.bm-summary::before {
3591
3603
  text-align: left;
3592
3604
  }
3593
3605
  }
3594
-
3595
- /*# sourceMappingURL=inspector.css.map */