@cyanautomation/kaseki-agent 1.4.1
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/.dockerignore +54 -0
- package/.eslintignore +11 -0
- package/.eslintrc.json +95 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +53 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +53 -0
- package/.github/ISSUE_TEMPLATE/security.md +51 -0
- package/.github/PULL_REQUEST_TEMPLATE/default.md +71 -0
- package/.github/dependabot.yml +38 -0
- package/.github/skills/dependency-cache-optimization/SKILL.md +526 -0
- package/.github/skills/docker-image-management/SKILL.md +532 -0
- package/.github/skills/frontend-design/SKILL.md +782 -0
- package/.github/skills/prompt-engineering/SKILL.md +360 -0
- package/.github/skills/quality-gate-config/SKILL.md +591 -0
- package/.github/skills/result-report-analysis/SKILL.md +576 -0
- package/.github/skills/test-automation/SKILL.md +593 -0
- package/.github/skills/workflow-diagnosis/SKILL.md +468 -0
- package/.github/workflows/build-docker-image.yml +453 -0
- package/.github/workflows/release.yml +68 -0
- package/.releaserc.json +135 -0
- package/CHANGELOG.md +117 -0
- package/CLAUDE.md +336 -0
- package/CONTRIBUTING.md +339 -0
- package/Dockerfile +217 -0
- package/README.md +1527 -0
- package/STYLE.md +521 -0
- package/add-js-extensions.d.ts +9 -0
- package/add-js-extensions.d.ts.map +1 -0
- package/add-js-extensions.js.map +1 -0
- package/dist/add-js-extensions.d.ts +9 -0
- package/dist/add-js-extensions.d.ts.map +1 -0
- package/dist/add-js-extensions.js +52 -0
- package/dist/add-js-extensions.js.map +1 -0
- package/dist/ansi-colors.d.ts +26 -0
- package/dist/ansi-colors.d.ts.map +1 -0
- package/dist/ansi-colors.js +51 -0
- package/dist/ansi-colors.js.map +1 -0
- package/dist/cli/BaseCommand.d.ts +18 -0
- package/dist/cli/BaseCommand.d.ts.map +1 -0
- package/dist/cli/BaseCommand.js +31 -0
- package/dist/cli/BaseCommand.js.map +1 -0
- package/dist/cli/KasekiCLI.d.ts +30 -0
- package/dist/cli/KasekiCLI.d.ts.map +1 -0
- package/dist/cli/KasekiCLI.js +134 -0
- package/dist/cli/KasekiCLI.js.map +1 -0
- package/dist/cli/commands/ConfigCommand.d.ts +13 -0
- package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
- package/dist/cli/commands/ConfigCommand.js +131 -0
- package/dist/cli/commands/ConfigCommand.js.map +1 -0
- package/dist/cli/commands/DoctorCommand.d.ts +45 -0
- package/dist/cli/commands/DoctorCommand.d.ts.map +1 -0
- package/dist/cli/commands/DoctorCommand.js +309 -0
- package/dist/cli/commands/DoctorCommand.js.map +1 -0
- package/dist/cli/commands/ListCommand.d.ts +9 -0
- package/dist/cli/commands/ListCommand.d.ts.map +1 -0
- package/dist/cli/commands/ListCommand.js +81 -0
- package/dist/cli/commands/ListCommand.js.map +1 -0
- package/dist/cli/commands/ReportCommand.d.ts +9 -0
- package/dist/cli/commands/ReportCommand.d.ts.map +1 -0
- package/dist/cli/commands/ReportCommand.js +98 -0
- package/dist/cli/commands/ReportCommand.js.map +1 -0
- package/dist/cli/commands/RunCommand.d.ts +13 -0
- package/dist/cli/commands/RunCommand.d.ts.map +1 -0
- package/dist/cli/commands/RunCommand.js +191 -0
- package/dist/cli/commands/RunCommand.js.map +1 -0
- package/dist/cli/commands/SecretsCommand.d.ts +9 -0
- package/dist/cli/commands/SecretsCommand.d.ts.map +1 -0
- package/dist/cli/commands/SecretsCommand.js +109 -0
- package/dist/cli/commands/SecretsCommand.js.map +1 -0
- package/dist/cli/commands/ServeCommand.d.ts +9 -0
- package/dist/cli/commands/ServeCommand.d.ts.map +1 -0
- package/dist/cli/commands/ServeCommand.js +50 -0
- package/dist/cli/commands/ServeCommand.js.map +1 -0
- package/dist/cli/commands/SetupCommand.d.ts +42 -0
- package/dist/cli/commands/SetupCommand.d.ts.map +1 -0
- package/dist/cli/commands/SetupCommand.js +249 -0
- package/dist/cli/commands/SetupCommand.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +130 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/ConfigManager.d.ts +395 -0
- package/dist/config/ConfigManager.d.ts.map +1 -0
- package/dist/config/ConfigManager.js +446 -0
- package/dist/config/ConfigManager.js.map +1 -0
- package/dist/docker/DockerManager.d.ts +69 -0
- package/dist/docker/DockerManager.d.ts.map +1 -0
- package/dist/docker/DockerManager.js +266 -0
- package/dist/docker/DockerManager.js.map +1 -0
- package/dist/event-aggregator.d.ts +71 -0
- package/dist/event-aggregator.d.ts.map +1 -0
- package/dist/event-aggregator.js +95 -0
- package/dist/event-aggregator.js.map +1 -0
- package/dist/github-app-token.d.ts +16 -0
- package/dist/github-app-token.d.ts.map +1 -0
- package/dist/github-app-token.js +148 -0
- package/dist/github-app-token.js.map +1 -0
- package/dist/idempotency-store.d.ts +61 -0
- package/dist/idempotency-store.d.ts.map +1 -0
- package/dist/idempotency-store.js +321 -0
- package/dist/idempotency-store.js.map +1 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/instance/InstanceManager.d.ts +81 -0
- package/dist/instance/InstanceManager.d.ts.map +1 -0
- package/dist/instance/InstanceManager.js +220 -0
- package/dist/instance/InstanceManager.js.map +1 -0
- package/dist/instance-metadata-reader.d.ts +48 -0
- package/dist/instance-metadata-reader.d.ts.map +1 -0
- package/dist/instance-metadata-reader.js +94 -0
- package/dist/instance-metadata-reader.js.map +1 -0
- package/dist/instance-state-derivation.d.ts +42 -0
- package/dist/instance-state-derivation.d.ts.map +1 -0
- package/dist/instance-state-derivation.js +133 -0
- package/dist/instance-state-derivation.js.map +1 -0
- package/dist/job-scheduler.d.ts +124 -0
- package/dist/job-scheduler.d.ts.map +1 -0
- package/dist/job-scheduler.js +992 -0
- package/dist/job-scheduler.js.map +1 -0
- package/dist/kaseki-api-client.d.ts +89 -0
- package/dist/kaseki-api-client.d.ts.map +1 -0
- package/dist/kaseki-api-client.js +405 -0
- package/dist/kaseki-api-client.js.map +1 -0
- package/dist/kaseki-api-config.d.ts +34 -0
- package/dist/kaseki-api-config.d.ts.map +1 -0
- package/dist/kaseki-api-config.js +113 -0
- package/dist/kaseki-api-config.js.map +1 -0
- package/dist/kaseki-api-routes.d.ts +13 -0
- package/dist/kaseki-api-routes.d.ts.map +1 -0
- package/dist/kaseki-api-routes.js +559 -0
- package/dist/kaseki-api-routes.js.map +1 -0
- package/dist/kaseki-api-service-wrapper.d.ts +43 -0
- package/dist/kaseki-api-service-wrapper.d.ts.map +1 -0
- package/dist/kaseki-api-service-wrapper.js +150 -0
- package/dist/kaseki-api-service-wrapper.js.map +1 -0
- package/dist/kaseki-api-service.d.ts +16 -0
- package/dist/kaseki-api-service.d.ts.map +1 -0
- package/dist/kaseki-api-service.js +143 -0
- package/dist/kaseki-api-service.js.map +1 -0
- package/dist/kaseki-api-types.d.ts +440 -0
- package/dist/kaseki-api-types.d.ts.map +1 -0
- package/dist/kaseki-api-types.js +64 -0
- package/dist/kaseki-api-types.js.map +1 -0
- package/dist/kaseki-cli-lib.d.ts +219 -0
- package/dist/kaseki-cli-lib.d.ts.map +1 -0
- package/dist/kaseki-cli-lib.js +523 -0
- package/dist/kaseki-cli-lib.js.map +1 -0
- package/dist/kaseki-cli.d.ts +38 -0
- package/dist/kaseki-cli.d.ts.map +1 -0
- package/dist/kaseki-cli.js +559 -0
- package/dist/kaseki-cli.js.map +1 -0
- package/dist/kaseki-report.d.ts +3 -0
- package/dist/kaseki-report.d.ts.map +1 -0
- package/dist/kaseki-report.js +140 -0
- package/dist/kaseki-report.js.map +1 -0
- package/dist/lib/subprocess-helpers.d.ts +98 -0
- package/dist/lib/subprocess-helpers.d.ts.map +1 -0
- package/dist/lib/subprocess-helpers.js +136 -0
- package/dist/lib/subprocess-helpers.js.map +1 -0
- package/dist/logger.d.ts +39 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +79 -0
- package/dist/logger.js.map +1 -0
- package/dist/metrics.d.ts +19 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +59 -0
- package/dist/metrics.js.map +1 -0
- package/dist/middleware/job-lookup.d.ts +27 -0
- package/dist/middleware/job-lookup.d.ts.map +1 -0
- package/dist/middleware/job-lookup.js +28 -0
- package/dist/middleware/job-lookup.js.map +1 -0
- package/dist/pi-event-filter.d.ts +3 -0
- package/dist/pi-event-filter.d.ts.map +1 -0
- package/dist/pi-event-filter.js +126 -0
- package/dist/pi-event-filter.js.map +1 -0
- package/dist/pi-progress-stream.d.ts +3 -0
- package/dist/pi-progress-stream.d.ts.map +1 -0
- package/dist/pi-progress-stream.js +205 -0
- package/dist/pi-progress-stream.js.map +1 -0
- package/dist/pi-progress-summarizer.d.ts +61 -0
- package/dist/pi-progress-summarizer.d.ts.map +1 -0
- package/dist/pi-progress-summarizer.js +246 -0
- package/dist/pi-progress-summarizer.js.map +1 -0
- package/dist/pre-flight-validator.d.ts +72 -0
- package/dist/pre-flight-validator.d.ts.map +1 -0
- package/dist/pre-flight-validator.js +513 -0
- package/dist/pre-flight-validator.js.map +1 -0
- package/dist/progress-stream-utils.d.ts +3 -0
- package/dist/progress-stream-utils.d.ts.map +1 -0
- package/dist/progress-stream-utils.js +15 -0
- package/dist/progress-stream-utils.js.map +1 -0
- package/dist/result-cache.d.ts +52 -0
- package/dist/result-cache.d.ts.map +1 -0
- package/dist/result-cache.js +134 -0
- package/dist/result-cache.js.map +1 -0
- package/dist/routes/artifact-routes.d.ts +10 -0
- package/dist/routes/artifact-routes.d.ts.map +1 -0
- package/dist/routes/artifact-routes.js +126 -0
- package/dist/routes/artifact-routes.js.map +1 -0
- package/dist/routes/log-routes.d.ts +8 -0
- package/dist/routes/log-routes.d.ts.map +1 -0
- package/dist/routes/log-routes.js +345 -0
- package/dist/routes/log-routes.js.map +1 -0
- package/dist/routes/status-routes.d.ts +8 -0
- package/dist/routes/status-routes.d.ts.map +1 -0
- package/dist/routes/status-routes.js +82 -0
- package/dist/routes/status-routes.js.map +1 -0
- package/dist/routes/webhook-routes.d.ts +6 -0
- package/dist/routes/webhook-routes.d.ts.map +1 -0
- package/dist/routes/webhook-routes.js +86 -0
- package/dist/routes/webhook-routes.js.map +1 -0
- package/dist/run-artifact-metadata-cache.d.ts +42 -0
- package/dist/run-artifact-metadata-cache.d.ts.map +1 -0
- package/dist/run-artifact-metadata-cache.js +139 -0
- package/dist/run-artifact-metadata-cache.js.map +1 -0
- package/dist/secret-value-cache.d.ts +13 -0
- package/dist/secret-value-cache.d.ts.map +1 -0
- package/dist/secret-value-cache.js +44 -0
- package/dist/secret-value-cache.js.map +1 -0
- package/dist/secrets/SecretsManager.d.ts +80 -0
- package/dist/secrets/SecretsManager.d.ts.map +1 -0
- package/dist/secrets/SecretsManager.js +306 -0
- package/dist/secrets/SecretsManager.js.map +1 -0
- package/dist/test-utils.d.ts +55 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/test-utils.js +48 -0
- package/dist/test-utils.js.map +1 -0
- package/dist/timestamp-tracker.d.ts +75 -0
- package/dist/timestamp-tracker.d.ts.map +1 -0
- package/dist/timestamp-tracker.js +121 -0
- package/dist/timestamp-tracker.js.map +1 -0
- package/dist/utils/failure-artifact-writer.d.ts +29 -0
- package/dist/utils/failure-artifact-writer.d.ts.map +1 -0
- package/dist/utils/failure-artifact-writer.js +157 -0
- package/dist/utils/failure-artifact-writer.js.map +1 -0
- package/dist/utils/file-helpers.d.ts +41 -0
- package/dist/utils/file-helpers.d.ts.map +1 -0
- package/dist/utils/file-helpers.js +143 -0
- package/dist/utils/file-helpers.js.map +1 -0
- package/dist/utils/http-client-factory.d.ts +46 -0
- package/dist/utils/http-client-factory.d.ts.map +1 -0
- package/dist/utils/http-client-factory.js +114 -0
- package/dist/utils/http-client-factory.js.map +1 -0
- package/dist/utils/progress-normalizer.d.ts +13 -0
- package/dist/utils/progress-normalizer.d.ts.map +1 -0
- package/dist/utils/progress-normalizer.js +57 -0
- package/dist/utils/progress-normalizer.js.map +1 -0
- package/dist/utils/response-helpers.d.ts +34 -0
- package/dist/utils/response-helpers.d.ts.map +1 -0
- package/dist/utils/response-helpers.js +78 -0
- package/dist/utils/response-helpers.js.map +1 -0
- package/dist/utils/route-helpers.d.ts +17 -0
- package/dist/utils/route-helpers.d.ts.map +1 -0
- package/dist/utils/route-helpers.js +22 -0
- package/dist/utils/route-helpers.js.map +1 -0
- package/dist/utils/status-response-builder.d.ts +23 -0
- package/dist/utils/status-response-builder.d.ts.map +1 -0
- package/dist/utils/status-response-builder.js +144 -0
- package/dist/utils/status-response-builder.js.map +1 -0
- package/dist/utils/type-guards.d.ts +37 -0
- package/dist/utils/type-guards.d.ts.map +1 -0
- package/dist/utils/type-guards.js +45 -0
- package/dist/utils/type-guards.js.map +1 -0
- package/dist/utils/utf8-helpers.d.ts +32 -0
- package/dist/utils/utf8-helpers.d.ts.map +1 -0
- package/dist/utils/utf8-helpers.js +97 -0
- package/dist/utils/utf8-helpers.js.map +1 -0
- package/dist/utils/webhook-event-builder.d.ts +26 -0
- package/dist/utils/webhook-event-builder.d.ts.map +1 -0
- package/dist/utils/webhook-event-builder.js +77 -0
- package/dist/utils/webhook-event-builder.js.map +1 -0
- package/dist/webhook-manager.d.ts +56 -0
- package/dist/webhook-manager.d.ts.map +1 -0
- package/dist/webhook-manager.js +359 -0
- package/dist/webhook-manager.js.map +1 -0
- package/docker/workspace-cache/package-lock.json +13 -0
- package/docker/workspace-cache/package.json +7 -0
- package/docker-compose.yml +53 -0
- package/docs/API.md +708 -0
- package/docs/BACKLOG.md +19 -0
- package/docs/BUILD_STRATEGY.md +404 -0
- package/docs/CLI.md +569 -0
- package/docs/DEPLOYMENT.md +521 -0
- package/docs/DEVELOPMENT.md +459 -0
- package/docs/DOCKER_SETUP.md +522 -0
- package/docs/ENHANCED_PROGRESS_LOGS.md +264 -0
- package/docs/IMPLEMENTATION_SUMMARY.md +549 -0
- package/docs/INTEGRATION_EXAMPLE.md +217 -0
- package/docs/NPM_SETUP.md +468 -0
- package/docs/PHASE1-4_IMPLEMENTATION.md +302 -0
- package/docs/PHASE1_COMPLETION.md +192 -0
- package/docs/PHASE2_COMPLETION.md +134 -0
- package/docs/PHASE6_MIGRATION.md +392 -0
- package/docs/PRINTF_SAFETY_FIX.md +282 -0
- package/docs/QUALITY_GATES.md +369 -0
- package/docs/SETUP_GUIDE.md +482 -0
- package/docs/TASK_PROMPT_TEMPLATES.md +533 -0
- package/docs/VALIDATION_FIX.md +139 -0
- package/docs/VERIFICATION_CHECKLIST.md +335 -0
- package/docs/repo-maturity.md +760 -0
- package/fix-tests.d.ts +9 -0
- package/fix-tests.d.ts.map +1 -0
- package/fix-tests.js.map +1 -0
- package/fix-tests.ts +53 -0
- package/jest.config.ts +31 -0
- package/kaseki +183 -0
- package/kaseki-agent.sh +1961 -0
- package/ops/logrotate/kaseki +10 -0
- package/package.json +83 -0
- package/perf/README.md +54 -0
- package/perf/pi-event-filter.benchmark.test.ts +98 -0
- package/run-kaseki-json.test.sh +106 -0
- package/run-kaseki.sh +990 -0
- package/scripts/allowlist-helper.sh +56 -0
- package/scripts/cleanup-kaseki.sh +168 -0
- package/scripts/deploy-pi-template.sh +293 -0
- package/scripts/docker-entrypoint.sh +71 -0
- package/scripts/dry-run-allowlist.sh +161 -0
- package/scripts/kaseki-activate.sh +396 -0
- package/scripts/kaseki-api.service +62 -0
- package/scripts/kaseki-container-entrypoint-wrapper.sh +119 -0
- package/scripts/kaseki-container-setup-remote.sh +172 -0
- package/scripts/kaseki-container-setup.sh +193 -0
- package/scripts/kaseki-healthcheck.sh +95 -0
- package/scripts/kaseki-install.sh +50 -0
- package/scripts/kaseki-maturity-score.sh +291 -0
- package/scripts/kaseki-performance-metrics.sh +122 -0
- package/scripts/kaseki-preflight.sh +270 -0
- package/scripts/kaseki-setup.sh +265 -0
- package/scripts/pi-setup-remote.sh +213 -0
- package/scripts/setup-github-labels.sh +42 -0
- package/scripts/suggest-allowlist.sh +68 -0
- package/scripts/templates/MULTI_HOST_DISTRIBUTED.md +337 -0
- package/scripts/templates/REST_API_SERVICE.md +490 -0
- package/scripts/templates/SINGLE_HOST_CLI.md +194 -0
- package/scripts/test-github-app.sh +248 -0
- package/src/add-js-extensions.ts +61 -0
- package/src/ansi-colors.test.ts +62 -0
- package/src/ansi-colors.ts +67 -0
- package/src/cli/BaseCommand.ts +40 -0
- package/src/cli/KasekiCLI.ts +154 -0
- package/src/cli/commands/ConfigCommand.ts +145 -0
- package/src/cli/commands/DoctorCommand.ts +329 -0
- package/src/cli/commands/ListCommand.ts +105 -0
- package/src/cli/commands/ReportCommand.ts +110 -0
- package/src/cli/commands/RunCommand.ts +218 -0
- package/src/cli/commands/SecretsCommand.ts +120 -0
- package/src/cli/commands/ServeCommand.ts +62 -0
- package/src/cli/commands/SetupCommand.ts +301 -0
- package/src/cli.ts +138 -0
- package/src/config/ConfigManager.ts +476 -0
- package/src/docker/DockerManager.ts +319 -0
- package/src/docker-entrypoint-packaging.test.ts +33 -0
- package/src/event-aggregator.test.ts +117 -0
- package/src/event-aggregator.ts +126 -0
- package/src/github-app-token.ts +215 -0
- package/src/idempotency-store.test.ts +117 -0
- package/src/idempotency-store.ts +385 -0
- package/src/index.ts +89 -0
- package/src/instance/InstanceManager.ts +285 -0
- package/src/instance-metadata-reader.test.ts +190 -0
- package/src/instance-metadata-reader.ts +129 -0
- package/src/instance-state-derivation.test.ts +263 -0
- package/src/instance-state-derivation.ts +148 -0
- package/src/job-scheduler.test.ts +1236 -0
- package/src/job-scheduler.ts +1117 -0
- package/src/kaseki-api-client.ts +488 -0
- package/src/kaseki-api-config.test.ts +315 -0
- package/src/kaseki-api-config.ts +175 -0
- package/src/kaseki-api-routes.test.ts +1615 -0
- package/src/kaseki-api-routes.ts +643 -0
- package/src/kaseki-api-service-wrapper.ts +188 -0
- package/src/kaseki-api-service.test.ts +418 -0
- package/src/kaseki-api-service.ts +192 -0
- package/src/kaseki-api-types.ts +320 -0
- package/src/kaseki-cli-lib.test.ts +552 -0
- package/src/kaseki-cli-lib.ts +760 -0
- package/src/kaseki-cli.ts +682 -0
- package/src/kaseki-report.test.ts +118 -0
- package/src/kaseki-report.ts +192 -0
- package/src/lib/subprocess-helpers.ts +177 -0
- package/src/logger.ts +114 -0
- package/src/metrics.ts +66 -0
- package/src/middleware/job-lookup.test.ts +113 -0
- package/src/middleware/job-lookup.ts +45 -0
- package/src/pi-event-filter.test.ts +183 -0
- package/src/pi-event-filter.ts +183 -0
- package/src/pi-progress-stream.ts +287 -0
- package/src/pi-progress-summarizer.test.ts +302 -0
- package/src/pi-progress-summarizer.ts +287 -0
- package/src/pre-flight-validator.test.ts +512 -0
- package/src/pre-flight-validator.ts +618 -0
- package/src/progress-stream-utils.test.ts +35 -0
- package/src/progress-stream-utils.ts +14 -0
- package/src/result-cache.test.ts +195 -0
- package/src/result-cache.ts +181 -0
- package/src/routes/artifact-routes.ts +169 -0
- package/src/routes/log-routes.ts +391 -0
- package/src/routes/status-routes.ts +92 -0
- package/src/routes/webhook-routes.ts +97 -0
- package/src/run-artifact-metadata-cache.test.ts +80 -0
- package/src/run-artifact-metadata-cache.ts +184 -0
- package/src/secret-value-cache.test.ts +66 -0
- package/src/secret-value-cache.ts +55 -0
- package/src/secrets/SecretsManager.ts +343 -0
- package/src/test-utils.ts +81 -0
- package/src/timestamp-tracker.test.ts +134 -0
- package/src/timestamp-tracker.ts +132 -0
- package/src/utils/failure-artifact-writer.ts +187 -0
- package/src/utils/file-helpers.test.ts +235 -0
- package/src/utils/file-helpers.ts +150 -0
- package/src/utils/http-client-factory.test.ts +245 -0
- package/src/utils/http-client-factory.ts +157 -0
- package/src/utils/progress-normalizer.test.ts +442 -0
- package/src/utils/progress-normalizer.ts +68 -0
- package/src/utils/response-helpers.test.ts +122 -0
- package/src/utils/response-helpers.ts +101 -0
- package/src/utils/route-helpers.ts +30 -0
- package/src/utils/status-response-builder.ts +159 -0
- package/src/utils/type-guards.ts +52 -0
- package/src/utils/utf8-helpers.ts +102 -0
- package/src/utils/webhook-event-builder.test.ts +143 -0
- package/src/utils/webhook-event-builder.ts +87 -0
- package/src/webhook-manager.test.ts +152 -0
- package/src/webhook-manager.ts +445 -0
- package/templates/allowlist-api-route.txt +7 -0
- package/templates/allowlist-comprehensive.txt +8 -0
- package/templates/allowlist-parser-fix.txt +6 -0
- package/templates/allowlist-ui-component.txt +9 -0
- package/templates/allowlist-utility.txt +9 -0
- package/test/actual-model-metadata.test.sh +102 -0
- package/test/dry-run.test.sh +131 -0
- package/test/fixtures/kaseki-report-exit-codes/metadata-exit-0.json +1 -0
- package/test/fixtures/kaseki-report-exit-codes/metadata-exit-1.json +1 -0
- package/test/fixtures/kaseki-report-exit-codes/metadata-exit-invalid.json +1 -0
- package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-0.json +1 -0
- package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-1.json +1 -0
- package/test/kaseki-api.integration.test.sh +165 -0
- package/test/pi-event-filter-failure.test.sh +83 -0
- package/test/printf-safety-focused.test.sh +99 -0
- package/test/printf-safety-results/results/restoration.jsonl +10 -0
- package/test/printf-safety-results/results/test.jsonl +0 -0
- package/test/printf-safety.test.sh +297 -0
- package/test/validation-fix.test.sh +79 -0
- package/test/validation-integration.test.sh +109 -0
- package/tests/allowlist-glob.test.sh +61 -0
- package/tests/dependency-cache-key.test.sh +48 -0
- package/tests/dependency-restore-mode.test.sh +48 -0
- package/tests/doctor-template-parity.test.sh +95 -0
- package/tests/github-operations.test.sh +142 -0
- package/tests/npm-install-flags.test.sh +58 -0
- package/tests/quality-gates.test.sh +178 -0
- package/tests/repo-memory.test.sh +103 -0
- package/tests/restore-disallowed-changes.test.sh +80 -0
- package/tests/validation-missing-npm-scripts.test.sh +93 -0
- package/tests/validation-strict-mode.test.sh +118 -0
- package/tsconfig.changed.json +7 -0
- package/tsconfig.json +39 -0
package/docs/BACKLOG.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Backlog
|
|
2
|
+
|
|
3
|
+
## TypeScript debt burn-down to restore full blocking type-check
|
|
4
|
+
|
|
5
|
+
- **Status:** Open
|
|
6
|
+
- **Owner:** Engineering
|
|
7
|
+
- **Created:** 2026-05-02
|
|
8
|
+
- **Goal:** Reduce and eliminate full-project TypeScript errors so `npm run type-check:full` can be promoted from informational to required CI gating.
|
|
9
|
+
|
|
10
|
+
### Acceptance criteria
|
|
11
|
+
|
|
12
|
+
1. `npm run type-check:full` passes on `main` with zero TypeScript errors.
|
|
13
|
+
2. CI updates `type-check:full` from non-blocking informational to blocking for pull requests.
|
|
14
|
+
3. Any temporary suppressions added during burn-down are removed or documented with owner + expiry.
|
|
15
|
+
|
|
16
|
+
### Notes
|
|
17
|
+
|
|
18
|
+
- Pull request gating currently uses `npm run type-check:changed`.
|
|
19
|
+
- Full-project type-check is still executed and reported as an artifact to measure baseline progress.
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
# Docker Build Strategy for Kaseki Agent
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
This document describes the Docker image build architecture for `kaseki-agent`, including the multi-stage build strategy, caching optimization, security hardening, and CI/CD pipeline design.
|
|
6
|
+
|
|
7
|
+
**Current Status**: Node v24, bookworm-slim, optimized multi-stage build with consolidated RUN layers.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Multi-Stage Build Architecture
|
|
12
|
+
|
|
13
|
+
The Dockerfile uses a **two-stage build** pattern to optimize image size and build caching:
|
|
14
|
+
|
|
15
|
+
### Stage 1: `deps` (Dependencies)
|
|
16
|
+
|
|
17
|
+
- **Base**: `node:24-bookworm-slim`
|
|
18
|
+
- **Purpose**: Build Pi CLI agent and prepare workspace cache seed
|
|
19
|
+
- **Artifacts**:
|
|
20
|
+
- Global Pi CLI installation (`@earendil-works/pi-coding-agent@0.74.0`)
|
|
21
|
+
- Pre-built Node modules cache seed
|
|
22
|
+
- **Why separate**: Enables aggressive caching; these dependencies rarely change
|
|
23
|
+
|
|
24
|
+
### Stage 2: `runtime` (Application)
|
|
25
|
+
|
|
26
|
+
- **Base**: `node:24-bookworm-slim` (fresh base)
|
|
27
|
+
- **Purpose**: Build and package kaseki-agent application
|
|
28
|
+
- **Artifacts**:
|
|
29
|
+
- Compiled TypeScript (dist/)
|
|
30
|
+
- Installed binaries (/usr/local/bin/)
|
|
31
|
+
- Entrypoint script
|
|
32
|
+
- **Why separate**: Isolates application code changes from dependency changes; allows deps stage to be cached independently
|
|
33
|
+
|
|
34
|
+
### Layer Consolidation
|
|
35
|
+
|
|
36
|
+
**Multiple RUN statements consolidated into fewer layers**:
|
|
37
|
+
|
|
38
|
+
- Deps setup: 5 RUN → 2 RUN (apt install + user setup in one layer)
|
|
39
|
+
- Runtime setup: 4 RUN → 1 RUN (all binary installation/chmod in single layer)
|
|
40
|
+
- **Benefit**: Reduces Docker layer count from 25+ to 19; faster build times and smaller final image
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Caching Strategy
|
|
45
|
+
|
|
46
|
+
### GitHub Actions Cache
|
|
47
|
+
|
|
48
|
+
**Current Configuration**:
|
|
49
|
+
|
|
50
|
+
```yaml
|
|
51
|
+
cache-from: type=gha,scope=${{ github.ref_name }}
|
|
52
|
+
cache-to: type=gha,scope=${{ github.ref_name }},mode=max
|
|
53
|
+
provenance: true
|
|
54
|
+
sbom: true
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**How it works**:
|
|
58
|
+
|
|
59
|
+
1. Each branch maintains its own cache scope (e.g., `main`, `feature/branch`)
|
|
60
|
+
2. Buildx stores layer cache in GitHub Actions cache storage (~10GB per repo)
|
|
61
|
+
3. Subsequent builds on the same branch reuse layers (80-90% cache hit expected)
|
|
62
|
+
4. Provenance and SBOM are generated for supply chain visibility
|
|
63
|
+
|
|
64
|
+
### Expected Cache Hit Rates
|
|
65
|
+
|
|
66
|
+
| Scenario | Hit Rate | Why |
|
|
67
|
+
|----------|----------|-----|
|
|
68
|
+
| Same commit (rebuild) | ~100% | Identical layers |
|
|
69
|
+
| Same branch (new commit) | 80-90% | Most deps unchanged |
|
|
70
|
+
| Different branch (same base) | 40-50% | Shared base image layers, but branch-specific code |
|
|
71
|
+
| After base image update | <10% | Base image invalidates all downstream layers |
|
|
72
|
+
|
|
73
|
+
### Cache Invalidation Triggers
|
|
74
|
+
|
|
75
|
+
Cache is automatically invalidated when:
|
|
76
|
+
|
|
77
|
+
1. **Node base image changes** (monthly security updates planned)
|
|
78
|
+
2. **package-lock.json changes** (npm install layer)
|
|
79
|
+
3. **src/** changes (TypeScript compilation layer)
|
|
80
|
+
4. **GitHub branch is different** (cache scoped by branch)
|
|
81
|
+
|
|
82
|
+
### Cache Performance Baseline (May 2026)
|
|
83
|
+
|
|
84
|
+
From local testing with docker build:
|
|
85
|
+
|
|
86
|
+
- **Cold build** (no cache): ~30-35 seconds
|
|
87
|
+
- Base image pull + layer extraction: ~5-10s
|
|
88
|
+
- npm ci + npm run build: ~12-15s
|
|
89
|
+
- Binary installation: ~2-3s
|
|
90
|
+
- **Warm build** (cached layers): ~5-8 seconds
|
|
91
|
+
- Cache hit on all deps/node_modules layers
|
|
92
|
+
- Only TypeScript recompile if src/ changed
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## Security Hardening
|
|
97
|
+
|
|
98
|
+
### Container Runtime Security
|
|
99
|
+
|
|
100
|
+
**Read-only filesystem**:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
docker run --read-only --tmpfs /tmp:rw,nosuid,nodev,size=256m ...
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- Application cannot modify container filesystem
|
|
107
|
+
- Only /tmp is writable (limited to 256MB, with security restrictions)
|
|
108
|
+
|
|
109
|
+
**Capability dropping**:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
--cap-drop ALL
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
- Removes all Linux capabilities (no network, process, filesystem privileges)
|
|
116
|
+
- Kaseki agent runs with minimal privilege surface
|
|
117
|
+
|
|
118
|
+
**Non-root user**:
|
|
119
|
+
|
|
120
|
+
```dockerfile
|
|
121
|
+
USER kaseki # UID 10001
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
- Application runs as unprivileged user (not root)
|
|
125
|
+
- Prevents privilege escalation if exploit occurs
|
|
126
|
+
|
|
127
|
+
### Base Image Security
|
|
128
|
+
|
|
129
|
+
**Node.js base image** (`node:24-bookworm-slim`):
|
|
130
|
+
|
|
131
|
+
- Regular security updates (monthly planned)
|
|
132
|
+
- Debian bookworm-slim: minimal base (excludes build tools, docs)
|
|
133
|
+
- See [SECURITY.md](../SECURITY.md) for vulnerability response procedures
|
|
134
|
+
|
|
135
|
+
**Pi CLI Agent Security**:
|
|
136
|
+
|
|
137
|
+
- Pinned to specific version (0.70.2) to ensure reproducible builds
|
|
138
|
+
- Pre-installed globally in deps stage (immutable in runtime stage)
|
|
139
|
+
- Telemetry disabled (`PI_TELEMETRY=0`)
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## Build Performance Optimization
|
|
144
|
+
|
|
145
|
+
### Dockerfile Optimization Checklist
|
|
146
|
+
|
|
147
|
+
✅ **Consolidated RUN commands**: Multiple apt/user/chmod operations merged into single layers
|
|
148
|
+
✅ **Optimal COPY placement**: Source files copied last (after dependencies) to maximize cache hits
|
|
149
|
+
✅ **Minimal build context**: `.dockerignore` uses allowlist approach (only explicit files included)
|
|
150
|
+
✅ **Dependency caching**: Pi CLI and npm modules pre-cached in deps stage
|
|
151
|
+
|
|
152
|
+
### Workspace Dependency Cache
|
|
153
|
+
|
|
154
|
+
A separate cache seeding mechanism (`docker/workspace-cache/`) pre-builds node_modules for fast runtime:
|
|
155
|
+
|
|
156
|
+
- Kaski container instances use cached dependencies to avoid repeated npm install
|
|
157
|
+
- See [DEVELOPMENT.md](DEVELOPMENT.md) for kaseki-agent.sh dependency caching strategy
|
|
158
|
+
- Expected time savings: 20-30 seconds per kaseki run when cache is warm
|
|
159
|
+
|
|
160
|
+
### CI/CD Pipeline Optimization (May 2026)
|
|
161
|
+
|
|
162
|
+
**Job Parallelization**:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
type_check_changed (blocking)
|
|
166
|
+
↓
|
|
167
|
+
[checks, type_check_full] (parallel, ~2 min savings)
|
|
168
|
+
↓
|
|
169
|
+
build (multi-arch amd64 + arm64)
|
|
170
|
+
↓
|
|
171
|
+
[scan, verify] (parallel)
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Expected workflow duration**:
|
|
175
|
+
|
|
176
|
+
- Before optimization: ~18-22 minutes
|
|
177
|
+
- After optimization: ~15-18 minutes (2-4 min savings)
|
|
178
|
+
- Cache hit reduces build time: -8-10 seconds per amd64 build
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## Base Image Management
|
|
183
|
+
|
|
184
|
+
### Node v24 Decision
|
|
185
|
+
|
|
186
|
+
**When updated**: May 2026
|
|
187
|
+
**Why Node v24**:
|
|
188
|
+
|
|
189
|
+
- Stable LTS release with long support window
|
|
190
|
+
- Performance improvements over Node 22
|
|
191
|
+
- Full npm v10+ compatibility
|
|
192
|
+
|
|
193
|
+
### Monthly Security Review Process
|
|
194
|
+
|
|
195
|
+
1. **Check Node.js security advisories** (<https://nodejs.org/en/security>)
|
|
196
|
+
2. **Review base image CVEs** (bookworm-slim, Debian security)
|
|
197
|
+
3. **Test locally**:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
docker build -t kaseki-agent:test .
|
|
201
|
+
docker run --rm kaseki-agent:test node --version
|
|
202
|
+
docker run --rm kaseki-agent:test pi --version
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
4. **Update Dockerfile** with new pinned base image (if security patches available)
|
|
206
|
+
5. **Trigger full CI pipeline** (workflow_dispatch)
|
|
207
|
+
6. **Document in CLAUDE.md** and git commit message
|
|
208
|
+
|
|
209
|
+
### Node Version Upgrade Path
|
|
210
|
+
|
|
211
|
+
For future Node version upgrades:
|
|
212
|
+
|
|
213
|
+
| From | To | Risk | Action |
|
|
214
|
+
|------|----|----|--------|
|
|
215
|
+
| 24 → 24.x | Low | Patch update; keep same tag | Direct update |
|
|
216
|
+
| 24 → 24.next | Medium | Minor version; test thoroughly | Test locally, then update |
|
|
217
|
+
| 24 → 26 | High | Major version; breaking changes possible | Full regression test suite |
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
## Troubleshooting Build Issues
|
|
222
|
+
|
|
223
|
+
### Cache Miss on CI/CD
|
|
224
|
+
|
|
225
|
+
**Symptom**: Build takes much longer than expected (~30s instead of ~10s)
|
|
226
|
+
|
|
227
|
+
**Diagnosis**:
|
|
228
|
+
|
|
229
|
+
1. Check GitHub Actions cache: Settings → Actions → Caches
|
|
230
|
+
2. Look for scope matching `${{ github.ref_name }}` (e.g., `main`, `feature/xyz`)
|
|
231
|
+
|
|
232
|
+
**Solutions**:
|
|
233
|
+
|
|
234
|
+
- New branch: First build always cold; subsequent builds use cache
|
|
235
|
+
- CI cache eviction: GitHub removes cache after 7 days of no access
|
|
236
|
+
- Large PR: Different base can cause cache misses; merge main first
|
|
237
|
+
|
|
238
|
+
### Build Failure After Base Image Update
|
|
239
|
+
|
|
240
|
+
**Symptom**: Docker build fails on package installation or system dependency
|
|
241
|
+
|
|
242
|
+
**Diagnosis**:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
docker build -t kaseki-agent:test . 2>&1 | grep -A5 "E:"
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
**Solutions**:
|
|
249
|
+
|
|
250
|
+
- Check Dockerfile apt-get line for typos
|
|
251
|
+
- Test locally with new base image before committing
|
|
252
|
+
- Verify bookworm-slim package availability (use `apt-cache search`)
|
|
253
|
+
|
|
254
|
+
### Multi-arch Build Failure
|
|
255
|
+
|
|
256
|
+
**Symptom**: amd64 builds succeed, but arm64 fails with QEMU error
|
|
257
|
+
|
|
258
|
+
**Diagnosis**:
|
|
259
|
+
|
|
260
|
+
- QEMU emulation issues (rare on GitHub runners)
|
|
261
|
+
- Incompatible binary or architecture-specific code
|
|
262
|
+
|
|
263
|
+
**Solutions**:
|
|
264
|
+
|
|
265
|
+
- Retry workflow (transient QEMU issue)
|
|
266
|
+
- Use `docker run --platform linux/arm64 --rm <image>` to test locally (slow)
|
|
267
|
+
- Fallback to amd64-only builds temporarily
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
## Vulnerability Scanning
|
|
272
|
+
|
|
273
|
+
### Trivy Scanning Integration
|
|
274
|
+
|
|
275
|
+
**Three-scan strategy**:
|
|
276
|
+
|
|
277
|
+
1. **HIGH/CRITICAL only** → GitHub Security tab
|
|
278
|
+
- File: `trivy-results.sarif`
|
|
279
|
+
- Frequency: Every build
|
|
280
|
+
- Action: Block merge if HIGH/CRITICAL found
|
|
281
|
+
|
|
282
|
+
2. **All severities** → Artifact storage
|
|
283
|
+
- File: `trivy-results-all.json`
|
|
284
|
+
- Retention: 30 days
|
|
285
|
+
- Purpose: Audit trail, trend analysis
|
|
286
|
+
|
|
287
|
+
3. **SBOM generation** → Artifact storage
|
|
288
|
+
- File: `sbom-spdx.json` (SPDX JSON format)
|
|
289
|
+
- Retention: 30 days
|
|
290
|
+
- Purpose: Supply chain compliance, license tracking
|
|
291
|
+
|
|
292
|
+
### Known Vulnerabilities
|
|
293
|
+
|
|
294
|
+
Check GitHub → Settings → Code security → Dependabot alerts for any discovered CVEs.
|
|
295
|
+
|
|
296
|
+
**Typical sources** (transitive dependencies):
|
|
297
|
+
|
|
298
|
+
- Pi CLI dependencies (usually addressed via version updates)
|
|
299
|
+
- Node.js base image vulnerabilities (patched monthly)
|
|
300
|
+
|
|
301
|
+
**Response procedure**: See [SECURITY.md](../SECURITY.md)
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## Build Artifacts & Outputs
|
|
306
|
+
|
|
307
|
+
### What's Inside the Image
|
|
308
|
+
|
|
309
|
+
**Binaries** (in `/usr/local/bin`):
|
|
310
|
+
|
|
311
|
+
- `kaseki-agent` — Main entry point
|
|
312
|
+
- `pi` — Pi CLI coding agent
|
|
313
|
+
- `kaseki-report` — Result analysis tool
|
|
314
|
+
- `kaseki-pi-event-filter` — Event stream processor
|
|
315
|
+
- `kaseki-pi-progress-stream` — Progress tracking
|
|
316
|
+
- `github-app-token` — Token generation utility
|
|
317
|
+
|
|
318
|
+
**Libraries** (in `/app/lib`):
|
|
319
|
+
|
|
320
|
+
- Compiled TypeScript modules from `src/`
|
|
321
|
+
- Pi CLI node_modules (from deps stage)
|
|
322
|
+
|
|
323
|
+
**Working directories**:
|
|
324
|
+
|
|
325
|
+
- `/workspace` — Where kaseki-agent clones target repo
|
|
326
|
+
- `/results` — Where kaseki-agent writes artifacts (mounted at runtime)
|
|
327
|
+
- `/tmp/kaseki-home` — kaseki user home (transient)
|
|
328
|
+
- `/tmp/npm-cache` — npm cache (transient)
|
|
329
|
+
|
|
330
|
+
### Build Outputs
|
|
331
|
+
|
|
332
|
+
**GitHub Container Registry** (GHCR):
|
|
333
|
+
|
|
334
|
+
```
|
|
335
|
+
ghcr.io/cyanautomation/kaseki-agent:latest
|
|
336
|
+
ghcr.io/cyanautomation/kaseki-agent:latest-arm64
|
|
337
|
+
ghcr.io/cyanautomation/kaseki-agent:v0.1.0
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
**Docker Hub**:
|
|
341
|
+
|
|
342
|
+
```
|
|
343
|
+
cyanautomation/kaseki-agent:latest
|
|
344
|
+
cyanautomation/kaseki-agent:latest-arm64
|
|
345
|
+
cyanautomation/kaseki-agent:v0.1.0
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## Development Workflow
|
|
351
|
+
|
|
352
|
+
### Local Docker Builds
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
# Standard build
|
|
356
|
+
docker build -t kaseki-agent:dev .
|
|
357
|
+
|
|
358
|
+
# No cache (force rebuild)
|
|
359
|
+
docker build --no-cache -t kaseki-agent:dev .
|
|
360
|
+
|
|
361
|
+
# Build specific stage for debugging
|
|
362
|
+
docker build --target deps -t kaseki-agent:deps-debug .
|
|
363
|
+
|
|
364
|
+
# Inspect built image
|
|
365
|
+
docker inspect kaseki-agent:dev
|
|
366
|
+
docker run --rm kaseki-agent:dev node --version
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Simulating GHA Build Locally
|
|
370
|
+
|
|
371
|
+
```bash
|
|
372
|
+
# Multi-arch build (requires buildx)
|
|
373
|
+
docker buildx build \
|
|
374
|
+
--platform linux/amd64,linux/arm64 \
|
|
375
|
+
-t kaseki-agent:multiarch .
|
|
376
|
+
```
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## References
|
|
381
|
+
|
|
382
|
+
- [CLAUDE.md](../CLAUDE.md) — Project overview and running kaseki-agent
|
|
383
|
+
- [SECURITY.md](../SECURITY.md) — Vulnerability response procedures
|
|
384
|
+
- [.github/skills/docker-image-management/SKILL.md](../.github/skills/docker-image-management/SKILL.md) — When/how to update base image
|
|
385
|
+
- [.github/workflows/build-docker-image.yml](../.github/workflows/build-docker-image.yml) — Full CI/CD pipeline
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
## Maintenance Calendar
|
|
390
|
+
|
|
391
|
+
| Task | Frequency | Owner | Notes |
|
|
392
|
+
|------|-----------|-------|-------|
|
|
393
|
+
| Security review (base image, Pi CLI) | Monthly | Maintainer | Check CVE lists, security advisories |
|
|
394
|
+
| Node version patch update | As needed | Maintainer | Minor version bumps (24.x.x) |
|
|
395
|
+
| Cache performance monitoring | Quarterly | DevOps | Check cache hit rates in GHA |
|
|
396
|
+
| SBOM review & license check | Quarterly | Compliance | Ensure no license violations |
|
|
397
|
+
| Multi-arch build validation | Per release | CI/CD | Verify both amd64 + arm64 work |
|
|
398
|
+
|
|
399
|
+
---
|
|
400
|
+
|
|
401
|
+
**Last Updated**: May 2026
|
|
402
|
+
**Node Version**: v24
|
|
403
|
+
**Base Image**: node:24-bookworm-slim
|
|
404
|
+
**Build Status**: ✅ Optimized
|