@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,522 @@
|
|
|
1
|
+
# Container-Based Setup Guide
|
|
2
|
+
|
|
3
|
+
This guide covers the **simplified container-based workflows** for kaseki-agent. These are ideal for users who want to minimize host-level complexity.
|
|
4
|
+
|
|
5
|
+
## Quick Start (Choose Your Scenario)
|
|
6
|
+
|
|
7
|
+
### **Scenario A: Interactive Setup (Easiest)**
|
|
8
|
+
|
|
9
|
+
Perfect for: Single host, local development, first-time users
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# 1. One-time setup (interactive, saves API key)
|
|
13
|
+
docker run -it \
|
|
14
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
15
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
16
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
17
|
+
setup
|
|
18
|
+
|
|
19
|
+
# 2. Run your first task (API key already saved)
|
|
20
|
+
docker run -it \
|
|
21
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
22
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
23
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
24
|
+
agent https://github.com/your-org/your-repo main
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Or with the convenience wrapper (if you've installed kaseki):**
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
./kaseki setup
|
|
31
|
+
./kaseki agent https://github.com/your-org/your-repo main
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
### **Scenario B: One-Command Run (No Setup)**
|
|
37
|
+
|
|
38
|
+
Perfect for: CI/CD, temporary runs, scripts
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
# Single command, API key from environment variable
|
|
42
|
+
OPENROUTER_API_KEY=sk-or-v1-your-key docker run -it \
|
|
43
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
44
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
45
|
+
run-mode https://github.com/your-org/your-repo main
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Or with wrapper:**
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
OPENROUTER_API_KEY=sk-or-v1-your-key ./kaseki run-mode https://github.com/your-org/your-repo main
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
### **Scenario C: Multi-Host Setup (From Controller)**
|
|
57
|
+
|
|
58
|
+
Perfect for: Distributed execution, managing multiple Pi/hosts
|
|
59
|
+
|
|
60
|
+
**From your controller machine (Mac, Linux):**
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Bootstrap each host
|
|
64
|
+
docker run \
|
|
65
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
66
|
+
setup-remote pi@192.168.88.201 sk-or-v1-your-key
|
|
67
|
+
|
|
68
|
+
docker run \
|
|
69
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
70
|
+
setup-remote pi@192.168.88.202 sk-or-v1-your-key
|
|
71
|
+
|
|
72
|
+
# Then run tasks on each host via SSH
|
|
73
|
+
ssh pi@192.168.88.201 \
|
|
74
|
+
'docker run -it \
|
|
75
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
76
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
77
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
78
|
+
agent https://github.com/your-org/your-repo main'
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## Entry Points Reference
|
|
84
|
+
|
|
85
|
+
The container supports the following entry points (commands):
|
|
86
|
+
|
|
87
|
+
### `setup` — Interactive Setup Wizard
|
|
88
|
+
|
|
89
|
+
**Purpose:** Securely prompt for API key and validate configuration
|
|
90
|
+
|
|
91
|
+
**Usage:**
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
docker run -it \
|
|
95
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
96
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
97
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
98
|
+
setup
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
**What it does:**
|
|
102
|
+
|
|
103
|
+
1. Prompts: "Enter your OpenRouter API key (sk-or-v1-...): "
|
|
104
|
+
2. Creates `~/.kaseki/secrets/openrouter_api_key` with mode 600
|
|
105
|
+
3. Validates Docker daemon accessibility
|
|
106
|
+
4. Confirms Pi CLI availability
|
|
107
|
+
5. Reports readiness status
|
|
108
|
+
|
|
109
|
+
**Credential sources (in priority order):**
|
|
110
|
+
|
|
111
|
+
1. Existing `/secrets/openrouter_api_key` file (asks to reuse)
|
|
112
|
+
2. `OPENROUTER_API_KEY` environment variable (if set)
|
|
113
|
+
3. Interactive prompt (if neither above)
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### `doctor` — Health Check & Diagnostics
|
|
118
|
+
|
|
119
|
+
**Purpose:** Validate system readiness for kaseki operations
|
|
120
|
+
|
|
121
|
+
**Usage:**
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
docker run \
|
|
125
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
126
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
127
|
+
doctor
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**Validates:**
|
|
131
|
+
|
|
132
|
+
- Docker daemon accessibility
|
|
133
|
+
- Pi CLI availability
|
|
134
|
+
- API key file readability
|
|
135
|
+
- Image and tools integrity
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
### `agent` — Run Agent Task
|
|
140
|
+
|
|
141
|
+
**Purpose:** Execute kaseki-agent against a repository
|
|
142
|
+
|
|
143
|
+
**Usage:**
|
|
144
|
+
|
|
145
|
+
```bash
|
|
146
|
+
docker run -it \
|
|
147
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
148
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
149
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
150
|
+
agent <repo-url> <git-ref> [task-prompt]
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**Arguments:**
|
|
154
|
+
|
|
155
|
+
- `<repo-url>` — Git repository URL (e.g., `https://github.com/org/repo`)
|
|
156
|
+
- `<git-ref>` — Branch, tag, or commit (e.g., `main`, `v1.0.0`, `abc1234`)
|
|
157
|
+
- `[task-prompt]` — Optional: Custom task description (overrides default)
|
|
158
|
+
|
|
159
|
+
**Example:**
|
|
160
|
+
|
|
161
|
+
```bash
|
|
162
|
+
docker run -it \
|
|
163
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
164
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
165
|
+
-v results:/results \
|
|
166
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
167
|
+
agent https://github.com/CyanAutomation/crudmapper main "Refactor the auth module"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Environment variables (optional):**
|
|
171
|
+
|
|
172
|
+
- `KASEKI_AGENT_TIMEOUT_SECONDS` — Timeout in seconds (default: 1200 / 20 min)
|
|
173
|
+
- `KASEKI_MODEL` — Pi model to use (default: openrouter/free)
|
|
174
|
+
- `KASEKI_VALIDATION_COMMANDS` — Validation steps (default: npm run check; npm run test; npm run build)
|
|
175
|
+
- `KASEKI_CHANGED_FILES_ALLOWLIST` — Restrict which files can change
|
|
176
|
+
- `KASEKI_MAX_DIFF_BYTES` — Maximum diff size (default: 200000 bytes)
|
|
177
|
+
|
|
178
|
+
**Result location:**
|
|
179
|
+
|
|
180
|
+
- Output: Streamed to stdout in real-time
|
|
181
|
+
- Artifacts: Saved to `/results` (mounted volume)
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
### `run-mode` — One-Command Run
|
|
186
|
+
|
|
187
|
+
**Purpose:** Execute a complete run with API key from environment variable (no pre-setup)
|
|
188
|
+
|
|
189
|
+
**Usage:**
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
OPENROUTER_API_KEY=sk-or-v1-your-key docker run -it \
|
|
193
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
194
|
+
-v results:/results \
|
|
195
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
196
|
+
run-mode <repo-url> <git-ref> [task-prompt]
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
**Key differences from `agent` mode:**
|
|
200
|
+
|
|
201
|
+
- API key comes from `OPENROUTER_API_KEY` env var (not file)
|
|
202
|
+
- No pre-setup required
|
|
203
|
+
- One-shot execution (no need for `./kaseki setup` first)
|
|
204
|
+
- Ideal for CI/CD, scripts, temporary runs
|
|
205
|
+
|
|
206
|
+
**Example:**
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
OPENROUTER_API_KEY=sk-or-v1-abc... docker run -it \
|
|
210
|
+
-e OPENROUTER_API_KEY \
|
|
211
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
212
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
213
|
+
run-mode https://github.com/org/repo main
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Security note:** API key is read from environment, written to a secure temp file (mode 600), and the environment variable is cleared immediately to prevent exposure in child process listings.
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### `setup-remote` — Remote Host Setup
|
|
221
|
+
|
|
222
|
+
**Purpose:** Bootstrap kaseki-agent on a remote host via SSH (orchestrated from container)
|
|
223
|
+
|
|
224
|
+
**Usage:**
|
|
225
|
+
|
|
226
|
+
```bash
|
|
227
|
+
docker run \
|
|
228
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
229
|
+
setup-remote <remote-host> <api-key-or-file>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
**Arguments:**
|
|
233
|
+
|
|
234
|
+
- `<remote-host>` — SSH destination (e.g., `pi@192.168.88.201`)
|
|
235
|
+
- `<api-key-or-file>` — API key directly (sk-or-...) OR path to file
|
|
236
|
+
|
|
237
|
+
**Examples:**
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
# Inline API key
|
|
241
|
+
docker run \
|
|
242
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
243
|
+
setup-remote pi@192.168.88.201 sk-or-v1-your-key
|
|
244
|
+
|
|
245
|
+
# API key from file
|
|
246
|
+
docker run \
|
|
247
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
248
|
+
setup-remote pi@192.168.88.202 ~/.kaseki/secrets/openrouter_api_key
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**What it does:**
|
|
252
|
+
|
|
253
|
+
1. Validates SSH connectivity
|
|
254
|
+
2. Creates `~/.kaseki/secrets/` on remote with proper permissions
|
|
255
|
+
3. Securely transfers API key via stdin (avoids shell history exposure)
|
|
256
|
+
4. Attempts Docker-based setup on remote (if Docker available)
|
|
257
|
+
5. Reports readiness
|
|
258
|
+
|
|
259
|
+
**Assumptions:**
|
|
260
|
+
|
|
261
|
+
- SSH keys are already configured (run `ssh-copy-id` first if needed)
|
|
262
|
+
- Remote host has Docker installed (or manually runs kaseki-install.sh)
|
|
263
|
+
|
|
264
|
+
---
|
|
265
|
+
|
|
266
|
+
## Volume Mounts Reference
|
|
267
|
+
|
|
268
|
+
### Required Mounts
|
|
269
|
+
|
|
270
|
+
| Mount | Purpose | Example |
|
|
271
|
+
|-------|---------|---------|
|
|
272
|
+
| **Docker Socket** | Allows container to launch child containers | `-v /var/run/docker.sock:/var/run/docker.sock` |
|
|
273
|
+
| **Secrets** | API key storage | `-v ~/.kaseki/secrets:/secrets` |
|
|
274
|
+
| **Results** | Output artifacts (optional) | `-v ./results:/results` |
|
|
275
|
+
|
|
276
|
+
### Optional Mounts
|
|
277
|
+
|
|
278
|
+
| Mount | Purpose | Example |
|
|
279
|
+
|-------|---------|---------|
|
|
280
|
+
| **Git Cache** | Speed up repeated clones | `-v ~/.kaseki/git-cache:/cache/git` |
|
|
281
|
+
| **npm Cache** | Speed up npm installs | `-v ~/.kaseki/npm-cache:/cache/npm` |
|
|
282
|
+
|
|
283
|
+
### Full Example with All Mounts
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
docker run -it \
|
|
287
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
288
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
289
|
+
-v ./results:/results \
|
|
290
|
+
-v ~/.kaseki/git-cache:/cache/git \
|
|
291
|
+
-v ~/.kaseki/npm-cache:/cache/npm \
|
|
292
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
293
|
+
agent https://github.com/org/repo main
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Convenience Wrapper Script
|
|
299
|
+
|
|
300
|
+
If you've installed the `kaseki` wrapper script at the root, you can use simplified commands:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
# Interactive setup
|
|
304
|
+
./kaseki setup
|
|
305
|
+
|
|
306
|
+
# Health check
|
|
307
|
+
./kaseki doctor
|
|
308
|
+
|
|
309
|
+
# Run agent task (uses saved API key)
|
|
310
|
+
./kaseki agent https://github.com/org/repo main
|
|
311
|
+
|
|
312
|
+
# One-command run (uses OPENROUTER_API_KEY env var)
|
|
313
|
+
OPENROUTER_API_KEY=sk-or-... ./kaseki run-mode https://github.com/org/repo main
|
|
314
|
+
|
|
315
|
+
# Multi-host setup
|
|
316
|
+
./kaseki setup-remote pi@host1 sk-or-key
|
|
317
|
+
./kaseki setup-remote pi@host2 sk-or-key
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Installing the Wrapper
|
|
321
|
+
|
|
322
|
+
The `kaseki` script is at the repository root:
|
|
323
|
+
|
|
324
|
+
```bash
|
|
325
|
+
# Option 1: Use directly from repo
|
|
326
|
+
cd /path/to/kaseki-agent
|
|
327
|
+
./kaseki setup
|
|
328
|
+
|
|
329
|
+
# Option 2: Copy to PATH for system-wide access
|
|
330
|
+
cp ./kaseki ~/bin/kaseki
|
|
331
|
+
chmod +x ~/bin/kaseki
|
|
332
|
+
kaseki setup
|
|
333
|
+
|
|
334
|
+
# Option 3: Create symlink
|
|
335
|
+
ln -s /path/to/kaseki-agent/kaseki ~/bin/kaseki
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
---
|
|
339
|
+
|
|
340
|
+
## Environment Variables
|
|
341
|
+
|
|
342
|
+
### Execution Control
|
|
343
|
+
|
|
344
|
+
| Variable | Default | Purpose |
|
|
345
|
+
|----------|---------|---------|
|
|
346
|
+
| `KASEKI_IMAGE` | `docker.io/cyanautomation/kaseki-agent:latest` | Docker image to use |
|
|
347
|
+
| `KASEKI_INSTANCE` | `kaseki-run` | Instance name (for run-mode) |
|
|
348
|
+
| `KASEKI_RESULTS_DIR` | `/results` | Results directory |
|
|
349
|
+
| `KASEKI_AGENT_TIMEOUT_SECONDS` | `1200` | Agent timeout (20 min) |
|
|
350
|
+
|
|
351
|
+
### Credentials
|
|
352
|
+
|
|
353
|
+
| Variable | Purpose |
|
|
354
|
+
|----------|---------|
|
|
355
|
+
| `OPENROUTER_API_KEY` | API key (for run-mode only; not recommended for interactive use) |
|
|
356
|
+
| `OPENROUTER_API_KEY_FILE` | Path to API key file (set automatically during setup) |
|
|
357
|
+
|
|
358
|
+
### Agent Configuration
|
|
359
|
+
|
|
360
|
+
| Variable | Purpose |
|
|
361
|
+
|----------|---------|
|
|
362
|
+
| `TASK_PROMPT` | Custom task description |
|
|
363
|
+
| `KASEKI_MODEL` | Model to use (default: openrouter/free) |
|
|
364
|
+
| `KASEKI_VALIDATION_COMMANDS` | Validation steps (semicolon-separated) |
|
|
365
|
+
| `KASEKI_CHANGED_FILES_ALLOWLIST` | Restrict file changes |
|
|
366
|
+
| `KASEKI_MAX_DIFF_BYTES` | Maximum diff size (bytes) |
|
|
367
|
+
|
|
368
|
+
---
|
|
369
|
+
|
|
370
|
+
## Common Workflows
|
|
371
|
+
|
|
372
|
+
### Workflow 1: Daily Development Tasks
|
|
373
|
+
|
|
374
|
+
```bash
|
|
375
|
+
# Day 1: Initial setup
|
|
376
|
+
docker run -it \
|
|
377
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
378
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
379
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
380
|
+
setup
|
|
381
|
+
|
|
382
|
+
# Days 2+: Run tasks (API key cached)
|
|
383
|
+
docker run -it \
|
|
384
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
385
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
386
|
+
-v results:/results \
|
|
387
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
388
|
+
agent https://github.com/my-org/my-repo feature/branch
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
### Workflow 2: CI/CD Pipeline
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
# In your GitHub Actions / GitLab CI / Jenkins:
|
|
395
|
+
OPENROUTER_API_KEY=${{ secrets.OPENROUTER_API_KEY }} docker run \
|
|
396
|
+
-e OPENROUTER_API_KEY \
|
|
397
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
398
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
399
|
+
run-mode $REPO_URL main "Fix failing tests"
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Workflow 3: Multi-Host Distributed Execution
|
|
403
|
+
|
|
404
|
+
```bash
|
|
405
|
+
#!/bin/bash
|
|
406
|
+
|
|
407
|
+
# Bootstrap 3 Pi hosts (from controller)
|
|
408
|
+
for i in 1 2 3; do
|
|
409
|
+
docker run \
|
|
410
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
411
|
+
setup-remote pi@192.168.88.20$i sk-or-v1-your-key
|
|
412
|
+
done
|
|
413
|
+
|
|
414
|
+
# Run tasks on each host in parallel
|
|
415
|
+
for i in 1 2 3; do
|
|
416
|
+
host="pi@192.168.88.20$i"
|
|
417
|
+
ssh "$host" 'docker run -it \
|
|
418
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
419
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
420
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
421
|
+
agent https://github.com/org/repo main' &
|
|
422
|
+
done
|
|
423
|
+
|
|
424
|
+
wait
|
|
425
|
+
echo "All hosts completed!"
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
---
|
|
429
|
+
|
|
430
|
+
## Troubleshooting
|
|
431
|
+
|
|
432
|
+
### "Docker daemon not responding"
|
|
433
|
+
|
|
434
|
+
The container needs access to the Docker socket. Make sure you're mounting it:
|
|
435
|
+
|
|
436
|
+
```bash
|
|
437
|
+
docker run -v /var/run/docker.sock:/var/run/docker.sock ...
|
|
438
|
+
```
|
|
439
|
+
|
|
440
|
+
If using Docker Desktop (Mac/Windows), ensure Docker Desktop is running.
|
|
441
|
+
|
|
442
|
+
### "API key file not found"
|
|
443
|
+
|
|
444
|
+
For `setup` and `agent` modes, the API key file must exist at `~/.kaseki/secrets/openrouter_api_key`:
|
|
445
|
+
|
|
446
|
+
```bash
|
|
447
|
+
# Create it manually if needed
|
|
448
|
+
mkdir -p ~/.kaseki/secrets
|
|
449
|
+
echo "sk-or-v1-your-key" > ~/.kaseki/secrets/openrouter_api_key
|
|
450
|
+
chmod 600 ~/.kaseki/secrets/openrouter_api_key
|
|
451
|
+
|
|
452
|
+
# Or run setup to create it interactively
|
|
453
|
+
docker run -it \
|
|
454
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
455
|
+
-v ~/.kaseki/secrets:/secrets \
|
|
456
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
457
|
+
setup
|
|
458
|
+
```
|
|
459
|
+
|
|
460
|
+
### "OPENROUTER_API_KEY environment variable is required"
|
|
461
|
+
|
|
462
|
+
For `run-mode`, you must pass the API key as an environment variable:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
OPENROUTER_API_KEY=sk-or-v1-... docker run -it \
|
|
466
|
+
-e OPENROUTER_API_KEY \
|
|
467
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
468
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
469
|
+
run-mode https://github.com/org/repo main
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
### "SSH: permission denied"
|
|
473
|
+
|
|
474
|
+
For `setup-remote`, you need SSH keys configured:
|
|
475
|
+
|
|
476
|
+
```bash
|
|
477
|
+
# Generate SSH key (if you don't have one)
|
|
478
|
+
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519
|
|
479
|
+
|
|
480
|
+
# Copy public key to remote host
|
|
481
|
+
ssh-copy-id -i ~/.ssh/id_ed25519.pub pi@192.168.88.201
|
|
482
|
+
|
|
483
|
+
# Test SSH
|
|
484
|
+
ssh pi@192.168.88.201 "echo OK"
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### Results not saved
|
|
488
|
+
|
|
489
|
+
Make sure you're mounting the results directory:
|
|
490
|
+
|
|
491
|
+
```bash
|
|
492
|
+
docker run -it \
|
|
493
|
+
...
|
|
494
|
+
-v ./results:/results \
|
|
495
|
+
docker.io/cyanautomation/kaseki-agent:latest \
|
|
496
|
+
agent ...
|
|
497
|
+
```
|
|
498
|
+
|
|
499
|
+
Results will be in `./results/` after the run completes.
|
|
500
|
+
|
|
501
|
+
---
|
|
502
|
+
|
|
503
|
+
## Comparison: Container vs. Host Setup
|
|
504
|
+
|
|
505
|
+
| Aspect | Container-Based | Host-Based (`run-kaseki.sh`) |
|
|
506
|
+
|--------|-----------------|------------------------------|
|
|
507
|
+
| **Setup** | `docker run ... setup` | Clone repo, run `./scripts/kaseki-setup.sh` |
|
|
508
|
+
| **Execution** | `docker run ... agent` | `./run-kaseki.sh` |
|
|
509
|
+
| **API key** | File (`/secrets/`) or env var | File (`~/.kaseki/secrets/`) |
|
|
510
|
+
| **Host dependencies** | Docker + curl/wget | Docker + bash + git |
|
|
511
|
+
| **First-time user** | "Run `docker run ... setup`" | "Read SETUP_GUIDE.md" |
|
|
512
|
+
| **Multi-host** | `docker run ... setup-remote` (from controller) | Clone repo, run `pi-setup-remote.sh` on each host |
|
|
513
|
+
|
|
514
|
+
---
|
|
515
|
+
|
|
516
|
+
## See Also
|
|
517
|
+
|
|
518
|
+
- [SETUP_GUIDE.md](SETUP_GUIDE.md) — Traditional host-based setup
|
|
519
|
+
- [DEPLOYMENT.md](DEPLOYMENT.md) — REST API service deployment
|
|
520
|
+
- [CLI.md](CLI.md) — Monitoring with kaseki-cli
|
|
521
|
+
- [QUALITY_GATES.md](QUALITY_GATES.md) — Quality gates and allowlists
|
|
522
|
+
- [TASK_PROMPT_TEMPLATES.md](TASK_PROMPT_TEMPLATES.md) — Writing effective task prompts
|