@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,19 @@
1
+ # Backlog
2
+
3
+ ## TypeScript debt burn-down to restore full blocking type-check
4
+
5
+ - **Status:** Open
6
+ - **Owner:** Engineering
7
+ - **Created:** 2026-05-02
8
+ - **Goal:** Reduce and eliminate full-project TypeScript errors so `npm run type-check:full` can be promoted from informational to required CI gating.
9
+
10
+ ### Acceptance criteria
11
+
12
+ 1. `npm run type-check:full` passes on `main` with zero TypeScript errors.
13
+ 2. CI updates `type-check:full` from non-blocking informational to blocking for pull requests.
14
+ 3. Any temporary suppressions added during burn-down are removed or documented with owner + expiry.
15
+
16
+ ### Notes
17
+
18
+ - Pull request gating currently uses `npm run type-check:changed`.
19
+ - Full-project type-check is still executed and reported as an artifact to measure baseline progress.
@@ -0,0 +1,404 @@
1
+ # Docker Build Strategy for Kaseki Agent
2
+
3
+ ## Overview
4
+
5
+ This document describes the Docker image build architecture for `kaseki-agent`, including the multi-stage build strategy, caching optimization, security hardening, and CI/CD pipeline design.
6
+
7
+ **Current Status**: Node v24, bookworm-slim, optimized multi-stage build with consolidated RUN layers.
8
+
9
+ ---
10
+
11
+ ## Multi-Stage Build Architecture
12
+
13
+ The Dockerfile uses a **two-stage build** pattern to optimize image size and build caching:
14
+
15
+ ### Stage 1: `deps` (Dependencies)
16
+
17
+ - **Base**: `node:24-bookworm-slim`
18
+ - **Purpose**: Build Pi CLI agent and prepare workspace cache seed
19
+ - **Artifacts**:
20
+ - Global Pi CLI installation (`@earendil-works/pi-coding-agent@0.74.0`)
21
+ - Pre-built Node modules cache seed
22
+ - **Why separate**: Enables aggressive caching; these dependencies rarely change
23
+
24
+ ### Stage 2: `runtime` (Application)
25
+
26
+ - **Base**: `node:24-bookworm-slim` (fresh base)
27
+ - **Purpose**: Build and package kaseki-agent application
28
+ - **Artifacts**:
29
+ - Compiled TypeScript (dist/)
30
+ - Installed binaries (/usr/local/bin/)
31
+ - Entrypoint script
32
+ - **Why separate**: Isolates application code changes from dependency changes; allows deps stage to be cached independently
33
+
34
+ ### Layer Consolidation
35
+
36
+ **Multiple RUN statements consolidated into fewer layers**:
37
+
38
+ - Deps setup: 5 RUN → 2 RUN (apt install + user setup in one layer)
39
+ - Runtime setup: 4 RUN → 1 RUN (all binary installation/chmod in single layer)
40
+ - **Benefit**: Reduces Docker layer count from 25+ to 19; faster build times and smaller final image
41
+
42
+ ---
43
+
44
+ ## Caching Strategy
45
+
46
+ ### GitHub Actions Cache
47
+
48
+ **Current Configuration**:
49
+
50
+ ```yaml
51
+ cache-from: type=gha,scope=${{ github.ref_name }}
52
+ cache-to: type=gha,scope=${{ github.ref_name }},mode=max
53
+ provenance: true
54
+ sbom: true
55
+ ```
56
+
57
+ **How it works**:
58
+
59
+ 1. Each branch maintains its own cache scope (e.g., `main`, `feature/branch`)
60
+ 2. Buildx stores layer cache in GitHub Actions cache storage (~10GB per repo)
61
+ 3. Subsequent builds on the same branch reuse layers (80-90% cache hit expected)
62
+ 4. Provenance and SBOM are generated for supply chain visibility
63
+
64
+ ### Expected Cache Hit Rates
65
+
66
+ | Scenario | Hit Rate | Why |
67
+ |----------|----------|-----|
68
+ | Same commit (rebuild) | ~100% | Identical layers |
69
+ | Same branch (new commit) | 80-90% | Most deps unchanged |
70
+ | Different branch (same base) | 40-50% | Shared base image layers, but branch-specific code |
71
+ | After base image update | <10% | Base image invalidates all downstream layers |
72
+
73
+ ### Cache Invalidation Triggers
74
+
75
+ Cache is automatically invalidated when:
76
+
77
+ 1. **Node base image changes** (monthly security updates planned)
78
+ 2. **package-lock.json changes** (npm install layer)
79
+ 3. **src/** changes (TypeScript compilation layer)
80
+ 4. **GitHub branch is different** (cache scoped by branch)
81
+
82
+ ### Cache Performance Baseline (May 2026)
83
+
84
+ From local testing with docker build:
85
+
86
+ - **Cold build** (no cache): ~30-35 seconds
87
+ - Base image pull + layer extraction: ~5-10s
88
+ - npm ci + npm run build: ~12-15s
89
+ - Binary installation: ~2-3s
90
+ - **Warm build** (cached layers): ~5-8 seconds
91
+ - Cache hit on all deps/node_modules layers
92
+ - Only TypeScript recompile if src/ changed
93
+
94
+ ---
95
+
96
+ ## Security Hardening
97
+
98
+ ### Container Runtime Security
99
+
100
+ **Read-only filesystem**:
101
+
102
+ ```bash
103
+ docker run --read-only --tmpfs /tmp:rw,nosuid,nodev,size=256m ...
104
+ ```
105
+
106
+ - Application cannot modify container filesystem
107
+ - Only /tmp is writable (limited to 256MB, with security restrictions)
108
+
109
+ **Capability dropping**:
110
+
111
+ ```bash
112
+ --cap-drop ALL
113
+ ```
114
+
115
+ - Removes all Linux capabilities (no network, process, filesystem privileges)
116
+ - Kaseki agent runs with minimal privilege surface
117
+
118
+ **Non-root user**:
119
+
120
+ ```dockerfile
121
+ USER kaseki # UID 10001
122
+ ```
123
+
124
+ - Application runs as unprivileged user (not root)
125
+ - Prevents privilege escalation if exploit occurs
126
+
127
+ ### Base Image Security
128
+
129
+ **Node.js base image** (`node:24-bookworm-slim`):
130
+
131
+ - Regular security updates (monthly planned)
132
+ - Debian bookworm-slim: minimal base (excludes build tools, docs)
133
+ - See [SECURITY.md](../SECURITY.md) for vulnerability response procedures
134
+
135
+ **Pi CLI Agent Security**:
136
+
137
+ - Pinned to specific version (0.70.2) to ensure reproducible builds
138
+ - Pre-installed globally in deps stage (immutable in runtime stage)
139
+ - Telemetry disabled (`PI_TELEMETRY=0`)
140
+
141
+ ---
142
+
143
+ ## Build Performance Optimization
144
+
145
+ ### Dockerfile Optimization Checklist
146
+
147
+ ✅ **Consolidated RUN commands**: Multiple apt/user/chmod operations merged into single layers
148
+ ✅ **Optimal COPY placement**: Source files copied last (after dependencies) to maximize cache hits
149
+ ✅ **Minimal build context**: `.dockerignore` uses allowlist approach (only explicit files included)
150
+ ✅ **Dependency caching**: Pi CLI and npm modules pre-cached in deps stage
151
+
152
+ ### Workspace Dependency Cache
153
+
154
+ A separate cache seeding mechanism (`docker/workspace-cache/`) pre-builds node_modules for fast runtime:
155
+
156
+ - Kaski container instances use cached dependencies to avoid repeated npm install
157
+ - See [DEVELOPMENT.md](DEVELOPMENT.md) for kaseki-agent.sh dependency caching strategy
158
+ - Expected time savings: 20-30 seconds per kaseki run when cache is warm
159
+
160
+ ### CI/CD Pipeline Optimization (May 2026)
161
+
162
+ **Job Parallelization**:
163
+
164
+ ```
165
+ type_check_changed (blocking)
166
+
167
+ [checks, type_check_full] (parallel, ~2 min savings)
168
+
169
+ build (multi-arch amd64 + arm64)
170
+
171
+ [scan, verify] (parallel)
172
+ ```
173
+
174
+ **Expected workflow duration**:
175
+
176
+ - Before optimization: ~18-22 minutes
177
+ - After optimization: ~15-18 minutes (2-4 min savings)
178
+ - Cache hit reduces build time: -8-10 seconds per amd64 build
179
+
180
+ ---
181
+
182
+ ## Base Image Management
183
+
184
+ ### Node v24 Decision
185
+
186
+ **When updated**: May 2026
187
+ **Why Node v24**:
188
+
189
+ - Stable LTS release with long support window
190
+ - Performance improvements over Node 22
191
+ - Full npm v10+ compatibility
192
+
193
+ ### Monthly Security Review Process
194
+
195
+ 1. **Check Node.js security advisories** (<https://nodejs.org/en/security>)
196
+ 2. **Review base image CVEs** (bookworm-slim, Debian security)
197
+ 3. **Test locally**:
198
+
199
+ ```bash
200
+ docker build -t kaseki-agent:test .
201
+ docker run --rm kaseki-agent:test node --version
202
+ docker run --rm kaseki-agent:test pi --version
203
+ ```
204
+
205
+ 4. **Update Dockerfile** with new pinned base image (if security patches available)
206
+ 5. **Trigger full CI pipeline** (workflow_dispatch)
207
+ 6. **Document in CLAUDE.md** and git commit message
208
+
209
+ ### Node Version Upgrade Path
210
+
211
+ For future Node version upgrades:
212
+
213
+ | From | To | Risk | Action |
214
+ |------|----|----|--------|
215
+ | 24 → 24.x | Low | Patch update; keep same tag | Direct update |
216
+ | 24 → 24.next | Medium | Minor version; test thoroughly | Test locally, then update |
217
+ | 24 → 26 | High | Major version; breaking changes possible | Full regression test suite |
218
+
219
+ ---
220
+
221
+ ## Troubleshooting Build Issues
222
+
223
+ ### Cache Miss on CI/CD
224
+
225
+ **Symptom**: Build takes much longer than expected (~30s instead of ~10s)
226
+
227
+ **Diagnosis**:
228
+
229
+ 1. Check GitHub Actions cache: Settings → Actions → Caches
230
+ 2. Look for scope matching `${{ github.ref_name }}` (e.g., `main`, `feature/xyz`)
231
+
232
+ **Solutions**:
233
+
234
+ - New branch: First build always cold; subsequent builds use cache
235
+ - CI cache eviction: GitHub removes cache after 7 days of no access
236
+ - Large PR: Different base can cause cache misses; merge main first
237
+
238
+ ### Build Failure After Base Image Update
239
+
240
+ **Symptom**: Docker build fails on package installation or system dependency
241
+
242
+ **Diagnosis**:
243
+
244
+ ```bash
245
+ docker build -t kaseki-agent:test . 2>&1 | grep -A5 "E:"
246
+ ```
247
+
248
+ **Solutions**:
249
+
250
+ - Check Dockerfile apt-get line for typos
251
+ - Test locally with new base image before committing
252
+ - Verify bookworm-slim package availability (use `apt-cache search`)
253
+
254
+ ### Multi-arch Build Failure
255
+
256
+ **Symptom**: amd64 builds succeed, but arm64 fails with QEMU error
257
+
258
+ **Diagnosis**:
259
+
260
+ - QEMU emulation issues (rare on GitHub runners)
261
+ - Incompatible binary or architecture-specific code
262
+
263
+ **Solutions**:
264
+
265
+ - Retry workflow (transient QEMU issue)
266
+ - Use `docker run --platform linux/arm64 --rm <image>` to test locally (slow)
267
+ - Fallback to amd64-only builds temporarily
268
+
269
+ ---
270
+
271
+ ## Vulnerability Scanning
272
+
273
+ ### Trivy Scanning Integration
274
+
275
+ **Three-scan strategy**:
276
+
277
+ 1. **HIGH/CRITICAL only** → GitHub Security tab
278
+ - File: `trivy-results.sarif`
279
+ - Frequency: Every build
280
+ - Action: Block merge if HIGH/CRITICAL found
281
+
282
+ 2. **All severities** → Artifact storage
283
+ - File: `trivy-results-all.json`
284
+ - Retention: 30 days
285
+ - Purpose: Audit trail, trend analysis
286
+
287
+ 3. **SBOM generation** → Artifact storage
288
+ - File: `sbom-spdx.json` (SPDX JSON format)
289
+ - Retention: 30 days
290
+ - Purpose: Supply chain compliance, license tracking
291
+
292
+ ### Known Vulnerabilities
293
+
294
+ Check GitHub → Settings → Code security → Dependabot alerts for any discovered CVEs.
295
+
296
+ **Typical sources** (transitive dependencies):
297
+
298
+ - Pi CLI dependencies (usually addressed via version updates)
299
+ - Node.js base image vulnerabilities (patched monthly)
300
+
301
+ **Response procedure**: See [SECURITY.md](../SECURITY.md)
302
+
303
+ ---
304
+
305
+ ## Build Artifacts & Outputs
306
+
307
+ ### What's Inside the Image
308
+
309
+ **Binaries** (in `/usr/local/bin`):
310
+
311
+ - `kaseki-agent` — Main entry point
312
+ - `pi` — Pi CLI coding agent
313
+ - `kaseki-report` — Result analysis tool
314
+ - `kaseki-pi-event-filter` — Event stream processor
315
+ - `kaseki-pi-progress-stream` — Progress tracking
316
+ - `github-app-token` — Token generation utility
317
+
318
+ **Libraries** (in `/app/lib`):
319
+
320
+ - Compiled TypeScript modules from `src/`
321
+ - Pi CLI node_modules (from deps stage)
322
+
323
+ **Working directories**:
324
+
325
+ - `/workspace` — Where kaseki-agent clones target repo
326
+ - `/results` — Where kaseki-agent writes artifacts (mounted at runtime)
327
+ - `/tmp/kaseki-home` — kaseki user home (transient)
328
+ - `/tmp/npm-cache` — npm cache (transient)
329
+
330
+ ### Build Outputs
331
+
332
+ **GitHub Container Registry** (GHCR):
333
+
334
+ ```
335
+ ghcr.io/cyanautomation/kaseki-agent:latest
336
+ ghcr.io/cyanautomation/kaseki-agent:latest-arm64
337
+ ghcr.io/cyanautomation/kaseki-agent:v0.1.0
338
+ ```
339
+
340
+ **Docker Hub**:
341
+
342
+ ```
343
+ cyanautomation/kaseki-agent:latest
344
+ cyanautomation/kaseki-agent:latest-arm64
345
+ cyanautomation/kaseki-agent:v0.1.0
346
+ ```
347
+
348
+ ---
349
+
350
+ ## Development Workflow
351
+
352
+ ### Local Docker Builds
353
+
354
+ ```bash
355
+ # Standard build
356
+ docker build -t kaseki-agent:dev .
357
+
358
+ # No cache (force rebuild)
359
+ docker build --no-cache -t kaseki-agent:dev .
360
+
361
+ # Build specific stage for debugging
362
+ docker build --target deps -t kaseki-agent:deps-debug .
363
+
364
+ # Inspect built image
365
+ docker inspect kaseki-agent:dev
366
+ docker run --rm kaseki-agent:dev node --version
367
+ ```
368
+
369
+ ### Simulating GHA Build Locally
370
+
371
+ ```bash
372
+ # Multi-arch build (requires buildx)
373
+ docker buildx build \
374
+ --platform linux/amd64,linux/arm64 \
375
+ -t kaseki-agent:multiarch .
376
+ ```
377
+
378
+ ---
379
+
380
+ ## References
381
+
382
+ - [CLAUDE.md](../CLAUDE.md) — Project overview and running kaseki-agent
383
+ - [SECURITY.md](../SECURITY.md) — Vulnerability response procedures
384
+ - [.github/skills/docker-image-management/SKILL.md](../.github/skills/docker-image-management/SKILL.md) — When/how to update base image
385
+ - [.github/workflows/build-docker-image.yml](../.github/workflows/build-docker-image.yml) — Full CI/CD pipeline
386
+
387
+ ---
388
+
389
+ ## Maintenance Calendar
390
+
391
+ | Task | Frequency | Owner | Notes |
392
+ |------|-----------|-------|-------|
393
+ | Security review (base image, Pi CLI) | Monthly | Maintainer | Check CVE lists, security advisories |
394
+ | Node version patch update | As needed | Maintainer | Minor version bumps (24.x.x) |
395
+ | Cache performance monitoring | Quarterly | DevOps | Check cache hit rates in GHA |
396
+ | SBOM review & license check | Quarterly | Compliance | Ensure no license violations |
397
+ | Multi-arch build validation | Per release | CI/CD | Verify both amd64 + arm64 work |
398
+
399
+ ---
400
+
401
+ **Last Updated**: May 2026
402
+ **Node Version**: v24
403
+ **Base Image**: node:24-bookworm-slim
404
+ **Build Status**: ✅ Optimized