@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
|
@@ -0,0 +1,369 @@
|
|
|
1
|
+
# Kaseki Quality Gates: Allowlist Configuration Guide
|
|
2
|
+
|
|
3
|
+
This document explains kaseki's **allowlist** quality gate, how to configure it, and best practices for managing file changes during agent runs.
|
|
4
|
+
|
|
5
|
+
## What is the Allowlist?
|
|
6
|
+
|
|
7
|
+
The allowlist is a **quality gate** that controls which files the kaseki agent is permitted to modify. When the agent completes, kaseki compares the modified files against the allowlist patterns:
|
|
8
|
+
|
|
9
|
+
- **Files matching the allowlist** → kept (validated and tested)
|
|
10
|
+
- **Files outside the allowlist** → automatically restored (reverted) before validation
|
|
11
|
+
|
|
12
|
+
This prevents **scope creep** — where an agent makes unintended changes to files outside the task scope.
|
|
13
|
+
|
|
14
|
+
## Why Use an Allowlist?
|
|
15
|
+
|
|
16
|
+
### Problem It Solves
|
|
17
|
+
|
|
18
|
+
When you ask an agent to "fix a parser bug in `src/lib/parser.ts`", it might:
|
|
19
|
+
|
|
20
|
+
1. ✅ Fix the bug correctly
|
|
21
|
+
2. ❌ Also modify `tests/other-module.ts` (test interference)
|
|
22
|
+
3. ❌ Update `package.json` (version bump)
|
|
23
|
+
4. ❌ Reformat `docs/DESIGN.md` (style changes)
|
|
24
|
+
|
|
25
|
+
Without an allowlist, these unintended changes would fail validation or create noise in the diff.
|
|
26
|
+
|
|
27
|
+
### With Allowlist
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Only files matching this pattern are validated. Everything else is automatically reverted.
|
|
34
|
+
|
|
35
|
+
## Configuration
|
|
36
|
+
|
|
37
|
+
### Environment Variable
|
|
38
|
+
|
|
39
|
+
Set `KASEKI_CHANGED_FILES_ALLOWLIST` before running kaseki:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
|
|
43
|
+
./run-kaseki.sh
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Pattern Syntax
|
|
47
|
+
|
|
48
|
+
The allowlist supports **glob-style patterns**:
|
|
49
|
+
|
|
50
|
+
| Pattern | Matches | Example |
|
|
51
|
+
|---------|---------|---------|
|
|
52
|
+
| `path/file.ts` | Exact file | `src/lib/parser.ts` |
|
|
53
|
+
| `path/**` | All files in directory (recursive) | `src/lib/**` matches `src/lib/parser.ts`, `src/lib/utils/helper.ts` |
|
|
54
|
+
| `**/name.ts` | File in any directory | `**/test.ts` matches `src/test.ts`, `tests/test.ts` |
|
|
55
|
+
| `path/*` | Files in direct children (one level) | `src/*` matches `src/file.ts` but NOT `src/lib/file.ts` |
|
|
56
|
+
|
|
57
|
+
### Examples
|
|
58
|
+
|
|
59
|
+
#### Single File
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
#### Multiple Files
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.test.ts tests/parser.validation.ts"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Directory Pattern
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/**" # All files under src/lib/
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
#### Multiple Patterns
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/components/** tests/components/** src/hooks/**"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
#### Combination
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/** src/types/parser.ts"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Using Templates
|
|
90
|
+
|
|
91
|
+
We provide pre-built allowlist templates for common task types:
|
|
92
|
+
|
|
93
|
+
### Template: Parser Fix
|
|
94
|
+
|
|
95
|
+
For fixing parsing logic in a specific module.
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-parser-fix.txt | tr '\n' ' ')"
|
|
99
|
+
./run-kaseki.sh
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Includes:** `src/lib/parser.ts tests/parser.validation.ts`
|
|
103
|
+
|
|
104
|
+
### Template: UI Component
|
|
105
|
+
|
|
106
|
+
For modifying or creating React/Vue components.
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-ui-component.txt | tr '\n' ' ')"
|
|
110
|
+
./run-kaseki.sh
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
**Includes:** `src/components/** src/lib/ui/** src/hooks/** tests/components/**`
|
|
114
|
+
|
|
115
|
+
### Template: API Route
|
|
116
|
+
|
|
117
|
+
For implementing or fixing API endpoints.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-api-route.txt | tr '\n' ' ')"
|
|
121
|
+
./run-kaseki.sh
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**Includes:** `src/app/api/** tests/api/**`
|
|
125
|
+
|
|
126
|
+
### Template: Utility
|
|
127
|
+
|
|
128
|
+
For fixing utility functions and helper libraries.
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-utility.txt | tr '\n' ' ')"
|
|
132
|
+
./run-kaseki.sh
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
**Includes:** `src/lib/** src/utils/** tests/** src/types/**`
|
|
136
|
+
|
|
137
|
+
### Template: Comprehensive
|
|
138
|
+
|
|
139
|
+
For larger tasks that legitimately require changes across multiple areas.
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-comprehensive.txt | tr '\n' ' ')"
|
|
143
|
+
./run-kaseki.sh
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**Includes:** `src/** tests/**`
|
|
147
|
+
|
|
148
|
+
## Finding the Right Allowlist
|
|
149
|
+
|
|
150
|
+
### Decision Tree
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Start: What are you asking the agent to do?
|
|
154
|
+
|
|
155
|
+
├─ Fix a bug in [specific file]?
|
|
156
|
+
│ └─ Use: src/path/to/file.ts tests/path/to/file.test.ts
|
|
157
|
+
│
|
|
158
|
+
├─ Implement/modify a React component?
|
|
159
|
+
│ └─ Use: allowlist-ui-component template
|
|
160
|
+
│
|
|
161
|
+
├─ Implement/fix an API endpoint?
|
|
162
|
+
│ └─ Use: allowlist-api-route template
|
|
163
|
+
│
|
|
164
|
+
├─ Fix a utility function or helper?
|
|
165
|
+
│ └─ Use: allowlist-utility template
|
|
166
|
+
│
|
|
167
|
+
└─ Large refactor affecting multiple areas?
|
|
168
|
+
└─ Use: allowlist-comprehensive template
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### If You're Unsure
|
|
172
|
+
|
|
173
|
+
1. **Do a test run** with a broad allowlist:
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/**" ./run-kaseki.sh
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
2. **Check the results:**
|
|
180
|
+
- Look at `/results/restoration-report.md`
|
|
181
|
+
- See which files were kept vs. restored
|
|
182
|
+
- Copy the "kept files" into a more specific allowlist
|
|
183
|
+
|
|
184
|
+
3. **Or use the suggestion helper:**
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
./scripts/suggest-allowlist.sh /results/kaseki-N
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
This generates `allowlist-suggestions.md` with patterns based on actual files changed.
|
|
191
|
+
|
|
192
|
+
## What Happens During Restoration
|
|
193
|
+
|
|
194
|
+
When kaseki detects files outside the allowlist:
|
|
195
|
+
|
|
196
|
+
1. **Restoration Phase** (after agent completes, before validation)
|
|
197
|
+
- Files matching allowlist → logged as "kept"
|
|
198
|
+
- Files outside allowlist → automatically reverted using `git restore`
|
|
199
|
+
- Summary written to `quality.log`: "Restored: X files; Kept: Y files"
|
|
200
|
+
- Detailed events written to `restoration.jsonl` (JSONL format for parsing)
|
|
201
|
+
|
|
202
|
+
2. **Report Generation** (at end of run)
|
|
203
|
+
- `restoration-report.md` — human-readable summary with recommendations
|
|
204
|
+
- Includes allowlist coverage percentage
|
|
205
|
+
- Suggests next steps if coverage is low
|
|
206
|
+
|
|
207
|
+
3. **Metrics in Summary**
|
|
208
|
+
- `kaseki-report` shows: "Allowlist coverage: X/Y files (Z%)"
|
|
209
|
+
- Visual indicator of how restrictive the allowlist was
|
|
210
|
+
|
|
211
|
+
### When Coverage is Low (0-50%)
|
|
212
|
+
|
|
213
|
+
> ⚠️ **If your allowlist coverage is below 50%**, many files are being restored. This is **expected behavior** but suggests your allowlist may need adjustment.
|
|
214
|
+
>
|
|
215
|
+
> **Quick fixes:**
|
|
216
|
+
>
|
|
217
|
+
> 1. **Widen the allowlist** — Add related file patterns (e.g., tests, types, related utilities)
|
|
218
|
+
> 2. **Run the suggestion helper** — `./scripts/suggest-allowlist.sh /results/kaseki-N` generates improved patterns
|
|
219
|
+
> 3. **Review the task prompt** — Is it clear enough? Consider adding "Do not modify X" constraints
|
|
220
|
+
>
|
|
221
|
+
> **See also:** [Troubleshooting section](#problem-too-many-files-restored) below
|
|
222
|
+
|
|
223
|
+
## Troubleshooting
|
|
224
|
+
|
|
225
|
+
### Problem: Too Many Files Restored
|
|
226
|
+
|
|
227
|
+
**Symptom:** Run completes but `restoration-report.md` shows many files were restored.
|
|
228
|
+
|
|
229
|
+
**Cause:** Allowlist is too narrow for the task.
|
|
230
|
+
|
|
231
|
+
**Solutions:**
|
|
232
|
+
|
|
233
|
+
1. Widen the allowlist to include related files
|
|
234
|
+
2. Use a broader template (e.g., `allowlist-utility` instead of single file)
|
|
235
|
+
3. Run `./scripts/suggest-allowlist.sh` to auto-generate better patterns from the results:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
./scripts/suggest-allowlist.sh /agents/kaseki-results/kaseki-N
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
This analyzes what files were actually changed and suggests improved glob patterns.
|
|
242
|
+
|
|
243
|
+
4. Review the TASK_PROMPT — is the agent task clear enough? Consider adding constraints like:
|
|
244
|
+
|
|
245
|
+
```
|
|
246
|
+
Do not modify config files, documentation, or unrelated test files.
|
|
247
|
+
Focus only on src/lib/parser.ts and its direct test files.
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
**Example workflow:**
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
# Run 1: Test with a broad allowlist to see what changes
|
|
254
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/**" ./run-kaseki.sh
|
|
255
|
+
|
|
256
|
+
# Run 2: Analyze what was kept vs. restored
|
|
257
|
+
./scripts/suggest-allowlist.sh /agents/kaseki-results/kaseki-1
|
|
258
|
+
|
|
259
|
+
# Run 3: Use the suggested allowlist for precision
|
|
260
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts" ./run-kaseki.sh
|
|
261
|
+
```
|
|
262
|
+
|
|
263
|
+
**More help:**
|
|
264
|
+
|
|
265
|
+
- [Using Templates](#using-templates) — Pre-built patterns for common task types
|
|
266
|
+
- [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate patterns from completed runs
|
|
267
|
+
- [docs/TASK_PROMPT_TEMPLATES.md](./TASK_PROMPT_TEMPLATES.md) — Writing better prompts that minimize scope creep
|
|
268
|
+
|
|
269
|
+
### Problem: Allowlist Coverage is 0%
|
|
270
|
+
|
|
271
|
+
**Symptom:** All files were restored; nothing was kept.
|
|
272
|
+
|
|
273
|
+
**Cause:**
|
|
274
|
+
|
|
275
|
+
- Agent made no changes
|
|
276
|
+
- OR agent changed files in completely different areas than allowlist specifies
|
|
277
|
+
|
|
278
|
+
**Check:**
|
|
279
|
+
|
|
280
|
+
1. Look at `changed-files.txt` to see what actually changed
|
|
281
|
+
2. Look at `pi-stderr.log` to see if agent had errors
|
|
282
|
+
3. Verify `TASK_PROMPT` was clear and specific
|
|
283
|
+
|
|
284
|
+
### Problem: Specific File Not Matching Pattern
|
|
285
|
+
|
|
286
|
+
**Symptom:** Expected file `src/lib/utils/helper.ts` should match but was restored.
|
|
287
|
+
|
|
288
|
+
**Cause:** Pattern syntax issue.
|
|
289
|
+
|
|
290
|
+
**Common Mistakes:**
|
|
291
|
+
|
|
292
|
+
- ❌ `src/lib/*` — matches only direct children, not `src/lib/utils/helper.ts`
|
|
293
|
+
- ✅ `src/lib/**` — matches all files recursively
|
|
294
|
+
|
|
295
|
+
- ❌ `src/lib/*/helper.ts` — matches one level, not nested
|
|
296
|
+
- ✅ `src/lib/**/helper.ts` — matches any nesting level
|
|
297
|
+
|
|
298
|
+
- ❌ `/src/lib/**` — leading slash prevents matching
|
|
299
|
+
- ✅ `src/lib/**` — no leading slash
|
|
300
|
+
|
|
301
|
+
**Test your pattern:**
|
|
302
|
+
|
|
303
|
+
```bash
|
|
304
|
+
./scripts/allowlist-helper.sh # (See implementation for pattern testing)
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
## Advanced: Disabling Auto-Restoration
|
|
308
|
+
|
|
309
|
+
By default, kaseki **automatically restores** files outside the allowlist before validation. To change this:
|
|
310
|
+
|
|
311
|
+
```bash
|
|
312
|
+
# Do not restore; just log violations (allows validation to run with all files)
|
|
313
|
+
KASEKI_RESTORE_DISALLOWED_CHANGES=0 ./run-kaseki.sh
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
**Warning:** This may cause validation to fail on unintended changes. Use only if you know what you're doing.
|
|
317
|
+
|
|
318
|
+
## Related
|
|
319
|
+
|
|
320
|
+
- [CLAUDE.md](../CLAUDE.md) — Overall kaseki-agent documentation
|
|
321
|
+
- [docs/TASK_PROMPT_TEMPLATES.md](./TASK_PROMPT_TEMPLATES.md) — How to write prompts that minimize scope creep
|
|
322
|
+
- [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate allowlist from completed run
|
|
323
|
+
- `templates/allowlist-*.txt` — Pre-built templates for common task types
|
|
324
|
+
|
|
325
|
+
## Examples
|
|
326
|
+
|
|
327
|
+
### Example 1: Simple Bug Fix
|
|
328
|
+
|
|
329
|
+
**Task:** Fix a parser bug in `src/lib/parser.ts`
|
|
330
|
+
|
|
331
|
+
```bash
|
|
332
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/**"
|
|
333
|
+
TASK_PROMPT="Fix the parsing bug in src/lib/parser.ts that fails on empty input" ./run-kaseki.sh
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
**Expected:** Only `src/lib/parser.ts` and test files change.
|
|
337
|
+
|
|
338
|
+
### Example 2: UI Component Implementation
|
|
339
|
+
|
|
340
|
+
**Task:** Create a new button component with tests
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-ui-component.txt | tr '\n' ' ')"
|
|
344
|
+
TASK_PROMPT="Implement a new Button component in src/components/button.tsx with storybook examples" ./run-kaseki.sh
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
**Expected:** Component, tests, and related files change; docs and config files restored.
|
|
348
|
+
|
|
349
|
+
### Example 3: API Endpoint
|
|
350
|
+
|
|
351
|
+
**Task:** Implement a new API endpoint
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/app/api/** tests/api/**"
|
|
355
|
+
TASK_PROMPT="Create a new POST /api/users endpoint that validates email and returns user details" ./run-kaseki.sh
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Expected:** API route, types, and tests change; everything else restored.
|
|
359
|
+
|
|
360
|
+
### Example 4: Large Refactor
|
|
361
|
+
|
|
362
|
+
**Task:** Refactor module structure
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/** src/types/**"
|
|
366
|
+
TASK_PROMPT="Refactor the auth module: extract utils to separate files and update imports" ./run-kaseki.sh
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
**Expected:** Multiple files across multiple directories change.
|