kortext 3.0.0 → 3.1.0

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 (373) hide show
  1. package/README.md +159 -139
  2. package/agents/architect.md +85 -0
  3. package/agents/compliance-expert.md +36 -75
  4. package/agents/copywriter.md +36 -92
  5. package/agents/db-admin.md +43 -91
  6. package/agents/designer.md +40 -77
  7. package/agents/devops-engineer.md +37 -113
  8. package/agents/growth-expert.md +45 -88
  9. package/agents/product-manager.md +38 -83
  10. package/agents/qa-engineer.md +51 -99
  11. package/agents/security-engineer.md +47 -92
  12. package/bin/kortext.js +1 -22
  13. package/dist/app.js +829 -0
  14. package/dist/cli-spawn.js +137 -0
  15. package/dist/daemon.js +40 -0
  16. package/dist/db.js +78 -0
  17. package/dist/design-preview.js +533 -0
  18. package/dist/docs.js +701 -0
  19. package/dist/engines.js +225 -0
  20. package/dist/index.js +109 -0
  21. package/dist/pick-directory.js +38 -0
  22. package/dist/projects.js +189 -0
  23. package/dist/readiness.js +288 -0
  24. package/dist/runner.js +771 -0
  25. package/dist/update.js +55 -0
  26. package/docs/CHANGELOG.md +11 -0
  27. package/package.json +25 -57
  28. package/templates/AGENTS.md +62 -0
  29. package/templates/docs/API.md +67 -0
  30. package/templates/docs/ARCHITECTURE.md +31 -0
  31. package/templates/docs/BRIEF.md +27 -0
  32. package/templates/docs/CONTENT.md +66 -0
  33. package/templates/docs/DATABASE.md +63 -0
  34. package/templates/docs/DESIGN.md +124 -0
  35. package/templates/docs/ENGINEERING.md +66 -0
  36. package/templates/docs/ENVIRONMENT.md +102 -0
  37. package/templates/docs/GROWTH.md +44 -0
  38. package/templates/docs/LEGAL.md +48 -0
  39. package/templates/docs/PRODUCT.md +43 -0
  40. package/templates/docs/SECURITY.md +65 -0
  41. package/templates/docs/STACK.md +57 -0
  42. package/templates/docs/STRUCTURE.md +73 -0
  43. package/templates/docs/TEST.md +62 -0
  44. package/ui/dist/assets/abnfDiagram-VCTEODGH-Bm7Q2BML.js +1 -0
  45. package/ui/dist/assets/arc-BV9hs0Hu.js +1 -0
  46. package/ui/dist/assets/architecture-7GRP2DOG-RckR3gBI.js +1 -0
  47. package/ui/dist/assets/architectureDiagram-5GKGNRK7-CHiJ6JFT.js +36 -0
  48. package/ui/dist/assets/array-BifhSqXX.js +1 -0
  49. package/ui/dist/assets/blockDiagram-I7D4REHJ-qCbaKVhd.js +129 -0
  50. package/ui/dist/assets/c4Diagram-7LVT6UL2-DidCDJrv.js +38 -0
  51. package/ui/dist/assets/channel-CNUQ11ne.js +1 -0
  52. package/ui/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
  53. package/ui/dist/assets/chunk-4HAMMTFA-CDGFjfVp.js +62 -0
  54. package/ui/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
  55. package/ui/dist/assets/chunk-75Z2AOVW-CbNT4sDh.js +2 -0
  56. package/ui/dist/assets/chunk-DU6HZSFF-Cq2BVv26.js +127 -0
  57. package/ui/dist/assets/chunk-F27PBJKO-CE365m0v.js +1 -0
  58. package/ui/dist/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
  59. package/ui/dist/assets/chunk-GMAD6QVW-DxWL1VC-.js +72 -0
  60. package/ui/dist/assets/chunk-GVQU2GXP-aARV8YbK.js +1 -0
  61. package/ui/dist/assets/chunk-IMKFNOWR-CC790Kt2.js +231 -0
  62. package/ui/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
  63. package/ui/dist/assets/chunk-L3NEJ4N5-BfE4VE8J.js +1 -0
  64. package/ui/dist/assets/chunk-OSK3NFVY-BImQbSWH.js +10 -0
  65. package/ui/dist/assets/chunk-P2QGCYS3-CN3XD313.js +1 -0
  66. package/ui/dist/assets/chunk-POPQ4Y6H-Dqb6jOrX.js +1 -0
  67. package/ui/dist/assets/chunk-PWAF6VOD-DfXX6rBk.js +1 -0
  68. package/ui/dist/assets/chunk-SHT3W25Y-DATyyqPK.js +168 -0
  69. package/ui/dist/assets/chunk-SVP7TREG-r1chwRmg.js +88 -0
  70. package/ui/dist/assets/chunk-TICWLB2K-DL4atHUC.js +206 -0
  71. package/ui/dist/assets/chunk-XXDRQBXY-DXrM6jh7.js +1 -0
  72. package/ui/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
  73. package/ui/dist/assets/classDiagram-ZZMXUADV-BpQxfIQ7.js +1 -0
  74. package/ui/dist/assets/classDiagram-v2-VYDZK3BY-BpQxfIQ7.js +1 -0
  75. package/ui/dist/assets/cose-bilkent-JH36ORCC-Bhe-ZBlS.js +1 -0
  76. package/ui/dist/assets/cynefin-OW5HDTMX-D1koLd-G.js +1 -0
  77. package/ui/dist/assets/cynefinDiagram-5FMLGOSQ-BMcw40hV.js +62 -0
  78. package/ui/dist/assets/cytoscape.esm-CGd-uY3x.js +321 -0
  79. package/ui/dist/assets/dagre-GXQ25YYZ-DBun-Rs2.js +4 -0
  80. package/ui/dist/assets/dagre-PrKaheQc.js +1 -0
  81. package/ui/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
  82. package/ui/dist/assets/diagram-S7CK7UJ4-C1fUIGvo.js +30 -0
  83. package/ui/dist/assets/diagram-UQ7AKVKN-B5FDfkvB.js +41 -0
  84. package/ui/dist/assets/diagram-VSXAHHWV-CCIpOCNC.js +3 -0
  85. package/ui/dist/assets/diagram-VX7I27RA-DV0q2xo_.js +24 -0
  86. package/ui/dist/assets/diagram-Z3DM3KII-B3LCdNgI.js +24 -0
  87. package/ui/dist/assets/dist-EcW76Zvr.js +1 -0
  88. package/ui/dist/assets/ebnfDiagram-PWID7BFC-De_oRbYe.js +1 -0
  89. package/ui/dist/assets/erDiagram-RLTQ6QDP-B9NikMr1.js +99 -0
  90. package/ui/dist/assets/eventmodeling-NTZA5JFV-DZ4t581k.js +1 -0
  91. package/ui/dist/assets/flowDiagram-HODETNUW-DuTOJp1C.js +1 -0
  92. package/ui/dist/assets/ganttDiagram-EL5Y4UJY-BVTqqlPw.js +292 -0
  93. package/ui/dist/assets/gitGraph-4MIJSDKK-xRFaEJdZ.js +1 -0
  94. package/ui/dist/assets/gitGraphDiagram-WWUBYQGX-CK5_GCmX.js +106 -0
  95. package/ui/dist/assets/graphlib-DS17s2tU.js +1 -0
  96. package/ui/dist/assets/index-CjkpNftW.js +46 -0
  97. package/ui/dist/assets/index-DVIDTWin.css +1 -0
  98. package/ui/dist/assets/info-A6RAGUB7-Dg7z-CTI.js +1 -0
  99. package/ui/dist/assets/infoDiagram-27XIBGKW-YaqsOXh0.js +2 -0
  100. package/ui/dist/assets/init-C-OQMol4.js +1 -0
  101. package/ui/dist/assets/ishikawaDiagram-5VMMS53U-C-wtxZPa.js +70 -0
  102. package/ui/dist/assets/journeyDiagram-3NMN7TZE-DsXSXf16.js +139 -0
  103. package/ui/dist/assets/kanban-definition-UXKFOSKX-Ct59fuWk.js +89 -0
  104. package/ui/dist/assets/katex-CXMH3UgJ.js +257 -0
  105. package/ui/dist/assets/line-BUVw9Mhs.js +1 -0
  106. package/ui/dist/assets/linear-D8ncLO0X.js +1 -0
  107. package/ui/dist/assets/mermaid-parser.core-BDC4bG-O.js +7 -0
  108. package/ui/dist/assets/mermaid.core-DZY3WwzX.js +44 -0
  109. package/ui/dist/assets/mindmap-definition-YA3MSWOX-DtiuF6Ce.js +96 -0
  110. package/ui/dist/assets/ordinal-BDEzSJ7C.js +1 -0
  111. package/ui/dist/assets/packet-AYTQ26CC-BX2-w9rD.js +1 -0
  112. package/ui/dist/assets/path-fybaL0A-.js +1 -0
  113. package/ui/dist/assets/pegDiagram-XKGWAZYB-CotwuIHB.js +1 -0
  114. package/ui/dist/assets/pie-WAS4IAKB-Hth8ZVpm.js +1 -0
  115. package/ui/dist/assets/pieDiagram-E7YTZNPT-D9-INs8B.js +39 -0
  116. package/ui/dist/assets/quadrantDiagram-AXDQQJYC-CMtBXZGV.js +7 -0
  117. package/ui/dist/assets/radar-RG4KPBEZ-6UuwQPsw.js +1 -0
  118. package/ui/dist/assets/railroad-74A4TZTK-BF5TZgj0.js +1 -0
  119. package/ui/dist/assets/railroad-abnf-HS5TGJTU-3KYovtYT.js +1 -0
  120. package/ui/dist/assets/railroad-ebnf-LZEXJU2U-DeP4WedE.js +1 -0
  121. package/ui/dist/assets/railroad-peg-WCYAUIDC-i42N1-yk.js +1 -0
  122. package/ui/dist/assets/railroadDiagram-O6MQD6OU-BS6zkU3Z.js +1 -0
  123. package/ui/dist/assets/requirementDiagram-BXWQKSXE-J4IOB-kP.js +84 -0
  124. package/ui/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
  125. package/ui/dist/assets/sankeyDiagram-P5KCCOFB-jYTCuYzQ.js +40 -0
  126. package/ui/dist/assets/sequenceDiagram-WJ2MYXX4-Cd2r6PW-.js +162 -0
  127. package/ui/dist/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
  128. package/ui/dist/assets/src-7TsfZXRO.js +1 -0
  129. package/ui/dist/assets/stateDiagram-D77RDMKH-DXOdtOKe.js +1 -0
  130. package/ui/dist/assets/stateDiagram-v2-MP3YSRHH-9h7sIf3R.js +1 -0
  131. package/ui/dist/assets/swimlanes-42K2YHIH-BvJGmGs1.js +1 -0
  132. package/ui/dist/assets/swimlanesDiagram-VR7AAH4N-QA4gPi6a.js +8 -0
  133. package/ui/dist/assets/timeline-definition-24CTP7MA-CAaD6-yd.js +120 -0
  134. package/ui/dist/assets/treeView-Q6P3EWNA-4gDEXIyJ.js +1 -0
  135. package/ui/dist/assets/treemap-WGGIJYW6-CGel5TwW.js +1 -0
  136. package/ui/dist/assets/vennDiagram-4TSXK5OY-DpxsKboL.js +34 -0
  137. package/ui/dist/assets/wardley-WFR3VGLG-Ck38v5ns.js +1 -0
  138. package/ui/dist/assets/wardleyDiagram-VM6X3IG4-Ba0grrqs.js +78 -0
  139. package/ui/dist/assets/xychartDiagram-S5SC5T6Z-DH_gC96K.js +7 -0
  140. package/ui/dist/index.html +13 -0
  141. package/ui/dist/kortext-logo-dark.svg +41 -0
  142. package/ui/dist/kortext-logo.svg +41 -0
  143. package/workflows/existing-project-analysis.md +87 -0
  144. package/workflows/new-project-analysis.md +98 -0
  145. package/workflows/planning-pipeline.md +61 -0
  146. package/AGENTS.md +0 -24
  147. package/CHANGELOG.md +0 -81
  148. package/USER-GUIDE.md +0 -505
  149. package/agents/backend-developer.md +0 -132
  150. package/agents/delivery-manager.md +0 -121
  151. package/agents/engineering-manager.md +0 -208
  152. package/agents/frontend-developer.md +0 -174
  153. package/agents/operation-manager.md +0 -122
  154. package/bin/kortext.ts +0 -377
  155. package/dist/bin/kortext.js +0 -346
  156. package/dist/bin/kortext.js.map +0 -1
  157. package/dist/mcp/index.js +0 -4
  158. package/dist/mcp/index.js.map +0 -1
  159. package/dist/mcp/server.js +0 -553
  160. package/dist/mcp/server.js.map +0 -1
  161. package/dist/mcp/sse.js +0 -38
  162. package/dist/mcp/sse.js.map +0 -1
  163. package/dist/mcp/stdio.js +0 -44
  164. package/dist/mcp/stdio.js.map +0 -1
  165. package/dist/server/cli/cleanup.js +0 -73
  166. package/dist/server/cli/cleanup.js.map +0 -1
  167. package/dist/server/cli/commands.js +0 -73
  168. package/dist/server/cli/commands.js.map +0 -1
  169. package/dist/server/cli/doctor.js +0 -118
  170. package/dist/server/cli/doctor.js.map +0 -1
  171. package/dist/server/cli/executor-factory.js +0 -39
  172. package/dist/server/cli/executor-factory.js.map +0 -1
  173. package/dist/server/cli/init.js +0 -121
  174. package/dist/server/cli/init.js.map +0 -1
  175. package/dist/server/cli/logs.js +0 -28
  176. package/dist/server/cli/logs.js.map +0 -1
  177. package/dist/server/cli/serve.js +0 -72
  178. package/dist/server/cli/serve.js.map +0 -1
  179. package/dist/server/config/env.js +0 -12
  180. package/dist/server/config/env.js.map +0 -1
  181. package/dist/server/db/client.js +0 -32
  182. package/dist/server/db/client.js.map +0 -1
  183. package/dist/server/db/json.js +0 -21
  184. package/dist/server/db/json.js.map +0 -1
  185. package/dist/server/db/migrate.js +0 -70
  186. package/dist/server/db/migrate.js.map +0 -1
  187. package/dist/server/db/migrations/001_init.sql +0 -243
  188. package/dist/server/db/repositories/audit-log.js +0 -58
  189. package/dist/server/db/repositories/audit-log.js.map +0 -1
  190. package/dist/server/db/repositories/backlog.js +0 -96
  191. package/dist/server/db/repositories/backlog.js.map +0 -1
  192. package/dist/server/db/repositories/contexts.js +0 -54
  193. package/dist/server/db/repositories/contexts.js.map +0 -1
  194. package/dist/server/db/repositories/decisions.js +0 -71
  195. package/dist/server/db/repositories/decisions.js.map +0 -1
  196. package/dist/server/db/repositories/handovers.js +0 -53
  197. package/dist/server/db/repositories/handovers.js.map +0 -1
  198. package/dist/server/db/repositories/index.js +0 -30
  199. package/dist/server/db/repositories/index.js.map +0 -1
  200. package/dist/server/db/repositories/locks.js +0 -59
  201. package/dist/server/db/repositories/locks.js.map +0 -1
  202. package/dist/server/db/repositories/notifications.js +0 -63
  203. package/dist/server/db/repositories/notifications.js.map +0 -1
  204. package/dist/server/db/repositories/pending-questions.js +0 -63
  205. package/dist/server/db/repositories/pending-questions.js.map +0 -1
  206. package/dist/server/db/repositories/runs.js +0 -138
  207. package/dist/server/db/repositories/runs.js.map +0 -1
  208. package/dist/server/db/repositories/runtime-artifacts.js +0 -39
  209. package/dist/server/db/repositories/runtime-artifacts.js.map +0 -1
  210. package/dist/server/db/repositories/secrets.js +0 -65
  211. package/dist/server/db/repositories/secrets.js.map +0 -1
  212. package/dist/server/db/repositories/sessions.js +0 -48
  213. package/dist/server/db/repositories/sessions.js.map +0 -1
  214. package/dist/server/db/schemas.js +0 -308
  215. package/dist/server/db/schemas.js.map +0 -1
  216. package/dist/server/engine/consistency.js +0 -25
  217. package/dist/server/engine/consistency.js.map +0 -1
  218. package/dist/server/engine/dag.js +0 -86
  219. package/dist/server/engine/dag.js.map +0 -1
  220. package/dist/server/engine/executor.js +0 -2
  221. package/dist/server/engine/executor.js.map +0 -1
  222. package/dist/server/engine/executors/claude-cli-executor.js +0 -83
  223. package/dist/server/engine/executors/claude-cli-executor.js.map +0 -1
  224. package/dist/server/engine/executors/cli-spawn.js +0 -127
  225. package/dist/server/engine/executors/cli-spawn.js.map +0 -1
  226. package/dist/server/engine/executors/codex-cli-executor.js +0 -69
  227. package/dist/server/engine/executors/codex-cli-executor.js.map +0 -1
  228. package/dist/server/engine/executors/gemini-cli-executor.js +0 -69
  229. package/dist/server/engine/executors/gemini-cli-executor.js.map +0 -1
  230. package/dist/server/engine/executors/mock-executor.js +0 -52
  231. package/dist/server/engine/executors/mock-executor.js.map +0 -1
  232. package/dist/server/engine/executors/persona-routed-executor.js +0 -17
  233. package/dist/server/engine/executors/persona-routed-executor.js.map +0 -1
  234. package/dist/server/engine/gate-enforcer.js +0 -75
  235. package/dist/server/engine/gate-enforcer.js.map +0 -1
  236. package/dist/server/engine/git-commit.js +0 -42
  237. package/dist/server/engine/git-commit.js.map +0 -1
  238. package/dist/server/engine/handover.js +0 -120
  239. package/dist/server/engine/handover.js.map +0 -1
  240. package/dist/server/engine/item-lifecycle.js +0 -74
  241. package/dist/server/engine/item-lifecycle.js.map +0 -1
  242. package/dist/server/engine/persona-registry.js +0 -108
  243. package/dist/server/engine/persona-registry.js.map +0 -1
  244. package/dist/server/engine/worker-pool.js +0 -324
  245. package/dist/server/engine/worker-pool.js.map +0 -1
  246. package/dist/server/engine/workflow-loader.js +0 -55
  247. package/dist/server/engine/workflow-loader.js.map +0 -1
  248. package/dist/server/engine/workflow-parser.js +0 -158
  249. package/dist/server/engine/workflow-parser.js.map +0 -1
  250. package/dist/server/engine/worktree.js +0 -176
  251. package/dist/server/engine/worktree.js.map +0 -1
  252. package/dist/server/index.js +0 -99
  253. package/dist/server/index.js.map +0 -1
  254. package/dist/server/notifications/dispatcher.js +0 -60
  255. package/dist/server/notifications/dispatcher.js.map +0 -1
  256. package/dist/server/notifications/slack.js +0 -37
  257. package/dist/server/notifications/slack.js.map +0 -1
  258. package/dist/server/notifications/telegram.js +0 -33
  259. package/dist/server/notifications/telegram.js.map +0 -1
  260. package/dist/server/orchestrator/approval-queue.js +0 -83
  261. package/dist/server/orchestrator/approval-queue.js.map +0 -1
  262. package/dist/server/orchestrator/blueprint-watcher.js +0 -94
  263. package/dist/server/orchestrator/blueprint-watcher.js.map +0 -1
  264. package/dist/server/orchestrator/orchestrator.js +0 -283
  265. package/dist/server/orchestrator/orchestrator.js.map +0 -1
  266. package/dist/server/orchestrator/pipeline-chainer.js +0 -96
  267. package/dist/server/orchestrator/pipeline-chainer.js.map +0 -1
  268. package/dist/server/orchestrator/resume.js +0 -36
  269. package/dist/server/orchestrator/resume.js.map +0 -1
  270. package/dist/server/routes/approvals.js +0 -52
  271. package/dist/server/routes/approvals.js.map +0 -1
  272. package/dist/server/routes/backlog.js +0 -44
  273. package/dist/server/routes/backlog.js.map +0 -1
  274. package/dist/server/routes/db-info.js +0 -21
  275. package/dist/server/routes/db-info.js.map +0 -1
  276. package/dist/server/routes/docs.js +0 -70
  277. package/dist/server/routes/docs.js.map +0 -1
  278. package/dist/server/routes/doctor.js +0 -19
  279. package/dist/server/routes/doctor.js.map +0 -1
  280. package/dist/server/routes/handovers.js +0 -25
  281. package/dist/server/routes/handovers.js.map +0 -1
  282. package/dist/server/routes/health.js +0 -11
  283. package/dist/server/routes/health.js.map +0 -1
  284. package/dist/server/routes/personas.js +0 -96
  285. package/dist/server/routes/personas.js.map +0 -1
  286. package/dist/server/routes/runs.js +0 -41
  287. package/dist/server/routes/runs.js.map +0 -1
  288. package/dist/server/routes/workflows.js +0 -38
  289. package/dist/server/routes/workflows.js.map +0 -1
  290. package/dist/server/safety/harmful-output-filter.js +0 -40
  291. package/dist/server/safety/harmful-output-filter.js.map +0 -1
  292. package/dist/server/safety/secret-scanner.js +0 -169
  293. package/dist/server/safety/secret-scanner.js.map +0 -1
  294. package/dist/server/services/markdown-sync.js +0 -101
  295. package/dist/server/services/markdown-sync.js.map +0 -1
  296. package/dist/web/assets/index-B80d5ZPZ.js +0 -75
  297. package/dist/web/assets/index-B80d5ZPZ.js.map +0 -1
  298. package/dist/web/assets/index-Bge5Gzqv.css +0 -1
  299. package/dist/web/index.html +0 -13
  300. package/docs/architecture.md +0 -413
  301. package/rules/behavior.md +0 -252
  302. package/rules/branching.md +0 -82
  303. package/rules/commands.md +0 -112
  304. package/rules/emergency.md +0 -160
  305. package/rules/mcp.md +0 -47
  306. package/rules/models.md +0 -93
  307. package/scripts/copy-migrations.mjs +0 -29
  308. package/workflows/00-kortext-setup.md +0 -53
  309. package/workflows/01a-analysis-pipeline.md +0 -117
  310. package/workflows/01b-onboarding-pipeline.md +0 -110
  311. package/workflows/02-planning-pipeline.md +0 -146
  312. package/workflows/02b-spike-workflow.md +0 -120
  313. package/workflows/03-environment-setup.md +0 -99
  314. package/workflows/04-development-cycle.md +0 -203
  315. package/workflows/05-test-cycle.md +0 -123
  316. package/workflows/06-deployment-cycle.md +0 -224
  317. package/workflows/07-rollback-pipeline.md +0 -203
  318. package/workflows/08-hotfix-pipeline.md +0 -196
  319. package/workflows/09-maintenance-cycle.md +0 -133
  320. package/workspace/.locks/workspace_handover.md.lock +0 -3
  321. package/workspace/archive/.gitkeep +0 -0
  322. package/workspace/backups/.gitkeep +0 -0
  323. package/workspace/memory/backlog/.gitkeep +0 -0
  324. package/workspace/memory/backlog/BXX-[bug-name].md +0 -2
  325. package/workspace/memory/backlog/DXX-[debt-name].md +0 -2
  326. package/workspace/memory/backlog/README.md +0 -31
  327. package/workspace/memory/backlog/TXX-[task-name].md +0 -2
  328. package/workspace/memory/backlog/debt-dashboard.md +0 -3
  329. package/workspace/memory/backlog/epic-dashboard.md +0 -10
  330. package/workspace/memory/backlog/version-dashboard.md +0 -7
  331. package/workspace/memory/context/.gitkeep +0 -0
  332. package/workspace/memory/context/README.md +0 -35
  333. package/workspace/memory/context/[agent-name]-active.md +0 -2
  334. package/workspace/memory/decisions.md +0 -17
  335. package/workspace/memory/handover.md +0 -40
  336. package/workspace/memory/learned.md +0 -21
  337. package/workspace/references/access.md +0 -47
  338. package/workspace/references/api-reference.md +0 -59
  339. package/workspace/references/blueprint.md +0 -29
  340. package/workspace/references/content-strategy.md +0 -39
  341. package/workspace/references/db-schema.md +0 -51
  342. package/workspace/references/design-system.md +0 -107
  343. package/workspace/references/dictionary.md +0 -42
  344. package/workspace/references/file-system.md +0 -42
  345. package/workspace/references/growth-strategy.md +0 -46
  346. package/workspace/references/legal-strategy.md +0 -35
  347. package/workspace/references/required-skills.md +0 -11
  348. package/workspace/references/security-rules.md +0 -34
  349. package/workspace/references/tech-stack.md +0 -49
  350. package/workspace/references/test-strategy.md +0 -48
  351. package/workspace/reports/analysis-reports.md +0 -40
  352. package/workspace/reports/content-reports.md +0 -29
  353. package/workspace/reports/delivery-reports.md +0 -26
  354. package/workspace/reports/growth-reports.md +0 -9
  355. package/workspace/reports/legal-reports.md +0 -29
  356. package/workspace/reports/product-requirements.md +0 -28
  357. package/workspace/reports/release-notes.md +0 -20
  358. package/workspace/reports/security-reports.md +0 -27
  359. package/workspace/reports/status-reports.md +0 -48
  360. package/workspace/reports/tech-requirements.md +0 -30
  361. package/workspace/reports/test-reports.md +0 -61
  362. package/workspace/templates/BXX-[bug-name].md +0 -34
  363. package/workspace/templates/DXX-[debt-name].md +0 -35
  364. package/workspace/templates/EXX-[epic-name].md +0 -48
  365. package/workspace/templates/HXX-[hotfix-name].md +0 -73
  366. package/workspace/templates/SXX-[spike-name].md +0 -51
  367. package/workspace/templates/TXX-[task-name].md +0 -34
  368. package/workspace/templates/[agent-name]-active.md +0 -4
  369. package/workspace/templates/[original-name]_[YYYY-MM-DD_HHMMSS].md +0 -5
  370. package/workspace/templates/adr-XXX.md +0 -66
  371. package/workspace/templates/debt-dashboard.md +0 -10
  372. package/workspace/templates/epic-dashboard.md +0 -10
  373. package/workspace/templates/version-dashboard.md +0 -10
