@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,533 @@
1
+ # Kaseki Task Prompt Templates & Best Practices
2
+
3
+ This guide shows how to write **effective task prompts** that minimize scope creep and unintended file changes. Combined with the allowlist, these templates help keep agent modifications focused.
4
+
5
+ ## What is Scope Creep?
6
+
7
+ **Scope Creep:** When an agent makes changes beyond what you asked for.
8
+
9
+ ```
10
+ Request: "Fix the parser bug that fails on empty input"
11
+
12
+ Without constraints:
13
+ ✅ Fixes src/lib/parser.ts
14
+ ❌ Also refactors unrelated code in src/lib/utils.ts
15
+ ❌ Updates docs/ARCHITECTURE.md
16
+ ❌ Changes package.json
17
+ ❌ Reformats random files
18
+
19
+ With constraints (template):
20
+ ✅ Fixes src/lib/parser.ts
21
+ ✅ Adds test case to tests/parser.validation.ts
22
+ ❌ Everything else prevented by allowlist
23
+ ```
24
+
25
+ ## Template Structure
26
+
27
+ Effective prompts contain:
28
+
29
+ 1. **Clear Task Goal** — what to do, not how
30
+ 2. **Scope Boundaries** — what files to touch/avoid
31
+ 3. **Success Criteria** — how to verify it works
32
+ 4. **Constraints** — what not to do
33
+
34
+ ### Basic Template
35
+
36
+ ```
37
+ [GOAL]
38
+ Fix [specific behavior] in [file(s)].
39
+
40
+ [SCOPE]
41
+ Restrict changes to:
42
+ - [file/directory pattern]
43
+ - [file/directory pattern]
44
+
45
+ [CONSTRAINTS]
46
+ - Do not modify [adjacent areas]
47
+ - Do not update [build/config files]
48
+ - Do not refactor [unrelated code]
49
+
50
+ [SUCCESS]
51
+ The fix must:
52
+ - [criterion 1]
53
+ - [criterion 2]
54
+ ```
55
+
56
+ ## Specific Prompt Templates
57
+
58
+ ### 1. Bug Fix in Specific File
59
+
60
+ **When:** Fix a bug in one file, minimal test changes
61
+
62
+ ```
63
+ Fix the [specific bug description] in `[file.ts]`.
64
+
65
+ Restrict changes to:
66
+ - [file.ts]
67
+ - tests/[corresponding test file.ts]
68
+
69
+ Do NOT:
70
+ - Modify other files in this module
71
+ - Refactor surrounding code
72
+ - Update types or interfaces
73
+ - Add new dependencies
74
+
75
+ The fix must:
76
+ - Correctly handle [edge case]
77
+ - Preserve existing behavior for [scenario]
78
+ - Pass all existing tests
79
+ ```
80
+
81
+ **Example:**
82
+
83
+ ```
84
+ Fix the parser bug that fails on empty input in `src/lib/parser.ts`.
85
+
86
+ Restrict changes to:
87
+ - src/lib/parser.ts
88
+ - tests/parser.validation.ts
89
+
90
+ Do NOT:
91
+ - Modify src/lib/utils.ts or other modules
92
+ - Refactor the parsing logic
93
+ - Add new functions or exports
94
+ - Change package.json
95
+
96
+ The fix must:
97
+ - Return a valid AST for empty input
98
+ - Pass all existing tests
99
+ - Handle whitespace-only input identically to empty input
100
+ ```
101
+
102
+ **Recommended Allowlist:**
103
+
104
+ ```bash
105
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/parser.ts tests/parser.validation.ts"
106
+ ```
107
+
108
+ ### 2. Utility/Helper Function Fix
109
+
110
+ **When:** Fix a utility function, update related tests
111
+
112
+ ```
113
+ Fix the [function] in `[utils file]` to [behavior change].
114
+
115
+ Restrict changes to:
116
+ - src/lib/[util-name]/**
117
+ - src/utils/[util-name]/**
118
+ - tests/[util-name]/**
119
+
120
+ Do NOT:
121
+ - Modify unrelated utility functions
122
+ - Update types outside of [util-name] directory
123
+ - Add new public exports beyond fixing [function]
124
+
125
+ The fix must:
126
+ - Correctly implement [spec]
127
+ - Maintain backward compatibility for [existing calls]
128
+ - Include tests for the specific case
129
+ ```
130
+
131
+ **Example:**
132
+
133
+ ```
134
+ Fix the `normalizeEmail()` function in `src/lib/email-utils.ts` to properly validate email format.
135
+
136
+ Restrict changes to:
137
+ - src/lib/email-utils.ts
138
+ - tests/email-utils.test.ts
139
+
140
+ Do NOT:
141
+ - Modify unrelated functions like `sanitizeEmail` or `parseEmail`
142
+ - Change the function signature
143
+ - Add new exports
144
+
145
+ The fix must:
146
+ - Reject emails with spaces or special chars (except @.-)
147
+ - Accept valid emails per RFC 5322 (basic form)
148
+ - Pass all existing validation tests
149
+ ```
150
+
151
+ **Recommended Allowlist:**
152
+
153
+ ```bash
154
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/email-utils.ts tests/email-utils.test.ts"
155
+ ```
156
+
157
+ ### 3. React/Vue Component Implementation
158
+
159
+ **When:** Create or modify a UI component
160
+
161
+ ```
162
+ [Implement|Update] the [ComponentName] component in `[path]`.
163
+
164
+ [Description of component behavior and props]
165
+
166
+ Restrict changes to:
167
+ - src/components/[component-name]/
168
+ - src/hooks/[related hooks]/
169
+ - tests/components/[component-name]/
170
+ - src/lib/ui/** (only if adding UI utilities)
171
+
172
+ Do NOT:
173
+ - Modify other components
174
+ - Update global styles in src/app/globals.css
175
+ - Change layout or navigation structure
176
+ - Add new pages or routes
177
+
178
+ The component must:
179
+ - Accept [prop1], [prop2] as inputs
180
+ - Support [feature1] and [feature2]
181
+ - Be accessible (ARIA labels where needed)
182
+ - Include tests with [test1], [test2] cases
183
+ ```
184
+
185
+ **Example:**
186
+
187
+ ```
188
+ Implement the PricingCard component in `src/components/pricing-card`.
189
+
190
+ The component displays a pricing tier with plan name, price, features list, and CTA button.
191
+ Props: title, price, currency, features (string[]), onSelect (callback).
192
+
193
+ Restrict changes to:
194
+ - src/components/pricing-card/
195
+ - src/hooks/ (only if creating new hooks for this component)
196
+ - tests/components/pricing-card/
197
+
198
+ Do NOT:
199
+ - Modify other components
200
+ - Update global styles
201
+ - Change the pricing page layout
202
+
203
+ The component must:
204
+ - Display price in the specified currency
205
+ - Render features as a bulleted list
206
+ - Include an "Select Plan" button that calls onSelect
207
+ - Be responsive (mobile and desktop)
208
+ - Have unit tests for rendering, currency formatting, and button click
209
+ ```
210
+
211
+ **Recommended Allowlist:**
212
+
213
+ ```bash
214
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/components/pricing-card/** src/hooks/** tests/components/pricing-card/**"
215
+ ```
216
+
217
+ ### 4. API Endpoint
218
+
219
+ **When:** Implement a new API route/handler
220
+
221
+ ```
222
+ [Implement|Fix] the `[METHOD] /api/[route]` endpoint.
223
+
224
+ [Description of endpoint behavior, request/response format]
225
+
226
+ Restrict changes to:
227
+ - src/app/api/[route]/route.ts
228
+ - src/lib/[route-utils]/** (utilities for this route)
229
+ - src/types/api.ts (if adding request/response types)
230
+ - tests/api/[route].test.ts
231
+
232
+ Do NOT:
233
+ - Modify other routes or endpoints
234
+ - Change authentication/middleware globally
235
+ - Update database schema
236
+ - Add new environment variables without documenting
237
+
238
+ The endpoint must:
239
+ - Accept [request format/params]
240
+ - Return [response format] on success
241
+ - Return [error response] on [failure case]
242
+ - Validate [specific inputs]
243
+ - Handle [edge case]
244
+ ```
245
+
246
+ **Example:**
247
+
248
+ ```
249
+ Implement the POST /api/users endpoint.
250
+
251
+ This endpoint creates a new user with email, password, and optional name.
252
+ Request: { email, password, name? }
253
+ Response: { userId, email, createdAt } or { error, status }
254
+
255
+ Restrict changes to:
256
+ - src/app/api/users/route.ts
257
+ - src/lib/user-service.ts
258
+ - src/types/api.ts (only for User types)
259
+ - tests/api/users.test.ts
260
+
261
+ Do NOT:
262
+ - Modify other endpoints or middleware
263
+ - Change authentication globally
264
+ - Update the database schema
265
+
266
+ The endpoint must:
267
+ - Validate email format
268
+ - Hash password (use bcrypt)
269
+ - Return 201 with user object on success
270
+ - Return 400 with error message on invalid input
271
+ - Return 409 if email already exists
272
+ - Include tests for valid input, duplicate email, invalid email
273
+ ```
274
+
275
+ **Recommended Allowlist:**
276
+
277
+ ```bash
278
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/app/api/users/** src/lib/user-service.ts src/types/api.ts tests/api/users.test.ts"
279
+ ```
280
+
281
+ ### 5. Configuration or Build Fix
282
+
283
+ **When:** Fix a configuration issue (tsconfig, jest, etc.)
284
+
285
+ ```
286
+ Fix [config issue description] in `[config file]`.
287
+
288
+ Restrict changes to:
289
+ - [config file]
290
+ - [related source files affected by the fix]
291
+ - tests/ (if config changes affect test setup)
292
+
293
+ Do NOT:
294
+ - Modify unrelated configuration files
295
+ - Change build process for other targets
296
+ - Update source code beyond what's needed for the fix
297
+
298
+ The fix must:
299
+ - Correctly resolve [issue]
300
+ - Not break [other feature]
301
+ - Be compatible with [environment/version]
302
+ ```
303
+
304
+ **Example:**
305
+
306
+ ```
307
+ Fix TypeScript compilation error in tsconfig.json where async/await doesn't transpile for ES2020.
308
+
309
+ Restrict changes to:
310
+ - tsconfig.json
311
+ - src/lib/async-utils.ts (if implementation changes needed)
312
+
313
+ Do NOT:
314
+ - Modify jest.config.ts or other configs
315
+ - Change build process
316
+
317
+ The fix must:
318
+ - Compile src/lib/async-utils.ts without errors
319
+ - Target ES2020 as intended
320
+ - Preserve all other compiler options
321
+ ```
322
+
323
+ **Recommended Allowlist:**
324
+
325
+ ```bash
326
+ KASEKI_CHANGED_FILES_ALLOWLIST="tsconfig.json src/lib/async-utils.ts"
327
+ ```
328
+
329
+ ### 6. Large Refactor (Multiple Files)
330
+
331
+ **When:** Refactor a feature across multiple files
332
+
333
+ ```
334
+ Refactor [feature name] to [desired outcome].
335
+
336
+ Scope:
337
+ - Modify [module 1], [module 2], [module 3] to [specific changes]
338
+ - Update [test modules] correspondingly
339
+
340
+ Do NOT:
341
+ - Change public API contracts
342
+ - Modify unrelated features
343
+ - Add new endpoints or exports
344
+ - Update documentation outside of [specific area]
345
+
346
+ The refactor must:
347
+ - Preserve all external behavior
348
+ - Pass all existing tests
349
+ - Move [X] logic from [location A] to [location B]
350
+ - Reduce [metric] by improving [specific aspect]
351
+ ```
352
+
353
+ **Example:**
354
+
355
+ ```
356
+ Refactor the auth module to extract session utils into a separate file.
357
+
358
+ Scope:
359
+ - Extract session logic from src/lib/auth.ts to src/lib/session-utils.ts
360
+ - Update src/lib/auth.ts to import from session-utils.ts
361
+ - Update tests/auth.test.ts and tests/session-utils.test.ts
362
+
363
+ Do NOT:
364
+ - Change public API exports from src/lib/auth.ts
365
+ - Modify middleware or route handlers
366
+ - Update environment variable schema
367
+
368
+ The refactor must:
369
+ - Preserve all existing behavior
370
+ - Pass all tests (no functionality change)
371
+ - Make session utilities reusable
372
+ - Improve code organization
373
+ ```
374
+
375
+ **Recommended Allowlist:**
376
+
377
+ ```bash
378
+ KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/auth.ts src/lib/session-utils.ts tests/auth.test.ts tests/session-utils.test.ts"
379
+ ```
380
+
381
+ ## Anti-Patterns: What NOT to Do
382
+
383
+ ### ❌ Vague Scope
384
+
385
+ ```
386
+ "Fix the bug"
387
+ "Improve the code"
388
+ "Make it better"
389
+ ```
390
+
391
+ **Why:** Agent doesn't know what files to touch → scope creep.
392
+
393
+ ### ✅ Better
394
+
395
+ ```
396
+ "Fix the parser null-reference bug in src/lib/parser.ts when input is null"
397
+ "Improve type safety by adding strict null checks in src/lib/validation.ts"
398
+ "Make JSON parsing faster by caching compiled schemas in src/lib/json-cache.ts"
399
+ ```
400
+
401
+ ---
402
+
403
+ ### ❌ Vague Constraints
404
+
405
+ ```
406
+ "Don't break anything"
407
+ "Keep it simple"
408
+ "Don't over-engineer"
409
+ ```
410
+
411
+ **Why:** Agent interprets differently than you; no clear boundaries.
412
+
413
+ ### ✅ Better
414
+
415
+ ```
416
+ "Do not modify src/utils/ or src/components/"
417
+ "Keep the function signature the same"
418
+ "Do not add new dependencies to package.json"
419
+ ```
420
+
421
+ ---
422
+
423
+ ### ❌ Over-Specification
424
+
425
+ ```
426
+ "Change line 23 from X to Y. Then on line 45 change Z to W. Then..."
427
+ ```
428
+
429
+ **Why:** Too prescriptive; prevents legitimate improvements; locks you into one solution.
430
+
431
+ ### ✅ Better
432
+
433
+ ```
434
+ "Fix the null-reference error on line 23. The issue occurs when
435
+ input is null. Use a null-coalescing operator or early return."
436
+ ```
437
+
438
+ ---
439
+
440
+ ### ❌ Multiple Unrelated Tasks
441
+
442
+ ```
443
+ "Fix the parser bug AND implement the new button component AND add metrics"
444
+ ```
445
+
446
+ **Why:** Scope explosion; makes it hard to define allowlist and verify each fix.
447
+
448
+ ### ✅ Better
449
+
450
+ ```
451
+ "Fix the parser bug in src/lib/parser.ts that fails on empty input.
452
+ Run this first. Then in a separate kaseki run: implement the new button component."
453
+ ```
454
+
455
+ ## Combining Prompts with Allowlist
456
+
457
+ **The Power Combination:**
458
+
459
+ 1. **Write a clear, scoped prompt** using a template above
460
+ 2. **Set a matching allowlist** that covers those specific files
461
+ 3. **Run kaseki** with both settings
462
+
463
+ **Example:**
464
+
465
+ ```bash
466
+ export TASK_PROMPT="Fix the normalizeRole function in src/lib/role-utils.ts \
467
+ to safely handle null FriendlyName by falling back to 'Unnamed Role'. \
468
+ Add one test case in tests/role-utils.test.ts. \
469
+ Do not modify other files or refactor."
470
+
471
+ export KASEKI_CHANGED_FILES_ALLOWLIST="src/lib/role-utils.ts tests/role-utils.test.ts"
472
+
473
+ ./run-kaseki.sh
474
+ ```
475
+
476
+ **Result:**
477
+
478
+ - Agent stays focused on the task
479
+ - Allowlist ensures no surprise changes
480
+ - Easy to review what changed (small diff)
481
+ - Easy to identify if agent drifted from instructions
482
+ - Restoration report confirms agent stayed on task
483
+
484
+ ## Troubleshooting: Agent Changed Too Many Files
485
+
486
+ ### If Prompt is Clear + Allowlist is Set + Agent Still Over-Modifies
487
+
488
+ 1. **Check restoration report** — which files were restored?
489
+
490
+ ```bash
491
+ cat /results/kaseki-N/restoration-report.md
492
+ ```
493
+
494
+ 2. **Check agent reasoning** — look at pi-summary.json
495
+
496
+ ```bash
497
+ cat /results/kaseki-N/pi-summary.json | jq '.thinking' | head -100
498
+ ```
499
+
500
+ 3. **Refine the prompt** with more explicit constraints:
501
+ - ✅ "Do not modify" specific files
502
+ - ✅ "Only change" specific functions
503
+ - ✅ "Add one test case, no more"
504
+
505
+ 4. **Consider task decomposition** — break into smaller tasks:
506
+ - Instead of: "Refactor entire module"
507
+ - Use: "Extract X function from module" + "Update imports" (separate runs)
508
+
509
+ ## Related Resources
510
+
511
+ - [docs/QUALITY_GATES.md](./QUALITY_GATES.md) — Allowlist configuration and patterns
512
+ - [scripts/suggest-allowlist.sh](../scripts/suggest-allowlist.sh) — Auto-generate allowlist from completed run
513
+ - [scripts/dry-run-allowlist.sh](../scripts/dry-run-allowlist.sh) — Preview what would be restored
514
+ - `templates/allowlist-*.txt` — Pre-built allowlist templates
515
+
516
+ ## Summary
517
+
518
+ **Good Task Prompts:**
519
+
520
+ 1. Have a **clear, specific goal** (not vague)
521
+ 2. Define **scope boundaries** (which files to touch)
522
+ 3. State **constraints** (what not to do)
523
+ 4. Include **success criteria** (how to verify)
524
+ 5. Are **focused** (one task, not multiple)
525
+
526
+ **Good Allowlist:**
527
+
528
+ 1. **Matches the prompt scope** exactly
529
+ 2. Is **as narrow as reasonable** (prevent scope creep)
530
+ 3. Is **documented** (why these files?)
531
+ 4. Can be **verified** with dry-run-allowlist.sh
532
+
533
+ **Result:** Focused, reviewable agent outputs with predictable scope.
@@ -0,0 +1,139 @@
1
+ # Validation Fix Implementation Summary
2
+
3
+ ## Issue
4
+
5
+ Kaseki-agent validation commands failed with getcwd() error on matmetrics repo:
6
+
7
+ ```
8
+ shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
9
+ Error: ENOENT: process.cwd failed
10
+ ```
11
+
12
+ All three validation commands (npm run check, test, build) failed with exit code 7.
13
+
14
+ ## Root Cause
15
+
16
+ The validation phase executed npm commands using `bash -lc` (login shell), which:
17
+
18
+ 1. Sources `/etc/profile` and `~/.bashrc` during startup
19
+ 2. Attempts to retrieve current working directory via `getcwd()` syscall
20
+ 3. In `--read-only` containers with restricted filesystem access, this fails
21
+ 4. Results in ENOENT error before any user command runs
22
+
23
+ ## Solution
24
+
25
+ Three complementary fixes applied to [kaseki-agent.sh](kaseki-agent.sh):
26
+
27
+ ### Fix 1: Use Non-Login Shell (Line 1579)
28
+
29
+ **Before:**
30
+
31
+ ```bash
32
+ bash -lc "$trimmed"
33
+ ```
34
+
35
+ **After:**
36
+
37
+ ```bash
38
+ # Use non-login shell (bash -c) to avoid initialization issues in --read-only containers
39
+ # Login shell (bash -l) sources /etc/profile and ~/.bashrc, which can fail with getcwd()
40
+ # errors when running in constrained filesystem environments (read-only root, etc.)
41
+ bash -c "$trimmed"
42
+ ```
43
+
44
+ **Impact**: Skips shell initialization entirely; npm commands still work normally
45
+
46
+ ### Fix 2: Pre-Validation Directory Checkpoint (Lines 1549-1561)
47
+
48
+ **Added:**
49
+
50
+ ```bash
51
+ # Checkpoint: Verify working directory exists before validation
52
+ if ! [ -d /workspace/repo ]; then
53
+ printf 'ERROR: Working directory /workspace/repo does not exist before validation\n' | tee -a /results/validation.log
54
+ printf 'Current pwd: %s\n' "$(pwd 2>&1 || echo '<pwd failed>')" | tee -a /results/validation.log
55
+ printf 'Filesystem state:\n' | tee -a /results/validation.log
56
+ ls -laR /workspace 2>&1 | head -100 | tee -a /results/validation.log
57
+ VALIDATION_EXIT=1
58
+ VALIDATION_FAILED_COMMAND_DETAIL="Working directory /workspace/repo missing before validation"
59
+ record_stage_timing "validation" "$VALIDATION_EXIT" ...
60
+ fi
61
+ ```
62
+
63
+ **Impact**: Catches directory issues early; provides diagnostic info for troubleshooting
64
+
65
+ ### Fix 3: Enhanced Error Diagnostics (Lines 1591-1604)
66
+
67
+ **Added:**
68
+
69
+ ```bash
70
+ # Enhanced diagnostics for getcwd-type errors
71
+ if grep -q 'getcwd\|No such file or directory\|cannot access parent directories' /results/validation.log; then
72
+ {
73
+ printf '\n[DIAGNOSTICS] Validation command failed with directory access error:\n'
74
+ printf 'Working directory status:\n'
75
+ printf ' Current pwd: %s\n' "$(pwd 2>&1 || echo '<pwd failed>')"
76
+ printf ' /workspace/repo exists: %s\n' "$([ -d /workspace/repo ] && echo 'yes' || echo 'no')"
77
+ if [ -L /workspace/repo/node_modules ]; then
78
+ printf ' node_modules is symlink → %s\n' "$(readlink /workspace/repo/node_modules 2>&1 || echo '<readlink failed>')"
79
+ fi
80
+ printf 'Last 20 lines of validation log:\n'
81
+ tail -20 /results/validation.log
82
+ } | tee -a /results/quality.log
83
+ fi
84
+ ```
85
+
86
+ **Impact**: Captures filesystem state on getcwd errors; enables root cause analysis
87
+
88
+ ## Testing
89
+
90
+ ### Unit Tests ✅
91
+
92
+ - Non-login shell syntax verified in code
93
+ - Directory checkpoint logic confirmed
94
+ - Enhanced diagnostics patterns found
95
+ - Script syntax validation passed
96
+
97
+ ### Integration Tests ✅
98
+
99
+ - Non-login npm validation commands execute successfully
100
+ - Directory checkpoint detects missing directories
101
+ - Enhanced diagnostics captured correctly
102
+
103
+ ### Docker Build ✅
104
+
105
+ - Image built: `kaseki-agent:fix-validation`
106
+ - Script syntax valid in container
107
+ - Non-login shell fix present in deployed image
108
+
109
+ ## Expected Outcome
110
+
111
+ **Before Fix:**
112
+
113
+ - matmetrics validation fails immediately
114
+ - Exit: 7 (from npm getcwd error)
115
+ - No diagnostic info about filesystem state
116
+
117
+ **After Fix:**
118
+
119
+ - matmetrics validation commands execute normally
120
+ - npm properly runs `npm run check`, `npm run test`, `npm run build`
121
+ - If directory issues occur, checkpoint catches them with full diagnostics
122
+ - If getcwd errors still occur (unlikely), diagnostics capture filesystem state for analysis
123
+
124
+ ## Backwards Compatibility
125
+
126
+ ✅ No breaking changes:
127
+
128
+ - Non-login shell is transparent to npm commands
129
+ - Directory checkpoint is defensive; only triggers if /workspace/repo missing
130
+ - Enhanced diagnostics are read-only; don't modify execution flow
131
+ - All changes operate before user code runs
132
+
133
+ ## Notes
134
+
135
+ 1. **Why non-login shell works**: Most npm commands and validation scripts don't rely on `~/.bashrc` or `~/.profile` behavior. The shell initialization was unnecessary overhead.
136
+
137
+ 2. **Read-only filesystem is correct**: The `--read-only` flag in run-kaseki.sh is a necessary security control. This fix makes validation compatible with it.
138
+
139
+ 3. **Symlink safety**: The fix doesn't change symlink handling. If `KASEKI_DEPENDENCY_RESTORE_MODE=symlink` is in use, diagnostics will detect broken symlinks.