@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,369 @@
1
+ # Kaseki Quality Gates: Allowlist Configuration Guide
2
+
3
+ This document explains kaseki's **allowlist** quality gate, how to configure it, and best practices for managing file changes during agent runs.
4
+
5
+ ## What is the Allowlist?
6
+
7
+ The allowlist is a **quality gate** that controls which files the kaseki agent is permitted to modify. When the agent completes, kaseki compares the modified files against the allowlist patterns:
8
+
9
+ - **Files matching the allowlist** → kept (validated and tested)
10
+ - **Files outside the allowlist** → automatically restored (reverted) before validation
11
+
12
+ This prevents **scope creep** — where an agent makes unintended changes to files outside the task scope.
13
+
14
+ ## Why Use an Allowlist?
15
+
16
+ ### Problem It Solves
17
+
18
+ When you ask an agent to "fix a parser bug in `src/lib/parser.ts`", it might:
19
+
20
+ 1. ✅ Fix the bug correctly
21
+ 2. ❌ Also modify `tests/other-module.ts` (test interference)
22
+ 3. ❌ Update `package.json` (version bump)
23
+ 4. ❌ Reformat `docs/DESIGN.md` (style changes)
24
+
25
+ Without an allowlist, these unintended changes would fail validation or create noise in the diff.
26
+
27
+ ### With Allowlist
28
+
29
+ ```
30
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
31
+ ```
32
+
33
+ Only files matching this pattern are validated. Everything else is automatically reverted.
34
+
35
+ ## Configuration
36
+
37
+ ### Environment Variable
38
+
39
+ Set `KASEKI_CHANGED_FILES_ALLOWLIST` before running kaseki:
40
+
41
+ ```bash
42
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
43
+ ./run-kaseki.sh
44
+ ```
45
+
46
+ ### Pattern Syntax
47
+
48
+ The allowlist supports **glob-style patterns**:
49
+
50
+ | Pattern | Matches | Example |
51
+ |---------|---------|---------|
52
+ | `path/file.ts` | Exact file | `src/lib/parser.ts` |
53
+ | `path/**` | All files in directory (recursive) | `src/lib/**` matches `src/lib/parser.ts`, `src/lib/utils/helper.ts` |
54
+ | `**/name.ts` | File in any directory | `**/test.ts` matches `src/test.ts`, `tests/test.ts` |
55
+ | `path/*` | Files in direct children (one level) | `src/*` matches `src/file.ts` but NOT `src/lib/file.ts` |
56
+
57
+ ### Examples
58
+
59
+ #### Single File
60
+
61
+ ```bash
62
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts"
63
+ ```
64
+
65
+ #### Multiple Files
66
+
67
+ ```bash
68
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.test.ts tests/parser.validation.ts"
69
+ ```
70
+
71
+ #### Directory Pattern
72
+
73
+ ```bash
74
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/**" # All files under src/lib/
75
+ ```
76
+
77
+ #### Multiple Patterns
78
+
79
+ ```bash
80
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/components/** tests/components/** src/hooks/**"
81
+ ```
82
+
83
+ #### Combination
84
+
85
+ ```bash
86
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/** src/types/parser.ts"
87
+ ```
88
+
89
+ ## Using Templates
90
+
91
+ We provide pre-built allowlist templates for common task types:
92
+
93
+ ### Template: Parser Fix
94
+
95
+ For fixing parsing logic in a specific module.
96
+
97
+ ```bash
98
+ KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-parser-fix.txt | tr '\n' ' ')"
99
+ ./run-kaseki.sh
100
+ ```
101
+
102
+ **Includes:** `src/lib/parser.ts tests/parser.validation.ts`
103
+
104
+ ### Template: UI Component
105
+
106
+ For modifying or creating React/Vue components.
107
+
108
+ ```bash
109
+ KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-ui-component.txt | tr '\n' ' ')"
110
+ ./run-kaseki.sh
111
+ ```
112
+
113
+ **Includes:** `src/components/** src/lib/ui/** src/hooks/** tests/components/**`
114
+
115
+ ### Template: API Route
116
+
117
+ For implementing or fixing API endpoints.
118
+
119
+ ```bash
120
+ KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-api-route.txt | tr '\n' ' ')"
121
+ ./run-kaseki.sh
122
+ ```
123
+
124
+ **Includes:** `src/app/api/** tests/api/**`
125
+
126
+ ### Template: Utility
127
+
128
+ For fixing utility functions and helper libraries.
129
+
130
+ ```bash
131
+ KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-utility.txt | tr '\n' ' ')"
132
+ ./run-kaseki.sh
133
+ ```
134
+
135
+ **Includes:** `src/lib/** src/utils/** tests/** src/types/**`
136
+
137
+ ### Template: Comprehensive
138
+
139
+ For larger tasks that legitimately require changes across multiple areas.
140
+
141
+ ```bash
142
+ KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-comprehensive.txt | tr '\n' ' ')"
143
+ ./run-kaseki.sh
144
+ ```
145
+
146
+ **Includes:** `src/** tests/**`
147
+
148
+ ## Finding the Right Allowlist
149
+
150
+ ### Decision Tree
151
+
152
+ ```
153
+ Start: What are you asking the agent to do?
154
+
155
+ ├─ Fix a bug in [specific file]?
156
+ │ └─ Use: src/path/to/file.ts tests/path/to/file.test.ts
157
+
158
+ ├─ Implement/modify a React component?
159
+ │ └─ Use: allowlist-ui-component template
160
+
161
+ ├─ Implement/fix an API endpoint?
162
+ │ └─ Use: allowlist-api-route template
163
+
164
+ ├─ Fix a utility function or helper?
165
+ │ └─ Use: allowlist-utility template
166
+
167
+ └─ Large refactor affecting multiple areas?
168
+ └─ Use: allowlist-comprehensive template
169
+ ```
170
+
171
+ ### If You're Unsure
172
+
173
+ 1. **Do a test run** with a broad allowlist:
174
+
175
+ ```bash
176
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/**" ./run-kaseki.sh
177
+ ```
178
+
179
+ 2. **Check the results:**
180
+ - Look at `/results/restoration-report.md`
181
+ - See which files were kept vs. restored
182
+ - Copy the "kept files" into a more specific allowlist
183
+
184
+ 3. **Or use the suggestion helper:**
185
+
186
+ ```bash
187
+ ./scripts/suggest-allowlist.sh /results/kaseki-N
188
+ ```
189
+
190
+ This generates `allowlist-suggestions.md` with patterns based on actual files changed.
191
+
192
+ ## What Happens During Restoration
193
+
194
+ When kaseki detects files outside the allowlist:
195
+
196
+ 1. **Restoration Phase** (after agent completes, before validation)
197
+ - Files matching allowlist → logged as "kept"
198
+ - Files outside allowlist → automatically reverted using `git restore`
199
+ - Summary written to `quality.log`: "Restored: X files; Kept: Y files"
200
+ - Detailed events written to `restoration.jsonl` (JSONL format for parsing)
201
+
202
+ 2. **Report Generation** (at end of run)
203
+ - `restoration-report.md` — human-readable summary with recommendations
204
+ - Includes allowlist coverage percentage
205
+ - Suggests next steps if coverage is low
206
+
207
+ 3. **Metrics in Summary**
208
+ - `kaseki-report` shows: "Allowlist coverage: X/Y files (Z%)"
209
+ - Visual indicator of how restrictive the allowlist was
210
+
211
+ ### When Coverage is Low (0-50%)
212
+
213
+ > ⚠️ **If your allowlist coverage is below 50%**, many files are being restored. This is **expected behavior** but suggests your allowlist may need adjustment.
214
+ >
215
+ > **Quick fixes:**
216
+ >
217
+ > 1. **Widen the allowlist** — Add related file patterns (e.g., tests, types, related utilities)
218
+ > 2. **Run the suggestion helper** — `./scripts/suggest-allowlist.sh /results/kaseki-N` generates improved patterns
219
+ > 3. **Review the task prompt** — Is it clear enough? Consider adding "Do not modify X" constraints
220
+ >
221
+ > **See also:** [Troubleshooting section](#problem-too-many-files-restored) below
222
+
223
+ ## Troubleshooting
224
+
225
+ ### Problem: Too Many Files Restored
226
+
227
+ **Symptom:** Run completes but `restoration-report.md` shows many files were restored.
228
+
229
+ **Cause:** Allowlist is too narrow for the task.
230
+
231
+ **Solutions:**
232
+
233
+ 1. Widen the allowlist to include related files
234
+ 2. Use a broader template (e.g., `allowlist-utility` instead of single file)
235
+ 3. Run `./scripts/suggest-allowlist.sh` to auto-generate better patterns from the results:
236
+
237
+ ```bash
238
+ ./scripts/suggest-allowlist.sh /agents/kaseki-results/kaseki-N
239
+ ```
240
+
241
+ This analyzes what files were actually changed and suggests improved glob patterns.
242
+
243
+ 4. Review the TASK_PROMPT — is the agent task clear enough? Consider adding constraints like:
244
+
245
+ ```
246
+ Do not modify config files, documentation, or unrelated test files.
247
+ Focus only on src/lib/parser.ts and its direct test files.
248
+ ```
249
+
250
+ **Example workflow:**
251
+
252
+ ```bash
253
+ # Run 1: Test with a broad allowlist to see what changes
254
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/**" ./run-kaseki.sh
255
+
256
+ # Run 2: Analyze what was kept vs. restored
257
+ ./scripts/suggest-allowlist.sh /agents/kaseki-results/kaseki-1
258
+
259
+ # Run 3: Use the suggested allowlist for precision
260
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts" ./run-kaseki.sh
261
+ ```
262
+
263
+ **More help:**
264
+
265
+ - [Using Templates](#using-templates) — Pre-built patterns for common task types
266
+ - [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate patterns from completed runs
267
+ - [docs/TASK_PROMPT_TEMPLATES.md](./TASK_PROMPT_TEMPLATES.md) — Writing better prompts that minimize scope creep
268
+
269
+ ### Problem: Allowlist Coverage is 0%
270
+
271
+ **Symptom:** All files were restored; nothing was kept.
272
+
273
+ **Cause:**
274
+
275
+ - Agent made no changes
276
+ - OR agent changed files in completely different areas than allowlist specifies
277
+
278
+ **Check:**
279
+
280
+ 1. Look at `changed-files.txt` to see what actually changed
281
+ 2. Look at `pi-stderr.log` to see if agent had errors
282
+ 3. Verify `TASK_PROMPT` was clear and specific
283
+
284
+ ### Problem: Specific File Not Matching Pattern
285
+
286
+ **Symptom:** Expected file `src/lib/utils/helper.ts` should match but was restored.
287
+
288
+ **Cause:** Pattern syntax issue.
289
+
290
+ **Common Mistakes:**
291
+
292
+ - ❌ `src/lib/*` — matches only direct children, not `src/lib/utils/helper.ts`
293
+ - ✅ `src/lib/**` — matches all files recursively
294
+
295
+ - ❌ `src/lib/*/helper.ts` — matches one level, not nested
296
+ - ✅ `src/lib/**/helper.ts` — matches any nesting level
297
+
298
+ - ❌ `/src/lib/**` — leading slash prevents matching
299
+ - ✅ `src/lib/**` — no leading slash
300
+
301
+ **Test your pattern:**
302
+
303
+ ```bash
304
+ ./scripts/allowlist-helper.sh # (See implementation for pattern testing)
305
+ ```
306
+
307
+ ## Advanced: Disabling Auto-Restoration
308
+
309
+ By default, kaseki **automatically restores** files outside the allowlist before validation. To change this:
310
+
311
+ ```bash
312
+ # Do not restore; just log violations (allows validation to run with all files)
313
+ KASEKI_RESTORE_DISALLOWED_CHANGES=0 ./run-kaseki.sh
314
+ ```
315
+
316
+ **Warning:** This may cause validation to fail on unintended changes. Use only if you know what you're doing.
317
+
318
+ ## Related
319
+
320
+ - [CLAUDE.md](../CLAUDE.md) — Overall kaseki-agent documentation
321
+ - [docs/TASK_PROMPT_TEMPLATES.md](./TASK_PROMPT_TEMPLATES.md) — How to write prompts that minimize scope creep
322
+ - [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate allowlist from completed run
323
+ - `templates/allowlist-*.txt` — Pre-built templates for common task types
324
+
325
+ ## Examples
326
+
327
+ ### Example 1: Simple Bug Fix
328
+
329
+ **Task:** Fix a parser bug in `src/lib/parser.ts`
330
+
331
+ ```bash
332
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/**"
333
+ TASK_PROMPT="Fix the parsing bug in src/lib/parser.ts that fails on empty input" ./run-kaseki.sh
334
+ ```
335
+
336
+ **Expected:** Only `src/lib/parser.ts` and test files change.
337
+
338
+ ### Example 2: UI Component Implementation
339
+
340
+ **Task:** Create a new button component with tests
341
+
342
+ ```bash
343
+ export KASEKI_CHANGED_FILES_ALLOWLIST="$(cat templates/allowlist-ui-component.txt | tr '\n' ' ')"
344
+ TASK_PROMPT="Implement a new Button component in src/components/button.tsx with storybook examples" ./run-kaseki.sh
345
+ ```
346
+
347
+ **Expected:** Component, tests, and related files change; docs and config files restored.
348
+
349
+ ### Example 3: API Endpoint
350
+
351
+ **Task:** Implement a new API endpoint
352
+
353
+ ```bash
354
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/app/api/** tests/api/**"
355
+ TASK_PROMPT="Create a new POST /api/users endpoint that validates email and returns user details" ./run-kaseki.sh
356
+ ```
357
+
358
+ **Expected:** API route, types, and tests change; everything else restored.
359
+
360
+ ### Example 4: Large Refactor
361
+
362
+ **Task:** Refactor module structure
363
+
364
+ ```bash
365
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/** tests/** src/types/**"
366
+ TASK_PROMPT="Refactor the auth module: extract utils to separate files and update imports" ./run-kaseki.sh
367
+ ```
368
+
369
+ **Expected:** Multiple files across multiple directories change.