@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/CHANGELOG.md
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Kaseki Agent are documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
|
+
|
|
7
|
+
## [1.4.0](https://github.com/CyanAutomation/kaseki-agent/compare/v1.3.0...v1.4.0) (2026-05-08)
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add CLI commands for configuration, health checks, instance listing, reporting, execution, secrets management, API service, and setup wizard ([a6ddde6](https://github.com/CyanAutomation/kaseki-agent/commit/a6ddde6371a50352b2f2fdd9e6d89aa13c956286))
|
|
12
|
+
* Add Pi Progress Summarizer with enhanced event handling and logging ([7aa8bb9](https://github.com/CyanAutomation/kaseki-agent/commit/7aa8bb974b645cc75c497f3acd0f8e12f1f8a9be))
|
|
13
|
+
* Enhance documentation and implement new features for kaseki-agent ([4df2c4b](https://github.com/CyanAutomation/kaseki-agent/commit/4df2c4b8b30a1e05e4eb07785c75ecc44f87f53f))
|
|
14
|
+
* Implement list command to display Kaseki instances with filtering and sorting ([9bd47e8](https://github.com/CyanAutomation/kaseki-agent/commit/9bd47e896f56432f5060a59d27c21ad24026e05f))
|
|
15
|
+
* Migrate Kaseki Agent to NPM package and enhance documentation ([7e825f4](https://github.com/CyanAutomation/kaseki-agent/commit/7e825f46bf05176ea4eeebce12256166623155ed))
|
|
16
|
+
* **validation:** enhance handling of missing npm scripts in validation commands ([1bfe5f8](https://github.com/CyanAutomation/kaseki-agent/commit/1bfe5f8d65aeb7597c88c3faaddad96157463350))
|
|
17
|
+
|
|
18
|
+
## [1.3.0](https://github.com/CyanAutomation/kaseki-agent/compare/v1.2.0...v1.3.0) (2026-05-08)
|
|
19
|
+
|
|
20
|
+
### Features
|
|
21
|
+
|
|
22
|
+
* add instance state derivation and metadata reader scripts to the Dockerfile ([b554b33](https://github.com/CyanAutomation/kaseki-agent/commit/b554b33bf28dba4bf49acfb7402a9f718df96374))
|
|
23
|
+
* enhance printf safety in github operations; add validation and logging improvements; introduce comprehensive test suite ([fd8457e](https://github.com/CyanAutomation/kaseki-agent/commit/fd8457e897fc0b82fc1ff2afc0e5b4cdf05751d1))
|
|
24
|
+
* enhance validation and error handling in json_encode and validate_numeric functions; add comprehensive test suite for printf safety ([7b5c828](https://github.com/CyanAutomation/kaseki-agent/commit/7b5c828c3fa01c4d802220e4f1d26b09ff8c2c3c))
|
|
25
|
+
|
|
26
|
+
### Bug Fixes
|
|
27
|
+
|
|
28
|
+
* move coverage variable declaration to the correct scope in restoration summary ([04f5c38](https://github.com/CyanAutomation/kaseki-agent/commit/04f5c384342c7fcd3c5491d8dcaf5a60f31c3763))
|
|
29
|
+
* optimize coverage calculation in restoration summary logging ([259d5fa](https://github.com/CyanAutomation/kaseki-agent/commit/259d5fa6673bb8b990b33a4ac20a6ed4e0f41c9e))
|
|
30
|
+
* update shellcheck directives for improved script linting ([602d994](https://github.com/CyanAutomation/kaseki-agent/commit/602d9949f5cc6e268984eea05c073b6db0039de8))
|
|
31
|
+
|
|
32
|
+
## [1.2.0](https://github.com/CyanAutomation/kaseki-agent/compare/v1.1.0...v1.2.0) (2026-05-07)
|
|
33
|
+
|
|
34
|
+
### Features
|
|
35
|
+
|
|
36
|
+
* enhance error handling in log scanning and centralize error patterns ([c485b40](https://github.com/CyanAutomation/kaseki-agent/commit/c485b405bf8b5f12dd2b26ade127a4494c65ed78))
|
|
37
|
+
|
|
38
|
+
## [1.1.0](https://github.com/CyanAutomation/kaseki-agent/compare/v1.0.1...v1.1.0) (2026-05-07)
|
|
39
|
+
|
|
40
|
+
### Features
|
|
41
|
+
|
|
42
|
+
* add extraction functions for validation and quality failure reasons ([f8f8ef3](https://github.com/CyanAutomation/kaseki-agent/commit/f8f8ef3327d90e396cdb3df00bf4b5ed5ab9a834))
|
|
43
|
+
* enhance documentation with additional guidance on allowlist patterns and task prompts ([17451da](https://github.com/CyanAutomation/kaseki-agent/commit/17451da713cc4755f450d88fe13e360a7d5721a0))
|
|
44
|
+
* enhance error reporting with structured failure reasons and API updates ([8846e9d](https://github.com/CyanAutomation/kaseki-agent/commit/8846e9d2bb1c903793269723de887ee27d3189c7))
|
|
45
|
+
* enhance pre-flight validation with comprehensive pattern matching functions and integration tests ([0480bc5](https://github.com/CyanAutomation/kaseki-agent/commit/0480bc5066aa67e3582936d6a4188bd8acb62280))
|
|
46
|
+
* Implement comprehensive allowlist restoration system in kaseki-agent ([9367503](https://github.com/CyanAutomation/kaseki-agent/commit/9367503ac3ad1d3dd53afd63bbc8b981665e843e))
|
|
47
|
+
* implement fail-fast validation behavior in Kaseki Agent ([d07b28c](https://github.com/CyanAutomation/kaseki-agent/commit/d07b28ccae7215064b43d4ec610b2e4df60abb9c))
|
|
48
|
+
* Implement Phase 1 Error Reporting Enhancements ([421390b](https://github.com/CyanAutomation/kaseki-agent/commit/421390b7ab063cc8839116c4b9de37c2d0806d04))
|
|
49
|
+
* remove trigger for Docker build workflow after release ([99ed6c5](https://github.com/CyanAutomation/kaseki-agent/commit/99ed6c5d03a161ba0eda5a6c792e27bb10849b3b))
|
|
50
|
+
|
|
51
|
+
## [1.0.1](https://github.com/CyanAutomation/kaseki-agent/compare/v1.0.0...v1.0.1) (2026-05-07)
|
|
52
|
+
|
|
53
|
+
### Bug Fixes
|
|
54
|
+
|
|
55
|
+
* disable PR comments in semantic-release to avoid permission errors ([0701e3e](https://github.com/CyanAutomation/kaseki-agent/commit/0701e3ebf6042a2999102c6cae19c1c7f33dee4c))
|
|
56
|
+
|
|
57
|
+
## 1.0.0 (2026-05-07)
|
|
58
|
+
|
|
59
|
+
### Features
|
|
60
|
+
|
|
61
|
+
* add artifact, log, status, and webhook routes ([d592e12](https://github.com/CyanAutomation/kaseki-agent/commit/d592e129038fac33cb7541e77e1776baf30edfa9))
|
|
62
|
+
* Add comprehensive implementation summary for Kaseki Agent API service ([bad4d94](https://github.com/CyanAutomation/kaseki-agent/commit/bad4d94fccc0bc5feab07c64def7a41a897ca7f8))
|
|
63
|
+
* add kaseki-cli command-line interface and demo ([0d2a566](https://github.com/CyanAutomation/kaseki-agent/commit/0d2a566156b15fae950c8115d4591236eb3763bf))
|
|
64
|
+
* Add post-implementation verification checklist for Kaseki Agent ([bb5e8ad](https://github.com/CyanAutomation/kaseki-agent/commit/bb5e8ad8d441e81781e421d248cbc0e4ff040b54))
|
|
65
|
+
* add semantic release configuration and changelog ([d77a35a](https://github.com/CyanAutomation/kaseki-agent/commit/d77a35ab7eb6f2ccbe9676b227223764a55bef74))
|
|
66
|
+
* add test utilities and validation tests for PreFlightValidator and configuration loading ([47bbed6](https://github.com/CyanAutomation/kaseki-agent/commit/47bbed69ad13351b804dc417fe7f3e6c831acc0f))
|
|
67
|
+
* Implement EventCounterAggregator for event stream processing ([be990ac](https://github.com/CyanAutomation/kaseki-agent/commit/be990ace9b16924c706b09070f0a986883d46686))
|
|
68
|
+
* Implement idempotency support and pre-flight validation for job submissions ([d5e0592](https://github.com/CyanAutomation/kaseki-agent/commit/d5e05923ddd3596c471ac86ff867f25cefa92e39))
|
|
69
|
+
* Implement Kaseki API client and service ([c779c9e](https://github.com/CyanAutomation/kaseki-agent/commit/c779c9e27ff09c2bc621019f883e026ced45732a))
|
|
70
|
+
* migrate project to TypeScript and update testing framework ([9309bdc](https://github.com/CyanAutomation/kaseki-agent/commit/9309bdc551c76841c61f60dcf481b6bcbceb2a7b))
|
|
71
|
+
* Refactor and expand public API exports, add job lookup middleware, and implement utility functions ([74dfd62](https://github.com/CyanAutomation/kaseki-agent/commit/74dfd62f442dfa58b97fd201994f4fb9f539d4ce))
|
|
72
|
+
|
|
73
|
+
### Bug Fixes
|
|
74
|
+
|
|
75
|
+
* Adjust formatting in verification checklist for clarity ([e028619](https://github.com/CyanAutomation/kaseki-agent/commit/e0286191e1d9056264d10339c7f619658d16fa64))
|
|
76
|
+
* correct regex pattern for matching imports in add-js-extensions script ([4cbe203](https://github.com/CyanAutomation/kaseki-agent/commit/4cbe2031a7364022463ac10bf2f030e1ca140b12))
|
|
77
|
+
* Correct regex pattern for matching imports in add-js-extensions.ts ([38fb48a](https://github.com/CyanAutomation/kaseki-agent/commit/38fb48a16c5ad869dc5efe36b1f906d7910a70d9))
|
|
78
|
+
* correct regex pattern for matching imports without extensions ([79bdabe](https://github.com/CyanAutomation/kaseki-agent/commit/79bdabe0a744bf7568c1af68f2dc91af76e532f1))
|
|
79
|
+
* correct regex pattern for matching relative imports in add-js-extensions script ([fb8f509](https://github.com/CyanAutomation/kaseki-agent/commit/fb8f509ea05a1bc460f4caa29e1113069bf00c81))
|
|
80
|
+
* disable no-explicit-any rule in TypeScript ESLint configuration ([ed905cb](https://github.com/CyanAutomation/kaseki-agent/commit/ed905cb7e8ef937989bc0ccfa5f56c6ce4d3a58c))
|
|
81
|
+
* Update readFileSync mock handling and improve instance stage resolution logic ([7e5afb8](https://github.com/CyanAutomation/kaseki-agent/commit/7e5afb87b2ab9fa808b3af9daad7c563dc48800d))
|
|
82
|
+
|
|
83
|
+
## [Unreleased]
|
|
84
|
+
|
|
85
|
+
### Features
|
|
86
|
+
|
|
87
|
+
### Bug Fixes
|
|
88
|
+
|
|
89
|
+
### Documentation
|
|
90
|
+
|
|
91
|
+
### Performance Improvements
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## [0.1.0] - 2026-05-07
|
|
96
|
+
|
|
97
|
+
### Features
|
|
98
|
+
- Initial release of Kaseki Agent ephemeral coding-agent runner
|
|
99
|
+
- Multi-stage Docker build with dependency caching
|
|
100
|
+
- OpenRouter API integration for Pi CLI coding agents
|
|
101
|
+
- GitHub Actions workflow for multi-arch image builds (amd64 + arm64)
|
|
102
|
+
- Quality gates: diff size limits, changed-file allowlist, secret scanning
|
|
103
|
+
- Kaseki CLI for monitoring and analyzing runs
|
|
104
|
+
- Kaseki API service for job scheduling and webhook management
|
|
105
|
+
- Comprehensive logging and result artifacts
|
|
106
|
+
|
|
107
|
+
### Bug Fixes
|
|
108
|
+
|
|
109
|
+
### Documentation
|
|
110
|
+
- Complete README with usage examples
|
|
111
|
+
- Contributing guidelines for prompt changes and test expectations
|
|
112
|
+
- Deployment documentation for Docker Compose and Node.js
|
|
113
|
+
- Development workflow guide
|
|
114
|
+
- API documentation and CLI reference
|
|
115
|
+
|
|
116
|
+
[Unreleased]: https://github.com/CyanAutomation/kaseki-agent/compare/v0.1.0...HEAD
|
|
117
|
+
[0.1.0]: https://github.com/CyanAutomation/kaseki-agent/releases/tag/v0.1.0
|
package/CLAUDE.md
ADDED
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# CLAUDE.md
|
|
2
|
+
|
|
3
|
+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
+
|
|
5
|
+
## What This Is
|
|
6
|
+
|
|
7
|
+
Kaseki Agent is an ephemeral coding-agent runner: it spins up a disposable Docker container, clones a target Git repository inside it, invokes the Pi CLI coding agent via OpenRouter, runs validation commands, and collects artifacts. Each run is a numbered instance (kaseki-1, kaseki-2, …).
|
|
8
|
+
|
|
9
|
+
## Current Infrastructure Status (May 2026)
|
|
10
|
+
|
|
11
|
+
- **Node.js**: v24 (bookworm-slim base image)
|
|
12
|
+
- **Docker Build**: Optimized multi-stage with consolidated RUN layers
|
|
13
|
+
- **CI/CD**: Parallelized pipeline with GHA caching (80-90% hit rate)
|
|
14
|
+
- **GitHub Actions**: All actions updated to native Node.js 24 support (v6+ for checkout/setup-node, v7+ for upload-artifact)
|
|
15
|
+
- **Trivy Scanner**: Pinned to v0.36.0 (no floating @master refs)
|
|
16
|
+
- **Security**: Trivy scanning with SBOM generation
|
|
17
|
+
- **Deployment**: Docker Compose (preferred) with Node.js fallback
|
|
18
|
+
|
|
19
|
+
## Architecture: Host-Container Separation
|
|
20
|
+
|
|
21
|
+
Two layers, each with its own script:
|
|
22
|
+
|
|
23
|
+
**Host (`run-kaseki.sh`)** — runs on the bare host:
|
|
24
|
+
|
|
25
|
+
- Auto-generates instance names, creates per-run workspace and results directories
|
|
26
|
+
- Resolves the OpenRouter API key (env var or secret file), mounts it read-only
|
|
27
|
+
- Launches Docker with hardened runtime flags (`--read-only`, `--cap-drop ALL`, tmpfs, non-root user)
|
|
28
|
+
- Cleans up on exit
|
|
29
|
+
|
|
30
|
+
**Container (`kaseki-agent.sh`)** — runs inside the container:
|
|
31
|
+
|
|
32
|
+
- Clones the repo at the requested ref
|
|
33
|
+
- Prepares Node.js dependencies via a 4-layer cache (stamp check → workspace cache → image seed cache → fresh install)
|
|
34
|
+
- Invokes Pi with a configurable timeout
|
|
35
|
+
- Runs validation commands sequentially, recording timings
|
|
36
|
+
- Enforces quality gates (diff size, changed-file allowlist, secret scan)
|
|
37
|
+
- Writes all artifacts to `/results`
|
|
38
|
+
|
|
39
|
+
**Supporting utilities (Node.js):**
|
|
40
|
+
|
|
41
|
+
- `pi-event-filter.js` — filters raw Pi JSONL, strips thinking blocks, emits `pi-events.jsonl` + `pi-summary.json`
|
|
42
|
+
- `kaseki-report.js` — reads a results directory and prints a compact diagnostic report
|
|
43
|
+
- `kaseki-cli.js` + `kaseki-cli-lib.js` — live monitoring CLI for external AI agents (see [docs/CLI.md](docs/CLI.md))
|
|
44
|
+
|
|
45
|
+
**Directory layout at runtime:**
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
/agents/kaseki-template/ # Dockerfile, scripts (this repo)
|
|
49
|
+
/agents/kaseki-runs/kaseki-N/ # Per-run workspace (cloned repo, node_modules)
|
|
50
|
+
/agents/kaseki-results/kaseki-N/ # Artifacts (logs, diff, metadata, summary)
|
|
51
|
+
/agents/kaseki-cache/ # Optional host-level dependency cache
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Common Commands
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
# Basic run (auto-generates kaseki-N)
|
|
58
|
+
OPENROUTER_API_KEY=sk-or-... ./run-kaseki.sh
|
|
59
|
+
|
|
60
|
+
# Explicit instance name
|
|
61
|
+
OPENROUTER_API_KEY=sk-or-... ./run-kaseki.sh kaseki-7
|
|
62
|
+
|
|
63
|
+
# API key via secret file
|
|
64
|
+
OPENROUTER_API_KEY_FILE=~/secrets/openrouter_api_key ./run-kaseki.sh
|
|
65
|
+
|
|
66
|
+
# Custom target repo + branch
|
|
67
|
+
REPO_URL=https://github.com/org/repo GIT_REF=feature/branch OPENROUTER_API_KEY=... ./run-kaseki.sh
|
|
68
|
+
|
|
69
|
+
# Health/sanity check (no agent run)
|
|
70
|
+
./run-kaseki.sh --doctor
|
|
71
|
+
|
|
72
|
+
# Build image locally
|
|
73
|
+
docker build -t kaseki-template:latest .
|
|
74
|
+
|
|
75
|
+
# Generate diagnostic report for a completed run
|
|
76
|
+
docker run --rm --entrypoint kaseki-report \
|
|
77
|
+
-v /agents/kaseki-results/kaseki-4:/results:ro \
|
|
78
|
+
kaseki-template:latest /results
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Deploying the Kaseki API Service
|
|
82
|
+
|
|
83
|
+
### ✅ Recommended: Docker Compose
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
# Start the API service (see docs/DEPLOYMENT.md for full options)
|
|
87
|
+
export KASEKI_API_KEYS=sk-your-secret-key
|
|
88
|
+
cd /agents/kaseki-template
|
|
89
|
+
docker-compose up -d
|
|
90
|
+
|
|
91
|
+
# Monitor
|
|
92
|
+
docker-compose logs -f kaseki-api
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Fallback: Node.js Process
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Install and run (if Docker is unavailable)
|
|
99
|
+
npm install
|
|
100
|
+
KASEKI_API_KEYS=sk-your-secret-key npm run kaseki-api
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
See [docs/DEPLOYMENT.md](docs/DEPLOYMENT.md) for comprehensive deployment guidance.
|
|
104
|
+
|
|
105
|
+
## Key Environment Variables
|
|
106
|
+
|
|
107
|
+
| Variable | Default | Notes |
|
|
108
|
+
|---|---|---|
|
|
109
|
+
| `OPENROUTER_API_KEY` | — | Required (or use file) |
|
|
110
|
+
| `OPENROUTER_API_KEY_FILE` | `/run/secrets/openrouter_api_key` | Preferred; mounted read-only |
|
|
111
|
+
| `REPO_URL` | CyanAutomation/crudmapper | Target repo |
|
|
112
|
+
| `GIT_REF` | main | Branch/tag/commit |
|
|
113
|
+
| `KASEKI_MODEL` | openrouter/free | Pi model string |
|
|
114
|
+
| `KASEKI_AGENT_TIMEOUT_SECONDS` | 1200 | Pi invocation timeout |
|
|
115
|
+
| `TASK_PROMPT` | *(code fix task)* | Agent instruction |
|
|
116
|
+
| `KASEKI_VALIDATION_COMMANDS` | `npm run check;npm run test;npm run build` | Semicolon-separated; missing npm scripts are skipped (non-fatal) |
|
|
117
|
+
| `KASEKI_CHANGED_FILES_ALLOWLIST` | `src/lib/parser.ts tests/parser.validation.ts` | Space-separated patterns (agent phase) |
|
|
118
|
+
| `KASEKI_VALIDATION_ALLOWLIST` | — | Space-separated patterns (validation phase; optional) |
|
|
119
|
+
| `KASEKI_MAX_DIFF_BYTES` | 200000 | Max diff size (200 KB) |
|
|
120
|
+
| `KASEKI_DEBUG_RAW_EVENTS` | 0 | Keep raw Pi JSONL |
|
|
121
|
+
| `KASEKI_KEEP_WORKSPACE` | 0 | Remove per-run workspace after each run |
|
|
122
|
+
| `KASEKI_STREAM_PROGRESS` | 1 | Stream sanitized progress lines |
|
|
123
|
+
| `KASEKI_IMAGE` | docker.io/cyanautomation/kaseki-agent:latest | Image to use |
|
|
124
|
+
|
|
125
|
+
## Quality Gates and Exit Codes
|
|
126
|
+
|
|
127
|
+
Quality gates run after the agent completes, before reporting success:
|
|
128
|
+
|
|
129
|
+
| Gate | Exit Code | Variable |
|
|
130
|
+
|---|---|---|
|
|
131
|
+
| Missing API key / config | 2 | — |
|
|
132
|
+
| Empty git diff | 3 | — |
|
|
133
|
+
| Diff exceeds max bytes | 4 | `KASEKI_MAX_DIFF_BYTES` |
|
|
134
|
+
| Changed file outside allowlist | 5 | `KASEKI_CHANGED_FILES_ALLOWLIST` |
|
|
135
|
+
| Validation phase files outside allowlist | 7 | `KASEKI_VALIDATION_ALLOWLIST` |
|
|
136
|
+
| Secret scan hit (sk-or-* leak) | 6 | — |
|
|
137
|
+
| Pi agent timeout | 124 | `KASEKI_AGENT_TIMEOUT_SECONDS` |
|
|
138
|
+
| Validation command failure | propagated | `KASEKI_VALIDATION_COMMANDS` |
|
|
139
|
+
|
|
140
|
+
## Result Artifacts
|
|
141
|
+
|
|
142
|
+
All written to `/agents/kaseki-results/kaseki-N/`:
|
|
143
|
+
|
|
144
|
+
- `metadata.json` — timestamps, exit codes per stage, model, instance name
|
|
145
|
+
- `result-summary.md` — human-readable status + key facts
|
|
146
|
+
- `pi-events.jsonl` / `pi-summary.json` — filtered agent events and stats
|
|
147
|
+
- `git.diff` / `git.status` / `changed-files.txt` — repo changes
|
|
148
|
+
- `validation.log` / `validation-timings.tsv` — command output + timing
|
|
149
|
+
- `quality.log` / `secret-scan.log` — gate failures
|
|
150
|
+
- `restoration.jsonl` — structured allowlist restoration events (JSONL format)
|
|
151
|
+
- `restoration-report.md` — human-readable allowlist restoration report
|
|
152
|
+
- `progress.log` / `progress.jsonl` — sanitized stage and Pi event progress
|
|
153
|
+
- `cleanup.log` — mandatory post-run cleanup summary
|
|
154
|
+
- `stdout.log` / `stderr.log` / `exit_code` — raw execution output
|
|
155
|
+
|
|
156
|
+
## Dependency Caching
|
|
157
|
+
|
|
158
|
+
`kaseki-agent.sh` uses a stamp-based, 4-layer cache to avoid redundant `npm ci` runs:
|
|
159
|
+
|
|
160
|
+
1. Check if node_modules + lock hash stamp already match → skip
|
|
161
|
+
2. Restore from workspace cache (`/workspace/.kaseki-cache/<repo-hash>/<lock-hash>/`)
|
|
162
|
+
3. Restore from image seed cache (`/opt/kaseki/workspace-cache/`)
|
|
163
|
+
4. Run `npm ci --prefer-offline` or `npm install`
|
|
164
|
+
|
|
165
|
+
The stamp file lives outside the repo directory to keep `git.status` clean.
|
|
166
|
+
|
|
167
|
+
## Security Hardening
|
|
168
|
+
|
|
169
|
+
- API key is **never passed as an env var to child processes** — resolved from file at runtime
|
|
170
|
+
- Docker runtime: `--read-only`, `--cap-drop ALL`, `--security-opt no-new-privileges:true`, non-root user (UID 10001)
|
|
171
|
+
- Secret scan checks the results, workspace git metadata, and source dirs for `sk-or-*` patterns
|
|
172
|
+
|
|
173
|
+
## Container Image Scanning
|
|
174
|
+
|
|
175
|
+
Kaseki-agent container images are scanned for vulnerabilities using industry-standard tools:
|
|
176
|
+
|
|
177
|
+
### Automated Scanning (CI/CD)
|
|
178
|
+
|
|
179
|
+
GitHub Actions automatically scans images on every build using **Trivy**:
|
|
180
|
+
|
|
181
|
+
```yaml
|
|
182
|
+
- name: Run Trivy vulnerability scanner
|
|
183
|
+
uses: aquasecurity/trivy-action@v0.36.0
|
|
184
|
+
with:
|
|
185
|
+
image-ref: 'docker.io/cyanautomation/kaseki-agent:latest'
|
|
186
|
+
format: 'sarif'
|
|
187
|
+
output: 'trivy-results.sarif'
|
|
188
|
+
severity: 'HIGH,CRITICAL'
|
|
189
|
+
|
|
190
|
+
- name: Upload to GitHub Security tab
|
|
191
|
+
uses: github/codeql-action/upload-sarif@v4
|
|
192
|
+
with:
|
|
193
|
+
sarif_file: 'trivy-results.sarif'
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Results are published to GitHub's **Security** → **Dependabot alerts** tab.
|
|
197
|
+
|
|
198
|
+
### Manual Scanning
|
|
199
|
+
|
|
200
|
+
To scan the image locally:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Install Trivy (macOS)
|
|
204
|
+
brew install trivy
|
|
205
|
+
|
|
206
|
+
# Install Trivy (Linux)
|
|
207
|
+
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
|
|
208
|
+
|
|
209
|
+
# Scan latest image
|
|
210
|
+
trivy image docker.io/cyanautomation/kaseki-agent:latest
|
|
211
|
+
|
|
212
|
+
# Scan with severity filter
|
|
213
|
+
trivy image --severity HIGH,CRITICAL docker.io/cyanautomation/kaseki-agent:latest
|
|
214
|
+
|
|
215
|
+
# Generate JSON report
|
|
216
|
+
trivy image --format json --output report.json docker.io/cyanautomation/kaseki-agent:latest
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### Known Vulnerabilities
|
|
220
|
+
|
|
221
|
+
Check GitHub Settings → Code security → Dependabot alerts for any discovered vulnerabilities. Most are transitive (in Pi CLI dependencies) and are addressed via dependency updates.
|
|
222
|
+
|
|
223
|
+
### Image Integrity (Optional)
|
|
224
|
+
|
|
225
|
+
Images can be signed using **cosign** for supply chain security:
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
# Verify signed image (requires public key)
|
|
229
|
+
cosign verify --key cosign.pub docker.io/cyanautomation/kaseki-agent:latest
|
|
230
|
+
|
|
231
|
+
# View image attestation
|
|
232
|
+
cosign verify-attestation --key cosign.pub docker.io/cyanautomation/kaseki-agent:latest
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
See [SECURITY.md](SECURITY.md) for detailed vulnerability response procedures.
|
|
236
|
+
|
|
237
|
+
## Diagnosing Failures
|
|
238
|
+
|
|
239
|
+
Recommended inspection order:
|
|
240
|
+
|
|
241
|
+
1. `kaseki-report /agents/kaseki-results/kaseki-N` (compact summary, includes allowlist metrics)
|
|
242
|
+
2. `result-summary.md` → status + failed command
|
|
243
|
+
3. `restoration-report.md` → if many files were restored before validation
|
|
244
|
+
4. `metadata.json` → per-stage exit codes
|
|
245
|
+
5. `stdout.log` / `stderr.log` → execution flow
|
|
246
|
+
6. `pi-summary.json` / `pi-events.jsonl` → agent activity
|
|
247
|
+
7. `validation.log` + `validation-timings.tsv` → command failures
|
|
248
|
+
8. `quality.log` + `changed-files.txt` → allowlist/diff violations
|
|
249
|
+
9. `secret-scan.log` → credential detection
|
|
250
|
+
|
|
251
|
+
## Allowlist Configuration & Troubleshooting
|
|
252
|
+
|
|
253
|
+
**Problem: Too many files are restored before validation?**
|
|
254
|
+
|
|
255
|
+
See [docs/QUALITY_GATES.md](docs/QUALITY_GATES.md) for:
|
|
256
|
+
|
|
257
|
+
- Allowlist pattern syntax and examples
|
|
258
|
+
- Pre-built templates for common task types
|
|
259
|
+
- How to use `scripts/suggest-allowlist.sh` to auto-generate patterns
|
|
260
|
+
- How to use `scripts/dry-run-allowlist.sh` to preview restoration
|
|
261
|
+
- Decision tree for choosing the right allowlist
|
|
262
|
+
|
|
263
|
+
**Problem: Agent made too many unintended changes?**
|
|
264
|
+
|
|
265
|
+
See [docs/TASK_PROMPT_TEMPLATES.md](docs/TASK_PROMPT_TEMPLATES.md) for:
|
|
266
|
+
|
|
267
|
+
- How to write clear, scoped task prompts
|
|
268
|
+
- Examples of good vs. bad prompts
|
|
269
|
+
- Anti-patterns that lead to scope creep
|
|
270
|
+
- How to combine prompts with allowlist for best results
|
|
271
|
+
|
|
272
|
+
## CI/CD
|
|
273
|
+
|
|
274
|
+
`.github/workflows/build-docker-image.yml` builds multi-arch images (amd64 + arm64 via QEMU), runs smoke tests (Pi CLI available, metadata structure valid), and publishes to `docker.io/cyanautomation/kaseki-agent:latest`.
|
|
275
|
+
|
|
276
|
+
## External Agent Monitoring with Kaseki CLI
|
|
277
|
+
|
|
278
|
+
The **Kaseki CLI** enables external AI agents to interrogate running and completed kaseki instances in real-time. This is useful for:
|
|
279
|
+
|
|
280
|
+
- **Status polling**: Get current stage, elapsed time, timeout risk
|
|
281
|
+
- **Error detection**: Identify failures in validation, quality gates, secret scans
|
|
282
|
+
- **Anomaly flagging**: Warn when timeout is imminent (>85% elapsed)
|
|
283
|
+
- **Log streaming**: Follow logs live as agent runs
|
|
284
|
+
- **Post-run analysis**: Comprehensive summary of changes, validation results, metrics
|
|
285
|
+
|
|
286
|
+
### Quick Example
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# List all instances
|
|
290
|
+
./kaseki-cli.js list
|
|
291
|
+
|
|
292
|
+
# Get status of a running instance (JSON)
|
|
293
|
+
./kaseki-cli.js status kaseki-1
|
|
294
|
+
|
|
295
|
+
# Detect errors
|
|
296
|
+
./kaseki-cli.js errors kaseki-1
|
|
297
|
+
|
|
298
|
+
# Get post-run analysis
|
|
299
|
+
./kaseki-cli.js analysis kaseki-1
|
|
300
|
+
|
|
301
|
+
# Live monitor with anomaly alerts
|
|
302
|
+
./kaseki-cli.js watch kaseki-1 --interval=2
|
|
303
|
+
|
|
304
|
+
# Stream logs in real-time
|
|
305
|
+
./kaseki-cli.js follow kaseki-1
|
|
306
|
+
|
|
307
|
+
# Show sanitized progress events
|
|
308
|
+
./kaseki-cli.js progress kaseki-1 --tail=25
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Integration Pattern
|
|
312
|
+
|
|
313
|
+
An external agent can use the CLI to monitor kaseki:
|
|
314
|
+
|
|
315
|
+
```bash
|
|
316
|
+
#!/bin/bash
|
|
317
|
+
while true; do
|
|
318
|
+
STATUS=$(./kaseki-cli.js status kaseki-1)
|
|
319
|
+
RUNNING=$(echo $STATUS | jq -r '.running')
|
|
320
|
+
TIMEOUT_RISK=$(echo $STATUS | jq -r '.timeoutRiskPercent')
|
|
321
|
+
|
|
322
|
+
# Alert on timeout risk
|
|
323
|
+
if (( $(echo "$TIMEOUT_RISK >= 85" | bc -l) )); then
|
|
324
|
+
echo "⚠ Timeout imminent: ${TIMEOUT_RISK}%"
|
|
325
|
+
fi
|
|
326
|
+
|
|
327
|
+
# Exit when complete
|
|
328
|
+
[ "$RUNNING" = "false" ] && break
|
|
329
|
+
sleep 5
|
|
330
|
+
done
|
|
331
|
+
|
|
332
|
+
# Final analysis
|
|
333
|
+
./kaseki-cli.js analysis kaseki-1
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
See [docs/CLI.md](docs/CLI.md) for comprehensive documentation, library usage, and advanced integration patterns.
|