@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.
Files changed (459) hide show
  1. package/.dockerignore +54 -0
  2. package/.eslintignore +11 -0
  3. package/.eslintrc.json +95 -0
  4. package/.github/ISSUE_TEMPLATE/bug_report.md +53 -0
  5. package/.github/ISSUE_TEMPLATE/feature_request.md +53 -0
  6. package/.github/ISSUE_TEMPLATE/security.md +51 -0
  7. package/.github/PULL_REQUEST_TEMPLATE/default.md +71 -0
  8. package/.github/dependabot.yml +38 -0
  9. package/.github/skills/dependency-cache-optimization/SKILL.md +526 -0
  10. package/.github/skills/docker-image-management/SKILL.md +532 -0
  11. package/.github/skills/frontend-design/SKILL.md +782 -0
  12. package/.github/skills/prompt-engineering/SKILL.md +360 -0
  13. package/.github/skills/quality-gate-config/SKILL.md +591 -0
  14. package/.github/skills/result-report-analysis/SKILL.md +576 -0
  15. package/.github/skills/test-automation/SKILL.md +593 -0
  16. package/.github/skills/workflow-diagnosis/SKILL.md +468 -0
  17. package/.github/workflows/build-docker-image.yml +453 -0
  18. package/.github/workflows/release.yml +68 -0
  19. package/.releaserc.json +135 -0
  20. package/CHANGELOG.md +117 -0
  21. package/CLAUDE.md +336 -0
  22. package/CONTRIBUTING.md +339 -0
  23. package/Dockerfile +217 -0
  24. package/README.md +1527 -0
  25. package/STYLE.md +521 -0
  26. package/add-js-extensions.d.ts +9 -0
  27. package/add-js-extensions.d.ts.map +1 -0
  28. package/add-js-extensions.js.map +1 -0
  29. package/dist/add-js-extensions.d.ts +9 -0
  30. package/dist/add-js-extensions.d.ts.map +1 -0
  31. package/dist/add-js-extensions.js +52 -0
  32. package/dist/add-js-extensions.js.map +1 -0
  33. package/dist/ansi-colors.d.ts +26 -0
  34. package/dist/ansi-colors.d.ts.map +1 -0
  35. package/dist/ansi-colors.js +51 -0
  36. package/dist/ansi-colors.js.map +1 -0
  37. package/dist/cli/BaseCommand.d.ts +18 -0
  38. package/dist/cli/BaseCommand.d.ts.map +1 -0
  39. package/dist/cli/BaseCommand.js +31 -0
  40. package/dist/cli/BaseCommand.js.map +1 -0
  41. package/dist/cli/KasekiCLI.d.ts +30 -0
  42. package/dist/cli/KasekiCLI.d.ts.map +1 -0
  43. package/dist/cli/KasekiCLI.js +134 -0
  44. package/dist/cli/KasekiCLI.js.map +1 -0
  45. package/dist/cli/commands/ConfigCommand.d.ts +13 -0
  46. package/dist/cli/commands/ConfigCommand.d.ts.map +1 -0
  47. package/dist/cli/commands/ConfigCommand.js +131 -0
  48. package/dist/cli/commands/ConfigCommand.js.map +1 -0
  49. package/dist/cli/commands/DoctorCommand.d.ts +45 -0
  50. package/dist/cli/commands/DoctorCommand.d.ts.map +1 -0
  51. package/dist/cli/commands/DoctorCommand.js +309 -0
  52. package/dist/cli/commands/DoctorCommand.js.map +1 -0
  53. package/dist/cli/commands/ListCommand.d.ts +9 -0
  54. package/dist/cli/commands/ListCommand.d.ts.map +1 -0
  55. package/dist/cli/commands/ListCommand.js +81 -0
  56. package/dist/cli/commands/ListCommand.js.map +1 -0
  57. package/dist/cli/commands/ReportCommand.d.ts +9 -0
  58. package/dist/cli/commands/ReportCommand.d.ts.map +1 -0
  59. package/dist/cli/commands/ReportCommand.js +98 -0
  60. package/dist/cli/commands/ReportCommand.js.map +1 -0
  61. package/dist/cli/commands/RunCommand.d.ts +13 -0
  62. package/dist/cli/commands/RunCommand.d.ts.map +1 -0
  63. package/dist/cli/commands/RunCommand.js +191 -0
  64. package/dist/cli/commands/RunCommand.js.map +1 -0
  65. package/dist/cli/commands/SecretsCommand.d.ts +9 -0
  66. package/dist/cli/commands/SecretsCommand.d.ts.map +1 -0
  67. package/dist/cli/commands/SecretsCommand.js +109 -0
  68. package/dist/cli/commands/SecretsCommand.js.map +1 -0
  69. package/dist/cli/commands/ServeCommand.d.ts +9 -0
  70. package/dist/cli/commands/ServeCommand.d.ts.map +1 -0
  71. package/dist/cli/commands/ServeCommand.js +50 -0
  72. package/dist/cli/commands/ServeCommand.js.map +1 -0
  73. package/dist/cli/commands/SetupCommand.d.ts +42 -0
  74. package/dist/cli/commands/SetupCommand.d.ts.map +1 -0
  75. package/dist/cli/commands/SetupCommand.js +249 -0
  76. package/dist/cli/commands/SetupCommand.js.map +1 -0
  77. package/dist/cli.d.ts +9 -0
  78. package/dist/cli.d.ts.map +1 -0
  79. package/dist/cli.js +130 -0
  80. package/dist/cli.js.map +1 -0
  81. package/dist/config/ConfigManager.d.ts +395 -0
  82. package/dist/config/ConfigManager.d.ts.map +1 -0
  83. package/dist/config/ConfigManager.js +446 -0
  84. package/dist/config/ConfigManager.js.map +1 -0
  85. package/dist/docker/DockerManager.d.ts +69 -0
  86. package/dist/docker/DockerManager.d.ts.map +1 -0
  87. package/dist/docker/DockerManager.js +266 -0
  88. package/dist/docker/DockerManager.js.map +1 -0
  89. package/dist/event-aggregator.d.ts +71 -0
  90. package/dist/event-aggregator.d.ts.map +1 -0
  91. package/dist/event-aggregator.js +95 -0
  92. package/dist/event-aggregator.js.map +1 -0
  93. package/dist/github-app-token.d.ts +16 -0
  94. package/dist/github-app-token.d.ts.map +1 -0
  95. package/dist/github-app-token.js +148 -0
  96. package/dist/github-app-token.js.map +1 -0
  97. package/dist/idempotency-store.d.ts +61 -0
  98. package/dist/idempotency-store.d.ts.map +1 -0
  99. package/dist/idempotency-store.js +321 -0
  100. package/dist/idempotency-store.js.map +1 -0
  101. package/dist/index.d.ts +25 -0
  102. package/dist/index.d.ts.map +1 -0
  103. package/dist/index.js +31 -0
  104. package/dist/index.js.map +1 -0
  105. package/dist/instance/InstanceManager.d.ts +81 -0
  106. package/dist/instance/InstanceManager.d.ts.map +1 -0
  107. package/dist/instance/InstanceManager.js +220 -0
  108. package/dist/instance/InstanceManager.js.map +1 -0
  109. package/dist/instance-metadata-reader.d.ts +48 -0
  110. package/dist/instance-metadata-reader.d.ts.map +1 -0
  111. package/dist/instance-metadata-reader.js +94 -0
  112. package/dist/instance-metadata-reader.js.map +1 -0
  113. package/dist/instance-state-derivation.d.ts +42 -0
  114. package/dist/instance-state-derivation.d.ts.map +1 -0
  115. package/dist/instance-state-derivation.js +133 -0
  116. package/dist/instance-state-derivation.js.map +1 -0
  117. package/dist/job-scheduler.d.ts +124 -0
  118. package/dist/job-scheduler.d.ts.map +1 -0
  119. package/dist/job-scheduler.js +992 -0
  120. package/dist/job-scheduler.js.map +1 -0
  121. package/dist/kaseki-api-client.d.ts +89 -0
  122. package/dist/kaseki-api-client.d.ts.map +1 -0
  123. package/dist/kaseki-api-client.js +405 -0
  124. package/dist/kaseki-api-client.js.map +1 -0
  125. package/dist/kaseki-api-config.d.ts +34 -0
  126. package/dist/kaseki-api-config.d.ts.map +1 -0
  127. package/dist/kaseki-api-config.js +113 -0
  128. package/dist/kaseki-api-config.js.map +1 -0
  129. package/dist/kaseki-api-routes.d.ts +13 -0
  130. package/dist/kaseki-api-routes.d.ts.map +1 -0
  131. package/dist/kaseki-api-routes.js +559 -0
  132. package/dist/kaseki-api-routes.js.map +1 -0
  133. package/dist/kaseki-api-service-wrapper.d.ts +43 -0
  134. package/dist/kaseki-api-service-wrapper.d.ts.map +1 -0
  135. package/dist/kaseki-api-service-wrapper.js +150 -0
  136. package/dist/kaseki-api-service-wrapper.js.map +1 -0
  137. package/dist/kaseki-api-service.d.ts +16 -0
  138. package/dist/kaseki-api-service.d.ts.map +1 -0
  139. package/dist/kaseki-api-service.js +143 -0
  140. package/dist/kaseki-api-service.js.map +1 -0
  141. package/dist/kaseki-api-types.d.ts +440 -0
  142. package/dist/kaseki-api-types.d.ts.map +1 -0
  143. package/dist/kaseki-api-types.js +64 -0
  144. package/dist/kaseki-api-types.js.map +1 -0
  145. package/dist/kaseki-cli-lib.d.ts +219 -0
  146. package/dist/kaseki-cli-lib.d.ts.map +1 -0
  147. package/dist/kaseki-cli-lib.js +523 -0
  148. package/dist/kaseki-cli-lib.js.map +1 -0
  149. package/dist/kaseki-cli.d.ts +38 -0
  150. package/dist/kaseki-cli.d.ts.map +1 -0
  151. package/dist/kaseki-cli.js +559 -0
  152. package/dist/kaseki-cli.js.map +1 -0
  153. package/dist/kaseki-report.d.ts +3 -0
  154. package/dist/kaseki-report.d.ts.map +1 -0
  155. package/dist/kaseki-report.js +140 -0
  156. package/dist/kaseki-report.js.map +1 -0
  157. package/dist/lib/subprocess-helpers.d.ts +98 -0
  158. package/dist/lib/subprocess-helpers.d.ts.map +1 -0
  159. package/dist/lib/subprocess-helpers.js +136 -0
  160. package/dist/lib/subprocess-helpers.js.map +1 -0
  161. package/dist/logger.d.ts +39 -0
  162. package/dist/logger.d.ts.map +1 -0
  163. package/dist/logger.js +79 -0
  164. package/dist/logger.js.map +1 -0
  165. package/dist/metrics.d.ts +19 -0
  166. package/dist/metrics.d.ts.map +1 -0
  167. package/dist/metrics.js +59 -0
  168. package/dist/metrics.js.map +1 -0
  169. package/dist/middleware/job-lookup.d.ts +27 -0
  170. package/dist/middleware/job-lookup.d.ts.map +1 -0
  171. package/dist/middleware/job-lookup.js +28 -0
  172. package/dist/middleware/job-lookup.js.map +1 -0
  173. package/dist/pi-event-filter.d.ts +3 -0
  174. package/dist/pi-event-filter.d.ts.map +1 -0
  175. package/dist/pi-event-filter.js +126 -0
  176. package/dist/pi-event-filter.js.map +1 -0
  177. package/dist/pi-progress-stream.d.ts +3 -0
  178. package/dist/pi-progress-stream.d.ts.map +1 -0
  179. package/dist/pi-progress-stream.js +205 -0
  180. package/dist/pi-progress-stream.js.map +1 -0
  181. package/dist/pi-progress-summarizer.d.ts +61 -0
  182. package/dist/pi-progress-summarizer.d.ts.map +1 -0
  183. package/dist/pi-progress-summarizer.js +246 -0
  184. package/dist/pi-progress-summarizer.js.map +1 -0
  185. package/dist/pre-flight-validator.d.ts +72 -0
  186. package/dist/pre-flight-validator.d.ts.map +1 -0
  187. package/dist/pre-flight-validator.js +513 -0
  188. package/dist/pre-flight-validator.js.map +1 -0
  189. package/dist/progress-stream-utils.d.ts +3 -0
  190. package/dist/progress-stream-utils.d.ts.map +1 -0
  191. package/dist/progress-stream-utils.js +15 -0
  192. package/dist/progress-stream-utils.js.map +1 -0
  193. package/dist/result-cache.d.ts +52 -0
  194. package/dist/result-cache.d.ts.map +1 -0
  195. package/dist/result-cache.js +134 -0
  196. package/dist/result-cache.js.map +1 -0
  197. package/dist/routes/artifact-routes.d.ts +10 -0
  198. package/dist/routes/artifact-routes.d.ts.map +1 -0
  199. package/dist/routes/artifact-routes.js +126 -0
  200. package/dist/routes/artifact-routes.js.map +1 -0
  201. package/dist/routes/log-routes.d.ts +8 -0
  202. package/dist/routes/log-routes.d.ts.map +1 -0
  203. package/dist/routes/log-routes.js +345 -0
  204. package/dist/routes/log-routes.js.map +1 -0
  205. package/dist/routes/status-routes.d.ts +8 -0
  206. package/dist/routes/status-routes.d.ts.map +1 -0
  207. package/dist/routes/status-routes.js +82 -0
  208. package/dist/routes/status-routes.js.map +1 -0
  209. package/dist/routes/webhook-routes.d.ts +6 -0
  210. package/dist/routes/webhook-routes.d.ts.map +1 -0
  211. package/dist/routes/webhook-routes.js +86 -0
  212. package/dist/routes/webhook-routes.js.map +1 -0
  213. package/dist/run-artifact-metadata-cache.d.ts +42 -0
  214. package/dist/run-artifact-metadata-cache.d.ts.map +1 -0
  215. package/dist/run-artifact-metadata-cache.js +139 -0
  216. package/dist/run-artifact-metadata-cache.js.map +1 -0
  217. package/dist/secret-value-cache.d.ts +13 -0
  218. package/dist/secret-value-cache.d.ts.map +1 -0
  219. package/dist/secret-value-cache.js +44 -0
  220. package/dist/secret-value-cache.js.map +1 -0
  221. package/dist/secrets/SecretsManager.d.ts +80 -0
  222. package/dist/secrets/SecretsManager.d.ts.map +1 -0
  223. package/dist/secrets/SecretsManager.js +306 -0
  224. package/dist/secrets/SecretsManager.js.map +1 -0
  225. package/dist/test-utils.d.ts +55 -0
  226. package/dist/test-utils.d.ts.map +1 -0
  227. package/dist/test-utils.js +48 -0
  228. package/dist/test-utils.js.map +1 -0
  229. package/dist/timestamp-tracker.d.ts +75 -0
  230. package/dist/timestamp-tracker.d.ts.map +1 -0
  231. package/dist/timestamp-tracker.js +121 -0
  232. package/dist/timestamp-tracker.js.map +1 -0
  233. package/dist/utils/failure-artifact-writer.d.ts +29 -0
  234. package/dist/utils/failure-artifact-writer.d.ts.map +1 -0
  235. package/dist/utils/failure-artifact-writer.js +157 -0
  236. package/dist/utils/failure-artifact-writer.js.map +1 -0
  237. package/dist/utils/file-helpers.d.ts +41 -0
  238. package/dist/utils/file-helpers.d.ts.map +1 -0
  239. package/dist/utils/file-helpers.js +143 -0
  240. package/dist/utils/file-helpers.js.map +1 -0
  241. package/dist/utils/http-client-factory.d.ts +46 -0
  242. package/dist/utils/http-client-factory.d.ts.map +1 -0
  243. package/dist/utils/http-client-factory.js +114 -0
  244. package/dist/utils/http-client-factory.js.map +1 -0
  245. package/dist/utils/progress-normalizer.d.ts +13 -0
  246. package/dist/utils/progress-normalizer.d.ts.map +1 -0
  247. package/dist/utils/progress-normalizer.js +57 -0
  248. package/dist/utils/progress-normalizer.js.map +1 -0
  249. package/dist/utils/response-helpers.d.ts +34 -0
  250. package/dist/utils/response-helpers.d.ts.map +1 -0
  251. package/dist/utils/response-helpers.js +78 -0
  252. package/dist/utils/response-helpers.js.map +1 -0
  253. package/dist/utils/route-helpers.d.ts +17 -0
  254. package/dist/utils/route-helpers.d.ts.map +1 -0
  255. package/dist/utils/route-helpers.js +22 -0
  256. package/dist/utils/route-helpers.js.map +1 -0
  257. package/dist/utils/status-response-builder.d.ts +23 -0
  258. package/dist/utils/status-response-builder.d.ts.map +1 -0
  259. package/dist/utils/status-response-builder.js +144 -0
  260. package/dist/utils/status-response-builder.js.map +1 -0
  261. package/dist/utils/type-guards.d.ts +37 -0
  262. package/dist/utils/type-guards.d.ts.map +1 -0
  263. package/dist/utils/type-guards.js +45 -0
  264. package/dist/utils/type-guards.js.map +1 -0
  265. package/dist/utils/utf8-helpers.d.ts +32 -0
  266. package/dist/utils/utf8-helpers.d.ts.map +1 -0
  267. package/dist/utils/utf8-helpers.js +97 -0
  268. package/dist/utils/utf8-helpers.js.map +1 -0
  269. package/dist/utils/webhook-event-builder.d.ts +26 -0
  270. package/dist/utils/webhook-event-builder.d.ts.map +1 -0
  271. package/dist/utils/webhook-event-builder.js +77 -0
  272. package/dist/utils/webhook-event-builder.js.map +1 -0
  273. package/dist/webhook-manager.d.ts +56 -0
  274. package/dist/webhook-manager.d.ts.map +1 -0
  275. package/dist/webhook-manager.js +359 -0
  276. package/dist/webhook-manager.js.map +1 -0
  277. package/docker/workspace-cache/package-lock.json +13 -0
  278. package/docker/workspace-cache/package.json +7 -0
  279. package/docker-compose.yml +53 -0
  280. package/docs/API.md +708 -0
  281. package/docs/BACKLOG.md +19 -0
  282. package/docs/BUILD_STRATEGY.md +404 -0
  283. package/docs/CLI.md +569 -0
  284. package/docs/DEPLOYMENT.md +521 -0
  285. package/docs/DEVELOPMENT.md +459 -0
  286. package/docs/DOCKER_SETUP.md +522 -0
  287. package/docs/ENHANCED_PROGRESS_LOGS.md +264 -0
  288. package/docs/IMPLEMENTATION_SUMMARY.md +549 -0
  289. package/docs/INTEGRATION_EXAMPLE.md +217 -0
  290. package/docs/NPM_SETUP.md +468 -0
  291. package/docs/PHASE1-4_IMPLEMENTATION.md +302 -0
  292. package/docs/PHASE1_COMPLETION.md +192 -0
  293. package/docs/PHASE2_COMPLETION.md +134 -0
  294. package/docs/PHASE6_MIGRATION.md +392 -0
  295. package/docs/PRINTF_SAFETY_FIX.md +282 -0
  296. package/docs/QUALITY_GATES.md +369 -0
  297. package/docs/SETUP_GUIDE.md +482 -0
  298. package/docs/TASK_PROMPT_TEMPLATES.md +533 -0
  299. package/docs/VALIDATION_FIX.md +139 -0
  300. package/docs/VERIFICATION_CHECKLIST.md +335 -0
  301. package/docs/repo-maturity.md +760 -0
  302. package/fix-tests.d.ts +9 -0
  303. package/fix-tests.d.ts.map +1 -0
  304. package/fix-tests.js.map +1 -0
  305. package/fix-tests.ts +53 -0
  306. package/jest.config.ts +31 -0
  307. package/kaseki +183 -0
  308. package/kaseki-agent.sh +1961 -0
  309. package/ops/logrotate/kaseki +10 -0
  310. package/package.json +83 -0
  311. package/perf/README.md +54 -0
  312. package/perf/pi-event-filter.benchmark.test.ts +98 -0
  313. package/run-kaseki-json.test.sh +106 -0
  314. package/run-kaseki.sh +990 -0
  315. package/scripts/allowlist-helper.sh +56 -0
  316. package/scripts/cleanup-kaseki.sh +168 -0
  317. package/scripts/deploy-pi-template.sh +293 -0
  318. package/scripts/docker-entrypoint.sh +71 -0
  319. package/scripts/dry-run-allowlist.sh +161 -0
  320. package/scripts/kaseki-activate.sh +396 -0
  321. package/scripts/kaseki-api.service +62 -0
  322. package/scripts/kaseki-container-entrypoint-wrapper.sh +119 -0
  323. package/scripts/kaseki-container-setup-remote.sh +172 -0
  324. package/scripts/kaseki-container-setup.sh +193 -0
  325. package/scripts/kaseki-healthcheck.sh +95 -0
  326. package/scripts/kaseki-install.sh +50 -0
  327. package/scripts/kaseki-maturity-score.sh +291 -0
  328. package/scripts/kaseki-performance-metrics.sh +122 -0
  329. package/scripts/kaseki-preflight.sh +270 -0
  330. package/scripts/kaseki-setup.sh +265 -0
  331. package/scripts/pi-setup-remote.sh +213 -0
  332. package/scripts/setup-github-labels.sh +42 -0
  333. package/scripts/suggest-allowlist.sh +68 -0
  334. package/scripts/templates/MULTI_HOST_DISTRIBUTED.md +337 -0
  335. package/scripts/templates/REST_API_SERVICE.md +490 -0
  336. package/scripts/templates/SINGLE_HOST_CLI.md +194 -0
  337. package/scripts/test-github-app.sh +248 -0
  338. package/src/add-js-extensions.ts +61 -0
  339. package/src/ansi-colors.test.ts +62 -0
  340. package/src/ansi-colors.ts +67 -0
  341. package/src/cli/BaseCommand.ts +40 -0
  342. package/src/cli/KasekiCLI.ts +154 -0
  343. package/src/cli/commands/ConfigCommand.ts +145 -0
  344. package/src/cli/commands/DoctorCommand.ts +329 -0
  345. package/src/cli/commands/ListCommand.ts +105 -0
  346. package/src/cli/commands/ReportCommand.ts +110 -0
  347. package/src/cli/commands/RunCommand.ts +218 -0
  348. package/src/cli/commands/SecretsCommand.ts +120 -0
  349. package/src/cli/commands/ServeCommand.ts +62 -0
  350. package/src/cli/commands/SetupCommand.ts +301 -0
  351. package/src/cli.ts +138 -0
  352. package/src/config/ConfigManager.ts +476 -0
  353. package/src/docker/DockerManager.ts +319 -0
  354. package/src/docker-entrypoint-packaging.test.ts +33 -0
  355. package/src/event-aggregator.test.ts +117 -0
  356. package/src/event-aggregator.ts +126 -0
  357. package/src/github-app-token.ts +215 -0
  358. package/src/idempotency-store.test.ts +117 -0
  359. package/src/idempotency-store.ts +385 -0
  360. package/src/index.ts +89 -0
  361. package/src/instance/InstanceManager.ts +285 -0
  362. package/src/instance-metadata-reader.test.ts +190 -0
  363. package/src/instance-metadata-reader.ts +129 -0
  364. package/src/instance-state-derivation.test.ts +263 -0
  365. package/src/instance-state-derivation.ts +148 -0
  366. package/src/job-scheduler.test.ts +1236 -0
  367. package/src/job-scheduler.ts +1117 -0
  368. package/src/kaseki-api-client.ts +488 -0
  369. package/src/kaseki-api-config.test.ts +315 -0
  370. package/src/kaseki-api-config.ts +175 -0
  371. package/src/kaseki-api-routes.test.ts +1615 -0
  372. package/src/kaseki-api-routes.ts +643 -0
  373. package/src/kaseki-api-service-wrapper.ts +188 -0
  374. package/src/kaseki-api-service.test.ts +418 -0
  375. package/src/kaseki-api-service.ts +192 -0
  376. package/src/kaseki-api-types.ts +320 -0
  377. package/src/kaseki-cli-lib.test.ts +552 -0
  378. package/src/kaseki-cli-lib.ts +760 -0
  379. package/src/kaseki-cli.ts +682 -0
  380. package/src/kaseki-report.test.ts +118 -0
  381. package/src/kaseki-report.ts +192 -0
  382. package/src/lib/subprocess-helpers.ts +177 -0
  383. package/src/logger.ts +114 -0
  384. package/src/metrics.ts +66 -0
  385. package/src/middleware/job-lookup.test.ts +113 -0
  386. package/src/middleware/job-lookup.ts +45 -0
  387. package/src/pi-event-filter.test.ts +183 -0
  388. package/src/pi-event-filter.ts +183 -0
  389. package/src/pi-progress-stream.ts +287 -0
  390. package/src/pi-progress-summarizer.test.ts +302 -0
  391. package/src/pi-progress-summarizer.ts +287 -0
  392. package/src/pre-flight-validator.test.ts +512 -0
  393. package/src/pre-flight-validator.ts +618 -0
  394. package/src/progress-stream-utils.test.ts +35 -0
  395. package/src/progress-stream-utils.ts +14 -0
  396. package/src/result-cache.test.ts +195 -0
  397. package/src/result-cache.ts +181 -0
  398. package/src/routes/artifact-routes.ts +169 -0
  399. package/src/routes/log-routes.ts +391 -0
  400. package/src/routes/status-routes.ts +92 -0
  401. package/src/routes/webhook-routes.ts +97 -0
  402. package/src/run-artifact-metadata-cache.test.ts +80 -0
  403. package/src/run-artifact-metadata-cache.ts +184 -0
  404. package/src/secret-value-cache.test.ts +66 -0
  405. package/src/secret-value-cache.ts +55 -0
  406. package/src/secrets/SecretsManager.ts +343 -0
  407. package/src/test-utils.ts +81 -0
  408. package/src/timestamp-tracker.test.ts +134 -0
  409. package/src/timestamp-tracker.ts +132 -0
  410. package/src/utils/failure-artifact-writer.ts +187 -0
  411. package/src/utils/file-helpers.test.ts +235 -0
  412. package/src/utils/file-helpers.ts +150 -0
  413. package/src/utils/http-client-factory.test.ts +245 -0
  414. package/src/utils/http-client-factory.ts +157 -0
  415. package/src/utils/progress-normalizer.test.ts +442 -0
  416. package/src/utils/progress-normalizer.ts +68 -0
  417. package/src/utils/response-helpers.test.ts +122 -0
  418. package/src/utils/response-helpers.ts +101 -0
  419. package/src/utils/route-helpers.ts +30 -0
  420. package/src/utils/status-response-builder.ts +159 -0
  421. package/src/utils/type-guards.ts +52 -0
  422. package/src/utils/utf8-helpers.ts +102 -0
  423. package/src/utils/webhook-event-builder.test.ts +143 -0
  424. package/src/utils/webhook-event-builder.ts +87 -0
  425. package/src/webhook-manager.test.ts +152 -0
  426. package/src/webhook-manager.ts +445 -0
  427. package/templates/allowlist-api-route.txt +7 -0
  428. package/templates/allowlist-comprehensive.txt +8 -0
  429. package/templates/allowlist-parser-fix.txt +6 -0
  430. package/templates/allowlist-ui-component.txt +9 -0
  431. package/templates/allowlist-utility.txt +9 -0
  432. package/test/actual-model-metadata.test.sh +102 -0
  433. package/test/dry-run.test.sh +131 -0
  434. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-0.json +1 -0
  435. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-1.json +1 -0
  436. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-invalid.json +1 -0
  437. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-0.json +1 -0
  438. package/test/fixtures/kaseki-report-exit-codes/metadata-exit-str-1.json +1 -0
  439. package/test/kaseki-api.integration.test.sh +165 -0
  440. package/test/pi-event-filter-failure.test.sh +83 -0
  441. package/test/printf-safety-focused.test.sh +99 -0
  442. package/test/printf-safety-results/results/restoration.jsonl +10 -0
  443. package/test/printf-safety-results/results/test.jsonl +0 -0
  444. package/test/printf-safety.test.sh +297 -0
  445. package/test/validation-fix.test.sh +79 -0
  446. package/test/validation-integration.test.sh +109 -0
  447. package/tests/allowlist-glob.test.sh +61 -0
  448. package/tests/dependency-cache-key.test.sh +48 -0
  449. package/tests/dependency-restore-mode.test.sh +48 -0
  450. package/tests/doctor-template-parity.test.sh +95 -0
  451. package/tests/github-operations.test.sh +142 -0
  452. package/tests/npm-install-flags.test.sh +58 -0
  453. package/tests/quality-gates.test.sh +178 -0
  454. package/tests/repo-memory.test.sh +103 -0
  455. package/tests/restore-disallowed-changes.test.sh +80 -0
  456. package/tests/validation-missing-npm-scripts.test.sh +93 -0
  457. package/tests/validation-strict-mode.test.sh +118 -0
  458. package/tsconfig.changed.json +7 -0
  459. 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