@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,576 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: result-report-analysis
|
|
3
|
+
description: Interpreting kaseki-report output and artifact metrics
|
|
4
|
+
tags: [kaseki, analysis, reporting, metrics, diagnostics]
|
|
5
|
+
relatedSkills: [workflow-diagnosis]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Result Report Analysis for Kaseki Agent
|
|
9
|
+
|
|
10
|
+
This skill guides interpreting kaseki-report output and analyzing kaseki run artifacts to extract metrics, baselines, and insights.
|
|
11
|
+
|
|
12
|
+
## Overview
|
|
13
|
+
|
|
14
|
+
**When to Use**:
|
|
15
|
+
- Post-run analysis and performance review
|
|
16
|
+
- Comparing runs or establishing baselines
|
|
17
|
+
- Detecting resource anomalies or bottlenecks
|
|
18
|
+
- Extracting metrics for dashboards or reports
|
|
19
|
+
- Understanding agent behavior and token usage
|
|
20
|
+
|
|
21
|
+
**Key Concepts**:
|
|
22
|
+
- kaseki-report generates a compact diagnostic summary from run artifacts
|
|
23
|
+
- Metrics include timing, file counts, token usage, and event statistics
|
|
24
|
+
- Baselines help identify abnormal runs
|
|
25
|
+
- Artifact analysis reveals agent reasoning and bottlenecks
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## kaseki-report Output
|
|
30
|
+
|
|
31
|
+
### Running kaseki-report
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
# Generate report for a completed run
|
|
35
|
+
docker run --rm --entrypoint kaseki-report \
|
|
36
|
+
-v /agents/kaseki-results/kaseki-1:/results:ro \
|
|
37
|
+
kaseki-template:latest /results
|
|
38
|
+
|
|
39
|
+
# Or directly if scripts are in PATH
|
|
40
|
+
kaseki-report /agents/kaseki-results/kaseki-1
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Report Structure
|
|
44
|
+
|
|
45
|
+
```
|
|
46
|
+
================================================================================
|
|
47
|
+
Kaseki Run Report: kaseki-1
|
|
48
|
+
================================================================================
|
|
49
|
+
|
|
50
|
+
STATUS & TIMING
|
|
51
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
52
|
+
│ Status: ✓ SUCCESS │
|
|
53
|
+
│ Total Duration: 15m 30s (930 seconds) │
|
|
54
|
+
│ Start: 2026-04-25T10:30:00Z │
|
|
55
|
+
│ End: 2026-04-25T10:45:30Z │
|
|
56
|
+
└─────────────────────────────────────────────────────────────┘
|
|
57
|
+
|
|
58
|
+
AGENT & VALIDATION
|
|
59
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
60
|
+
│ Agent: OpenRouter (openrouter/free) │
|
|
61
|
+
│ Model Tokens: 7,234 (input: 5,000 | output: 2,234) │
|
|
62
|
+
│ Thinking Tokens: 4,500 (reasoning cost) │
|
|
63
|
+
│ Events Processed: 42 │
|
|
64
|
+
│ Validation Commands: 3 passed │
|
|
65
|
+
│ All checks: PASS │
|
|
66
|
+
└─────────────────────────────────────────────────────────────┘
|
|
67
|
+
|
|
68
|
+
CHANGES
|
|
69
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
70
|
+
│ Files Modified: 3 │
|
|
71
|
+
│ Lines Added: 42 │
|
|
72
|
+
│ Lines Removed: 18 │
|
|
73
|
+
│ Total Diff Size: 2.4 KB │
|
|
74
|
+
└─────────────────────────────────────────────────────────────┘
|
|
75
|
+
|
|
76
|
+
COMMAND TIMINGS
|
|
77
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
78
|
+
│ npm ci 45 sec (cache hit) │
|
|
79
|
+
│ npm run check 38 sec (type checking) │
|
|
80
|
+
│ npm run test 124 sec (5 tests, 1 new) │
|
|
81
|
+
│ npm run build 90 sec (successful) │
|
|
82
|
+
└──────────────────────────────────────────────────────────────┘
|
|
83
|
+
|
|
84
|
+
QUALITY GATES
|
|
85
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
86
|
+
│ ✓ Allowlist Check: 3 files, all in scope │
|
|
87
|
+
│ ✓ Diff Size Check: 2.4 KB < 200 KB limit │
|
|
88
|
+
│ ✓ Secret Scan: No credentials detected │
|
|
89
|
+
│ ✓ Git Status: No untracked files │
|
|
90
|
+
└──────────────────────────────────────────────────────────────┘
|
|
91
|
+
|
|
92
|
+
KEY METRICS
|
|
93
|
+
┌──────────────────────────────────────────────────────────────┐
|
|
94
|
+
│ Tokens per Change: 2.4 tokens/byte (average) │
|
|
95
|
+
│ Events per File: 14 events/file (agent reasoning) │
|
|
96
|
+
│ Thinking Ratio: 66.8% (reasoning vs output) │
|
|
97
|
+
│ Cache Efficiency: 97% (most layers hit) │
|
|
98
|
+
└──────────────────────────────────────────────────────────────┘
|
|
99
|
+
|
|
100
|
+
EXIT CODES
|
|
101
|
+
overall: 0 (success)
|
|
102
|
+
agent: 0 (completed)
|
|
103
|
+
validation: 0 (all passed)
|
|
104
|
+
quality_gates: 0 (all passed)
|
|
105
|
+
================================================================================
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## Artifact Overview
|
|
111
|
+
|
|
112
|
+
### File Structure
|
|
113
|
+
|
|
114
|
+
```
|
|
115
|
+
/agents/kaseki-results/kaseki-1/
|
|
116
|
+
├── metadata.json # Timestamps, exit codes
|
|
117
|
+
├── result-summary.md # Human-readable summary
|
|
118
|
+
├── pi-events.jsonl # Filtered agent events (1 per line)
|
|
119
|
+
├── pi-summary.json # Agent stats + summary
|
|
120
|
+
├── git.diff # Unified diff of changes
|
|
121
|
+
├── git.status # Git status output
|
|
122
|
+
├── changed-files.txt # List of modified files
|
|
123
|
+
├── validation.log # Test/check output
|
|
124
|
+
├── validation-timings.tsv # Command durations
|
|
125
|
+
├── quality.log # Quality gate results
|
|
126
|
+
├── secret-scan.log # Secret detection results
|
|
127
|
+
├── stdout.log # Container stdout
|
|
128
|
+
├── stderr.log # Container stderr
|
|
129
|
+
└── exit_code # Overall exit code (0 = success)
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Quick Artifact Check
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Overall status
|
|
136
|
+
cat /agents/kaseki-results/kaseki-1/exit_code
|
|
137
|
+
# Output: 0 (success)
|
|
138
|
+
|
|
139
|
+
# What changed?
|
|
140
|
+
cat /agents/kaseki-results/kaseki-1/changed-files.txt
|
|
141
|
+
# Output:
|
|
142
|
+
# src/lib/role.ts
|
|
143
|
+
# tests/role.test.ts
|
|
144
|
+
|
|
145
|
+
# Diff stats
|
|
146
|
+
git apply --stat < /agents/kaseki-results/kaseki-1/git.diff
|
|
147
|
+
# Output:
|
|
148
|
+
# src/lib/role.ts | 12 +-
|
|
149
|
+
# tests/role.test.ts | 8 +-
|
|
150
|
+
# 2 files changed, 20 insertions(+), 0 deletions(-)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## Key Metrics & Interpretation
|
|
156
|
+
|
|
157
|
+
### Timing Metrics
|
|
158
|
+
|
|
159
|
+
**Artifact**: `metadata.json` + `validation-timings.tsv`
|
|
160
|
+
|
|
161
|
+
```json
|
|
162
|
+
{
|
|
163
|
+
"start_time": "2026-04-25T10:30:00Z",
|
|
164
|
+
"end_time": "2026-04-25T10:45:30Z",
|
|
165
|
+
"duration_seconds": 930
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Baseline Durations**:
|
|
170
|
+
|
|
171
|
+
| Stage | Expected Range | Example |
|
|
172
|
+
|---|---|---|
|
|
173
|
+
| Clone + Setup | 30–60 sec | 45 sec |
|
|
174
|
+
| npm ci | 5–180 sec | 45 sec (cache hit) |
|
|
175
|
+
| Pi Agent Run | 300–600 sec | 450 sec |
|
|
176
|
+
| Validation Cmds | 60–300 sec | 250 sec |
|
|
177
|
+
| **Total** | **5–20 min** | **15 min 30 sec** |
|
|
178
|
+
|
|
179
|
+
**Interpretation**:
|
|
180
|
+
- < 5 min: Unusually fast (check if agent completed)
|
|
181
|
+
- 5–15 min: Excellent (optimized)
|
|
182
|
+
- 15–20 min: Good (acceptable)
|
|
183
|
+
- > 20 min: Slow (investigate)
|
|
184
|
+
|
|
185
|
+
### File Change Metrics
|
|
186
|
+
|
|
187
|
+
**Artifact**: `changed-files.txt` + `git.diff`
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# Count files
|
|
191
|
+
wc -l < /agents/kaseki-results/kaseki-1/changed-files.txt
|
|
192
|
+
# Output: 3 files changed
|
|
193
|
+
|
|
194
|
+
# Check diff size
|
|
195
|
+
wc -c < /agents/kaseki-results/kaseki-1/git.diff
|
|
196
|
+
# Output: 2457 bytes (2.4 KB)
|
|
197
|
+
|
|
198
|
+
# Lines changed
|
|
199
|
+
git apply --stat < /agents/kaseki-results/kaseki-1/git.diff | tail -1
|
|
200
|
+
# Output: 2 files changed, 42 insertions(+), 18 deletions(-)
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Baseline Metrics**:
|
|
204
|
+
|
|
205
|
+
| Change Type | Typical Files | Typical Diff | Typical Lines |
|
|
206
|
+
|---|---|---|---|
|
|
207
|
+
| **Bug Fix** | 1–3 | 2–10 KB | 10–50 |
|
|
208
|
+
| **Feature Add** | 2–5 | 10–50 KB | 50–200 |
|
|
209
|
+
| **Refactor** | 1–3 | 5–30 KB | 20–100 |
|
|
210
|
+
| **Docs Update** | 1 | 1–10 KB | 5–50 |
|
|
211
|
+
|
|
212
|
+
**Interpretation**:
|
|
213
|
+
- Fewer files than expected → Agent was conservative
|
|
214
|
+
- More files than expected → Check if off-scope changes
|
|
215
|
+
- Larger diff than expected → Check for refactoring or verbosity
|
|
216
|
+
|
|
217
|
+
### Agent Token Metrics
|
|
218
|
+
|
|
219
|
+
**Artifact**: `pi-summary.json`
|
|
220
|
+
|
|
221
|
+
```json
|
|
222
|
+
{
|
|
223
|
+
"statistics": {
|
|
224
|
+
"events": 42,
|
|
225
|
+
"thinking_tokens": 4500,
|
|
226
|
+
"output_tokens": 2234,
|
|
227
|
+
"input_tokens": 5000,
|
|
228
|
+
"total_tokens": 11734,
|
|
229
|
+
"thinking_ratio": 0.668
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
**Metrics Breakdown**:
|
|
235
|
+
|
|
236
|
+
| Metric | Baseline | Interpretation |
|
|
237
|
+
|---|---|---|
|
|
238
|
+
| `events` | 10–50 | Number of reasoning steps |
|
|
239
|
+
| `thinking_tokens` | 30–50% of total | Agent reasoning effort |
|
|
240
|
+
| `output_tokens` | 20–40% of total | Generated code size |
|
|
241
|
+
| `input_tokens` | 20–50% of total | Prompt size |
|
|
242
|
+
| `total_tokens` | Task-dependent | Model cost |
|
|
243
|
+
| `thinking_ratio` | 0.5–0.8 | How much reasoning (0.5 = less thinking) |
|
|
244
|
+
|
|
245
|
+
**Interpretation**:
|
|
246
|
+
- High `thinking_ratio` (0.7+): Agent needed lots of reasoning (complex task or confusion)
|
|
247
|
+
- Low `thinking_ratio` (0.4–0.5): Agent decided quickly (straightforward task)
|
|
248
|
+
- High `output_tokens` relative to changes: Verbose or refactoring
|
|
249
|
+
- Low `total_tokens`: Efficient (good prompt scope)
|
|
250
|
+
|
|
251
|
+
### Event Metrics
|
|
252
|
+
|
|
253
|
+
**Artifact**: `pi-events.jsonl` + `pi-summary.json`
|
|
254
|
+
|
|
255
|
+
```bash
|
|
256
|
+
# Count events by type
|
|
257
|
+
jq '.type' /agents/kaseki-results/kaseki-1/pi-events.jsonl | sort | uniq -c
|
|
258
|
+
# Output:
|
|
259
|
+
# 8 "thought"
|
|
260
|
+
# 15 "tool_call"
|
|
261
|
+
# 12 "tool_result"
|
|
262
|
+
# 7 "message"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Event Types**:
|
|
266
|
+
|
|
267
|
+
| Type | Baseline | Interpretation |
|
|
268
|
+
|---|---|---|
|
|
269
|
+
| `thought` | 5–15 | Reasoning steps (good) |
|
|
270
|
+
| `tool_call` | 10–20 | Tool invocations (file edits, commands) |
|
|
271
|
+
| `tool_result` | 10–20 | Tool responses (output, success/fail) |
|
|
272
|
+
| `message` | 2–8 | Agent messages |
|
|
273
|
+
| `error` | 0–3 | Errors encountered (ideally 0) |
|
|
274
|
+
|
|
275
|
+
**Interpretation**:
|
|
276
|
+
- More `thought` events = deeper reasoning (not bad, just thoughtful)
|
|
277
|
+
- Many `tool_call` + `tool_result` loops = trial-and-error (possible confusion)
|
|
278
|
+
- Any `error` events = something went wrong (check logs)
|
|
279
|
+
|
|
280
|
+
### Validation Metrics
|
|
281
|
+
|
|
282
|
+
**Artifact**: `validation-timings.tsv` + `validation.log`
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Check validation timing
|
|
286
|
+
cat /agents/kaseki-results/kaseki-1/validation-timings.tsv
|
|
287
|
+
# Output:
|
|
288
|
+
# npm ci 45
|
|
289
|
+
# npm run check 38
|
|
290
|
+
# npm run test 124
|
|
291
|
+
# npm run build 90
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
**Baseline Ranges**:
|
|
295
|
+
|
|
296
|
+
| Command | Fast (Cache) | Typical | Slow (Issue) |
|
|
297
|
+
|---|---|---|---|
|
|
298
|
+
| `npm ci` | 10–30 sec | 30–60 sec | > 120 sec |
|
|
299
|
+
| `npm run check` | 10–30 sec | 30–60 sec | > 120 sec |
|
|
300
|
+
| `npm run test` | 30–90 sec | 90–180 sec | > 300 sec |
|
|
301
|
+
| `npm run build` | 30–120 sec | 120–180 sec | > 300 sec |
|
|
302
|
+
|
|
303
|
+
**Interpretation**:
|
|
304
|
+
- Timings match baseline → Normal performance
|
|
305
|
+
- `npm ci` > 120 sec → Cache miss (new lock file)
|
|
306
|
+
- Individual test > 180 sec → Large test suite or slow build
|
|
307
|
+
- Any command timeout → Increase `KASEKI_AGENT_TIMEOUT_SECONDS`
|
|
308
|
+
|
|
309
|
+
---
|
|
310
|
+
|
|
311
|
+
## Anomaly Detection
|
|
312
|
+
|
|
313
|
+
### Red Flags
|
|
314
|
+
|
|
315
|
+
**❌ Empty Diff**
|
|
316
|
+
```bash
|
|
317
|
+
wc -c < /agents/kaseki-results/kaseki-1/git.diff
|
|
318
|
+
# Output: 0 (or very small)
|
|
319
|
+
```
|
|
320
|
+
→ Agent didn't make changes. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 1.
|
|
321
|
+
|
|
322
|
+
**❌ Oversized Diff**
|
|
323
|
+
```bash
|
|
324
|
+
wc -c < /agents/kaseki-results/kaseki-1/git.diff
|
|
325
|
+
# Output: 250000 (exceeds 200 KB default)
|
|
326
|
+
```
|
|
327
|
+
→ Check if legitimate. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 4.
|
|
328
|
+
|
|
329
|
+
**❌ Many Off-Scope Files**
|
|
330
|
+
```bash
|
|
331
|
+
cat /agents/kaseki-results/kaseki-1/changed-files.txt | wc -l
|
|
332
|
+
# Output: 15 files (expected 3)
|
|
333
|
+
```
|
|
334
|
+
→ Agent refactored more than intended. See [Quality Gate Configuration](quality-gate-config.md).
|
|
335
|
+
|
|
336
|
+
**❌ High Thinking Ratio**
|
|
337
|
+
```bash
|
|
338
|
+
jq '.statistics.thinking_ratio' /agents/kaseki-results/kaseki-1/pi-summary.json
|
|
339
|
+
# Output: 0.95 (95% reasoning vs output)
|
|
340
|
+
```
|
|
341
|
+
→ Agent was confused or struggling. Check prompt clarity.
|
|
342
|
+
|
|
343
|
+
**❌ Validation Failed**
|
|
344
|
+
```bash
|
|
345
|
+
grep -i "fail\|error" /agents/kaseki-results/kaseki-1/result-summary.md
|
|
346
|
+
# Output: ✗ Tests failed (2 failures)
|
|
347
|
+
```
|
|
348
|
+
→ Agent made breaking changes. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 5.
|
|
349
|
+
|
|
350
|
+
**❌ Secret Detected**
|
|
351
|
+
```bash
|
|
352
|
+
cat /agents/kaseki-results/kaseki-1/secret-scan.log
|
|
353
|
+
# Output: Found sk-or-abc123 in pi-events.jsonl
|
|
354
|
+
```
|
|
355
|
+
→ Credential leaked. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 6.
|
|
356
|
+
|
|
357
|
+
### Green Flags
|
|
358
|
+
|
|
359
|
+
**✓ Quick Completion** (< 10 min)
|
|
360
|
+
- Agent understood task immediately
|
|
361
|
+
- Task was straightforward
|
|
362
|
+
- Validation was fast
|
|
363
|
+
|
|
364
|
+
**✓ Minimal Changes** (< 5 KB diff)
|
|
365
|
+
- Well-scoped task
|
|
366
|
+
- Agent made surgical edits
|
|
367
|
+
- Low risk of side effects
|
|
368
|
+
|
|
369
|
+
**✓ Low Token Usage** (< 5k total)
|
|
370
|
+
- Efficient prompt
|
|
371
|
+
- Straightforward task
|
|
372
|
+
- Good model choice
|
|
373
|
+
|
|
374
|
+
**✓ Balanced Thinking Ratio** (0.5–0.7)
|
|
375
|
+
- Agent confident in approach
|
|
376
|
+
- Some reasoning but not excessive
|
|
377
|
+
- Not rushed
|
|
378
|
+
|
|
379
|
+
**✓ All Tests Passed**
|
|
380
|
+
- Agent validated changes thoroughly
|
|
381
|
+
- No regressions introduced
|
|
382
|
+
- High confidence in changes
|
|
383
|
+
|
|
384
|
+
---
|
|
385
|
+
|
|
386
|
+
## Comparison & Baselines
|
|
387
|
+
|
|
388
|
+
### Comparing Multiple Runs
|
|
389
|
+
|
|
390
|
+
```bash
|
|
391
|
+
# Compare timings across runs
|
|
392
|
+
for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
|
|
393
|
+
echo "=== $(basename $run) ==="
|
|
394
|
+
cat "$run/metadata.json" | jq '{duration_seconds, exit_codes}'
|
|
395
|
+
done
|
|
396
|
+
|
|
397
|
+
# Calculate average duration
|
|
398
|
+
for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
|
|
399
|
+
cat "$run/metadata.json" | jq '.duration_seconds'
|
|
400
|
+
done | awk '{sum+=$1; count++} END {print "Average: " sum/count "s"}'
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
### Establishing a Baseline
|
|
404
|
+
|
|
405
|
+
For a specific repo or task type, establish a baseline:
|
|
406
|
+
|
|
407
|
+
```bash
|
|
408
|
+
# Collect metrics across 5 successful runs
|
|
409
|
+
for i in {1..5}; do
|
|
410
|
+
TASK="Fix parser bug" ./run-kaseki.sh kaseki-baseline-$i
|
|
411
|
+
done
|
|
412
|
+
|
|
413
|
+
# Analyze baseline
|
|
414
|
+
for run in /agents/kaseki-results/kaseki-baseline-*/; do
|
|
415
|
+
jq '{duration: .duration_seconds, tokens: .statistics.total_tokens, files: .files_modified}' \
|
|
416
|
+
"$run/pi-summary.json"
|
|
417
|
+
done | jq -s 'add / length'
|
|
418
|
+
|
|
419
|
+
# Output (average):
|
|
420
|
+
# {
|
|
421
|
+
# "duration": 900, # 15 minutes avg
|
|
422
|
+
# "tokens": 7000, # 7k tokens avg
|
|
423
|
+
# "files": 2.4 # 2-3 files avg
|
|
424
|
+
# }
|
|
425
|
+
```
|
|
426
|
+
|
|
427
|
+
**Use Baseline for**:
|
|
428
|
+
- Detecting anomalies (run taking 2x longer than baseline)
|
|
429
|
+
- Optimization targets (current 900s, target 600s)
|
|
430
|
+
- Model/config comparison (compare baselines before/after changes)
|
|
431
|
+
|
|
432
|
+
---
|
|
433
|
+
|
|
434
|
+
## Detailed Analysis Examples
|
|
435
|
+
|
|
436
|
+
### Example 1: Performance Slowdown
|
|
437
|
+
|
|
438
|
+
**Observation**: Recent runs are 30% slower than baseline
|
|
439
|
+
|
|
440
|
+
**Analysis Steps**:
|
|
441
|
+
|
|
442
|
+
1. **Gather Baselines**:
|
|
443
|
+
```bash
|
|
444
|
+
# Baseline (last month)
|
|
445
|
+
for run in /agents/kaseki-results/kaseki-{1..10}/; do
|
|
446
|
+
jq '.duration_seconds' "$run/metadata.json"
|
|
447
|
+
done | awk '{sum+=$1} END {print "Avg: " sum/NR}'
|
|
448
|
+
# Output: Avg: 900
|
|
449
|
+
|
|
450
|
+
# Recent runs (this week)
|
|
451
|
+
for run in /agents/kaseki-results/kaseki-{91..100}/; do
|
|
452
|
+
jq '.duration_seconds' "$run/metadata.json"
|
|
453
|
+
done | awk '{sum+=$1} END {print "Avg: " sum/NR}'
|
|
454
|
+
# Output: Avg: 1170 (30% slower!)
|
|
455
|
+
```
|
|
456
|
+
|
|
457
|
+
2. **Isolate the Bottleneck**:
|
|
458
|
+
```bash
|
|
459
|
+
# Check validation timings
|
|
460
|
+
for run in /agents/kaseki-results/kaseki-{91..100}/; do
|
|
461
|
+
echo "=== $(basename $run) ==="
|
|
462
|
+
awk '{print $1, $2}' "$run/validation-timings.tsv"
|
|
463
|
+
done | column -t
|
|
464
|
+
|
|
465
|
+
# Output shows npm ci increased from 30s → 120s
|
|
466
|
+
```
|
|
467
|
+
|
|
468
|
+
3. **Root Cause**:
|
|
469
|
+
```bash
|
|
470
|
+
# Check if lock files are changing
|
|
471
|
+
for run in /agents/kaseki-results/kaseki-{91..100}/; do
|
|
472
|
+
if grep -q package-lock.json "$run/git.diff"; then
|
|
473
|
+
echo "$(basename $run): Lock file modified"
|
|
474
|
+
fi
|
|
475
|
+
done
|
|
476
|
+
# Output: 8 of 10 runs modified lock file
|
|
477
|
+
# → Cache misses due to dependency changes
|
|
478
|
+
```
|
|
479
|
+
|
|
480
|
+
4. **Solution**:
|
|
481
|
+
- See [Dependency Cache Optimization](dependency-cache-optimization.md) for cache seeding strategy
|
|
482
|
+
- Or update image seed cache with current lock file
|
|
483
|
+
|
|
484
|
+
### Example 2: Unexpected Large Diff
|
|
485
|
+
|
|
486
|
+
**Observation**: One run has 50 KB diff, others have 2–5 KB
|
|
487
|
+
|
|
488
|
+
```bash
|
|
489
|
+
# Identify outlier
|
|
490
|
+
for run in /agents/kaseki-results/kaseki-{81..90}/; do
|
|
491
|
+
size=$(wc -c < "$run/git.diff")
|
|
492
|
+
echo "$(basename $run): $size bytes"
|
|
493
|
+
done
|
|
494
|
+
# Output:
|
|
495
|
+
# kaseki-81: 3204
|
|
496
|
+
# kaseki-82: 4182
|
|
497
|
+
# kaseki-83: 2891
|
|
498
|
+
# kaseki-84: 50000 ← Outlier!
|
|
499
|
+
```
|
|
500
|
+
|
|
501
|
+
**Analysis**:
|
|
502
|
+
```bash
|
|
503
|
+
# Check what the task was for kaseki-84
|
|
504
|
+
cat /agents/kaseki-results/kaseki-84/pi-summary.json | jq '.task'
|
|
505
|
+
|
|
506
|
+
# Check changed files
|
|
507
|
+
cat /agents/kaseki-results/kaseki-84/changed-files.txt
|
|
508
|
+
|
|
509
|
+
# Check git diff for clues
|
|
510
|
+
head -50 /agents/kaseki-results/kaseki-84/git.diff
|
|
511
|
+
|
|
512
|
+
# Was it legitimate? Check if tests passed
|
|
513
|
+
cat /agents/kaseki-results/kaseki-84/result-summary.md | grep -i "validation\|test"
|
|
514
|
+
```
|
|
515
|
+
|
|
516
|
+
**Interpretation**:
|
|
517
|
+
- If tests passed: Agent did more refactoring than expected (document this)
|
|
518
|
+
- If tests failed: Investigate what went wrong
|
|
519
|
+
|
|
520
|
+
---
|
|
521
|
+
|
|
522
|
+
## Metrics for Dashboards
|
|
523
|
+
|
|
524
|
+
### Key Metrics to Track
|
|
525
|
+
|
|
526
|
+
```json
|
|
527
|
+
{
|
|
528
|
+
"success_rate": "95%",
|
|
529
|
+
"avg_duration_seconds": 900,
|
|
530
|
+
"avg_tokens_per_run": 7000,
|
|
531
|
+
"avg_diff_size_bytes": 3500,
|
|
532
|
+
"cache_hit_rate": "78%",
|
|
533
|
+
"validation_pass_rate": "99%",
|
|
534
|
+
"secret_detections": 0,
|
|
535
|
+
"allowlist_violations": 1
|
|
536
|
+
}
|
|
537
|
+
```
|
|
538
|
+
|
|
539
|
+
### Calculating Metrics
|
|
540
|
+
|
|
541
|
+
```bash
|
|
542
|
+
#!/bin/bash
|
|
543
|
+
# Calculate dashboard metrics
|
|
544
|
+
|
|
545
|
+
SUCCESS_COUNT=$(find /agents/kaseki-results -name "exit_code" -exec grep -l "^0$" {} \; | wc -l)
|
|
546
|
+
TOTAL_COUNT=$(find /agents/kaseki-results -name "exit_code" | wc -l)
|
|
547
|
+
|
|
548
|
+
SUCCESS_RATE=$((SUCCESS_COUNT * 100 / TOTAL_COUNT))
|
|
549
|
+
|
|
550
|
+
AVG_DURATION=$(find /agents/kaseki-results -name "metadata.json" \
|
|
551
|
+
-exec jq '.duration_seconds' {} \; | awk '{sum+=$1} END {print sum/NR}')
|
|
552
|
+
|
|
553
|
+
AVG_TOKENS=$(find /agents/kaseki-results -name "pi-summary.json" \
|
|
554
|
+
-exec jq '.statistics.total_tokens' {} \; | awk '{sum+=$1} END {print sum/NR}')
|
|
555
|
+
|
|
556
|
+
CACHE_HITS=$(find /agents/kaseki-results -name "validation-timings.tsv" \
|
|
557
|
+
-exec grep "npm ci" {} \; | awk '$2 < 30' | wc -l)
|
|
558
|
+
|
|
559
|
+
TOTAL_NPM=$(find /agents/kaseki-results -name "validation-timings.tsv" \
|
|
560
|
+
-exec grep "npm ci" {} \; | wc -l)
|
|
561
|
+
|
|
562
|
+
CACHE_HIT_RATE=$((CACHE_HITS * 100 / TOTAL_NPM))
|
|
563
|
+
|
|
564
|
+
echo "Success Rate: ${SUCCESS_RATE}%"
|
|
565
|
+
echo "Average Duration: ${AVG_DURATION}s"
|
|
566
|
+
echo "Average Tokens: ${AVG_TOKENS}"
|
|
567
|
+
echo "Cache Hit Rate: ${CACHE_HIT_RATE}%"
|
|
568
|
+
```
|
|
569
|
+
|
|
570
|
+
---
|
|
571
|
+
|
|
572
|
+
## Related Skills & Docs
|
|
573
|
+
|
|
574
|
+
- [Workflow Diagnosis](workflow-diagnosis.md) — Investigate anomalies and failures
|
|
575
|
+
- [kaseki-report.js](../../kaseki-report.js) — Report generation logic
|
|
576
|
+
- [CLAUDE.md](../../CLAUDE.md) — Architecture and artifact structure
|