@@ -1,122 +0,0 @@
1
- # operation-manager
2
-
3
- - description: Sistemin genel işleyişinden, verimliliğinden ve orkestrasyondan sorumludur. Tüm tepe görev dağılımlarını yapar, personaların çalışma performansını ve ekipler arası iletişim pürüzlerini denetler. Tüm operasyonel süreçleri yönetir. Görevlerin açılması, atanması ve statü takibinden sorumludur.
4
-
5
- ## identity
6
-
7
- Sen operasyon yöneticisisin. +prime'ın vizyonunu operasyonlara çevir, tüm departmanların uyumlu çalışmasını sağla. Detaylara gömülme, darboğazları tespit et ve çöz. Her görevin doğru personaya atanmasını, zamanında ilerlemesini ve hiçbir işin kaybolmamasını sağla. Engelleri kaldır, süreci akıcı tut.
8
-
9
- ## purpose
10
-
11
- +prime'ın direktifleri doğrultusunda tüm personaların koordinasyonunu sağla. Tepe görev dağılımlarını yap, ekipler arası iletişim sürtünmelerini çöz, performansı izle ve sistemin verimli çalışmasını garanti et.
12
- `workspace/memory/backlog/` altındaki düz takip yapısı üzerindeki tüm operasyonel süreçleri yönet. `kortext-bulk-plan.py` ve `kortext-backlog-add.py` araçlarını kullanarak Epic, Task ve Bug'ların açılması, ilgili personaya atanması, ilişkilerinin kurgulanması ve statü takibinden sorumlu ol. Versiyon yönetimi ve bildirilen Bug'ların işlenmesi gibi akışları denetleyerek ekibin önündeki engelleri kaldır.
13
-
14
- ## when to use
15
-
16
- - Komut verildiğinde → Tüm sürecin orkestrasyonunu başlat
17
- - Ekipler arası koordinasyon gerektiğinde → Darboğazları çöz, öncelikleri belirle
18
- - Periyodik durum raporlaması gerektiğinde → `workspace/reports/status-reports.md` hazırla
19
- - Eskalasyon geldiğinde → Manager personalardan gelen çözümsüz sorunlarda son karar verici ol
20
- - Kaynak çakışması veya öncelik çatışması olduğunda → Çatışmayı çöz ve tahsisi yap
21
- - +prime stratejik bir yön değişikliği bildirdiğinde → Tüm departmanlara yay ve uygulat
22
- - Token kullanımı veya maliyet optimizasyonu gerektiren durumlarda
23
- - Ekibin önündeki blokajları çözmek gerektiğinde
24
-
25
- ## constraints
26
-
27
- - +prime'ın vizyonu ve stratejik kararları ile çelişen yönlendirme yapma
28
- - Teknik uzmanlık gerektiren kararlara müdahale etme — yetkinlik alanını aşma (teknik kararlar +engineering-manager'a, güvenlik +security-engineer'a ait)
29
- - Personaların yetki alanına müdahale etme — denetim yap ama işi yaptır
30
- - Kod yazma veya doğrudan teknik çıktı üretme
31
-
32
- ### decision authority
33
- > Bkz. `rules/behavior.md`
34
-
35
- - **[tactical]** Görev atama, önceliklendirme ve kaynak çakışması çözümü kararlarını bağımsız alabilir.
36
- - **[strategic]** Bütçe/kaynak etkisi olan kararlar +prime onayı gerektirir.
37
-
38
- ## chain of command
39
-
40
- - **Rapor verir:** +prime
41
- - **Ona rapor verenler:** +delivery-manager (release planlaması), +engineering-manager (kaynak planlaması ve görev dağılımı koordinasyonu), +product-manager
42
- - **Çıkmaz durumda:** +prime'a eskalasyon yap.
43
-
44
- ### raci matrix
45
-
46
- | Görev | operation-manager | Diğer |
47
- | ------------------------------------------------------- | ----------------- | ------------------------------------------------------------------ |
48
- | Sistem orkestrasyonu | **R/A** | +prime: I |
49
- | Tepe görev dağılımı | **R/A** | +product-manager: I, +engineering-manager: I, +delivery-manager: I |
50
- | Durum raporlama (`workspace/reports/status-reports.md`) | **R/A** | +prime: I |
51
- | Departmanlar arası çatışma çözümü | **R/A** | İlgili manager'lar: C |
52
- | Performans izleme ve maliyet optimizasyonu | **R/A** | +prime: I |
53
- | Eskalasyon yönetimi | **R/A** | +prime: A (son karar) |
54
- | Kickoff süreci orkestrasyonu | **R** | +prime: A |
55
- | Görev statüsü takibi | **R/A** | Tüm personalar: I |
56
-
57
- ## skills
58
-
59
- - Çok ekipli proje orkestrasyonu ve kaynak yönetimi
60
- - Departmanlar arası iletişim koordinasyonu
61
- - Performans metriği belirleme ve izleme
62
- - Darboğaz analizi ve çözüm üretme
63
- - Eskalasyon yönetimi ve çatışma çözümü
64
- - Token/maliyet optimizasyonu
65
- - Durumsal karar alma ve önceliklendirme
66
- - Konsolide raporlama
67
- - Stakeholder raporlaması
68
-
69
- ### advanced skills
70
-
71
- `skills/operation-manager/`
72
-
73
- ## instructions
74
-
75
- ### 0. Prerequisites
76
-
77
- Göreve başlamadan önce `workspace/memory/context/` dizinindeki tüm aktif görev dosyalarını ve `workspace/memory/handover.md` dosyasını oku. Diğer ajanların durumunu anla. Eğer proje yeni başlıyorsa aşağıdaki tüm listeyi oku:
78
-
79
- - `workspace/reports/status-reports.md`
80
- - `workspace/reports/analysis-reports.md`
81
- - `workspace/memory/backlog/` dizinini
82
-
83
- ### 1. Orchestration & Task Assignment
84
- **Kategori:** `deep-research`
85
-
86
- +prime'dan gelen direktif veya projenin mevcut durumu doğrultusunda:
87
- 1. Tüm departman yöneticilerinden (+product-manager, +engineering-manager, +delivery-manager) güncel durum al
88
- 2. Öncelikleri belirle ve kaynak çakışmalarını çöz
89
- 3. Görev dağılımını ilgili manager personalarına ilet
90
- 4. `workspace/memory/context/operation-manager-active.md` dosyasını güncelle
91
-
92
- ### 2. Kickoff Orchestration
93
- **Kategori:** `deep-research`
94
-
95
- Komut geldiğinde `workflows/01a-analysis-pipeline.md` akışını yönet:
96
- 1. Analysis & Planning aşamasında her personanın çıktısını kontrol et
97
- 2. Konsolidasyon adımında tüm raporları birleştirerek `workspace/reports/analysis-reports.md` hazırla
98
- 3. Sonuçları +prime'a sun ve onay bekle
99
-
100
- ### 3. Status Reporting
101
- **Kategori:** `routine`
102
-
103
- Periyodik olarak veya +prime talebiyle:
104
- 1. Tüm departmanlardan (+product-manager, +engineering-manager, +delivery-manager) veri topla
105
- 2. Darboğazları, riskleri ve ilerlemeyi özetle
106
- 3. `workspace/reports/status-reports.md` dosyasını güncelle
107
- 4. +prime'a sun
108
-
109
- ### 4. Escalation Management
110
- **Kategori:** `routine`
111
-
112
- Manager personalardan gelen çözümsüz sorunlarda:
113
- 1. Sorunu ve denenen çözümleri analiz et
114
- 2. Alternatif çözümler üret veya kaynak yeniden tahsisi yap
115
- 3. Çözüm üretilemezse +prime'a eskalasyon yap
116
- 4. Kararı `workspace/memory/decisions.md` dosyasına kaydet (yetki alanındaki kararlar için)
117
-
118
- ## artifacts
119
-
120
- - `workspace/memory/backlog/` dizini
121
- - `workspace/reports/status-reports.md` (Agent Performance + Token & Maliyet bölümleri dahil)
122
- - `workspace/reports/analysis-reports.md`
package/bin/kortext.ts DELETED
@@ -1,377 +0,0 @@
1
- #!/usr/bin/env tsx
2
- /**
3
- * Kortext CLI entry — user-facing surface.
4
- *
5
- * kortext init scaffold .kortext/ + workflows + DB
6
- * kortext serve start backend + dashboard together
7
- * kortext start <workflow-id> run a workflow with the mock executor
8
- * kortext approve <run-id> [answer] answer the oldest open question
9
- * kortext status recent runs + open questions
10
- * kortext logs tail of the audit log
11
- * kortext cleanup remove old quarantine + branches
12
- * kortext doctor consistency scan
13
- * kortext mcp run the MCP server over stdio
14
- *
15
- * Compiled to JS by `npm run build:server`; the `bin/kortext.js` shim
16
- * prefers the compiled entry and falls back to tsx in dev.
17
- */
18
-
19
- import { spawn, type ChildProcess } from 'node:child_process';
20
- import { existsSync, readFileSync } from 'node:fs';
21
- import { dirname, join, resolve } from 'node:path';
22
- import { fileURLToPath } from 'node:url';
23
- import { getDb } from '../server/db/client.ts';
24
- import { ApprovalQueue } from '../server/orchestrator/approval-queue.ts';
25
- import {
26
- startCommand,
27
- approveCommand,
28
- statusCommand,
29
- } from '../server/cli/commands.ts';
30
- import type { ExecutorKind } from '../server/cli/executor-factory.ts';
31
- import { cleanupQuarantine, cleanupBranches } from '../server/cli/cleanup.ts';
32
- import { runDoctor, formatDoctorReport } from '../server/cli/doctor.ts';
33
- import { initCommand } from '../server/cli/init.ts';
34
- import { logsCommand, formatLogsForCli } from '../server/cli/logs.ts';
35
- import { buildServeCommands, type ServeMode } from '../server/cli/serve.ts';
36
- import { loadWorkflowsFromDir } from '../server/engine/workflow-loader.ts';
37
- import { loadPersonasFromDir } from '../server/engine/persona-registry.ts';
38
- import { runStdioServer } from '../mcp/stdio.ts';
39
-
40
- const args = process.argv.slice(2);
41
- const cmd = args[0];
42
-
43
- const VALID_EXECUTORS: ReadonlySet<ExecutorKind> = new Set([
44
- 'mock',
45
- 'claude',
46
- 'codex',
47
- 'gemini',
48
- ]);
49
-
50
- function parseFlag(name: string, fallback: string | undefined = undefined): string | undefined {
51
- const prefix = `--${name}=`;
52
- for (const arg of args) {
53
- if (arg.startsWith(prefix)) return arg.slice(prefix.length);
54
- }
55
- return fallback;
56
- }
57
-
58
- function parseExecutorKind(): ExecutorKind {
59
- const raw = parseFlag('executor', 'mock')!;
60
- if (!VALID_EXECUTORS.has(raw as ExecutorKind)) {
61
- throw new Error(
62
- `invalid --executor=${raw}; expected one of: ${[...VALID_EXECUTORS].join(', ')}`,
63
- );
64
- }
65
- return raw as ExecutorKind;
66
- }
67
-
68
- function envBinaryFor(kind: ExecutorKind): string | undefined {
69
- if (kind === 'mock') return undefined;
70
- const envKey = `KORTEXT_${kind.toUpperCase()}_BIN`;
71
- return process.env[envKey] || undefined;
72
- }
73
-
74
- function hasFlag(name: string): boolean {
75
- return args.includes(`--${name}`);
76
- }
77
-
78
- function parseDaysFlag(name: string, fallback: number): number {
79
- const raw = parseFlag(name);
80
- if (!raw) return fallback;
81
- const m = raw.match(/^(\d+)d?$/);
82
- if (!m) throw new Error(`invalid --${name}=${raw}; expected '<N>' or '<N>d'`);
83
- return Number(m[1]);
84
- }
85
-
86
- function parseIntFlag(name: string, fallback: number): number {
87
- const raw = parseFlag(name);
88
- if (!raw) return fallback;
89
- const m = raw.match(/^(\d+)$/);
90
- if (!m) throw new Error(`invalid --${name}=${raw}; expected a positive integer`);
91
- return Number(m[1]);
92
- }
93
-
94
- function packageRoot(): string {
95
- // Walk up from this file until a package.json is found. Source path is
96
- // `bin/kortext.ts` (root one level up); compiled path is
97
- // `dist/bin/kortext.js` (root two levels up). Walking up keeps both
98
- // layouts working without special-casing.
99
- const here = dirname(fileURLToPath(import.meta.url));
100
- let cursor = here;
101
- for (let i = 0; i < 6; i++) {
102
- if (existsSync(join(cursor, 'package.json'))) return cursor;
103
- const parent = resolve(cursor, '..');
104
- if (parent === cursor) break;
105
- cursor = parent;
106
- }
107
- // Fallback — preserve old behaviour so callers still get a directory.
108
- return resolve(here, '..');
109
- }
110
-
111
- function readVersion(): string {
112
- try {
113
- const pkg = JSON.parse(readFileSync(join(packageRoot(), 'package.json'), 'utf8')) as {
114
- version?: string;
115
- };
116
- return pkg.version ?? 'unknown';
117
- } catch {
118
- return 'unknown';
119
- }
120
- }
121
-
122
- const HELP_TEXT = [
123
- 'kortext v3 — autonomous AI agent runtime',
124
- '',
125
- ' init [--force] scaffold .kortext/, workflows, agents,',
126
- ' rules, workspace, AGENTS.md, and DB',
127
- ' serve [--mode=dev|prod|auto] start backend + dashboard together',
128
- ' [--port=N] (auto picks prod when dist/ is built)',
129
- ' start <workflow-id> [--executor=<kind>] [--binary=<path>]',
130
- ' run a workflow (mock|claude|codex|gemini)',
131
- ' approve <run-id> [answer] answer the oldest open question for a run',
132
- ' status show recent runs + open questions',
133
- ' logs [--limit=N] [--actor=A] [--action=A]',
134
- ' tail of the audit log',
135
- ' cleanup [--quarantine-older-than=Nd] [--branches] [--dry-run]',
136
- ' remove old quarantine + abandoned branches',
137
- ' doctor workflow / persona / lock consistency scan',
138
- ' mcp run the MCP server over stdio',
139
- '',
140
- ' --help, -h show this help',
141
- ' --version, -v print version',
142
- ].join('\n');
143
-
144
- async function main(): Promise<number> {
145
- // Top-level flags handled before subcommand dispatch.
146
- if (cmd === '--version' || cmd === '-v') {
147
- console.log(readVersion());
148
- return 0;
149
- }
150
- if (cmd === '--help' || cmd === '-h' || cmd === 'help' || cmd === undefined) {
151
- console.log(HELP_TEXT);
152
- return 0;
153
- }
154
-
155
- // `kortext mcp` owns stdout for JSON-RPC frames — handle BEFORE any
156
- // other code path runs console.log on it. Runs the server until SIGINT.
157
- if (cmd === 'mcp') {
158
- // eslint-disable-next-line no-console
159
- console.log = console.error;
160
- await runStdioServer({ cwd: process.cwd() });
161
- await new Promise<void>(() => undefined); // park until shutdown
162
- return 0;
163
- }
164
-
165
- if (cmd === 'init') {
166
- const result = initCommand({
167
- targetDir: process.cwd(),
168
- force: hasFlag('force'),
169
- });
170
- if (!result.ok) {
171
- console.error(`init failed: ${result.errorMessage}`);
172
- return 1;
173
- }
174
- if (result.created.length > 0) {
175
- console.log(`created (${result.created.length}):`);
176
- for (const path of result.created) console.log(` + ${path}`);
177
- }
178
- if (result.skipped.length > 0) {
179
- console.log(`skipped (${result.skipped.length}, already present):`);
180
- for (const path of result.skipped) console.log(` · ${path}`);
181
- }
182
- console.log('');
183
- console.log(`db schema v${result.schemaVersion} at ${result.dbPath}`);
184
- console.log("next: 'kortext serve' to launch backend + dashboard");
185
- return 0;
186
- }
187
-
188
- if (cmd === 'serve') {
189
- const mode = (parseFlag('mode', 'auto') as ServeMode);
190
- if (!['dev', 'prod', 'auto'].includes(mode)) {
191
- console.error(`invalid --mode=${mode}; expected dev|prod|auto`);
192
- return 2;
193
- }
194
- const port = parseIntFlag('port', Number(process.env.KORTEXT_PORT ?? 3200));
195
- const plan = buildServeCommands({
196
- packageRoot: packageRoot(),
197
- projectDir: process.cwd(),
198
- mode,
199
- port,
200
- });
201
- console.error(`[kortext] serve mode=${plan.mode} port=${port}`);
202
- const children: ChildProcess[] = [];
203
- let shuttingDown = false;
204
- const shutdown = (signal: NodeJS.Signals) => {
205
- if (shuttingDown) return;
206
- shuttingDown = true;
207
- console.error(`[kortext] received ${signal}, stopping children`);
208
- for (const child of children) {
209
- if (!child.killed) child.kill(signal);
210
- }
211
- };
212
- process.on('SIGINT', () => shutdown('SIGINT'));
213
- process.on('SIGTERM', () => shutdown('SIGTERM'));
214
-
215
- for (const c of plan.commands) {
216
- const child = spawn(c.command, c.args, {
217
- cwd: c.cwd,
218
- env: { ...process.env, ...c.env },
219
- stdio: 'inherit',
220
- shell: false,
221
- });
222
- children.push(child);
223
- child.on('exit', (code, signal) => {
224
- if (shuttingDown) return;
225
- console.error(
226
- `[kortext] ${c.name} exited (code=${code} signal=${signal}); stopping siblings`,
227
- );
228
- shutdown('SIGTERM');
229
- });
230
- }
231
-
232
- // Wait for all children to finish, then propagate worst exit code.
233
- const codes = await Promise.all(
234
- children.map(
235
- (child) =>
236
- new Promise<number>((res) => {
237
- child.on('close', (code) => res(code ?? 1));
238
- }),
239
- ),
240
- );
241
- return codes.reduce((acc, c) => Math.max(acc, c), 0);
242
- }
243
-
244
- const { repositories: repos } = getDb();
245
- const queue = new ApprovalQueue({ repos });
246
-
247
- switch (cmd) {
248
- case 'start': {
249
- const workflowId = args[1];
250
- if (!workflowId || workflowId.startsWith('--')) {
251
- console.error('usage: kortext start <workflow-id> [--executor=mock|claude|codex|gemini] [--binary=<path>]');
252
- return 2;
253
- }
254
- const kind = parseExecutorKind();
255
- const binary = parseFlag('binary', envBinaryFor(kind));
256
- const result = await startCommand({
257
- repos,
258
- workflowsDir: resolve(process.cwd(), 'workflows'),
259
- workflowId,
260
- executor: kind,
261
- executorBinary: binary,
262
- });
263
- if (!result.ok) {
264
- console.error(`start failed: ${result.errorMessage}`);
265
- return 1;
266
- }
267
- console.log(
268
- `run #${result.runId} (executor=${kind}) → ${result.status}` +
269
- (result.failedStepKey ? ` (failed step: ${result.failedStepKey})` : ''),
270
- );
271
- return result.status === 'succeeded' ? 0 : 1;
272
- }
273
-
274
- case 'approve': {
275
- const runId = Number(args[1]);
276
- const answer = args[2] ?? 'approve';
277
- if (!Number.isFinite(runId)) {
278
- console.error('usage: kortext approve <run-id> [answer]');
279
- return 2;
280
- }
281
- const result = await approveCommand({
282
- repos,
283
- queue,
284
- runId,
285
- answer,
286
- answeredBy: process.env.USER ?? 'cli',
287
- });
288
- if (!result.ok) {
289
- console.error(`approve failed: ${result.errorMessage}`);
290
- return 1;
291
- }
292
- console.log(`approved question #${result.questionId} with '${result.answer}'`);
293
- return 0;
294
- }
295
-
296
- case 'status': {
297
- const result = statusCommand({ repos });
298
- console.log('Recent runs:');
299
- for (const r of result.recentRuns) {
300
- console.log(` #${r.id} ${r.workflow_id} ${r.status} by ${r.triggered_by}`);
301
- }
302
- console.log('Open questions:');
303
- if (result.openQuestions.length === 0) {
304
- console.log(' (none)');
305
- } else {
306
- for (const q of result.openQuestions) {
307
- console.log(` #${q.id} run=${q.run_id} ${q.question}`);
308
- }
309
- }
310
- return 0;
311
- }
312
-
313
- case 'logs': {
314
- const limit = parseIntFlag('limit', 50);
315
- const actor = parseFlag('actor');
316
- const action = parseFlag('action');
317
- const resourceType = parseFlag('resource-type');
318
- const resourceId = parseFlag('resource-id');
319
- const result = logsCommand({
320
- repos,
321
- limit,
322
- actor,
323
- action,
324
- resourceType,
325
- resourceId,
326
- });
327
- console.log(formatLogsForCli(result.rows));
328
- return 0;
329
- }
330
-
331
- case 'cleanup': {
332
- const dryRun = hasFlag('dry-run');
333
- const olderThanDays = parseDaysFlag('quarantine-older-than', 30);
334
- const wantsBranches = hasFlag('branches');
335
- const repoRoot = process.cwd();
336
- const quarantineRoot = join(repoRoot, '.kortext', 'worktrees-quarantine');
337
-
338
- const q = await cleanupQuarantine({ quarantineRoot, olderThanDays, dryRun });
339
- const prefix = dryRun ? '(dry-run) would delete' : 'deleted';
340
- console.log(`Quarantine — ${prefix} ${q.deleted.length}, kept ${q.kept.length}`);
341
- for (const path of q.deleted) console.log(` - ${path}`);
342
-
343
- if (wantsBranches) {
344
- const b = await cleanupBranches({ repoRoot, repos, dryRun });
345
- console.log(`Branches — ${prefix} ${b.deleted.length}, kept ${b.kept.length}`);
346
- for (const name of b.deleted) console.log(` - ${name}`);
347
- }
348
- return 0;
349
- }
350
-
351
- case 'doctor': {
352
- const workflows = loadWorkflowsFromDir(resolve(process.cwd(), 'workflows'));
353
- const personas = loadPersonasFromDir(resolve(process.cwd(), 'agents'));
354
- const report = runDoctor({ workflows, personas, repos });
355
- console.log(formatDoctorReport(report));
356
- console.log('');
357
- console.log(
358
- `summary: ${report.summary.workflowsLoaded} workflow(s), ${report.summary.personasLoaded} persona(s), ` +
359
- `${report.summary.unknownPersonaRefs} unknown ref(s), ${report.summary.staleLocks} stale lock(s), ` +
360
- `${report.summary.blockedItems} blocked item(s)`,
361
- );
362
- return report.hasErrors ? 1 : 0;
363
- }
364
-
365
- default:
366
- console.error(`unknown command: ${cmd}`);
367
- console.error("run 'kortext --help' for usage");
368
- return 2;
369
- }
370
- }
371
-
372
- main()
373
- .then((code) => process.exit(code))
374
- .catch((err: unknown) => {
375
- console.error(err);
376
- process.exit(1);
377
- });