@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,576 @@
1
+ ---
2
+ name: result-report-analysis
3
+ description: Interpreting kaseki-report output and artifact metrics
4
+ tags: [kaseki, analysis, reporting, metrics, diagnostics]
5
+ relatedSkills: [workflow-diagnosis]
6
+ ---
7
+
8
+ # Result Report Analysis for Kaseki Agent
9
+
10
+ This skill guides interpreting kaseki-report output and analyzing kaseki run artifacts to extract metrics, baselines, and insights.
11
+
12
+ ## Overview
13
+
14
+ **When to Use**:
15
+ - Post-run analysis and performance review
16
+ - Comparing runs or establishing baselines
17
+ - Detecting resource anomalies or bottlenecks
18
+ - Extracting metrics for dashboards or reports
19
+ - Understanding agent behavior and token usage
20
+
21
+ **Key Concepts**:
22
+ - kaseki-report generates a compact diagnostic summary from run artifacts
23
+ - Metrics include timing, file counts, token usage, and event statistics
24
+ - Baselines help identify abnormal runs
25
+ - Artifact analysis reveals agent reasoning and bottlenecks
26
+
27
+ ---
28
+
29
+ ## kaseki-report Output
30
+
31
+ ### Running kaseki-report
32
+
33
+ ```bash
34
+ # Generate report for a completed run
35
+ docker run --rm --entrypoint kaseki-report \
36
+ -v /agents/kaseki-results/kaseki-1:/results:ro \
37
+ kaseki-template:latest /results
38
+
39
+ # Or directly if scripts are in PATH
40
+ kaseki-report /agents/kaseki-results/kaseki-1
41
+ ```
42
+
43
+ ### Report Structure
44
+
45
+ ```
46
+ ================================================================================
47
+ Kaseki Run Report: kaseki-1
48
+ ================================================================================
49
+
50
+ STATUS & TIMING
51
+ ┌─────────────────────────────────────────────────────────────┐
52
+ │ Status: ✓ SUCCESS │
53
+ │ Total Duration: 15m 30s (930 seconds) │
54
+ │ Start: 2026-04-25T10:30:00Z │
55
+ │ End: 2026-04-25T10:45:30Z │
56
+ └─────────────────────────────────────────────────────────────┘
57
+
58
+ AGENT & VALIDATION
59
+ ┌─────────────────────────────────────────────────────────────┐
60
+ │ Agent: OpenRouter (openrouter/free) │
61
+ │ Model Tokens: 7,234 (input: 5,000 | output: 2,234) │
62
+ │ Thinking Tokens: 4,500 (reasoning cost) │
63
+ │ Events Processed: 42 │
64
+ │ Validation Commands: 3 passed │
65
+ │ All checks: PASS │
66
+ └─────────────────────────────────────────────────────────────┘
67
+
68
+ CHANGES
69
+ ┌─────────────────────────────────────────────────────────────┐
70
+ │ Files Modified: 3 │
71
+ │ Lines Added: 42 │
72
+ │ Lines Removed: 18 │
73
+ │ Total Diff Size: 2.4 KB │
74
+ └─────────────────────────────────────────────────────────────┘
75
+
76
+ COMMAND TIMINGS
77
+ ┌──────────────────────────────────────────────────────────────┐
78
+ │ npm ci 45 sec (cache hit) │
79
+ │ npm run check 38 sec (type checking) │
80
+ │ npm run test 124 sec (5 tests, 1 new) │
81
+ │ npm run build 90 sec (successful) │
82
+ └──────────────────────────────────────────────────────────────┘
83
+
84
+ QUALITY GATES
85
+ ┌──────────────────────────────────────────────────────────────┐
86
+ │ ✓ Allowlist Check: 3 files, all in scope │
87
+ │ ✓ Diff Size Check: 2.4 KB < 200 KB limit │
88
+ │ ✓ Secret Scan: No credentials detected │
89
+ │ ✓ Git Status: No untracked files │
90
+ └──────────────────────────────────────────────────────────────┘
91
+
92
+ KEY METRICS
93
+ ┌──────────────────────────────────────────────────────────────┐
94
+ │ Tokens per Change: 2.4 tokens/byte (average) │
95
+ │ Events per File: 14 events/file (agent reasoning) │
96
+ │ Thinking Ratio: 66.8% (reasoning vs output) │
97
+ │ Cache Efficiency: 97% (most layers hit) │
98
+ └──────────────────────────────────────────────────────────────┘
99
+
100
+ EXIT CODES
101
+ overall: 0 (success)
102
+ agent: 0 (completed)
103
+ validation: 0 (all passed)
104
+ quality_gates: 0 (all passed)
105
+ ================================================================================
106
+ ```
107
+
108
+ ---
109
+
110
+ ## Artifact Overview
111
+
112
+ ### File Structure
113
+
114
+ ```
115
+ /agents/kaseki-results/kaseki-1/
116
+ ├── metadata.json # Timestamps, exit codes
117
+ ├── result-summary.md # Human-readable summary
118
+ ├── pi-events.jsonl # Filtered agent events (1 per line)
119
+ ├── pi-summary.json # Agent stats + summary
120
+ ├── git.diff # Unified diff of changes
121
+ ├── git.status # Git status output
122
+ ├── changed-files.txt # List of modified files
123
+ ├── validation.log # Test/check output
124
+ ├── validation-timings.tsv # Command durations
125
+ ├── quality.log # Quality gate results
126
+ ├── secret-scan.log # Secret detection results
127
+ ├── stdout.log # Container stdout
128
+ ├── stderr.log # Container stderr
129
+ └── exit_code # Overall exit code (0 = success)
130
+ ```
131
+
132
+ ### Quick Artifact Check
133
+
134
+ ```bash
135
+ # Overall status
136
+ cat /agents/kaseki-results/kaseki-1/exit_code
137
+ # Output: 0 (success)
138
+
139
+ # What changed?
140
+ cat /agents/kaseki-results/kaseki-1/changed-files.txt
141
+ # Output:
142
+ # src/lib/role.ts
143
+ # tests/role.test.ts
144
+
145
+ # Diff stats
146
+ git apply --stat < /agents/kaseki-results/kaseki-1/git.diff
147
+ # Output:
148
+ # src/lib/role.ts | 12 +-
149
+ # tests/role.test.ts | 8 +-
150
+ # 2 files changed, 20 insertions(+), 0 deletions(-)
151
+ ```
152
+
153
+ ---
154
+
155
+ ## Key Metrics & Interpretation
156
+
157
+ ### Timing Metrics
158
+
159
+ **Artifact**: `metadata.json` + `validation-timings.tsv`
160
+
161
+ ```json
162
+ {
163
+ "start_time": "2026-04-25T10:30:00Z",
164
+ "end_time": "2026-04-25T10:45:30Z",
165
+ "duration_seconds": 930
166
+ }
167
+ ```
168
+
169
+ **Baseline Durations**:
170
+
171
+ | Stage | Expected Range | Example |
172
+ |---|---|---|
173
+ | Clone + Setup | 30–60 sec | 45 sec |
174
+ | npm ci | 5–180 sec | 45 sec (cache hit) |
175
+ | Pi Agent Run | 300–600 sec | 450 sec |
176
+ | Validation Cmds | 60–300 sec | 250 sec |
177
+ | **Total** | **5–20 min** | **15 min 30 sec** |
178
+
179
+ **Interpretation**:
180
+ - < 5 min: Unusually fast (check if agent completed)
181
+ - 5–15 min: Excellent (optimized)
182
+ - 15–20 min: Good (acceptable)
183
+ - > 20 min: Slow (investigate)
184
+
185
+ ### File Change Metrics
186
+
187
+ **Artifact**: `changed-files.txt` + `git.diff`
188
+
189
+ ```bash
190
+ # Count files
191
+ wc -l < /agents/kaseki-results/kaseki-1/changed-files.txt
192
+ # Output: 3 files changed
193
+
194
+ # Check diff size
195
+ wc -c < /agents/kaseki-results/kaseki-1/git.diff
196
+ # Output: 2457 bytes (2.4 KB)
197
+
198
+ # Lines changed
199
+ git apply --stat < /agents/kaseki-results/kaseki-1/git.diff | tail -1
200
+ # Output: 2 files changed, 42 insertions(+), 18 deletions(-)
201
+ ```
202
+
203
+ **Baseline Metrics**:
204
+
205
+ | Change Type | Typical Files | Typical Diff | Typical Lines |
206
+ |---|---|---|---|
207
+ | **Bug Fix** | 1–3 | 2–10 KB | 10–50 |
208
+ | **Feature Add** | 2–5 | 10–50 KB | 50–200 |
209
+ | **Refactor** | 1–3 | 5–30 KB | 20–100 |
210
+ | **Docs Update** | 1 | 1–10 KB | 5–50 |
211
+
212
+ **Interpretation**:
213
+ - Fewer files than expected → Agent was conservative
214
+ - More files than expected → Check if off-scope changes
215
+ - Larger diff than expected → Check for refactoring or verbosity
216
+
217
+ ### Agent Token Metrics
218
+
219
+ **Artifact**: `pi-summary.json`
220
+
221
+ ```json
222
+ {
223
+ "statistics": {
224
+ "events": 42,
225
+ "thinking_tokens": 4500,
226
+ "output_tokens": 2234,
227
+ "input_tokens": 5000,
228
+ "total_tokens": 11734,
229
+ "thinking_ratio": 0.668
230
+ }
231
+ }
232
+ ```
233
+
234
+ **Metrics Breakdown**:
235
+
236
+ | Metric | Baseline | Interpretation |
237
+ |---|---|---|
238
+ | `events` | 10–50 | Number of reasoning steps |
239
+ | `thinking_tokens` | 30–50% of total | Agent reasoning effort |
240
+ | `output_tokens` | 20–40% of total | Generated code size |
241
+ | `input_tokens` | 20–50% of total | Prompt size |
242
+ | `total_tokens` | Task-dependent | Model cost |
243
+ | `thinking_ratio` | 0.5–0.8 | How much reasoning (0.5 = less thinking) |
244
+
245
+ **Interpretation**:
246
+ - High `thinking_ratio` (0.7+): Agent needed lots of reasoning (complex task or confusion)
247
+ - Low `thinking_ratio` (0.4–0.5): Agent decided quickly (straightforward task)
248
+ - High `output_tokens` relative to changes: Verbose or refactoring
249
+ - Low `total_tokens`: Efficient (good prompt scope)
250
+
251
+ ### Event Metrics
252
+
253
+ **Artifact**: `pi-events.jsonl` + `pi-summary.json`
254
+
255
+ ```bash
256
+ # Count events by type
257
+ jq '.type' /agents/kaseki-results/kaseki-1/pi-events.jsonl | sort | uniq -c
258
+ # Output:
259
+ # 8 "thought"
260
+ # 15 "tool_call"
261
+ # 12 "tool_result"
262
+ # 7 "message"
263
+ ```
264
+
265
+ **Event Types**:
266
+
267
+ | Type | Baseline | Interpretation |
268
+ |---|---|---|
269
+ | `thought` | 5–15 | Reasoning steps (good) |
270
+ | `tool_call` | 10–20 | Tool invocations (file edits, commands) |
271
+ | `tool_result` | 10–20 | Tool responses (output, success/fail) |
272
+ | `message` | 2–8 | Agent messages |
273
+ | `error` | 0–3 | Errors encountered (ideally 0) |
274
+
275
+ **Interpretation**:
276
+ - More `thought` events = deeper reasoning (not bad, just thoughtful)
277
+ - Many `tool_call` + `tool_result` loops = trial-and-error (possible confusion)
278
+ - Any `error` events = something went wrong (check logs)
279
+
280
+ ### Validation Metrics
281
+
282
+ **Artifact**: `validation-timings.tsv` + `validation.log`
283
+
284
+ ```bash
285
+ # Check validation timing
286
+ cat /agents/kaseki-results/kaseki-1/validation-timings.tsv
287
+ # Output:
288
+ # npm ci 45
289
+ # npm run check 38
290
+ # npm run test 124
291
+ # npm run build 90
292
+ ```
293
+
294
+ **Baseline Ranges**:
295
+
296
+ | Command | Fast (Cache) | Typical | Slow (Issue) |
297
+ |---|---|---|---|
298
+ | `npm ci` | 10–30 sec | 30–60 sec | > 120 sec |
299
+ | `npm run check` | 10–30 sec | 30–60 sec | > 120 sec |
300
+ | `npm run test` | 30–90 sec | 90–180 sec | > 300 sec |
301
+ | `npm run build` | 30–120 sec | 120–180 sec | > 300 sec |
302
+
303
+ **Interpretation**:
304
+ - Timings match baseline → Normal performance
305
+ - `npm ci` > 120 sec → Cache miss (new lock file)
306
+ - Individual test > 180 sec → Large test suite or slow build
307
+ - Any command timeout → Increase `KASEKI_AGENT_TIMEOUT_SECONDS`
308
+
309
+ ---
310
+
311
+ ## Anomaly Detection
312
+
313
+ ### Red Flags
314
+
315
+ **❌ Empty Diff**
316
+ ```bash
317
+ wc -c < /agents/kaseki-results/kaseki-1/git.diff
318
+ # Output: 0 (or very small)
319
+ ```
320
+ → Agent didn't make changes. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 1.
321
+
322
+ **❌ Oversized Diff**
323
+ ```bash
324
+ wc -c < /agents/kaseki-results/kaseki-1/git.diff
325
+ # Output: 250000 (exceeds 200 KB default)
326
+ ```
327
+ → Check if legitimate. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 4.
328
+
329
+ **❌ Many Off-Scope Files**
330
+ ```bash
331
+ cat /agents/kaseki-results/kaseki-1/changed-files.txt | wc -l
332
+ # Output: 15 files (expected 3)
333
+ ```
334
+ → Agent refactored more than intended. See [Quality Gate Configuration](quality-gate-config.md).
335
+
336
+ **❌ High Thinking Ratio**
337
+ ```bash
338
+ jq '.statistics.thinking_ratio' /agents/kaseki-results/kaseki-1/pi-summary.json
339
+ # Output: 0.95 (95% reasoning vs output)
340
+ ```
341
+ → Agent was confused or struggling. Check prompt clarity.
342
+
343
+ **❌ Validation Failed**
344
+ ```bash
345
+ grep -i "fail\|error" /agents/kaseki-results/kaseki-1/result-summary.md
346
+ # Output: ✗ Tests failed (2 failures)
347
+ ```
348
+ → Agent made breaking changes. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 5.
349
+
350
+ **❌ Secret Detected**
351
+ ```bash
352
+ cat /agents/kaseki-results/kaseki-1/secret-scan.log
353
+ # Output: Found sk-or-abc123 in pi-events.jsonl
354
+ ```
355
+ → Credential leaked. See [Workflow Diagnosis](workflow-diagnosis.md) — Pattern 6.
356
+
357
+ ### Green Flags
358
+
359
+ **✓ Quick Completion** (< 10 min)
360
+ - Agent understood task immediately
361
+ - Task was straightforward
362
+ - Validation was fast
363
+
364
+ **✓ Minimal Changes** (< 5 KB diff)
365
+ - Well-scoped task
366
+ - Agent made surgical edits
367
+ - Low risk of side effects
368
+
369
+ **✓ Low Token Usage** (< 5k total)
370
+ - Efficient prompt
371
+ - Straightforward task
372
+ - Good model choice
373
+
374
+ **✓ Balanced Thinking Ratio** (0.5–0.7)
375
+ - Agent confident in approach
376
+ - Some reasoning but not excessive
377
+ - Not rushed
378
+
379
+ **✓ All Tests Passed**
380
+ - Agent validated changes thoroughly
381
+ - No regressions introduced
382
+ - High confidence in changes
383
+
384
+ ---
385
+
386
+ ## Comparison & Baselines
387
+
388
+ ### Comparing Multiple Runs
389
+
390
+ ```bash
391
+ # Compare timings across runs
392
+ for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
393
+ echo "=== $(basename $run) ==="
394
+ cat "$run/metadata.json" | jq '{duration_seconds, exit_codes}'
395
+ done
396
+
397
+ # Calculate average duration
398
+ for run in /agents/kaseki-results/kaseki-{1,2,3,4,5}/; do
399
+ cat "$run/metadata.json" | jq '.duration_seconds'
400
+ done | awk '{sum+=$1; count++} END {print "Average: " sum/count "s"}'
401
+ ```
402
+
403
+ ### Establishing a Baseline
404
+
405
+ For a specific repo or task type, establish a baseline:
406
+
407
+ ```bash
408
+ # Collect metrics across 5 successful runs
409
+ for i in {1..5}; do
410
+ TASK="Fix parser bug" ./run-kaseki.sh kaseki-baseline-$i
411
+ done
412
+
413
+ # Analyze baseline
414
+ for run in /agents/kaseki-results/kaseki-baseline-*/; do
415
+ jq '{duration: .duration_seconds, tokens: .statistics.total_tokens, files: .files_modified}' \
416
+ "$run/pi-summary.json"
417
+ done | jq -s 'add / length'
418
+
419
+ # Output (average):
420
+ # {
421
+ # "duration": 900, # 15 minutes avg
422
+ # "tokens": 7000, # 7k tokens avg
423
+ # "files": 2.4 # 2-3 files avg
424
+ # }
425
+ ```
426
+
427
+ **Use Baseline for**:
428
+ - Detecting anomalies (run taking 2x longer than baseline)
429
+ - Optimization targets (current 900s, target 600s)
430
+ - Model/config comparison (compare baselines before/after changes)
431
+
432
+ ---
433
+
434
+ ## Detailed Analysis Examples
435
+
436
+ ### Example 1: Performance Slowdown
437
+
438
+ **Observation**: Recent runs are 30% slower than baseline
439
+
440
+ **Analysis Steps**:
441
+
442
+ 1. **Gather Baselines**:
443
+ ```bash
444
+ # Baseline (last month)
445
+ for run in /agents/kaseki-results/kaseki-{1..10}/; do
446
+ jq '.duration_seconds' "$run/metadata.json"
447
+ done | awk '{sum+=$1} END {print "Avg: " sum/NR}'
448
+ # Output: Avg: 900
449
+
450
+ # Recent runs (this week)
451
+ for run in /agents/kaseki-results/kaseki-{91..100}/; do
452
+ jq '.duration_seconds' "$run/metadata.json"
453
+ done | awk '{sum+=$1} END {print "Avg: " sum/NR}'
454
+ # Output: Avg: 1170 (30% slower!)
455
+ ```
456
+
457
+ 2. **Isolate the Bottleneck**:
458
+ ```bash
459
+ # Check validation timings
460
+ for run in /agents/kaseki-results/kaseki-{91..100}/; do
461
+ echo "=== $(basename $run) ==="
462
+ awk '{print $1, $2}' "$run/validation-timings.tsv"
463
+ done | column -t
464
+
465
+ # Output shows npm ci increased from 30s → 120s
466
+ ```
467
+
468
+ 3. **Root Cause**:
469
+ ```bash
470
+ # Check if lock files are changing
471
+ for run in /agents/kaseki-results/kaseki-{91..100}/; do
472
+ if grep -q package-lock.json "$run/git.diff"; then
473
+ echo "$(basename $run): Lock file modified"
474
+ fi
475
+ done
476
+ # Output: 8 of 10 runs modified lock file
477
+ # → Cache misses due to dependency changes
478
+ ```
479
+
480
+ 4. **Solution**:
481
+ - See [Dependency Cache Optimization](dependency-cache-optimization.md) for cache seeding strategy
482
+ - Or update image seed cache with current lock file
483
+
484
+ ### Example 2: Unexpected Large Diff
485
+
486
+ **Observation**: One run has 50 KB diff, others have 2–5 KB
487
+
488
+ ```bash
489
+ # Identify outlier
490
+ for run in /agents/kaseki-results/kaseki-{81..90}/; do
491
+ size=$(wc -c < "$run/git.diff")
492
+ echo "$(basename $run): $size bytes"
493
+ done
494
+ # Output:
495
+ # kaseki-81: 3204
496
+ # kaseki-82: 4182
497
+ # kaseki-83: 2891
498
+ # kaseki-84: 50000 ← Outlier!
499
+ ```
500
+
501
+ **Analysis**:
502
+ ```bash
503
+ # Check what the task was for kaseki-84
504
+ cat /agents/kaseki-results/kaseki-84/pi-summary.json | jq '.task'
505
+
506
+ # Check changed files
507
+ cat /agents/kaseki-results/kaseki-84/changed-files.txt
508
+
509
+ # Check git diff for clues
510
+ head -50 /agents/kaseki-results/kaseki-84/git.diff
511
+
512
+ # Was it legitimate? Check if tests passed
513
+ cat /agents/kaseki-results/kaseki-84/result-summary.md | grep -i "validation\|test"
514
+ ```
515
+
516
+ **Interpretation**:
517
+ - If tests passed: Agent did more refactoring than expected (document this)
518
+ - If tests failed: Investigate what went wrong
519
+
520
+ ---
521
+
522
+ ## Metrics for Dashboards
523
+
524
+ ### Key Metrics to Track
525
+
526
+ ```json
527
+ {
528
+ "success_rate": "95%",
529
+ "avg_duration_seconds": 900,
530
+ "avg_tokens_per_run": 7000,
531
+ "avg_diff_size_bytes": 3500,
532
+ "cache_hit_rate": "78%",
533
+ "validation_pass_rate": "99%",
534
+ "secret_detections": 0,
535
+ "allowlist_violations": 1
536
+ }
537
+ ```
538
+
539
+ ### Calculating Metrics
540
+
541
+ ```bash
542
+ #!/bin/bash
543
+ # Calculate dashboard metrics
544
+
545
+ SUCCESS_COUNT=$(find /agents/kaseki-results -name "exit_code" -exec grep -l "^0$" {} \; | wc -l)
546
+ TOTAL_COUNT=$(find /agents/kaseki-results -name "exit_code" | wc -l)
547
+
548
+ SUCCESS_RATE=$((SUCCESS_COUNT * 100 / TOTAL_COUNT))
549
+
550
+ AVG_DURATION=$(find /agents/kaseki-results -name "metadata.json" \
551
+ -exec jq '.duration_seconds' {} \; | awk '{sum+=$1} END {print sum/NR}')
552
+
553
+ AVG_TOKENS=$(find /agents/kaseki-results -name "pi-summary.json" \
554
+ -exec jq '.statistics.total_tokens' {} \; | awk '{sum+=$1} END {print sum/NR}')
555
+
556
+ CACHE_HITS=$(find /agents/kaseki-results -name "validation-timings.tsv" \
557
+ -exec grep "npm ci" {} \; | awk '$2 < 30' | wc -l)
558
+
559
+ TOTAL_NPM=$(find /agents/kaseki-results -name "validation-timings.tsv" \
560
+ -exec grep "npm ci" {} \; | wc -l)
561
+
562
+ CACHE_HIT_RATE=$((CACHE_HITS * 100 / TOTAL_NPM))
563
+
564
+ echo "Success Rate: ${SUCCESS_RATE}%"
565
+ echo "Average Duration: ${AVG_DURATION}s"
566
+ echo "Average Tokens: ${AVG_TOKENS}"
567
+ echo "Cache Hit Rate: ${CACHE_HIT_RATE}%"
568
+ ```
569
+
570
+ ---
571
+
572
+ ## Related Skills & Docs
573
+
574
+ - [Workflow Diagnosis](workflow-diagnosis.md) — Investigate anomalies and failures
575
+ - [kaseki-report.js](../../kaseki-report.js) — Report generation logic
576
+ - [CLAUDE.md](../../CLAUDE.md) — Architecture and artifact structure