@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,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example: OpenClaw integration with Kaseki API
|
|
3
|
+
*
|
|
4
|
+
* This example shows how OpenClaw would use the Kaseki API to:
|
|
5
|
+
* 1. Submit a coding task to kaseki-agent
|
|
6
|
+
* 2. Monitor progress
|
|
7
|
+
* 3. Retrieve and analyze results
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { KasekiApiClient } from './kaseki-api-client';
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Example: Request a bug fix from kaseki-agent
|
|
14
|
+
*/
|
|
15
|
+
export async function exampleBugFixWorkflow(): Promise<void> {
|
|
16
|
+
// Initialize client
|
|
17
|
+
const client = new KasekiApiClient('<http://kaseki-host:8080>', 'sk-your-api-key');
|
|
18
|
+
|
|
19
|
+
try {
|
|
20
|
+
// 1. Verify API is healthy
|
|
21
|
+
console.log('Checking API health...');
|
|
22
|
+
const health = await client.getHealth();
|
|
23
|
+
console.log('API health:', health.status);
|
|
24
|
+
|
|
25
|
+
// 2. Submit a bug fix task
|
|
26
|
+
console.log('\nSubmitting bug fix task...');
|
|
27
|
+
const run = await client.submit({
|
|
28
|
+
repoUrl: 'https://github.com/your-org/your-repo',
|
|
29
|
+
ref: 'main',
|
|
30
|
+
taskPrompt: 'Fix the parser bug in src/lib/parser.ts. The bug causes incorrect parsing of nested objects.',
|
|
31
|
+
changedFilesAllowlist: ['src/lib/parser.ts', 'tests/parser.test.ts'],
|
|
32
|
+
maxDiffBytes: 150000,
|
|
33
|
+
validationCommands: ['npm run lint', 'npm run test'],
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
console.log(`Task submitted! Run ID: ${run.id}`);
|
|
37
|
+
|
|
38
|
+
// 3. Monitor progress
|
|
39
|
+
console.log('\nMonitoring progress...');
|
|
40
|
+
const result = await client.waitForCompletion(run.id, {
|
|
41
|
+
timeout: 95 * 60 * 1000, // 95 minutes
|
|
42
|
+
interval: 5000, // Poll every 5 seconds
|
|
43
|
+
onProgress: (status) => {
|
|
44
|
+
const timeoutPercent = status.timeoutRiskPercent || 0;
|
|
45
|
+
const progressMsg = status.progress
|
|
46
|
+
? `${status.progress.stage} (${status.progress.percentComplete || 0}%)`
|
|
47
|
+
: 'running';
|
|
48
|
+
console.log(`[${status.elapsedSeconds}s] ${status.status}: ${progressMsg} (${timeoutPercent}% timeout risk)`);
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
console.log(`\nRun completed with status: ${result.status}`);
|
|
53
|
+
|
|
54
|
+
// 4. Retrieve detailed analysis
|
|
55
|
+
if (result.status === 'completed') {
|
|
56
|
+
console.log('\nRetrieving analysis...');
|
|
57
|
+
const analysis = await client.getAnalysis(run.id);
|
|
58
|
+
|
|
59
|
+
console.log('Changes made:');
|
|
60
|
+
if (analysis.changes) {
|
|
61
|
+
console.log(` Files modified: ${analysis.changes.changedFiles.join(', ')}`);
|
|
62
|
+
console.log(` Diff size: ${analysis.changes.diffSize} bytes`);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
console.log('\nValidation results:');
|
|
66
|
+
if (analysis.validation) {
|
|
67
|
+
console.log(` Passed: ${analysis.validation.passed}`);
|
|
68
|
+
for (const cmd of analysis.validation.commandResults) {
|
|
69
|
+
console.log(` - ${cmd.command}: exit code ${cmd.exitCode} (${cmd.elapsed}ms)`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// 5. Download the diff for review
|
|
74
|
+
console.log('\nDownloading diff...');
|
|
75
|
+
const diff = await client.getArtifact(run.id, 'git.diff');
|
|
76
|
+
console.log('Diff preview (first 500 chars):');
|
|
77
|
+
console.log(diff.substring(0, 500));
|
|
78
|
+
|
|
79
|
+
// 6. Get full metadata
|
|
80
|
+
const metadata = await client.getArtifact(run.id, 'metadata.json');
|
|
81
|
+
const meta = JSON.parse(metadata);
|
|
82
|
+
console.log('\nRun metadata:');
|
|
83
|
+
console.log(` Model: ${meta.model}`);
|
|
84
|
+
console.log(` Instance: ${meta.instance}`);
|
|
85
|
+
console.log(` Exit code: ${meta.exitCode}`);
|
|
86
|
+
} else {
|
|
87
|
+
// 7. Handle failure
|
|
88
|
+
console.log(`\nRun failed with: ${result.failureClass}`);
|
|
89
|
+
console.log(`Error: ${result.error}`);
|
|
90
|
+
|
|
91
|
+
// Get stderr for debugging
|
|
92
|
+
const stderr = await client.getLog(run.id, 'stderr');
|
|
93
|
+
console.log('Error output:');
|
|
94
|
+
console.log(stderr.substring(0, 1000));
|
|
95
|
+
}
|
|
96
|
+
} catch (err) {
|
|
97
|
+
console.error('Error:', err);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Example: Batch submit multiple tasks and wait for all to complete
|
|
104
|
+
*/
|
|
105
|
+
export async function exampleBatchWorkflow(): Promise<void> {
|
|
106
|
+
const client = new KasekiApiClient('<http://kaseki-host:8080>', 'sk-your-api-key');
|
|
107
|
+
|
|
108
|
+
const tasks = [
|
|
109
|
+
{
|
|
110
|
+
repoUrl: 'https://github.com/org/repo1',
|
|
111
|
+
taskPrompt: 'Fix typo in README',
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
repoUrl: 'https://github.com/org/repo2',
|
|
115
|
+
taskPrompt: 'Update dependencies',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
repoUrl: 'https://github.com/org/repo3',
|
|
119
|
+
taskPrompt: 'Add type annotations to JavaScript files',
|
|
120
|
+
},
|
|
121
|
+
];
|
|
122
|
+
|
|
123
|
+
console.log(`Submitting ${tasks.length} tasks...\n`);
|
|
124
|
+
|
|
125
|
+
// Submit all tasks
|
|
126
|
+
const runs = await Promise.all(
|
|
127
|
+
tasks.map((task) =>
|
|
128
|
+
client.submit({
|
|
129
|
+
...task,
|
|
130
|
+
ref: 'main',
|
|
131
|
+
})
|
|
132
|
+
)
|
|
133
|
+
);
|
|
134
|
+
|
|
135
|
+
console.log(`Submitted ${runs.length} runs: ${runs.map((r) => r.id).join(', ')}\n`);
|
|
136
|
+
|
|
137
|
+
// Wait for all to complete
|
|
138
|
+
const results = await Promise.all(
|
|
139
|
+
runs.map((run) =>
|
|
140
|
+
client.waitForCompletion(run.id, {
|
|
141
|
+
onProgress: (status) => {
|
|
142
|
+
console.log(`[${run.id}] ${status.status}`);
|
|
143
|
+
},
|
|
144
|
+
})
|
|
145
|
+
)
|
|
146
|
+
);
|
|
147
|
+
|
|
148
|
+
// Summarize results
|
|
149
|
+
const succeeded = results.filter((r) => r.status === 'completed').length;
|
|
150
|
+
const failed = results.filter((r) => r.status === 'failed').length;
|
|
151
|
+
|
|
152
|
+
console.log(`\nResults: ${succeeded} succeeded, ${failed} failed`);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Example: Stream logs in real-time (polling)
|
|
157
|
+
*/
|
|
158
|
+
export async function exampleStreamLogs(runId: string): Promise<void> {
|
|
159
|
+
const client = new KasekiApiClient('<http://kaseki-host:8080>', 'sk-your-api-key');
|
|
160
|
+
|
|
161
|
+
let lastLineCount = 0;
|
|
162
|
+
|
|
163
|
+
// Poll for new log lines
|
|
164
|
+
const pollInterval = setInterval(async () => {
|
|
165
|
+
try {
|
|
166
|
+
const log = await client.getLog(runId, 'progress');
|
|
167
|
+
const lines = log.split('\n');
|
|
168
|
+
const newLines = lines.slice(lastLineCount);
|
|
169
|
+
|
|
170
|
+
if (newLines.length > 0) {
|
|
171
|
+
console.log(newLines.join('\n'));
|
|
172
|
+
lastLineCount = lines.length;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
// Check if job is done
|
|
176
|
+
const status = await client.getStatus(runId);
|
|
177
|
+
if (status.status !== 'running' && status.status !== 'queued') {
|
|
178
|
+
clearInterval(pollInterval);
|
|
179
|
+
console.log(`\nJob ${status.status}`);
|
|
180
|
+
}
|
|
181
|
+
} catch (err) {
|
|
182
|
+
console.error('Error polling logs:', err);
|
|
183
|
+
clearInterval(pollInterval);
|
|
184
|
+
}
|
|
185
|
+
}, 5000); // Poll every 5 seconds
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Example: Check queue status
|
|
190
|
+
*/
|
|
191
|
+
export async function exampleCheckQueue(): Promise<void> {
|
|
192
|
+
const client = new KasekiApiClient('<http://kaseki-host:8080>', 'sk-your-api-key');
|
|
193
|
+
|
|
194
|
+
const health = await client.getHealth();
|
|
195
|
+
console.log('API Health:', health.status);
|
|
196
|
+
|
|
197
|
+
if (health.status === 'healthy' || health.status === 'degraded') {
|
|
198
|
+
const queue = health.errors;
|
|
199
|
+
console.log(`Queue status:`);
|
|
200
|
+
console.log(` Status: ${health.status}`);
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
// List recent runs
|
|
204
|
+
const runsList = await client.listRuns();
|
|
205
|
+
console.log(`\nRecent runs (${runsList.total} total):`);
|
|
206
|
+
for (const run of runsList.runs.slice(0, 5)) {
|
|
207
|
+
const duration = run.completedAt
|
|
208
|
+
? Math.round((new Date(run.completedAt).getTime() - new Date(run.createdAt).getTime()) / 1000)
|
|
209
|
+
: '?';
|
|
210
|
+
console.log(` ${run.id}: ${run.status} (${duration}s)`);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
// Run an example
|
|
215
|
+
if (require.main === module) {
|
|
216
|
+
exampleBugFixWorkflow().catch(console.error);
|
|
217
|
+
}
|
|
@@ -0,0 +1,468 @@
|
|
|
1
|
+
# NPM Package Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide covers installation and usage of `@cyanautomation/kaseki-agent` as an npm package.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
### Global Install (Recommended)
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @cyanautomation/kaseki-agent
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Provides the `kaseki-agent` command globally. After installation, run:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
kaseki-agent setup
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
### Local Project Install
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
npm install @cyanautomation/kaseki-agent
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Use with `npx`:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx kaseki-agent setup
|
|
29
|
+
npx kaseki-agent run <repo> <ref>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### Requirements
|
|
33
|
+
|
|
34
|
+
- **Node.js v24 or higher**
|
|
35
|
+
- **Docker** (for running agent containers)
|
|
36
|
+
- **Linux or macOS** (headless Linux recommended)
|
|
37
|
+
- **Internet access** (for OpenRouter API)
|
|
38
|
+
|
|
39
|
+
### Verify Installation
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
kaseki-agent doctor
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Should output:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
✓ Docker daemon running
|
|
49
|
+
✓ Node.js v24.x available
|
|
50
|
+
✓ npm available
|
|
51
|
+
✓ git available
|
|
52
|
+
✓ API key configured
|
|
53
|
+
✓ Disk space: XXX GB available
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## First-Time Setup
|
|
59
|
+
|
|
60
|
+
### 1. Get API Key
|
|
61
|
+
|
|
62
|
+
Sign up for [OpenRouter](https://openrouter.ai/) and create an API key.
|
|
63
|
+
|
|
64
|
+
### 2. Run Setup Wizard
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
kaseki-agent setup
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
This interactive wizard will:
|
|
71
|
+
|
|
72
|
+
- Validate your environment
|
|
73
|
+
- Prompt for OpenRouter API key
|
|
74
|
+
- Save configuration (locally or globally)
|
|
75
|
+
- Run health checks
|
|
76
|
+
|
|
77
|
+
### 3. Test with `doctor`
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
kaseki-agent doctor
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
All checks should pass.
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Basic Usage
|
|
88
|
+
|
|
89
|
+
### Run Agent on a Repository
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
kaseki-agent run https://github.com/your-org/your-repo main
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
This will:
|
|
96
|
+
|
|
97
|
+
1. Create instance `kaseki-1` (or next available number)
|
|
98
|
+
2. Clone repository at specified branch
|
|
99
|
+
3. Run Pi agent in Docker container
|
|
100
|
+
4. Collect results
|
|
101
|
+
5. Display summary
|
|
102
|
+
|
|
103
|
+
### View Results
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
# List all instances
|
|
107
|
+
kaseki-agent list
|
|
108
|
+
|
|
109
|
+
# View specific instance
|
|
110
|
+
kaseki-agent report kaseki-1
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
## Configuration
|
|
116
|
+
|
|
117
|
+
### Project-Level Configuration
|
|
118
|
+
|
|
119
|
+
Create `kaseki-agent.json` in your project:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"repo": {
|
|
124
|
+
"url": "https://github.com/your-org/your-repo",
|
|
125
|
+
"ref": "main"
|
|
126
|
+
},
|
|
127
|
+
"agent": {
|
|
128
|
+
"model": "openrouter/free",
|
|
129
|
+
"timeout_seconds": 1200,
|
|
130
|
+
"provider": "openrouter"
|
|
131
|
+
},
|
|
132
|
+
"validation": {
|
|
133
|
+
"allowlist": ["src/lib/", "tests/"],
|
|
134
|
+
"max_diff_bytes": 200000,
|
|
135
|
+
"commands": ["npm run check", "npm run test"]
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
Then run without args:
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
kaseki-agent run
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### User-Level Configuration
|
|
147
|
+
|
|
148
|
+
Set global defaults:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
kaseki-agent config set agent.timeout_seconds 1800 --global
|
|
152
|
+
kaseki-agent config set docker.auto_pull true --global
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
View global config:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
kaseki-agent config show --global
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Environment Variables
|
|
162
|
+
|
|
163
|
+
Override configuration via environment:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
export KASEKI_MODEL=openrouter/free
|
|
167
|
+
export KASEKI_AGENT_TIMEOUT_SECONDS=1200
|
|
168
|
+
export OPENROUTER_API_KEY_FILE=~/.kaseki/secrets/openrouter_api_key
|
|
169
|
+
|
|
170
|
+
kaseki-agent run <repo> <ref>
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
**Common variables:**
|
|
174
|
+
|
|
175
|
+
- `KASEKI_ROOT` — Results/runs directory (default: /agents)
|
|
176
|
+
- `KASEKI_MODEL` — AI model string
|
|
177
|
+
- `KASEKI_AGENT_TIMEOUT_SECONDS` — Timeout for agent
|
|
178
|
+
- `KASEKI_VALIDATION_COMMANDS` — Validation commands (semicolon-separated)
|
|
179
|
+
- `KASEKI_CHANGED_FILES_ALLOWLIST` — File patterns to allow (space-separated)
|
|
180
|
+
- `OPENROUTER_API_KEY_FILE` — Path to API key file
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Advanced Usage
|
|
185
|
+
|
|
186
|
+
### Custom Task Prompts
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
kaseki-agent run https://github.com/your-org/your-repo main \
|
|
190
|
+
"Fix all TypeScript compilation errors in src/"
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The task prompt is passed to the Pi agent for context-specific instructions.
|
|
194
|
+
|
|
195
|
+
### Filtering Instances
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
# Show only completed
|
|
199
|
+
kaseki-agent list --status completed
|
|
200
|
+
|
|
201
|
+
# Show only failed
|
|
202
|
+
kaseki-agent list --status failed
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
### Viewing Detailed Reports
|
|
206
|
+
|
|
207
|
+
```bash
|
|
208
|
+
kaseki-agent report kaseki-1
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
Shows:
|
|
212
|
+
|
|
213
|
+
- Instance metadata
|
|
214
|
+
- Execution stages and timing
|
|
215
|
+
- Exit code and status
|
|
216
|
+
- Detailed summary
|
|
217
|
+
|
|
218
|
+
### Secret Management
|
|
219
|
+
|
|
220
|
+
Store sensitive credentials securely:
|
|
221
|
+
|
|
222
|
+
```bash
|
|
223
|
+
# Store API key
|
|
224
|
+
kaseki-agent secrets set openrouter-api-key sk-or-...
|
|
225
|
+
|
|
226
|
+
# List stored secrets
|
|
227
|
+
kaseki-agent secrets list
|
|
228
|
+
|
|
229
|
+
# Retrieve (hidden)
|
|
230
|
+
kaseki-agent secrets get openrouter-api-key
|
|
231
|
+
|
|
232
|
+
# Show value (explicit)
|
|
233
|
+
kaseki-agent secrets get openrouter-api-key --show
|
|
234
|
+
|
|
235
|
+
# Delete
|
|
236
|
+
kaseki-agent secrets delete openrouter-api-key
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
**Storage:**
|
|
240
|
+
|
|
241
|
+
- Linux: `pass` (password-store) keyring
|
|
242
|
+
- Headless: `~/.kaseki/secrets/` (0600 permissions)
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Using Docker Image
|
|
247
|
+
|
|
248
|
+
If you don't want to install Node.js:
|
|
249
|
+
|
|
250
|
+
### Setup
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
docker run -it \
|
|
254
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
255
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
256
|
+
setup
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
### Run Agent
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
docker run -it \
|
|
263
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
264
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
265
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
266
|
+
run https://github.com/your-org/your-repo main
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
### Start API Service
|
|
270
|
+
|
|
271
|
+
```bash
|
|
272
|
+
docker run -d \
|
|
273
|
+
-p 8080:8080 \
|
|
274
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
275
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
276
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
277
|
+
serve --port 8080
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## REST API Service
|
|
283
|
+
|
|
284
|
+
For distributed/async execution:
|
|
285
|
+
|
|
286
|
+
### Start Service
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
kaseki-agent serve --port 8080
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Or with custom port:
|
|
293
|
+
|
|
294
|
+
```bash
|
|
295
|
+
kaseki-agent serve --port 9000
|
|
296
|
+
```
|
|
297
|
+
|
|
298
|
+
### API Endpoints
|
|
299
|
+
|
|
300
|
+
**Health Check**
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
curl http://localhost:8080/health
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
**List Instances**
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
curl http://localhost:8080/api/runs
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
**Start Run**
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
curl -X POST http://localhost:8080/api/runs \
|
|
316
|
+
-H "Content-Type: application/json" \
|
|
317
|
+
-d '{
|
|
318
|
+
"repo": "https://github.com/your-org/your-repo",
|
|
319
|
+
"ref": "main",
|
|
320
|
+
"task": "Fix TypeScript errors"
|
|
321
|
+
}'
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
**Get Instance Status**
|
|
325
|
+
|
|
326
|
+
```bash
|
|
327
|
+
curl http://localhost:8080/api/runs/kaseki-1
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
**Stream Logs**
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
curl http://localhost:8080/api/runs/kaseki-1/logs
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
---
|
|
337
|
+
|
|
338
|
+
## Troubleshooting
|
|
339
|
+
|
|
340
|
+
### Issue: Doctor fails
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
kaseki-agent doctor --fix
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
This attempts auto-remediation:
|
|
347
|
+
|
|
348
|
+
- Pulls Docker image
|
|
349
|
+
- Provides install instructions
|
|
350
|
+
|
|
351
|
+
### Issue: Agent times out
|
|
352
|
+
|
|
353
|
+
Increase timeout:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
kaseki-agent config set agent.timeout_seconds 1800 --global
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
Or for single run:
|
|
360
|
+
|
|
361
|
+
```bash
|
|
362
|
+
KASEKI_AGENT_TIMEOUT_SECONDS=1800 kaseki-agent run <repo> <ref>
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
### Issue: Docker permission denied
|
|
366
|
+
|
|
367
|
+
```bash
|
|
368
|
+
# Add current user to docker group
|
|
369
|
+
sudo usermod -aG docker $USER
|
|
370
|
+
newgrp docker
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
### Issue: API key not found
|
|
374
|
+
|
|
375
|
+
```bash
|
|
376
|
+
# Check stored secrets
|
|
377
|
+
kaseki-agent secrets list
|
|
378
|
+
|
|
379
|
+
# Re-setup if needed
|
|
380
|
+
kaseki-agent setup
|
|
381
|
+
|
|
382
|
+
# Or manually set
|
|
383
|
+
kaseki-agent secrets set openrouter-api-key sk-or-...
|
|
384
|
+
```
|
|
385
|
+
|
|
386
|
+
### Issue: Out of disk space
|
|
387
|
+
|
|
388
|
+
```bash
|
|
389
|
+
# Check available space
|
|
390
|
+
kaseki-agent doctor
|
|
391
|
+
|
|
392
|
+
# Clean old instances (optional)
|
|
393
|
+
rm -rf /agents/kaseki-results/kaseki-*
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## Configuration Precedence
|
|
399
|
+
|
|
400
|
+
Settings are loaded in this order (first wins):
|
|
401
|
+
|
|
402
|
+
1. **CLI flags** (`--flag=value`)
|
|
403
|
+
2. **kaseki-agent.json** (project directory)
|
|
404
|
+
3. **~/.kaseki/config.json** (home directory)
|
|
405
|
+
4. **Environment variables** (`KASEKI_*`, `OPENROUTER_*`)
|
|
406
|
+
5. **Built-in defaults**
|
|
407
|
+
|
|
408
|
+
Example:
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
# Uses CLI flag (highest precedence)
|
|
412
|
+
KASEKI_AGENT_TIMEOUT_SECONDS=900 kaseki-agent run <repo> <ref> --model=custom-model
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Example Workflow
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
# 1. One-time setup
|
|
421
|
+
kaseki-agent setup
|
|
422
|
+
|
|
423
|
+
# 2. Verify environment
|
|
424
|
+
kaseki-agent doctor
|
|
425
|
+
|
|
426
|
+
# 3. Create project config
|
|
427
|
+
cat > kaseki-agent.json << 'EOF'
|
|
428
|
+
{
|
|
429
|
+
"agent": {
|
|
430
|
+
"timeout_seconds": 1200
|
|
431
|
+
},
|
|
432
|
+
"validation": {
|
|
433
|
+
"allowlist": ["src/", "tests/"]
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
EOF
|
|
437
|
+
|
|
438
|
+
# 4. Run agent
|
|
439
|
+
kaseki-agent run https://github.com/your-org/your-repo main
|
|
440
|
+
|
|
441
|
+
# 5. Check results
|
|
442
|
+
kaseki-agent list
|
|
443
|
+
kaseki-agent report kaseki-1
|
|
444
|
+
|
|
445
|
+
# 6. Start API service for continuous use
|
|
446
|
+
kaseki-agent serve --port 8080
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
---
|
|
450
|
+
|
|
451
|
+
## Documentation
|
|
452
|
+
|
|
453
|
+
- [README.md](../README.md) — Overview and quick start
|
|
454
|
+
- [docs/SETUP_GUIDE.md](SETUP_GUIDE.md) — Detailed setup walkthrough
|
|
455
|
+
- [docs/CLI.md](CLI.md) — CLI monitoring and debugging
|
|
456
|
+
- [docs/DEPLOYMENT.md](DEPLOYMENT.md) — Production deployment
|
|
457
|
+
- [docs/QUALITY_GATES.md](QUALITY_GATES.md) — Quality gate configuration
|
|
458
|
+
|
|
459
|
+
---
|
|
460
|
+
|
|
461
|
+
## Support
|
|
462
|
+
|
|
463
|
+
For issues:
|
|
464
|
+
|
|
465
|
+
1. Run `kaseki-agent doctor` to check environment
|
|
466
|
+
2. Check logs in `/agents/kaseki-results/kaseki-N/`
|
|
467
|
+
3. Enable verbose output: `kaseki-agent --verbose run <repo> <ref>`
|
|
468
|
+
4. Open issue on [GitHub](https://github.com/CyanAutomation/kaseki-agent)
|