gina 0.3.16-alpha.1 → 0.4.0
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.
- package/CHANGELOG.md +38 -0
- package/CONVENTIONS.md +1 -1
- package/README.md +11 -7
- package/ROADMAP.md +7 -6
- package/bin/cli +1 -0
- package/framework/v0.4.0/VERSION +1 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/html/statusbar.html +1 -1
- package/framework/v0.4.0/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.4.0/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/index.html +1 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.css +27 -2
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/inspector.js +202 -72
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/index.js +152 -274
- package/framework/v0.4.0/core/connectors/couchbase/lib/connector.js +30 -0
- package/framework/v0.4.0/core/connectors/couchbase/lib/session-store.js +29 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mongodb/index.js +2 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mysql/index.js +30 -13
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/postgresql/index.js +14 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/scylladb/index.js +2 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/sql-parser.js +149 -11
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/sqlite/index.js +27 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.js +183 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.render-json.js +20 -5
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.render-nunjucks.js +188 -5
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.render-stream.js +14 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.render-swig.js +171 -28
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.render-v1.js +5 -1
- package/framework/v0.4.0/core/controller/inspector-window-emit.js +157 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/gna.js +81 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/README.md +3 -2
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coop/README.md +1 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/csp/README.md +37 -12
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/csp/src/main.js +133 -12
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/server.isaac.js +235 -6
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/server.js +205 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/index.js +4 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/settings.json +55 -4
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/mcp.js +1 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/msg.json +1 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/gina-dev.1.md +2 -2
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/gina-framework.1.md +2 -2
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/gina.1.md +2 -2
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/msg.json +1 -1
- package/framework/v0.4.0/lib/cmd/secrets/arguments.json +6 -0
- package/framework/v0.4.0/lib/cmd/secrets/check.js +507 -0
- package/framework/v0.4.0/lib/cmd/secrets/help.js +46 -0
- package/framework/v0.4.0/lib/cmd/secrets/help.txt +71 -0
- package/framework/v0.4.0/lib/cmd/secrets/scan.js +448 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/index.js +16 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inherits/README.md +1 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inherits/package.json +1 -1
- package/framework/v0.4.0/lib/instrument/package.json +8 -0
- package/framework/v0.4.0/lib/instrument/src/main.js +240 -0
- package/framework/v0.4.0/lib/job/package.json +19 -0
- package/framework/v0.4.0/lib/job/src/main.js +806 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/merge/README.md +1 -1
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/secrets/src/main.js +85 -0
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/swig-resolver/src/main.js +8 -5
- package/framework/{v0.3.16-alpha.1 → v0.4.0}/package.json +2 -2
- package/gna.js +4 -4
- package/llms.txt +46 -3
- package/package.json +3 -3
- package/resources/home/framework/project.json +1 -13
- package/resources/package.json.template +2 -2
- package/schema/locales.json +1 -1
- package/script/check_no_local_leak.js +53 -10
- package/script/post_install.js +17 -0
- package/types/index.d.ts +2 -0
- package/.github/FUNDING.yml +0 -1
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -35
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -21
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -19
- package/.github/dependabot.yml +0 -12
- package/.github/scripts/scan-vendored-cves.js +0 -188
- package/.github/workflows/bundle-freshness.yml +0 -116
- package/.github/workflows/security.yml +0 -84
- package/.github/workflows/test.yml +0 -55
- package/.github/workflows/vendored-cve.yml +0 -36
- package/.playwright-mcp/console-2026-04-22T21-42-03-731Z.log +0 -2
- package/.playwright-mcp/console-2026-05-13T00-40-40-225Z.log +0 -2
- package/.playwright-mcp/console-2026-05-14T02-27-11-347Z.log +0 -64
- package/.playwright-mcp/d9-after-connector.png +0 -0
- package/.playwright-mcp/d9-after-service.png +0 -0
- package/.playwright-mcp/d9-before-connector-full.png +0 -0
- package/.playwright-mcp/d9-before-connector-leak.png +0 -0
- package/.playwright-mcp/d9-before-connector-top.png +0 -0
- package/.playwright-mcp/d9-before-connector-v2.png +0 -0
- package/.playwright-mcp/d9-before-connector.png +0 -0
- package/.playwright-mcp/page-2026-04-22T21-42-03-861Z.yml +0 -3
- package/.playwright-mcp/page-2026-04-22T21-44-40-373Z.yml +0 -3
- package/.playwright-mcp/page-2026-05-13T00-40-40-476Z.yml +0 -7
- package/.playwright-mcp/page-2026-05-14T02-24-51-996Z.yml +0 -1818
- package/.playwright-mcp/page-2026-05-14T02-26-47-905Z.yml +0 -2063
- package/.playwright-mcp/page-2026-05-14T02-27-11-472Z.yml +0 -406
- package/.playwright-mcp/page-2026-05-14T02-28-37-939Z.yml +0 -2061
- package/.playwright-mcp/page-2026-05-14T02-29-01-333Z.yml +0 -404
- package/framework/v0.3.16-alpha.1/VERSION +0 -1
- package/framework/v0.3.16-alpha.1/core/asset/plugin/dist/vendor/gina/html/statusbar.html.br +0 -0
- package/framework/v0.3.16-alpha.1/core/asset/plugin/dist/vendor/gina/html/statusbar.html.gz +0 -0
- package/framework/v0.3.16-alpha.1/core/connectors/couchbase/lib/connector.js +0 -22
- package/framework/v0.3.16-alpha.1/core/connectors/couchbase/lib/connector.v2.js +0 -468
- package/framework/v0.3.16-alpha.1/core/connectors/couchbase/lib/session-store.js +0 -22
- package/framework/v0.3.16-alpha.1/core/connectors/couchbase/lib/session-store.v2.js +0 -259
- package/script/.local-sync-targets.json +0 -6
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/AUTHORS +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/html/nolayout.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/html/static.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/android-chrome-192x192.png +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/android-chrome-512x512.png +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/apple-touch-icon.png +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/favicon-16x16.png +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/favicon-32x32.png +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/img/favicon.ico +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.css +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/beemaster/beemaster.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/beemaster/index.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.br +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/css/gina.min.css.gz +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/have_heart_one-webfont.woff2 +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/logo.svg +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.br +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.min.js.gz +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.br +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/js/gina.onload.min.js.gz +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/config.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/ai/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/ai/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/lib/connector.v3.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/lib/connector.v4.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/lib/n1ql.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/lib/session-store.v3.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/couchbase/lib/session-store.v4.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mongodb/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mongodb/lib/pipeline-loader.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mongodb/lib/session-store.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/mysql/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/postgresql/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/redis/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/redis/lib/session-store.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/scylladb/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/scylladb/lib/session-store.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/sqlite/lib/connector.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/connectors/sqlite/lib/session-store.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/content.encoding +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/controller.framework.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/controller/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/lib/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/lib/types/multipart.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/lib/types/urlencoded.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/lib/utils.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/busboy-1.6.0/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/streamsearch-1.1.0/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/streamsearch-1.1.0/lib/sbmh.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/deps/streamsearch-1.1.0/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/dev/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/dev/lib/class.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/dev/lib/factory.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/dev/lib/tools.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/currency.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/dist/language/en.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/dist/language/fr.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/dist/region/en.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/dist/region/fr.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/locales/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/mime.types +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/model/entity.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/model/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/model/template/entityFactory.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/model/template/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/csrf/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/csrf/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/csrf/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coep/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coep/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coep/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coop/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/coop/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/corp/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/corp/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/corp/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/csp/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hide-powered-by/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hide-powered-by/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hide-powered-by/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hsts/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hsts/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/hsts/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/origin-agent-cluster/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/origin-agent-cluster/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/origin-agent-cluster/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/referrer-policy/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/referrer-policy/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/referrer-policy/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-content-type-options/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-content-type-options/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-content-type-options/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-dns-prefetch-control/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-download-options/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-download-options/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-download-options/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-frame-options/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-frame-options/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-frame-options/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-permitted-cross-domain-policies/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-xss-protection/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-xss-protection/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/security-headers/x-xss-protection/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/session/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/session/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/session/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/storage/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/storage/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/storage/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/storage/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/validator/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/validator/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/validator/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/validator/src/form-validator.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/plugins/lib/validator/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/router.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/server.express.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/status.codes +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/_gitignore +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/app.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/connectors.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/routing.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/settings.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/settings.server.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/templates.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/config/watchers.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/controllers/controller.content.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/controllers/controller.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/controllers/setup.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle/locales/en.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_namespace/controllers/controller.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/css/default.css +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/css/home.css +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/css/vendor/readme.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/favicon.ico +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/js/vendor/readme.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/manifest.webmanifest +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/readme.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_public/sw.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_templates/handlers/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_templates/html/content/homepage.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-noscript.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_templates/html/includes/error-msg-outdated-browser.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/boilerplate/bundle_templates/html/layouts/main.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/command/gina.bat.tpl +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/command/gina.tpl +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/env.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/manifest.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/statics.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/conf/templates.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/client/json/401.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/client/json/403.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/client/json/404.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/server/html/50x.html +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/server/json/500.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/error/server/json/503.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/template/extensions/logger/config.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/console.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/context.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/data/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/data/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/data/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/data/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/dateFormat.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/json/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/json/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/json/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/json/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/path.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/plugins/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/plugins/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/plugins/src/api-error.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/plugins/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/prototypes.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/task.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/helpers/text.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/archiver/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/archiver/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/archiver/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/archiver/src/dep/jszip.min.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/archiver/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/async/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/async/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cache/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cache/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cache/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cache/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/aliases.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/arguments.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/build.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/copy.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/cp.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/mcp-start.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/oas.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/openapi.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/remove.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/rename.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/restart.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/rm.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/start.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/status.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/bundle/stop.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/cache/stats.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/arguments.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/migrate.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/remove.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/connector/rm.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/get.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/link-dev.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/remove.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/rm.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/set.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/unset.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/env/use.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/arguments.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/build.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/dot.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/get.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/init.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/link-node-modules.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/link.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/open.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/restart.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/set.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/start.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/status.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/stop.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/tail.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/update.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/framework/version.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/helper.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/arguments.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/export.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/import.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/i18n/scan.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/inspector/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/inspector/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/inspector/open.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/minion/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/minion/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/inc/scan.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/reset.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/port/set.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/arguments.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/build.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/import.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/move.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/remove.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/rename.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/restart.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/rm.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/start.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/status.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/project/stop.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/protocol/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/protocol/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/protocol/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/protocol/set.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/link-local.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/link-production.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/remove.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/rm.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/scope/use.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/service/help.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/service/help.txt +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/service/list.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cmd/view/add.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/collection/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/collection/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/collection/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/collection/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/config.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/connector-registry/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/connector-registry/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cron/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cron/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/cron/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/domain/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/domain/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/domain/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/domain/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/generator/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/i18n/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/i18n/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inherits/LICENSE +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inherits/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inspector-redact/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/inspector-redact/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/default/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/file/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/file/lib/logrotator/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/file/lib/logrotator/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/mq/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/mq/listener.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/containers/mq/speaker.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/helper.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/logger/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/math/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-dispatch/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-dispatch/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-http/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-http/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-server/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/mcp-server/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/merge/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/merge/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/metrics/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/metrics/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/model.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/nunjucks-filters/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/nunjucks-filters/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/nunjucks-filters/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/nunjucks-resolver/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/nunjucks-resolver/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/proc.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing/build.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing/src/radix.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing-introspect/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/routing-introspect/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/secrets/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/secrets/src/backends/env.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/session-store.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/shell.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/state.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/swig-filters/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/swig-filters/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/swig-filters/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/swig-resolver/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/url/README.md +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/url/index.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/url/routing.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/uuid/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/uuid/src/main.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/validator.js +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/watcher/package.json +0 -0
- /package/framework/{v0.3.16-alpha.1 → v0.4.0}/lib/watcher/src/main.js +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,44 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html),
|
|
|
6
6
|
and is generated by [Changie](https://github.com/miniscruff/changie).
|
|
7
7
|
|
|
8
8
|
|
|
9
|
+
## 0.4.0 - 2026-05-29
|
|
10
|
+
### Added
|
|
11
|
+
* Inspector View tab now shows the template engine version next to the engine name (e.g. `Swig | 2.4.0`). The version is sourced server-side from the cached swig / nunjucks resolver decisions and falls back to a name-only badge when no version is resolvable (very-early bootstrap, test stubs, legacy render paths).
|
|
12
|
+
* Inspector Query tab — SQL index badges now do column-level coverage matching. A new badge marks a query whose WHERE columns are not covered by any declared index (leftmost-prefix match against the bundle indexes.sql), instead of only checking whether the target table has any index.
|
|
13
|
+
* Added gina secrets:scan and gina secrets:check CLI commands that introspect the ${secret:KEY} placeholders your bundle configs require. secrets:scan reports each required key and the config file(s) that declare it; secrets:check cross-references the current environment, marks each key SET or UNSET, and exits non-zero when any required key is missing (for CI / pre-deploy gating). Both support --format=json.
|
|
14
|
+
* gina secrets:scan and secrets:check gain --scope=<scope> to report the effective required secrets for a deployment scope (read-only deep-merge of the sibling config_<scope>/ dirs over base config, scope wins), and secrets:check gains --env-file=<path> to validate against a .env-style file (e.g. a decrypted SOPS export) instead of the live process.env. The runtime config loader is unchanged — per-scope config selection stays a deploy-time concern.
|
|
15
|
+
* Added opt-in HTTP/2 response trailer support via self.sendTrailers(fields). A controller registers trailing headers before rendering, and the render pipeline sets waitForTrailers on the HTTP/2 stream and emits them after the response body (in the wantTrailers event) — useful for gRPC-style streaming (a final grpc-status / grpc-message) or a content-integrity Digest after a chunked body. Pseudo-header keys (those beginning with a colon) are stripped. The feature is fully opt-in: a no-op on HTTP/1.1 and when no trailers are registered, so existing responses are byte-for-byte unchanged.
|
|
16
|
+
* Added lib.job, an async-job primitive for running slow work out-of-band. lib.job.create(fn) enqueues a deferred async function and returns a job id immediately; the function runs on a concurrency-limited worker and its outcome moves through pending, running, then completed or failed, and is queryable via lib.job.get(id, cb). Stale terminal jobs are purged on a configurable TTL by a self-contained sweep. Tune via the app.json jobs block (maxConcurrency, ttl, sweepInterval, idSize); sane defaults apply when the block is omitted.
|
|
17
|
+
* Added the self.startJob(fn) and self.jobStatus(id, cb) controller helpers for async jobs. self.startJob runs a deferred async function out-of-band and returns a job id immediately (a thin wrapper over lib.job.create); self.jobStatus reads a job record from within your own authenticated route. The deferred function runs after the request has completed, so capture plain values rather than the request or response objects.
|
|
18
|
+
* Added a built-in /_gina/jobs/:id status endpoint that reports an async job state (pending, running, completed, or failed). It is always-on and state-only (it never returns the result or error payload) and works under both the Isaac and Express engines. Retrieve a completed job result from your own authenticated route via self.jobStatus.
|
|
19
|
+
* Added the self.inferAsync(messages, options) controller helper, which runs a model inference as an async job in one call and returns a job id immediately. It wraps the AI connector through self.startJob; the stored job result is the trimmed inference (content, model, usage). Select the connector with options.connector, poll /_gina/jobs/:id for state, and read the result from your own authenticated route via self.jobStatus.
|
|
20
|
+
* Added opt-in completion webhooks for async jobs. Pass a callbackUrl when creating a job (lib.job.create(fn, { callbackUrl }) or self.startJob(fn, { callbackUrl })) and the framework POSTs { id, state, result, error } to it when the job finishes. Delivery is best-effort with retry and exponential backoff; persistent failures are recorded on the job as webhookFailed and never affect the job outcome. Configure a per-bundle webhookSecret (app.json jobs.webhookSecret, ideally a secret placeholder) to sign each payload with an X-Gina-Signature HMAC-SHA256 header.
|
|
21
|
+
* Added an opt-in API-key gate for the dev-mode /_gina/agent Inspector SSE stream. Set inspector.agent.enabled and inspector.agent.key in settings.json to reach the endpoint outside dev mode (e.g. staging) for authenticated remote server-log streaming; the key is presented via the x-gina-inspector-key header or a ?key= query param and compared in constant time. In dev the endpoint stays open with no key (unchanged).
|
|
22
|
+
* Added a toggleable Inspector instrumentation window (#INS10): POST /_gina/instrument opens a time-boxed, key-authenticated window that runs query + flow capture outside dev mode and streams it over the authenticated /_gina/agent SSE (JSON/XHR responses + cross-bundle queries). Opt-in via settings.json inspector.instrumentation; 300s default window, 3600s hard cap, auto-revert.
|
|
23
|
+
* Inspector instrumentation windows now stream the controller queries and flow timeline of a server-rendered HTML page over the authenticated agent SSE, not just JSON and XHR responses. The page HTML is never modified; the capture leaves only over the key-authenticated channel while a window is open.
|
|
24
|
+
* gina.plugins.Csp({ useNonce: true }) generates a fresh per-response CSP nonce, stamps it on req._ginaCspNonce, and appends a nonce source-expression to script-src (fallback default-src). The swig and nunjucks renderers set a matching nonce attribute on the framework-injected onGinaLoaded bootstrap script — letting bundles drop unsafe-inline from script-src. Opt-in (default false); existing bundles are unaffected.
|
|
25
|
+
* The dev-mode Inspector inline scripts (window.__ginaData snapshot + console-capture) and the client-side metrics-patch scripts now carry the gina.plugins.Csp({ useNonce: true }) per-response nonce in both the swig and nunjucks renderers, so a bundle running strict CSP in dev no longer reports violations for those framework-injected inline scripts. Extends the #HDR16 onGinaLoaded bootstrap nonce.
|
|
26
|
+
* gina.plugins.Csp({ useNonce: true }) now exposes the per-response nonce to your templates as {{ page.cspNonce }} (swig) / {{ cspNonce }} (nunjucks), so you can add a matching nonce attribute to your own inline <script> tags and drop 'unsafe-inline' from script-src. The dev-mode Inspector status bar inline script carries it automatically. Opt-in (default false); bundles that don't set useNonce are unaffected.
|
|
27
|
+
### Changed
|
|
28
|
+
* Inspector View tab — the server-emitted Weight and Load fallback values now render in italic with a slightly deeper dim (new `bm-vbadge-svr` style), so a value sourced from the server reads distinctly from the client-measured primary and the engine-version dim.
|
|
29
|
+
* gina.plugins.Coop() — documented that the default `same-origin` value severs the `window.opener` link the dev Inspector relies on to read client-side timing, so the View tab Weight and Load badges fall back to server-rendered metrics (FCP stays browser-only). Dev-only — the Inspector is gated on NODE_ENV_IS_DEV.
|
|
30
|
+
* Bumped @rhinostone/swig dependency floor from ^2.4.1 to ^2.5.1 in both root package.json and framework/v*/package.json. Cumulative content: 2.5.0 introduced the Jinja2 frontend as a published sibling package (@rhinostone/swig-jinja2 — block, extends, include, import, from, macro, for, set, with, filter, raw, autoescape tags + full Jinja2 filter set + async loader via renderFileAsync/compileFileAsync); 2.5.1 added the new sibling to the workspace README family list, restored JSDoc on the top-level public API (regression from engine.install carve), and is dev-only otherwise. swigResolver DEFAULT_MIN stays at 2.0.0 since the framework does not depend on any new 2.5.x-only API. The lib/swig-resolver/src/main.js docstring is extended in the same commit to mention @rhinostone/swig-jinja2 alongside @rhinostone/swig-twig as a known sibling alternate; bundles can opt into either via swig.package + swig.useProject (same shape as the existing Twig opt-in).
|
|
31
|
+
* Upgrading to 0.4.0 is a shortVersion bump (0.3 to 0.4): the framework creates a fresh ~/.gina/0.4/settings.json from defaults on install, so any customizations made under 0.3 (log level, port, culture, timezone, etc.) are not carried forward. Re-apply them after upgrading with gina framework:set, or copy the values across from ~/.gina/0.3/settings.json.
|
|
32
|
+
### Removed
|
|
33
|
+
* Removed the Couchbase SDK v2 ORM connector and session store (connector.v2.js and session-store.v2.js). Couchbase Server SDK v2 reached end-of-life in 2021, so only SDK v3 and v4 are now supported, and the connector defaults to v3 when no couchbase version is pinned. Migrating is a driver bump rather than a config change — upgrade the couchbase dependency in your project to ^3 or ^4 (for example, npm install couchbase@^4). Bundles still resolving to SDK v2 now fail fast at connector load with an explicit upgrade message instead of loading the removed code path.
|
|
34
|
+
### Fixed
|
|
35
|
+
* Hardening `npm install -g gina` against npm setups that don't propagate `npm_config_global` to the post-install subprocess: `isGlobalInstall` now also detects from `__dirname`, and the local-install symlink step no-ops when its source path is missing instead of crashing the install.
|
|
36
|
+
* throwError(statusCode, Error|string) 2-arg form now honors the explicit status code. Previously the inner status-coercion read .status from the wrapped error rather than from the number itself, so any explicit code other than 500 was silently lost. The 2-arg-with-errorObj shape was unaffected and stays unchanged. Documented in types/index.d.ts as a new overload.
|
|
37
|
+
* Inspector View tab — restored the Weight and Load badges when `window.opener.performance` is unreachable (e.g. host page sets `Cross-Origin-Opener-Policy`, which nulls the popup opener reference). Server-side metrics (`weightBytes` from the response body byte length, `serverMs` from the request timeline) are now emitted on `__ginaData.user.environment.metrics` and used as fallback by the client. When both client + server values are available, the badge renders as a dual `<server-dim> | <client-primary>` pair — surfacing the compression ratio for Weight and the network/parse/paint cost for Load.
|
|
38
|
+
* Inspector View tab — restored the Weight and Load badges for bundles using the nunjucks template engine. Closes the deferred follow-up from the earlier swig-side restoration, so both engines now surface the metrics consistently under `Cross-Origin-Opener-Policy` (no `window.opener`).
|
|
39
|
+
* Inspector Flow tab — restored the request-lifecycle timeline for bundles using the nunjucks template engine. The nunjucks render delegate now builds `data.page.flow` (with N1QL queries converted into timeline entries) and late-binds the response-write/total entries via the same `_flowPatch` mechanism as the swig delegate, so the Flow waterfall is populated for nunjucks pages (previously entirely empty). Closes the deferred Flow-tab follow-up from the earlier swig-side restoration.
|
|
40
|
+
* SQL Inspector index-coverage badges now stay accurate after a live /_gina/indexes refresh — the MySQL, PostgreSQL and SQLite introspection paths capture each index column, so column-level coverage no longer degrades to a false no-index-for-filter badge once live introspection has run.
|
|
41
|
+
* The Inspector Query tab now flags SQL queries whose WHERE filter no existing index can serve, even for bundles without an indexes.sql file (resolved via live database introspection); previously these showed an optimistic index badge instead of the no-index-for-filter warning.
|
|
42
|
+
* Swig template engine updated to 2.4.1. Macros that call other macros imported at the top of their own defining file now resolve correctly (previously they rendered empty), recursively across import depth.
|
|
43
|
+
* Refreshed stale external references shipped with the framework. The man-page COLOPHON sections and the CLI framework-not-found messages now point to https://gina.io (previously http://www.gina.io); GitHub references in the man pages, the bundled lib READMEs, and the generated-project package.json template now use the gina-io organisation (previously the former rhinostone org); the vendored lib/inherits package metadata now references the canonical repository; and the framework project template no longer ships unreachable internal git-server URLs. Documentation and metadata only - no runtime or API change.
|
|
44
|
+
* Refreshed more stale external references flagged by the link-health sweep. The popin plugin CSS doc now links the live normalize.css domain (necolas.github.io) and drops a dead community-wiki citation (prose retained); the popin extend doc now points to current Apple developer documentation for Smart App Banners and Safari meta tags; and gina bundle:mcp emits a resolvable manifest $schema host (modelcontextprotocol.io; the retired spec. subdomain no longer resolved). Documentation and generated-metadata only - no runtime or API change.
|
|
45
|
+
* Fixed an HTTP 500 when rendering a request whose session uses a browser-session cookie (a session cookie with no expiry). The session-expiry display block now runs only for a real expiry date, so expiry-less sessions render normally instead of crashing.
|
|
46
|
+
|
|
9
47
|
## 0.3.15 - 2026-05-19
|
|
10
48
|
### Added
|
|
11
49
|
* New `isInList` form-validator rule for enum / membership validation. Accepts a JSON array of allowed primitive values (`"isInList": ["draft", "pending", "sent", "paid"]`) and rejects field values that are not strict-equal to any list member. Lives in the shared `form-validator.js`, so the rule fires on both server-side routing validation and client-side browser enforcement. Plugs into the existing `_case_<field>` conditional resolver without special-case handling.
|
package/CONVENTIONS.md
CHANGED
|
@@ -209,7 +209,7 @@ Document all globals injected by `gna.js` with `@global` JSDoc so IDEs can disco
|
|
|
209
209
|
| Element | Convention | Example |
|
|
210
210
|
| --- | --- | --- |
|
|
211
211
|
| Files (multi-word) | dot-separated namespacing | `controller.render-json.js`, `server.isaac.js` |
|
|
212
|
-
| Files (versioned) | `.vN` suffix | `connector.v4.js`, `session-store.
|
|
212
|
+
| Files (versioned) | `.vN` suffix | `connector.v4.js`, `session-store.v4.js` |
|
|
213
213
|
| Files (kebab) | kebab-case | `link-dev.js`, `api-error.js` |
|
|
214
214
|
| Files (test) | numeric prefix + snake | `01-init_new_project.js` |
|
|
215
215
|
| Constructors | PascalCase | `SuperController`, `EntitySuper`, `CmdHelper` |
|
package/README.md
CHANGED
|
@@ -39,13 +39,17 @@ gina bundle:start api @myproject
|
|
|
39
39
|
open https://localhost:3100
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
## What's in 0.
|
|
42
|
+
## What's in 0.4.0
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
-
|
|
47
|
-
- **
|
|
48
|
-
- **
|
|
44
|
+
**Upgrading note — this is a shortVersion bump (0.3 → 0.4):** the framework creates a fresh `~/.gina/0.4/settings.json` from defaults on install, so customizations made under 0.3 (log level, port, culture, timezone, etc.) are not carried forward. Re-apply them with `gina framework:set`, or copy values across from `~/.gina/0.3/settings.json`. See the [migration guide](https://gina.io/docs/migration).
|
|
45
|
+
|
|
46
|
+
- **Breaking — Couchbase SDK v2 removed** (#CN8) — the v2 ORM connector and session store are gone; only Couchbase Node SDK **v3 and v4** are supported (defaults to v3). Migration is a driver bump, not a config change: `npm install couchbase@^4` (or `^3`). Bundles still resolving to SDK v2 fail fast at connector load with an explicit upgrade message.
|
|
47
|
+
- **Async jobs** (#AI6) — run slow work out-of-band: `self.startJob(fn)` returns a job id immediately and runs `fn` on a concurrency-limited worker; `self.inferAsync(messages, opts)` wires the AI connector through a job in one call. Poll the built-in `GET /_gina/jobs/:id` for state, or opt into a signed completion webhook. See the [Async jobs guide](https://gina.io/docs/guides/async-jobs).
|
|
48
|
+
- **HTTP/2 response trailers** (#H10) — `self.sendTrailers(fields)` before rendering emits trailing headers after the body (via the `wantTrailers` event) — useful for gRPC-style `grpc-status` or a content-integrity `Digest`. Fully opt-in: a no-op on HTTP/1.1 and when no trailers are registered. See the [native HTTP/2 guide](https://gina.io/docs/guides/http2-native).
|
|
49
|
+
- **CSP per-response nonce** (#HDR16) — `gina.plugins.Csp({ useNonce: true })` mints a fresh nonce per response, stamps the framework-injected bootstrap (and dev-Inspector) inline scripts, and exposes it to templates as `{{ page.cspNonce }}` (swig) / `{{ cspNonce }}` (nunjucks) — letting bundles drop `'unsafe-inline'` from `script-src`. Opt-in (default false). See the [CSP guide](https://gina.io/docs/guides/csp).
|
|
50
|
+
- **Inspector remote instrumentation** (#INS9b, #INS10) — an opt-in API-key gate on the dev-mode `/_gina/agent` SSE stream streams authenticated server logs outside dev; `POST /_gina/instrument` opens a time-boxed, key-authenticated window that captures query + flow timelines (JSON, XHR, and server-rendered HTML pages) over the authenticated channel without ever modifying the page HTML. See the [Inspector guide](https://gina.io/docs/guides/inspector).
|
|
51
|
+
- **`gina secrets:scan` / `secrets:check` CLI** — introspect the `${secret:KEY}` placeholders your bundle configs require; `secrets:check` marks each key SET/UNSET and exits non-zero on any missing key (CI / pre-deploy gating). `--scope=<scope>`, `--env-file=<path>`, and `--format=json` supported. See the [secrets guide](https://gina.io/docs/guides/secrets).
|
|
52
|
+
- **Inspector dev-UX + fixes** — template engine version on the View badge; Weight/Load badges and the Flow timeline restored under `Cross-Origin-Opener-Policy` and for nunjucks bundles; SQL column-level index-coverage matching (including live DB introspection). Fixes: `throwError(statusCode, Error)` now honors the explicit code; an HTTP 500 on browser-session (no-expiry) cookies; `npm install -g` hardening for npm setups that don't propagate `npm_config_global`; refreshed stale external references; `@rhinostone/swig` floor → `^2.5.1`.
|
|
49
53
|
|
|
50
54
|
See the full [Changelog](./CHANGELOG.md) and [Roadmap](./ROADMAP.md).
|
|
51
55
|
|
|
@@ -72,7 +76,7 @@ Gina is co-authored by **Martin Luther** ([Rhinostone](https://rhinostone.com))
|
|
|
72
76
|
|
|
73
77
|
## License (MIT)
|
|
74
78
|
|
|
75
|
-
Copyright © 2009-2026 [Rhinostone](
|
|
79
|
+
Copyright © 2009-2026 [Rhinostone](https://rhinostone.com)
|
|
76
80
|
|
|
77
81
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
78
82
|
of this software and associated documentation files (the "Software"), to deal
|
package/ROADMAP.md
CHANGED
|
@@ -172,11 +172,12 @@ HTTP security response headers as opt-in `gina.plugins.*` middlewares, mirroring
|
|
|
172
172
|
| ✅ | **Phase 1.5 — `X-XSS-Protection: 0` (#HDR10)** — Opt-in plugin `gina.plugins.XXssProtection()` emits the literal header `X-XSS-Protection: 0` to DISABLE Chrome's legacy XSS auditor (the auditor itself had its own vulnerabilities; disabling is the modern recommendation per MDN). **The value `0` is deliberate — not a typo**: HEADER_VALUE is the literal string `"0"`, with a negative-invariant test pinning that the value is NOT any `"1"` enable variant. No tunable options (mirrors helmet's no-opts shape + the #HDR1 XContentTypeOptions plugin shape). Use #HDR5 Csp with a strong policy for the actual XSS defense; this header is defense-in-depth + helmet-parity narrative only. Browser status in 2026: Chrome dropped the auditor in v78 (2019); Edge follows Chrome; Firefox / Safari never implemented; IE11 honoured but is EOL. Idempotent — first-writer-wins via `res.getHeader`; if an upstream middleware accidentally emits the unsafe `"1; mode=block"`, this plugin does NOT override it (mount BEFORE the upstream to win). Mirrors the #HDR1 XContentTypeOptions plugin shape (no opts, single fixed value, same `resolveSettingsDefaults` + `mergeOptions` helpers). 37 unit tests including the negative-invariant lock on no-"1"-variant + the string-not-number "0" emission lock. | `0.3.16-alpha` | 2026-05-17 |
|
|
173
173
|
| ✅ | **Phase 1.5 — `X-Download-Options: noopen` (#HDR11)** — Opt-in plugin `gina.plugins.XDownloadOptions()` emits the literal header `X-Download-Options: noopen` on every response. IE-legacy: prevents IE8+ from opening downloads in the site's security context (an old IE vulnerability shape where the "Open" button on a download dialog opened the file in the SITE's origin, allowing XSS-equivalent via downloaded HTML from a trusted site). `noopen` is the only valid value per MSDN. No tunable options (mirrors helmet's no-opts shape + the #HDR1 / #HDR10 plugin shape). Modern browsers (Chrome / Firefox / Safari / Edge) ignore the header silently; only IE10 / IE11 honour it (both EOL since June 2022). Effectively no-op in modern browsers; defense-in-depth + helmet-parity narrative. Idempotent — first-writer-wins via `res.getHeader`. Mirrors the #HDR1 XContentTypeOptions plugin shape exactly. 35 unit tests. | `0.3.16-alpha` | 2026-05-17 |
|
|
174
174
|
| ✅ | **Phase 1.5 — `X-Permitted-Cross-Domain-Policies` (#HDR12)** — Opt-in plugin `gina.plugins.XPermittedCrossDomainPolicies({ value })` emits the `X-Permitted-Cross-Domain-Policies` response header on every response. Settings: `xPermittedCrossDomainPolicies.value` is one of four Adobe spec tokens (`"none"`, `"master-only"`, `"by-content-type"`, `"all"`); default `"none"` matches helmet (most restrictive — no Flash/PDF cross-domain policy files honoured). **API-shape divergence from helmet**: helmet uses `{ permittedPolicies: <enum> }`; gina uses `{ value: <enum> }` matching the existing single-token-enum convention (HDR2 / HDR3 / HDR6 / HDR9 / HDR13 / HDR14). README documents the helmet-to-gina mapping. Mirrors the #HDR14 Corp single-enum plugin shape exactly (`resolveSettingsDefaults` + `mergeOptions` + `resolveValue` throw-on-invalid + idempotent first-writer-wins via `res.getHeader`). Flash EOL since December 2020; Adobe Reader historically honoured the header but most modern PDF readers ignore it; defense-in-depth + helmet-parity narrative. 60 unit tests including a negative-invariant lock on the helmet-shape `{ permittedPolicies }` silent-fallback (it does NOT switch the gina default — emits default `"none"`). **Closes Phase 1.5.** | `0.3.16-alpha` | 2026-05-17 |
|
|
175
|
-
| ✅ | **`Content-Security-Policy` middleware (Phase 2 — static directives)** — Opt-in plugin `gina.plugins.Csp({ directives, reportOnly })`. **Opens Phase 2** of the security-headers track. v0
|
|
175
|
+
| ✅ | **`Content-Security-Policy` middleware (Phase 2 — static directives)** — Opt-in plugin `gina.plugins.Csp({ directives, reportOnly })`. **Opens Phase 2** of the security-headers track. v0 shipped static directives only; per-response nonce support landed later as #HDR16 (see below). Strict whitelist of 27 CSP Level 3 standard directives — unknown directive names throw at factory call time (CSP typos are silent at the browser; fail-fast catches them). Value parsing accepts arrays of source-list tokens (joined with space), pre-formatted strings, `true` (boolean-only directives + `sandbox`), or `false` (omit). `reportOnly: true` emits `Content-Security-Policy-Report-Only` for non-enforcing migration testing. `directives` is required — no sensible cross-bundle default. Mirrors the HDR1-7 shape (idempotent first-writer-wins via `res.getHeader`). 92 unit tests; full suite 5768/5768. HDR6 Coep/Coop/Corp three-plugin split (per wrapper-consistency design) + HDR15 `SecurityHeaders` combined wrapper composing HDR1-7 + HDR5 + HDR6/13/14 to follow. | `0.4.0-alpha` | 2026-05-17 |
|
|
176
176
|
| ✅ | **`Cross-Origin-Embedder-Policy` (COEP) middleware (Phase 2)** — Opt-in plugin `gina.plugins.Coep({ value })`. Settings: `coep.value` is one of three W3C HTML spec tokens (`"require-corp"`, `"credentialless"`, `"unsafe-none"`); default `"require-corp"` matches helmet. Required (paired with `Coop: same-origin` / #HDR13) to enable SharedArrayBuffer and high-resolution `performance.now()` in the page. Caller options always win over settings; values are normalised to lowercase. Mirrors the #HDR3 ReferrerPolicy single-enum shape with throw-on-invalid validation. The `require-corp` default BREAKS embeds without matching CORP/CORS headers — README walks users through the three escape hatches (set CORP via #HDR14, downgrade to `credentialless`, downgrade to `unsafe-none`). Idempotent — first-writer-wins. 56 unit tests. **First of the three Phase 2 cross-origin policies**; HDR13 Coop and HDR14 Corp to follow, then HDR15 SecurityHeaders combined wrapper closes Phase 2. | `0.4.0-alpha` | 2026-05-17 |
|
|
177
177
|
| ✅ | **`Cross-Origin-Opener-Policy` (COOP) middleware (Phase 2)** — Opt-in plugin `gina.plugins.Coop({ value })`. Settings: `coop.value` is one of four W3C HTML spec tokens (`"same-origin"`, `"same-origin-allow-popups"`, `"noopener-allow-popups"`, `"unsafe-none"`); default `"same-origin"` matches helmet. Required (paired with `Coep: require-corp` / #HDR6) to enable cross-origin isolation. Same-origin isolates `window.opener` references on top-level navigation; same-origin-allow-popups is more compat-friendly for OAuth popup flows. The fourth token `noopener-allow-popups` (W3C spec addition, Chrome 119+/Firefox 131+) severs `window.opener` for popups even at same-origin while keeping the popup window open. Caller options always win over settings; values are normalised to lowercase. Mirrors the #HDR6 Coep single-enum shape. The `same-origin` default BREAKS OAuth popup flows where the popup needs to call back into the opener — README walks users through the three escape hatches. Idempotent — first-writer-wins. 61 unit tests. **Second of the three Phase 2 cross-origin policies**; HDR14 Corp follows, then HDR15 SecurityHeaders combined wrapper closes Phase 2. | `0.4.0-alpha` | 2026-05-17 |
|
|
178
178
|
| ✅ | **`Cross-Origin-Resource-Policy` (CORP) middleware (Phase 2)** — Opt-in plugin `gina.plugins.Corp({ value })`. Settings: `corp.value` is one of three W3C HTML spec tokens (`"same-origin"`, `"same-site"`, `"cross-origin"`); default `"same-origin"` matches helmet's per-middleware default. Resource-side complement to #HDR6 Coep's `require-corp` enforcement — cross-origin embeds under `Coep: require-corp` require the embed-target bundle to set `Corp: cross-origin` (or wider) to load. Most restrictive practical default; defends against side-channel attacks that load a resource cross-origin to measure size/timing for fingerprinting. Caller options always win over settings; values are normalised to lowercase. Mirrors the #HDR6 Coep + #HDR13 Coop single-enum shape. The `same-origin` default BREAKS cross-origin embeds when the resource serves at a separate origin from the embedding page — README walks users through the three escape hatches (pick `same-site` for first-party multi-subdomain setups, pick `cross-origin` for publicly-embeddable CDN assets, per-bundle scoping where the page bundle keeps strict + the CDN bundle adopts `cross-origin`). Idempotent — first-writer-wins. 60 unit tests. **Third and final of the three Phase 2 cross-origin policies**; HDR15 SecurityHeaders combined wrapper follows as the closing slice. | `0.4.0-alpha` | 2026-05-17 |
|
|
179
179
|
| ✅ | **`SecurityHeaders` combined wrapper (Phase 2 — closes #HDR + Phase 1.5 extension)** — Opt-in plugin `gina.plugins.SecurityHeaders({...})` composes the full HDR1-14 set in a single mount with one `settings.json` block (`securityHeaders.*`). **Batteries-included safe set**: calling `SecurityHeaders()` with no opts mounts the **12 non-footgun plugins** (xContentTypeOptions, xFrameOptions, referrerPolicy, hsts, originAgentCluster, hidePoweredBy, xDnsPrefetchControl, xXssProtection, xDownloadOptions, xPermittedCrossDomainPolicies, coop, corp) with per-plugin defaults. CSP (#HDR5) and COEP (#HDR6) are opt-in only (CSP throws on missing directives; COEP `require-corp` breaks embeds without CORP). Per-sub-config explicit opt-out via `<key>: false` or `null` (e.g. `SecurityHeaders({ hsts: false })` for HTTP-only bundles). Individual plugins remain mountable independently as power-user escape hatches — the idempotent first-writer-wins pattern means no double-emit when stacking. Mirrors helmet's `helmet()` orchestrator. **Originally shipped 2026-05-17 with 9 sub-plugins** (HDR1-7 + HDR5 + HDR6/13/14) closing Phase 2; **extended 2026-05-17 to 14 sub-plugins** when Phase 1.5 (HDR8-12) closed — wrapper safe-set grew from 7 to 12 plugins. 92 unit tests (was 83 + 9 for the HDR8-12 sub-config opt-out + override coverage). **Closes Phase 2 + Phase 1.5 extension.** | `0.4.0-alpha` | 2026-05-17 |
|
|
180
|
+
| ✅ | **CSP per-response nonce (`useNonce`) (#HDR16)** — `gina.plugins.Csp({ directives, useNonce: true })` (opt-in, default `false`) generates a fresh `crypto.randomBytes(16).toString('base64')` nonce per response (128-bit W3C CSP3 floor), stamps it on the per-request carrier `req._ginaCspNonce`, and appends `'nonce-<value>'` to `script-src` (fallback `default-src`; the factory throws at call time if neither directive is present). The swig + nunjucks render delegates read `req._ginaCspNonce` and set a matching `nonce="<value>"` attribute on the framework-injected `onGinaLoaded` bootstrap `<script>`, letting a bundle drop `'unsafe-inline'` from `script-src` with no application template change. `useNonce: false` keeps the static-header fast-path (header computed once at factory time, no `req` slot) — zero behaviour change for bundles that don't opt in. The nonce is generated only when gina is the header writer (idempotent first-writer-wins via `res.getHeader`), so when an upstream proxy/ingress sets CSP, header and tags stay consistent. Carrier is `req._ginaCspNonce` (NOT `res.locals` — absent in both engines; NOT `process.gina.*` — process-global), mirroring the `req._ginaProxyPrefix` precedent. The dev-only Inspector (`__ginaData` + console-capture) and metrics-patch inline blocks are nonced via the same capture in both engines (nunjucks reads a stable `local._cspNonce` slot, not volatile `local.req`, per the #M1 discipline). A follow-up exposes the nonce to templates as `{{ page.cspNonce }}` (swig) / `{{ cspNonce }}` (nunjucks) — the **application-template nonce helper** — and nonces the dev-only Inspector `statusbar.html` `<script>` through that var (`<script{% if page.cspNonce %} nonce="{{ page.cspNonce }}"{% endif %}>`); bundles can mark their own inline scripts the same way. | `0.4.0-alpha` | 2026-05-27 |
|
|
180
181
|
|
|
181
182
|
---
|
|
182
183
|
|
|
@@ -203,7 +204,7 @@ New database connectors follow the same interface as the existing Couchbase conn
|
|
|
203
204
|
| ✅ | **ScyllaDB** | `0.4.0` | Q4 2026 | Cassandra-compatible wide-column store. Client: `cassandra-driver` (Apache Software Foundation; Node.js has no first-party shard-aware driver — token-aware routing only). ORM connector + session store via CQL `USING TTL`. Implemented 2026-05-09 (#CN5). |
|
|
204
205
|
| ✅ | **MongoDB** | `0.4.0` | Q4 2026 | Document store connector. Client: `mongodb` (official driver, `>=7.0.0`). ORM connector with `pipelines/<Entity>/*.json` files (JSON body + JSDoc-style `@param`/`@return` annotations + `{$arg: N}` positional placeholders + `{$oid: <hex>}` ObjectId literals + `$scope` substitution at load time). Session store backed by a TTL index (`createIndex({expiresAt: 1}, {expireAfterSeconds: 0})` auto-created on first `set()` with one-shot guard). `get()`/`length()`/`all()` filter on `expiresAt` to protect against MongoDB's 60s TTL monitor lag. Implemented 2026-05-09 (#CN6). |
|
|
205
206
|
| ✅ | **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`. |
|
|
206
|
-
|
|
|
207
|
+
| ✅ | **Couchbase SDK v2 removal** | `0.4.0` | 2026-05-22 | `connector.v2.js` and `session-store.v2.js` removed, along with every `sdkVersion`-based v2 branch in `index.js` (consistency setup, prepared-statement builder, FTS substitution, query dispatch, and the `bulkInsert` path). The connector and session-store resolvers default to SDK v3 and fail fast with an explicit upgrade message when a project still pins `couchbase@2`. Migration is a driver bump (`npm install couchbase@^4`), not a `connectors.json` edit — `sdk.version` is derived from the installed `couchbase` npm major, never a config key. |
|
|
207
208
|
| ✅ | **`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`. |
|
|
208
209
|
| ✅ | **`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. |
|
|
209
210
|
|
|
@@ -295,7 +296,7 @@ A cold audit of the Couchbase connector identified two critical security vulnera
|
|
|
295
296
|
| --- | --- | --- | --- |
|
|
296
297
|
| ✅ | **AI connector** — Declare any LLM provider in `connectors.json` via named protocol (`anthropic://`, `openai://`, `deepseek://`, `qwen://`, `groq://`, `mistral://`, `gemini://`, `xai://`, `perplexity://`, `ollama://`). Unified `.infer(messages, options)` normaliser + raw `.client` for advanced use. | `0.3.0` | Q1 2026 |
|
|
297
298
|
| ✅ | **`renderStream` — streaming responses** — `self.renderStream(asyncIterable, contentType)` streams SSE or chunked JSON without buffering. Required for LLM token streaming without bypassing the render pipeline. | `0.3.0` | 2026-03-31 |
|
|
298
|
-
|
|
|
299
|
+
| ✅ | **Async job pattern for slow AI calls** — First-class "start job → return jobId → poll or webhook on completion" pattern, backed by the `lib/job` primitive (`self.startJob` / `self.inferAsync`, always-on `/_gina/jobs/:id` polling, opt-in completion webhook). Prevents LLM latency (1–30s) from blocking the response pipeline. | `0.4.0` | 2026-05-22 |
|
|
299
300
|
|
|
300
301
|
### Phase 3 — AI agents can consume Gina apps
|
|
301
302
|
|
|
@@ -359,8 +360,8 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
|
|
|
359
360
|
| --- | --- | --- | --- |
|
|
360
361
|
| 🔨 | **`services/src/inspector/` standalone bundle** — ~~Rename `services/src/toolbar/` to `services/src/inspector/`~~ (done). Inspector SPA as a standalone gina bundle on port 4101. Connects to bundles via authenticated WebSocket. The embedded SPA at `/_gina/inspector/` remains for quick dev-mode access. | `0.5.0` | Q1 2027 |
|
|
361
362
|
| ✅ | **Agent endpoint — dev-mode SSE (`/_gina/agent`)** — Combined data + log SSE stream. CORS, server.js + server.isaac.js (HTTP/2), Inspector SPA `tryAgent()` with `?target=` param. Named events (`event: data`, `event: log`). Manual connect form on "No source" overlay. | `0.3.0` | 2026-04-05 |
|
|
362
|
-
|
|
|
363
|
-
|
|
|
363
|
+
| 🔨 | **Agent endpoint — production auth** — **Authenticated `/_gina/agent` + production-safe toggle shipped via the existing SSE transport** (opt-in `inspector.agent.enabled` + key in `settings.json`, constant-time compare, `${secret:KEY}`-capable; key via the `x-gina-inspector-key` header or a `?key=` query param; dev stays open + keyless). Authenticates remote server-log streaming outside dev mode. Remaining: WebSocket transport (deferred — only needed for bidirectional commands). | `0.5.0` | Q1 2027 |
|
|
364
|
+
| 🔨 | **Toggleable instrumentation** — Runtime toggle for query + flow instrumentation independent of `NODE_ENV_IS_DEV`: a time-boxed, key-authenticated window (`POST /_gina/instrument`) runs capture in production over the authenticated `/_gina/agent` SSE, without full dev mode. Opt-in via `inspector.instrumentation`; 3600s hard cap with auto-revert. **v1 shipped 2026-05-26** (JSON/XHR + cross-bundle egress). Remaining: server-rendered HTML-page-render egress (follow-up). | `0.5.0` | Q1 2027 |
|
|
364
365
|
| 📋 | **Multi-bundle dashboard** — Discover all running bundles via `ports.json`, connect to each agent. Full-stack request tracing across bundle boundaries. | post-1.0.0 | — |
|
|
365
366
|
| 📋 | **Browser extension companion** — Chrome/Firefox DevTools panel. Thin UI shell connecting to the standalone Inspector via WebSocket. Optional — not a replacement. | post-1.0.0 | — |
|
|
366
367
|
|
|
@@ -383,7 +384,7 @@ Gina's built-in per-bundle inspector. Phases 1–2 ship as an embedded SPA at `/
|
|
|
383
384
|
| Status | Feature | Version | Target |
|
|
384
385
|
| --- | --- | --- | --- |
|
|
385
386
|
| 📋 | **Official website redesign + docs integration** — Refactor gina.io as a proper project homepage (landing page, feature highlights, showcase) with the documentation fully integrated. Single coherent web presence. Prerequisite: tutorials complete. | `0.4.0` | Q4 2026 |
|
|
386
|
-
|
|
|
387
|
+
| ✅ | **Docs offline ZIP** — One-click download of the complete gina.io documentation as a static HTML ZIP archive. Generated at deploy time by the Docusaurus build pipeline — no server-side logic required. Targeted at users in regions with limited or expensive internet access (offline-first for the African market). | `0.4.0` | 2026-05-22 |
|
|
387
388
|
| ✅ | **Security & CVE compliance page** — Dedicated docs page listing the HTTP/2 CVEs addressed by Gina and the Node.js version required for each mitigation. Covers CVE-2023-44487 (Rapid Reset), CVE-2024-27316 / CVE-2024-27983 (CONTINUATION flood), CVE-2019-9514 (RST flood), HPACK bomb, and server push abuse. Docs only — no code changes. | `0.3.0-alpha.1` | 2026-04-01 |
|
|
388
389
|
|
|
389
390
|
---
|
package/bin/cli
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0.4.0
|
|
Binary file
|
|
Binary file
|
package/framework/{v0.3.16-alpha.1 → v0.4.0}/core/asset/plugin/dist/vendor/gina/inspector/index.html
RENAMED
|
@@ -234,6 +234,7 @@
|
|
|
234
234
|
<div class="bm-connect-sep"><span>or connect manually</span></div>
|
|
235
235
|
<form id="bm-connect-form" class="bm-connect-form" autocomplete="off">
|
|
236
236
|
<input id="bm-connect-url" type="text" placeholder="http://localhost:3100" spellcheck="false" aria-label="Bundle URL">
|
|
237
|
+
<input id="bm-connect-key" type="password" placeholder="inspector key (optional)" spellcheck="false" autocomplete="off" aria-label="Inspector key">
|
|
237
238
|
<button type="submit" class="bm-btn bm-btn-accent">Connect</button>
|
|
238
239
|
</form>
|
|
239
240
|
</div>
|
|
@@ -1108,11 +1108,29 @@ body {
|
|
|
1108
1108
|
opacity: 0.65;
|
|
1109
1109
|
}
|
|
1110
1110
|
|
|
1111
|
+
/* Server-emitted fallback value (the dimmed first half of a dual badge).
|
|
1112
|
+
Italic + a slightly deeper dim so a value sourced from the server reads
|
|
1113
|
+
distinctly from the client-measured primary AND from the engine-version
|
|
1114
|
+
dim (.bm-vbadge-ver). Pure opacity + font-style — no color — keeps it
|
|
1115
|
+
theme-safe (no [data-theme] mirror needed). */
|
|
1116
|
+
.bm-vbadge-svr {
|
|
1117
|
+
opacity: 0.55;
|
|
1118
|
+
font-style: italic;
|
|
1119
|
+
}
|
|
1120
|
+
|
|
1111
1121
|
.bm-vbadge-sep {
|
|
1112
1122
|
margin: 0 1px;
|
|
1113
1123
|
opacity: 0.4;
|
|
1114
1124
|
}
|
|
1115
1125
|
|
|
1126
|
+
/* Engine version — dimmed, normal-case (overrides the uppercase + tracking
|
|
1127
|
+
that `.bm-vbadge-engine` applies). */
|
|
1128
|
+
.bm-vbadge-engine .bm-vbadge-ver {
|
|
1129
|
+
opacity: 0.65;
|
|
1130
|
+
text-transform: none;
|
|
1131
|
+
letter-spacing: 0;
|
|
1132
|
+
}
|
|
1133
|
+
|
|
1116
1134
|
/* Load — green tint */
|
|
1117
1135
|
.bm-vbadge-load {
|
|
1118
1136
|
color: var(--ok);
|
|
@@ -2522,6 +2540,11 @@ details[open] > summary.bm-summary::before {
|
|
|
2522
2540
|
background: rgba(239, 83, 80, 0.12);
|
|
2523
2541
|
}
|
|
2524
2542
|
|
|
2543
|
+
.bm-idx-uncovered {
|
|
2544
|
+
color: #e6b800;
|
|
2545
|
+
background: rgba(230, 184, 0, 0.12);
|
|
2546
|
+
}
|
|
2547
|
+
|
|
2525
2548
|
.bm-idx-na {
|
|
2526
2549
|
color: var(--text-dim);
|
|
2527
2550
|
opacity: 0.5;
|
|
@@ -2552,6 +2575,10 @@ details[open] > summary.bm-summary::before {
|
|
|
2552
2575
|
color: #c62828;
|
|
2553
2576
|
background: rgba(198, 40, 40, 0.1);
|
|
2554
2577
|
}
|
|
2578
|
+
[data-theme=light] .bm-idx-uncovered {
|
|
2579
|
+
color: #8a6d00;
|
|
2580
|
+
background: rgba(138, 109, 0, 0.1);
|
|
2581
|
+
}
|
|
2555
2582
|
[data-theme=light] .bm-idx-na {
|
|
2556
2583
|
color: var(--text-dim);
|
|
2557
2584
|
background: rgba(0, 0, 0, 0.05);
|
|
@@ -3613,5 +3640,3 @@ details[open] > summary.bm-summary::before {
|
|
|
3613
3640
|
text-align: left;
|
|
3614
3641
|
}
|
|
3615
3642
|
}
|
|
3616
|
-
|
|
3617
|
-
/*# sourceMappingURL=inspector.css.map */
|