@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,521 @@
|
|
|
1
|
+
# Kaseki Agent API Service - Deployment Guide
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The Kaseki API Service allows remote execution and monitoring of kaseki-agent runs via HTTP REST API.
|
|
6
|
+
|
|
7
|
+
**Authoritative deployment mode: Docker container runtime** (docker-compose, systemd+docker, or manual `docker run`). Host Node.js process mode is fallback/dev-only and is not the production reference path.
|
|
8
|
+
|
|
9
|
+
## Prerequisites
|
|
10
|
+
|
|
11
|
+
- Docker + Docker Compose (for docker-compose deployment)
|
|
12
|
+
- Node.js ≥ 24.x (for Node.js fallback deployment)
|
|
13
|
+
- `/agents/kaseki-results` directory must exist or be creatable
|
|
14
|
+
- OpenRouter API key for Pi agent invocation (inherited from kaseki-agent)
|
|
15
|
+
|
|
16
|
+
## Quick Start
|
|
17
|
+
|
|
18
|
+
### ✅ Recommended: Docker Compose
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# Navigate to kaseki-agent repository
|
|
22
|
+
cd /agents/kaseki-template
|
|
23
|
+
|
|
24
|
+
# Set API key
|
|
25
|
+
export KASEKI_API_KEYS=sk-your-secret-key-here
|
|
26
|
+
|
|
27
|
+
# Build image from this repo
|
|
28
|
+
docker build -t kaseki-agent:node24-local .
|
|
29
|
+
|
|
30
|
+
# Start services (uses KASEKI_API_IMAGE, default: kaseki-agent:node24-local)
|
|
31
|
+
docker-compose up -d
|
|
32
|
+
|
|
33
|
+
# View logs
|
|
34
|
+
docker-compose logs -f kaseki-api
|
|
35
|
+
|
|
36
|
+
# Stop services
|
|
37
|
+
docker-compose down
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The API container runs as the `/agents` owner by default (`1000:1000`) and must also be able to use the host Docker socket so it can launch ephemeral `kaseki-N` containers. Set `DOCKER_GID` to the group owner of `/var/run/docker.sock`:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
export DOCKER_GID="$(stat -c '%g' /var/run/docker.sock)"
|
|
44
|
+
docker-compose up -d
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
In Dockhand, Portainer, or another compose manager, keep the same shape:
|
|
48
|
+
|
|
49
|
+
```yaml
|
|
50
|
+
services:
|
|
51
|
+
kaseki-api:
|
|
52
|
+
user: "1000:1000"
|
|
53
|
+
group_add:
|
|
54
|
+
- "${DOCKER_GID:-985}"
|
|
55
|
+
volumes:
|
|
56
|
+
- /agents:/agents:rw
|
|
57
|
+
- /var/run/docker.sock:/var/run/docker.sock
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
After deployment, verify controller readiness with the authenticated preflight endpoint:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
curl -H "Authorization: Bearer $KASEKI_API_KEYS" \
|
|
64
|
+
http://localhost:8080/api/preflight
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Configuration** (via environment variables):
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
# Core settings
|
|
71
|
+
KASEKI_API_KEYS=sk-key1,sk-key2 # Required: comma-separated API keys
|
|
72
|
+
KASEKI_API_PORT=8080 # API listen port (default: 8080)
|
|
73
|
+
KASEKI_API_LOG_LEVEL=info # Log level: debug/info/warn/error
|
|
74
|
+
KASEKI_API_IMAGE=kaseki-agent:node24-local # Must be built from this repo's Dockerfile
|
|
75
|
+
|
|
76
|
+
# Performance
|
|
77
|
+
KASEKI_API_MAX_CONCURRENT_RUNS=3 # Max concurrent jobs (default: 3)
|
|
78
|
+
KASEKI_AGENT_TIMEOUT_SECONDS=1200 # Agent timeout in seconds (default: 20 min)
|
|
79
|
+
KASEKI_MAX_DIFF_BYTES=200000 # Max diff size (default: 200 KB)
|
|
80
|
+
|
|
81
|
+
# Paths (usually inherited from docker-compose)
|
|
82
|
+
KASEKI_RESULTS_DIR=/agents/kaseki-results
|
|
83
|
+
KASEKI_API_LOG_DIR=/var/log/kaseki-api
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
## Fallback Deployment Options
|
|
89
|
+
|
|
90
|
+
### Option 1: Node.js Process (Fallback)
|
|
91
|
+
|
|
92
|
+
Quick alternative if Docker/docker-compose is unavailable:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
cd /agents/kaseki-template
|
|
96
|
+
|
|
97
|
+
# Install dependencies (lockfile-enforced)
|
|
98
|
+
npm ci --omit=dev
|
|
99
|
+
|
|
100
|
+
# Verify runtime
|
|
101
|
+
node -v # Must report v24.x or newer
|
|
102
|
+
|
|
103
|
+
# Start API
|
|
104
|
+
KASEKI_API_KEYS=sk-dev-key npm run kaseki-api
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Environment variables:**
|
|
108
|
+
|
|
109
|
+
```bash
|
|
110
|
+
KASEKI_API_KEYS=sk-key1,sk-key2 # Required
|
|
111
|
+
KASEKI_API_PORT=8080 # Default: 8080
|
|
112
|
+
KASEKI_API_LOG_LEVEL=info # Default: info
|
|
113
|
+
KASEKI_API_MAX_CONCURRENT_RUNS=3 # Default: 3
|
|
114
|
+
KASEKI_AGENT_TIMEOUT_SECONDS=1200 # Default: 1200
|
|
115
|
+
KASEKI_MAX_DIFF_BYTES=200000 # Default: 200000
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**Production considerations:**
|
|
119
|
+
|
|
120
|
+
- Use a process manager (systemd, supervisor, PM2) for restart/recovery
|
|
121
|
+
- Run with `NODE_ENV=production` for optimal performance
|
|
122
|
+
- Monitor logs and uptime independently
|
|
123
|
+
|
|
124
|
+
### Option 2: systemd Service (Alternative)
|
|
125
|
+
|
|
126
|
+
Deploy as a systemd service on the host (advanced):
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
# 1. Build image from this repository
|
|
130
|
+
cd /agents/kaseki-template
|
|
131
|
+
npm ci --omit=dev
|
|
132
|
+
npm run build
|
|
133
|
+
docker build -t kaseki-agent:node24-local .
|
|
134
|
+
|
|
135
|
+
# 2. (Registry workflow) push/pull image before service restart
|
|
136
|
+
# docker tag kaseki-agent:node24-local registry.example.com/kaseki-agent:node24-2026-05-03
|
|
137
|
+
# docker push registry.example.com/kaseki-agent:node24-2026-05-03
|
|
138
|
+
# On target host: docker pull registry.example.com/kaseki-agent:node24-2026-05-03
|
|
139
|
+
|
|
140
|
+
# 3. Install systemd service (Docker mode only)
|
|
141
|
+
sudo cp scripts/kaseki-api.service /etc/systemd/system/
|
|
142
|
+
sudo systemctl daemon-reload
|
|
143
|
+
|
|
144
|
+
# 4. Create environment file
|
|
145
|
+
sudo mkdir -p /etc/kaseki-api
|
|
146
|
+
sudo tee /etc/kaseki-api/kaseki-api.env << EOF
|
|
147
|
+
KASEKI_API_KEYS=sk-your-secret-key
|
|
148
|
+
KASEKI_API_PORT=8080
|
|
149
|
+
KASEKI_API_LOG_LEVEL=info
|
|
150
|
+
KASEKI_RESULTS_DIR=/agents/kaseki-results
|
|
151
|
+
KASEKI_API_IMAGE=kaseki-agent:node24-local
|
|
152
|
+
EOF
|
|
153
|
+
|
|
154
|
+
# 5. Set appropriate permissions
|
|
155
|
+
sudo chown root:root /etc/kaseki-api/kaseki-api.env
|
|
156
|
+
sudo chmod 600 /etc/kaseki-api/kaseki-api.env
|
|
157
|
+
|
|
158
|
+
# 6. Start service
|
|
159
|
+
sudo systemctl enable kaseki-api
|
|
160
|
+
sudo systemctl start kaseki-api
|
|
161
|
+
|
|
162
|
+
# 7. Check status
|
|
163
|
+
sudo systemctl status kaseki-api
|
|
164
|
+
sudo journalctl -u kaseki-api -f
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Important behavior in Docker mode:**
|
|
168
|
+
|
|
169
|
+
- The unit executes `node /app/dist/kaseki-api-service.js` inside the container image.
|
|
170
|
+
- `/etc/kaseki-api/kaseki-api.env` only supplies environment variables; it does not mount over `/app/dist`.
|
|
171
|
+
- Mounted host volumes are `/agents`, `/agents/kaseki-results`, `/var/log/kaseki-api`, and `/var/run/docker.sock`; none are mounted at `/app`, so `/app/dist` always comes from the image artifact.
|
|
172
|
+
|
|
173
|
+
### Option 3: Manual Docker Container (Advanced)
|
|
174
|
+
|
|
175
|
+
Run the API container directly without docker-compose:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
docker run --rm \
|
|
179
|
+
--name kaseki-api \
|
|
180
|
+
-p 8080:8080 \
|
|
181
|
+
-v /agents:/agents:rw \
|
|
182
|
+
-v /agents/kaseki-results:/agents/kaseki-results:rw \
|
|
183
|
+
-v /var/log/kaseki-api:/var/log/kaseki-api:rw \
|
|
184
|
+
-v /var/run/docker.sock:/var/run/docker.sock \
|
|
185
|
+
-e KASEKI_API_KEYS=sk-your-key \
|
|
186
|
+
-e KASEKI_API_PORT=8080 \
|
|
187
|
+
-e KASEKI_CONTAINER_USER=1000:1000 \
|
|
188
|
+
-e KASEKI_AGENT_TIMEOUT_SECONDS=1200 \
|
|
189
|
+
--user 1000:1000 \
|
|
190
|
+
--group-add "$(stat -c '%g' /var/run/docker.sock)" \
|
|
191
|
+
--cap-drop ALL \
|
|
192
|
+
--security-opt no-new-privileges:true \
|
|
193
|
+
--read-only \
|
|
194
|
+
--entrypoint node \
|
|
195
|
+
${KASEKI_API_IMAGE:-kaseki-agent:node24-local} \
|
|
196
|
+
/app/dist/kaseki-api-service.js
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
## Security Best Practices
|
|
202
|
+
|
|
203
|
+
1. **API Key Management**
|
|
204
|
+
- Store keys in environment files with mode `0600` (or use Docker secrets)
|
|
205
|
+
- Never commit keys to version control
|
|
206
|
+
- Rotate keys regularly
|
|
207
|
+
- Use separate keys for different environments (dev/staging/prod)
|
|
208
|
+
- For GitHub App authentication, prefer mounted files:
|
|
209
|
+
`GITHUB_APP_ID_FILE`, `GITHUB_APP_CLIENT_ID_FILE`, and
|
|
210
|
+
`GITHUB_APP_PRIVATE_KEY_FILE`. Avoid placing the private key PEM directly
|
|
211
|
+
in `.env`; environment variables are more likely to appear in process
|
|
212
|
+
inspection output, container metadata, and deployment UI history.
|
|
213
|
+
|
|
214
|
+
2. **Network Security**
|
|
215
|
+
- Expose API only on trusted networks (localhost or VPN)
|
|
216
|
+
- Use firewall rules to restrict access:
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
sudo ufw allow from 10.0.0.0/8 to any port 8080 # Example: allow from private network
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
- Consider putting API behind a reverse proxy (nginx) with authentication
|
|
223
|
+
|
|
224
|
+
3. **Container Hardening**
|
|
225
|
+
- All Docker deployments use:
|
|
226
|
+
- `--cap-drop ALL` — Remove all Linux capabilities
|
|
227
|
+
- `--security-opt no-new-privileges:true` — Prevent privilege escalation
|
|
228
|
+
- `--read-only` — Read-only root filesystem
|
|
229
|
+
- `tmpfs` — Temporary write-able directories
|
|
230
|
+
- API runs as a non-root user that owns `/agents`
|
|
231
|
+
- Add only the host Docker socket group as a supplemental group; do not run the API as root just to reach Docker
|
|
232
|
+
|
|
233
|
+
4. **TLS/HTTPS**
|
|
234
|
+
- Forward HTTPS traffic via reverse proxy (e.g., nginx):
|
|
235
|
+
|
|
236
|
+
```nginx
|
|
237
|
+
upstream kaseki_api {
|
|
238
|
+
server localhost:8080;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
server {
|
|
242
|
+
listen 443 ssl http2;
|
|
243
|
+
server_name api.kaseki.local;
|
|
244
|
+
ssl_certificate /etc/letsencrypt/live/api.kaseki.local/fullchain.pem;
|
|
245
|
+
ssl_certificate_key /etc/letsencrypt/live/api.kaseki.local/privkey.pem;
|
|
246
|
+
|
|
247
|
+
location / {
|
|
248
|
+
proxy_pass http://kaseki_api;
|
|
249
|
+
proxy_set_header Authorization $http_authorization;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
---
|
|
255
|
+
|
|
256
|
+
## Health Checks
|
|
257
|
+
|
|
258
|
+
All deployments should monitor health:
|
|
259
|
+
|
|
260
|
+
```bash
|
|
261
|
+
curl http://localhost:8080/health
|
|
262
|
+
# Equivalent namespaced endpoint:
|
|
263
|
+
curl http://localhost:8080/api/health
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
Expected response:
|
|
267
|
+
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"status": "healthy",
|
|
271
|
+
"timestamp": "2026-05-02T14:30:00Z",
|
|
272
|
+
"queue": {
|
|
273
|
+
"pending": 0,
|
|
274
|
+
"running": 0,
|
|
275
|
+
"maxConcurrent": 3
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Monitoring
|
|
283
|
+
|
|
284
|
+
### Dependency Cache Behavior
|
|
285
|
+
|
|
286
|
+
- Worker installs are lockfile-only (`npm ci --omit=dev`) and will fail when no `package-lock.json` or `npm-shrinkwrap.json` is present.
|
|
287
|
+
- Scheduler/runner containers must keep a persistent cache mount at `/agents/kaseki-cache` (or override with `KASEKI_CACHE_DIR`) so dependency cache data survives between runs.
|
|
288
|
+
- `run-kaseki.sh` mounts that directory into workers at `/cache`, and workers use:
|
|
289
|
+
- `KASEKI_DEPENDENCY_CACHE_DIR=/cache/dependencies`
|
|
290
|
+
- `NPM_CONFIG_CACHE=/cache/npm-cache`
|
|
291
|
+
- Cache key is deterministic: `sha256(repo_url) + lockfile sha256 + Node major version`.
|
|
292
|
+
- Progress + timing artifacts include install/cache signals:
|
|
293
|
+
- `progress.jsonl` / `progress.log`: dependency install stage, cache hit/miss, elapsed seconds.
|
|
294
|
+
- `stage-timings.tsv`: `dependency install` row with cache source and install flags.
|
|
295
|
+
- `dependency-cache.log`: summarized cache status.
|
|
296
|
+
|
|
297
|
+
### Docker Compose
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# View logs
|
|
301
|
+
docker-compose logs -f kaseki-api
|
|
302
|
+
|
|
303
|
+
# Check resource usage
|
|
304
|
+
docker stats kaseki-api
|
|
305
|
+
```
|
|
306
|
+
|
|
307
|
+
### Node.js Process
|
|
308
|
+
|
|
309
|
+
```bash
|
|
310
|
+
# Check process status
|
|
311
|
+
ps aux | grep kaseki-api
|
|
312
|
+
|
|
313
|
+
# View recent logs (depends on logging setup)
|
|
314
|
+
tail -f /var/log/kaseki-api.log
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### systemd Service
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# Check status
|
|
321
|
+
systemctl status kaseki-api
|
|
322
|
+
|
|
323
|
+
# View logs (last 100 lines)
|
|
324
|
+
journalctl -u kaseki-api -n 100
|
|
325
|
+
|
|
326
|
+
# Stream logs
|
|
327
|
+
journalctl -u kaseki-api -f
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Prometheus Metrics
|
|
331
|
+
|
|
332
|
+
Metrics endpoint coming in Phase 8:
|
|
333
|
+
|
|
334
|
+
```bash
|
|
335
|
+
curl -H "Authorization: Bearer $KASEKI_API_KEYS" http://localhost:8080/api/metrics
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
Example Prometheus scrape config:
|
|
339
|
+
|
|
340
|
+
```yaml
|
|
341
|
+
scrape_configs:
|
|
342
|
+
- job_name: kaseki_api
|
|
343
|
+
metrics_path: /api/metrics
|
|
344
|
+
scheme: http
|
|
345
|
+
static_configs:
|
|
346
|
+
- targets: ['kaseki-api:8080']
|
|
347
|
+
authorization:
|
|
348
|
+
credentials: ${KASEKI_API_KEY}
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
Readiness probe (no auth required):
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
curl -f http://localhost:8080/ready
|
|
355
|
+
# or
|
|
356
|
+
curl -f http://localhost:8080/api/ready
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
`/ready` returns `503` with machine-readable `reasons` when dependencies like results-dir writability,
|
|
360
|
+
scheduler queue introspection, or webhook processing health are unavailable.
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## Log Rotation
|
|
365
|
+
|
|
366
|
+
### Docker Compose
|
|
367
|
+
|
|
368
|
+
Logs are managed by Docker automatically. To configure retention:
|
|
369
|
+
|
|
370
|
+
```bash
|
|
371
|
+
# Edit daemon.json
|
|
372
|
+
sudo nano /etc/docker/daemon.json
|
|
373
|
+
```
|
|
374
|
+
|
|
375
|
+
Add:
|
|
376
|
+
|
|
377
|
+
```json
|
|
378
|
+
{
|
|
379
|
+
"log-driver": "json-file",
|
|
380
|
+
"log-opts": {
|
|
381
|
+
"max-size": "10m",
|
|
382
|
+
"max-file": "3"
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
Then restart Docker:
|
|
388
|
+
|
|
389
|
+
```bash
|
|
390
|
+
sudo systemctl restart docker
|
|
391
|
+
```
|
|
392
|
+
|
|
393
|
+
### Host Deployment (systemd/Node.js)
|
|
394
|
+
|
|
395
|
+
Configure logrotate:
|
|
396
|
+
|
|
397
|
+
```bash
|
|
398
|
+
sudo tee /etc/logrotate.d/kaseki-api << EOF
|
|
399
|
+
/var/log/kaseki-api/*.log {
|
|
400
|
+
daily
|
|
401
|
+
rotate 7
|
|
402
|
+
compress
|
|
403
|
+
delaycompress
|
|
404
|
+
missingok
|
|
405
|
+
notifempty
|
|
406
|
+
create 0640 nobody nogroup
|
|
407
|
+
sharedscripts
|
|
408
|
+
postrotate
|
|
409
|
+
systemctl reload kaseki-api > /dev/null 2>&1 || true
|
|
410
|
+
endscript
|
|
411
|
+
}
|
|
412
|
+
EOF
|
|
413
|
+
```
|
|
414
|
+
|
|
415
|
+
---
|
|
416
|
+
|
|
417
|
+
## Troubleshooting
|
|
418
|
+
|
|
419
|
+
### API won't start
|
|
420
|
+
|
|
421
|
+
Check required environment variables:
|
|
422
|
+
|
|
423
|
+
```bash
|
|
424
|
+
# Must be set
|
|
425
|
+
echo $KASEKI_API_KEYS # Should not be empty
|
|
426
|
+
ls -la /agents/kaseki-results # Directory must exist
|
|
427
|
+
```
|
|
428
|
+
|
|
429
|
+
### Container/process is crashing
|
|
430
|
+
|
|
431
|
+
View logs for detailed error:
|
|
432
|
+
|
|
433
|
+
```bash
|
|
434
|
+
# Docker Compose
|
|
435
|
+
docker-compose logs kaseki-api | head -50
|
|
436
|
+
|
|
437
|
+
# Node.js
|
|
438
|
+
npm run kaseki-api # Run in foreground to see errors
|
|
439
|
+
|
|
440
|
+
# systemd
|
|
441
|
+
journalctl -u kaseki-api -n 50
|
|
442
|
+
```
|
|
443
|
+
|
|
444
|
+
Common issues:
|
|
445
|
+
|
|
446
|
+
- Missing `/agents/kaseki-results` directory
|
|
447
|
+
- Invalid port (not between 1-65535)
|
|
448
|
+
- API key environment variable not set
|
|
449
|
+
- Docker daemon not running (for docker-compose)
|
|
450
|
+
- Node.js not installed or wrong version
|
|
451
|
+
|
|
452
|
+
### Slow performance
|
|
453
|
+
|
|
454
|
+
Check queue status:
|
|
455
|
+
|
|
456
|
+
```bash
|
|
457
|
+
curl -H "Authorization: Bearer sk-key" http://localhost:8080/api/runs
|
|
458
|
+
|
|
459
|
+
# Monitor running jobs
|
|
460
|
+
watch -n2 'curl -s http://localhost:8080/health | jq ".queue"'
|
|
461
|
+
```
|
|
462
|
+
|
|
463
|
+
Increase `KASEKI_API_MAX_CONCURRENT_RUNS` if jobs are queueing unnecessarily.
|
|
464
|
+
|
|
465
|
+
---
|
|
466
|
+
|
|
467
|
+
## Cleanup
|
|
468
|
+
|
|
469
|
+
### Docker Compose
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
cd /agents/kaseki-template
|
|
473
|
+
docker-compose down
|
|
474
|
+
docker volume prune # Optional: delete unused volumes
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
### Node.js Process
|
|
478
|
+
|
|
479
|
+
```bash
|
|
480
|
+
# Stop the process
|
|
481
|
+
pkill -f "kaseki-api"
|
|
482
|
+
|
|
483
|
+
# Or if using npm:
|
|
484
|
+
# Ctrl+C in the terminal
|
|
485
|
+
```
|
|
486
|
+
|
|
487
|
+
### systemd Service
|
|
488
|
+
|
|
489
|
+
```bash
|
|
490
|
+
sudo systemctl stop kaseki-api
|
|
491
|
+
sudo systemctl disable kaseki-api
|
|
492
|
+
sudo rm /etc/systemd/system/kaseki-api.service
|
|
493
|
+
sudo systemctl daemon-reload
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
---
|
|
497
|
+
|
|
498
|
+
## Next Steps
|
|
499
|
+
|
|
500
|
+
1. **Choose your deployment path** — Docker Compose (recommended) or Node.js
|
|
501
|
+
2. **Configure for your network** — Update firewall rules, reverse proxy settings
|
|
502
|
+
3. **Set up monitoring** — Add health checks, alerts
|
|
503
|
+
4. **Test integration** — Use TypeScript client library to submit test runs
|
|
504
|
+
5. **Deploy kaseki-agent** — Ensure Docker base image and OpenRouter credentials are configured
|
|
505
|
+
|
|
506
|
+
## Runtime Verification
|
|
507
|
+
|
|
508
|
+
Use these checks after deployment:
|
|
509
|
+
|
|
510
|
+
```bash
|
|
511
|
+
# Check whether systemd is launching Docker or host Node
|
|
512
|
+
systemctl cat kaseki-api | sed -n "1,220p"
|
|
513
|
+
|
|
514
|
+
# Docker path: verify container runtime Node major
|
|
515
|
+
docker exec kaseki-api node -v
|
|
516
|
+
|
|
517
|
+
# Host-Node path: verify service user runtime (example for nobody)
|
|
518
|
+
sudo -u nobody /usr/bin/node -v
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
The service startup precheck logs detected Node version and exits with a clear error if the major version is less than 24.
|