@karajan-family/code 4.21.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/LICENSE +661 -0
- package/README.md +98 -0
- package/bin/karajan-mcp.js +2 -0
- package/bin/kj-rag-mcp.js +75 -0
- package/bin/kj-tail +361 -0
- package/bin/kj.js +2 -0
- package/docs/README.es.md +80 -0
- package/docs/karajan-code-logo-small.png +0 -0
- package/library/logical-clocks-lamport.md +40 -0
- package/package.json +140 -0
- package/packages/ai-trash/README.md +37 -0
- package/packages/ai-trash/bin/kj-trash.js +10 -0
- package/packages/ai-trash/package.json +43 -0
- package/packages/ai-trash/src/cli.js +200 -0
- package/packages/ai-trash/src/destructive-parser.js +74 -0
- package/packages/ai-trash/src/git-snapshot.js +128 -0
- package/packages/ai-trash/src/hook.js +137 -0
- package/packages/ai-trash/src/index.js +14 -0
- package/packages/ai-trash/src/install.js +73 -0
- package/packages/ai-trash/src/logger.js +60 -0
- package/packages/ai-trash/src/manifest.js +91 -0
- package/packages/ai-trash/src/permissions.js +26 -0
- package/packages/ai-trash/src/snapshot.js +66 -0
- package/packages/ai-trash/src/ulid.js +66 -0
- package/packages/hu-board/README.md +69 -0
- package/packages/hu-board/package.json +28 -0
- package/packages/hu-board/public/app.js +259 -0
- package/packages/hu-board/public/index.html +77 -0
- package/packages/hu-board/public/pipeline.css +132 -0
- package/packages/hu-board/public/pipeline.html +48 -0
- package/packages/hu-board/public/pipeline.js +200 -0
- package/packages/hu-board/public/rag.html +21 -0
- package/packages/hu-board/public/rag.js +39 -0
- package/packages/hu-board/public/styles.css +973 -0
- package/packages/hu-board/public/utils/api.js +139 -0
- package/packages/hu-board/public/utils/board-view.js +473 -0
- package/packages/hu-board/public/utils/command-launcher.js +213 -0
- package/packages/hu-board/public/utils/config-editor.js +181 -0
- package/packages/hu-board/public/utils/dashboard-view.js +103 -0
- package/packages/hu-board/public/utils/formatters.js +300 -0
- package/packages/hu-board/public/utils/graph-view.js +216 -0
- package/packages/hu-board/public/utils/hu-actions.js +224 -0
- package/packages/hu-board/public/utils/init-listeners.js +180 -0
- package/packages/hu-board/public/utils/log-panel.js +222 -0
- package/packages/hu-board/public/utils/modals.js +309 -0
- package/packages/hu-board/public/utils/plan-rollup-view.js +53 -0
- package/packages/hu-board/public/utils/preflight-view.js +89 -0
- package/packages/hu-board/public/utils/project-actions.js +143 -0
- package/packages/hu-board/public/utils/project-picker-view.js +139 -0
- package/packages/hu-board/public/utils/run-launcher.js +169 -0
- package/packages/hu-board/public/utils/server-push.js +252 -0
- package/packages/hu-board/public/utils/sessions-view.js +199 -0
- package/packages/hu-board/public/utils/story-detail-view.js +324 -0
- package/packages/hu-board/public/utils/story-edit-form.js +271 -0
- package/packages/hu-board/public/wiki.html +32 -0
- package/packages/hu-board/public/wiki.js +53 -0
- package/packages/hu-board/src/auth.js +92 -0
- package/packages/hu-board/src/boot-info.js +16 -0
- package/packages/hu-board/src/cleanup-zombies.js +145 -0
- package/packages/hu-board/src/command-runner.js +133 -0
- package/packages/hu-board/src/config-yaml.js +531 -0
- package/packages/hu-board/src/db.js +963 -0
- package/packages/hu-board/src/ephemeral-cleaner.js +196 -0
- package/packages/hu-board/src/event-bus.js +58 -0
- package/packages/hu-board/src/format.js +207 -0
- package/packages/hu-board/src/hu-zombie-reaper.js +103 -0
- package/packages/hu-board/src/journal-parser.js +180 -0
- package/packages/hu-board/src/plan-mutations.js +424 -0
- package/packages/hu-board/src/preflight.js +286 -0
- package/packages/hu-board/src/routes/api.js +1374 -0
- package/packages/hu-board/src/routes/pipeline.js +45 -0
- package/packages/hu-board/src/routes/rag.js +42 -0
- package/packages/hu-board/src/routes/wiki.js +43 -0
- package/packages/hu-board/src/run-tracker.js +121 -0
- package/packages/hu-board/src/server.js +438 -0
- package/packages/hu-board/src/sync.js +732 -0
- package/packages/hu-board/src/token-store.js +56 -0
- package/packages/hu-board/src/zombie-reaper.js +206 -0
- package/scripts/ai-attribution-guard.yml +84 -0
- package/scripts/audit-test-diet.mjs +151 -0
- package/scripts/build-sea.mjs +150 -0
- package/scripts/diet-baseline.mjs +170 -0
- package/scripts/dual-publish.mjs +67 -0
- package/scripts/esbuild-sea.config.mjs +273 -0
- package/scripts/git-hooks/post-merge +18 -0
- package/scripts/install-binary.ps1 +174 -0
- package/scripts/install-binary.sh +159 -0
- package/scripts/install-guard-all-repos.sh +85 -0
- package/scripts/install-kj.sh +193 -0
- package/scripts/install.js +901 -0
- package/scripts/install.sh +7 -0
- package/scripts/postinstall.js +117 -0
- package/scripts/protect-all-repos.sh +88 -0
- package/scripts/quickstart-gate.mjs +97 -0
- package/scripts/regen-arch-stats.sh +71 -0
- package/scripts/setup-multi-instance.sh +150 -0
- package/scripts/verify-pack.mjs +278 -0
- package/src/activity-log.js +59 -0
- package/src/agents/agy-agent.js +62 -0
- package/src/agents/aider-agent.js +78 -0
- package/src/agents/availability.js +52 -0
- package/src/agents/base-agent.js +134 -0
- package/src/agents/claude-agent.js +413 -0
- package/src/agents/codex-agent.js +112 -0
- package/src/agents/copilot-agent.js +65 -0
- package/src/agents/gemini-agent.js +85 -0
- package/src/agents/host-agent.js +38 -0
- package/src/agents/index.js +59 -0
- package/src/agents/kimi-agent.js +45 -0
- package/src/agents/model-registry.js +137 -0
- package/src/agents/opencode-agent.js +72 -0
- package/src/agents/qwen-agent.js +20 -0
- package/src/agents/resolve-bin.js +73 -0
- package/src/audit/agent-readiness.js +259 -0
- package/src/audit/ai-slop-findings.js +102 -0
- package/src/audit/audit-fallback.js +66 -0
- package/src/audit/audit-history-display.js +61 -0
- package/src/audit/audit-history.js +102 -0
- package/src/audit/basal-cost.js +281 -0
- package/src/audit/circular-deps.js +144 -0
- package/src/audit/dead-exports.js +186 -0
- package/src/audit/deterministic-summary.js +327 -0
- package/src/audit/harness-scorecard.js +100 -0
- package/src/audit/harness-section.js +81 -0
- package/src/audit/infra-findings.js +100 -0
- package/src/audit/injection-findings.js +114 -0
- package/src/audit/issue-filter.js +133 -0
- package/src/audit/osv-findings.js +167 -0
- package/src/audit/plan-adherence.js +224 -0
- package/src/audit/semgrep-findings.js +129 -0
- package/src/audit/sonar-findings.js +93 -0
- package/src/audit/webperf-input.js +133 -0
- package/src/autonomy/arbiter-role.js +71 -0
- package/src/autonomy/arbiter.js +22 -0
- package/src/autonomy/decider.js +18 -0
- package/src/autonomy/decision-resolver.js +58 -0
- package/src/autonomy/outcome-report.js +55 -0
- package/src/autonomy/policy.js +41 -0
- package/src/autonomy/stage-ask.js +30 -0
- package/src/bootstrap.js +276 -0
- package/src/brain/agent-error-classifier.js +116 -0
- package/src/brain/decision-tracker.js +125 -0
- package/src/brain/decisor.js +243 -0
- package/src/brain/solomon-consult.js +171 -0
- package/src/brain/standby-scheduler.js +8 -0
- package/src/brain/standby-store.js +12 -0
- package/src/brain/with-brain-recovery.js +235 -0
- package/src/budget/comparison.js +96 -0
- package/src/canvas/parse-md.js +238 -0
- package/src/canvas/schema.js +101 -0
- package/src/canvas/to-flat.js +85 -0
- package/src/canvas/validate.js +163 -0
- package/src/checks/ai-surface.js +79 -0
- package/src/checks/ai-trash.js +34 -0
- package/src/checks/binaries.js +207 -0
- package/src/checks/ci.js +105 -0
- package/src/checks/config-files.js +217 -0
- package/src/checks/dir-setup.js +103 -0
- package/src/checks/guarantee-level.js +38 -0
- package/src/checks/hardware.js +150 -0
- package/src/checks/harness-scorecard.js +41 -0
- package/src/checks/mcp-health.js +169 -0
- package/src/checks/method.js +73 -0
- package/src/checks/native-build.js +67 -0
- package/src/checks/node.js +70 -0
- package/src/checks/ollama.js +41 -0
- package/src/checks/orphans.js +77 -0
- package/src/checks/ports.js +188 -0
- package/src/checks/project-checks.js +245 -0
- package/src/checks/qmd.js +41 -0
- package/src/checks/rag-hooks.js +54 -0
- package/src/checks/release-check.js +102 -0
- package/src/checks/rtk.js +36 -0
- package/src/checks/runner.js +326 -0
- package/src/checks/skills.js +53 -0
- package/src/checks/sonar.js +67 -0
- package/src/checks/squeezr.js +36 -0
- package/src/checks/system.js +53 -0
- package/src/checks/tokens.js +172 -0
- package/src/checks/types.js +103 -0
- package/src/ci/dispatch.js +99 -0
- package/src/ci/index.js +3 -0
- package/src/ci/pr-diff.js +26 -0
- package/src/ci/repo.js +45 -0
- package/src/cli/_shared.js +30 -0
- package/src/cli/advanced-commands.js +61 -0
- package/src/cli/register-meta.js +772 -0
- package/src/cli/register-pipeline.js +335 -0
- package/src/cli/register-plan.js +224 -0
- package/src/cli/register-roles-skills.js +54 -0
- package/src/cli/register-sonar.js +28 -0
- package/src/cli/register-standby.js +26 -0
- package/src/cli.js +155 -0
- package/src/commands/advanced.js +31 -0
- package/src/commands/agent-run.js +63 -0
- package/src/commands/agents.js +105 -0
- package/src/commands/architect.js +123 -0
- package/src/commands/audit.js +430 -0
- package/src/commands/autorun.js +49 -0
- package/src/commands/board.js +458 -0
- package/src/commands/check.js +40 -0
- package/src/commands/clean.js +145 -0
- package/src/commands/code.js +45 -0
- package/src/commands/config.js +74 -0
- package/src/commands/discover.js +105 -0
- package/src/commands/doctor.js +251 -0
- package/src/commands/env.js +207 -0
- package/src/commands/harden.js +203 -0
- package/src/commands/hu.js +210 -0
- package/src/commands/identity.js +60 -0
- package/src/commands/init.js +950 -0
- package/src/commands/install-tools.js +432 -0
- package/src/commands/mutate.js +94 -0
- package/src/commands/ollama.js +44 -0
- package/src/commands/onboard.js +45 -0
- package/src/commands/plan/_shared.js +55 -0
- package/src/commands/plan/add-hu.js +23 -0
- package/src/commands/plan/delete.js +9 -0
- package/src/commands/plan/fix.js +99 -0
- package/src/commands/plan/generate.js +532 -0
- package/src/commands/plan/index.js +13 -0
- package/src/commands/plan/list.js +21 -0
- package/src/commands/plan/migrate-result.js +41 -0
- package/src/commands/plan/ready.js +46 -0
- package/src/commands/plan/remove-hu.js +17 -0
- package/src/commands/plan/share.js +85 -0
- package/src/commands/plan/show.js +81 -0
- package/src/commands/plan/unshare.js +41 -0
- package/src/commands/plan/validate.js +20 -0
- package/src/commands/plan.js +17 -0
- package/src/commands/policy.js +164 -0
- package/src/commands/privacy.js +45 -0
- package/src/commands/qmd.js +86 -0
- package/src/commands/rag-mcp.js +18 -0
- package/src/commands/rag.js +173 -0
- package/src/commands/report-issue.js +77 -0
- package/src/commands/report.js +469 -0
- package/src/commands/researcher.js +54 -0
- package/src/commands/resume.js +68 -0
- package/src/commands/review-gate.js +355 -0
- package/src/commands/review.js +89 -0
- package/src/commands/roles.js +116 -0
- package/src/commands/run.js +185 -0
- package/src/commands/scan.js +18 -0
- package/src/commands/skills.js +86 -0
- package/src/commands/sonar.js +53 -0
- package/src/commands/standby.js +117 -0
- package/src/commands/start.js +121 -0
- package/src/commands/status.js +36 -0
- package/src/commands/sync.js +103 -0
- package/src/commands/telemetry.js +70 -0
- package/src/commands/tournament.js +85 -0
- package/src/commands/triage.js +78 -0
- package/src/commands/undo.js +62 -0
- package/src/commands/watch.js +46 -0
- package/src/commands/webperf.js +162 -0
- package/src/commands/worktree.js +76 -0
- package/src/config/defaults.js +270 -0
- package/src/config/loader.js +204 -0
- package/src/config/overrides.js +220 -0
- package/src/config/role-resolver.js +171 -0
- package/src/config/schema.js +299 -0
- package/src/config/test-harness.js +78 -0
- package/src/config.js +34 -0
- package/src/domains/domain-loader.js +245 -0
- package/src/domains/domain-registry.js +140 -0
- package/src/domains/domain-synthesizer.js +129 -0
- package/src/environment/adr.js +45 -0
- package/src/environment/board-access.js +97 -0
- package/src/environment/board-select.js +59 -0
- package/src/environment/briefs.js +129 -0
- package/src/environment/issue-report.js +72 -0
- package/src/environment/mcp-wiring.js +44 -0
- package/src/environment/playbook.js +127 -0
- package/src/git/automation.js +334 -0
- package/src/git/hu-automation.js +171 -0
- package/src/git/hu-snapshot.js +10 -0
- package/src/golden/asserter.js +92 -0
- package/src/golden/loader.js +52 -0
- package/src/golden/runner.js +92 -0
- package/src/golden/schema.js +41 -0
- package/src/guards/intent-guard.js +161 -0
- package/src/guards/output-guard.js +149 -0
- package/src/guards/perf-guard.js +126 -0
- package/src/guards/policy-guard.js +90 -0
- package/src/guards/policy-resolver.js +85 -0
- package/src/guards/secret-redactor.js +71 -0
- package/src/harden/advisory.js +203 -0
- package/src/harden/alternatives.js +50 -0
- package/src/harden/check.js +81 -0
- package/src/harden/config-engine.js +128 -0
- package/src/harden/config-templates.js +122 -0
- package/src/harden/guidelines-engine.js +48 -0
- package/src/harden/guidelines-templates.js +36 -0
- package/src/harden/harden-engine.js +80 -0
- package/src/harden/harness-hooks.js +107 -0
- package/src/harden/hook-commands.js +25 -0
- package/src/harden/hook-templates.js +183 -0
- package/src/harden/interactive.js +76 -0
- package/src/harden/sentinel-hooks.js +721 -0
- package/src/harden/stack-roots.js +105 -0
- package/src/harden/test-on-push.js +38 -0
- package/src/harden/workflow-engine.js +116 -0
- package/src/harden/workflow-templates.js +285 -0
- package/src/hu/acceptance-runner.js +138 -0
- package/src/hu/auto-generator.js +358 -0
- package/src/hu/graph.js +71 -0
- package/src/hu/lazy-planner.js +109 -0
- package/src/hu/model-router.js +108 -0
- package/src/hu/parallel-executor.js +94 -0
- package/src/hu/split-validator.js +143 -0
- package/src/hu/splitting-detector.js +158 -0
- package/src/hu/splitting-generator.js +175 -0
- package/src/hu/store.js +392 -0
- package/src/hu/worktree-bootstrap.js +59 -0
- package/src/identity/bootstrap.js +48 -0
- package/src/identity/compare.js +38 -0
- package/src/identity/detect.js +51 -0
- package/src/identity/store.js +66 -0
- package/src/infrastructure/command-runner.js +44 -0
- package/src/infrastructure/environment.js +38 -0
- package/src/infrastructure/file-system-service.js +63 -0
- package/src/infrastructure/mocks.js +182 -0
- package/src/lang/chunk-go.js +94 -0
- package/src/lang/chunk-java.js +90 -0
- package/src/lang/chunk-python.js +88 -0
- package/src/lang/chunk-rust.js +102 -0
- package/src/lang/go.js +14 -0
- package/src/lang/java.js +16 -0
- package/src/lang/js.js +8 -0
- package/src/lang/python.js +14 -0
- package/src/lang/registry.js +79 -0
- package/src/lang/rust.js +14 -0
- package/src/lang/tree-sitter-loader.js +45 -0
- package/src/mcp/direct-role-runner.js +112 -0
- package/src/mcp/error-classifiers.js +66 -0
- package/src/mcp/handlers/direct-handlers.js +486 -0
- package/src/mcp/handlers/hu-handlers.js +93 -0
- package/src/mcp/handlers/management-handlers.js +265 -0
- package/src/mcp/handlers/rag-handler.js +52 -0
- package/src/mcp/handlers/run-handler.js +313 -0
- package/src/mcp/orphan-guard.js +131 -0
- package/src/mcp/preflight.js +47 -0
- package/src/mcp/progress.js +149 -0
- package/src/mcp/response-compressor.js +81 -0
- package/src/mcp/run-kj.js +135 -0
- package/src/mcp/server-handlers.js +79 -0
- package/src/mcp/server.js +66 -0
- package/src/mcp/shared-helpers.js +297 -0
- package/src/mcp/sovereignty-guard.js +112 -0
- package/src/mcp/suggest-handler.js +92 -0
- package/src/mcp/tool-arg-normalizers.js +16 -0
- package/src/mcp/tools.js +432 -0
- package/src/mutate/diff-scope.js +105 -0
- package/src/mutate/reviewer-signal.js +76 -0
- package/src/mutate/runner.js +72 -0
- package/src/mutate/tool-registry.js +90 -0
- package/src/onboarder/cache.js +24 -0
- package/src/onboarder/collectors/framework-multilang.js +64 -0
- package/src/onboarder/collectors/index.js +136 -0
- package/src/orchestrator/agent-fallback.js +81 -0
- package/src/orchestrator/brain-coordinator.js +186 -0
- package/src/orchestrator/ci-integration.js +139 -0
- package/src/orchestrator/config-init.js +510 -0
- package/src/orchestrator/direct-actions.js +217 -0
- package/src/orchestrator/drivers/error-recovery.js +287 -0
- package/src/orchestrator/drivers/init-context.js +227 -0
- package/src/orchestrator/drivers/iteration-loop.js +380 -0
- package/src/orchestrator/drivers/iteration-phases/coder-and-refactorer.js +69 -0
- package/src/orchestrator/drivers/iteration-phases/guards.js +84 -0
- package/src/orchestrator/drivers/iteration-phases/handle-approved.js +29 -0
- package/src/orchestrator/drivers/iteration-phases/quality-gates.js +114 -0
- package/src/orchestrator/drivers/iteration-phases/reviewer-gate.js +60 -0
- package/src/orchestrator/drivers/post-loop.js +383 -0
- package/src/orchestrator/drivers/pre-loop-phases/auto-hu-batch.js +136 -0
- package/src/orchestrator/drivers/pre-loop-phases/config-deprecations.js +47 -0
- package/src/orchestrator/drivers/pre-loop-phases/ensure-addyosmani-skills.js +84 -0
- package/src/orchestrator/drivers/pre-loop-phases/inject-loaded-plan.js +391 -0
- package/src/orchestrator/drivers/pre-loop.js +507 -0
- package/src/orchestrator/drivers/run-hu-batch.js +427 -0
- package/src/orchestrator/feedback-enrichment.js +140 -0
- package/src/orchestrator/feedback-queue.js +151 -0
- package/src/orchestrator/flow-control.js +170 -0
- package/src/orchestrator/flow-runner.js +364 -0
- package/src/orchestrator/fs-leak-detector.js +210 -0
- package/src/orchestrator/hu-scheduler.js +114 -0
- package/src/orchestrator/hu-sub-pipeline.js +616 -0
- package/src/orchestrator/integrations.js +81 -0
- package/src/orchestrator/iteration-gate.js +73 -0
- package/src/orchestrator/iteration-stages.js +9 -0
- package/src/orchestrator/parallel-limiter.js +74 -0
- package/src/orchestrator/pipeline-context.js +72 -0
- package/src/orchestrator/post-loop-stages.js +468 -0
- package/src/orchestrator/pre-loop-stages.js +11 -0
- package/src/orchestrator/preflight-checks.js +462 -0
- package/src/orchestrator/repair/repair-detector.js +117 -0
- package/src/orchestrator/repair/repair-runner.js +142 -0
- package/src/orchestrator/reviewer-fallback.js +45 -0
- package/src/orchestrator/role-output-compressor.js +189 -0
- package/src/orchestrator/session-journal.js +308 -0
- package/src/orchestrator/solomon-escalation.js +305 -0
- package/src/orchestrator/solomon-rules.js +212 -0
- package/src/orchestrator/stages/architect-stage.js +172 -0
- package/src/orchestrator/stages/coder-stage.js +480 -0
- package/src/orchestrator/stages/domain-curator-stage.js +82 -0
- package/src/orchestrator/stages/hu-reviewer-phases/detect-and-apply-splits.js +127 -0
- package/src/orchestrator/stages/hu-reviewer-stage.js +394 -0
- package/src/orchestrator/stages/perf-stage.js +140 -0
- package/src/orchestrator/stages/planner-stage.js +85 -0
- package/src/orchestrator/stages/rag-context-stage.js +77 -0
- package/src/orchestrator/stages/rag-preload-decisor.js +58 -0
- package/src/orchestrator/stages/research-stage.js +69 -0
- package/src/orchestrator/stages/reviewer-stage.js +422 -0
- package/src/orchestrator/stages/sonar-stage.js +421 -0
- package/src/orchestrator/stages/stage-classes.js +84 -0
- package/src/orchestrator/stages/stage-executor.js +155 -0
- package/src/orchestrator/stages/tdd-discipline-stage.js +56 -0
- package/src/orchestrator/stages/tool-judge-stage.js +53 -0
- package/src/orchestrator/stages/triage-stage.js +172 -0
- package/src/orchestrator/standby.js +71 -0
- package/src/orchestrator/verification-gate.js +183 -0
- package/src/orchestrator.js +22 -0
- package/src/plan/adr-generator.js +170 -0
- package/src/plan/adr-loader.js +60 -0
- package/src/plan/plan-executor.js +100 -0
- package/src/plan/plan-fixer.js +192 -0
- package/src/plan/plan-hu-ops.js +16 -0
- package/src/plan/plan-id.js +4 -0
- package/src/plan/plan-migrate-result.js +24 -0
- package/src/plan/plan-reviewer.js +236 -0
- package/src/plan/plan-schema.js +334 -0
- package/src/plan/plan-store.js +260 -0
- package/src/plan/plan-structural-pass.js +122 -0
- package/src/plan/plan-validation.js +4 -0
- package/src/plan/preflight-hu.js +105 -0
- package/src/plan/spec-detector.js +61 -0
- package/src/plan/tests-synthesizer.js +131 -0
- package/src/planning-game/adapter.js +108 -0
- package/src/planning-game/architect-adrs.js +45 -0
- package/src/planning-game/client.js +108 -0
- package/src/planning-game/decomposition.js +87 -0
- package/src/planning-game/pipeline-adapter.js +251 -0
- package/src/plugins/loader.js +67 -0
- package/src/policy/add.js +111 -0
- package/src/policy/decisions.js +42 -0
- package/src/policy/engine.js +82 -0
- package/src/policy/exceptions.js +60 -0
- package/src/privacy/onboarding.js +35 -0
- package/src/privacy/scan.js +120 -0
- package/src/prompts/arbiter.js +38 -0
- package/src/prompts/architect.js +103 -0
- package/src/prompts/audit.js +474 -0
- package/src/prompts/coder.js +287 -0
- package/src/prompts/diff-clip.js +27 -0
- package/src/prompts/discover.js +222 -0
- package/src/prompts/hu-reviewer.js +219 -0
- package/src/prompts/planner.js +312 -0
- package/src/prompts/prompt-layout.js +80 -0
- package/src/prompts/prompt-resolver.js +120 -0
- package/src/prompts/reviewer.js +75 -0
- package/src/prompts/rtk-snippet.js +25 -0
- package/src/prompts/spec-reviewer.js +66 -0
- package/src/prompts/split-signal.js +82 -0
- package/src/prompts/start-decision.js +52 -0
- package/src/prompts/tool-correctness-judge.js +31 -0
- package/src/prompts/triage.js +57 -0
- package/src/rag/auto-update.js +72 -0
- package/src/rag/chunker-ast.js +56 -0
- package/src/rag/chunker.js +132 -0
- package/src/rag/embedder.js +2 -0
- package/src/rag/embedders/_cloud-base.js +2 -0
- package/src/rag/embedders/cohere.js +2 -0
- package/src/rag/embedders/factory.js +2 -0
- package/src/rag/embedders/mistral.js +2 -0
- package/src/rag/embedders/onnx.js +2 -0
- package/src/rag/embedders/openai.js +2 -0
- package/src/rag/embedders/voyage.js +2 -0
- package/src/rag/eval.js +61 -0
- package/src/rag/governed-embedder.js +39 -0
- package/src/rag/indexer.js +199 -0
- package/src/rag/library.js +62 -0
- package/src/rag/ollama-capability.js +59 -0
- package/src/rag/ollama-manager.js +98 -0
- package/src/rag/onnx-fallback.js +69 -0
- package/src/rag/rerank.js +4 -0
- package/src/rag/retriever.js +2 -0
- package/src/rag/vec-store.js +17 -0
- package/src/rag/watcher.js +62 -0
- package/src/rag/where-parser.js +4 -0
- package/src/repeat-detector.js +88 -0
- package/src/review/card-first.js +99 -0
- package/src/review/card-verify.js +83 -0
- package/src/review/diff-generator.js +112 -0
- package/src/review/gate-gitignore.js +77 -0
- package/src/review/git-stash-helper.js +104 -0
- package/src/review/mutation-pregate.js +48 -0
- package/src/review/one-shot-review.js +122 -0
- package/src/review/parser.js +80 -0
- package/src/review/policy-gate.js +26 -0
- package/src/review/profiles.js +66 -0
- package/src/review/reviewer-fallback.js +125 -0
- package/src/review/schema.js +31 -0
- package/src/review/scope-filter.js +152 -0
- package/src/review/snapshot-diff.js +122 -0
- package/src/review/solomon-arbitration.js +113 -0
- package/src/review/sonar-pregate.js +63 -0
- package/src/review/tdd-discipline.js +90 -0
- package/src/review/tdd-policy.js +69 -0
- package/src/review/tests-with-code.js +33 -0
- package/src/review/verdict-store.js +87 -0
- package/src/review/workspace.js +21 -0
- package/src/roles/agent-role.js +194 -0
- package/src/roles/architect-role.js +77 -0
- package/src/roles/audit-role.js +258 -0
- package/src/roles/base-role.js +165 -0
- package/src/roles/coder-role.js +107 -0
- package/src/roles/commiter-role.js +110 -0
- package/src/roles/discover-role.js +81 -0
- package/src/roles/domain-curator-role.js +141 -0
- package/src/roles/hu-reviewer-role.js +64 -0
- package/src/roles/impeccable-role.js +85 -0
- package/src/roles/index.js +18 -0
- package/src/roles/karajan-brain-role.js +134 -0
- package/src/roles/onboarder-role.js +61 -0
- package/src/roles/perf-role.js +122 -0
- package/src/roles/planner-role.js +151 -0
- package/src/roles/refactorer-role.js +30 -0
- package/src/roles/repairer-role.js +181 -0
- package/src/roles/researcher-role.js +70 -0
- package/src/roles/reviewer-role.js +104 -0
- package/src/roles/security-role.js +73 -0
- package/src/roles/solomon-role.js +265 -0
- package/src/roles/sonar-role.js +70 -0
- package/src/roles/spec-reviewer-role.js +106 -0
- package/src/roles/tester-role.js +235 -0
- package/src/roles/tool-correctness-judge-role.js +78 -0
- package/src/roles/triage-role.js +99 -0
- package/src/session/journal/decisions-writer.js +200 -0
- package/src/session/journal/iteration-logger.js +194 -0
- package/src/session/journal/summary-writer.js +320 -0
- package/src/session/journal/tree-writer.js +164 -0
- package/src/session/journal/write-all.js +89 -0
- package/src/session/mutators.js +339 -0
- package/src/session/runtime-overrides.js +59 -0
- package/src/session/store.js +106 -0
- package/src/session-cleanup.js +116 -0
- package/src/skills/addyosmani-catalog.js +315 -0
- package/src/skills/addyosmani-role-map.js +139 -0
- package/src/skills/openskills-client.js +157 -0
- package/src/skills/semantic-detector.js +167 -0
- package/src/skills/skill-detector.js +385 -0
- package/src/skills/skill-loader.js +219 -0
- package/src/skills/skills-cache.js +128 -0
- package/src/sonar/api.js +128 -0
- package/src/sonar/cloud-scanner.js +78 -0
- package/src/sonar/config-resolver.js +88 -0
- package/src/sonar/credentials.js +60 -0
- package/src/sonar/discovery.js +124 -0
- package/src/sonar/enforcer.js +19 -0
- package/src/sonar/issue-filter.js +12 -0
- package/src/sonar/manager.js +181 -0
- package/src/sonar/project-key.js +120 -0
- package/src/sonar/scanner.js +307 -0
- package/src/sonar/token-bootstrap.js +205 -0
- package/src/sonar/token-recovery.js +67 -0
- package/src/spec-review/refine-loop.js +58 -0
- package/src/spec-review/run-spec-review.js +119 -0
- package/src/start/assessment.js +74 -0
- package/src/start/maturity.js +73 -0
- package/src/start/start-decider-role.js +79 -0
- package/src/start/sweep.js +157 -0
- package/src/sync/apply-canvas-patch.js +55 -0
- package/src/sync/detect-drift.js +113 -0
- package/src/tournament/crown.js +88 -0
- package/src/tournament/judge.js +150 -0
- package/src/tournament/run.js +142 -0
- package/src/tournament/scoreboard.js +124 -0
- package/src/tracker-bootstrap.js +44 -0
- package/src/types/agent.js +55 -0
- package/src/types/config.js +114 -0
- package/src/types/hu.js +47 -0
- package/src/types/index.js +38 -0
- package/src/types/policy.js +43 -0
- package/src/types/session.js +75 -0
- package/src/types/solomon.js +87 -0
- package/src/types/stage.js +68 -0
- package/src/utils/agent-detect.js +93 -0
- package/src/utils/ai-trash.js +48 -0
- package/src/utils/async-lock.js +31 -0
- package/src/utils/atomic-write.js +6 -0
- package/src/utils/banner.js +66 -0
- package/src/utils/binary-sources.js +70 -0
- package/src/utils/board-prompt-bridge.js +108 -0
- package/src/utils/budget.js +229 -0
- package/src/utils/cli-ask-question.js +93 -0
- package/src/utils/cli-progress.js +220 -0
- package/src/utils/cli-run-log.js +83 -0
- package/src/utils/cwd-confirm.js +39 -0
- package/src/utils/derive-project-name-from-cwd.js +119 -0
- package/src/utils/display/event-handlers.js +403 -0
- package/src/utils/display/formatters.js +132 -0
- package/src/utils/display/header.js +47 -0
- package/src/utils/display/resume-hint.js +41 -0
- package/src/utils/display/session-summary.js +118 -0
- package/src/utils/display/solomon.js +42 -0
- package/src/utils/display/spec-findings.js +44 -0
- package/src/utils/doc-links.js +29 -0
- package/src/utils/docker-install.js +34 -0
- package/src/utils/escape-regexp.js +15 -0
- package/src/utils/events.js +35 -0
- package/src/utils/fs.js +19 -0
- package/src/utils/garbage-collector.js +481 -0
- package/src/utils/git.js +279 -0
- package/src/utils/home-migration.js +87 -0
- package/src/utils/injection-guard.js +186 -0
- package/src/utils/install-hints.js +180 -0
- package/src/utils/json-extract.js +64 -0
- package/src/utils/locale.js +59 -0
- package/src/utils/logger.js +96 -0
- package/src/utils/managed-markers.js +93 -0
- package/src/utils/manifest-sniff.js +82 -0
- package/src/utils/messages.js +61 -0
- package/src/utils/model-selector.js +107 -0
- package/src/utils/os-detect.js +79 -0
- package/src/utils/paths.js +13 -0
- package/src/utils/pending-user-action.js +95 -0
- package/src/utils/port-check.js +6 -0
- package/src/utils/port-occupant.js +96 -0
- package/src/utils/pricing.js +29 -0
- package/src/utils/process.js +4 -0
- package/src/utils/project-detect.js +160 -0
- package/src/utils/prompt-project-name.js +35 -0
- package/src/utils/provider-env.js +116 -0
- package/src/utils/qmd-collection.js +72 -0
- package/src/utils/qmd-detect.js +18 -0
- package/src/utils/qmd-install.js +37 -0
- package/src/utils/quota-simulator.js +56 -0
- package/src/utils/rate-limit-detector.js +181 -0
- package/src/utils/repo-cleaner.js +79 -0
- package/src/utils/retry.js +88 -0
- package/src/utils/role-assigner.js +137 -0
- package/src/utils/role-env.js +58 -0
- package/src/utils/rtk-detect.js +18 -0
- package/src/utils/rtk-install.js +38 -0
- package/src/utils/rtk-wrapper.js +87 -0
- package/src/utils/run-context.js +75 -0
- package/src/utils/run-log.js +217 -0
- package/src/utils/run-registry.js +9 -0
- package/src/utils/shared-paths.js +12 -0
- package/src/utils/squeezr-detect.js +21 -0
- package/src/utils/squeezr-install.js +37 -0
- package/src/utils/stack-detect.js +135 -0
- package/src/utils/stall-detector.js +159 -0
- package/src/utils/status-dashboard.js +254 -0
- package/src/utils/task-file.js +109 -0
- package/src/utils/telemetry.js +124 -0
- package/src/utils/templates-root.js +61 -0
- package/src/utils/tool-call-extractor.js +56 -0
- package/src/utils/tool-governor.js +116 -0
- package/src/utils/tool-installer.js +93 -0
- package/src/utils/update-check.js +280 -0
- package/src/utils/vector-store-orphans.js +89 -0
- package/src/utils/welcome.js +47 -0
- package/src/utils/with-timeout.js +42 -0
- package/src/utils/wizard.js +47 -0
- package/src/webperf/cwv-gate.js +94 -0
- package/src/webperf/devtools-detect.js +112 -0
- package/src/webperf/scanner.js +209 -0
- package/src/webperf/webperf-role-integration.js +66 -0
- package/templates/coder-rules.md +45 -0
- package/templates/docker-compose.sonar.yml +60 -0
- package/templates/domains/example-dental.md +57 -0
- package/templates/kj.config.yml +128 -0
- package/templates/review-rules.md +17 -0
- package/templates/roles/architect/anthropic.md +74 -0
- package/templates/roles/architect/default.md +72 -0
- package/templates/roles/architect/google.md +61 -0
- package/templates/roles/architect/openai.md +60 -0
- package/templates/roles/architect/opencode.md +59 -0
- package/templates/roles/architect.md +76 -0
- package/templates/roles/audit.md +68 -0
- package/templates/roles/coder/anthropic.md +81 -0
- package/templates/roles/coder/default.md +78 -0
- package/templates/roles/coder/google.md +87 -0
- package/templates/roles/coder/openai.md +68 -0
- package/templates/roles/coder/opencode.md +58 -0
- package/templates/roles/coder.md +152 -0
- package/templates/roles/commiter.md +44 -0
- package/templates/roles/discover.md +167 -0
- package/templates/roles/domain-curator.md +52 -0
- package/templates/roles/hu-reviewer.md +236 -0
- package/templates/roles/impeccable-design.md +87 -0
- package/templates/roles/impeccable.md +125 -0
- package/templates/roles/karajan-brain.md +95 -0
- package/templates/roles/onboarder.md +45 -0
- package/templates/roles/planner/anthropic.md +59 -0
- package/templates/roles/planner/default.md +57 -0
- package/templates/roles/planner/google.md +75 -0
- package/templates/roles/planner/openai.md +55 -0
- package/templates/roles/planner/opencode.md +62 -0
- package/templates/roles/planner.md +61 -0
- package/templates/roles/refactorer.md +48 -0
- package/templates/roles/repairer.md +103 -0
- package/templates/roles/researcher.md +41 -0
- package/templates/roles/reviewer/anthropic.md +61 -0
- package/templates/roles/reviewer/default.md +62 -0
- package/templates/roles/reviewer/google.md +63 -0
- package/templates/roles/reviewer/openai.md +57 -0
- package/templates/roles/reviewer/opencode.md +42 -0
- package/templates/roles/reviewer-paranoid.md +38 -0
- package/templates/roles/reviewer-relaxed.md +34 -0
- package/templates/roles/reviewer-strict.md +37 -0
- package/templates/roles/reviewer.md +62 -0
- package/templates/roles/security.md +54 -0
- package/templates/roles/solomon/anthropic.md +71 -0
- package/templates/roles/solomon/default.md +83 -0
- package/templates/roles/solomon/google.md +61 -0
- package/templates/roles/solomon/openai.md +53 -0
- package/templates/roles/solomon/opencode.md +55 -0
- package/templates/roles/solomon.md +83 -0
- package/templates/roles/sonar.md +49 -0
- package/templates/roles/spec-reviewer.md +47 -0
- package/templates/roles/tester.md +50 -0
- package/templates/roles/triage.md +69 -0
- package/templates/skills/kj-architect.md +45 -0
- package/templates/skills/kj-audit.md +63 -0
- package/templates/skills/kj-board.md +16 -0
- package/templates/skills/kj-code.md +51 -0
- package/templates/skills/kj-csv-transform.md +40 -0
- package/templates/skills/kj-data-report.md +44 -0
- package/templates/skills/kj-discover.md +24 -0
- package/templates/skills/kj-rag-query.md +50 -0
- package/templates/skills/kj-review.md +47 -0
- package/templates/skills/kj-run.md +73 -0
- package/templates/skills/kj-security.md +49 -0
- package/templates/skills/kj-sonar.md +41 -0
- package/templates/skills/kj-sql-analysis.md +40 -0
- package/templates/skills/kj-test.md +40 -0
- package/templates/workflows/automerge.yml +30 -0
- package/templates/workflows/houston-override.yml +46 -0
- package/templates/workflows/kj-ci-gateway.yml +58 -0
- package/vendor/tree-sitter-grammars/README.md +21 -0
- package/vendor/tree-sitter-grammars/go.wasm +0 -0
- package/vendor/tree-sitter-grammars/java.wasm +0 -0
- package/vendor/tree-sitter-grammars/python.wasm +0 -0
- package/vendor/tree-sitter-grammars/rust.wasm +0 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# Coder Role (Gemini-optimized)
|
|
2
|
+
|
|
3
|
+
You are the Coder. Write code and tests that fulfill the given task.
|
|
4
|
+
|
|
5
|
+
## Behaviour rules
|
|
6
|
+
|
|
7
|
+
- Follow TDD when `methodology=tdd`: tests first, then implementation.
|
|
8
|
+
- Change only what the task requires. "Minimal" does NOT mean avoiding new files — if the task names a deliverable, CREATE it.
|
|
9
|
+
- Before adding a helper, search the codebase for an equivalent and reuse it.
|
|
10
|
+
- No stubs, no `TODO` code, no placeholders — every function fully implemented.
|
|
11
|
+
- Tests must pass and code must compile before you report done.
|
|
12
|
+
|
|
13
|
+
## Examples of expected behaviour
|
|
14
|
+
|
|
15
|
+
### Example 1 — TDD on a simple function
|
|
16
|
+
|
|
17
|
+
Task: "Add a `slugify(s)` util that returns lowercase kebab-case."
|
|
18
|
+
|
|
19
|
+
Expected flow:
|
|
20
|
+
1. Read `src/utils/` to check for an existing similar function.
|
|
21
|
+
2. Write `tests/utils-slugify.test.js` with 5 cases (mixed case, accents, numbers, empty, unicode).
|
|
22
|
+
3. Confirm all 5 fail.
|
|
23
|
+
4. Implement `src/utils/slugify.js`.
|
|
24
|
+
5. Re-run tests → all 5 pass.
|
|
25
|
+
6. Output JSON lists both files as created + 5 tests added.
|
|
26
|
+
|
|
27
|
+
### Example 2 — Scope discipline
|
|
28
|
+
|
|
29
|
+
Task: "Fix the off-by-one in `paginate(list, page)` at `src/utils/paginate.js`".
|
|
30
|
+
|
|
31
|
+
Expected flow:
|
|
32
|
+
- Modify only `paginate.js` and its test.
|
|
33
|
+
- Do NOT reformat other functions in the file.
|
|
34
|
+
- `git diff` shows a one-line functional change plus the new test.
|
|
35
|
+
|
|
36
|
+
### Example 3 — Secret hygiene
|
|
37
|
+
|
|
38
|
+
Task: "Wire the project to Stripe."
|
|
39
|
+
|
|
40
|
+
Expected flow:
|
|
41
|
+
- Read `STRIPE_SECRET_KEY` from `process.env`.
|
|
42
|
+
- Add `STRIPE_SECRET_KEY=` to `.env.example`.
|
|
43
|
+
- Confirm `.env` is listed in `.gitignore` (add it if missing).
|
|
44
|
+
- Never embed the real key in source.
|
|
45
|
+
|
|
46
|
+
## Completeness check
|
|
47
|
+
|
|
48
|
+
Before reporting done:
|
|
49
|
+
1. Re-read task description and every acceptance criterion.
|
|
50
|
+
2. Every named deliverable exists.
|
|
51
|
+
3. Test suite passes end-to-end.
|
|
52
|
+
4. `git diff` shows only the intended lines.
|
|
53
|
+
|
|
54
|
+
An incomplete implementation is worse than an error — don't claim success if parts are missing.
|
|
55
|
+
|
|
56
|
+
## File safety
|
|
57
|
+
|
|
58
|
+
- NEVER overwrite a file entirely. Targeted edits only.
|
|
59
|
+
- Verify each edit with `git diff`. Unintended lines → revert with `git checkout -- <file>`.
|
|
60
|
+
|
|
61
|
+
## Quality
|
|
62
|
+
|
|
63
|
+
- SOLID. Small functions (< 30 lines). Atomic commits. No `console.log` in production, no `any` types (JSDoc instead).
|
|
64
|
+
|
|
65
|
+
## Output
|
|
66
|
+
|
|
67
|
+
```json
|
|
68
|
+
{
|
|
69
|
+
"ok": true,
|
|
70
|
+
"result": {
|
|
71
|
+
"files_modified": ["path/to/file.js"],
|
|
72
|
+
"files_created": ["path/to/new-file.js"],
|
|
73
|
+
"tests_added": ["path/to/test.js"],
|
|
74
|
+
"approach": "Brief description of what was done"
|
|
75
|
+
},
|
|
76
|
+
"summary": "Human-readable summary of changes"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## PR atomicity (hard project rule)
|
|
81
|
+
|
|
82
|
+
Karajan projects MAY enforce a CI gate that fails any PR whose net delta exceeds **200 lines added** (the karajan-code repo itself enforces this since 2026-05-08). Plan your work to stay atomic:
|
|
83
|
+
|
|
84
|
+
- Aim for **~150 LOC** of changes per unit you produce (safety margin against the 200 hard limit).
|
|
85
|
+
- The gate counts the SUM of every changed file, not per-file. Tests count too. 5 files × 40 LOC = 200 = on the limit.
|
|
86
|
+
- Excluded from the count: lockfiles, snapshots, `dist/`, `node_modules/`, generated `tests/_diet/`, `public/docs/`. Source + tests count.
|
|
87
|
+
- Token-economy: oversized PRs get rejected at CI and the work is redone — partitioning upfront saves the round-trip.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Coder Role
|
|
2
|
+
|
|
3
|
+
You are the Coder. Write code and tests that fulfill the task.
|
|
4
|
+
|
|
5
|
+
## RULES (non-negotiable)
|
|
6
|
+
|
|
7
|
+
1. **TDD** when `methodology=tdd`: tests first, then implementation.
|
|
8
|
+
2. **Stay focused.** Change only what the task requires.
|
|
9
|
+
3. **Minimal ≠ avoid new files.** If the task names a file/component/page/test, CREATE it. Updating references without the target file is an incomplete implementation.
|
|
10
|
+
4. **Reuse.** Before writing a new helper, search the codebase for an equivalent.
|
|
11
|
+
5. **No stubs.** NEVER generate TODO/placeholder/skeleton code. Every function must fully implement its contract.
|
|
12
|
+
6. **No broken commits.** Code must compile and tests must pass before you report done.
|
|
13
|
+
|
|
14
|
+
## COMPLETENESS CHECK
|
|
15
|
+
|
|
16
|
+
Before reporting done:
|
|
17
|
+
- Re-read the task and every acceptance criterion.
|
|
18
|
+
- Every named deliverable exists.
|
|
19
|
+
- Test suite passes (`npm test` / `pytest` / project equivalent).
|
|
20
|
+
- `git diff` shows only intended changes.
|
|
21
|
+
|
|
22
|
+
An incomplete implementation is worse than an error. Do NOT claim success if any part is missing.
|
|
23
|
+
|
|
24
|
+
## SECURITY
|
|
25
|
+
|
|
26
|
+
- NEVER hardcode secrets (API keys, tokens, passwords). Use `process.env` / `os.environ`.
|
|
27
|
+
- Create `.env.example` with placeholders for any new env var; add `.env` to `.gitignore`.
|
|
28
|
+
- DB connection strings with credentials → env vars only.
|
|
29
|
+
- HTTP: httpOnly cookies for auth tokens, validate all input, parameterize SQL queries.
|
|
30
|
+
|
|
31
|
+
## FILE SAFETY
|
|
32
|
+
|
|
33
|
+
- NEVER overwrite a file wholesale. Make targeted edits.
|
|
34
|
+
- Verify after each edit with `git diff` that ONLY intended lines changed.
|
|
35
|
+
- If unintended changes appear, revert with `git checkout -- <file>`.
|
|
36
|
+
- CSS/HTML/config files are high-risk for destructive rewrites.
|
|
37
|
+
|
|
38
|
+
## QUALITY
|
|
39
|
+
|
|
40
|
+
- SOLID. Small focused functions (< 30 lines).
|
|
41
|
+
- Atomic commits (1 logical change = 1 commit).
|
|
42
|
+
- No `console.log` in production. Use a structured logger.
|
|
43
|
+
- No `any` types. Use JSDoc annotations.
|
|
44
|
+
|
|
45
|
+
## OUTPUT
|
|
46
|
+
|
|
47
|
+
Return JSON:
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"ok": true,
|
|
51
|
+
"result": {
|
|
52
|
+
"files_modified": ["path/to/file.js"],
|
|
53
|
+
"files_created": ["path/to/new-file.js"],
|
|
54
|
+
"tests_added": ["path/to/test.js"],
|
|
55
|
+
"approach": "Brief description of what was done"
|
|
56
|
+
},
|
|
57
|
+
"summary": "Human-readable summary of changes"
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## PR atomicity (hard project rule)
|
|
62
|
+
|
|
63
|
+
Karajan projects MAY enforce a CI gate that fails any PR whose net delta exceeds **200 lines added** (the karajan-code repo itself enforces this since 2026-05-08). Plan your work to stay atomic:
|
|
64
|
+
|
|
65
|
+
- Aim for **~150 LOC** of changes per unit you produce (safety margin against the 200 hard limit).
|
|
66
|
+
- The gate counts the SUM of every changed file, not per-file. Tests count too. 5 files × 40 LOC = 200 = on the limit.
|
|
67
|
+
- Excluded from the count: lockfiles, snapshots, `dist/`, `node_modules/`, generated `tests/_diet/`, `public/docs/`. Source + tests count.
|
|
68
|
+
- Token-economy: oversized PRs get rejected at CI and the work is redone — partitioning upfront saves the round-trip.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Coder
|
|
2
|
+
|
|
3
|
+
Role: write code and tests for the given task.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
1. If `methodology=tdd`: tests first, then implementation.
|
|
8
|
+
2. Edit only what the task requires. Do not touch unrelated code.
|
|
9
|
+
3. If the task names a new file, CREATE it. Updating references without the file is wrong.
|
|
10
|
+
4. Before creating a helper, search for an existing one. Reuse over duplicate.
|
|
11
|
+
5. No stubs. No TODOs. No placeholders. Every function must be fully implemented.
|
|
12
|
+
6. Code must compile. Tests must pass.
|
|
13
|
+
7. Never hardcode secrets. Use environment variables (`process.env` in Node, `os.environ` in Python).
|
|
14
|
+
8. Never overwrite a file entirely. Make targeted edits only.
|
|
15
|
+
9. Small functions (< 30 lines). Atomic commits. No `console.log` in production. No `any` types.
|
|
16
|
+
|
|
17
|
+
## Before reporting done
|
|
18
|
+
|
|
19
|
+
Check:
|
|
20
|
+
- Every acceptance criterion is addressed.
|
|
21
|
+
- Every named deliverable exists.
|
|
22
|
+
- Tests pass.
|
|
23
|
+
- `git diff` shows only the intended changes.
|
|
24
|
+
|
|
25
|
+
If anything is missing, do NOT report success. Report the remaining gap.
|
|
26
|
+
|
|
27
|
+
## Output
|
|
28
|
+
|
|
29
|
+
Return exactly this JSON shape:
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"ok": true,
|
|
34
|
+
"result": {
|
|
35
|
+
"files_modified": ["path/to/file.js"],
|
|
36
|
+
"files_created": ["path/to/new-file.js"],
|
|
37
|
+
"tests_added": ["path/to/test.js"],
|
|
38
|
+
"approach": "Brief description of what was done"
|
|
39
|
+
},
|
|
40
|
+
"summary": "Human-readable summary of changes"
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Rules for the JSON:
|
|
45
|
+
- `ok` is `true` only if all checks above pass.
|
|
46
|
+
- `files_modified`, `files_created`, `tests_added` are arrays of strings (may be empty but never null).
|
|
47
|
+
- `approach` is one short sentence.
|
|
48
|
+
- `summary` is one short sentence.
|
|
49
|
+
- No extra keys. No text before or after the JSON.
|
|
50
|
+
|
|
51
|
+
## PR atomicity (hard project rule)
|
|
52
|
+
|
|
53
|
+
Karajan projects MAY enforce a CI gate that fails any PR whose net delta exceeds **200 lines added** (the karajan-code repo itself enforces this since 2026-05-08). Plan your work to stay atomic:
|
|
54
|
+
|
|
55
|
+
- Aim for **~150 LOC** of changes per unit you produce (safety margin against the 200 hard limit).
|
|
56
|
+
- The gate counts the SUM of every changed file, not per-file. Tests count too. 5 files × 40 LOC = 200 = on the limit.
|
|
57
|
+
- Excluded from the count: lockfiles, snapshots, `dist/`, `node_modules/`, generated `tests/_diet/`, `public/docs/`. Source + tests count.
|
|
58
|
+
- Token-economy: oversized PRs get rejected at CI and the work is redone — partitioning upfront saves the round-trip.
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
# Coder Role
|
|
2
|
+
|
|
3
|
+
You are the **Coder** in a multi-role AI pipeline. Your job is to write code and tests that fulfill the given task.
|
|
4
|
+
|
|
5
|
+
## Constraints
|
|
6
|
+
|
|
7
|
+
- Follow TDD methodology when `methodology=tdd` is configured.
|
|
8
|
+
- Write tests BEFORE implementation when using TDD.
|
|
9
|
+
- Keep changes minimal and focused on the task.
|
|
10
|
+
- "Minimal" means no unnecessary changes — it does NOT mean avoiding new files. If the task requires creating new files (pages, components, modules, tests), you MUST create them. Updating references/links without creating the actual files is an incomplete implementation.
|
|
11
|
+
- Change only the code the task requires; leave everything else as it is.
|
|
12
|
+
- Before creating a new utility or helper, check if a similar one already exists in the codebase. Reuse existing code over creating duplicates.
|
|
13
|
+
- Follow existing code conventions and patterns in the repository.
|
|
14
|
+
|
|
15
|
+
## Constructive dissent (raise real blockers before you code)
|
|
16
|
+
|
|
17
|
+
You are an Active Partner, not a silent contractor. Before implementing, if you
|
|
18
|
+
detect a genuine problem with the task, surface it FIRST instead of quietly
|
|
19
|
+
coding around it:
|
|
20
|
+
|
|
21
|
+
- A contradiction between two requirements that cannot both hold.
|
|
22
|
+
- A false or impossible premise — the task assumes a fact, file, or API that
|
|
23
|
+
does not exist, or forces an outcome that cannot be correct.
|
|
24
|
+
- A concrete security or maintainability risk in what is being asked.
|
|
25
|
+
|
|
26
|
+
Report it concisely in `result.concerns` (an array of short strings). When a
|
|
27
|
+
blocker makes the task unworkable as stated, stop and report instead of guessing.
|
|
28
|
+
|
|
29
|
+
Keep the bar high. Proceed silently when the task is clear and coherent — do NOT
|
|
30
|
+
object to trivial or stylistic details, and do NOT manufacture doubts to look
|
|
31
|
+
thorough. Relevance is the test: raise only what would derail the result.
|
|
32
|
+
|
|
33
|
+
## Check alignment (moderate or complex tasks only)
|
|
34
|
+
|
|
35
|
+
When the task has moderate or high scope — it spans several files, touches
|
|
36
|
+
architecture, security or testing, or leaves any real doubt about the goal —
|
|
37
|
+
state your understanding BEFORE writing code:
|
|
38
|
+
|
|
39
|
+
- One or two sentences on what you understood the task to be.
|
|
40
|
+
- Any open questions whose answer would change the implementation.
|
|
41
|
+
|
|
42
|
+
Report this in `result.alignment` (`{ "understood": "…", "open_questions": [] }`).
|
|
43
|
+
Surfacing a misread here is far cheaper than discovering it after the diff.
|
|
44
|
+
|
|
45
|
+
Do NOT add this step for trivial or small, unambiguous tasks — proceed straight
|
|
46
|
+
to the code. This gate is for tasks big enough that a wrong assumption is costly,
|
|
47
|
+
not a ritual for every change.
|
|
48
|
+
|
|
49
|
+
## PR atomicity (hard project rule)
|
|
50
|
+
|
|
51
|
+
Karajan projects MAY enforce a CI gate that fails any PR whose net delta exceeds **200 lines added** (the karajan-code repo itself enforces this since 2026-05-08). Plan before writing:
|
|
52
|
+
|
|
53
|
+
- Stay under **~150 LOC per iteration** (safety margin against the 200 hard limit).
|
|
54
|
+
- The gate counts the SUM of every changed file, not per-file. Tests count too. 5 files × 40 LOC = 200 = on the limit.
|
|
55
|
+
- If the task clearly requires >150 LOC, STOP and report the partition needed. Don't ship a 500-LOC PR — the gate rejects it and the work is redone, burning tokens twice.
|
|
56
|
+
- Excluded from the count: lockfiles, snapshots, `dist/`, `node_modules/`, generated `tests/_diet/`, `public/docs/`. Source + tests count.
|
|
57
|
+
|
|
58
|
+
## Task completeness
|
|
59
|
+
|
|
60
|
+
Before reporting done, verify that ALL parts of the task are addressed:
|
|
61
|
+
- Re-read the task description and acceptance criteria.
|
|
62
|
+
- Check every requirement — if the task says "create pages X and Y", both must exist.
|
|
63
|
+
- If the task lists multiple deliverables, each one must be implemented, not just some.
|
|
64
|
+
- Run the test suite after implementation to verify nothing is broken.
|
|
65
|
+
- An incomplete implementation is worse than an error — never report success if parts are missing.
|
|
66
|
+
|
|
67
|
+
## Implementation Rules
|
|
68
|
+
- NEVER generate placeholder, stub, or TODO code. Every function must be fully implemented.
|
|
69
|
+
- If the task says "create X", create the complete working implementation, not a skeleton.
|
|
70
|
+
- If tests exist, the implementation MUST make all tests pass.
|
|
71
|
+
- If you write tests first (TDD), the implementation MUST make those tests pass.
|
|
72
|
+
- Commit only code that compiles and passes the full test suite.
|
|
73
|
+
|
|
74
|
+
## Test file location (MANDATORY convention)
|
|
75
|
+
|
|
76
|
+
Tests live in a top-level `tests/` directory (or `test/` if the project already
|
|
77
|
+
established that convention). Mirror the source tree under it: a function in
|
|
78
|
+
`src/services/foo.js` is tested by `tests/services/foo.test.js`, NOT by a
|
|
79
|
+
sibling file inside `src/`. This is the default Karajan convention; the only
|
|
80
|
+
exception is when a `.karajan/coder-rules.md` in the project repo explicitly
|
|
81
|
+
overrides it.
|
|
82
|
+
|
|
83
|
+
Why this matters:
|
|
84
|
+
- Reviewers and humans look in `tests/`, not next to source. Buried tests get
|
|
85
|
+
treated as "no tests exist" even when they do.
|
|
86
|
+
- Sonar's default `sonar.tests=tests` (and equivalents in other scanners) only
|
|
87
|
+
finds tests there. Putting tests under `src/` produces empty coverage and
|
|
88
|
+
scanner errors.
|
|
89
|
+
- Bundlers (Vite, esbuild, Astro, etc.) skip a `tests/` tree by default;
|
|
90
|
+
in-source tests can leak into production bundles unless every config
|
|
91
|
+
explicitly excludes them.
|
|
92
|
+
|
|
93
|
+
When generating a project from scratch:
|
|
94
|
+
- Create the `tests/` directory.
|
|
95
|
+
- Configure the test runner to look there (`include: ['tests/**/*.test.{js,ts}']`
|
|
96
|
+
in vitest, `testMatch` in jest, etc.).
|
|
97
|
+
- Configure the build tool to ignore it (`vite.config` excludes, etc.).
|
|
98
|
+
- Configure Sonar (if `sonar-project.properties` is generated) with
|
|
99
|
+
`sonar.sources=src`, `sonar.tests=tests`, and verify both directories exist
|
|
100
|
+
before writing the file. NEVER write `sonar.tests=tests` without a `tests/`
|
|
101
|
+
folder — Sonar will refuse to scan and the run will burn iterations.
|
|
102
|
+
|
|
103
|
+
When modifying an existing project:
|
|
104
|
+
- Match whatever convention is already in place; do NOT introduce a second
|
|
105
|
+
one. If `tests/` exists, put new tests there. If only `src/**/*.test.js`
|
|
106
|
+
exists, follow that.
|
|
107
|
+
|
|
108
|
+
## Secrets and environment variables
|
|
109
|
+
|
|
110
|
+
- NEVER hardcode API keys, tokens, passwords, secrets, or credentials in source code. No exceptions, not even for public keys or test keys.
|
|
111
|
+
- ALWAYS use environment variables via `process.env` (Node.js), `os.environ` (Python), or the equivalent for the project's language.
|
|
112
|
+
- If the project needs API keys, create a `.env.example` file with placeholder values and add `.env` to `.gitignore`.
|
|
113
|
+
- If `.gitignore` does not already include `.env`, add it.
|
|
114
|
+
- If the task requires Firebase, Stripe, OpenAI, or any third-party API: use `.env` for the keys and document required variables in `.env.example` or README.
|
|
115
|
+
- Database connection strings with credentials MUST use environment variables.
|
|
116
|
+
|
|
117
|
+
## File modification safety
|
|
118
|
+
|
|
119
|
+
- NEVER overwrite existing files entirely. Always make targeted, minimal edits.
|
|
120
|
+
- When adding new code to an existing file, insert only the new lines at the correct location.
|
|
121
|
+
- After each edit, verify with `git diff` that ONLY the intended lines changed.
|
|
122
|
+
- If unintended changes are detected, revert immediately with `git checkout -- <file>`.
|
|
123
|
+
- Pay special attention to CSS, HTML, and config files where full rewrites destroy prior work.
|
|
124
|
+
|
|
125
|
+
## Code Quality Rules
|
|
126
|
+
|
|
127
|
+
- Follow SOLID principles. Write small, focused functions (< 30 lines).
|
|
128
|
+
- Make atomic commits: 1 logical change = 1 commit. Keep PRs small and reviewable.
|
|
129
|
+
- Security: use httpOnly cookies for auth tokens, validate all input, parameterize queries, never expose secrets.
|
|
130
|
+
- No console.log in production code -- use a structured logger. No 'any' types -- use JSDoc annotations.
|
|
131
|
+
|
|
132
|
+
## Output format
|
|
133
|
+
|
|
134
|
+
Return a JSON object:
|
|
135
|
+
```json
|
|
136
|
+
{
|
|
137
|
+
"ok": true,
|
|
138
|
+
"result": {
|
|
139
|
+
"files_modified": ["path/to/file.js"],
|
|
140
|
+
"files_created": ["path/to/new-file.js"],
|
|
141
|
+
"tests_added": ["path/to/test.js"],
|
|
142
|
+
"approach": "Brief description of what was done",
|
|
143
|
+
"concerns": [],
|
|
144
|
+
"alignment": null
|
|
145
|
+
},
|
|
146
|
+
"summary": "Human-readable summary of changes"
|
|
147
|
+
}
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
## Prior context (RAG, opt-in)
|
|
151
|
+
|
|
152
|
+
If you need to know how the project handled a similar concern before (auth, error model, retry policy, naming convention…), call the `kj_rag_query` MCP tool with `{ text, topK: 3, scope: "all" }`. It returns the closest chunks from prior plans + onboarding brief + indexed sources. When the response carries `empty: true`, the corpus has not been indexed yet — proceed without it; do NOT block on retrieval, and do NOT ask the human to run `kj rag index`. Use sparingly: one query per concern, not per file.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Commiter Role
|
|
2
|
+
|
|
3
|
+
You are the **Commiter** in a multi-role AI pipeline. Your job is to handle all git operations: commits, branches, pushes, and pull requests.
|
|
4
|
+
|
|
5
|
+
## Rules
|
|
6
|
+
|
|
7
|
+
### Commit messages
|
|
8
|
+
- Follow **Conventional Commits**: `feat:`, `fix:`, `refactor:`, `docs:`, `test:`, `chore:`
|
|
9
|
+
- First line < 70 characters
|
|
10
|
+
- NEVER include references to AI, Claude, Copilot, or any AI tool in commit messages
|
|
11
|
+
- Be specific: "fix: prevent null pointer in user lookup" not "fix: bug fix"
|
|
12
|
+
|
|
13
|
+
### Branching
|
|
14
|
+
- One branch per task: `feat/{CARD-ID}-description` or `fix/{CARD-ID}-description`
|
|
15
|
+
- Always branch from latest main
|
|
16
|
+
- Never push directly to main
|
|
17
|
+
|
|
18
|
+
### Commits
|
|
19
|
+
- Atomic commits: one logical change per commit
|
|
20
|
+
- Each commit should compile and pass tests on its own
|
|
21
|
+
- Maximum ~300 lines changed per PR (ideal < 200)
|
|
22
|
+
|
|
23
|
+
### Pull requests
|
|
24
|
+
- One PR per task/bug
|
|
25
|
+
- Title < 70 characters
|
|
26
|
+
- Description includes: summary, test plan
|
|
27
|
+
- NEVER include AI references in PR descriptions
|
|
28
|
+
|
|
29
|
+
## Output format
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"ok": true,
|
|
34
|
+
"result": {
|
|
35
|
+
"branch": "feat/KJC-TSK-0042-add-widget",
|
|
36
|
+
"commits": [
|
|
37
|
+
{ "hash": "abc1234", "message": "feat: add widget base class" }
|
|
38
|
+
],
|
|
39
|
+
"pr_url": "https://github.com/org/repo/pull/42",
|
|
40
|
+
"pr_number": 42
|
|
41
|
+
},
|
|
42
|
+
"summary": "Created PR #42 with 1 commit on branch feat/KJC-TSK-0042-add-widget"
|
|
43
|
+
}
|
|
44
|
+
```
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
# Discover Role
|
|
2
|
+
|
|
3
|
+
You are the **Discover** role in a multi-role AI pipeline.
|
|
4
|
+
|
|
5
|
+
Your job is to analyze a task description, ticket, or brief and identify **gaps** — missing information, implicit assumptions, ambiguities, and contradictions that could cause unnecessary iterations during implementation.
|
|
6
|
+
|
|
7
|
+
## Responsibilities
|
|
8
|
+
|
|
9
|
+
- Detect missing requirements or acceptance criteria
|
|
10
|
+
- Identify implicit assumptions that need explicit confirmation
|
|
11
|
+
- Find ambiguities where multiple interpretations are possible
|
|
12
|
+
- Spot contradictions between different parts of the specification
|
|
13
|
+
- Suggest specific questions that would resolve each gap
|
|
14
|
+
|
|
15
|
+
## Severity Classification
|
|
16
|
+
|
|
17
|
+
- **critical**: Blocks implementation entirely — cannot proceed without this information
|
|
18
|
+
- **major**: Could lead to significant rework if assumed incorrectly
|
|
19
|
+
- **minor**: Nice to clarify but a reasonable default exists
|
|
20
|
+
|
|
21
|
+
## Verdict
|
|
22
|
+
|
|
23
|
+
- **ready**: The task is well-defined and can proceed to implementation without further clarification
|
|
24
|
+
- **needs_validation**: One or more gaps were found that should be resolved before implementation
|
|
25
|
+
|
|
26
|
+
## Output format
|
|
27
|
+
|
|
28
|
+
Return a single valid JSON object and nothing else.
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"verdict": "ready|needs_validation",
|
|
33
|
+
"gaps": [
|
|
34
|
+
{
|
|
35
|
+
"id": "gap-1",
|
|
36
|
+
"description": "What information is missing or ambiguous",
|
|
37
|
+
"severity": "critical|major|minor",
|
|
38
|
+
"suggestedQuestion": "A specific question to resolve this gap"
|
|
39
|
+
}
|
|
40
|
+
],
|
|
41
|
+
"summary": "Brief human-readable summary of findings"
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
If the task is well-defined with no gaps, return `verdict: "ready"` with an empty `gaps` array.
|
|
46
|
+
|
|
47
|
+
## Mom Test Mode
|
|
48
|
+
|
|
49
|
+
When running in **momtest** mode, for each gap generate questions following The Mom Test principles:
|
|
50
|
+
|
|
51
|
+
- Ask about **past behavior** and real experiences, never hypothetical scenarios
|
|
52
|
+
- Ask about **specifics**, not generalities
|
|
53
|
+
- Focus on what people **actually do**, not what they say they would do
|
|
54
|
+
|
|
55
|
+
### Good vs Bad Questions
|
|
56
|
+
|
|
57
|
+
| Bad (hypothetical/opinion) | Good (past behavior) |
|
|
58
|
+
|---|---|
|
|
59
|
+
| "Would you use a notification system?" | "When was the last time you missed an important update?" |
|
|
60
|
+
| "Do you think users need dark mode?" | "How many support tickets mentioned readability issues?" |
|
|
61
|
+
| "Would it be useful to have X?" | "How are you currently handling X?" |
|
|
62
|
+
|
|
63
|
+
### Mom Test Output Schema (additional fields for momtest mode)
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
{
|
|
67
|
+
"momTestQuestions": [
|
|
68
|
+
{
|
|
69
|
+
"gapId": "gap-1",
|
|
70
|
+
"question": "Past-behavior question to validate this gap",
|
|
71
|
+
"targetRole": "Who should answer (end-user, developer, PM, etc.)",
|
|
72
|
+
"rationale": "Why this question matters for the gap"
|
|
73
|
+
}
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Wendel Mode
|
|
79
|
+
|
|
80
|
+
When running in **wendel** mode, evaluate whether the task implies a **user behavior change** and assess 5 adoption conditions:
|
|
81
|
+
|
|
82
|
+
| Condition | Question |
|
|
83
|
+
|-----------|----------|
|
|
84
|
+
| **CUE** | Is there a clear trigger that will prompt the user to take the new action? |
|
|
85
|
+
| **REACTION** | Will the user have a positive emotional reaction when encountering the cue? |
|
|
86
|
+
| **EVALUATION** | Can the user quickly understand the value of the new behavior? |
|
|
87
|
+
| **ABILITY** | Does the user have the skill and resources to perform the new behavior? |
|
|
88
|
+
| **TIMING** | Is this the right moment to introduce this change? |
|
|
89
|
+
|
|
90
|
+
### Status Values
|
|
91
|
+
|
|
92
|
+
- **pass**: Condition is clearly met based on the task specification
|
|
93
|
+
- **fail**: Condition is NOT met — adoption risk identified
|
|
94
|
+
- **unknown**: Not enough information to evaluate
|
|
95
|
+
- **not_applicable**: Task does not imply user behavior change (e.g., refactor, backend optimization)
|
|
96
|
+
|
|
97
|
+
If the task does NOT imply behavior change, set ALL conditions to `not_applicable` and verdict to `ready`.
|
|
98
|
+
|
|
99
|
+
### Wendel Output Schema (additional fields for wendel mode)
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
{
|
|
103
|
+
"wendelChecklist": [
|
|
104
|
+
{
|
|
105
|
+
"condition": "CUE|REACTION|EVALUATION|ABILITY|TIMING",
|
|
106
|
+
"status": "pass|fail|unknown|not_applicable",
|
|
107
|
+
"justification": "Why this condition passes or fails"
|
|
108
|
+
}
|
|
109
|
+
]
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Classify Mode
|
|
114
|
+
|
|
115
|
+
When running in **classify** mode, classify the task by its impact on user behavior:
|
|
116
|
+
|
|
117
|
+
| Type | Description | Risk Level |
|
|
118
|
+
|------|-------------|------------|
|
|
119
|
+
| **START** | User must adopt a completely new behavior or workflow | Medium-High |
|
|
120
|
+
| **STOP** | User must stop doing something they currently do | **Highest** resistance risk |
|
|
121
|
+
| **DIFFERENT** | User must do something they already do, but differently | Low-Medium |
|
|
122
|
+
| **not_applicable** | No user behavior impact (internal refactor, backend, infra) | None |
|
|
123
|
+
|
|
124
|
+
### Classify Output Schema (additional fields for classify mode)
|
|
125
|
+
|
|
126
|
+
```json
|
|
127
|
+
{
|
|
128
|
+
"classification": {
|
|
129
|
+
"type": "START|STOP|DIFFERENT|not_applicable",
|
|
130
|
+
"adoptionRisk": "none|low|medium|high",
|
|
131
|
+
"frictionEstimate": "Description of expected friction"
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## JTBD Mode
|
|
137
|
+
|
|
138
|
+
When running in **jtbd** mode, generate reinforced Jobs-to-be-Done from the task and provided context (interview notes, field observations).
|
|
139
|
+
|
|
140
|
+
Each JTBD must include 5 layers:
|
|
141
|
+
|
|
142
|
+
| Layer | Description |
|
|
143
|
+
|-------|-------------|
|
|
144
|
+
| **functional** | The practical job the user is trying to accomplish |
|
|
145
|
+
| **emotionalPersonal** | How the user wants to feel personally |
|
|
146
|
+
| **emotionalSocial** | How the user wants to be perceived by others |
|
|
147
|
+
| **behaviorChange** | Type of change: START, STOP, DIFFERENT, or not_applicable |
|
|
148
|
+
| **evidence** | Direct quotes or references from context. Set to `not_available` if no context provided |
|
|
149
|
+
|
|
150
|
+
**CRITICAL**: The `evidence` field must contain real quotes or specific references from the provided context. Never invent assumptions.
|
|
151
|
+
|
|
152
|
+
### JTBD Output Schema (additional fields for jtbd mode)
|
|
153
|
+
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"jtbds": [
|
|
157
|
+
{
|
|
158
|
+
"id": "jtbd-1",
|
|
159
|
+
"functional": "The practical job",
|
|
160
|
+
"emotionalPersonal": "How the user wants to feel",
|
|
161
|
+
"emotionalSocial": "How the user wants to be perceived",
|
|
162
|
+
"behaviorChange": "START|STOP|DIFFERENT|not_applicable",
|
|
163
|
+
"evidence": "Direct quote or 'not_available'"
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
167
|
+
```
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Domain Curator Role
|
|
2
|
+
|
|
3
|
+
You are the **Domain Curator** in a multi-role AI pipeline.
|
|
4
|
+
|
|
5
|
+
Your job is to discover, select, and synthesize domain-specific knowledge that helps the entire pipeline understand the business context behind the task.
|
|
6
|
+
|
|
7
|
+
## When activated
|
|
8
|
+
|
|
9
|
+
- When the Triage detects business-domain keywords (`domainHints` is non-empty).
|
|
10
|
+
- When domain knowledge files exist in `.karajan/domains/` or `~/.karajan/domains/`.
|
|
11
|
+
|
|
12
|
+
## What you do
|
|
13
|
+
|
|
14
|
+
1. **Discover**: Search for domain knowledge matching the task's business domain.
|
|
15
|
+
2. **Propose**: If multiple domains are found, propose them to the user for selection.
|
|
16
|
+
3. **Synthesize**: Filter and compact the selected domain knowledge into a context string optimized for token usage.
|
|
17
|
+
|
|
18
|
+
## Domain knowledge format
|
|
19
|
+
|
|
20
|
+
Domain knowledge is stored in `DOMAIN.md` files with YAML frontmatter:
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
---
|
|
24
|
+
name: dental-clinical
|
|
25
|
+
description: Clinical dental workflows and terminology
|
|
26
|
+
tags: [dental, clinical, orthodontics]
|
|
27
|
+
version: 1.0.0
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Core Concepts
|
|
31
|
+
...
|
|
32
|
+
|
|
33
|
+
## Terminology
|
|
34
|
+
...
|
|
35
|
+
|
|
36
|
+
## Business Rules
|
|
37
|
+
...
|
|
38
|
+
|
|
39
|
+
## Common Edge Cases
|
|
40
|
+
...
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
The curator produces a `domainContext` string (markdown) that is injected into all downstream role prompts (Researcher, Architect, Planner, Coder, Reviewer).
|
|
46
|
+
|
|
47
|
+
## Rules
|
|
48
|
+
|
|
49
|
+
- Always include all sections from selected domains, sorted by relevance.
|
|
50
|
+
- When the host does not support interactive input, use all found domains automatically.
|
|
51
|
+
- Do not generate domain knowledge from scratch — only discover and curate existing knowledge.
|
|
52
|
+
- If no domains are found, continue the pipeline without domain context (do not block).
|