@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,526 @@
1
+ ---
2
+ name: dependency-cache-optimization
3
+ description: Understanding and optimizing the 4-layer npm dependency caching strategy
4
+ tags: [kaseki, caching, performance, npm, optimization]
5
+ relatedSkills: [docker-image-management, workflow-diagnosis]
6
+ ---
7
+
8
+ # Dependency Cache Optimization for Kaseki Agent
9
+
10
+ This skill guides understanding and optimizing kaseki-agent's 4-layer npm dependency caching strategy for faster builds and reduced network I/O.
11
+
12
+ ## Overview
13
+
14
+ **When to Use**:
15
+ - Diagnosing slow `npm ci` runs
16
+ - Understanding cache hits vs. misses
17
+ - Optimizing cache layer strategy
18
+ - Tuning image builds
19
+ - Improving kaseki run performance
20
+
21
+ **Key Concepts**:
22
+ - Kaseki uses a 4-layer cache to avoid redundant `npm ci` runs
23
+ - Cache layers: stamp check → workspace cache → image seed cache → fresh install
24
+ - Stamp files encode repository and lock file hashes
25
+ - Cache invalidation happens when lock files change
26
+
27
+ ---
28
+
29
+ ## The 4-Layer Cache Strategy
30
+
31
+ ### Architecture Diagram
32
+
33
+ ```
34
+ Kaseki Instance Run
35
+
36
+ ├─ Layer 1: Stamp Check
37
+ │ └─ Does node_modules + stamp match? → Skip (fast path)
38
+
39
+ ├─ Layer 2: Workspace Cache
40
+ │ └─ Previous run's cache for this repo+lock? → Restore
41
+
42
+ ├─ Layer 3: Image Seed Cache
43
+ │ └─ Pre-built cache in Docker image? → Restore
44
+
45
+ └─ Layer 4: Fresh Install
46
+ └─ npm ci --prefer-offline (download if needed)
47
+ ```
48
+
49
+ ### Layer 1: Stamp Check (Fastest)
50
+
51
+ **Purpose**: Quick validation that node_modules is already correct
52
+
53
+ **Stamp File Location**: `/workspace/.kaseki-cache/<repo-hash>.<lock-hash>.stamp`
54
+
55
+ **Format**:
56
+ ```
57
+ repo:<repo-hash> lock:<lock-hash> timestamp:<unix-time>
58
+ ```
59
+
60
+ **Computation**:
61
+ - `<repo-hash>`: SHA-1 of repo directory name (or GitHub owner/repo)
62
+ - `<lock-hash>`: SHA-1 of package-lock.json content
63
+
64
+ **Speed**: Microseconds (file comparison)
65
+
66
+ **When Stamp Matches**:
67
+ ```bash
68
+ # Stamp file exists and matches current repo + lock
69
+ # → node_modules is already correct
70
+ # → Skip all install steps
71
+ # Result: 0 seconds saved!
72
+ ```
73
+
74
+ **When Stamp Doesn't Match**:
75
+ ```bash
76
+ # Stamp file missing or hashes differ
77
+ # → Try Layer 2 (workspace cache)
78
+ ```
79
+
80
+ ### Layer 2: Workspace Cache (Fast)
81
+
82
+ **Purpose**: Reuse cached node_modules from a previous kaseki run
83
+
84
+ **Cache Location**: `/workspace/.kaseki-cache/<repo-hash>/<lock-hash>/node_modules/`
85
+
86
+ **Speed**: Seconds (copy operation)
87
+
88
+ **When Cache Exists**:
89
+ ```bash
90
+ # Found cached node_modules for this repo + lock combo
91
+ # → Copy from .kaseki-cache to ./node_modules
92
+ # → Create new stamp file
93
+ # Result: 5–30 seconds (vs. 1–3 minutes for fresh install)
94
+ ```
95
+
96
+ **When Cache Doesn't Exist**:
97
+ ```bash
98
+ # No previous run cached this repo+lock combo
99
+ # → Try Layer 3 (image seed cache)
100
+ ```
101
+
102
+ ### Layer 3: Image Seed Cache (Medium)
103
+
104
+ **Purpose**: Use pre-built cache in the Docker image for common repos
105
+
106
+ **Cache Location (in image)**: `/opt/kaseki/workspace-cache/`
107
+
108
+ **Contents**:
109
+ - `package.json` — Sample dependencies
110
+ - `node_modules/` — Pre-installed modules
111
+ - Package cache (npm's internal cache)
112
+
113
+ **Speed**: 30 seconds (copy + verification)
114
+
115
+ **When Cache Matches Target Lock**:
116
+ ```bash
117
+ # Image seed cache exists and matches target lock file
118
+ # → Copy from /opt/kaseki/workspace-cache to ./node_modules
119
+ # → Create stamp file
120
+ # Result: 10–60 seconds (vs. 1–3 minutes)
121
+ ```
122
+
123
+ **When Cache Doesn't Match**:
124
+ ```bash
125
+ # Lock hashes differ or seed cache doesn't exist
126
+ # → Fall through to Layer 4 (fresh install)
127
+ ```
128
+
129
+ ### Layer 4: Fresh Install (Slowest)
130
+
131
+ **Purpose**: Install dependencies from scratch (npm registry or offline cache)
132
+
133
+ **Speed**: 1–3 minutes (network I/O + compilation)
134
+
135
+ **Command**:
136
+ ```bash
137
+ npm ci --prefer-offline
138
+ ```
139
+
140
+ **Fallback**: If `--prefer-offline` can't find packages, npm downloads from registry.
141
+
142
+ ---
143
+
144
+ ## Cache Invalidation & Busting
145
+
146
+ ### When Does Cache Invalidate?
147
+
148
+ | Trigger | Impact | Example |
149
+ |---|---|---|
150
+ | **Lock file changed** | All layers reset | Upgrading a dependency |
151
+ | **New repo** | Layers 2–3 miss | First run against new repo |
152
+ | **Image rebuilt** | Layer 3 reset | New Dockerfile, new base image |
153
+ | **Manual deletion** | Layers 2–3 reset | `rm -rf .kaseki-cache` |
154
+
155
+ ### Detecting Cache Misses
156
+
157
+ ```bash
158
+ # Check validation timings
159
+ cat /agents/kaseki-results/kaseki-N/validation-timings.tsv
160
+ # Output:
161
+ # command duration_seconds
162
+ # npm ci 180 ← 3 minutes = cache miss (Layer 4)
163
+
164
+ # Expected baseline:
165
+ # npm ci (cache hit) : 5–30 seconds (Layer 2)
166
+ # npm ci (seed hit) : 30–60 seconds (Layer 3)
167
+ # npm ci (fresh) : 1–3 minutes (Layer 4)
168
+ ```
169
+
170
+ **Analysis**:
171
+ ```bash
172
+ # Was Layer 1 (stamp check) attempted?
173
+ grep -i "stamp\|cache hit" /agents/kaseki-results/kaseki-N/stdout.log
174
+
175
+ # If missing, check if lock file changed
176
+ git diff package-lock.json
177
+ ```
178
+
179
+ ### Manual Cache Busting
180
+
181
+ ```bash
182
+ # Clear workspace cache (Layers 1–2)
183
+ rm -rf /workspace/.kaseki-cache
184
+
185
+ # Clear image seed cache (rebuild Docker image)
186
+ docker build --no-cache -t kaseki-template:latest .
187
+
188
+ # Next run will fall through to Layer 4 (fresh install)
189
+ ```
190
+
191
+ ---
192
+
193
+ ## Stamp File Details
194
+
195
+ ### Stamp File Naming
196
+
197
+ ```
198
+ .kaseki-cache/<repo-hash>.<lock-hash>.stamp
199
+ ```
200
+
201
+ **Components**:
202
+ - `<repo-hash>`: 40-char SHA-1 hex digest of repo identifier
203
+ - `<lock-hash>`: 40-char SHA-1 hex digest of package-lock.json
204
+
205
+ **Example**:
206
+ ```
207
+ .kaseki-cache/abc1234567890def1234567890abcdef12345678.fed0987654321abc0987654321fedcba98765432.stamp
208
+ ```
209
+
210
+ ### Stamp File Content
211
+
212
+ ```
213
+ repo:abc1234567890def1234567890abcdef12345678 lock:fed0987654321abc0987654321fedcba98765432 timestamp:1703520600
214
+ ```
215
+
216
+ ### Computing Hash Examples
217
+
218
+ **Repo Hash** (from repo name):
219
+ ```bash
220
+ echo -n "cyanautomation/crudmapper" | sha1sum
221
+ # Output: abc1234567890def1234567890abcdef12345678
222
+
223
+ # Or from directory name:
224
+ echo -n "kaseki-runs/kaseki-1/crudmapper" | sha1sum
225
+ ```
226
+
227
+ **Lock Hash** (from package-lock.json):
228
+ ```bash
229
+ sha1sum package-lock.json | awk '{print $1}'
230
+ # Output: fed0987654321abc0987654321fedcba98765432
231
+ ```
232
+
233
+ ### Stamp Check Script
234
+
235
+ In `kaseki-agent.sh`, the stamp check looks like:
236
+
237
+ ```bash
238
+ REPO_HASH=$(echo -n "$REPO_URL" | sha1sum | cut -d' ' -f1)
239
+ LOCK_HASH=$(sha1sum package-lock.json | cut -d' ' -f1)
240
+ STAMP_FILE="/workspace/.kaseki-cache/${REPO_HASH}.${LOCK_HASH}.stamp"
241
+
242
+ if [[ -f "$STAMP_FILE" ]]; then
243
+ echo "Stamp check passed: cache is valid"
244
+ exit 0 # Skip npm install
245
+ fi
246
+ ```
247
+
248
+ ---
249
+
250
+ ## Cache Directory Structure
251
+
252
+ ### Workspace Cache Layout
253
+
254
+ ```
255
+ /workspace/
256
+ ├── .kaseki-cache/
257
+ │ ├── repo-hash-1.lock-hash-1.stamp
258
+ │ ├── repo-hash-1/
259
+ │ │ ├── lock-hash-1/
260
+ │ │ │ ├── node_modules/
261
+ │ │ │ │ ├── package1/
262
+ │ │ │ │ ├── package2/
263
+ │ │ │ └── ...
264
+ │ │ └── lock-hash-2/
265
+ │ │ └── node_modules/
266
+ │ └── repo-hash-2/
267
+ │ └── ...
268
+ ```
269
+
270
+ **Purpose**: Multiple locks per repo, multiple repos per workspace
271
+
272
+ **Retention**: Deleted after kaseki instance completes (unless `KASEKI_KEEP_WORKSPACE=1`)
273
+
274
+ ### Image Seed Cache Layout
275
+
276
+ ```
277
+ /opt/kaseki/workspace-cache/
278
+ ├── package.json
279
+ ├── package-lock.json
280
+ └── node_modules/
281
+ ├── package1/
282
+ ├── package2/
283
+ └── ... (common packages)
284
+ ```
285
+
286
+ **Populated During Image Build**:
287
+ ```dockerfile
288
+ COPY docker/workspace-cache/ /opt/kaseki/workspace-cache/
289
+ RUN cd /opt/kaseki/workspace-cache && npm ci
290
+ ```
291
+
292
+ **Updated**:
293
+ ```bash
294
+ # Refresh seed cache (in this repo)
295
+ cd docker/workspace-cache
296
+ npm update # or npm install <packages>
297
+ npm ci
298
+ cd ../..
299
+
300
+ # Rebuild image
301
+ docker build -t kaseki-template:latest .
302
+ ```
303
+
304
+ ---
305
+
306
+ ## Performance Analysis & Tuning
307
+
308
+ ### Baseline Metrics
309
+
310
+ **Cache Layers** (typical timing):
311
+
312
+ | Scenario | Duration | Bottleneck |
313
+ |---|---|---|
314
+ | Layer 1 hit (stamp match) | <1 sec | File check only |
315
+ | Layer 2 hit (workspace) | 5–30 sec | Copy + verify |
316
+ | Layer 3 hit (seed) | 30–60 sec | Copy + npm resolve |
317
+ | Layer 4 (fresh) | 1–3 min | Network I/O + compile |
318
+
319
+ **Optimization Target**: Aim for Layer 2 most runs (workspace cache hits)
320
+
321
+ ### Diagnosing Slow Installs
322
+
323
+ **Check Actual Duration**:
324
+ ```bash
325
+ cat /agents/kaseki-results/kaseki-N/validation-timings.tsv | grep npm
326
+
327
+ # Output:
328
+ # npm ci 180 ← 3 minutes = problem!
329
+ ```
330
+
331
+ **Step 1: Check If Stamp Hit**
332
+ ```bash
333
+ grep -i "stamp\|cache" /agents/kaseki-results/kaseki-N/stdout.log
334
+ # Look for: "Stamp check passed" or "Cache hit"
335
+ ```
336
+
337
+ **Step 2: Check If Lock File Changed**
338
+ ```bash
339
+ cat /agents/kaseki-results/kaseki-N/git.diff | grep package-lock.json
340
+ # If output exists, lock file was modified → cache invalidated
341
+ ```
342
+
343
+ **Step 3: Check Image Seed Cache**
344
+ ```bash
345
+ # Was seed cache used?
346
+ grep -i "seed\|image cache" /agents/kaseki-results/kaseki-N/stdout.log
347
+ ```
348
+
349
+ **Step 4: Analyze npm Behavior**
350
+ ```bash
351
+ # Check npm install log for network delays
352
+ grep -i "downloading\|get\|registry" /agents/kaseki-results/kaseki-N/stdout.log
353
+
354
+ # If many "downloading", network was bottleneck
355
+ # If few, compilation was bottleneck
356
+ ```
357
+
358
+ ### Optimization Strategies
359
+
360
+ **Strategy 1: Maximize Stamp Hits** (Best)
361
+ - Minimize lock file changes
362
+ - When updating dependencies, commit lock file changes and wait for workspace cache to populate
363
+ - Result: <1 second installs
364
+
365
+ **Strategy 2: Maximize Workspace Cache Hits** (Good)
366
+ - Run frequent kaseki jobs against same repos
367
+ - Cache persists across runs (if not deleted)
368
+ - Result: 5–30 second installs
369
+
370
+ **Strategy 3: Optimize Image Seed Cache** (Medium)
371
+ - Pre-populate with commonly-needed packages
372
+ - Update dockerfile/workspace-cache/ monthly
373
+ - Result: 30–60 second installs
374
+
375
+ **Strategy 4: Accept Fresh Installs** (Fallback)
376
+ - Use `npm ci --prefer-offline` to reduce network I/O
377
+ - Consider upgrading base image npm version (faster resolution)
378
+ - Result: 1–3 minute installs
379
+
380
+ ### Example Optimization
381
+
382
+ **Scenario**: npm ci is taking 3 minutes every run
383
+
384
+ **Diagnosis**:
385
+ ```bash
386
+ # Check timings across recent runs
387
+ for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
388
+ echo "=== $(basename $run) ==="
389
+ grep npm "$run/validation-timings.tsv" | awk '{print $2}'
390
+ done
391
+ # All show 180 seconds → consistent problem
392
+ ```
393
+
394
+ **Analysis**:
395
+ ```bash
396
+ # Check if lock file is changing
397
+ for run in /agents/kaseki-results/kaseki-{1,2,3}/; do
398
+ grep package-lock.json "$run/git.diff" | head -1
399
+ done
400
+ # All show lock changes → root cause found
401
+ ```
402
+
403
+ **Solution**:
404
+ ```bash
405
+ # Option 1: Commit lock changes to main branch
406
+ git checkout main
407
+ npm install # Update lock
408
+ git add package-lock.json
409
+ git commit -m "chore: update dependencies"
410
+ git push origin main
411
+
412
+ # Option 2: Seed the image cache with current lock
413
+ cp package-lock.json docker/workspace-cache/
414
+ cd docker/workspace-cache
415
+ npm ci
416
+ cd ../..
417
+
418
+ docker build -t kaseki-template:latest .
419
+
420
+ # Next runs will hit Layer 3 (60 seconds instead of 180)
421
+ ```
422
+
423
+ ---
424
+
425
+ ## Cache Persistence & Cleanup
426
+
427
+ ### Docker Container Cleanup
428
+
429
+ By default, kaseki containers are ephemeral:
430
+
431
+ ```bash
432
+ # Workspace is deleted after run
433
+ /workspace/.kaseki-cache/
434
+ ```
435
+
436
+ **Keep Workspace for Debugging**:
437
+ ```bash
438
+ KASEKI_KEEP_WORKSPACE=1 ./run-kaseki.sh
439
+ # Workspace retained at /agents/kaseki-runs/kaseki-N/
440
+ ```
441
+
442
+ ### Manual Cache Management
443
+
444
+ ```bash
445
+ # Clear all workspace caches
446
+ rm -rf /agents/kaseki-cache/*
447
+
448
+ # Clear specific repo cache
449
+ rm -rf /agents/kaseki-cache/repo-abc123/*
450
+
451
+ # Inspect cache size
452
+ du -sh /agents/kaseki-cache/
453
+ ```
454
+
455
+ ### Image Cache Cleanup
456
+
457
+ ```bash
458
+ # Rebuild image (clears old layers)
459
+ docker build -t kaseki-template:latest .
460
+
461
+ # Or force rebuild with no cache
462
+ docker build --no-cache -t kaseki-template:latest .
463
+
464
+ # Prune unused Docker layers
465
+ docker system prune --all
466
+ ```
467
+
468
+ ---
469
+
470
+ ## Advanced: Custom Cache Seeding
471
+
472
+ ### Pre-Populate Image Seed Cache
473
+
474
+ If you frequently run kaseki against a specific repo:
475
+
476
+ **Step 1**: Clone the target repo and install
477
+ ```bash
478
+ cd docker/workspace-cache
479
+ git clone https://github.com/org/target-repo .tmp/target
480
+ cp .tmp/target/package.json .
481
+ cp .tmp/target/package-lock.json .
482
+ npm ci
483
+ rm -rf .tmp
484
+ ```
485
+
486
+ **Step 2**: Rebuild image
487
+ ```bash
488
+ docker build -t kaseki-template:latest .
489
+ ```
490
+
491
+ **Step 3**: Verify seed cache
492
+ ```bash
493
+ docker run --rm kaseki-template:latest ls /opt/kaseki/workspace-cache/node_modules | head -10
494
+ ```
495
+
496
+ **Result**: First runs against target-repo will hit Layer 3, reducing install time to 30–60 seconds
497
+
498
+ ### Monitoring Cache Effectiveness
499
+
500
+ ```bash
501
+ # Track cache hits across runs
502
+ for run in /agents/kaseki-results/kaseki-*/; do
503
+ duration=$(grep npm "$run/validation-timings.tsv" | awk '{print $2}')
504
+ echo "$(basename $run): ${duration}s"
505
+ done
506
+
507
+ # Calculate average
508
+ for run in /agents/kaseki-results/kaseki-*/; do
509
+ grep npm "$run/validation-timings.tsv" | awk '{print $2}'
510
+ done | awk '{sum+=$1; count++} END {print "Average: " sum/count "s"}'
511
+ ```
512
+
513
+ **Interpretation**:
514
+ - Average < 10 sec: Excellent (Layer 1 hits)
515
+ - Average 10–30 sec: Good (Layer 2 hits)
516
+ - Average 30–60 sec: Fair (Layer 3 hits)
517
+ - Average > 60 sec: Poor (Layer 4 misses)
518
+
519
+ ---
520
+
521
+ ## Related Skills & Docs
522
+
523
+ - [Docker Image Management](docker-image-management.md) — Image seed cache updates
524
+ - [Workflow Diagnosis](workflow-diagnosis.md) — Analyzing timings and performance
525
+ - [kaseki-agent.sh](../../kaseki-agent.sh) — Cache implementation details
526
+ - [CLAUDE.md](../../CLAUDE.md) — Architecture and environment variables