@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,360 @@
1
+ ---
2
+ name: prompt-engineering
3
+ description: Composing, testing, and validating TASK_PROMPT for kaseki agent runs
4
+ tags: [kaseki, prompts, task-design, security]
5
+ relatedSkills: [quality-gate-config, workflow-diagnosis]
6
+ ---
7
+
8
+ # Prompt Engineering for Kaseki Agent
9
+
10
+ This skill guides the design, testing, and security review of `TASK_PROMPT` — the instruction given to the Pi coding agent for isolated code changes.
11
+
12
+ ## Overview
13
+
14
+ **When to Use**:
15
+ - Designing a new kaseki task (bug fix, refactor, feature)
16
+ - Testing prompt clarity or scope before a run
17
+ - Security-reviewing prompts to prevent information leakage
18
+ - Validating that agent output matches expectations
19
+
20
+ **Key Concepts**:
21
+ - Task prompts define what the agent should do and boundaries
22
+ - Prompts must be scoped (avoid over-ambition)
23
+ - Security is critical: never include env vars, secrets, or sensitive paths
24
+ - Validation happens post-run via pi-summary.json analysis
25
+
26
+ ---
27
+
28
+ ## Task Prompt Structure
29
+
30
+ A well-formed `TASK_PROMPT` has three parts:
31
+
32
+ ### 1. **Problem Statement** (2–3 sentences)
33
+ Clearly describe *what* is broken or needs changing.
34
+
35
+ ```
36
+ The normalizeRole function in src/lib/role.ts does not safely handle
37
+ non-string Name inputs. When Name is a number or object, it causes
38
+ a runtime error. Fix this to accept any input type and convert it safely.
39
+ ```
40
+
41
+ **Best Practices**:
42
+ - ✓ Specific and actionable (e.g., "function X in file Y")
43
+ - ✓ Context about impact (why it matters)
44
+ - ✗ Vague or exploratory (e.g., "improve performance")
45
+ - ✗ Multiple unrelated problems (tackle one at a time)
46
+
47
+ ### 2. **Scope Constraints** (2–4 bullet points)
48
+ Define *which files* the agent can and should change.
49
+
50
+ ```
51
+ - Only modify src/lib/role.ts (implementation)
52
+ - Update tests/role.test.ts to cover new cases
53
+ - Do NOT modify other files or dependencies
54
+ - Do NOT refactor unrelated code
55
+ ```
56
+
57
+ **Best Practices**:
58
+ - ✓ Explicit file allowlist (easier to validate)
59
+ - ✓ Clear "do not" constraints (prevents scope creep)
60
+ - ✗ Overly broad changes (e.g., "fix all type issues in src/")
61
+ - ✗ Ambiguous patterns (be specific: files or directories)
62
+
63
+ ### 3. **Validation Criteria** (3–5 measurable checks)
64
+ Define what success looks like.
65
+
66
+ ```
67
+ - Tests must pass: npm run test -- tests/role.test.ts
68
+ - Type checking must pass: npm run check
69
+ - No other tests should break
70
+ - Code style must match existing patterns (reviewed visually)
71
+ ```
72
+
73
+ **Best Practices**:
74
+ - ✓ Measurable and automated where possible
75
+ - ✓ Specific test commands or files
76
+ - ✗ Subjective criteria alone (e.g., "code should be readable")
77
+ - ✗ Validation commands that hang or timeout
78
+
79
+ ---
80
+
81
+ ## Security Guardrails Checklist
82
+
83
+ **Before submitting a prompt, verify**:
84
+
85
+ - [ ] **No environment variables or secrets**
86
+ - ✗ "Use OPENROUTER_API_KEY to…"
87
+ - ✓ "The Pi CLI will be available"
88
+
89
+ - [ ] **No file paths to sensitive data**
90
+ - ✗ "/home/user/.ssh/id_rsa"
91
+ - ✗ "~/.config/credentials"
92
+ - ✓ Paths within the cloned repo only
93
+
94
+ - [ ] **No credential patterns**
95
+ - ✗ API key examples (sk-or-*, sk-ant-*, etc.)
96
+ - ✗ Bearer tokens or JWT tokens
97
+ - ✓ Mention "API key" without examples
98
+
99
+ - [ ] **No internal organizational details**
100
+ - ✗ Internal service URLs, IP addresses
101
+ - ✗ Org-specific naming conventions
102
+ - ✓ Public repo references
103
+
104
+ - [ ] **No version-specific constraints** (unless critical)
105
+ - ✗ "Must use Node 22.22.2" (this is already in the image)
106
+ - ✓ "Must support Node 20+"
107
+
108
+ **Post-Run Secret Scan**:
109
+ Kaseki automatically scans outputs for `sk-or-*` patterns. Review `secret-scan.log` in results.
110
+
111
+ ---
112
+
113
+ ## Common Prompt Pitfalls
114
+
115
+ ### ❌ Over-Scoped Task
116
+ ```
117
+ "Refactor the entire src/lib/ directory to improve type safety
118
+ and performance. Update all 50+ test files."
119
+ ```
120
+
121
+ **Problem**: Too large; agent may timeout or produce oversized diff.
122
+ **Fix**: Target one module; save refactoring for follow-up.
123
+
124
+ ### ❌ Vague Success Criteria
125
+ ```
126
+ "Make the code better. Tests should pass and code should be readable."
127
+ ```
128
+
129
+ **Problem**: "Better" and "readable" are subjective.
130
+ **Fix**: "Fix bug X so tests pass; ensure no regressions in tests/other.test.ts."
131
+
132
+ ### ❌ Implicit Dependencies
133
+ ```
134
+ "The user.ts file should handle both user IDs and email addresses."
135
+ ```
136
+
137
+ **Problem**: "User IDs and email addresses" undefined; type system unclear.
138
+ **Fix**: "user.ts `getUserBy()` should accept `userId: string | number` and return User | null. Update types/user.ts and tests accordingly."
139
+
140
+ ### ❌ Multi-Module Edits Without Allowlist
141
+ ```
142
+ "Improve the authentication system."
143
+ ```
144
+
145
+ **Problem**: Unbounded scope; agent could change auth-related code across src/.
146
+ **Fix**: "Fix the bug in src/auth/login.ts where sessions expire immediately (line 45). Only modify src/auth/login.ts and tests/auth.test.ts. Do NOT change middleware or other modules."
147
+
148
+ ### ❌ No Validation Commands
149
+ ```
150
+ "Tests should pass."
151
+ ```
152
+
153
+ **Problem**: Which tests? How do we verify?
154
+ **Fix**: "Run: npm run test -- tests/auth.test.ts. All tests must pass with 0 failures."
155
+
156
+ ---
157
+
158
+ ## Example Prompts
159
+
160
+ ### Example 1: Bug Fix (Small Scope)
161
+
162
+ ```
163
+ PROBLEM:
164
+ The getUsername() function in src/utils/string.ts crashes when given
165
+ null or undefined. It should return an empty string for null/undefined
166
+ instead of throwing.
167
+
168
+ SCOPE:
169
+ - Modify src/utils/string.ts (fix getUsername function)
170
+ - Update tests/utils/string.test.ts (add null/undefined test cases)
171
+ - Do NOT change other utility functions or modules
172
+
173
+ VALIDATION:
174
+ - npm run test -- tests/utils/string.test.ts (all tests pass)
175
+ - npm run check (no type errors)
176
+ - Code must follow existing conventions (checked visually)
177
+ ```
178
+
179
+ ### Example 2: Feature Addition (Bounded Scope)
180
+
181
+ ```
182
+ PROBLEM:
183
+ The Role class currently supports role names only (string). Add support
184
+ for role IDs (numbers) so callers can use either identifier type.
185
+
186
+ SCOPE:
187
+ - Modify src/lib/role.ts (Role class and helper functions)
188
+ - Modify types/role.ts (TypeScript types)
189
+ - Update tests/role.test.ts (new test cases for ID support)
190
+ - Do NOT refactor unrelated code or modify other files
191
+
192
+ VALIDATION:
193
+ - npm run test -- tests/role.test.ts (all tests pass, no regressions)
194
+ - npm run check (no type errors)
195
+ - npm run build (build succeeds)
196
+ - Diff size must not exceed 500 lines (scope check)
197
+ ```
198
+
199
+ ### Example 3: Refactor (Constrained Change)
200
+
201
+ ```
202
+ PROBLEM:
203
+ The parseConfig() function in src/config.ts uses nested if/else logic
204
+ that's hard to follow. Simplify it using a switch statement while
205
+ preserving exact behavior.
206
+
207
+ SCOPE:
208
+ - Modify src/config.ts (parseConfig function only)
209
+ - Modify tests/config.test.ts (ensure all test cases still pass)
210
+ - Do NOT add new features or change function signatures
211
+
212
+ VALIDATION:
213
+ - npm run test -- tests/config.test.ts (all tests pass)
214
+ - npm run check (no type errors)
215
+ - Behavior must be identical: compare inputs/outputs before/after
216
+ ```
217
+
218
+ ---
219
+
220
+ ## Dry-Run Validation Workflow
221
+
222
+ Before running a real kaseki task on your target repo:
223
+
224
+ ### Step 1: Prepare Locally
225
+ ```bash
226
+ # Clone and inspect the target repo
227
+ git clone https://github.com/org/repo.git
228
+ cd repo
229
+ git checkout main # or your target branch
230
+
231
+ # Install dependencies
232
+ npm ci
233
+
234
+ # Run validation commands that the agent will run
235
+ npm run check
236
+ npm run test
237
+ npm run build
238
+ ```
239
+
240
+ ### Step 2: Design the Prompt
241
+ Write your prompt following the 3-part structure above. Save it in a file:
242
+ ```bash
243
+ cat > /tmp/task-prompt.txt << 'EOF'
244
+ PROBLEM: ...
245
+ SCOPE: ...
246
+ VALIDATION: ...
247
+ EOF
248
+ ```
249
+
250
+ ### Step 3: Sanity Check
251
+ Verify manually that the task is achievable:
252
+ ```bash
253
+ # Can I make this change manually in 5 minutes?
254
+ # Do all validation commands work without the change?
255
+ # Is the scope clear and bounded?
256
+ ```
257
+
258
+ ### Step 4: Use --doctor to Check Setup
259
+ ```bash
260
+ REPO_URL=https://github.com/org/repo \
261
+ ./run-kaseki.sh --doctor
262
+ ```
263
+
264
+ This verifies API key, Docker, and Pi CLI without running the agent.
265
+
266
+ ### Step 5: Run a Test Kaseki Instance
267
+ ```bash
268
+ OPENROUTER_API_KEY=sk-or-... \
269
+ REPO_URL=https://github.com/org/repo \
270
+ TASK_PROMPT="$(cat /tmp/task-prompt.txt)" \
271
+ ./run-kaseki.sh kaseki-test-1
272
+ ```
273
+
274
+ ### Step 6: Analyze Results
275
+ Check `/agents/kaseki-results/kaseki-test-1/`:
276
+
277
+ ```bash
278
+ # Quick summary
279
+ cat result-summary.md
280
+
281
+ # Event details
282
+ cat pi-summary.json | jq '.statistics'
283
+
284
+ # Did the agent understand the task?
285
+ cat pi-events.jsonl | jq '.type' | sort | uniq -c
286
+
287
+ # Check diff size
288
+ wc -c < git.diff
289
+ ```
290
+
291
+ **Success Indicators**:
292
+ - ✓ `pi-summary.json` shows "status": "completed"
293
+ - ✓ Diff size is reasonable (not 0 bytes, not 10+ MB)
294
+ - ✓ Changed files match your expectations
295
+ - ✓ All validation commands passed
296
+ - ✓ No secret leaks in `secret-scan.log`
297
+
298
+ **If Something's Wrong**:
299
+ - See [Workflow Diagnosis](workflow-diagnosis.md) for root-cause analysis
300
+ - Refine prompt and retry with a new kaseki instance (e.g., kaseki-test-2)
301
+
302
+ ---
303
+
304
+ ## Security Review Checklist
305
+
306
+ Before sharing a prompt or running it against a sensitive repo:
307
+
308
+ **Content Review**:
309
+ - [ ] No API keys, passwords, or tokens in examples
310
+ - [ ] No internal URLs or IP addresses
311
+ - [ ] No org-specific names or secrets
312
+ - [ ] No file paths outside the target repo
313
+ - [ ] No version-pinning (Node, npm, Pi CLI)
314
+
315
+ **Scope Review**:
316
+ - [ ] Allowlist is explicit (files, not wildcards)
317
+ - [ ] Constraints prevent unintended changes
318
+ - [ ] Validation commands are safe to run
319
+ - [ ] No dangerous shell commands in validation
320
+
321
+ **Post-Run Review**:
322
+ - [ ] Secret scan passes (no sk-or-* patterns found)
323
+ - [ ] Changed files are within allowlist
324
+ - [ ] Diff size is within expected range
325
+ - [ ] No credentials in pi-events.jsonl or pi-summary.json
326
+
327
+ ---
328
+
329
+ ## Tips for Better Prompts
330
+
331
+ 1. **Be Specific, Not Generic**
332
+ - ✗ "Fix the bug in authentication"
333
+ - ✓ "Fix the SessionTimeout bug in src/auth/session.ts (line 42)"
334
+
335
+ 2. **Use Code References**
336
+ - ✗ "Improve error handling"
337
+ - ✓ "Wrap the try/catch in src/db.ts (lines 12–25) to handle connection timeouts"
338
+
339
+ 3. **Show Examples When Helpful**
340
+ - Include input/output examples for parsing or transformation logic
341
+ - But avoid secrets or real user data
342
+
343
+ 4. **Keep Validation Deterministic**
344
+ - ✓ `npm run test -- tests/file.test.ts` (runs specific test file)
345
+ - ✗ `npm test` (might run all tests, could be slow)
346
+
347
+ 5. **Test Locally First**
348
+ - Make the change yourself in 5 minutes
349
+ - Verify all validation commands pass
350
+ - Then give it to the agent
351
+
352
+ ---
353
+
354
+ ## Related Skills & Docs
355
+
356
+ - [Quality Gate Configuration](quality-gate-config.md) — Set allowlists and diff limits for your task
357
+ - [Workflow Diagnosis](workflow-diagnosis.md) — Analyze task results and troubleshoot failures
358
+ - [Test Automation](test-automation.md) — Ensure validation tests are robust
359
+ - [CLAUDE.md](../../CLAUDE.md) — Architecture and defaults (background reading)
360
+ - [CONTRIBUTING.md](../../CONTRIBUTING.md) — Contribution guidelines and validation rules