@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,533 @@
|
|
|
1
|
+
# Kaseki Task Prompt Templates & Best Practices
|
|
2
|
+
|
|
3
|
+
This guide shows how to write **effective task prompts** that minimize scope creep and unintended file changes. Combined with the allowlist, these templates help keep agent modifications focused.
|
|
4
|
+
|
|
5
|
+
## What is Scope Creep?
|
|
6
|
+
|
|
7
|
+
**Scope Creep:** When an agent makes changes beyond what you asked for.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
Request: "Fix the parser bug that fails on empty input"
|
|
11
|
+
|
|
12
|
+
Without constraints:
|
|
13
|
+
✅ Fixes src/lib/parser.ts
|
|
14
|
+
❌ Also refactors unrelated code in src/lib/utils.ts
|
|
15
|
+
❌ Updates docs/ARCHITECTURE.md
|
|
16
|
+
❌ Changes package.json
|
|
17
|
+
❌ Reformats random files
|
|
18
|
+
|
|
19
|
+
With constraints (template):
|
|
20
|
+
✅ Fixes src/lib/parser.ts
|
|
21
|
+
✅ Adds test case to tests/parser.validation.ts
|
|
22
|
+
❌ Everything else prevented by allowlist
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Template Structure
|
|
26
|
+
|
|
27
|
+
Effective prompts contain:
|
|
28
|
+
|
|
29
|
+
1. **Clear Task Goal** — what to do, not how
|
|
30
|
+
2. **Scope Boundaries** — what files to touch/avoid
|
|
31
|
+
3. **Success Criteria** — how to verify it works
|
|
32
|
+
4. **Constraints** — what not to do
|
|
33
|
+
|
|
34
|
+
### Basic Template
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
[GOAL]
|
|
38
|
+
Fix [specific behavior] in [file(s)].
|
|
39
|
+
|
|
40
|
+
[SCOPE]
|
|
41
|
+
Restrict changes to:
|
|
42
|
+
- [file/directory pattern]
|
|
43
|
+
- [file/directory pattern]
|
|
44
|
+
|
|
45
|
+
[CONSTRAINTS]
|
|
46
|
+
- Do not modify [adjacent areas]
|
|
47
|
+
- Do not update [build/config files]
|
|
48
|
+
- Do not refactor [unrelated code]
|
|
49
|
+
|
|
50
|
+
[SUCCESS]
|
|
51
|
+
The fix must:
|
|
52
|
+
- [criterion 1]
|
|
53
|
+
- [criterion 2]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Specific Prompt Templates
|
|
57
|
+
|
|
58
|
+
### 1. Bug Fix in Specific File
|
|
59
|
+
|
|
60
|
+
**When:** Fix a bug in one file, minimal test changes
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
Fix the [specific bug description] in `[file.ts]`.
|
|
64
|
+
|
|
65
|
+
Restrict changes to:
|
|
66
|
+
- [file.ts]
|
|
67
|
+
- tests/[corresponding test file.ts]
|
|
68
|
+
|
|
69
|
+
Do NOT:
|
|
70
|
+
- Modify other files in this module
|
|
71
|
+
- Refactor surrounding code
|
|
72
|
+
- Update types or interfaces
|
|
73
|
+
- Add new dependencies
|
|
74
|
+
|
|
75
|
+
The fix must:
|
|
76
|
+
- Correctly handle [edge case]
|
|
77
|
+
- Preserve existing behavior for [scenario]
|
|
78
|
+
- Pass all existing tests
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Example:**
|
|
82
|
+
|
|
83
|
+
```
|
|
84
|
+
Fix the parser bug that fails on empty input in `src/lib/parser.ts`.
|
|
85
|
+
|
|
86
|
+
Restrict changes to:
|
|
87
|
+
- src/lib/parser.ts
|
|
88
|
+
- tests/parser.validation.ts
|
|
89
|
+
|
|
90
|
+
Do NOT:
|
|
91
|
+
- Modify src/lib/utils.ts or other modules
|
|
92
|
+
- Refactor the parsing logic
|
|
93
|
+
- Add new functions or exports
|
|
94
|
+
- Change package.json
|
|
95
|
+
|
|
96
|
+
The fix must:
|
|
97
|
+
- Return a valid AST for empty input
|
|
98
|
+
- Pass all existing tests
|
|
99
|
+
- Handle whitespace-only input identically to empty input
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Recommended Allowlist:**
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### 2. Utility/Helper Function Fix
|
|
109
|
+
|
|
110
|
+
**When:** Fix a utility function, update related tests
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
Fix the [function] in `[utils file]` to [behavior change].
|
|
114
|
+
|
|
115
|
+
Restrict changes to:
|
|
116
|
+
- src/lib/[util-name]/**
|
|
117
|
+
- src/utils/[util-name]/**
|
|
118
|
+
- tests/[util-name]/**
|
|
119
|
+
|
|
120
|
+
Do NOT:
|
|
121
|
+
- Modify unrelated utility functions
|
|
122
|
+
- Update types outside of [util-name] directory
|
|
123
|
+
- Add new public exports beyond fixing [function]
|
|
124
|
+
|
|
125
|
+
The fix must:
|
|
126
|
+
- Correctly implement [spec]
|
|
127
|
+
- Maintain backward compatibility for [existing calls]
|
|
128
|
+
- Include tests for the specific case
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
**Example:**
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
Fix the `normalizeEmail()` function in `src/lib/email-utils.ts` to properly validate email format.
|
|
135
|
+
|
|
136
|
+
Restrict changes to:
|
|
137
|
+
- src/lib/email-utils.ts
|
|
138
|
+
- tests/email-utils.test.ts
|
|
139
|
+
|
|
140
|
+
Do NOT:
|
|
141
|
+
- Modify unrelated functions like `sanitizeEmail` or `parseEmail`
|
|
142
|
+
- Change the function signature
|
|
143
|
+
- Add new exports
|
|
144
|
+
|
|
145
|
+
The fix must:
|
|
146
|
+
- Reject emails with spaces or special chars (except @.-)
|
|
147
|
+
- Accept valid emails per RFC 5322 (basic form)
|
|
148
|
+
- Pass all existing validation tests
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**Recommended Allowlist:**
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/email-utils.ts tests/email-utils.test.ts"
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
### 3. React/Vue Component Implementation
|
|
158
|
+
|
|
159
|
+
**When:** Create or modify a UI component
|
|
160
|
+
|
|
161
|
+
```
|
|
162
|
+
[Implement|Update] the [ComponentName] component in `[path]`.
|
|
163
|
+
|
|
164
|
+
[Description of component behavior and props]
|
|
165
|
+
|
|
166
|
+
Restrict changes to:
|
|
167
|
+
- src/components/[component-name]/
|
|
168
|
+
- src/hooks/[related hooks]/
|
|
169
|
+
- tests/components/[component-name]/
|
|
170
|
+
- src/lib/ui/** (only if adding UI utilities)
|
|
171
|
+
|
|
172
|
+
Do NOT:
|
|
173
|
+
- Modify other components
|
|
174
|
+
- Update global styles in src/app/globals.css
|
|
175
|
+
- Change layout or navigation structure
|
|
176
|
+
- Add new pages or routes
|
|
177
|
+
|
|
178
|
+
The component must:
|
|
179
|
+
- Accept [prop1], [prop2] as inputs
|
|
180
|
+
- Support [feature1] and [feature2]
|
|
181
|
+
- Be accessible (ARIA labels where needed)
|
|
182
|
+
- Include tests with [test1], [test2] cases
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
**Example:**
|
|
186
|
+
|
|
187
|
+
```
|
|
188
|
+
Implement the PricingCard component in `src/components/pricing-card`.
|
|
189
|
+
|
|
190
|
+
The component displays a pricing tier with plan name, price, features list, and CTA button.
|
|
191
|
+
Props: title, price, currency, features (string[]), onSelect (callback).
|
|
192
|
+
|
|
193
|
+
Restrict changes to:
|
|
194
|
+
- src/components/pricing-card/
|
|
195
|
+
- src/hooks/ (only if creating new hooks for this component)
|
|
196
|
+
- tests/components/pricing-card/
|
|
197
|
+
|
|
198
|
+
Do NOT:
|
|
199
|
+
- Modify other components
|
|
200
|
+
- Update global styles
|
|
201
|
+
- Change the pricing page layout
|
|
202
|
+
|
|
203
|
+
The component must:
|
|
204
|
+
- Display price in the specified currency
|
|
205
|
+
- Render features as a bulleted list
|
|
206
|
+
- Include an "Select Plan" button that calls onSelect
|
|
207
|
+
- Be responsive (mobile and desktop)
|
|
208
|
+
- Have unit tests for rendering, currency formatting, and button click
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Recommended Allowlist:**
|
|
212
|
+
|
|
213
|
+
```bash
|
|
214
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/components/pricing-card/** src/hooks/** tests/components/pricing-card/**"
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### 4. API Endpoint
|
|
218
|
+
|
|
219
|
+
**When:** Implement a new API route/handler
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
[Implement|Fix] the `[METHOD] /api/[route]` endpoint.
|
|
223
|
+
|
|
224
|
+
[Description of endpoint behavior, request/response format]
|
|
225
|
+
|
|
226
|
+
Restrict changes to:
|
|
227
|
+
- src/app/api/[route]/route.ts
|
|
228
|
+
- src/lib/[route-utils]/** (utilities for this route)
|
|
229
|
+
- src/types/api.ts (if adding request/response types)
|
|
230
|
+
- tests/api/[route].test.ts
|
|
231
|
+
|
|
232
|
+
Do NOT:
|
|
233
|
+
- Modify other routes or endpoints
|
|
234
|
+
- Change authentication/middleware globally
|
|
235
|
+
- Update database schema
|
|
236
|
+
- Add new environment variables without documenting
|
|
237
|
+
|
|
238
|
+
The endpoint must:
|
|
239
|
+
- Accept [request format/params]
|
|
240
|
+
- Return [response format] on success
|
|
241
|
+
- Return [error response] on [failure case]
|
|
242
|
+
- Validate [specific inputs]
|
|
243
|
+
- Handle [edge case]
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
**Example:**
|
|
247
|
+
|
|
248
|
+
```
|
|
249
|
+
Implement the POST /api/users endpoint.
|
|
250
|
+
|
|
251
|
+
This endpoint creates a new user with email, password, and optional name.
|
|
252
|
+
Request: { email, password, name? }
|
|
253
|
+
Response: { userId, email, createdAt } or { error, status }
|
|
254
|
+
|
|
255
|
+
Restrict changes to:
|
|
256
|
+
- src/app/api/users/route.ts
|
|
257
|
+
- src/lib/user-service.ts
|
|
258
|
+
- src/types/api.ts (only for User types)
|
|
259
|
+
- tests/api/users.test.ts
|
|
260
|
+
|
|
261
|
+
Do NOT:
|
|
262
|
+
- Modify other endpoints or middleware
|
|
263
|
+
- Change authentication globally
|
|
264
|
+
- Update the database schema
|
|
265
|
+
|
|
266
|
+
The endpoint must:
|
|
267
|
+
- Validate email format
|
|
268
|
+
- Hash password (use bcrypt)
|
|
269
|
+
- Return 201 with user object on success
|
|
270
|
+
- Return 400 with error message on invalid input
|
|
271
|
+
- Return 409 if email already exists
|
|
272
|
+
- Include tests for valid input, duplicate email, invalid email
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Recommended Allowlist:**
|
|
276
|
+
|
|
277
|
+
```bash
|
|
278
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/app/api/users/** src/lib/user-service.ts src/types/api.ts tests/api/users.test.ts"
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### 5. Configuration or Build Fix
|
|
282
|
+
|
|
283
|
+
**When:** Fix a configuration issue (tsconfig, jest, etc.)
|
|
284
|
+
|
|
285
|
+
```
|
|
286
|
+
Fix [config issue description] in `[config file]`.
|
|
287
|
+
|
|
288
|
+
Restrict changes to:
|
|
289
|
+
- [config file]
|
|
290
|
+
- [related source files affected by the fix]
|
|
291
|
+
- tests/ (if config changes affect test setup)
|
|
292
|
+
|
|
293
|
+
Do NOT:
|
|
294
|
+
- Modify unrelated configuration files
|
|
295
|
+
- Change build process for other targets
|
|
296
|
+
- Update source code beyond what's needed for the fix
|
|
297
|
+
|
|
298
|
+
The fix must:
|
|
299
|
+
- Correctly resolve [issue]
|
|
300
|
+
- Not break [other feature]
|
|
301
|
+
- Be compatible with [environment/version]
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
**Example:**
|
|
305
|
+
|
|
306
|
+
```
|
|
307
|
+
Fix TypeScript compilation error in tsconfig.json where async/await doesn't transpile for ES2020.
|
|
308
|
+
|
|
309
|
+
Restrict changes to:
|
|
310
|
+
- tsconfig.json
|
|
311
|
+
- src/lib/async-utils.ts (if implementation changes needed)
|
|
312
|
+
|
|
313
|
+
Do NOT:
|
|
314
|
+
- Modify jest.config.ts or other configs
|
|
315
|
+
- Change build process
|
|
316
|
+
|
|
317
|
+
The fix must:
|
|
318
|
+
- Compile src/lib/async-utils.ts without errors
|
|
319
|
+
- Target ES2020 as intended
|
|
320
|
+
- Preserve all other compiler options
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
**Recommended Allowlist:**
|
|
324
|
+
|
|
325
|
+
```bash
|
|
326
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="tsconfig.json src/lib/async-utils.ts"
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
### 6. Large Refactor (Multiple Files)
|
|
330
|
+
|
|
331
|
+
**When:** Refactor a feature across multiple files
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
Refactor [feature name] to [desired outcome].
|
|
335
|
+
|
|
336
|
+
Scope:
|
|
337
|
+
- Modify [module 1], [module 2], [module 3] to [specific changes]
|
|
338
|
+
- Update [test modules] correspondingly
|
|
339
|
+
|
|
340
|
+
Do NOT:
|
|
341
|
+
- Change public API contracts
|
|
342
|
+
- Modify unrelated features
|
|
343
|
+
- Add new endpoints or exports
|
|
344
|
+
- Update documentation outside of [specific area]
|
|
345
|
+
|
|
346
|
+
The refactor must:
|
|
347
|
+
- Preserve all external behavior
|
|
348
|
+
- Pass all existing tests
|
|
349
|
+
- Move [X] logic from [location A] to [location B]
|
|
350
|
+
- Reduce [metric] by improving [specific aspect]
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
**Example:**
|
|
354
|
+
|
|
355
|
+
```
|
|
356
|
+
Refactor the auth module to extract session utils into a separate file.
|
|
357
|
+
|
|
358
|
+
Scope:
|
|
359
|
+
- Extract session logic from src/lib/auth.ts to src/lib/session-utils.ts
|
|
360
|
+
- Update src/lib/auth.ts to import from session-utils.ts
|
|
361
|
+
- Update tests/auth.test.ts and tests/session-utils.test.ts
|
|
362
|
+
|
|
363
|
+
Do NOT:
|
|
364
|
+
- Change public API exports from src/lib/auth.ts
|
|
365
|
+
- Modify middleware or route handlers
|
|
366
|
+
- Update environment variable schema
|
|
367
|
+
|
|
368
|
+
The refactor must:
|
|
369
|
+
- Preserve all existing behavior
|
|
370
|
+
- Pass all tests (no functionality change)
|
|
371
|
+
- Make session utilities reusable
|
|
372
|
+
- Improve code organization
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
**Recommended Allowlist:**
|
|
376
|
+
|
|
377
|
+
```bash
|
|
378
|
+
KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/auth.ts src/lib/session-utils.ts tests/auth.test.ts tests/session-utils.test.ts"
|
|
379
|
+
```
|
|
380
|
+
|
|
381
|
+
## Anti-Patterns: What NOT to Do
|
|
382
|
+
|
|
383
|
+
### ❌ Vague Scope
|
|
384
|
+
|
|
385
|
+
```
|
|
386
|
+
"Fix the bug"
|
|
387
|
+
"Improve the code"
|
|
388
|
+
"Make it better"
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
**Why:** Agent doesn't know what files to touch → scope creep.
|
|
392
|
+
|
|
393
|
+
### ✅ Better
|
|
394
|
+
|
|
395
|
+
```
|
|
396
|
+
"Fix the parser null-reference bug in src/lib/parser.ts when input is null"
|
|
397
|
+
"Improve type safety by adding strict null checks in src/lib/validation.ts"
|
|
398
|
+
"Make JSON parsing faster by caching compiled schemas in src/lib/json-cache.ts"
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
403
|
+
### ❌ Vague Constraints
|
|
404
|
+
|
|
405
|
+
```
|
|
406
|
+
"Don't break anything"
|
|
407
|
+
"Keep it simple"
|
|
408
|
+
"Don't over-engineer"
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
**Why:** Agent interprets differently than you; no clear boundaries.
|
|
412
|
+
|
|
413
|
+
### ✅ Better
|
|
414
|
+
|
|
415
|
+
```
|
|
416
|
+
"Do not modify src/utils/ or src/components/"
|
|
417
|
+
"Keep the function signature the same"
|
|
418
|
+
"Do not add new dependencies to package.json"
|
|
419
|
+
```
|
|
420
|
+
|
|
421
|
+
---
|
|
422
|
+
|
|
423
|
+
### ❌ Over-Specification
|
|
424
|
+
|
|
425
|
+
```
|
|
426
|
+
"Change line 23 from X to Y. Then on line 45 change Z to W. Then..."
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
**Why:** Too prescriptive; prevents legitimate improvements; locks you into one solution.
|
|
430
|
+
|
|
431
|
+
### ✅ Better
|
|
432
|
+
|
|
433
|
+
```
|
|
434
|
+
"Fix the null-reference error on line 23. The issue occurs when
|
|
435
|
+
input is null. Use a null-coalescing operator or early return."
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
---
|
|
439
|
+
|
|
440
|
+
### ❌ Multiple Unrelated Tasks
|
|
441
|
+
|
|
442
|
+
```
|
|
443
|
+
"Fix the parser bug AND implement the new button component AND add metrics"
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
**Why:** Scope explosion; makes it hard to define allowlist and verify each fix.
|
|
447
|
+
|
|
448
|
+
### ✅ Better
|
|
449
|
+
|
|
450
|
+
```
|
|
451
|
+
"Fix the parser bug in src/lib/parser.ts that fails on empty input.
|
|
452
|
+
Run this first. Then in a separate kaseki run: implement the new button component."
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
## Combining Prompts with Allowlist
|
|
456
|
+
|
|
457
|
+
**The Power Combination:**
|
|
458
|
+
|
|
459
|
+
1. **Write a clear, scoped prompt** using a template above
|
|
460
|
+
2. **Set a matching allowlist** that covers those specific files
|
|
461
|
+
3. **Run kaseki** with both settings
|
|
462
|
+
|
|
463
|
+
**Example:**
|
|
464
|
+
|
|
465
|
+
```bash
|
|
466
|
+
export TASK_PROMPT="Fix the normalizeRole function in src/lib/role-utils.ts \
|
|
467
|
+
to safely handle null FriendlyName by falling back to 'Unnamed Role'. \
|
|
468
|
+
Add one test case in tests/role-utils.test.ts. \
|
|
469
|
+
Do not modify other files or refactor."
|
|
470
|
+
|
|
471
|
+
export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role-utils.ts tests/role-utils.test.ts"
|
|
472
|
+
|
|
473
|
+
./run-kaseki.sh
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
**Result:**
|
|
477
|
+
|
|
478
|
+
- Agent stays focused on the task
|
|
479
|
+
- Allowlist ensures no surprise changes
|
|
480
|
+
- Easy to review what changed (small diff)
|
|
481
|
+
- Easy to identify if agent drifted from instructions
|
|
482
|
+
- Restoration report confirms agent stayed on task
|
|
483
|
+
|
|
484
|
+
## Troubleshooting: Agent Changed Too Many Files
|
|
485
|
+
|
|
486
|
+
### If Prompt is Clear + Allowlist is Set + Agent Still Over-Modifies
|
|
487
|
+
|
|
488
|
+
1. **Check restoration report** — which files were restored?
|
|
489
|
+
|
|
490
|
+
```bash
|
|
491
|
+
cat /results/kaseki-N/restoration-report.md
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
2. **Check agent reasoning** — look at pi-summary.json
|
|
495
|
+
|
|
496
|
+
```bash
|
|
497
|
+
cat /results/kaseki-N/pi-summary.json | jq '.thinking' | head -100
|
|
498
|
+
```
|
|
499
|
+
|
|
500
|
+
3. **Refine the prompt** with more explicit constraints:
|
|
501
|
+
- ✅ "Do not modify" specific files
|
|
502
|
+
- ✅ "Only change" specific functions
|
|
503
|
+
- ✅ "Add one test case, no more"
|
|
504
|
+
|
|
505
|
+
4. **Consider task decomposition** — break into smaller tasks:
|
|
506
|
+
- Instead of: "Refactor entire module"
|
|
507
|
+
- Use: "Extract X function from module" + "Update imports" (separate runs)
|
|
508
|
+
|
|
509
|
+
## Related Resources
|
|
510
|
+
|
|
511
|
+
- [docs/QUALITY_GATES.md](./QUALITY_GATES.md) — Allowlist configuration and patterns
|
|
512
|
+
- [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate allowlist from completed run
|
|
513
|
+
- [scripts/dry-run-allowlist.sh](../scripts/dry-run-allowlist.sh) — Preview what would be restored
|
|
514
|
+
- `templates/allowlist-*.txt` — Pre-built allowlist templates
|
|
515
|
+
|
|
516
|
+
## Summary
|
|
517
|
+
|
|
518
|
+
**Good Task Prompts:**
|
|
519
|
+
|
|
520
|
+
1. Have a **clear, specific goal** (not vague)
|
|
521
|
+
2. Define **scope boundaries** (which files to touch)
|
|
522
|
+
3. State **constraints** (what not to do)
|
|
523
|
+
4. Include **success criteria** (how to verify)
|
|
524
|
+
5. Are **focused** (one task, not multiple)
|
|
525
|
+
|
|
526
|
+
**Good Allowlist:**
|
|
527
|
+
|
|
528
|
+
1. **Matches the prompt scope** exactly
|
|
529
|
+
2. Is **as narrow as reasonable** (prevent scope creep)
|
|
530
|
+
3. Is **documented** (why these files?)
|
|
531
|
+
4. Can be **verified** with dry-run-allowlist.sh
|
|
532
|
+
|
|
533
|
+
**Result:** Focused, reviewable agent outputs with predictable scope.
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# Validation Fix Implementation Summary
|
|
2
|
+
|
|
3
|
+
## Issue
|
|
4
|
+
|
|
5
|
+
Kaseki-agent validation commands failed with getcwd() error on matmetrics repo:
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
|
|
9
|
+
Error: ENOENT: process.cwd failed
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
All three validation commands (npm run check, test, build) failed with exit code 7.
|
|
13
|
+
|
|
14
|
+
## Root Cause
|
|
15
|
+
|
|
16
|
+
The validation phase executed npm commands using `bash -lc` (login shell), which:
|
|
17
|
+
|
|
18
|
+
1. Sources `/etc/profile` and `~/.bashrc` during startup
|
|
19
|
+
2. Attempts to retrieve current working directory via `getcwd()` syscall
|
|
20
|
+
3. In `--read-only` containers with restricted filesystem access, this fails
|
|
21
|
+
4. Results in ENOENT error before any user command runs
|
|
22
|
+
|
|
23
|
+
## Solution
|
|
24
|
+
|
|
25
|
+
Three complementary fixes applied to [kaseki-agent.sh](kaseki-agent.sh):
|
|
26
|
+
|
|
27
|
+
### Fix 1: Use Non-Login Shell (Line 1579)
|
|
28
|
+
|
|
29
|
+
**Before:**
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
bash -lc "$trimmed"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**After:**
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Use non-login shell (bash -c) to avoid initialization issues in --read-only containers
|
|
39
|
+
# Login shell (bash -l) sources /etc/profile and ~/.bashrc, which can fail with getcwd()
|
|
40
|
+
# errors when running in constrained filesystem environments (read-only root, etc.)
|
|
41
|
+
bash -c "$trimmed"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**Impact**: Skips shell initialization entirely; npm commands still work normally
|
|
45
|
+
|
|
46
|
+
### Fix 2: Pre-Validation Directory Checkpoint (Lines 1549-1561)
|
|
47
|
+
|
|
48
|
+
**Added:**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
# Checkpoint: Verify working directory exists before validation
|
|
52
|
+
if ! [ -d /workspace/repo ]; then
|
|
53
|
+
printf 'ERROR: Working directory /workspace/repo does not exist before validation\n' | tee -a /results/validation.log
|
|
54
|
+
printf 'Current pwd: %s\n' "$(pwd 2>&1 || echo '<pwd failed>')" | tee -a /results/validation.log
|
|
55
|
+
printf 'Filesystem state:\n' | tee -a /results/validation.log
|
|
56
|
+
ls -laR /workspace 2>&1 | head -100 | tee -a /results/validation.log
|
|
57
|
+
VALIDATION_EXIT=1
|
|
58
|
+
VALIDATION_FAILED_COMMAND_DETAIL="Working directory /workspace/repo missing before validation"
|
|
59
|
+
record_stage_timing "validation" "$VALIDATION_EXIT" ...
|
|
60
|
+
fi
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Impact**: Catches directory issues early; provides diagnostic info for troubleshooting
|
|
64
|
+
|
|
65
|
+
### Fix 3: Enhanced Error Diagnostics (Lines 1591-1604)
|
|
66
|
+
|
|
67
|
+
**Added:**
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Enhanced diagnostics for getcwd-type errors
|
|
71
|
+
if grep -q 'getcwd\|No such file or directory\|cannot access parent directories' /results/validation.log; then
|
|
72
|
+
{
|
|
73
|
+
printf '\n[DIAGNOSTICS] Validation command failed with directory access error:\n'
|
|
74
|
+
printf 'Working directory status:\n'
|
|
75
|
+
printf ' Current pwd: %s\n' "$(pwd 2>&1 || echo '<pwd failed>')"
|
|
76
|
+
printf ' /workspace/repo exists: %s\n' "$([ -d /workspace/repo ] && echo 'yes' || echo 'no')"
|
|
77
|
+
if [ -L /workspace/repo/node_modules ]; then
|
|
78
|
+
printf ' node_modules is symlink → %s\n' "$(readlink /workspace/repo/node_modules 2>&1 || echo '<readlink failed>')"
|
|
79
|
+
fi
|
|
80
|
+
printf 'Last 20 lines of validation log:\n'
|
|
81
|
+
tail -20 /results/validation.log
|
|
82
|
+
} | tee -a /results/quality.log
|
|
83
|
+
fi
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**Impact**: Captures filesystem state on getcwd errors; enables root cause analysis
|
|
87
|
+
|
|
88
|
+
## Testing
|
|
89
|
+
|
|
90
|
+
### Unit Tests ✅
|
|
91
|
+
|
|
92
|
+
- Non-login shell syntax verified in code
|
|
93
|
+
- Directory checkpoint logic confirmed
|
|
94
|
+
- Enhanced diagnostics patterns found
|
|
95
|
+
- Script syntax validation passed
|
|
96
|
+
|
|
97
|
+
### Integration Tests ✅
|
|
98
|
+
|
|
99
|
+
- Non-login npm validation commands execute successfully
|
|
100
|
+
- Directory checkpoint detects missing directories
|
|
101
|
+
- Enhanced diagnostics captured correctly
|
|
102
|
+
|
|
103
|
+
### Docker Build ✅
|
|
104
|
+
|
|
105
|
+
- Image built: `kaseki-agent:fix-validation`
|
|
106
|
+
- Script syntax valid in container
|
|
107
|
+
- Non-login shell fix present in deployed image
|
|
108
|
+
|
|
109
|
+
## Expected Outcome
|
|
110
|
+
|
|
111
|
+
**Before Fix:**
|
|
112
|
+
|
|
113
|
+
- matmetrics validation fails immediately
|
|
114
|
+
- Exit: 7 (from npm getcwd error)
|
|
115
|
+
- No diagnostic info about filesystem state
|
|
116
|
+
|
|
117
|
+
**After Fix:**
|
|
118
|
+
|
|
119
|
+
- matmetrics validation commands execute normally
|
|
120
|
+
- npm properly runs `npm run check`, `npm run test`, `npm run build`
|
|
121
|
+
- If directory issues occur, checkpoint catches them with full diagnostics
|
|
122
|
+
- If getcwd errors still occur (unlikely), diagnostics capture filesystem state for analysis
|
|
123
|
+
|
|
124
|
+
## Backwards Compatibility
|
|
125
|
+
|
|
126
|
+
✅ No breaking changes:
|
|
127
|
+
|
|
128
|
+
- Non-login shell is transparent to npm commands
|
|
129
|
+
- Directory checkpoint is defensive; only triggers if /workspace/repo missing
|
|
130
|
+
- Enhanced diagnostics are read-only; don't modify execution flow
|
|
131
|
+
- All changes operate before user code runs
|
|
132
|
+
|
|
133
|
+
## Notes
|
|
134
|
+
|
|
135
|
+
1. **Why non-login shell works**: Most npm commands and validation scripts don't rely on `~/.bashrc` or `~/.profile` behavior. The shell initialization was unnecessary overhead.
|
|
136
|
+
|
|
137
|
+
2. **Read-only filesystem is correct**: The `--read-only` flag in run-kaseki.sh is a necessary security control. This fix makes validation compatible with it.
|
|
138
|
+
|
|
139
|
+
3. **Symlink safety**: The fix doesn't change symlink handling. If `KASEKI_DEPENDENCY_RESTORE_MODE=symlink` is in use, diagnostics will detect broken symlinks.
|