@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,591 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: quality-gate-configuration
|
|
3
|
+
description: Defining and validating quality gates for kaseki runs
|
|
4
|
+
tags: [kaseki, quality-gates, validation, constraints, security]
|
|
5
|
+
relatedSkills: [prompt-engineering, workflow-diagnosis]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Quality Gate Configuration for Kaseki Agent
|
|
9
|
+
|
|
10
|
+
This skill guides designing and validating quality gates for kaseki runs, ensuring changes stay within acceptable bounds.
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
**When to Use**:
|
|
15
|
+
- Designing quality gates for a new task
|
|
16
|
+
- Troubleshooting allowlist violations or diff size limits
|
|
17
|
+
- Tuning validation command timeouts
|
|
18
|
+
- Reviewing security constraints
|
|
19
|
+
- Defining gates for a target repository
|
|
20
|
+
|
|
21
|
+
**Key Concepts**:
|
|
22
|
+
- Quality gates enforce boundaries (file scope, diff size, security rules)
|
|
23
|
+
- Gates run after the agent completes, before reporting success
|
|
24
|
+
- Violations can trigger exit codes and halt the pipeline
|
|
25
|
+
- Gates provide both safety (prevent unintended changes) and insight (validate scope)
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## Core Quality Gates
|
|
30
|
+
|
|
31
|
+
### 1. **File Allowlist** (KASEKI_CHANGED_FILES_ALLOWLIST)
|
|
32
|
+
|
|
33
|
+
**Purpose**: Restrict changes to specific files or directories
|
|
34
|
+
|
|
35
|
+
**Environment Variable**:
|
|
36
|
+
```bash
|
|
37
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.test.ts src/lib/validator.ts"
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**Syntax**: Space-separated file paths or glob patterns
|
|
41
|
+
|
|
42
|
+
#### Syntax Examples
|
|
43
|
+
|
|
44
|
+
| Pattern | Matches | Example |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| `src/file.ts` | Exact file | `src/lib/parser.ts` |
|
|
47
|
+
| `src/**/*.ts` | Recursive glob | `src/lib/parser.ts`, `src/util/index.ts` |
|
|
48
|
+
| `tests/*.test.ts` | Directory glob | `tests/parser.test.ts`, `tests/utils.test.ts` |
|
|
49
|
+
| `*.md` | Root-level glob | `README.md`, `CHANGELOG.md` |
|
|
50
|
+
|
|
51
|
+
**❌ Invalid Patterns**:
|
|
52
|
+
- Wildcards alone: `*` (too broad; be explicit)
|
|
53
|
+
- Relative paths: `../src/file.ts` (stay in repo)
|
|
54
|
+
- Regex: `src/(parser\|validator)\.ts` (use glob syntax)
|
|
55
|
+
|
|
56
|
+
#### Design Allowlist for a Task
|
|
57
|
+
|
|
58
|
+
**Example 1: Bug Fix**
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Task: Fix normalizeRole to handle non-string inputs
|
|
62
|
+
TASK_PROMPT="Fix normalizeRole function in src/lib/role.ts..."
|
|
63
|
+
|
|
64
|
+
# Allowlist: Only the bug fix file + tests
|
|
65
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Example 2: Multi-File Refactor**
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# Task: Add TypeScript support to config module
|
|
72
|
+
TASK_PROMPT="Add type annotations to src/config/..."
|
|
73
|
+
|
|
74
|
+
# Allowlist: Config directory + related tests
|
|
75
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/config/** tests/config/**"
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**Example 3: Documentation**
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Task: Update docs for new API
|
|
82
|
+
TASK_PROMPT="Update docs/api.md with new endpoint..."
|
|
83
|
+
|
|
84
|
+
# Allowlist: Documentation + changelog
|
|
85
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="docs/api.md CHANGELOG.md"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
#### Validating Allowlist
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# Before running kaseki, check what you expect to change
|
|
92
|
+
git diff --name-only main -- $(your task scope)
|
|
93
|
+
|
|
94
|
+
# Example output:
|
|
95
|
+
# src/lib/role.ts
|
|
96
|
+
# tests/role.test.ts
|
|
97
|
+
|
|
98
|
+
# Set allowlist to match
|
|
99
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
|
|
100
|
+
|
|
101
|
+
# Run kaseki
|
|
102
|
+
./run-kaseki.sh
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
#### Allowlist Violations
|
|
106
|
+
|
|
107
|
+
If agent changes files outside the allowlist:
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
# Check what changed
|
|
111
|
+
cat /agents/kaseki-results/kaseki-N/changed-files.txt
|
|
112
|
+
# Output:
|
|
113
|
+
# src/lib/role.ts
|
|
114
|
+
# tests/role.test.ts
|
|
115
|
+
# src/other/config.ts ← NOT in allowlist!
|
|
116
|
+
|
|
117
|
+
# Check quality gate failure
|
|
118
|
+
cat /agents/kaseki-results/kaseki-N/quality.log
|
|
119
|
+
# Output: File 'src/other/config.ts' not in allowlist
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Fix**:
|
|
123
|
+
1. **Refine the prompt** — be more explicit about constraints
|
|
124
|
+
2. **Expand the allowlist** — if the change was legitimate
|
|
125
|
+
3. **Retry** — with updated config
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
### 2. **Maximum Diff Size** (KASEKI_MAX_DIFF_BYTES)
|
|
130
|
+
|
|
131
|
+
**Purpose**: Prevent unexpectedly large changes
|
|
132
|
+
|
|
133
|
+
**Environment Variable**:
|
|
134
|
+
```bash
|
|
135
|
+
KASEKI_MAX_DIFF_BYTES=200000 # 200 KB default
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**Format**: Bytes (integer)
|
|
139
|
+
|
|
140
|
+
#### Choosing an Appropriate Limit
|
|
141
|
+
|
|
142
|
+
| Task Type | Typical Range | Example Limit |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| Small bug fix | 1–10 KB | 50000 (50 KB) |
|
|
145
|
+
| Single feature | 5–50 KB | 100000 (100 KB) |
|
|
146
|
+
| Module refactor | 20–200 KB | 300000 (300 KB) |
|
|
147
|
+
| Large refactor | 50–500 KB | 500000 (500 KB) |
|
|
148
|
+
|
|
149
|
+
**Heuristic**:
|
|
150
|
+
- Start with 200 KB (default) for typical tasks
|
|
151
|
+
- Increase if legitimate changes exceed limit
|
|
152
|
+
- Decrease if you want strict scope enforcement
|
|
153
|
+
|
|
154
|
+
#### Estimating Diff Size
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# For a task you've done manually, check the diff size
|
|
158
|
+
git diff HEAD -- <files> | wc -c
|
|
159
|
+
# Output: 12345 bytes
|
|
160
|
+
|
|
161
|
+
# Round up 50% for safety
|
|
162
|
+
# 12345 * 1.5 = 18517 → set limit to 25000 (25 KB)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
#### Diff Size Violations
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
# Check the actual diff size
|
|
169
|
+
wc -c < /agents/kaseki-results/kaseki-N/git.diff
|
|
170
|
+
# Output: 250000 bytes
|
|
171
|
+
|
|
172
|
+
# Check the limit that was set
|
|
173
|
+
cat /agents/kaseki-results/kaseki-N/quality.log
|
|
174
|
+
# Output: Diff size 250000 exceeds KASEKI_MAX_DIFF_BYTES (200000)
|
|
175
|
+
|
|
176
|
+
# See what changed
|
|
177
|
+
head -100 /agents/kaseki-results/kaseki-N/git.diff
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Fix**:
|
|
181
|
+
1. **Simplify the task** — scope it down further
|
|
182
|
+
2. **Increase the limit** — if the change is legitimate
|
|
183
|
+
3. **Check for unintended changes** — agent may have refactored more than intended
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### 3. **Validation Commands** (KASEKI_VALIDATION_COMMANDS)
|
|
188
|
+
|
|
189
|
+
**Purpose**: Run tests, type checks, builds to validate changes
|
|
190
|
+
|
|
191
|
+
**Environment Variable**:
|
|
192
|
+
```bash
|
|
193
|
+
KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Format**: Semicolon-separated commands
|
|
197
|
+
|
|
198
|
+
#### Missing Scripts Behavior
|
|
199
|
+
|
|
200
|
+
If a validation command refers to an npm script that doesn't exist in `package.json`:
|
|
201
|
+
- Kaseki **warns** and **skips** that command (non-fatal)
|
|
202
|
+
- Execution continues to the next command
|
|
203
|
+
- The skipped command is recorded in `validation-timings.tsv` as `skipped`
|
|
204
|
+
|
|
205
|
+
This allows the same default validation sequence to work across repos with varying script definitions.
|
|
206
|
+
|
|
207
|
+
#### Command Chaining
|
|
208
|
+
|
|
209
|
+
Commands run in sequence. If one fails, the pipeline stops.
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
# Runs in order:
|
|
213
|
+
1. npm run check # Type checking
|
|
214
|
+
2. npm run test # Unit tests
|
|
215
|
+
3. npm run build # Build verification
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**With Early Exit**:
|
|
219
|
+
```bash
|
|
220
|
+
# Stop on first failure (default)
|
|
221
|
+
npm run check && npm run test && npm run build
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
#### Choosing Validation Commands
|
|
225
|
+
|
|
226
|
+
| Repo Type | Recommended Commands |
|
|
227
|
+
|---|---|
|
|
228
|
+
| **TypeScript** | `npm run check;npm run test;npm run build` |
|
|
229
|
+
| **JavaScript (ESM)** | `npm run lint;npm run test` |
|
|
230
|
+
| **Python** | `python -m pytest;mypy src/` |
|
|
231
|
+
| **Rust** | `cargo check;cargo test;cargo build` |
|
|
232
|
+
| **Minimal** | `npm test` (single comprehensive test) |
|
|
233
|
+
|
|
234
|
+
#### Examples
|
|
235
|
+
|
|
236
|
+
**Example 1: Minimal (just tests)**
|
|
237
|
+
```bash
|
|
238
|
+
KASEKI_VALIDATION_COMMANDS="npm run test"
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Example 2: Comprehensive (types + tests + build)**
|
|
242
|
+
```bash
|
|
243
|
+
KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Example 3: Targeted (specific test file)**
|
|
247
|
+
```bash
|
|
248
|
+
# If you only care about changes to one module
|
|
249
|
+
KASEKI_VALIDATION_COMMANDS="npm run test -- tests/role.test.ts"
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
#### Timeout Tuning
|
|
253
|
+
|
|
254
|
+
Commands run with the `KASEKI_AGENT_TIMEOUT_SECONDS` (default 1200s = 20 min).
|
|
255
|
+
|
|
256
|
+
If validation is slow:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Check which command is slow
|
|
260
|
+
cat /agents/kaseki-results/kaseki-N/validation-timings.tsv
|
|
261
|
+
# Output:
|
|
262
|
+
# command duration_seconds
|
|
263
|
+
# npm ci 120 ← long (see Dependency Cache Optimization)
|
|
264
|
+
# npm run check 45
|
|
265
|
+
# npm run test 150 ← very long
|
|
266
|
+
# npm run build 60
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
**Optimize**:
|
|
270
|
+
1. **Reduce test scope** — run only relevant tests
|
|
271
|
+
2. **Increase timeout** — if all commands are slow due to slow repo
|
|
272
|
+
3. **Improve caching** — see [Dependency Cache Optimization](dependency-cache-optimization.md)
|
|
273
|
+
|
|
274
|
+
```bash
|
|
275
|
+
# Run only tests for changed files
|
|
276
|
+
KASEKI_VALIDATION_COMMANDS="npm run test -- --changed"
|
|
277
|
+
|
|
278
|
+
# Or increase timeout
|
|
279
|
+
KASEKI_AGENT_TIMEOUT_SECONDS=1800 # 30 minutes
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
---
|
|
283
|
+
|
|
284
|
+
### 4. **Security Gates**
|
|
285
|
+
|
|
286
|
+
**Purpose**: Prevent credential leaks and other security issues
|
|
287
|
+
|
|
288
|
+
**Gates** (built-in, not configurable):
|
|
289
|
+
- Secret scanning (detects `sk-or-*` patterns)
|
|
290
|
+
- No credentials in diffs or logs
|
|
291
|
+
- No `.env` files committed
|
|
292
|
+
|
|
293
|
+
#### Secret Scanning
|
|
294
|
+
|
|
295
|
+
Kaseki automatically scans outputs for credential patterns:
|
|
296
|
+
|
|
297
|
+
```bash
|
|
298
|
+
# Check if secrets were found
|
|
299
|
+
cat /agents/kaseki-results/kaseki-N/secret-scan.log
|
|
300
|
+
# Output: Found secret pattern sk-or-abc123 in pi-events.jsonl:42
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
**Patterns Detected**:
|
|
304
|
+
- `sk-or-*` — OpenRouter API keys
|
|
305
|
+
- `sk-ant-*` — Anthropic API keys (if used)
|
|
306
|
+
- `.env` file commits
|
|
307
|
+
- Environment variable dumps
|
|
308
|
+
|
|
309
|
+
**Prevention**:
|
|
310
|
+
- ✓ Never include API keys in examples
|
|
311
|
+
- ✓ Describe credentials without showing them ("API key" not "sk-or-123")
|
|
312
|
+
- ✓ Ensure task prompts don't leak env vars
|
|
313
|
+
- See [Prompt Engineering](prompt-engineering.md) for security checklist
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## Designing Quality Gates for a New Task
|
|
318
|
+
|
|
319
|
+
### Step-by-Step Workflow
|
|
320
|
+
|
|
321
|
+
**Step 1: Understand the Task**
|
|
322
|
+
```bash
|
|
323
|
+
# What files will change?
|
|
324
|
+
# What validation is appropriate?
|
|
325
|
+
# What's the realistic diff size?
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
**Step 2: Design Allowlist**
|
|
329
|
+
```bash
|
|
330
|
+
# Manually make the change locally
|
|
331
|
+
git checkout -b feature/task
|
|
332
|
+
|
|
333
|
+
# Manually fix the issue
|
|
334
|
+
# (Make the minimal change the agent should make)
|
|
335
|
+
|
|
336
|
+
# See what changed
|
|
337
|
+
git diff --name-only
|
|
338
|
+
# Output:
|
|
339
|
+
# src/lib/role.ts
|
|
340
|
+
# tests/role.test.ts
|
|
341
|
+
|
|
342
|
+
# Set allowlist
|
|
343
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts"
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Step 3: Estimate Diff Size**
|
|
347
|
+
```bash
|
|
348
|
+
# Check the diff size of your manual change
|
|
349
|
+
git diff | wc -c
|
|
350
|
+
# Output: 8234 bytes
|
|
351
|
+
|
|
352
|
+
# Round up to account for agent variations (1.5x safety factor)
|
|
353
|
+
# 8234 * 1.5 = 12351 → set limit to 20000 (20 KB)
|
|
354
|
+
|
|
355
|
+
export KASEKI_MAX_DIFF_BYTES=20000
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
**Step 4: Verify Validation Commands**
|
|
359
|
+
```bash
|
|
360
|
+
# Run validation commands locally (without your changes!)
|
|
361
|
+
git checkout main
|
|
362
|
+
|
|
363
|
+
# Install deps
|
|
364
|
+
npm ci
|
|
365
|
+
|
|
366
|
+
# Test validation commands work
|
|
367
|
+
npm run check # No errors?
|
|
368
|
+
npm run test # All pass?
|
|
369
|
+
npm run build # Success?
|
|
370
|
+
|
|
371
|
+
# Now apply your changes and verify again
|
|
372
|
+
git checkout feature/task
|
|
373
|
+
npm run check && npm run test && npm run build
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Step 5: Set Validation Commands**
|
|
377
|
+
```bash
|
|
378
|
+
export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build"
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
**Step 6: Run a Test Kaseki Instance**
|
|
382
|
+
```bash
|
|
383
|
+
OPENROUTER_API_KEY=sk-or-... \
|
|
384
|
+
REPO_URL=https://github.com/org/repo \
|
|
385
|
+
TASK_PROMPT="$(cat task.txt)" \
|
|
386
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts" \
|
|
387
|
+
KASEKI_MAX_DIFF_BYTES=20000 \
|
|
388
|
+
KASEKI_VALIDATION_COMMANDS="npm run check;npm run test;npm run build" \
|
|
389
|
+
./run-kaseki.sh kaseki-test-1
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
**Step 7: Review Results**
|
|
393
|
+
```bash
|
|
394
|
+
# Check if gates passed
|
|
395
|
+
cat /agents/kaseki-results/kaseki-test-1/quality.log
|
|
396
|
+
|
|
397
|
+
# If all gates passed, you're ready!
|
|
398
|
+
```
|
|
399
|
+
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Common Configuration Examples
|
|
403
|
+
|
|
404
|
+
### Example 1: Small Bug Fix
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
#!/bin/bash
|
|
408
|
+
# fix-small-bug.sh
|
|
409
|
+
|
|
410
|
+
export TASK_PROMPT="Fix the NullPointerException in User.getUsername()
|
|
411
|
+
when input is null. Should return empty string instead of throwing."
|
|
412
|
+
|
|
413
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/User.java tests/UserTest.java"
|
|
414
|
+
export KASEKI_MAX_DIFF_BYTES=15000 # 15 KB
|
|
415
|
+
export KASEKI_VALIDATION_COMMANDS="mvn test"
|
|
416
|
+
|
|
417
|
+
./run-kaseki.sh kaseki-bugfix-1
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
### Example 2: Feature Addition (Multi-File)
|
|
421
|
+
|
|
422
|
+
```bash
|
|
423
|
+
#!/bin/bash
|
|
424
|
+
# add-feature.sh
|
|
425
|
+
|
|
426
|
+
export TASK_PROMPT="Add support for JWT authentication tokens.
|
|
427
|
+
Modify src/auth/jwt.ts and update types/auth.ts.
|
|
428
|
+
Update tests/auth.test.ts with JWT test cases.
|
|
429
|
+
Do NOT change other authentication mechanisms."
|
|
430
|
+
|
|
431
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/auth/jwt.ts types/auth.ts tests/auth.test.ts"
|
|
432
|
+
export KASEKI_MAX_DIFF_BYTES=50000 # 50 KB
|
|
433
|
+
export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test -- tests/auth.test.ts"
|
|
434
|
+
|
|
435
|
+
./run-kaseki.sh kaseki-feature-1
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Example 3: Documentation Update
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
#!/bin/bash
|
|
442
|
+
# update-docs.sh
|
|
443
|
+
|
|
444
|
+
export TASK_PROMPT="Update docs/API.md to document the new getUserBy endpoint.
|
|
445
|
+
Include request/response examples."
|
|
446
|
+
|
|
447
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="docs/API.md"
|
|
448
|
+
export KASEKI_MAX_DIFF_BYTES=10000 # 10 KB
|
|
449
|
+
export KASEKI_VALIDATION_COMMANDS="npm run test" # No special validation
|
|
450
|
+
|
|
451
|
+
./run-kaseki.sh kaseki-docs-1
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
### Example 4: Refactor with Safety
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
#!/bin/bash
|
|
458
|
+
# refactor-safely.sh
|
|
459
|
+
|
|
460
|
+
export TASK_PROMPT="Refactor Parser.parseConfig() to use switch statement
|
|
461
|
+
instead of if/else chain. Preserve exact behavior."
|
|
462
|
+
|
|
463
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/Parser.ts tests/ParserTest.ts"
|
|
464
|
+
export KASEKI_MAX_DIFF_BYTES=30000 # 30 KB (refactors are often larger)
|
|
465
|
+
export KASEKI_VALIDATION_COMMANDS="npm run check;npm run test"
|
|
466
|
+
|
|
467
|
+
./run-kaseki.sh kaseki-refactor-1
|
|
468
|
+
```
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
## Troubleshooting Quality Gate Violations
|
|
473
|
+
|
|
474
|
+
### Allowlist Violation
|
|
475
|
+
|
|
476
|
+
**Symptom**: Agent changed files outside the allowlist
|
|
477
|
+
|
|
478
|
+
```bash
|
|
479
|
+
# Check what the allowlist was
|
|
480
|
+
echo $KASEKI_CHANGED_FILES_ALLOWLIST
|
|
481
|
+
|
|
482
|
+
# Check what actually changed
|
|
483
|
+
cat /agents/kaseki-results/kaseki-N/changed-files.txt
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Solution**:
|
|
487
|
+
1. **Expand allowlist** if change was legitimate:
|
|
488
|
+
```bash
|
|
489
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role.ts tests/role.test.ts src/other/file.ts"
|
|
490
|
+
./run-kaseki.sh kaseki-retry-1
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
2. **Refine prompt** if change was unintended:
|
|
494
|
+
```bash
|
|
495
|
+
# Be more explicit: "ONLY modify src/lib/role.ts and tests/role.test.ts"
|
|
496
|
+
export TASK_PROMPT="..."
|
|
497
|
+
./run-kaseki.sh kaseki-retry-2
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
### Diff Size Exceeded
|
|
501
|
+
|
|
502
|
+
**Symptom**: Changes are too large
|
|
503
|
+
|
|
504
|
+
```bash
|
|
505
|
+
# Check actual size
|
|
506
|
+
wc -c < /agents/kaseki-results/kaseki-N/git.diff
|
|
507
|
+
|
|
508
|
+
# Check what changed
|
|
509
|
+
cat /agents/kaseki-results/kaseki-N/changed-files.txt
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
**Solution**:
|
|
513
|
+
1. **Increase limit** if legitimate:
|
|
514
|
+
```bash
|
|
515
|
+
export KASEKI_MAX_DIFF_BYTES=300000 # 300 KB
|
|
516
|
+
./run-kaseki.sh kaseki-retry-1
|
|
517
|
+
```
|
|
518
|
+
|
|
519
|
+
2. **Narrow task scope** if changes are too broad:
|
|
520
|
+
```bash
|
|
521
|
+
# Focus on just one module, not multiple
|
|
522
|
+
export TASK_PROMPT="Fix parser.ts only, not validator.ts"
|
|
523
|
+
./run-kaseki.sh kaseki-retry-2
|
|
524
|
+
```
|
|
525
|
+
|
|
526
|
+
### Validation Command Failed
|
|
527
|
+
|
|
528
|
+
**Symptom**: Tests or checks failed
|
|
529
|
+
|
|
530
|
+
```bash
|
|
531
|
+
# Check which command failed
|
|
532
|
+
cat /agents/kaseki-results/kaseki-N/result-summary.md | grep -A 3 "Validation"
|
|
533
|
+
|
|
534
|
+
# See full output
|
|
535
|
+
cat /agents/kaseki-results/kaseki-N/validation.log | tail -50
|
|
536
|
+
```
|
|
537
|
+
|
|
538
|
+
**Solution**:
|
|
539
|
+
1. **Check local validation** (reproduce locally):
|
|
540
|
+
```bash
|
|
541
|
+
git clone <repo>
|
|
542
|
+
cd repo
|
|
543
|
+
npm ci
|
|
544
|
+
npm run check && npm run test
|
|
545
|
+
# Did they pass without any changes?
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
2. **Review what agent changed**:
|
|
549
|
+
```bash
|
|
550
|
+
head -100 /agents/kaseki-results/kaseki-N/git.diff
|
|
551
|
+
# Is the change correct? Did it introduce type errors?
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
3. **Adjust commands or prompts** based on what failed
|
|
555
|
+
|
|
556
|
+
---
|
|
557
|
+
|
|
558
|
+
## Best Practices
|
|
559
|
+
|
|
560
|
+
1. **Start Conservative, Expand as Needed**
|
|
561
|
+
- Begin with tight allowlists and small diff limits
|
|
562
|
+
- Only loosen if agent fails legitimately
|
|
563
|
+
- Prevents unexpected changes
|
|
564
|
+
|
|
565
|
+
2. **Test Locally First**
|
|
566
|
+
- Make the change manually
|
|
567
|
+
- Verify all validation commands pass
|
|
568
|
+
- Use those results to set gates
|
|
569
|
+
|
|
570
|
+
3. **Document Your Reasoning**
|
|
571
|
+
- Comment why you chose specific limits
|
|
572
|
+
- Link to the original issue/task
|
|
573
|
+
- Makes maintenance easier
|
|
574
|
+
|
|
575
|
+
4. **Review Gate Violations**
|
|
576
|
+
- Don't automatically increase limits
|
|
577
|
+
- Understand why the violation occurred
|
|
578
|
+
- Update prompt if needed
|
|
579
|
+
|
|
580
|
+
5. **Keep Gates Reasonable**
|
|
581
|
+
- Gates should be meaningful, not arbitrary
|
|
582
|
+
- Overly strict gates defeat the purpose
|
|
583
|
+
- Overly loose gates provide no protection
|
|
584
|
+
|
|
585
|
+
---
|
|
586
|
+
|
|
587
|
+
## Related Skills & Docs
|
|
588
|
+
|
|
589
|
+
- [Prompt Engineering](prompt-engineering.md) — Design prompts to work with quality gates
|
|
590
|
+
- [Workflow Diagnosis](workflow-diagnosis.md) — Troubleshoot gate violations
|
|
591
|
+
- [CLAUDE.md](../../CLAUDE.md) — Architecture and environment variables reference
|