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.
- package/README.md +159 -139
- package/agents/architect.md +85 -0
- package/agents/compliance-expert.md +36 -75
- package/agents/copywriter.md +36 -92
- package/agents/db-admin.md +43 -91
- package/agents/designer.md +40 -77
- package/agents/devops-engineer.md +37 -113
- package/agents/growth-expert.md +45 -88
- package/agents/product-manager.md +38 -83
- package/agents/qa-engineer.md +51 -99
- package/agents/security-engineer.md +47 -92
- package/bin/kortext.js +1 -22
- package/dist/app.js +829 -0
- package/dist/cli-spawn.js +137 -0
- package/dist/daemon.js +40 -0
- package/dist/db.js +78 -0
- package/dist/design-preview.js +533 -0
- package/dist/docs.js +701 -0
- package/dist/engines.js +225 -0
- package/dist/index.js +109 -0
- package/dist/pick-directory.js +38 -0
- package/dist/projects.js +189 -0
- package/dist/readiness.js +288 -0
- package/dist/runner.js +771 -0
- package/dist/update.js +55 -0
- package/docs/CHANGELOG.md +11 -0
- package/package.json +25 -57
- package/templates/AGENTS.md +62 -0
- package/templates/docs/API.md +67 -0
- package/templates/docs/ARCHITECTURE.md +31 -0
- package/templates/docs/BRIEF.md +27 -0
- package/templates/docs/CONTENT.md +66 -0
- package/templates/docs/DATABASE.md +63 -0
- package/templates/docs/DESIGN.md +124 -0
- package/templates/docs/ENGINEERING.md +66 -0
- package/templates/docs/ENVIRONMENT.md +102 -0
- package/templates/docs/GROWTH.md +44 -0
- package/templates/docs/LEGAL.md +48 -0
- package/templates/docs/PRODUCT.md +43 -0
- package/templates/docs/SECURITY.md +65 -0
- package/templates/docs/STACK.md +57 -0
- package/templates/docs/STRUCTURE.md +73 -0
- package/templates/docs/TEST.md +62 -0
- package/ui/dist/assets/abnfDiagram-VCTEODGH-Bm7Q2BML.js +1 -0
- package/ui/dist/assets/arc-BV9hs0Hu.js +1 -0
- package/ui/dist/assets/architecture-7GRP2DOG-RckR3gBI.js +1 -0
- package/ui/dist/assets/architectureDiagram-5GKGNRK7-CHiJ6JFT.js +36 -0
- package/ui/dist/assets/array-BifhSqXX.js +1 -0
- package/ui/dist/assets/blockDiagram-I7D4REHJ-qCbaKVhd.js +129 -0
- package/ui/dist/assets/c4Diagram-7LVT6UL2-DidCDJrv.js +38 -0
- package/ui/dist/assets/channel-CNUQ11ne.js +1 -0
- package/ui/dist/assets/chunk-2Q5K7J3B-C1jixKkw.js +1 -0
- package/ui/dist/assets/chunk-4HAMMTFA-CDGFjfVp.js +62 -0
- package/ui/dist/assets/chunk-5VM5RSS4-ZNzvKenW.js +15 -0
- package/ui/dist/assets/chunk-75Z2AOVW-CbNT4sDh.js +2 -0
- package/ui/dist/assets/chunk-DU6HZSFF-Cq2BVv26.js +127 -0
- package/ui/dist/assets/chunk-F27PBJKO-CE365m0v.js +1 -0
- package/ui/dist/assets/chunk-FOHPRMQF-DHwB1DNv.js +161 -0
- package/ui/dist/assets/chunk-GMAD6QVW-DxWL1VC-.js +72 -0
- package/ui/dist/assets/chunk-GVQU2GXP-aARV8YbK.js +1 -0
- package/ui/dist/assets/chunk-IMKFNOWR-CC790Kt2.js +231 -0
- package/ui/dist/assets/chunk-JWPE2WC7-DVXcaiue.js +1 -0
- package/ui/dist/assets/chunk-L3NEJ4N5-BfE4VE8J.js +1 -0
- package/ui/dist/assets/chunk-OSK3NFVY-BImQbSWH.js +10 -0
- package/ui/dist/assets/chunk-P2QGCYS3-CN3XD313.js +1 -0
- package/ui/dist/assets/chunk-POPQ4Y6H-Dqb6jOrX.js +1 -0
- package/ui/dist/assets/chunk-PWAF6VOD-DfXX6rBk.js +1 -0
- package/ui/dist/assets/chunk-SHT3W25Y-DATyyqPK.js +168 -0
- package/ui/dist/assets/chunk-SVP7TREG-r1chwRmg.js +88 -0
- package/ui/dist/assets/chunk-TICWLB2K-DL4atHUC.js +206 -0
- package/ui/dist/assets/chunk-XXDRQBXY-DXrM6jh7.js +1 -0
- package/ui/dist/assets/chunk-Y2CYZVJY-DsF7k-Jl.js +1 -0
- package/ui/dist/assets/classDiagram-ZZMXUADV-BpQxfIQ7.js +1 -0
- package/ui/dist/assets/classDiagram-v2-VYDZK3BY-BpQxfIQ7.js +1 -0
- package/ui/dist/assets/cose-bilkent-JH36ORCC-Bhe-ZBlS.js +1 -0
- package/ui/dist/assets/cynefin-OW5HDTMX-D1koLd-G.js +1 -0
- package/ui/dist/assets/cynefinDiagram-5FMLGOSQ-BMcw40hV.js +62 -0
- package/ui/dist/assets/cytoscape.esm-CGd-uY3x.js +321 -0
- package/ui/dist/assets/dagre-GXQ25YYZ-DBun-Rs2.js +4 -0
- package/ui/dist/assets/dagre-PrKaheQc.js +1 -0
- package/ui/dist/assets/defaultLocale-BFoDCU3G.js +1 -0
- package/ui/dist/assets/diagram-S7CK7UJ4-C1fUIGvo.js +30 -0
- package/ui/dist/assets/diagram-UQ7AKVKN-B5FDfkvB.js +41 -0
- package/ui/dist/assets/diagram-VSXAHHWV-CCIpOCNC.js +3 -0
- package/ui/dist/assets/diagram-VX7I27RA-DV0q2xo_.js +24 -0
- package/ui/dist/assets/diagram-Z3DM3KII-B3LCdNgI.js +24 -0
- package/ui/dist/assets/dist-EcW76Zvr.js +1 -0
- package/ui/dist/assets/ebnfDiagram-PWID7BFC-De_oRbYe.js +1 -0
- package/ui/dist/assets/erDiagram-RLTQ6QDP-B9NikMr1.js +99 -0
- package/ui/dist/assets/eventmodeling-NTZA5JFV-DZ4t581k.js +1 -0
- package/ui/dist/assets/flowDiagram-HODETNUW-DuTOJp1C.js +1 -0
- package/ui/dist/assets/ganttDiagram-EL5Y4UJY-BVTqqlPw.js +292 -0
- package/ui/dist/assets/gitGraph-4MIJSDKK-xRFaEJdZ.js +1 -0
- package/ui/dist/assets/gitGraphDiagram-WWUBYQGX-CK5_GCmX.js +106 -0
- package/ui/dist/assets/graphlib-DS17s2tU.js +1 -0
- package/ui/dist/assets/index-CjkpNftW.js +46 -0
- package/ui/dist/assets/index-DVIDTWin.css +1 -0
- package/ui/dist/assets/info-A6RAGUB7-Dg7z-CTI.js +1 -0
- package/ui/dist/assets/infoDiagram-27XIBGKW-YaqsOXh0.js +2 -0
- package/ui/dist/assets/init-C-OQMol4.js +1 -0
- package/ui/dist/assets/ishikawaDiagram-5VMMS53U-C-wtxZPa.js +70 -0
- package/ui/dist/assets/journeyDiagram-3NMN7TZE-DsXSXf16.js +139 -0
- package/ui/dist/assets/kanban-definition-UXKFOSKX-Ct59fuWk.js +89 -0
- package/ui/dist/assets/katex-CXMH3UgJ.js +257 -0
- package/ui/dist/assets/line-BUVw9Mhs.js +1 -0
- package/ui/dist/assets/linear-D8ncLO0X.js +1 -0
- package/ui/dist/assets/mermaid-parser.core-BDC4bG-O.js +7 -0
- package/ui/dist/assets/mermaid.core-DZY3WwzX.js +44 -0
- package/ui/dist/assets/mindmap-definition-YA3MSWOX-DtiuF6Ce.js +96 -0
- package/ui/dist/assets/ordinal-BDEzSJ7C.js +1 -0
- package/ui/dist/assets/packet-AYTQ26CC-BX2-w9rD.js +1 -0
- package/ui/dist/assets/path-fybaL0A-.js +1 -0
- package/ui/dist/assets/pegDiagram-XKGWAZYB-CotwuIHB.js +1 -0
- package/ui/dist/assets/pie-WAS4IAKB-Hth8ZVpm.js +1 -0
- package/ui/dist/assets/pieDiagram-E7YTZNPT-D9-INs8B.js +39 -0
- package/ui/dist/assets/quadrantDiagram-AXDQQJYC-CMtBXZGV.js +7 -0
- package/ui/dist/assets/radar-RG4KPBEZ-6UuwQPsw.js +1 -0
- package/ui/dist/assets/railroad-74A4TZTK-BF5TZgj0.js +1 -0
- package/ui/dist/assets/railroad-abnf-HS5TGJTU-3KYovtYT.js +1 -0
- package/ui/dist/assets/railroad-ebnf-LZEXJU2U-DeP4WedE.js +1 -0
- package/ui/dist/assets/railroad-peg-WCYAUIDC-i42N1-yk.js +1 -0
- package/ui/dist/assets/railroadDiagram-O6MQD6OU-BS6zkU3Z.js +1 -0
- package/ui/dist/assets/requirementDiagram-BXWQKSXE-J4IOB-kP.js +84 -0
- package/ui/dist/assets/rough.esm-Dy-Kn_BL.js +1 -0
- package/ui/dist/assets/sankeyDiagram-P5KCCOFB-jYTCuYzQ.js +40 -0
- package/ui/dist/assets/sequenceDiagram-WJ2MYXX4-Cd2r6PW-.js +162 -0
- package/ui/dist/assets/sizeCapture-INFHLROL-B0uUizjq.js +1 -0
- package/ui/dist/assets/src-7TsfZXRO.js +1 -0
- package/ui/dist/assets/stateDiagram-D77RDMKH-DXOdtOKe.js +1 -0
- package/ui/dist/assets/stateDiagram-v2-MP3YSRHH-9h7sIf3R.js +1 -0
- package/ui/dist/assets/swimlanes-42K2YHIH-BvJGmGs1.js +1 -0
- package/ui/dist/assets/swimlanesDiagram-VR7AAH4N-QA4gPi6a.js +8 -0
- package/ui/dist/assets/timeline-definition-24CTP7MA-CAaD6-yd.js +120 -0
- package/ui/dist/assets/treeView-Q6P3EWNA-4gDEXIyJ.js +1 -0
- package/ui/dist/assets/treemap-WGGIJYW6-CGel5TwW.js +1 -0
- package/ui/dist/assets/vennDiagram-4TSXK5OY-DpxsKboL.js +34 -0
- package/ui/dist/assets/wardley-WFR3VGLG-Ck38v5ns.js +1 -0
- package/ui/dist/assets/wardleyDiagram-VM6X3IG4-Ba0grrqs.js +78 -0
- package/ui/dist/assets/xychartDiagram-S5SC5T6Z-DH_gC96K.js +7 -0
- package/ui/dist/index.html +13 -0
- package/ui/dist/kortext-logo-dark.svg +41 -0
- package/ui/dist/kortext-logo.svg +41 -0
- package/workflows/existing-project-analysis.md +87 -0
- package/workflows/new-project-analysis.md +98 -0
- package/workflows/planning-pipeline.md +61 -0
- package/AGENTS.md +0 -24
- package/CHANGELOG.md +0 -81
- package/USER-GUIDE.md +0 -505
- package/agents/backend-developer.md +0 -132
- package/agents/delivery-manager.md +0 -121
- package/agents/engineering-manager.md +0 -208
- package/agents/frontend-developer.md +0 -174
- package/agents/operation-manager.md +0 -122
- package/bin/kortext.ts +0 -377
- package/dist/bin/kortext.js +0 -346
- package/dist/bin/kortext.js.map +0 -1
- package/dist/mcp/index.js +0 -4
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/server.js +0 -553
- package/dist/mcp/server.js.map +0 -1
- package/dist/mcp/sse.js +0 -38
- package/dist/mcp/sse.js.map +0 -1
- package/dist/mcp/stdio.js +0 -44
- package/dist/mcp/stdio.js.map +0 -1
- package/dist/server/cli/cleanup.js +0 -73
- package/dist/server/cli/cleanup.js.map +0 -1
- package/dist/server/cli/commands.js +0 -73
- package/dist/server/cli/commands.js.map +0 -1
- package/dist/server/cli/doctor.js +0 -118
- package/dist/server/cli/doctor.js.map +0 -1
- package/dist/server/cli/executor-factory.js +0 -39
- package/dist/server/cli/executor-factory.js.map +0 -1
- package/dist/server/cli/init.js +0 -121
- package/dist/server/cli/init.js.map +0 -1
- package/dist/server/cli/logs.js +0 -28
- package/dist/server/cli/logs.js.map +0 -1
- package/dist/server/cli/serve.js +0 -72
- package/dist/server/cli/serve.js.map +0 -1
- package/dist/server/config/env.js +0 -12
- package/dist/server/config/env.js.map +0 -1
- package/dist/server/db/client.js +0 -32
- package/dist/server/db/client.js.map +0 -1
- package/dist/server/db/json.js +0 -21
- package/dist/server/db/json.js.map +0 -1
- package/dist/server/db/migrate.js +0 -70
- package/dist/server/db/migrate.js.map +0 -1
- package/dist/server/db/migrations/001_init.sql +0 -243
- package/dist/server/db/repositories/audit-log.js +0 -58
- package/dist/server/db/repositories/audit-log.js.map +0 -1
- package/dist/server/db/repositories/backlog.js +0 -96
- package/dist/server/db/repositories/backlog.js.map +0 -1
- package/dist/server/db/repositories/contexts.js +0 -54
- package/dist/server/db/repositories/contexts.js.map +0 -1
- package/dist/server/db/repositories/decisions.js +0 -71
- package/dist/server/db/repositories/decisions.js.map +0 -1
- package/dist/server/db/repositories/handovers.js +0 -53
- package/dist/server/db/repositories/handovers.js.map +0 -1
- package/dist/server/db/repositories/index.js +0 -30
- package/dist/server/db/repositories/index.js.map +0 -1
- package/dist/server/db/repositories/locks.js +0 -59
- package/dist/server/db/repositories/locks.js.map +0 -1
- package/dist/server/db/repositories/notifications.js +0 -63
- package/dist/server/db/repositories/notifications.js.map +0 -1
- package/dist/server/db/repositories/pending-questions.js +0 -63
- package/dist/server/db/repositories/pending-questions.js.map +0 -1
- package/dist/server/db/repositories/runs.js +0 -138
- package/dist/server/db/repositories/runs.js.map +0 -1
- package/dist/server/db/repositories/runtime-artifacts.js +0 -39
- package/dist/server/db/repositories/runtime-artifacts.js.map +0 -1
- package/dist/server/db/repositories/secrets.js +0 -65
- package/dist/server/db/repositories/secrets.js.map +0 -1
- package/dist/server/db/repositories/sessions.js +0 -48
- package/dist/server/db/repositories/sessions.js.map +0 -1
- package/dist/server/db/schemas.js +0 -308
- package/dist/server/db/schemas.js.map +0 -1
- package/dist/server/engine/consistency.js +0 -25
- package/dist/server/engine/consistency.js.map +0 -1
- package/dist/server/engine/dag.js +0 -86
- package/dist/server/engine/dag.js.map +0 -1
- package/dist/server/engine/executor.js +0 -2
- package/dist/server/engine/executor.js.map +0 -1
- package/dist/server/engine/executors/claude-cli-executor.js +0 -83
- package/dist/server/engine/executors/claude-cli-executor.js.map +0 -1
- package/dist/server/engine/executors/cli-spawn.js +0 -127
- package/dist/server/engine/executors/cli-spawn.js.map +0 -1
- package/dist/server/engine/executors/codex-cli-executor.js +0 -69
- package/dist/server/engine/executors/codex-cli-executor.js.map +0 -1
- package/dist/server/engine/executors/gemini-cli-executor.js +0 -69
- package/dist/server/engine/executors/gemini-cli-executor.js.map +0 -1
- package/dist/server/engine/executors/mock-executor.js +0 -52
- package/dist/server/engine/executors/mock-executor.js.map +0 -1
- package/dist/server/engine/executors/persona-routed-executor.js +0 -17
- package/dist/server/engine/executors/persona-routed-executor.js.map +0 -1
- package/dist/server/engine/gate-enforcer.js +0 -75
- package/dist/server/engine/gate-enforcer.js.map +0 -1
- package/dist/server/engine/git-commit.js +0 -42
- package/dist/server/engine/git-commit.js.map +0 -1
- package/dist/server/engine/handover.js +0 -120
- package/dist/server/engine/handover.js.map +0 -1
- package/dist/server/engine/item-lifecycle.js +0 -74
- package/dist/server/engine/item-lifecycle.js.map +0 -1
- package/dist/server/engine/persona-registry.js +0 -108
- package/dist/server/engine/persona-registry.js.map +0 -1
- package/dist/server/engine/worker-pool.js +0 -324
- package/dist/server/engine/worker-pool.js.map +0 -1
- package/dist/server/engine/workflow-loader.js +0 -55
- package/dist/server/engine/workflow-loader.js.map +0 -1
- package/dist/server/engine/workflow-parser.js +0 -158
- package/dist/server/engine/workflow-parser.js.map +0 -1
- package/dist/server/engine/worktree.js +0 -176
- package/dist/server/engine/worktree.js.map +0 -1
- package/dist/server/index.js +0 -99
- package/dist/server/index.js.map +0 -1
- package/dist/server/notifications/dispatcher.js +0 -60
- package/dist/server/notifications/dispatcher.js.map +0 -1
- package/dist/server/notifications/slack.js +0 -37
- package/dist/server/notifications/slack.js.map +0 -1
- package/dist/server/notifications/telegram.js +0 -33
- package/dist/server/notifications/telegram.js.map +0 -1
- package/dist/server/orchestrator/approval-queue.js +0 -83
- package/dist/server/orchestrator/approval-queue.js.map +0 -1
- package/dist/server/orchestrator/blueprint-watcher.js +0 -94
- package/dist/server/orchestrator/blueprint-watcher.js.map +0 -1
- package/dist/server/orchestrator/orchestrator.js +0 -283
- package/dist/server/orchestrator/orchestrator.js.map +0 -1
- package/dist/server/orchestrator/pipeline-chainer.js +0 -96
- package/dist/server/orchestrator/pipeline-chainer.js.map +0 -1
- package/dist/server/orchestrator/resume.js +0 -36
- package/dist/server/orchestrator/resume.js.map +0 -1
- package/dist/server/routes/approvals.js +0 -52
- package/dist/server/routes/approvals.js.map +0 -1
- package/dist/server/routes/backlog.js +0 -44
- package/dist/server/routes/backlog.js.map +0 -1
- package/dist/server/routes/db-info.js +0 -21
- package/dist/server/routes/db-info.js.map +0 -1
- package/dist/server/routes/docs.js +0 -70
- package/dist/server/routes/docs.js.map +0 -1
- package/dist/server/routes/doctor.js +0 -19
- package/dist/server/routes/doctor.js.map +0 -1
- package/dist/server/routes/handovers.js +0 -25
- package/dist/server/routes/handovers.js.map +0 -1
- package/dist/server/routes/health.js +0 -11
- package/dist/server/routes/health.js.map +0 -1
- package/dist/server/routes/personas.js +0 -96
- package/dist/server/routes/personas.js.map +0 -1
- package/dist/server/routes/runs.js +0 -41
- package/dist/server/routes/runs.js.map +0 -1
- package/dist/server/routes/workflows.js +0 -38
- package/dist/server/routes/workflows.js.map +0 -1
- package/dist/server/safety/harmful-output-filter.js +0 -40
- package/dist/server/safety/harmful-output-filter.js.map +0 -1
- package/dist/server/safety/secret-scanner.js +0 -169
- package/dist/server/safety/secret-scanner.js.map +0 -1
- package/dist/server/services/markdown-sync.js +0 -101
- package/dist/server/services/markdown-sync.js.map +0 -1
- package/dist/web/assets/index-B80d5ZPZ.js +0 -75
- package/dist/web/assets/index-B80d5ZPZ.js.map +0 -1
- package/dist/web/assets/index-Bge5Gzqv.css +0 -1
- package/dist/web/index.html +0 -13
- package/docs/architecture.md +0 -413
- package/rules/behavior.md +0 -252
- package/rules/branching.md +0 -82
- package/rules/commands.md +0 -112
- package/rules/emergency.md +0 -160
- package/rules/mcp.md +0 -47
- package/rules/models.md +0 -93
- package/scripts/copy-migrations.mjs +0 -29
- package/workflows/00-kortext-setup.md +0 -53
- package/workflows/01a-analysis-pipeline.md +0 -117
- package/workflows/01b-onboarding-pipeline.md +0 -110
- package/workflows/02-planning-pipeline.md +0 -146
- package/workflows/02b-spike-workflow.md +0 -120
- package/workflows/03-environment-setup.md +0 -99
- package/workflows/04-development-cycle.md +0 -203
- package/workflows/05-test-cycle.md +0 -123
- package/workflows/06-deployment-cycle.md +0 -224
- package/workflows/07-rollback-pipeline.md +0 -203
- package/workflows/08-hotfix-pipeline.md +0 -196
- package/workflows/09-maintenance-cycle.md +0 -133
- package/workspace/.locks/workspace_handover.md.lock +0 -3
- package/workspace/archive/.gitkeep +0 -0
- package/workspace/backups/.gitkeep +0 -0
- package/workspace/memory/backlog/.gitkeep +0 -0
- package/workspace/memory/backlog/BXX-[bug-name].md +0 -2
- package/workspace/memory/backlog/DXX-[debt-name].md +0 -2
- package/workspace/memory/backlog/README.md +0 -31
- package/workspace/memory/backlog/TXX-[task-name].md +0 -2
- package/workspace/memory/backlog/debt-dashboard.md +0 -3
- package/workspace/memory/backlog/epic-dashboard.md +0 -10
- package/workspace/memory/backlog/version-dashboard.md +0 -7
- package/workspace/memory/context/.gitkeep +0 -0
- package/workspace/memory/context/README.md +0 -35
- package/workspace/memory/context/[agent-name]-active.md +0 -2
- package/workspace/memory/decisions.md +0 -17
- package/workspace/memory/handover.md +0 -40
- package/workspace/memory/learned.md +0 -21
- package/workspace/references/access.md +0 -47
- package/workspace/references/api-reference.md +0 -59
- package/workspace/references/blueprint.md +0 -29
- package/workspace/references/content-strategy.md +0 -39
- package/workspace/references/db-schema.md +0 -51
- package/workspace/references/design-system.md +0 -107
- package/workspace/references/dictionary.md +0 -42
- package/workspace/references/file-system.md +0 -42
- package/workspace/references/growth-strategy.md +0 -46
- package/workspace/references/legal-strategy.md +0 -35
- package/workspace/references/required-skills.md +0 -11
- package/workspace/references/security-rules.md +0 -34
- package/workspace/references/tech-stack.md +0 -49
- package/workspace/references/test-strategy.md +0 -48
- package/workspace/reports/analysis-reports.md +0 -40
- package/workspace/reports/content-reports.md +0 -29
- package/workspace/reports/delivery-reports.md +0 -26
- package/workspace/reports/growth-reports.md +0 -9
- package/workspace/reports/legal-reports.md +0 -29
- package/workspace/reports/product-requirements.md +0 -28
- package/workspace/reports/release-notes.md +0 -20
- package/workspace/reports/security-reports.md +0 -27
- package/workspace/reports/status-reports.md +0 -48
- package/workspace/reports/tech-requirements.md +0 -30
- package/workspace/reports/test-reports.md +0 -61
- package/workspace/templates/BXX-[bug-name].md +0 -34
- package/workspace/templates/DXX-[debt-name].md +0 -35
- package/workspace/templates/EXX-[epic-name].md +0 -48
- package/workspace/templates/HXX-[hotfix-name].md +0 -73
- package/workspace/templates/SXX-[spike-name].md +0 -51
- package/workspace/templates/TXX-[task-name].md +0 -34
- package/workspace/templates/[agent-name]-active.md +0 -4
- package/workspace/templates/[original-name]_[YYYY-MM-DD_HHMMSS].md +0 -5
- package/workspace/templates/adr-XXX.md +0 -66
- package/workspace/templates/debt-dashboard.md +0 -10
- package/workspace/templates/epic-dashboard.md +0 -10
- 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
|
-
});
|