@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,453 @@
1
+ name: Build Docker Image
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ tags:
7
+ description: "Comma-separated Docker tags to publish (auto-detects from git ref if empty)"
8
+ required: false
9
+ default: ""
10
+ schedule:
11
+ # Weekly build every Sunday at 00:00 UTC, publishes 'latest' tag to both registries
12
+ - cron: '0 0 * * 0'
13
+ workflow_run:
14
+ workflows:
15
+ - Release
16
+ types:
17
+ - completed
18
+
19
+ env:
20
+ DOCKER_IMAGE: cyanautomation/kaseki-agent
21
+
22
+ permissions:
23
+ contents: read
24
+ packages: write
25
+
26
+ jobs:
27
+ type_check_changed:
28
+ runs-on: ubuntu-latest
29
+ steps:
30
+ - name: Checkout
31
+ uses: actions/checkout@v6
32
+
33
+ - name: Set up Node
34
+ uses: actions/setup-node@v6
35
+ with:
36
+ node-version: '22.22.2'
37
+ cache: npm
38
+
39
+ - name: Install dependencies
40
+ run: npm ci
41
+
42
+ - name: Type check changed-code scope (blocking)
43
+ run: npm run type-check:changed
44
+
45
+ type_check_full:
46
+ runs-on: ubuntu-latest
47
+ continue-on-error: true
48
+ steps:
49
+ - name: Checkout
50
+ uses: actions/checkout@v6
51
+
52
+ - name: Set up Node
53
+ uses: actions/setup-node@v6
54
+ with:
55
+ node-version: '22.22.2'
56
+ cache: npm
57
+
58
+ - name: Install dependencies
59
+ run: npm ci
60
+
61
+ - name: Full type check (non-blocking baseline)
62
+ id: full_type_check
63
+ shell: bash
64
+ run: |
65
+ set +e
66
+ npm run type-check:full > type-check-full.log 2>&1
67
+ exit_code=$?
68
+ cat type-check-full.log
69
+ echo "exit_code=${exit_code}" >> "$GITHUB_OUTPUT"
70
+ exit 0
71
+
72
+ - name: Upload full type-check report
73
+ if: always()
74
+ uses: actions/upload-artifact@v7
75
+ with:
76
+ name: type-check-full-report
77
+ path: |
78
+ type-check-full.log
79
+ if-no-files-found: warn
80
+
81
+ checks:
82
+ needs: type_check_changed
83
+ runs-on: ubuntu-latest
84
+ # Runs in parallel with type_check_full (both independent after type_check_changed blocks all)
85
+
86
+ steps:
87
+ - name: Checkout
88
+ uses: actions/checkout@v6
89
+
90
+ - name: Set up Node
91
+ uses: actions/setup-node@v6
92
+ with:
93
+ node-version: '22.22.2'
94
+ cache: npm
95
+
96
+ - name: Install ShellCheck
97
+ shell: bash
98
+ run: |
99
+ sudo apt-get update
100
+ sudo apt-get install -y --no-install-recommends shellcheck
101
+
102
+ - name: Install dependencies
103
+ run: npm ci
104
+
105
+ - name: Run lint
106
+ run: npm run lint
107
+
108
+ - name: Run tests
109
+ run: npm test
110
+
111
+ - name: Build TypeScript
112
+ run: npm run build
113
+
114
+ - name: Verify API service build artifact
115
+ shell: bash
116
+ run: |
117
+ test -f dist/kaseki-api-service.js
118
+ ls -l dist/kaseki-api-service.js
119
+
120
+ build:
121
+ needs: [checks, type_check_full]
122
+ runs-on: ubuntu-latest
123
+
124
+ steps:
125
+ - name: Checkout
126
+ uses: actions/checkout@v6
127
+
128
+ - name: Set up QEMU
129
+ uses: docker/setup-qemu-action@v3
130
+ with:
131
+ platforms: arm64
132
+
133
+ - name: Set up Docker Buildx
134
+ uses: docker/setup-buildx-action@v3
135
+
136
+ - name: Login to Docker Hub
137
+ uses: docker/login-action@v3
138
+ with:
139
+ username: ${{ secrets.DOCKER_USERNAME }}
140
+ password: ${{ secrets.DOCKER_PASSWORD }}
141
+
142
+ - name: Login to GitHub Container Registry
143
+ uses: docker/login-action@v3
144
+ with:
145
+ registry: ghcr.io
146
+ username: ${{ github.actor }}
147
+ password: ${{ secrets.GITHUB_TOKEN }}
148
+
149
+ - name: Determine tags
150
+ id: meta
151
+ shell: bash
152
+ run: |
153
+ # Tag determination logic for different trigger types:
154
+ # 1. workflow_dispatch with custom tags input: use those tags
155
+ # 2. workflow_dispatch without input OR workflow_run: auto-detect from git ref
156
+ # 3. schedule (Sunday 00:00 UTC): use 'latest'
157
+
158
+ if [[ "${{ github.event_name }}" == "workflow_dispatch" && -n "${{ github.event.inputs.tags }}" ]]; then
159
+ # Manual dispatch with explicit tags provided
160
+ TAGS="${{ github.event.inputs.tags }}"
161
+ elif [[ "${{ github.ref }}" == refs/tags/* ]]; then
162
+ # On a git tag (from release workflow via workflow_run, or manual push)
163
+ VERSION="${GITHUB_REF#refs/tags/}"
164
+ VERSION="${VERSION#v}"
165
+ TAGS="$VERSION,latest"
166
+ elif [[ "${{ github.ref }}" == "refs/heads/main" ]]; then
167
+ # On main branch (scheduled builds only now)
168
+ SHORT_SHA="${GITHUB_SHA::12}"
169
+ TAGS="latest,main-$SHORT_SHA"
170
+ else
171
+ # Default to 'latest' for other triggers
172
+ TAGS="latest"
173
+ fi
174
+
175
+ DOCKER_HUB_TAGS=""
176
+ GHCR_TAGS=""
177
+ FIRST_TAG=""
178
+ for raw_tag in ${TAGS//,/ }; do
179
+ tag="$(echo "$raw_tag" | xargs)"
180
+ [[ -z "$tag" ]] && continue
181
+ [[ -z "$FIRST_TAG" ]] && FIRST_TAG="$tag"
182
+ DOCKER_HUB_TAGS="${DOCKER_HUB_TAGS}${DOCKER_IMAGE}:$tag"$'\n'
183
+ DOCKER_HUB_TAGS="${DOCKER_HUB_TAGS}${DOCKER_IMAGE}:$tag-arm64"$'\n'
184
+ GHCR_TAGS="${GHCR_TAGS}ghcr.io/${DOCKER_IMAGE}:$tag"$'\n'
185
+ GHCR_TAGS="${GHCR_TAGS}ghcr.io/${DOCKER_IMAGE}:$tag-arm64"$'\n'
186
+ done
187
+
188
+ if [[ -z "$DOCKER_HUB_TAGS" ]]; then
189
+ echo "No Docker tags were provided" >&2
190
+ exit 1
191
+ fi
192
+
193
+ DOCKER_HUB_TAGS="${DOCKER_HUB_TAGS%$'\n'}"
194
+ GHCR_TAGS="${GHCR_TAGS%$'\n'}"
195
+ ALL_TAGS="${DOCKER_HUB_TAGS}"$'\n'"${GHCR_TAGS}"
196
+ echo "tags<<EOF" >> "$GITHUB_OUTPUT"
197
+ echo "$ALL_TAGS" >> "$GITHUB_OUTPUT"
198
+ echo "EOF" >> "$GITHUB_OUTPUT"
199
+ echo "primary_tag=${FIRST_TAG:-latest}" >> "$GITHUB_OUTPUT"
200
+ echo "Building tags:"
201
+ echo "$ALL_TAGS"
202
+
203
+ - name: Build and push
204
+ id: build
205
+ uses: docker/build-push-action@v5
206
+ with:
207
+ context: .
208
+ platforms: linux/amd64,linux/arm64
209
+ push: true
210
+ tags: ${{ steps.meta.outputs.tags }}
211
+ cache-from: type=gha,scope=${{ github.ref_name }}
212
+ cache-to: type=gha,scope=${{ github.ref_name }},mode=max
213
+ provenance: true
214
+ sbom: true
215
+
216
+ - name: Log build cache statistics
217
+ shell: bash
218
+ run: |
219
+ echo "Build completed successfully"
220
+ echo "Build digest: ${{ steps.build.outputs.digest }}"
221
+ echo "Image size (metadata): ${{ steps.build.outputs.imageid }}"
222
+ echo ""
223
+ echo "Cache strategy: GitHub Actions cache with scope=${{ github.ref_name }}"
224
+ echo "Expected cache hit rate on subsequent builds: 80-90%"
225
+ echo "See .github/skills/docker-image-management/SKILL.md for cache optimization details"
226
+
227
+ scan:
228
+ needs: build
229
+ runs-on: ubuntu-latest
230
+ permissions:
231
+ contents: read
232
+ security-events: write
233
+ # artifact uploads for SBOM
234
+ packages: read
235
+
236
+ steps:
237
+ # Vulnerability scanning strategy:
238
+ # 1. HIGH/CRITICAL: Blocking scan uploaded to GitHub Security tab (fails if found)
239
+ # 2. All severities: Informational JSON report for visibility into MEDIUM/LOW
240
+ # 3. SBOM: Generated in SPDX format for supply chain security
241
+ #
242
+ # We scan docker.io registry since that's the primary distribution point.
243
+ # GHCR images have parity via multi-registry build, so scanning one is sufficient.
244
+ # Both amd64 and arm64 variants use the same base image and have identical vulnerabilities.
245
+
246
+ - name: Run Trivy vulnerability scanner (HIGH/CRITICAL only)
247
+ uses: aquasecurity/trivy-action@v0.36.0
248
+ with:
249
+ image-ref: 'docker.io/cyanautomation/kaseki-agent:latest'
250
+ format: 'sarif'
251
+ output: 'trivy-results.sarif'
252
+ severity: 'HIGH,CRITICAL'
253
+
254
+ - name: Run Trivy vulnerability scanner (all severities - informational)
255
+ uses: aquasecurity/trivy-action@v0.36.0
256
+ with:
257
+ image-ref: 'docker.io/cyanautomation/kaseki-agent:latest'
258
+ format: 'json'
259
+ output: 'trivy-results-all.json'
260
+
261
+ - name: Generate SBOM (SPDX format)
262
+ uses: aquasecurity/trivy-action@v0.36.0
263
+ with:
264
+ image-ref: 'docker.io/cyanautomation/kaseki-agent:latest'
265
+ format: 'spdx-json'
266
+ output: 'sbom-spdx.json'
267
+
268
+ - name: Upload Trivy results to GitHub Security tab
269
+ uses: github/codeql-action/upload-sarif@v4
270
+ if: always()
271
+ with:
272
+ sarif_file: 'trivy-results.sarif'
273
+
274
+ - name: Upload SBOM and detailed scan results
275
+ uses: actions/upload-artifact@v7
276
+ if: always()
277
+ with:
278
+ name: vulnerability-scan-results
279
+ path: |
280
+ trivy-results.sarif
281
+ trivy-results-all.json
282
+ sbom-spdx.json
283
+ retention-days: 30
284
+
285
+ - name: Summarize scan results
286
+ if: always()
287
+ shell: bash
288
+ run: |
289
+ echo "=== Vulnerability Scan Complete ==="
290
+ echo ""
291
+ echo "Scanned Image: docker.io/cyanautomation/kaseki-agent:latest"
292
+ echo "Scanner: Trivy v0.36.0"
293
+ echo ""
294
+ echo "Results:"
295
+ echo " - HIGH/CRITICAL findings → trivy-results.sarif (uploaded to GitHub Security tab)"
296
+ echo " - All severities → trivy-results-all.json (informational, includes MEDIUM/LOW)"
297
+ echo " - SBOM (SPDX) → sbom-spdx.json (software composition)"
298
+ echo ""
299
+ echo "Artifacts retained for 30 days"
300
+ echo ""
301
+ if grep -q '"severity":"HIGH"' trivy-results-all.json 2>/dev/null || grep -q '"severity":"CRITICAL"' trivy-results-all.json 2>/dev/null; then
302
+ echo "⚠️ HIGH or CRITICAL vulnerabilities detected - review trivy-results.sarif"
303
+ else
304
+ echo "✓ No HIGH or CRITICAL vulnerabilities found"
305
+ fi
306
+
307
+ verify:
308
+ needs: build
309
+ runs-on: ubuntu-latest
310
+
311
+ steps:
312
+ - name: Login to Docker Hub
313
+ uses: docker/login-action@v3
314
+ with:
315
+ username: ${{ secrets.DOCKER_USERNAME }}
316
+ password: ${{ secrets.DOCKER_PASSWORD }}
317
+
318
+ - name: Login to GitHub Container Registry
319
+ uses: docker/login-action@v3
320
+ with:
321
+ registry: ghcr.io
322
+ username: ${{ github.actor }}
323
+ password: ${{ secrets.GITHUB_TOKEN }}
324
+
325
+ - name: Determine verification tag
326
+ id: meta
327
+ shell: bash
328
+ run: |
329
+ if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
330
+ TAGS="${{ github.event.inputs.tags }}"
331
+ TAG="$(echo "${TAGS%%,*}" | xargs)"
332
+ echo "tag=${TAG:-latest}" >> "$GITHUB_OUTPUT"
333
+ elif [[ "${{ github.ref }}" == refs/tags/* ]]; then
334
+ TAG="${GITHUB_REF#refs/tags/}"
335
+ TAG="${TAG#v}"
336
+ echo "tag=$TAG" >> "$GITHUB_OUTPUT"
337
+ else
338
+ echo "tag=latest" >> "$GITHUB_OUTPUT"
339
+ fi
340
+
341
+ - name: Verify multi-arch manifest
342
+ shell: bash
343
+ run: |
344
+ IMAGE="${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
345
+ echo "Verifying manifest for: $IMAGE"
346
+ docker manifest inspect "$IMAGE" | jq -e '
347
+ [.manifests[].platform | "\(.os)/\(.architecture)"] as $platforms |
348
+ ($platforms | index("linux/amd64")) and ($platforms | index("linux/arm64"))
349
+ '
350
+ docker manifest inspect "$IMAGE" | jq -r '.manifests[] | "\(.platform.os)/\(.platform.architecture)"'
351
+ echo "Multi-arch image verified successfully"
352
+
353
+ - name: Verify Pi CLI entrypoint
354
+ shell: bash
355
+ run: |
356
+ IMAGE="${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
357
+ docker run --rm --entrypoint pi "$IMAGE" --version
358
+
359
+ - name: Smoke test runtime artifacts
360
+ shell: bash
361
+ run: |
362
+ IMAGE="${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
363
+ WORKSPACE="$(mktemp -d)"
364
+ RESULTS="$(mktemp -d)"
365
+ chmod 0777 "$WORKSPACE" "$RESULTS"
366
+
367
+ set +e
368
+ docker run --rm \
369
+ --read-only \
370
+ --tmpfs /tmp:rw,nosuid,nodev,size=256m \
371
+ --security-opt no-new-privileges:true \
372
+ --cap-drop ALL \
373
+ -e KASEKI_INSTANCE=kaseki-smoke \
374
+ -v "$WORKSPACE:/workspace:rw" \
375
+ -v "$RESULTS:/results:rw" \
376
+ -w /workspace \
377
+ "$IMAGE"
378
+ exit_code="$?"
379
+ set -e
380
+
381
+ test "$exit_code" -eq 2
382
+ jq -e '
383
+ .instance == "kaseki-smoke" and
384
+ .exit_code == 2 and
385
+ .failed_command == "missing OPENROUTER_API_KEY"
386
+ ' "$RESULTS/metadata.json"
387
+ test -s "$RESULTS/result-summary.md"
388
+ test -f "$RESULTS/quality.log"
389
+ test -f "$RESULTS/secret-scan.log"
390
+ test ! -d "$WORKSPACE/repo"
391
+
392
+ docker run --rm \
393
+ --entrypoint kaseki-report \
394
+ -v "$RESULTS:/results:ro" \
395
+ "$IMAGE" \
396
+ /results
397
+
398
+ - name: Verify multi-arch manifest (GHCR)
399
+ shell: bash
400
+ run: |
401
+ IMAGE="ghcr.io/${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
402
+ echo "Verifying manifest for: $IMAGE"
403
+ docker manifest inspect "$IMAGE" | jq -e '
404
+ [.manifests[].platform | "\(.os)/\(.architecture)"] as $platforms |
405
+ ($platforms | index("linux/amd64")) and ($platforms | index("linux/arm64"))
406
+ '
407
+ docker manifest inspect "$IMAGE" | jq -r '.manifests[] | "\(.platform.os)/\(.platform.architecture)"'
408
+ echo "Multi-arch image verified successfully (GHCR)"
409
+
410
+ - name: Verify Pi CLI entrypoint (GHCR)
411
+ shell: bash
412
+ run: |
413
+ IMAGE="ghcr.io/${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
414
+ docker run --rm --entrypoint pi "$IMAGE" --version
415
+
416
+ - name: Smoke test runtime artifacts (GHCR)
417
+ shell: bash
418
+ run: |
419
+ IMAGE="ghcr.io/${DOCKER_IMAGE}:${{ steps.meta.outputs.tag }}"
420
+ WORKSPACE="$(mktemp -d)"
421
+ RESULTS="$(mktemp -d)"
422
+ chmod 0777 "$WORKSPACE" "$RESULTS"
423
+
424
+ set +e
425
+ docker run --rm \
426
+ --read-only \
427
+ --tmpfs /tmp:rw,nosuid,nodev,size=256m \
428
+ --security-opt no-new-privileges:true \
429
+ --cap-drop ALL \
430
+ -e KASEKI_INSTANCE=kaseki-smoke-ghcr \
431
+ -v "$WORKSPACE:/workspace:rw" \
432
+ -v "$RESULTS:/results:rw" \
433
+ -w /workspace \
434
+ "$IMAGE"
435
+ exit_code="$?"
436
+ set -e
437
+
438
+ test "$exit_code" -eq 2
439
+ jq -e '
440
+ .instance == "kaseki-smoke-ghcr" and
441
+ .exit_code == 2 and
442
+ .failed_command == "missing OPENROUTER_API_KEY"
443
+ ' "$RESULTS/metadata.json"
444
+ test -s "$RESULTS/result-summary.md"
445
+ test -f "$RESULTS/quality.log"
446
+ test -f "$RESULTS/secret-scan.log"
447
+ test ! -d "$WORKSPACE/repo"
448
+
449
+ docker run --rm \
450
+ --entrypoint kaseki-report \
451
+ -v "$RESULTS:/results:ro" \
452
+ "$IMAGE" \
453
+ /results
@@ -0,0 +1,68 @@
1
+ name: Release
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ dry_run:
7
+ description: "Perform a dry-run (preview only, no tags/releases created)"
8
+ required: false
9
+ default: "false"
10
+ type: choice
11
+ options:
12
+ - "true"
13
+ - "false"
14
+
15
+ permissions:
16
+ contents: write
17
+ packages: write
18
+
19
+ jobs:
20
+ release:
21
+ runs-on: ubuntu-latest
22
+ outputs:
23
+ released: ${{ steps.release.outputs.released }}
24
+ version: ${{ steps.release.outputs.version }}
25
+ steps:
26
+ - name: Checkout
27
+ uses: actions/checkout@v6
28
+ with:
29
+ fetch-depth: 0 # Full history for semantic-release
30
+
31
+ - name: Set up Node
32
+ uses: actions/setup-node@v6
33
+ with:
34
+ node-version: '22.22.2'
35
+ cache: npm
36
+
37
+ - name: Install dependencies
38
+ run: npm ci
39
+
40
+ - name: Run semantic-release
41
+ id: release
42
+ env:
43
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
44
+ run: |
45
+ if [[ "${{ github.event.inputs.dry_run }}" == "true" ]]; then
46
+ npm run release:dry 2>&1 | tee release-output.log
47
+ echo "released=false" >> "$GITHUB_OUTPUT"
48
+ echo "dry_run=true" >> "$GITHUB_OUTPUT"
49
+ else
50
+ npm run release 2>&1 | tee release-output.log
51
+ # Check if release was created (look for "published" in output)
52
+ if grep -q "Published release" release-output.log; then
53
+ echo "released=true" >> "$GITHUB_OUTPUT"
54
+ # Extract version from git describe
55
+ VERSION=$(git describe --tags --abbrev=0 2>/dev/null | sed 's/^v//')
56
+ echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
57
+ else
58
+ echo "released=false" >> "$GITHUB_OUTPUT"
59
+ fi
60
+ fi
61
+
62
+ - name: Upload release log
63
+ if: always()
64
+ uses: actions/upload-artifact@v7
65
+ with:
66
+ name: release-output
67
+ path: release-output.log
68
+ retention-days: 30
@@ -0,0 +1,135 @@
1
+ {
2
+ "branches": [
3
+ {
4
+ "name": "main",
5
+ "prerelease": false
6
+ }
7
+ ],
8
+ "plugins": [
9
+ [
10
+ "@semantic-release/commit-analyzer",
11
+ {
12
+ "preset": "conventionalcommits",
13
+ "releaseRules": [
14
+ {
15
+ "type": "feat",
16
+ "release": "minor"
17
+ },
18
+ {
19
+ "type": "fix",
20
+ "release": "patch"
21
+ },
22
+ {
23
+ "type": "perf",
24
+ "release": "patch"
25
+ },
26
+ {
27
+ "type": "revert",
28
+ "release": "patch"
29
+ },
30
+ {
31
+ "type": "docs",
32
+ "release": false
33
+ },
34
+ {
35
+ "type": "style",
36
+ "release": false
37
+ },
38
+ {
39
+ "type": "refactor",
40
+ "release": false
41
+ },
42
+ {
43
+ "type": "test",
44
+ "release": false
45
+ },
46
+ {
47
+ "type": "chore",
48
+ "release": false
49
+ }
50
+ ]
51
+ }
52
+ ],
53
+ [
54
+ "@semantic-release/release-notes-generator",
55
+ {
56
+ "preset": "conventionalcommits",
57
+ "presetConfig": {
58
+ "types": [
59
+ {
60
+ "type": "feat",
61
+ "section": "Features",
62
+ "hidden": false
63
+ },
64
+ {
65
+ "type": "fix",
66
+ "section": "Bug Fixes",
67
+ "hidden": false
68
+ },
69
+ {
70
+ "type": "perf",
71
+ "section": "Performance Improvements",
72
+ "hidden": false
73
+ },
74
+ {
75
+ "type": "revert",
76
+ "section": "Reverts",
77
+ "hidden": false
78
+ },
79
+ {
80
+ "type": "docs",
81
+ "section": "Documentation",
82
+ "hidden": true
83
+ },
84
+ {
85
+ "type": "style",
86
+ "section": "Styles",
87
+ "hidden": true
88
+ },
89
+ {
90
+ "type": "refactor",
91
+ "section": "Refactoring",
92
+ "hidden": true
93
+ },
94
+ {
95
+ "type": "test",
96
+ "section": "Tests",
97
+ "hidden": true
98
+ },
99
+ {
100
+ "type": "chore",
101
+ "section": "Miscellaneous",
102
+ "hidden": true
103
+ }
104
+ ]
105
+ }
106
+ }
107
+ ],
108
+ [
109
+ "@semantic-release/changelog",
110
+ {
111
+ "changelogFile": "CHANGELOG.md",
112
+ "changelogTitle": "# Changelog\n\nAll notable changes to Kaseki Agent are documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html)."
113
+ }
114
+ ],
115
+ [
116
+ "@semantic-release/git",
117
+ {
118
+ "assets": [
119
+ "package.json",
120
+ "package-lock.json",
121
+ "CHANGELOG.md"
122
+ ],
123
+ "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
124
+ }
125
+ ],
126
+ [
127
+ "@semantic-release/github",
128
+ {
129
+ "successComment": false,
130
+ "failComment": false,
131
+ "failTitle": "The automated release failed"
132
+ }
133
+ ]
134
+ ]
135
+ }