@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,532 @@
1
+ ---
2
+ name: docker-image-management
3
+ description: Managing base images, Pi CLI versions, and multi-arch builds
4
+ tags: [kaseki, docker, devops, image-management, ci-cd]
5
+ relatedSkills: [test-automation, dependency-cache-optimization]
6
+ ---
7
+
8
+ # Docker Image Management for Kaseki Agent
9
+
10
+ This skill guides maintaining the kaseki-agent Docker image, including base image updates, Pi CLI versioning, and multi-architecture builds.
11
+
12
+ ## Overview
13
+
14
+ **When to Use**:
15
+ - Updating Node.js base image (security patches, new versions)
16
+ - Upgrading Pi CLI to a new version
17
+ - Investigating multi-arch (amd64 + arm64) build failures
18
+ - Troubleshooting image caching or layer issues
19
+ - Publishing a new image version
20
+
21
+ **Key Concepts**:
22
+ - Base image: Node 22.22.2 (monthly security updates)
23
+ - Pi CLI: Pre-installed version 0.70.2 (compatibility matrix)
24
+ - Multi-arch: Build for both amd64 + arm64 using QEMU
25
+ - Registry: Published to `docker.io/cyanautomation/kaseki-agent`
26
+ - Versioning: Semantic versioning + latest tag
27
+
28
+ ---
29
+
30
+ ## Base Image (Node)
31
+
32
+ ### Current Version
33
+ ```
34
+ Base: node:22.22.2-alpine
35
+ Architecture: linux/amd64, linux/arm64
36
+ ```
37
+
38
+ ### Monitoring for Updates
39
+
40
+ **Monthly Security Checks**:
41
+ 1. Check Node.js security advisories: https://nodejs.org/en/security
42
+ 2. Review Alpine Linux security bulletins (base of node:*-alpine)
43
+ 3. Scan current image for vulnerabilities:
44
+ ```bash
45
+ docker build -t kaseki-template:test .
46
+ docker run --rm aquasec/trivy image kaseki-template:test
47
+ ```
48
+
49
+ ### Updating the Base Image
50
+
51
+ **Step 1**: Update Dockerfile
52
+ ```dockerfile
53
+ # Before
54
+ FROM node:22.22.2-alpine AS builder
55
+
56
+ # After
57
+ FROM node:22.23.0-alpine AS builder
58
+ ```
59
+
60
+ **Step 2**: Test the change locally
61
+ ```bash
62
+ # Build locally
63
+ docker build -t kaseki-template:test .
64
+
65
+ # Verify Node version
66
+ docker run --rm kaseki-template:test node --version
67
+ # Output: v22.23.0
68
+
69
+ # Run sanity checks
70
+ docker run --rm kaseki-template:test pi --version
71
+ docker run --rm kaseki-template:test npm --version
72
+ ```
73
+
74
+ **Step 3**: Update Pi CLI if needed (see section below)
75
+
76
+ **Step 4**: Run full integration tests
77
+ ```bash
78
+ bash tests/docker-image.test.sh
79
+ bash tests/smoke.test.sh
80
+ ```
81
+
82
+ **Step 5**: Update CLAUDE.md and version tracking
83
+ ```markdown
84
+ # In CLAUDE.md
85
+ **Node Version**: 22.23.0
86
+ ```
87
+
88
+ ### Breaking Changes in Node Versions
89
+
90
+ **Node 20 → 22**: Check for deprecated features
91
+ - V8 breaking changes (inspect [Node release notes](https://nodejs.org/en/blog))
92
+ - npm behavior differences
93
+ - ESM vs CommonJS compatibility
94
+
95
+ **How to Test**:
96
+ ```bash
97
+ # Test against actual repo that uses Node 22
98
+ REPO_URL=https://github.com/cyanautomation/crudmapper \
99
+ GIT_REF=main \
100
+ ./run-kaseki.sh --doctor
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Pi CLI Version Management
106
+
107
+ ### Current Version
108
+ ```
109
+ Pi CLI: 0.70.2 (as of April 2026)
110
+ Installation: npm install -g @anthropic-ai/cli@0.70.2 (in Dockerfile)
111
+ ```
112
+
113
+ ### Version Compatibility Matrix
114
+
115
+ | Pi CLI Version | Node LTS | Notable Changes |
116
+ |---|---|---|
117
+ | 0.70.2 | 20, 22 | Current; stable |
118
+ | 0.71.0 | 20, 22 | (hypothetical) Added new features |
119
+ | 0.60.x | 18, 20 | Legacy; not recommended |
120
+
121
+ ### Checking for Updates
122
+
123
+ ```bash
124
+ # Check npm registry for latest Pi CLI
125
+ npm view @anthropic-ai/cli versions --json | tail -5
126
+
127
+ # Check release notes
128
+ # https://github.com/anthropics/anthropic-sdk-python/releases
129
+ ```
130
+
131
+ ### Updating Pi CLI
132
+
133
+ **Step 1**: Update Dockerfile
134
+ ```dockerfile
135
+ # Before
136
+ RUN npm install -g @anthropic-ai/cli@0.70.2
137
+
138
+ # After
139
+ RUN npm install -g @anthropic-ai/cli@0.71.0
140
+ ```
141
+
142
+ **Step 2**: Test Pi CLI availability
143
+ ```bash
144
+ docker build -t kaseki-template:test .
145
+ docker run --rm kaseki-template:test pi --version
146
+ # Output: @anthropic-ai/cli/0.71.0
147
+ ```
148
+
149
+ **Step 3**: Test with a real kaseki run (optional, if API key available)
150
+ ```bash
151
+ OPENROUTER_API_KEY=sk-or-... \
152
+ ./run-kaseki.sh kaseki-test-1
153
+ ```
154
+
155
+ **Step 4**: Check compatibility
156
+ - Run validation commands
157
+ - Verify Pi event JSON structure (pi-events.jsonl format)
158
+ - Check for new error messages or behavior changes
159
+
160
+ **Step 5**: Update documentation
161
+ ```markdown
162
+ # In CLAUDE.md
163
+ **Pi CLI Version**: 0.71.0
164
+ ```
165
+
166
+ ### Handling Breaking Changes in Pi CLI
167
+
168
+ If a new Pi CLI version has breaking changes:
169
+
170
+ 1. **Update kaseki scripts** (pi-event-filter.js, pi-summary.json parsing)
171
+ 2. **Test event structure**:
172
+ ```javascript
173
+ // Verify new event format still parses correctly
174
+ const events = JSON.parse(piEventJson);
175
+ expect(events[0]).toHaveProperty('type');
176
+ ```
177
+ 3. **Update tests** to expect new behavior
178
+ 4. **Document in CHANGELOG** if user-facing changes
179
+
180
+ ---
181
+
182
+ ## Multi-Architecture Builds
183
+
184
+ ### Setup: Docker Buildx
185
+
186
+ **Buildx** enables building images for multiple architectures (amd64, arm64, etc.).
187
+
188
+ **Check if buildx is available**:
189
+ ```bash
190
+ docker buildx version
191
+ # Output: github.com/docker/buildx v0.10.4
192
+ ```
193
+
194
+ **If Not Installed**:
195
+ ```bash
196
+ # Install via Docker Desktop (included) or:
197
+ docker run --privileged --rm tonistiigi/binfmt --install all
198
+ ```
199
+
200
+ ### Building Multi-Arch Images
201
+
202
+ **Build and Load to Local Docker** (for testing):
203
+ ```bash
204
+ # Build amd64 only (for local testing)
205
+ docker buildx build \
206
+ --platform linux/amd64 \
207
+ -t kaseki-template:latest \
208
+ --load \
209
+ .
210
+ ```
211
+
212
+ **Build All Architectures** (for publishing):
213
+ ```bash
214
+ # Build amd64 + arm64 (outputs to registry)
215
+ docker buildx build \
216
+ --platform linux/amd64,linux/arm64 \
217
+ -t docker.io/cyanautomation/kaseki-agent:0.1.0 \
218
+ -t docker.io/cyanautomation/kaseki-agent:latest \
219
+ --push \
220
+ .
221
+ ```
222
+
223
+ ### Multi-Arch Troubleshooting
224
+
225
+ **Issue**: Build fails for arm64
226
+
227
+ **Diagnosis**:
228
+ ```bash
229
+ # Check QEMU support
230
+ docker run --rm --privileged tonistiigi/binfmt --status
231
+ # Output: qemu-aarch64-static: SUPPORTED
232
+
233
+ # Rebuild with verbose output
234
+ docker buildx build \
235
+ --platform linux/arm64 \
236
+ -t kaseki-template:test \
237
+ --progress=plain \
238
+ .
239
+ ```
240
+
241
+ **Common Causes**:
242
+ 1. **Invalid base image digest** → Use multi-arch base (node:*-alpine is multi-arch)
243
+ 2. **Architecture-specific dependencies** → Check npm packages for native bindings
244
+ 3. **QEMU timeout** → Increase builder timeout or simplify build steps
245
+
246
+ **Solution Steps**:
247
+ 1. Verify base image supports arm64: `docker pull --platform linux/arm64 node:22.22.2-alpine`
248
+ 2. Check package.json for native modules: `npm ls | grep gyp`
249
+ 3. Rebuild with increased timeout: `--build-arg BUILDKIT_PROGRESS=plain`
250
+
251
+ ---
252
+
253
+ ## Dockerfile Structure
254
+
255
+ ### Multi-Stage Build
256
+
257
+ ```dockerfile
258
+ # Stage 1: Builder (installs Pi CLI, dependencies)
259
+ FROM node:22.22.2-alpine AS builder
260
+
261
+ WORKDIR /build
262
+ RUN npm install -g @anthropic-ai/cli@0.70.2
263
+
264
+ # Stage 2: Runtime (minimal, copies Pi CLI from builder)
265
+ FROM node:22.22.2-alpine
266
+
267
+ RUN addgroup -g 10001 kaseki && \
268
+ adduser -D -u 10001 -G kaseki kaseki
269
+
270
+ WORKDIR /app
271
+
272
+ # Copy Pi CLI from builder
273
+ COPY --from=builder /usr/local/lib/node_modules /usr/local/lib/node_modules
274
+ COPY --from=builder /usr/local/bin/pi /usr/local/bin/pi
275
+
276
+ # Copy scripts
277
+ COPY kaseki-agent.sh /app/
278
+ COPY pi-event-filter.js /app/
279
+ COPY kaseki-report.js /app/
280
+
281
+ RUN chmod +x /app/kaseki-agent.sh
282
+
283
+ USER kaseki:kaseki
284
+
285
+ ENTRYPOINT ["/app/kaseki-agent.sh"]
286
+ ```
287
+
288
+ **Why Multi-Stage?**
289
+ - **Smaller final image**: Builder dependencies (git, build tools) aren't in runtime layer
290
+ - **Faster rebuilds**: Only rebuild what changed (cache layers)
291
+ - **Security**: Runtime doesn't include build tools
292
+
293
+ ### Cache Layers
294
+
295
+ Dockerfile layers are cached independently. Order matters:
296
+
297
+ ```dockerfile
298
+ # Good: Stable layers first, mutable layers last
299
+ FROM node:22.22.2-alpine # Cache hit (stable)
300
+ RUN npm install -g @anthropic-ai/cli # Cache hit (stable)
301
+ COPY kaseki-agent.sh /app/ # Cache miss (depends on file content)
302
+ COPY pi-event-filter.js /app/ # Cache miss
303
+ ```
304
+
305
+ **Cache Busting**:
306
+ If you need to force a rebuild (e.g., security patch in base image), add a label:
307
+
308
+ ```dockerfile
309
+ LABEL version="1" rebuild_date="2026-04-25"
310
+ # Increment 'version' or update date to bust cache
311
+ ```
312
+
313
+ ### Smoke Tests in Dockerfile
314
+
315
+ You can add smoke tests to the build to catch issues early:
316
+
317
+ ```dockerfile
318
+ # Add after installing Pi CLI
319
+ RUN pi --version || exit 1
320
+ RUN npm --version || exit 1
321
+
322
+ # Verify non-root user
323
+ RUN test "$(id -u)" = "10001" || exit 1
324
+ ```
325
+
326
+ ---
327
+
328
+ ## Publishing Images
329
+
330
+ ### Version Tagging Strategy
331
+
332
+ | Tag | Purpose | When |
333
+ |---|---|---|
334
+ | `0.1.0` | Semantic version | Release with version bump |
335
+ | `0.1` | Minor version | Latest 0.1.x release |
336
+ | `latest` | Current stable | Every release |
337
+ | `edge` (optional) | Development | On main branch push |
338
+
339
+ ### GitHub Actions Workflow
340
+
341
+ ```yaml
342
+ name: Publish Docker Image
343
+
344
+ on:
345
+ push:
346
+ tags:
347
+ - 'v*' # v0.1.0, v0.2.0, etc.
348
+
349
+ jobs:
350
+ publish:
351
+ runs-on: ubuntu-latest
352
+ steps:
353
+ - uses: actions/checkout@v3
354
+
355
+ - uses: docker/setup-buildx-action@v2
356
+
357
+ - uses: docker/login-action@v2
358
+ with:
359
+ username: ${{ secrets.DOCKER_USERNAME }}
360
+ password: ${{ secrets.DOCKER_PASSWORD }}
361
+
362
+ - uses: docker/build-push-action@v4
363
+ with:
364
+ context: .
365
+ push: true
366
+ tags: |
367
+ docker.io/cyanautomation/kaseki-agent:${{ github.ref_name }}
368
+ docker.io/cyanautomation/kaseki-agent:latest
369
+ platforms: linux/amd64,linux/arm64
370
+ ```
371
+
372
+ ### Manual Publishing
373
+
374
+ ```bash
375
+ # Build and push
376
+ docker buildx build \
377
+ --platform linux/amd64,linux/arm64 \
378
+ -t docker.io/cyanautomation/kaseki-agent:0.1.1 \
379
+ -t docker.io/cyanautomation/kaseki-agent:latest \
380
+ --push \
381
+ .
382
+
383
+ # Verify on registry
384
+ docker pull docker.io/cyanautomation/kaseki-agent:0.1.1
385
+ docker inspect docker.io/cyanautomation/kaseki-agent:0.1.1 | jq '.[0].Architecture'
386
+ ```
387
+
388
+ ---
389
+
390
+ ## Smoke Tests
391
+
392
+ ### Image Validation Tests
393
+
394
+ **Test: Pi CLI is available**
395
+ ```bash
396
+ docker run --rm kaseki-template:latest pi --version
397
+ ```
398
+
399
+ **Test: Metadata structure is correct**
400
+ ```bash
401
+ docker run --rm kaseki-template:latest bash -c '
402
+ [[ -f /opt/kaseki/workspace-cache/package.json ]] || exit 1
403
+ '
404
+ ```
405
+
406
+ **Test: Non-root user**
407
+ ```bash
408
+ docker run --rm kaseki-template:latest id -u | grep -q 10001
409
+ ```
410
+
411
+ **Test: Read-only root filesystem**
412
+ ```bash
413
+ docker run --rm --read-only kaseki-template:latest touch /test.txt 2>&1 | grep -q "Read-only"
414
+ ```
415
+
416
+ ### Running All Smoke Tests
417
+
418
+ ```bash
419
+ #!/bin/bash
420
+ # tests/smoke.test.sh
421
+
422
+ set -e
423
+
424
+ IMAGE="kaseki-template:latest"
425
+
426
+ echo "Building image..."
427
+ docker build -t $IMAGE .
428
+
429
+ echo "Running smoke tests..."
430
+
431
+ echo "✓ Pi CLI available"
432
+ docker run --rm $IMAGE pi --version
433
+
434
+ echo "✓ Non-root user (UID 10001)"
435
+ docker run --rm $IMAGE id -u | grep -q 10001
436
+
437
+ echo "✓ npm available"
438
+ docker run --rm $IMAGE npm --version
439
+
440
+ echo "✓ Node version correct"
441
+ docker run --rm $IMAGE node --version | grep -q "v22"
442
+
443
+ echo "✓ All smoke tests passed"
444
+ ```
445
+
446
+ ---
447
+
448
+ ## Dependency Caching Strategy
449
+
450
+ The Dockerfile includes an image seed cache for npm dependencies:
451
+
452
+ ```dockerfile
453
+ # Pre-populate cache for faster builds
454
+ COPY docker/workspace-cache/package.json /opt/kaseki/workspace-cache/
455
+ RUN cd /opt/kaseki/workspace-cache && npm ci
456
+ ```
457
+
458
+ This cache is restored during `kaseki-agent.sh` execution if lock hashes match:
459
+
460
+ ```bash
461
+ # In kaseki-agent.sh
462
+ if [[ -d /opt/kaseki/workspace-cache ]]; then
463
+ cp -r /opt/kaseki/workspace-cache "$WORKSPACE_CACHE_PATH"
464
+ fi
465
+ ```
466
+
467
+ **Update the Seed Cache**:
468
+ When dependencies change frequently, update the seed:
469
+
470
+ ```bash
471
+ # Refresh docker/workspace-cache/package-lock.json
472
+ cd docker/workspace-cache
473
+ npm update # Or point to specific repos
474
+ npm ci
475
+ cd ../..
476
+
477
+ # Rebuild image
478
+ docker build -t kaseki-template:latest .
479
+ ```
480
+
481
+ See [Dependency Cache Optimization](dependency-cache-optimization.md) for detailed strategy.
482
+
483
+ ---
484
+
485
+ ## Performance Optimization
486
+
487
+ ### Layer Caching
488
+
489
+ To speed up builds, order Dockerfile commands by change frequency:
490
+
491
+ ```dockerfile
492
+ # Lowest change frequency (stable, cache-friendly)
493
+ FROM node:22.22.2-alpine
494
+ RUN apk add --no-cache git openssh-client # System deps
495
+ RUN npm install -g @anthropic-ai/cli@0.70.2 # Global tools
496
+
497
+ # Medium change frequency
498
+ COPY docker/workspace-cache/ /opt/kaseki/workspace-cache/
499
+ RUN cd /opt/kaseki/workspace-cache && npm ci
500
+
501
+ # Highest change frequency (changes on every push, less cacheable)
502
+ COPY kaseki-agent.sh /app/
503
+ COPY pi-event-filter.js /app/
504
+ COPY kaseki-report.js /app/
505
+ ```
506
+
507
+ ### Build Size Optimization
508
+
509
+ Keep final image small:
510
+
511
+ ```bash
512
+ # Check image size
513
+ docker image inspect kaseki-template:latest | jq '.[] | .Size'
514
+ # Output: 543210000 (≈500 MB is reasonable)
515
+
516
+ # Identify large layers
517
+ docker history kaseki-template:latest
518
+ ```
519
+
520
+ **Common Optimizations**:
521
+ 1. Use alpine base image (≈150 MB vs. debian ≈1 GB)
522
+ 2. Remove build tools from final stage (multi-stage build)
523
+ 3. Combine RUN commands to reduce layers: `RUN apk add X && npm install Y`
524
+
525
+ ---
526
+
527
+ ## Related Skills & Docs
528
+
529
+ - [Test Automation](test-automation.md) — Integration tests for image validation
530
+ - [Dependency Cache Optimization](dependency-cache-optimization.md) — Image seed cache strategy
531
+ - [Dockerfile](../../Dockerfile) — Current Dockerfile source
532
+ - [CLAUDE.md](../../CLAUDE.md) — Architecture and version reference