cc-codeconductor 1.1.0 → 1.3.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 +34 -12
- package/dist/core/config/codeconductor-config.d.ts +2 -1
- package/dist/core/presets/package-paths.d.ts +1 -0
- package/dist/core/runner/runner-target.d.ts +32 -0
- package/dist/core/verification/verification-runner.d.ts +7 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +2934 -761
- package/dist/library.js +103 -14
- package/dist/validation/schemas.d.ts +294 -61
- package/package.json +4 -1
- package/presets/agy/AGENTS.md +11 -10
- package/presets/agy/hooks.json +3 -3
- package/presets/agy/scripts/invoke-hook.cjs +119 -0
- package/presets/agy/skills/backlog/SKILL.md +40 -70
- package/presets/agy/skills/cc-spec-mutation/SKILL.md +165 -0
- package/presets/agy/skills/cc-tdd-cycle/SKILL.md +3 -0
- package/presets/agy/skills/evaluation/SKILL.md +61 -2
- package/presets/agy/skills/openspec/SKILL.md +49 -19
- package/presets/agy/skills/testing-tdd/SKILL.md +53 -0
- package/presets/agy/skills/using-cc-skills/SKILL.md +48 -0
- package/presets/agy/workflows/cc-api-contract.md +18 -0
- package/presets/agy/workflows/cc-ask.md +10 -10
- package/presets/agy/workflows/cc-council.md +4 -0
- package/presets/agy/workflows/cc-db-migration.md +18 -0
- package/presets/agy/workflows/cc-explore.md +2 -2
- package/presets/agy/workflows/cc-feature.md +22 -0
- package/presets/agy/workflows/cc-fix.md +18 -0
- package/presets/agy/workflows/cc-handoff.md +1 -1
- package/presets/agy/workflows/cc-iterative.md +14 -0
- package/presets/agy/workflows/cc-openspec.md +14 -0
- package/presets/agy/workflows/cc-prototype.md +1 -1
- package/presets/agy/workflows/cc-refactor.md +5 -1
- package/presets/agy/workflows/cc-review.md +5 -1
- package/presets/agy/workflows/cc-scorecard.md +2 -0
- package/presets/agy/workflows/cc-security.md +4 -0
- package/presets/agy/workflows/cc-spec-mutation.md +195 -0
- package/presets/agy/workflows/cc-tdd-cycle.md +15 -1
- package/presets/agy/workflows/cc-test-plan.md +5 -1
- package/presets/claude/commands/cc/api-contract.md +19 -1
- package/presets/claude/commands/cc/ask.md +1 -1
- package/presets/claude/commands/cc/backlog.md +1 -1
- package/presets/claude/commands/cc/clarify.md +1 -1
- package/presets/claude/commands/cc/council.md +4 -0
- package/presets/claude/commands/cc/db-migration.md +19 -1
- package/presets/claude/commands/cc/explore.md +1 -1
- package/presets/claude/commands/cc/feature.md +23 -1
- package/presets/claude/commands/cc/fix.md +22 -1
- package/presets/claude/commands/cc/handoff.md +1 -1
- package/presets/claude/commands/cc/iterative.md +15 -1
- package/presets/claude/commands/cc/openspec.md +15 -1
- package/presets/claude/commands/cc/prototype.md +1 -1
- package/presets/claude/commands/cc/refactor.md +5 -1
- package/presets/claude/commands/cc/review.md +8 -1
- package/presets/claude/commands/cc/scorecard.md +3 -1
- package/presets/claude/commands/cc/security.md +5 -1
- package/presets/claude/commands/cc/spec-mutation.md +194 -0
- package/presets/claude/commands/cc/tdd-cycle.md +18 -1
- package/presets/claude/commands/cc/test-plan.md +5 -1
- package/presets/claude/commands/cc/triage.md +1 -1
- package/presets/claude/settings.json +13 -11
- package/presets/claude/skills/android/SKILL.md +0 -1
- package/presets/claude/skills/api-versioning/SKILL.md +0 -1
- package/presets/claude/skills/backlog/SKILL.md +40 -70
- package/presets/claude/skills/django-orm/SKILL.md +0 -1
- package/presets/claude/skills/django-testing/SKILL.md +0 -1
- package/presets/claude/skills/evaluation/SKILL.md +47 -24
- package/presets/claude/skills/jpa-postgres/SKILL.md +0 -1
- package/presets/claude/skills/openspec/SKILL.md +46 -38
- package/presets/claude/skills/pagespeed-perf/SKILL.md +1 -2
- package/presets/claude/skills/python/SKILL.md +0 -1
- package/presets/claude/skills/python-django-stack/SKILL.md +0 -1
- package/presets/claude/skills/python-fastapi-stack/SKILL.md +0 -1
- package/presets/claude/skills/security/SKILL.md +0 -1
- package/presets/claude/skills/spring-boot-feature/SKILL.md +0 -1
- package/presets/claude/skills/spring-boot-kotlin/SKILL.md +0 -1
- package/presets/claude/skills/sqlalchemy/SKILL.md +0 -1
- package/presets/claude/skills/testing-strategy/SKILL.md +0 -1
- package/presets/claude/skills/testing-tdd/SKILL.md +53 -0
- package/presets/claude/skills/using-cc-skills/SKILL.md +48 -0
- package/presets/codex/AGENTS.md +19 -14
- package/presets/codex/commands/cc-ask.md +10 -10
- package/presets/codex/skills/android/SKILL.md +0 -1
- package/presets/codex/skills/api-versioning/SKILL.md +0 -1
- package/presets/codex/skills/backlog/SKILL.md +61 -0
- package/presets/codex/skills/cc-api-contract/SKILL.md +91 -0
- package/presets/codex/skills/cc-backlog/SKILL.md +108 -0
- package/presets/codex/skills/cc-clarify/SKILL.md +36 -0
- package/presets/codex/skills/cc-council/SKILL.md +96 -0
- package/presets/codex/skills/cc-db-migration/SKILL.md +92 -0
- package/presets/codex/skills/cc-explore/SKILL.md +40 -0
- package/presets/codex/skills/cc-feature/SKILL.md +162 -0
- package/presets/codex/skills/cc-fix/SKILL.md +172 -0
- package/presets/codex/skills/cc-handoff/SKILL.md +45 -0
- package/presets/codex/skills/cc-iterative/SKILL.md +150 -0
- package/presets/codex/skills/cc-openspec/SKILL.md +191 -0
- package/presets/codex/skills/cc-pagespeed/SKILL.md +124 -0
- package/presets/codex/skills/cc-prototype/SKILL.md +42 -0
- package/presets/codex/skills/cc-refactor/SKILL.md +167 -0
- package/presets/codex/skills/cc-review/SKILL.md +156 -0
- package/presets/codex/skills/cc-scorecard/SKILL.md +82 -0
- package/presets/codex/skills/cc-security/SKILL.md +186 -0
- package/presets/codex/skills/cc-spec-mutation/SKILL.md +196 -0
- package/presets/codex/skills/cc-tdd-cycle/SKILL.md +266 -0
- package/presets/codex/skills/cc-test-plan/SKILL.md +157 -0
- package/presets/codex/skills/cc-triage/SKILL.md +38 -0
- package/presets/codex/skills/django-orm/SKILL.md +0 -1
- package/presets/codex/skills/django-testing/SKILL.md +0 -1
- package/presets/codex/skills/evaluation/SKILL.md +65 -0
- package/presets/codex/skills/jpa-postgres/SKILL.md +0 -1
- package/presets/codex/skills/openspec/SKILL.md +66 -0
- package/presets/codex/skills/pagespeed-perf/SKILL.md +1 -2
- package/presets/codex/skills/python/SKILL.md +0 -1
- package/presets/codex/skills/python-django-stack/SKILL.md +0 -1
- package/presets/codex/skills/python-fastapi-stack/SKILL.md +0 -1
- package/presets/codex/skills/spring-boot-feature/SKILL.md +0 -1
- package/presets/codex/skills/spring-boot-kotlin/SKILL.md +0 -1
- package/presets/codex/skills/sqlalchemy/SKILL.md +0 -1
- package/presets/codex/skills/testing-strategy/SKILL.md +0 -1
- package/presets/codex/skills/testing-tdd/SKILL.md +53 -0
- package/presets/codex/skills/using-cc-skills/SKILL.md +48 -0
- package/presets/cursor/agents/architect.md +1 -1
- package/presets/cursor/agents/complexity-auditor.md +1 -1
- package/presets/cursor/agents/contract-builder.md +1 -1
- package/presets/cursor/agents/docs.md +1 -1
- package/presets/cursor/agents/goal-planner.md +1 -1
- package/presets/cursor/agents/implementer.md +2 -2
- package/presets/cursor/agents/orchestrator.md +3 -3
- package/presets/cursor/agents/reviewer.md +4 -4
- package/presets/cursor/agents/security-reviewer.md +1 -1
- package/presets/cursor/agents/task-coach.md +1 -1
- package/presets/cursor/agents/tester.md +1 -1
- package/presets/cursor/commands/cc/api-contract.md +19 -1
- package/presets/cursor/commands/cc/ask.md +1 -1
- package/presets/cursor/commands/cc/backlog.md +1 -1
- package/presets/cursor/commands/cc/clarify.md +1 -1
- package/presets/cursor/commands/cc/council.md +4 -0
- package/presets/cursor/commands/cc/db-migration.md +19 -1
- package/presets/cursor/commands/cc/explore.md +1 -1
- package/presets/cursor/commands/cc/feature.md +23 -1
- package/presets/cursor/commands/cc/fix.md +22 -1
- package/presets/cursor/commands/cc/handoff.md +1 -1
- package/presets/cursor/commands/cc/iterative.md +15 -1
- package/presets/cursor/commands/cc/openspec.md +15 -1
- package/presets/cursor/commands/cc/prototype.md +1 -1
- package/presets/cursor/commands/cc/refactor.md +5 -1
- package/presets/cursor/commands/cc/review.md +5 -1
- package/presets/cursor/commands/cc/scorecard.md +3 -1
- package/presets/cursor/commands/cc/security.md +5 -1
- package/presets/cursor/commands/cc/spec-mutation.md +194 -0
- package/presets/cursor/commands/cc/tdd-cycle.md +15 -1
- package/presets/cursor/commands/cc/test-plan.md +5 -1
- package/presets/cursor/commands/cc/triage.md +1 -1
- package/presets/cursor/skills/android/SKILL.md +0 -1
- package/presets/cursor/skills/api-versioning/SKILL.md +0 -1
- package/presets/cursor/skills/astro/SKILL.md +0 -1
- package/presets/cursor/skills/auth-token-inspector/SKILL.md +0 -1
- package/presets/cursor/skills/backlog/SKILL.md +40 -70
- package/presets/cursor/skills/code-review/SKILL.md +0 -1
- package/presets/cursor/skills/django-orm/SKILL.md +0 -1
- package/presets/cursor/skills/django-testing/SKILL.md +0 -1
- package/presets/cursor/skills/django-uv/SKILL.md +0 -1
- package/presets/cursor/skills/drizzle-schema-architect/SKILL.md +0 -1
- package/presets/cursor/skills/evaluation/SKILL.md +61 -4
- package/presets/cursor/skills/fastapi-pydantic-strict/SKILL.md +0 -1
- package/presets/cursor/skills/jpa-nplusone-detector/SKILL.md +0 -1
- package/presets/cursor/skills/jpa-postgres/SKILL.md +0 -1
- package/presets/cursor/skills/livewire-alpine-bridge/SKILL.md +0 -1
- package/presets/cursor/skills/nextjs-typescript/SKILL.md +0 -1
- package/presets/cursor/skills/openspec/SKILL.md +46 -36
- package/presets/cursor/skills/pagespeed-perf/SKILL.md +1 -2
- package/presets/cursor/skills/python/SKILL.md +0 -1
- package/presets/cursor/skills/python-django-stack/SKILL.md +0 -1
- package/presets/cursor/skills/python-fastapi-stack/SKILL.md +0 -1
- package/presets/cursor/skills/security/SKILL.md +0 -1
- package/presets/cursor/skills/seo-analytics-injector/SKILL.md +0 -1
- package/presets/cursor/skills/spring-auth-auditor/SKILL.md +0 -1
- package/presets/cursor/skills/spring-boot-feature/SKILL.md +0 -1
- package/presets/cursor/skills/spring-boot-kotlin/SKILL.md +0 -1
- package/presets/cursor/skills/spring-boot-testing-strategy/SKILL.md +0 -1
- package/presets/cursor/skills/sqlalchemy/SKILL.md +0 -1
- package/presets/cursor/skills/tailwind-responsive-auditor/SKILL.md +0 -1
- package/presets/cursor/skills/tdd-mutation-tester/SKILL.md +0 -1
- package/presets/cursor/skills/testing-tdd/SKILL.md +35 -574
- package/presets/cursor/skills/using-cc-skills/SKILL.md +48 -0
- package/presets/gemini/GEMINI.md +38 -0
- package/presets/gemini/commands/cc/api-contract.toml +86 -0
- package/presets/gemini/commands/cc/ask.toml +54 -0
- package/presets/gemini/commands/cc/backlog.toml +103 -0
- package/presets/gemini/commands/cc/clarify.toml +31 -0
- package/presets/gemini/commands/cc/council.toml +91 -0
- package/presets/gemini/commands/cc/db-migration.toml +87 -0
- package/presets/gemini/commands/cc/explore.toml +35 -0
- package/presets/gemini/commands/cc/feature.toml +157 -0
- package/presets/gemini/commands/cc/fix.toml +167 -0
- package/presets/gemini/commands/cc/handoff.toml +40 -0
- package/presets/gemini/commands/cc/iterative.toml +145 -0
- package/presets/gemini/commands/cc/openspec.toml +186 -0
- package/presets/gemini/commands/cc/pagespeed.toml +119 -0
- package/presets/gemini/commands/cc/prototype.toml +37 -0
- package/presets/gemini/commands/cc/refactor.toml +162 -0
- package/presets/gemini/commands/cc/review.toml +151 -0
- package/presets/gemini/commands/cc/scorecard.toml +77 -0
- package/presets/gemini/commands/cc/security.toml +181 -0
- package/presets/gemini/commands/cc/spec-mutation.toml +191 -0
- package/presets/gemini/commands/cc/tdd-cycle.toml +261 -0
- package/presets/gemini/commands/cc/test-plan.toml +152 -0
- package/presets/gemini/commands/cc/triage.toml +33 -0
- package/presets/gemini/settings.json +3 -0
- package/presets/opencode/README.md +24 -21
- package/presets/opencode/agents/architect.md +6 -0
- package/presets/opencode/agents/docs.md +1 -1
- package/presets/opencode/agents/implementer.md +7 -0
- package/presets/opencode/agents/reviewer.md +7 -1
- package/presets/opencode/agents/tester.md +6 -0
- package/presets/opencode/commands/cc-api-contract.md +18 -0
- package/presets/opencode/commands/cc-ask.md +10 -10
- package/presets/opencode/commands/cc-council.md +4 -0
- package/presets/opencode/commands/cc-db-migration.md +18 -0
- package/presets/opencode/commands/cc-explore.md +2 -2
- package/presets/opencode/commands/cc-feature.md +22 -0
- package/presets/opencode/commands/cc-fix.md +21 -0
- package/presets/opencode/commands/cc-handoff.md +1 -1
- package/presets/opencode/commands/cc-iterative.md +14 -0
- package/presets/opencode/commands/cc-openspec.md +14 -0
- package/presets/opencode/commands/cc-prototype.md +1 -1
- package/presets/opencode/commands/cc-refactor.md +5 -1
- package/presets/opencode/commands/cc-review.md +5 -1
- package/presets/opencode/commands/cc-scorecard.md +2 -0
- package/presets/opencode/commands/cc-security.md +4 -0
- package/presets/opencode/commands/cc-spec-mutation.md +194 -0
- package/presets/opencode/commands/cc-tdd-cycle.md +15 -1
- package/presets/opencode/commands/cc-test-plan.md +5 -1
- package/presets/opencode/opencode.jsonc +1 -1
- package/presets/opencode/prompts/v1.0.0/README.md +1 -1
- package/presets/opencode/prompts/v1.0.0/architect.md +6 -0
- package/presets/opencode/prompts/v1.0.0/docs.md +1 -1
- package/presets/opencode/prompts/v1.0.0/implementer.md +7 -0
- package/presets/opencode/prompts/v1.0.0/reviewer.md +7 -1
- package/presets/opencode/prompts/v1.0.0/tester.md +6 -0
- package/presets/opencode/skills/android/SKILL.md +0 -1
- package/presets/opencode/skills/api-versioning/SKILL.md +0 -1
- package/presets/opencode/skills/astro/SKILL.md +0 -1
- package/presets/opencode/skills/auth-token-inspector/SKILL.md +0 -1
- package/presets/opencode/skills/backlog/SKILL.md +40 -70
- package/presets/opencode/skills/code-review/SKILL.md +0 -1
- package/presets/opencode/skills/django-orm/SKILL.md +0 -1
- package/presets/opencode/skills/django-testing/SKILL.md +0 -1
- package/presets/opencode/skills/django-uv/SKILL.md +0 -1
- package/presets/opencode/skills/drizzle-schema-architect/SKILL.md +0 -1
- package/presets/opencode/skills/evaluation/SKILL.md +61 -2
- package/presets/opencode/skills/fastapi-pydantic-strict/SKILL.md +0 -1
- package/presets/opencode/skills/jpa-nplusone-detector/SKILL.md +0 -1
- package/presets/opencode/skills/jpa-postgres/SKILL.md +0 -1
- package/presets/opencode/skills/livewire-alpine-bridge/SKILL.md +0 -1
- package/presets/opencode/skills/nextjs-typescript/SKILL.md +0 -1
- package/presets/opencode/skills/openspec/SKILL.md +46 -34
- package/presets/opencode/skills/pagespeed-perf/SKILL.md +1 -2
- package/presets/opencode/skills/python/SKILL.md +0 -1
- package/presets/opencode/skills/python-django-stack/SKILL.md +0 -1
- package/presets/opencode/skills/python-fastapi-stack/SKILL.md +0 -1
- package/presets/opencode/skills/security/SKILL.md +0 -1
- package/presets/opencode/skills/seo-analytics-injector/SKILL.md +0 -1
- package/presets/opencode/skills/spring-auth-auditor/SKILL.md +0 -1
- package/presets/opencode/skills/spring-boot-feature/SKILL.md +0 -1
- package/presets/opencode/skills/spring-boot-kotlin/SKILL.md +0 -1
- package/presets/opencode/skills/spring-boot-testing-strategy/SKILL.md +0 -1
- package/presets/opencode/skills/sqlalchemy/SKILL.md +0 -1
- package/presets/opencode/skills/tailwind-responsive-auditor/SKILL.md +0 -1
- package/presets/opencode/skills/tdd-mutation-tester/SKILL.md +0 -1
- package/presets/opencode/skills/testing-tdd/SKILL.md +35 -574
- package/presets/opencode/skills/using-cc-skills/SKILL.md +48 -0
- package/presets/pi/AGENTS.md +43 -0
- package/presets/pi/settings.json +3 -0
- package/presets/seo-hotel/skills/astro-seo/SKILL.md +0 -1
- package/presets/seo-hotel/skills/geo-readiness/SKILL.md +0 -1
- package/presets/seo-hotel/skills/off-page/SKILL.md +0 -1
- package/presets/seo-hotel/skills/schema-validator/SKILL.md +0 -1
- package/presets/seo-hotel/skills/seo-audit/SKILL.md +0 -1
- package/presets/shared/invoke-hook.cjs +119 -0
- package/presets/shared/mutation_runner.py +273 -0
- package/src/presets/council/council.yml +12 -9
- package/src/presets/manifests/agy.yml +3 -1
- package/src/presets/manifests/claude.yml +3 -0
- package/src/presets/manifests/gemini.yml +15 -0
- package/src/presets/manifests/pi.yml +25 -0
- package/src/presets/models/agy.yml +2 -128
- package/src/presets/models/claude.yml +2 -144
- package/src/presets/models/codex.yml +2 -144
- package/src/presets/models/cursor.yml +2 -144
- package/src/presets/models/gemini.yml +2 -144
- package/src/presets/models/opencode.yml +3 -101
- package/src/presets/models/pi.yml +5 -0
- package/src/presets/models/roles.yml +193 -0
- package/src/presets/shared-skills.yml +64 -0
- package/src/presets/targets/agy.yml +11 -0
- package/src/presets/targets/claude.yml +12 -0
- package/src/presets/targets/codex.yml +14 -0
- package/src/presets/targets/cursor.yml +11 -0
- package/src/presets/targets/gemini.yml +15 -0
- package/src/presets/targets/opencode.yml +13 -0
- package/src/presets/targets/pi.yml +12 -0
- package/presets/agy/scripts/post-tool.sh +0 -25
- package/presets/agy/scripts/pre-tool.sh +0 -56
- package/presets/opencode/prompts/v0.1.0/DEPRECATED.md +0 -11
- package/presets/opencode/prompts/v0.1.0/architect.md +0 -213
- package/presets/opencode/prompts/v0.1.0/docs.md +0 -181
- package/presets/opencode/prompts/v0.1.0/implementer.md +0 -154
- package/presets/opencode/prompts/v0.1.0/orchestrator.md +0 -169
- package/presets/opencode/prompts/v0.1.0/repo-explorer.md +0 -102
- package/presets/opencode/prompts/v0.1.0/reviewer.md +0 -183
- package/presets/opencode/prompts/v0.1.0/task-coach.md +0 -142
- package/presets/opencode/prompts/v0.1.0/tester.md +0 -160
- package/presets/opencode/prompts/v0.2.0/DEPRECATED.md +0 -11
- package/presets/opencode/prompts/v0.2.0/architect.md +0 -219
- package/presets/opencode/prompts/v0.2.0/docs.md +0 -187
- package/presets/opencode/prompts/v0.2.0/implementer.md +0 -160
- package/presets/opencode/prompts/v0.2.0/orchestrator.md +0 -238
- package/presets/opencode/prompts/v0.2.0/repo-explorer.md +0 -108
- package/presets/opencode/prompts/v0.2.0/reviewer.md +0 -190
- package/presets/opencode/prompts/v0.2.0/task-coach.md +0 -153
- package/presets/opencode/prompts/v0.2.0/tester.md +0 -249
- package/presets/opencode/prompts/v0.3.0/DEPRECATED.md +0 -11
- package/presets/opencode/prompts/v0.3.0/architect.md +0 -221
- package/presets/opencode/prompts/v0.3.0/docs.md +0 -189
- package/presets/opencode/prompts/v0.3.0/implementer.md +0 -162
- package/presets/opencode/prompts/v0.3.0/orchestrator.md +0 -360
- package/presets/opencode/prompts/v0.3.0/repo-explorer.md +0 -110
- package/presets/opencode/prompts/v0.3.0/reviewer.md +0 -225
- package/presets/opencode/prompts/v0.3.0/task-coach.md +0 -155
- package/presets/opencode/prompts/v0.3.0/tester.md +0 -251
- package/presets/opencode/prompts/v0.4.0/DEPRECATED.md +0 -11
- package/presets/opencode/prompts/v0.4.0/architect.md +0 -221
- package/presets/opencode/prompts/v0.4.0/complexity-auditor.md +0 -89
- package/presets/opencode/prompts/v0.4.0/docs.md +0 -189
- package/presets/opencode/prompts/v0.4.0/implementer.md +0 -162
- package/presets/opencode/prompts/v0.4.0/orchestrator.md +0 -348
- package/presets/opencode/prompts/v0.4.0/repo-explorer.md +0 -110
- package/presets/opencode/prompts/v0.4.0/reviewer.md +0 -225
- package/presets/opencode/prompts/v0.4.0/task-coach.md +0 -155
- package/presets/opencode/prompts/v0.4.0/tester.md +0 -251
- package/presets/opencode/prompts/v0.5.0/architect.md +0 -222
- package/presets/opencode/prompts/v0.5.0/complexity-auditor.md +0 -91
- package/presets/opencode/prompts/v0.5.0/contract-builder.md +0 -84
- package/presets/opencode/prompts/v0.5.0/docs.md +0 -190
- package/presets/opencode/prompts/v0.5.0/goal-planner.md +0 -80
- package/presets/opencode/prompts/v0.5.0/implementer.md +0 -171
- package/presets/opencode/prompts/v0.5.0/orchestrator.md +0 -388
- package/presets/opencode/prompts/v0.5.0/repo-explorer.md +0 -111
- package/presets/opencode/prompts/v0.5.0/reviewer.md +0 -248
- package/presets/opencode/prompts/v0.5.0/security-reviewer.md +0 -123
- package/presets/opencode/prompts/v0.5.0/task-coach.md +0 -156
- package/presets/opencode/prompts/v0.5.0/tester.md +0 -252
- package/presets/opencode/prompts/v0.6.0/implementer.md +0 -35
- package/presets/opencode/prompts/v0.6.0/planner.md +0 -36
- package/presets/opencode/prompts/v0.6.0/reviewer.md +0 -40
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
<!-- CODECONDUCTOR:BEGIN managed -->
|
|
2
|
+
|
|
3
|
+
# CodeConductor — Pi Preset
|
|
4
|
+
|
|
5
|
+
This file configures CodeConductor for **Pi** (pi.dev — `earendil-works/pi`,
|
|
6
|
+
the coding-agent CLI, not Inflection's Pi). It lives at the project root
|
|
7
|
+
(`AGENTS.md`) so Pi's context-file loader picks it up automatically.
|
|
8
|
+
|
|
9
|
+
## Behavioral Discipline
|
|
10
|
+
|
|
11
|
+
1. **Think Before Coding** — state assumptions; ask if uncertain; present
|
|
12
|
+
alternatives instead of picking silently.
|
|
13
|
+
2. **Simplicity First** — minimum code that solves the problem; no
|
|
14
|
+
speculative abstractions.
|
|
15
|
+
3. **Surgical Changes** — touch only what the task requires; match existing
|
|
16
|
+
style; remove only what your own change made unused.
|
|
17
|
+
4. **Goal-Driven Execution** — turn the task into a verifiable goal with a
|
|
18
|
+
success check; loop until it passes.
|
|
19
|
+
|
|
20
|
+
## Commands
|
|
21
|
+
|
|
22
|
+
CodeConductor ships its slash commands as Pi prompt templates under
|
|
23
|
+
`.pi/prompts/`, invoked as `/cc-<name>` (e.g. `/cc-feature`, `/cc-review`).
|
|
24
|
+
Run `/cc-ask "<problem>"` when unsure which one applies — it recommends
|
|
25
|
+
exactly one and stops; it does not start the workflow.
|
|
26
|
+
|
|
27
|
+
Skills live under `.agents/skills/` (shared with the agy preset — Pi
|
|
28
|
+
discovers skills there natively, per its own docs). Read
|
|
29
|
+
`.agents/skills/using-cc-skills/SKILL.md` first — it maps intent to the
|
|
30
|
+
right slash command.
|
|
31
|
+
|
|
32
|
+
Pi has no Task tool or subagents: every command runs in your own session.
|
|
33
|
+
Where a step says "adopt the `X` role", read the matching file under
|
|
34
|
+
`.agents/agents/` (short) or `.agents/prompts/v1.0.0/` (full contract) and
|
|
35
|
+
act as that role for the rest of the step.
|
|
36
|
+
|
|
37
|
+
## What never changes
|
|
38
|
+
|
|
39
|
+
- Do not invoke the Implementer without an accepted Technical Plan.
|
|
40
|
+
- Do not skip the Reviewer step for medium- or high-risk changes.
|
|
41
|
+
- Do not store secrets in any file loaded by Pi.
|
|
42
|
+
|
|
43
|
+
<!-- CODECONDUCTOR:END managed -->
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const { spawnSync } = require('node:child_process');
|
|
5
|
+
const { existsSync } = require('node:fs');
|
|
6
|
+
const { join, resolve } = require('node:path');
|
|
7
|
+
|
|
8
|
+
const VALID_EVENTS = ['pre-tool', 'post-tool', 'session-start'];
|
|
9
|
+
const SPAWN_TIMEOUT = 10000;
|
|
10
|
+
|
|
11
|
+
const rawArgs = process.argv.slice(1);
|
|
12
|
+
const args = rawArgs.filter((arg) => {
|
|
13
|
+
if (VALID_EVENTS.includes(arg) || arg.startsWith('-')) return true;
|
|
14
|
+
return false;
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
const event = args.find((a) => VALID_EVENTS.includes(a)) || 'pre-tool';
|
|
18
|
+
const extra = args.filter((a) => a !== event);
|
|
19
|
+
const isAgy = process.argv.some((a) => a === '--format=agy') || extra.includes('--format=agy');
|
|
20
|
+
|
|
21
|
+
function findProjectRoot() {
|
|
22
|
+
const candidates = [
|
|
23
|
+
process.env.PROJECT_ROOT,
|
|
24
|
+
process.env.WORKSPACE_DIR,
|
|
25
|
+
resolve(__dirname, '..', '..'),
|
|
26
|
+
process.cwd(),
|
|
27
|
+
].filter(Boolean);
|
|
28
|
+
|
|
29
|
+
for (const dir of candidates) {
|
|
30
|
+
if (
|
|
31
|
+
existsSync(join(dir, 'package.json')) ||
|
|
32
|
+
existsSync(join(dir, '.git')) ||
|
|
33
|
+
existsSync(join(dir, '.agents')) ||
|
|
34
|
+
existsSync(join(dir, '.claude'))
|
|
35
|
+
) {
|
|
36
|
+
return dir;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return resolve(__dirname, '..', '..');
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const projectRoot = findProjectRoot();
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Run one candidate runner. Stdout/stderr are captured (not inherited) so a
|
|
46
|
+
* candidate that writes partial output before failing can never leak onto
|
|
47
|
+
* this process's real stdout ahead of a later candidate's output or the
|
|
48
|
+
* fallback JSON — every event this process ever emits on stdout must be a
|
|
49
|
+
* single clean document. Stderr is diagnostic-only and safe to relay
|
|
50
|
+
* unconditionally; stdout is only ever relayed on the two branches that
|
|
51
|
+
* immediately exit, so nothing else can write to stdout afterward.
|
|
52
|
+
*/
|
|
53
|
+
function tryRun(bin, runArgs) {
|
|
54
|
+
try {
|
|
55
|
+
const result = spawnSync(bin, runArgs, {
|
|
56
|
+
cwd: projectRoot,
|
|
57
|
+
stdio: ['inherit', 'pipe', 'pipe'],
|
|
58
|
+
windowsHide: true,
|
|
59
|
+
env: process.env,
|
|
60
|
+
encoding: 'utf8',
|
|
61
|
+
timeout: SPAWN_TIMEOUT,
|
|
62
|
+
});
|
|
63
|
+
if (result.error) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
if (result.stderr) {
|
|
67
|
+
process.stderr.write(result.stderr);
|
|
68
|
+
}
|
|
69
|
+
if (result.status === 0) {
|
|
70
|
+
if (result.stdout) process.stdout.write(result.stdout);
|
|
71
|
+
process.exit(0);
|
|
72
|
+
}
|
|
73
|
+
if (!isAgy && result.status === 2) {
|
|
74
|
+
process.exit(2);
|
|
75
|
+
}
|
|
76
|
+
return false;
|
|
77
|
+
} catch {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
function fallback() {
|
|
83
|
+
if (isAgy) {
|
|
84
|
+
if (event === 'post-tool' || event === 'session-start') {
|
|
85
|
+
process.stdout.write('{}\n');
|
|
86
|
+
} else {
|
|
87
|
+
process.stdout.write('{"decision":"allow"}\n');
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
process.exit(0);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
// spawnSync('bun', ['--version']) as a pre-check before every real attempt
|
|
95
|
+
// used to cost a second subprocess on every single hook invocation. A
|
|
96
|
+
// missing/unrunnable 'bun' already surfaces as `result.error` inside
|
|
97
|
+
// tryRun(), so the pre-check is redundant — dropping it halves the spawn
|
|
98
|
+
// count (and the worst-case latency) for the common case where bun exists.
|
|
99
|
+
const srcMain = join(projectRoot, 'src', 'cli', 'main.ts');
|
|
100
|
+
if (existsSync(srcMain)) {
|
|
101
|
+
tryRun('bun', ['run', srcMain, 'hook', event, ...extra]);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const packaged = join(projectRoot, 'node_modules', 'cc-codeconductor', 'dist', 'index.js');
|
|
105
|
+
if (existsSync(packaged)) {
|
|
106
|
+
tryRun(process.execPath, [packaged, 'hook', event, ...extra]);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const localDist = join(projectRoot, 'dist', 'index.js');
|
|
110
|
+
if (existsSync(localDist)) {
|
|
111
|
+
tryRun(process.execPath, [localDist, 'hook', event, ...extra]);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
tryRun('npx', ['--no-install', 'cc-codeconductor', 'hook', event, ...extra]);
|
|
115
|
+
} catch {
|
|
116
|
+
// Ignore errors in runner attempts
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
fallback();
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""Deterministic mutation-testing runner (stdlib only).
|
|
3
|
+
|
|
4
|
+
Applies single syntactic mutations over comparison operators in a Python
|
|
5
|
+
production file and re-runs the test suite per mutant. If a mutant survives
|
|
6
|
+
(tests still pass), the runner writes a handoff for the `tdd_craftsman` agent
|
|
7
|
+
(`specs/handover.md`, appended to `specs/implementation-summary.md`, optional
|
|
8
|
+
Engram/MCP memory hook) and exits with code 2 (HANDS_OFF). If every mutant is
|
|
9
|
+
killed, it exits 0 (PASS). The original source is always restored.
|
|
10
|
+
|
|
11
|
+
Usage:
|
|
12
|
+
python3 mutation_runner.py --target src/billing.py \
|
|
13
|
+
--test-command "pytest tests/test_billing.py" [--spec-folder specs]
|
|
14
|
+
"""
|
|
15
|
+
import argparse
|
|
16
|
+
import ast
|
|
17
|
+
import difflib
|
|
18
|
+
import json
|
|
19
|
+
import os
|
|
20
|
+
import shutil
|
|
21
|
+
import subprocess
|
|
22
|
+
import sys
|
|
23
|
+
from dataclasses import asdict, dataclass
|
|
24
|
+
from pathlib import Path
|
|
25
|
+
from typing import Dict, List, Optional, Tuple
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class MutationRecord:
|
|
30
|
+
mutant_id: str
|
|
31
|
+
target_file: str
|
|
32
|
+
line_number: int
|
|
33
|
+
original_op: str
|
|
34
|
+
mutated_op: str
|
|
35
|
+
diff: str
|
|
36
|
+
survived: bool
|
|
37
|
+
details: str
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class DeterministicOperatorMutator(ast.NodeTransformer):
|
|
41
|
+
"""Applies one deterministic syntactic mutation over a comparison operator."""
|
|
42
|
+
|
|
43
|
+
OP_MAP = {
|
|
44
|
+
ast.Gt: ast.LtE, # > -> <=
|
|
45
|
+
ast.Lt: ast.GtE, # < -> >=
|
|
46
|
+
ast.GtE: ast.Lt, # >= -> <
|
|
47
|
+
ast.LtE: ast.Gt, # <= -> >
|
|
48
|
+
ast.Eq: ast.NotEq, # == -> !=
|
|
49
|
+
ast.NotEq: ast.Eq, # != -> ==
|
|
50
|
+
ast.Is: ast.IsNot, # is -> is not
|
|
51
|
+
ast.IsNot: ast.Is, # is not -> is
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
def __init__(self, target_index: int):
|
|
55
|
+
super().__init__()
|
|
56
|
+
self.target_index = target_index
|
|
57
|
+
self.current_index = 0
|
|
58
|
+
self.applied_mutation: Optional[Tuple[int, str, str]] = None
|
|
59
|
+
|
|
60
|
+
def visit_Compare(self, node: ast.Compare) -> ast.AST:
|
|
61
|
+
mutated_ops = []
|
|
62
|
+
modified = False
|
|
63
|
+
|
|
64
|
+
for op in node.ops:
|
|
65
|
+
op_type = type(op)
|
|
66
|
+
if op_type in self.OP_MAP:
|
|
67
|
+
if self.current_index == self.target_index:
|
|
68
|
+
new_op = self.OP_MAP[op_type]()
|
|
69
|
+
mutated_ops.append(new_op)
|
|
70
|
+
modified = True
|
|
71
|
+
self.applied_mutation = (
|
|
72
|
+
node.lineno,
|
|
73
|
+
op_type.__name__,
|
|
74
|
+
type(new_op).__name__,
|
|
75
|
+
)
|
|
76
|
+
else:
|
|
77
|
+
mutated_ops.append(op)
|
|
78
|
+
self.current_index += 1
|
|
79
|
+
else:
|
|
80
|
+
mutated_ops.append(op)
|
|
81
|
+
|
|
82
|
+
if modified:
|
|
83
|
+
node.ops = mutated_ops
|
|
84
|
+
return node
|
|
85
|
+
return self.generic_visit(node)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
class MutationEngine:
|
|
89
|
+
def __init__(self, target_file: str, test_command: str, spec_folder: str = "specs"):
|
|
90
|
+
self.target_file = Path(target_file).resolve()
|
|
91
|
+
self.test_command = test_command
|
|
92
|
+
self.spec_folder = Path(spec_folder)
|
|
93
|
+
self.original_source = self.target_file.read_text(encoding="utf-8")
|
|
94
|
+
self.spec_folder.mkdir(parents=True, exist_ok=True)
|
|
95
|
+
|
|
96
|
+
def _count_mutation_points(self) -> int:
|
|
97
|
+
tree = ast.parse(self.original_source)
|
|
98
|
+
count = 0
|
|
99
|
+
for node in ast.walk(tree):
|
|
100
|
+
if isinstance(node, ast.Compare):
|
|
101
|
+
for op in node.ops:
|
|
102
|
+
if type(op) in DeterministicOperatorMutator.OP_MAP:
|
|
103
|
+
count += 1
|
|
104
|
+
return count
|
|
105
|
+
|
|
106
|
+
def _clear_bytecode_cache(self) -> None:
|
|
107
|
+
"""Removes cached bytecode for the target so mutants are not shadowed
|
|
108
|
+
by a stale .pyc with an equal-mtimestamp source."""
|
|
109
|
+
cache_dir = self.target_file.parent / "__pycache__"
|
|
110
|
+
if cache_dir.is_dir():
|
|
111
|
+
for pyc in cache_dir.glob(f"{self.target_file.stem}.*.pyc"):
|
|
112
|
+
pyc.unlink(missing_ok=True)
|
|
113
|
+
|
|
114
|
+
def _run_test_suite(self) -> bool:
|
|
115
|
+
"""Runs the test suite. Returns True if every test passes."""
|
|
116
|
+
self._clear_bytecode_cache()
|
|
117
|
+
env = {**os.environ, "PYTHONDONTWRITEBYTECODE": "1"}
|
|
118
|
+
result = subprocess.run(
|
|
119
|
+
self.test_command,
|
|
120
|
+
shell=True,
|
|
121
|
+
stdout=subprocess.PIPE,
|
|
122
|
+
stderr=subprocess.PIPE,
|
|
123
|
+
text=True,
|
|
124
|
+
env=env,
|
|
125
|
+
)
|
|
126
|
+
return result.returncode == 0
|
|
127
|
+
|
|
128
|
+
def _create_diff(self, mutated_source: str) -> str:
|
|
129
|
+
return "\n".join(
|
|
130
|
+
difflib.unified_diff(
|
|
131
|
+
self.original_source.splitlines(),
|
|
132
|
+
mutated_source.splitlines(),
|
|
133
|
+
fromfile=f"a/{self.target_file.name}",
|
|
134
|
+
tofile=f"b/{self.target_file.name}",
|
|
135
|
+
lineterm="",
|
|
136
|
+
)
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
def _persist_to_engram_or_markdown(self, record: MutationRecord) -> None:
|
|
140
|
+
"""Documents the handoff in handover.md and implementation-summary.md."""
|
|
141
|
+
markdown_summary = self.spec_folder / "implementation-summary.md"
|
|
142
|
+
handover_file = self.spec_folder / "handover.md"
|
|
143
|
+
|
|
144
|
+
payload_md = f"""## Mutation Gate: Survivor Detected (TDD Gap)
|
|
145
|
+
- **Target File**: `{record.target_file}`
|
|
146
|
+
- **Line**: {record.line_number}
|
|
147
|
+
- **Mutant ID**: `{record.mutant_id}`
|
|
148
|
+
- **Operator Change**: `{record.original_op}` -> `{record.mutated_op}`
|
|
149
|
+
- **Status**: SURVIVED (Scorecard Real Coverage: 0)
|
|
150
|
+
|
|
151
|
+
### Reproduction Diff
|
|
152
|
+
```diff
|
|
153
|
+
{record.diff}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
### Action Required by `tdd_craftsman`
|
|
157
|
+
|
|
158
|
+
1. Do NOT touch production implementation.
|
|
159
|
+
2. Write a minimal failing test (TDD Law 1 & 2) that asserts this branch condition.
|
|
160
|
+
3. Verify the test turns red before re-verifying production code.
|
|
161
|
+
"""
|
|
162
|
+
# Handover update for continuity
|
|
163
|
+
handover_file.write_text(payload_md, encoding="utf-8")
|
|
164
|
+
|
|
165
|
+
with markdown_summary.open("a", encoding="utf-8") as f:
|
|
166
|
+
f.write(f"\n\n{payload_md}")
|
|
167
|
+
|
|
168
|
+
# Optional Engram / MCP memory integration
|
|
169
|
+
self._notify_engram(record)
|
|
170
|
+
|
|
171
|
+
def _notify_engram(self, record: MutationRecord) -> None:
|
|
172
|
+
"""Invokes the local Engram/Memory Engine hook or CLI if present."""
|
|
173
|
+
if shutil.which("engram"):
|
|
174
|
+
try:
|
|
175
|
+
subprocess.run(
|
|
176
|
+
[
|
|
177
|
+
"engram",
|
|
178
|
+
"memory:save",
|
|
179
|
+
"--tag",
|
|
180
|
+
"mutation_testing",
|
|
181
|
+
"--title",
|
|
182
|
+
f"Survivor {record.mutant_id}",
|
|
183
|
+
"--body",
|
|
184
|
+
json.dumps(asdict(record)),
|
|
185
|
+
],
|
|
186
|
+
check=False,
|
|
187
|
+
stdout=subprocess.DEVNULL,
|
|
188
|
+
stderr=subprocess.DEVNULL,
|
|
189
|
+
)
|
|
190
|
+
except Exception:
|
|
191
|
+
pass
|
|
192
|
+
|
|
193
|
+
def run(self) -> Dict[str, object]:
|
|
194
|
+
# 1. Pre-flight check: tests must pass on the clean base code
|
|
195
|
+
if not self._run_test_suite():
|
|
196
|
+
raise RuntimeError("The test suite is already failing on unmutated base code.")
|
|
197
|
+
|
|
198
|
+
total_points = self._count_mutation_points()
|
|
199
|
+
survivors: List[MutationRecord] = []
|
|
200
|
+
|
|
201
|
+
try:
|
|
202
|
+
for idx in range(total_points):
|
|
203
|
+
mutator = DeterministicOperatorMutator(target_index=idx)
|
|
204
|
+
tree = ast.parse(self.original_source)
|
|
205
|
+
mutated_tree = mutator.visit(tree)
|
|
206
|
+
ast.fix_missing_locations(mutated_tree)
|
|
207
|
+
|
|
208
|
+
mutated_source = ast.unparse(mutated_tree)
|
|
209
|
+
diff = self._create_diff(mutated_source)
|
|
210
|
+
|
|
211
|
+
# Apply mutant to disk
|
|
212
|
+
self.target_file.write_text(mutated_source, encoding="utf-8")
|
|
213
|
+
|
|
214
|
+
# Run tests against the mutant
|
|
215
|
+
passed = self._run_test_suite()
|
|
216
|
+
|
|
217
|
+
if passed:
|
|
218
|
+
# The mutant survived: tests are blind to this change
|
|
219
|
+
lineno, orig, mut = mutator.applied_mutation or (0, "Unknown", "Unknown")
|
|
220
|
+
survivor = MutationRecord(
|
|
221
|
+
mutant_id=f"MUT_{idx:03d}_L{lineno}",
|
|
222
|
+
target_file=str(self.target_file),
|
|
223
|
+
line_number=lineno,
|
|
224
|
+
original_op=orig,
|
|
225
|
+
mutated_op=mut,
|
|
226
|
+
diff=diff,
|
|
227
|
+
survived=True,
|
|
228
|
+
details="Tests passed with inverted comparison logic. Missing explicit assert.",
|
|
229
|
+
)
|
|
230
|
+
survivors.append(survivor)
|
|
231
|
+
|
|
232
|
+
# Safe Fail-Fast protocol: immediate handoff to the craftsman
|
|
233
|
+
self._persist_to_engram_or_markdown(survivor)
|
|
234
|
+
return {
|
|
235
|
+
"status": "HANDS_OFF_TRIGGERED",
|
|
236
|
+
"target_agent": "tdd_craftsman",
|
|
237
|
+
"surviving_mutant": asdict(survivor),
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
finally:
|
|
241
|
+
# Unconditional deterministic rollback: restore original source
|
|
242
|
+
self.target_file.write_text(self.original_source, encoding="utf-8")
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
"status": "PASS",
|
|
246
|
+
"total_mutants_killed": total_points,
|
|
247
|
+
"survivors_count": 0,
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
def main(argv: Optional[List[str]] = None) -> int:
|
|
252
|
+
parser = argparse.ArgumentParser(description="Deterministic stdlib mutation runner.")
|
|
253
|
+
parser.add_argument("--target", required=True, help="Python production file to mutate.")
|
|
254
|
+
parser.add_argument("--test-command", required=True, help="Shell command that runs the test suite.")
|
|
255
|
+
parser.add_argument("--spec-folder", default="specs", help="Folder for handoff artifacts.")
|
|
256
|
+
args = parser.parse_args(argv)
|
|
257
|
+
|
|
258
|
+
engine = MutationEngine(
|
|
259
|
+
target_file=args.target,
|
|
260
|
+
test_command=args.test_command,
|
|
261
|
+
spec_folder=args.spec_folder,
|
|
262
|
+
)
|
|
263
|
+
outcome = engine.run()
|
|
264
|
+
print(json.dumps(outcome, indent=2))
|
|
265
|
+
|
|
266
|
+
if outcome["status"] == "HANDS_OFF_TRIGGERED":
|
|
267
|
+
# Exit code 2 tells the orchestrator (craftsman_lead) to reroute to tdd_craftsman
|
|
268
|
+
return 2
|
|
269
|
+
return 0
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
if __name__ == "__main__":
|
|
273
|
+
sys.exit(main())
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
# Single source of truth for the council roster (loaded by
|
|
2
|
+
# src/core/presets/preset-loader.ts -> loadCouncilPreset, consumed by
|
|
3
|
+
# `cc install council --target <t>` in src/commands/install.command.ts).
|
|
4
|
+
# Per-role checklist and finding-format content lives in
|
|
5
|
+
# src/domain/council/council-agent.ts (generateAgentContent /
|
|
6
|
+
# checklistFor), shared by every generator except Codex, which renders
|
|
7
|
+
# its own TOML shape in src/adapters/codex/codex-council-generator.ts.
|
|
8
|
+
# Adding or renaming an agent here requires a matching entry in
|
|
9
|
+
# ROLE_PROFILES (council-agent.ts) and, if it changes the roster's ids,
|
|
10
|
+
# updating DEFAULT_COUNCIL_AGENTS in src/domain/council/council-spec.ts —
|
|
11
|
+
# test/unit/domain/council/council-spec.test.ts asserts the two stay in sync.
|
|
1
12
|
name: council
|
|
2
13
|
version: 0.1.0
|
|
3
14
|
description: Multi-agent council for code review and architecture decisions
|
|
@@ -13,15 +24,6 @@ agents:
|
|
|
13
24
|
- design-patterns
|
|
14
25
|
- code-structure
|
|
15
26
|
|
|
16
|
-
- id: security
|
|
17
|
-
role: Security
|
|
18
|
-
context: repo-readonly
|
|
19
|
-
modelHint: security-reasoning
|
|
20
|
-
focus:
|
|
21
|
-
- security
|
|
22
|
-
- vulnerabilities
|
|
23
|
-
- compliance
|
|
24
|
-
|
|
25
27
|
- id: product
|
|
26
28
|
role: Product
|
|
27
29
|
context: prompt-only
|
|
@@ -56,6 +58,7 @@ agents:
|
|
|
56
58
|
focus:
|
|
57
59
|
- security
|
|
58
60
|
- vulnerabilities
|
|
61
|
+
- compliance
|
|
59
62
|
- credentials
|
|
60
63
|
- injection
|
|
61
64
|
- auth
|
|
@@ -13,18 +13,20 @@ entries:
|
|
|
13
13
|
strategy: overwrite
|
|
14
14
|
template: true
|
|
15
15
|
- src: agy/settings.json
|
|
16
|
-
dest:
|
|
16
|
+
dest: antigravity-cli/settings.json
|
|
17
17
|
strategy: skip
|
|
18
18
|
globalStrategy: merge-json
|
|
19
19
|
- src: agy/hooks.json
|
|
20
20
|
dest: .agents/hooks.json
|
|
21
21
|
strategy: overwrite
|
|
22
|
+
globalStrategy: skip
|
|
22
23
|
- src: agy/mcp_config.json
|
|
23
24
|
dest: .agents/mcp_config.json
|
|
24
25
|
strategy: overwrite
|
|
25
26
|
- src: agy/scripts
|
|
26
27
|
dest: .agents/scripts
|
|
27
28
|
strategy: overwrite
|
|
29
|
+
globalStrategy: skip
|
|
28
30
|
- src: opencode/skills
|
|
29
31
|
dest: .agents/skills
|
|
30
32
|
strategy: overwrite
|
|
@@ -9,6 +9,9 @@ entries:
|
|
|
9
9
|
dest: .claude/settings.json
|
|
10
10
|
strategy: overwrite
|
|
11
11
|
globalStrategy: merge-json
|
|
12
|
+
- src: shared/invoke-hook.cjs
|
|
13
|
+
dest: .claude/hooks/invoke-hook.cjs
|
|
14
|
+
strategy: overwrite
|
|
12
15
|
- src: claude/claude.json
|
|
13
16
|
dest: .claude.json
|
|
14
17
|
strategy: merge-json
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
target: gemini
|
|
2
2
|
entries:
|
|
3
|
+
- src: gemini/GEMINI.md
|
|
4
|
+
dest: GEMINI.md
|
|
5
|
+
strategy: merge-managed
|
|
6
|
+
globalStrategy: merge-managed
|
|
7
|
+
template: true
|
|
8
|
+
- src: gemini/settings.json
|
|
9
|
+
dest: .gemini/settings.json
|
|
10
|
+
strategy: overwrite
|
|
11
|
+
globalStrategy: merge-json
|
|
3
12
|
- src: opencode/agents
|
|
4
13
|
dest: .gemini/agents
|
|
5
14
|
strategy: overwrite
|
|
@@ -8,3 +17,9 @@ entries:
|
|
|
8
17
|
dest: .gemini/prompts/v1.0.0
|
|
9
18
|
strategy: overwrite
|
|
10
19
|
template: true
|
|
20
|
+
- src: gemini/commands
|
|
21
|
+
dest: .gemini/commands
|
|
22
|
+
strategy: overwrite
|
|
23
|
+
- src: opencode/skills
|
|
24
|
+
dest: .gemini/skills
|
|
25
|
+
strategy: overwrite
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
target: pi
|
|
2
|
+
entries:
|
|
3
|
+
- src: pi/AGENTS.md
|
|
4
|
+
dest: AGENTS.md
|
|
5
|
+
strategy: merge-managed
|
|
6
|
+
globalStrategy: merge-managed
|
|
7
|
+
template: true
|
|
8
|
+
- src: pi/settings.json
|
|
9
|
+
dest: .pi/settings.json
|
|
10
|
+
strategy: overwrite
|
|
11
|
+
globalStrategy: merge-json
|
|
12
|
+
- src: opencode/commands
|
|
13
|
+
dest: .pi/prompts
|
|
14
|
+
strategy: overwrite
|
|
15
|
+
- src: opencode/skills
|
|
16
|
+
dest: .agents/skills
|
|
17
|
+
strategy: overwrite
|
|
18
|
+
- src: opencode/agents
|
|
19
|
+
dest: .agents/agents
|
|
20
|
+
strategy: overwrite
|
|
21
|
+
template: true
|
|
22
|
+
- src: opencode/prompts/v1.0.0
|
|
23
|
+
dest: .agents/prompts/v1.0.0
|
|
24
|
+
strategy: overwrite
|
|
25
|
+
template: true
|