@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,526 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dependency-cache-optimization
|
|
3
|
+
description: Understanding and optimizing the 4-layer npm dependency caching strategy
|
|
4
|
+
tags: [kaseki, caching, performance, npm, optimization]
|
|
5
|
+
relatedSkills: [docker-image-management, workflow-diagnosis]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Dependency Cache Optimization for Kaseki Agent
|
|
9
|
+
|
|
10
|
+
This skill guides understanding and optimizing kaseki-agent's 4-layer npm dependency caching strategy for faster builds and reduced network I/O.
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
**When to Use**:
|
|
15
|
+
- Diagnosing slow `npm ci` runs
|
|
16
|
+
- Understanding cache hits vs. misses
|
|
17
|
+
- Optimizing cache layer strategy
|
|
18
|
+
- Tuning image builds
|
|
19
|
+
- Improving kaseki run performance
|
|
20
|
+
|
|
21
|
+
**Key Concepts**:
|
|
22
|
+
- Kaseki uses a 4-layer cache to avoid redundant `npm ci` runs
|
|
23
|
+
- Cache layers: stamp check → workspace cache → image seed cache → fresh install
|
|
24
|
+
- Stamp files encode repository and lock file hashes
|
|
25
|
+
- Cache invalidation happens when lock files change
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## The 4-Layer Cache Strategy
|
|
30
|
+
|
|
31
|
+
### Architecture Diagram
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Kaseki Instance Run
|
|
35
|
+
│
|
|
36
|
+
├─ Layer 1: Stamp Check
|
|
37
|
+
│ └─ Does node_modules + stamp match? → Skip (fast path)
|
|
38
|
+
│
|
|
39
|
+
├─ Layer 2: Workspace Cache
|
|
40
|
+
│ └─ Previous run's cache for this repo+lock? → Restore
|
|
41
|
+
│
|
|
42
|
+
├─ Layer 3: Image Seed Cache
|
|
43
|
+
│ └─ Pre-built cache in Docker image? → Restore
|
|
44
|
+
│
|
|
45
|
+
└─ Layer 4: Fresh Install
|
|
46
|
+
└─ npm ci --prefer-offline (download if needed)
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Layer 1: Stamp Check (Fastest)
|
|
50
|
+
|
|
51
|
+
**Purpose**: Quick validation that node_modules is already correct
|
|
52
|
+
|
|
53
|
+
**Stamp File Location**: `/workspace/.kaseki-cache/<repo-hash>.<lock-hash>.stamp`
|
|
54
|
+
|
|
55
|
+
**Format**:
|
|
56
|
+
```
|
|
57
|
+
repo:<repo-hash> lock:<lock-hash> timestamp:<unix-time>
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**Computation**:
|
|
61
|
+
- `<repo-hash>`: SHA-1 of repo directory name (or GitHub owner/repo)
|
|
62
|
+
- `<lock-hash>`: SHA-1 of package-lock.json content
|
|
63
|
+
|
|
64
|
+
**Speed**: Microseconds (file comparison)
|
|
65
|
+
|
|
66
|
+
**When Stamp Matches**:
|
|
67
|
+
```bash
|
|
68
|
+
# Stamp file exists and matches current repo + lock
|
|
69
|
+
# → node_modules is already correct
|
|
70
|
+
# → Skip all install steps
|
|
71
|
+
# Result: 0 seconds saved!
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**When Stamp Doesn't Match**:
|
|
75
|
+
```bash
|
|
76
|
+
# Stamp file missing or hashes differ
|
|
77
|
+
# → Try Layer 2 (workspace cache)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Layer 2: Workspace Cache (Fast)
|
|
81
|
+
|
|
82
|
+
**Purpose**: Reuse cached node_modules from a previous kaseki run
|
|
83
|
+
|
|
84
|
+
**Cache Location**: `/workspace/.kaseki-cache/<repo-hash>/<lock-hash>/node_modules/`
|
|
85
|
+
|
|
86
|
+
**Speed**: Seconds (copy operation)
|
|
87
|
+
|
|
88
|
+
**When Cache Exists**:
|
|
89
|
+
```bash
|
|
90
|
+
# Found cached node_modules for this repo + lock combo
|
|
91
|
+
# → Copy from .kaseki-cache to ./node_modules
|
|
92
|
+
# → Create new stamp file
|
|
93
|
+
# Result: 5–30 seconds (vs. 1–3 minutes for fresh install)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
**When Cache Doesn't Exist**:
|
|
97
|
+
```bash
|
|
98
|
+
# No previous run cached this repo+lock combo
|
|
99
|
+
# → Try Layer 3 (image seed cache)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Layer 3: Image Seed Cache (Medium)
|
|
103
|
+
|
|
104
|
+
**Purpose**: Use pre-built cache in the Docker image for common repos
|
|
105
|
+
|
|
106
|
+
**Cache Location (in image)**: `/opt/kaseki/workspace-cache/`
|
|
107
|
+
|
|
108
|
+
**Contents**:
|
|
109
|
+
- `package.json` — Sample dependencies
|
|
110
|
+
- `node_modules/` — Pre-installed modules
|
|
111
|
+
- Package cache (npm's internal cache)
|
|
112
|
+
|
|
113
|
+
**Speed**: 30 seconds (copy + verification)
|
|
114
|
+
|
|
115
|
+
**When Cache Matches Target Lock**:
|
|
116
|
+
```bash
|
|
117
|
+
# Image seed cache exists and matches target lock file
|
|
118
|
+
# → Copy from /opt/kaseki/workspace-cache to ./node_modules
|
|
119
|
+
# → Create stamp file
|
|
120
|
+
# Result: 10–60 seconds (vs. 1–3 minutes)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
**When Cache Doesn't Match**:
|
|
124
|
+
```bash
|
|
125
|
+
# Lock hashes differ or seed cache doesn't exist
|
|
126
|
+
# → Fall through to Layer 4 (fresh install)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### Layer 4: Fresh Install (Slowest)
|
|
130
|
+
|
|
131
|
+
**Purpose**: Install dependencies from scratch (npm registry or offline cache)
|
|
132
|
+
|
|
133
|
+
**Speed**: 1–3 minutes (network I/O + compilation)
|
|
134
|
+
|
|
135
|
+
**Command**:
|
|
136
|
+
```bash
|
|
137
|
+
npm ci --prefer-offline
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
**Fallback**: If `--prefer-offline` can't find packages, npm downloads from registry.
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
## Cache Invalidation & Busting
|
|
145
|
+
|
|
146
|
+
### When Does Cache Invalidate?
|
|
147
|
+
|
|
148
|
+
| Trigger | Impact | Example |
|
|
149
|
+
|---|---|---|
|
|
150
|
+
| **Lock file changed** | All layers reset | Upgrading a dependency |
|
|
151
|
+
| **New repo** | Layers 2–3 miss | First run against new repo |
|
|
152
|
+
| **Image rebuilt** | Layer 3 reset | New Dockerfile, new base image |
|
|
153
|
+
| **Manual deletion** | Layers 2–3 reset | `rm -rf .kaseki-cache` |
|
|
154
|
+
|
|
155
|
+
### Detecting Cache Misses
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Check validation timings
|
|
159
|
+
cat /agents/kaseki-results/kaseki-N/validation-timings.tsv
|
|
160
|
+
# Output:
|
|
161
|
+
# command duration_seconds
|
|
162
|
+
# npm ci 180 ← 3 minutes = cache miss (Layer 4)
|
|
163
|
+
|
|
164
|
+
# Expected baseline:
|
|
165
|
+
# npm ci (cache hit) : 5–30 seconds (Layer 2)
|
|
166
|
+
# npm ci (seed hit) : 30–60 seconds (Layer 3)
|
|
167
|
+
# npm ci (fresh) : 1–3 minutes (Layer 4)
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Analysis**:
|
|
171
|
+
```bash
|
|
172
|
+
# Was Layer 1 (stamp check) attempted?
|
|
173
|
+
grep -i "stamp\|cache hit" /agents/kaseki-results/kaseki-N/stdout.log
|
|
174
|
+
|
|
175
|
+
# If missing, check if lock file changed
|
|
176
|
+
git diff package-lock.json
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Manual Cache Busting
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
# Clear workspace cache (Layers 1–2)
|
|
183
|
+
rm -rf /workspace/.kaseki-cache
|
|
184
|
+
|
|
185
|
+
# Clear image seed cache (rebuild Docker image)
|
|
186
|
+
docker build --no-cache -t kaseki-template:latest .
|
|
187
|
+
|
|
188
|
+
# Next run will fall through to Layer 4 (fresh install)
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
---
|
|
192
|
+
|
|
193
|
+
## Stamp File Details
|
|
194
|
+
|
|
195
|
+
### Stamp File Naming
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
.kaseki-cache/<repo-hash>.<lock-hash>.stamp
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Components**:
|
|
202
|
+
- `<repo-hash>`: 40-char SHA-1 hex digest of repo identifier
|
|
203
|
+
- `<lock-hash>`: 40-char SHA-1 hex digest of package-lock.json
|
|
204
|
+
|
|
205
|
+
**Example**:
|
|
206
|
+
```
|
|
207
|
+
.kaseki-cache/abc1234567890def1234567890abcdef12345678.fed0987654321abc0987654321fedcba98765432.stamp
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
### Stamp File Content
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
repo:abc1234567890def1234567890abcdef12345678 lock:fed0987654321abc0987654321fedcba98765432 timestamp:1703520600
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### Computing Hash Examples
|
|
217
|
+
|
|
218
|
+
**Repo Hash** (from repo name):
|
|
219
|
+
```bash
|
|
220
|
+
echo -n "cyanautomation/crudmapper" | sha1sum
|
|
221
|
+
# Output: abc1234567890def1234567890abcdef12345678
|
|
222
|
+
|
|
223
|
+
# Or from directory name:
|
|
224
|
+
echo -n "kaseki-runs/kaseki-1/crudmapper" | sha1sum
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
**Lock Hash** (from package-lock.json):
|
|
228
|
+
```bash
|
|
229
|
+
sha1sum package-lock.json | awk '{print $1}'
|
|
230
|
+
# Output: fed0987654321abc0987654321fedcba98765432
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### Stamp Check Script
|
|
234
|
+
|
|
235
|
+
In `kaseki-agent.sh`, the stamp check looks like:
|
|
236
|
+
|
|
237
|
+
```bash
|
|
238
|
+
REPO_HASH=$(echo -n "$REPO_URL" | sha1sum | cut -d' ' -f1)
|
|
239
|
+
LOCK_HASH=$(sha1sum package-lock.json | cut -d' ' -f1)
|
|
240
|
+
STAMP_FILE="/workspace/.kaseki-cache/${REPO_HASH}.${LOCK_HASH}.stamp"
|
|
241
|
+
|
|
242
|
+
if [[ -f "$STAMP_FILE" ]]; then
|
|
243
|
+
echo "Stamp check passed: cache is valid"
|
|
244
|
+
exit 0 # Skip npm install
|
|
245
|
+
fi
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
## Cache Directory Structure
|
|
251
|
+
|
|
252
|
+
### Workspace Cache Layout
|
|
253
|
+
|
|
254
|
+
```
|
|
255
|
+
/workspace/
|
|
256
|
+
├── .kaseki-cache/
|
|
257
|
+
│ ├── repo-hash-1.lock-hash-1.stamp
|
|
258
|
+
│ ├── repo-hash-1/
|
|
259
|
+
│ │ ├── lock-hash-1/
|
|
260
|
+
│ │ │ ├── node_modules/
|
|
261
|
+
│ │ │ │ ├── package1/
|
|
262
|
+
│ │ │ │ ├── package2/
|
|
263
|
+
│ │ │ └── ...
|
|
264
|
+
│ │ └── lock-hash-2/
|
|
265
|
+
│ │ └── node_modules/
|
|
266
|
+
│ └── repo-hash-2/
|
|
267
|
+
│ └── ...
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
**Purpose**: Multiple locks per repo, multiple repos per workspace
|
|
271
|
+
|
|
272
|
+
**Retention**: Deleted after kaseki instance completes (unless `KASEKI_KEEP_WORKSPACE=1`)
|
|
273
|
+
|
|
274
|
+
### Image Seed Cache Layout
|
|
275
|
+
|
|
276
|
+
```
|
|
277
|
+
/opt/kaseki/workspace-cache/
|
|
278
|
+
├── package.json
|
|
279
|
+
├── package-lock.json
|
|
280
|
+
└── node_modules/
|
|
281
|
+
├── package1/
|
|
282
|
+
├── package2/
|
|
283
|
+
└── ... (common packages)
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Populated During Image Build**:
|
|
287
|
+
```dockerfile
|
|
288
|
+
COPY docker/workspace-cache/ /opt/kaseki/workspace-cache/
|
|
289
|
+
RUN cd /opt/kaseki/workspace-cache && npm ci
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Updated**:
|
|
293
|
+
```bash
|
|
294
|
+
# Refresh seed cache (in this repo)
|
|
295
|
+
cd docker/workspace-cache
|
|
296
|
+
npm update # or npm install <packages>
|
|
297
|
+
npm ci
|
|
298
|
+
cd ../..
|
|
299
|
+
|
|
300
|
+
# Rebuild image
|
|
301
|
+
docker build -t kaseki-template:latest .
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## Performance Analysis & Tuning
|
|
307
|
+
|
|
308
|
+
### Baseline Metrics
|
|
309
|
+
|
|
310
|
+
**Cache Layers** (typical timing):
|
|
311
|
+
|
|
312
|
+
| Scenario | Duration | Bottleneck |
|
|
313
|
+
|---|---|---|
|
|
314
|
+
| Layer 1 hit (stamp match) | <1 sec | File check only |
|
|
315
|
+
| Layer 2 hit (workspace) | 5–30 sec | Copy + verify |
|
|
316
|
+
| Layer 3 hit (seed) | 30–60 sec | Copy + npm resolve |
|
|
317
|
+
| Layer 4 (fresh) | 1–3 min | Network I/O + compile |
|
|
318
|
+
|
|
319
|
+
**Optimization Target**: Aim for Layer 2 most runs (workspace cache hits)
|
|
320
|
+
|
|
321
|
+
### Diagnosing Slow Installs
|
|
322
|
+
|
|
323
|
+
**Check Actual Duration**:
|
|
324
|
+
```bash
|
|
325
|
+
cat /agents/kaseki-results/kaseki-N/validation-timings.tsv | grep npm
|
|
326
|
+
|
|
327
|
+
# Output:
|
|
328
|
+
# npm ci 180 ← 3 minutes = problem!
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
**Step 1: Check If Stamp Hit**
|
|
332
|
+
```bash
|
|
333
|
+
grep -i "stamp\|cache" /agents/kaseki-results/kaseki-N/stdout.log
|
|
334
|
+
# Look for: "Stamp check passed" or "Cache hit"
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
**Step 2: Check If Lock File Changed**
|
|
338
|
+
```bash
|
|
339
|
+
cat /agents/kaseki-results/kaseki-N/git.diff | grep package-lock.json
|
|
340
|
+
# If output exists, lock file was modified → cache invalidated
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
**Step 3: Check Image Seed Cache**
|
|
344
|
+
```bash
|
|
345
|
+
# Was seed cache used?
|
|
346
|
+
grep -i "seed\|image cache" /agents/kaseki-results/kaseki-N/stdout.log
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
**Step 4: Analyze npm Behavior**
|
|
350
|
+
```bash
|
|
351
|
+
# Check npm install log for network delays
|
|
352
|
+
grep -i "downloading\|get\|registry" /agents/kaseki-results/kaseki-N/stdout.log
|
|
353
|
+
|
|
354
|
+
# If many "downloading", network was bottleneck
|
|
355
|
+
# If few, compilation was bottleneck
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Optimization Strategies
|
|
359
|
+
|
|
360
|
+
**Strategy 1: Maximize Stamp Hits** (Best)
|
|
361
|
+
- Minimize lock file changes
|
|
362
|
+
- When updating dependencies, commit lock file changes and wait for workspace cache to populate
|
|
363
|
+
- Result: <1 second installs
|
|
364
|
+
|
|
365
|
+
**Strategy 2: Maximize Workspace Cache Hits** (Good)
|
|
366
|
+
- Run frequent kaseki jobs against same repos
|
|
367
|
+
- Cache persists across runs (if not deleted)
|
|
368
|
+
- Result: 5–30 second installs
|
|
369
|
+
|
|
370
|
+
**Strategy 3: Optimize Image Seed Cache** (Medium)
|
|
371
|
+
- Pre-populate with commonly-needed packages
|
|
372
|
+
- Update dockerfile/workspace-cache/ monthly
|
|
373
|
+
- Result: 30–60 second installs
|
|
374
|
+
|
|
375
|
+
**Strategy 4: Accept Fresh Installs** (Fallback)
|
|
376
|
+
- Use `npm ci --prefer-offline` to reduce network I/O
|
|
377
|
+
- Consider upgrading base image npm version (faster resolution)
|
|
378
|
+
- Result: 1–3 minute installs
|
|
379
|
+
|
|
380
|
+
### Example Optimization
|
|
381
|
+
|
|
382
|
+
**Scenario**: npm ci is taking 3 minutes every run
|
|
383
|
+
|
|
384
|
+
**Diagnosis**:
|
|
385
|
+
```bash
|
|
386
|
+
# Check timings across recent runs
|
|
387
|
+
for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
|
|
388
|
+
echo "=== $(basename $run) ==="
|
|
389
|
+
grep npm "$run/validation-timings.tsv" | awk '{print $2}'
|
|
390
|
+
done
|
|
391
|
+
# All show 180 seconds → consistent problem
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
**Analysis**:
|
|
395
|
+
```bash
|
|
396
|
+
# Check if lock file is changing
|
|
397
|
+
for run in /agents/kaseki-results/kaseki-{1,2,3}/; do
|
|
398
|
+
grep package-lock.json "$run/git.diff" | head -1
|
|
399
|
+
done
|
|
400
|
+
# All show lock changes → root cause found
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
**Solution**:
|
|
404
|
+
```bash
|
|
405
|
+
# Option 1: Commit lock changes to main branch
|
|
406
|
+
git checkout main
|
|
407
|
+
npm install # Update lock
|
|
408
|
+
git add package-lock.json
|
|
409
|
+
git commit -m "chore: update dependencies"
|
|
410
|
+
git push origin main
|
|
411
|
+
|
|
412
|
+
# Option 2: Seed the image cache with current lock
|
|
413
|
+
cp package-lock.json docker/workspace-cache/
|
|
414
|
+
cd docker/workspace-cache
|
|
415
|
+
npm ci
|
|
416
|
+
cd ../..
|
|
417
|
+
|
|
418
|
+
docker build -t kaseki-template:latest .
|
|
419
|
+
|
|
420
|
+
# Next runs will hit Layer 3 (60 seconds instead of 180)
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
---
|
|
424
|
+
|
|
425
|
+
## Cache Persistence & Cleanup
|
|
426
|
+
|
|
427
|
+
### Docker Container Cleanup
|
|
428
|
+
|
|
429
|
+
By default, kaseki containers are ephemeral:
|
|
430
|
+
|
|
431
|
+
```bash
|
|
432
|
+
# Workspace is deleted after run
|
|
433
|
+
/workspace/.kaseki-cache/
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
**Keep Workspace for Debugging**:
|
|
437
|
+
```bash
|
|
438
|
+
KASEKI_KEEP_WORKSPACE=1 ./run-kaseki.sh
|
|
439
|
+
# Workspace retained at /agents/kaseki-runs/kaseki-N/
|
|
440
|
+
```
|
|
441
|
+
|
|
442
|
+
### Manual Cache Management
|
|
443
|
+
|
|
444
|
+
```bash
|
|
445
|
+
# Clear all workspace caches
|
|
446
|
+
rm -rf /agents/kaseki-cache/*
|
|
447
|
+
|
|
448
|
+
# Clear specific repo cache
|
|
449
|
+
rm -rf /agents/kaseki-cache/repo-abc123/*
|
|
450
|
+
|
|
451
|
+
# Inspect cache size
|
|
452
|
+
du -sh /agents/kaseki-cache/
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
### Image Cache Cleanup
|
|
456
|
+
|
|
457
|
+
```bash
|
|
458
|
+
# Rebuild image (clears old layers)
|
|
459
|
+
docker build -t kaseki-template:latest .
|
|
460
|
+
|
|
461
|
+
# Or force rebuild with no cache
|
|
462
|
+
docker build --no-cache -t kaseki-template:latest .
|
|
463
|
+
|
|
464
|
+
# Prune unused Docker layers
|
|
465
|
+
docker system prune --all
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
---
|
|
469
|
+
|
|
470
|
+
## Advanced: Custom Cache Seeding
|
|
471
|
+
|
|
472
|
+
### Pre-Populate Image Seed Cache
|
|
473
|
+
|
|
474
|
+
If you frequently run kaseki against a specific repo:
|
|
475
|
+
|
|
476
|
+
**Step 1**: Clone the target repo and install
|
|
477
|
+
```bash
|
|
478
|
+
cd docker/workspace-cache
|
|
479
|
+
git clone https://github.com/org/target-repo .tmp/target
|
|
480
|
+
cp .tmp/target/package.json .
|
|
481
|
+
cp .tmp/target/package-lock.json .
|
|
482
|
+
npm ci
|
|
483
|
+
rm -rf .tmp
|
|
484
|
+
```
|
|
485
|
+
|
|
486
|
+
**Step 2**: Rebuild image
|
|
487
|
+
```bash
|
|
488
|
+
docker build -t kaseki-template:latest .
|
|
489
|
+
```
|
|
490
|
+
|
|
491
|
+
**Step 3**: Verify seed cache
|
|
492
|
+
```bash
|
|
493
|
+
docker run --rm kaseki-template:latest ls /opt/kaseki/workspace-cache/node_modules | head -10
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**Result**: First runs against target-repo will hit Layer 3, reducing install time to 30–60 seconds
|
|
497
|
+
|
|
498
|
+
### Monitoring Cache Effectiveness
|
|
499
|
+
|
|
500
|
+
```bash
|
|
501
|
+
# Track cache hits across runs
|
|
502
|
+
for run in /agents/kaseki-results/kaseki-*/; do
|
|
503
|
+
duration=$(grep npm "$run/validation-timings.tsv" | awk '{print $2}')
|
|
504
|
+
echo "$(basename $run): ${duration}s"
|
|
505
|
+
done
|
|
506
|
+
|
|
507
|
+
# Calculate average
|
|
508
|
+
for run in /agents/kaseki-results/kaseki-*/; do
|
|
509
|
+
grep npm "$run/validation-timings.tsv" | awk '{print $2}'
|
|
510
|
+
done | awk '{sum+=$1; count++} END {print "Average: " sum/count "s"}'
|
|
511
|
+
```
|
|
512
|
+
|
|
513
|
+
**Interpretation**:
|
|
514
|
+
- Average < 10 sec: Excellent (Layer 1 hits)
|
|
515
|
+
- Average 10–30 sec: Good (Layer 2 hits)
|
|
516
|
+
- Average 30–60 sec: Fair (Layer 3 hits)
|
|
517
|
+
- Average > 60 sec: Poor (Layer 4 misses)
|
|
518
|
+
|
|
519
|
+
---
|
|
520
|
+
|
|
521
|
+
## Related Skills & Docs
|
|
522
|
+
|
|
523
|
+
- [Docker Image Management](docker-image-management.md) — Image seed cache updates
|
|
524
|
+
- [Workflow Diagnosis](workflow-diagnosis.md) — Analyzing timings and performance
|
|
525
|
+
- [kaseki-agent.sh](../../kaseki-agent.sh) — Cache implementation details
|
|
526
|
+
- [CLAUDE.md](../../CLAUDE.md) — Architecture and environment variables
|