@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,459 @@
1
+ # Kaseki API Service - Development Guide
2
+
3
+ ## Architecture Overview
4
+
5
+ The Kaseki API Service provides HTTP REST endpoints for remote control of kaseki-agent runs. It wraps existing kaseki-agent infrastructure and adds HTTP layer, job queue management, and result caching.
6
+
7
+ ```
8
+ ┌──────────────────────────┐
9
+ │ External Client (e.g. OpenClaw) │
10
+ └────────────────┬─────────────────────┘
11
+ │ HTTP REST + Bearer Auth
12
+ ┌───────────▼──────────────────┐
13
+ │ Express HTTP Server │
14
+ │ (kaseki-api-service.ts) │
15
+ └────────────┬─────────────────┘
16
+
17
+ ┌─────────┴──────────┐
18
+ │ │
19
+ ┌───▼────────┐ ┌──────▼──────────┐
20
+ │ Job Queue │ │ Result Cache │
21
+ │ Scheduler │ │ (resultcache.ts)│
22
+ │ (job- │ └─────────────────┘
23
+ │ scheduler) │
24
+ └───┬────────┘
25
+
26
+ ┌───▼──────────────────────────┐
27
+ │ kaseki-activate.sh │
28
+ │ (spawn child process) │
29
+ └───┬──────────────────────────┘
30
+
31
+ ┌───▼──────────────────────────┐
32
+ │ Docker Container │
33
+ │ (kaseki-agent.sh runs) │
34
+ └──────────────────────────────┘
35
+ ```
36
+
37
+ ## Key Components
38
+
39
+ ### 1. Types & Validation (`src/kaseki-api-types.ts`, ~150 lines)
40
+
41
+ Defines TypeScript interfaces and Zod validation schemas:
42
+
43
+ - `RunRequest` — Request to trigger a job
44
+ - `StatusResponse` — Job status with progress
45
+ - `AnalysisResponse` — Comprehensive result summary
46
+ - `Job` — Internal job state representation
47
+
48
+ Uses Zod for runtime validation of incoming requests.
49
+
50
+ ### 2. Configuration (`src/kaseki-api-config.ts`, ~128 lines)
51
+
52
+ Loads and validates environment variables:
53
+
54
+ - API keys (from env or file)
55
+ - Port, concurrency limits, timeouts
56
+ - Directory paths
57
+ - Log level
58
+
59
+ Provides `loadConfig()` and `validateApiKey()` functions.
60
+
61
+ ### 3. Job Scheduler (`src/job-scheduler.ts`, ~195 lines)
62
+
63
+ Manages in-memory FIFO queue with concurrency control:
64
+
65
+ - `submitJob()` — Add to queue
66
+ - `getJob()` / `listJobs()` — Query state
67
+ - Spawns `kaseki-activate.sh` when job runs
68
+ - Handles timeouts, failure parsing
69
+ - Graceful shutdown via `shutdown()`
70
+
71
+ Key features:
72
+
73
+ - Auto-generates unique instance IDs (kaseki-1, kaseki-2, ...)
74
+ - Respects max concurrent limit
75
+ - Traps exit codes and categorizes failures
76
+
77
+ ### 4. Result Cache (`src/result-cache.ts`, ~65 lines)
78
+
79
+ Lazy-loads and caches artifacts to reduce filesystem reads:
80
+
81
+ - `getOrLoad(filePath)` — Load file or return cached
82
+ - TTL-based expiration (default: 5 min)
83
+ - Memory limit and LRU eviction
84
+ - Per-job cleanup
85
+
86
+ Configured: max 20 entries, 10 MB per file.
87
+
88
+ ### 5. API Routes (`src/kaseki-api-routes.ts`, ~370 lines)
89
+
90
+ Express route handlers grouped by feature:
91
+
92
+ **Core Endpoints:**
93
+
94
+ - `POST /api/runs` — Submit job (202 Accepted)
95
+ - `GET /api/runs` — List all recent runs
96
+ - `GET /api/runs/:id/status` — Poll status + progress
97
+ - `GET /api/runs/:id/analysis` — Comprehensive summary
98
+
99
+ **Artifact Access:**
100
+
101
+ - `GET /api/results/:id/:file` — Download diffs, metadata
102
+ - `GET /api/runs/:id/logs/:logtype` — Access logs
103
+
104
+ **Health:**
105
+
106
+ - `GET /health` — No-auth health check
107
+
108
+ **Middleware:**
109
+
110
+ - Bearer token validation (skip for `/health`)
111
+ - RFC 7807 error responses
112
+ - Request validation via Zod
113
+
114
+ ### 6. Express Service (`src/kaseki-api-service.ts`, ~67 lines)
115
+
116
+ Main entry point:
117
+
118
+ - Loads config and validates
119
+ - Creates Express app with JSON middleware
120
+ - Initializes job scheduler and routes
121
+ - Graceful shutdown on SIGTERM/SIGINT
122
+ - Unhandled error trapping
123
+
124
+ ### 7. TypeScript Client (`src/kaseki-api-client.ts`, ~200 lines)
125
+
126
+ High-level client library for integration:
127
+
128
+ - `submit(request)` — Trigger job
129
+ - `getStatus(runId)` — Poll status
130
+ - `getAnalysis(runId)` — Full summary
131
+ - `getLog(runId, type)` — Retrieve logs
132
+ - `getArtifact(runId, file)` — Download artifacts
133
+ - `waitForCompletion(runId)` — Poll until done
134
+ - `createKasekiClient()` — Factory helper
135
+
136
+ ## Development Workflow
137
+
138
+ ### Build
139
+
140
+ ```bash
141
+ npm install
142
+ npm run build # TypeScript → dist/
143
+ npm run type-check # TypeScript validation
144
+ ```
145
+
146
+ ### Test
147
+
148
+ ```bash
149
+ npm run test:unit -- src/result-cache.test.ts # Run a single Jest test file
150
+ npm run test:unit -- -t "caches successful result" # Run tests matching a name pattern
151
+ npm run test:ci # Full CI-style validation (build + type-check + jest + bash tests)
152
+ npm run test:watch # Jest watch mode
153
+ npm run test:coverage # Coverage report
154
+ ```
155
+
156
+ ### Lint
157
+
158
+ ```bash
159
+ npm run lint # Run all linters
160
+ npm run lint:js # ESLint only
161
+ npm run lint:fix # Auto-fix issues
162
+ ```
163
+
164
+ ### Local Development
165
+
166
+ ```bash
167
+ # Terminal 1: Start API
168
+ KASEKI_API_KEYS=sk-dev npm run kaseki-api
169
+
170
+ # Terminal 2: Test endpoints
171
+ curl -H "Authorization: Bearer sk-dev" http://localhost:8080/api/health
172
+
173
+ # Terminal 3: Submit a run (requires actual kaseki-agent setup)
174
+ curl -X POST http://localhost:8080/api/runs \
175
+ -H "Authorization: Bearer sk-dev" \
176
+ -H "Content-Type: application/json" \
177
+ -d '{"repoUrl":"https://github.com/you/repo"}'
178
+ ```
179
+
180
+ ## Testing Strategy
181
+
182
+ ### Unit Tests (`src/*.test.ts`)
183
+
184
+ - **Kaseki API Configuration:** Config loading, validation, API key parsing
185
+ - **Request Validation:** Zod schema validation, error cases
186
+ - **Job Scheduler:** Queue operations, job submission, timeout handling
187
+ - **Result Cache:** Caching, TTL, eviction, cleanup
188
+
189
+ ### Integration Tests (`test/kaseki-api.integration.test.sh`)
190
+
191
+ Currently placeholder (requires Docker + kaseki-agent setup).
192
+
193
+ Example test flow:
194
+
195
+ 1. Start API service
196
+ 2. Verify health check
197
+ 3. Submit a real run
198
+ 4. Poll until completion
199
+ 5. Verify artifacts exist
200
+
201
+ ### End-to-End Tests
202
+
203
+ Manual testing via TypeScript client:
204
+
205
+ ```typescript
206
+ const client = new KasekiApiClient('http://localhost:8080', 'sk-dev');
207
+ const run = await client.submit({ repoUrl: '...' });
208
+ const final = await client.waitForCompletion(run.id);
209
+ console.log(final.status === 'completed' ? 'SUCCESS' : 'FAILED');
210
+ ```
211
+
212
+ ## Security Considerations
213
+
214
+ 1. **API Key Management**
215
+ - Keys stored in env (dev) or secure file (prod)
216
+ - Never logged or included in responses
217
+ - Bearer token validation on all protected endpoints
218
+ - Validateable against list of approved keys
219
+
220
+ 2. **Input Validation**
221
+ - All external inputs validated via Zod schemas
222
+ - URL format validation
223
+ - File path sanitization
224
+ - Enum validation for task modes
225
+
226
+ 3. **Output Sanitization**
227
+ - RFC 7807 error format (no internal details)
228
+ - Log files truncated if >100 KB
229
+ - Artifact size limits enforced
230
+
231
+ 4. **Concurrency Safety**
232
+ - In-memory queue (single process)
233
+ - No race conditions on job state
234
+ - Atomic timeout handling
235
+
236
+ ## Performance Tuning
237
+
238
+ ### Job Queue
239
+
240
+ ```typescript
241
+ // In src/kaseki-api-config.ts
242
+ KASEKI_API_MAX_CONCURRENT_RUNS = 3; // Increase for more parallelism
243
+ ```
244
+
245
+ Monitor via:
246
+
247
+ ```bash
248
+ curl -H "Authorization: Bearer ..." http://localhost:8080/api/runs
249
+ ```
250
+
251
+ ### Result Cache
252
+
253
+ ```typescript
254
+ // In src/kaseki-api-routes.ts
255
+ const cache = new ResultCache(20, 5 * 60 * 1000); // 20 entries, 5 min TTL
256
+ ```
257
+
258
+ Check stats:
259
+
260
+ ```typescript
261
+ const stats = cache.getStats();
262
+ console.log(`${stats.entries} cached, ${stats.bytes} bytes`);
263
+ ```
264
+
265
+ ### Database (Future)
266
+
267
+ Current in-memory design sufficient for <100 recent runs. For persistence across restarts, add:
268
+
269
+ - SQLite or JSON file-based run log
270
+ - Cleanup job for old artifacts
271
+ - Run history API endpoint
272
+
273
+ ## Common Development Tasks
274
+
275
+ ### Add a New Endpoint
276
+
277
+ 1. Define request/response types in `src/kaseki-api-types.ts`
278
+ 2. Add validation schema (if request body expected)
279
+ 3. Implement handler in `src/kaseki-api-routes.ts`
280
+ 4. Add tests to `src/kaseki-api-service.test.ts`
281
+ 5. Document in `docs/API.md`
282
+
283
+ Example:
284
+
285
+ ```typescript
286
+ // 1. Types
287
+ export interface MyResponse {
288
+ data: string;
289
+ }
290
+
291
+ // 2. Route
292
+ router.get('/my-endpoint', (req, res) => {
293
+ const response: MyResponse = { data: '...' };
294
+ res.json(response);
295
+ });
296
+
297
+ // 3. Test
298
+ test('my-endpoint returns data', () => {
299
+ // ...
300
+ });
301
+ ```
302
+
303
+ ### Add Configuration Option
304
+
305
+ 1. Update `KasekiApiConfig` interface in `src/kaseki-api-config.ts`
306
+ 2. Add env var parsing in `loadConfig()`
307
+ 3. Add validation and defaults
308
+ 4. Update `docs/DEPLOYMENT.md`
309
+ 5. Add test case
310
+
311
+ ### Improve Error Handling
312
+
313
+ Current pattern using `sendErrorResponse(res, status, title, detail)` follows RFC 7807.
314
+
315
+ To add new error type:
316
+
317
+ ```typescript
318
+ // In route handler
319
+ if (someCondition) {
320
+ return sendErrorResponse(res, 422, 'Unprocessable Entity',
321
+ 'Helpful error message here');
322
+ }
323
+ ```
324
+
325
+ ## Debugging
326
+
327
+ ### Enable Debug Logging
328
+
329
+ ```bash
330
+ KASEKI_API_LOG_LEVEL=debug npm run kaseki-api
331
+ ```
332
+
333
+ ### Inspect Job State
334
+
335
+ Connect to running service and query:
336
+
337
+ ```bash
338
+ curl -H "Authorization: Bearer sk-key" http://localhost:8080/api/runs | jq .
339
+ ```
340
+
341
+ ### Test Job Spawning
342
+
343
+ Add test repo and try to trigger a run:
344
+
345
+ ```bash
346
+ # (Requires actual kaseki-agent, docker, OpenRouter API key setup)
347
+ ```
348
+
349
+ ### Memory Leaks
350
+
351
+ Monitor long-running service:
352
+
353
+ ```bash
354
+ # In another terminal
355
+ watch -n1 'ps aux | grep node'
356
+ ```
357
+
358
+ Check cache stats periodically:
359
+
360
+ ```typescript
361
+ // In application
362
+ setInterval(() => {
363
+ const stats = cache.getStats();
364
+ console.log('Cache:', stats);
365
+ }, 60000);
366
+ ```
367
+
368
+ ## Roadmap
369
+
370
+ ### Current (v1)
371
+
372
+ - [x] HTTP REST API with Bearer auth
373
+ - [x] Job queue with concurrency control
374
+ - [x] Result caching
375
+ - [x] TypeScript client library
376
+ - [x] Comprehensive tests
377
+ - [x] Docker & systemd deployment
378
+
379
+ ### Future (v2+)
380
+
381
+ - [ ] WebSocket for real-time progress updates
382
+ - [ ] Persistent run history (SQLite)
383
+ - [ ] Prometheus metrics endpoint
384
+ - [ ] Rate limiting per API key
385
+ - [ ] Multi-host load balancing
386
+ - [ ] Run cancellation API
387
+ - [ ] Webhook callbacks on completion
388
+ - [ ] OpenAPI 3.0 spec auto-generation
389
+
390
+ ## Releases and Versioning
391
+
392
+ Kaseki Agent uses **semantic-release** to automate versioning, changelog generation, and GitHub Release creation. Releases are triggered manually by running `npm run release`.
393
+
394
+ ### Version Strategy
395
+
396
+ This project follows [Semantic Versioning](https://semver.org/):
397
+
398
+ - **Major** (X.0.0): Breaking API changes, incompatible behavior
399
+ - **Minor** (0.Y.0): New features, backward compatible
400
+ - **Patch** (0.0.Z): Bug fixes, backward compatible
401
+
402
+ ### Automated Version Bumping
403
+
404
+ Version bumps are determined from commit messages using the [conventional commits](../CONTRIBUTING.md#6-release-process-and-conventional-commits) standard:
405
+
406
+ - `feat:` → **Minor** version bump
407
+ - `fix:`, `perf:`, `revert:` → **Patch** version bump
408
+ - `chore:`, `docs:`, `style:`, `refactor:`, `test:` → **No version bump** (included in changelog only)
409
+
410
+ ### Making a Release
411
+
412
+ **Via GitHub Actions (Recommended):**
413
+
414
+ 1. Go to [Actions](https://github.com/CyanAutomation/kaseki-agent/actions) → **Release** workflow
415
+ 2. Click **Run workflow** (top right)
416
+ 3. Choose options:
417
+ - **Dry-run** (optional): Set to `true` to preview release without creating tags
418
+ - Leave blank to create actual release
419
+ 4. Click **Run workflow**
420
+ 5. The workflow will:
421
+ - Analyze commits since last release tag
422
+ - Automatically determine version (major/minor/patch)
423
+ - Update `package.json` with new version
424
+ - Update `CHANGELOG.md` with formatted release notes
425
+ - Create git tag (e.g., `v1.0.0`)
426
+ - Push tag and commits to GitHub
427
+ - Create GitHub Release with release notes
428
+ - Automatically trigger Docker build workflow for multi-arch image builds
429
+ 6. Monitor progress in Actions tab
430
+ 7. Verify in [Releases](https://github.com/CyanAutomation/kaseki-agent/releases)
431
+
432
+ **Via Local Command (Alternative):**
433
+
434
+ ```bash
435
+ npm run release:dry # Preview release locally
436
+ npm run release # Create release (requires GITHUB_TOKEN)
437
+ ```
438
+
439
+ **Note:** The workflow approach is recommended for team visibility and consistency. Local commands are useful for testing or emergency releases when GitHub Actions is unavailable.
440
+
441
+ ### Changelog Format
442
+
443
+ The `CHANGELOG.md` is automatically updated with entries grouped by type:
444
+
445
+ - **Features** — From `feat:` commits
446
+ - **Bug Fixes** — From `fix:` commits
447
+ - **Performance Improvements** — From `perf:` commits
448
+ - **Documentation** — From `docs:` commits (hidden by default)
449
+
450
+ Each entry includes the commit hash and links to the commit in GitHub.
451
+
452
+ For manual additions or corrections, edit `CHANGELOG.md` directly before committing to main.
453
+
454
+ ## Useful Resources
455
+
456
+ - Express.js docs: <https://expressjs.com/>
457
+ - Zod validation: <https://zod.dev/>
458
+ - TypeScript handbook: <https://www.typescriptlang.org/docs/>
459
+ - RFC 7807 (Problem Details): <https://tools.ietf.org/html/rfc7807>