devcouncil 0.3.0 → 0.4.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 +46 -30
- package/package.json +6 -2
- package/packages/codeintel-grammars/hatch_build.py +43 -0
- package/packages/codeintel-grammars/pyproject.toml +16 -0
- package/packages/codeintel-grammars/src/devcouncil_codeintel_grammars/__init__.py +93 -0
- package/pyproject.toml +99 -4
- package/src/devcouncil/app/config.py +512 -20
- package/src/devcouncil/app/events.py +4 -23
- package/src/devcouncil/app/orchestrator.py +5 -0
- package/src/devcouncil/app/run_context.py +3 -3
- package/src/devcouncil/assets/__init__.py +4 -1
- package/src/devcouncil/assets/vendor/force-graph.min.js +5 -0
- package/src/devcouncil/campaign/__init__.py +71 -0
- package/src/devcouncil/campaign/bloom.py +137 -0
- package/src/devcouncil/campaign/dashboard.py +123 -0
- package/src/devcouncil/campaign/mailbox.py +305 -0
- package/src/devcouncil/campaign/notify.py +91 -0
- package/src/devcouncil/campaign/orchestrator.py +592 -0
- package/src/devcouncil/campaign/prompts/coordinator.md +29 -0
- package/src/devcouncil/campaign/prompts/director.md +21 -0
- package/src/devcouncil/campaign/prompts/protocol.md +46 -0
- package/src/devcouncil/campaign/prompts/reviewer.md +24 -0
- package/src/devcouncil/campaign/prompts/worker.md +24 -0
- package/src/devcouncil/campaign/roles.py +202 -0
- package/src/devcouncil/campaign/watcher.py +153 -0
- package/src/devcouncil/cli/commands/agents.py +24 -17
- package/src/devcouncil/cli/commands/artifacts.py +36 -27
- package/src/devcouncil/cli/commands/ast.py +12 -3
- package/src/devcouncil/cli/commands/baseline.py +21 -12
- package/src/devcouncil/cli/commands/boot.py +218 -0
- package/src/devcouncil/cli/commands/campaign.py +302 -0
- package/src/devcouncil/cli/commands/check.py +225 -12
- package/src/devcouncil/cli/commands/config.py +221 -74
- package/src/devcouncil/cli/commands/cost.py +137 -28
- package/src/devcouncil/cli/commands/dashboard.py +12 -4
- package/src/devcouncil/cli/commands/debug_cmd.py +249 -0
- package/src/devcouncil/cli/commands/design.py +27 -17
- package/src/devcouncil/cli/commands/doctor.py +790 -8
- package/src/devcouncil/cli/commands/evidence.py +41 -20
- package/src/devcouncil/cli/commands/export.py +73 -0
- package/src/devcouncil/cli/commands/gaps.py +175 -0
- package/src/devcouncil/cli/commands/gated_write.py +76 -0
- package/src/devcouncil/cli/commands/go.py +220 -68
- package/src/devcouncil/cli/commands/graph_cmd.py +1192 -0
- package/src/devcouncil/cli/commands/handoff.py +45 -34
- package/src/devcouncil/cli/commands/hook.py +630 -85
- package/src/devcouncil/cli/commands/init.py +89 -30
- package/src/devcouncil/cli/commands/integrate.py +296 -1385
- package/src/devcouncil/cli/commands/lease.py +120 -0
- package/src/devcouncil/cli/commands/logs.py +12 -5
- package/src/devcouncil/cli/commands/lsp.py +40 -5
- package/src/devcouncil/cli/commands/map.py +317 -74
- package/src/devcouncil/cli/commands/mcp_server.py +12 -2
- package/src/devcouncil/cli/commands/okf.py +44 -6
- package/src/devcouncil/cli/commands/plan.py +184 -69
- package/src/devcouncil/cli/commands/prompt.py +26 -17
- package/src/devcouncil/cli/commands/provenance.py +79 -0
- package/src/devcouncil/cli/commands/repair.py +60 -49
- package/src/devcouncil/cli/commands/report.py +148 -40
- package/src/devcouncil/cli/commands/requirements.py +104 -0
- package/src/devcouncil/cli/commands/reset_demo_state.py +13 -4
- package/src/devcouncil/cli/commands/rollback.py +46 -35
- package/src/devcouncil/cli/commands/run.py +173 -8
- package/src/devcouncil/cli/commands/runs.py +298 -68
- package/src/devcouncil/cli/commands/scaffold.py +33 -12
- package/src/devcouncil/cli/commands/semantic.py +29 -14
- package/src/devcouncil/cli/commands/setup.py +103 -93
- package/src/devcouncil/cli/commands/shell.py +51 -42
- package/src/devcouncil/cli/commands/show.py +56 -42
- package/src/devcouncil/cli/commands/skills.py +29 -20
- package/src/devcouncil/cli/commands/status.py +80 -67
- package/src/devcouncil/cli/commands/task_gate.py +295 -0
- package/src/devcouncil/cli/commands/tasks.py +248 -19
- package/src/devcouncil/cli/commands/trace.py +14 -8
- package/src/devcouncil/cli/commands/verify.py +33 -8
- package/src/devcouncil/cli/commands/version.py +14 -6
- package/src/devcouncil/cli/commands/watch.py +49 -30
- package/src/devcouncil/cli/commands/watch_fs.py +30 -19
- package/src/devcouncil/cli/commands/wiki.py +278 -0
- package/src/devcouncil/cli/main.py +58 -1
- package/src/devcouncil/codeintel/__init__.py +16 -0
- package/src/devcouncil/codeintel/build_control.py +429 -0
- package/src/devcouncil/codeintel/build_worker.py +78 -0
- package/src/devcouncil/codeintel/debug/__init__.py +17 -0
- package/src/devcouncil/codeintel/debug/broker.py +114 -0
- package/src/devcouncil/codeintel/debug/broker_client.py +61 -0
- package/src/devcouncil/codeintel/debug/consent.py +36 -0
- package/src/devcouncil/codeintel/debug/discovery.py +132 -0
- package/src/devcouncil/codeintel/debug/fingerprint.py +85 -0
- package/src/devcouncil/codeintel/debug/protocol.py +259 -0
- package/src/devcouncil/codeintel/debug/python_trace_runner.py +81 -0
- package/src/devcouncil/codeintel/debug/session.py +238 -0
- package/src/devcouncil/codeintel/debug/tracing.py +201 -0
- package/src/devcouncil/codeintel/languages/__init__.py +17 -0
- package/src/devcouncil/codeintel/languages/generic_extractor.py +236 -0
- package/src/devcouncil/codeintel/languages/registry.py +149 -0
- package/src/devcouncil/codeintel/languages/workers.py +245 -0
- package/src/devcouncil/codeintel/query/__init__.py +5 -0
- package/src/devcouncil/codeintel/query/engine.py +289 -0
- package/src/devcouncil/codeintel/resolution/__init__.py +6 -0
- package/src/devcouncil/codeintel/resolution/abstract_state.py +301 -0
- package/src/devcouncil/codeintel/resolution/frameworks/__init__.py +33 -0
- package/src/devcouncil/codeintel/resolution/frameworks/base.py +46 -0
- package/src/devcouncil/codeintel/resolution/frameworks/di.py +56 -0
- package/src/devcouncil/codeintel/resolution/frameworks/events.py +45 -0
- package/src/devcouncil/codeintel/resolution/frameworks/routes.py +88 -0
- package/src/devcouncil/codeintel/resolution/semantic.py +887 -0
- package/src/devcouncil/codeintel/service.py +104 -0
- package/src/devcouncil/codeintel/store/__init__.py +15 -0
- package/src/devcouncil/codeintel/store/sqlite.py +1565 -0
- package/src/devcouncil/codeintel/sync/__init__.py +19 -0
- package/src/devcouncil/codeintel/sync/coordinator.py +430 -0
- package/src/devcouncil/codeintel/sync/incremental.py +484 -0
- package/src/devcouncil/codeintel/sync/lease.py +96 -0
- package/src/devcouncil/codeintel/sync/scope.py +98 -0
- package/src/devcouncil/council/__init__.py +4 -0
- package/src/devcouncil/council/prompts/__init__.py +4 -0
- package/src/devcouncil/domain/checkpoint_refs.py +17 -0
- package/src/devcouncil/domain/evidence.py +1 -0
- package/src/devcouncil/domain/gap.py +10 -0
- package/src/devcouncil/domain/requirement.py +5 -1
- package/src/devcouncil/domain/task.py +43 -2
- package/src/devcouncil/execution/checkpoints.py +25 -31
- package/src/devcouncil/execution/context_builder.py +15 -44
- package/src/devcouncil/execution/fs_watcher.py +64 -0
- package/src/devcouncil/execution/gated_write.py +203 -0
- package/src/devcouncil/execution/handoff.py +2 -1
- package/src/devcouncil/execution/hook_policy.py +19 -5
- package/src/devcouncil/execution/lease_ops.py +177 -0
- package/src/devcouncil/execution/lease_validation.py +71 -0
- package/src/devcouncil/execution/patch.py +3 -0
- package/src/devcouncil/execution/permissions.py +1 -0
- package/src/devcouncil/execution/policy_engine.py +205 -10
- package/src/devcouncil/execution/prompt_builder.py +278 -33
- package/src/devcouncil/execution/run_trace.py +356 -0
- package/src/devcouncil/execution/shell_session.py +46 -5
- package/src/devcouncil/execution/stop_gate.py +746 -0
- package/src/devcouncil/execution/stop_gate_history.py +113 -0
- package/src/devcouncil/execution/stop_gate_state.py +54 -0
- package/src/devcouncil/execution/stop_gate_verify_cache.py +69 -0
- package/src/devcouncil/execution/task_gate_ops.py +590 -0
- package/src/devcouncil/execution/task_runner.py +19 -0
- package/src/devcouncil/executors/advisor_tool.py +315 -0
- package/src/devcouncil/executors/agent_registry.py +125 -17
- package/src/devcouncil/executors/claude_sdk.py +376 -0
- package/src/devcouncil/executors/coding_cli.py +724 -25
- package/src/devcouncil/executors/mini_swe.py +50 -8
- package/src/devcouncil/executors/native/agent.py +224 -19
- package/src/devcouncil/executors/openhands.py +50 -8
- package/src/devcouncil/executors/transient_retry.py +99 -0
- package/src/devcouncil/gating/checks/clean_git.py +5 -2
- package/src/devcouncil/gating/checks/planned_files_check.py +38 -11
- package/src/devcouncil/gating/checks/secret_scan_check.py +2 -2
- package/src/devcouncil/gating/policy.py +46 -2
- package/src/devcouncil/indexing/ast_matcher.py +41 -4
- package/src/devcouncil/indexing/graph/__init__.py +78 -0
- package/src/devcouncil/indexing/graph/api_routes.py +522 -0
- package/src/devcouncil/indexing/graph/build.py +862 -0
- package/src/devcouncil/indexing/graph/cache.py +329 -0
- package/src/devcouncil/indexing/graph/communities.py +28 -0
- package/src/devcouncil/indexing/graph/cypher.py +107 -0
- package/src/devcouncil/indexing/graph/embeddings.py +194 -0
- package/src/devcouncil/indexing/graph/export.py +381 -0
- package/src/devcouncil/indexing/graph/export_links.py +81 -0
- package/src/devcouncil/indexing/graph/extract_python.py +307 -0
- package/src/devcouncil/indexing/graph/extract_ts.py +1205 -0
- package/src/devcouncil/indexing/graph/intel.py +668 -0
- package/src/devcouncil/indexing/graph/liveness.py +992 -0
- package/src/devcouncil/indexing/graph/okf_export.py +65 -0
- package/src/devcouncil/indexing/graph/pdg/__init__.py +67 -0
- package/src/devcouncil/indexing/graph/pdg/build.py +11 -0
- package/src/devcouncil/indexing/graph/pdg/cdg.py +41 -0
- package/src/devcouncil/indexing/graph/pdg/cfg.py +199 -0
- package/src/devcouncil/indexing/graph/pdg/query.py +21 -0
- package/src/devcouncil/indexing/graph/pdg/reaching_def.py +126 -0
- package/src/devcouncil/indexing/graph/pdg/schema.py +253 -0
- package/src/devcouncil/indexing/graph/pdg/taint.py +154 -0
- package/src/devcouncil/indexing/graph/query.py +302 -0
- package/src/devcouncil/indexing/graph/resolve.py +1020 -0
- package/src/devcouncil/indexing/graph/schema.py +103 -0
- package/src/devcouncil/indexing/graph_index.py +20 -29
- package/src/devcouncil/indexing/lsp.py +57 -25
- package/src/devcouncil/indexing/lsp_client.py +577 -0
- package/src/devcouncil/indexing/map_artifacts.py +355 -0
- package/src/devcouncil/indexing/map_refresh.py +141 -0
- package/src/devcouncil/indexing/repo_mapper.py +1509 -138
- package/src/devcouncil/indexing/semantic_index.py +12 -6
- package/src/devcouncil/indexing/subsystem_map.py +163 -0
- package/src/devcouncil/indexing/ts_imports.py +343 -0
- package/src/devcouncil/indexing/viz.py +960 -0
- package/src/devcouncil/indexing/walk.py +52 -0
- package/src/devcouncil/indexing/wiring.py +1776 -0
- package/src/devcouncil/integrations/actions.py +27 -4
- package/src/devcouncil/integrations/check.py +211 -16
- package/src/devcouncil/integrations/claude_assets.py +209 -12
- package/src/devcouncil/integrations/clients/__init__.py +1 -0
- package/src/devcouncil/integrations/clients/aider.py +52 -0
- package/src/devcouncil/integrations/clients/antigravity.py +87 -0
- package/src/devcouncil/integrations/clients/claude.py +339 -0
- package/src/devcouncil/integrations/clients/codex.py +39 -0
- package/src/devcouncil/integrations/clients/common.py +332 -0
- package/src/devcouncil/integrations/clients/cursor.py +164 -0
- package/src/devcouncil/integrations/clients/gemini.py +49 -0
- package/src/devcouncil/integrations/clients/grok.py +105 -0
- package/src/devcouncil/integrations/clients/hooks.py +500 -0
- package/src/devcouncil/integrations/clients/opencode.py +96 -0
- package/src/devcouncil/integrations/clients/warp.py +75 -0
- package/src/devcouncil/integrations/code_review_graph.py +2 -2
- package/src/devcouncil/integrations/github.py +73 -7
- package/src/devcouncil/integrations/integration_cli.py +197 -0
- package/src/devcouncil/integrations/mcp/handlers/__init__.py +1 -0
- package/src/devcouncil/integrations/mcp/handlers/ast_lsp.py +77 -0
- package/src/devcouncil/integrations/mcp/handlers/checkout.py +50 -0
- package/src/devcouncil/integrations/mcp/handlers/cli_gate.py +43 -0
- package/src/devcouncil/integrations/mcp/handlers/codeintel.py +182 -0
- package/src/devcouncil/integrations/mcp/handlers/debug.py +236 -0
- package/src/devcouncil/integrations/mcp/handlers/evidence.py +70 -0
- package/src/devcouncil/integrations/mcp/handlers/git.py +99 -0
- package/src/devcouncil/integrations/mcp/handlers/graph.py +36 -0
- package/src/devcouncil/integrations/mcp/handlers/handoff.py +53 -0
- package/src/devcouncil/integrations/mcp/handlers/knowledge.py +30 -0
- package/src/devcouncil/integrations/mcp/handlers/lease.py +70 -0
- package/src/devcouncil/integrations/mcp/handlers/live.py +108 -0
- package/src/devcouncil/integrations/mcp/handlers/map.py +676 -0
- package/src/devcouncil/integrations/mcp/handlers/next_task.py +35 -0
- package/src/devcouncil/integrations/mcp/handlers/policy.py +80 -0
- package/src/devcouncil/integrations/mcp/handlers/prompts.py +168 -0
- package/src/devcouncil/integrations/mcp/handlers/provenance.py +101 -0
- package/src/devcouncil/integrations/mcp/handlers/read.py +74 -0
- package/src/devcouncil/integrations/mcp/handlers/router_cache.py +53 -0
- package/src/devcouncil/integrations/mcp/handlers/run.py +53 -0
- package/src/devcouncil/integrations/mcp/handlers/runs.py +84 -0
- package/src/devcouncil/integrations/mcp/handlers/scope.py +56 -0
- package/src/devcouncil/integrations/mcp/handlers/status.py +114 -0
- package/src/devcouncil/integrations/mcp/handlers/task.py +100 -0
- package/src/devcouncil/integrations/mcp/handlers/tool_specs.py +904 -0
- package/src/devcouncil/integrations/mcp/handlers/trace.py +65 -0
- package/src/devcouncil/integrations/mcp/handlers/verify.py +45 -0
- package/src/devcouncil/integrations/mcp/handlers/wiki.py +60 -0
- package/src/devcouncil/integrations/mcp/handlers/write.py +69 -0
- package/src/devcouncil/integrations/mcp/server.py +265 -2391
- package/src/devcouncil/integrations/mcp/util.py +303 -0
- package/src/devcouncil/integrations/setup.py +152 -0
- package/src/devcouncil/knowledge/fetch.py +4 -0
- package/src/devcouncil/knowledge/knowledge_select.py +38 -0
- package/src/devcouncil/knowledge/okf.py +2 -1
- package/src/devcouncil/knowledge/resource_discovery.py +40 -0
- package/src/devcouncil/knowledge/wiki.py +643 -0
- package/src/devcouncil/knowledge/wiki_read.py +87 -0
- package/src/devcouncil/live/cards.py +7 -7
- package/src/devcouncil/live/models.py +4 -1
- package/src/devcouncil/live/reviewer.py +90 -11
- package/src/devcouncil/live/signals.py +4 -2
- package/src/devcouncil/live/tasks.py +12 -3
- package/src/devcouncil/live/transcripts.py +69 -2
- package/src/devcouncil/llm/cache.py +5 -6
- package/src/devcouncil/llm/model_defaults.yaml +10 -10
- package/src/devcouncil/llm/provider.py +647 -73
- package/src/devcouncil/llm/router.py +271 -46
- package/src/devcouncil/llm/semantic_bridge.py +614 -0
- package/src/devcouncil/optimization/gepa_agent.py +6 -4
- package/src/devcouncil/optimization/skillopt.py +9 -5
- package/src/devcouncil/planning/arbiter_service.py +12 -3
- package/src/devcouncil/planning/correction_manifest.py +107 -10
- package/src/devcouncil/planning/plan_difficulty.py +69 -0
- package/src/devcouncil/planning/plan_service.py +5 -2
- package/src/devcouncil/planning/planned_files_reconcile.py +191 -0
- package/src/devcouncil/planning/prompt_enhancer_service.py +6 -5
- package/src/devcouncil/planning/question_conversion.py +56 -0
- package/src/devcouncil/planning/spec_service.py +9 -3
- package/src/devcouncil/repo/ci_scaffold.py +197 -1
- package/src/devcouncil/repo/gitignore.py +1 -2
- package/src/devcouncil/reporting/evidence_export.py +124 -0
- package/src/devcouncil/reporting/evidence_html.py +210 -0
- package/src/devcouncil/reporting/json_report.py +16 -12
- package/src/devcouncil/reporting/markdown_report.py +38 -9
- package/src/devcouncil/reporting/mcp_resources.py +142 -0
- package/src/devcouncil/reporting/report_builder.py +40 -4
- package/src/devcouncil/reporting/task_provenance.py +42 -0
- package/src/devcouncil/reporting/verdict.py +75 -0
- package/src/devcouncil/skills/library/README.md +1 -0
- package/src/devcouncil/skills/library/devcouncil-hero-loop.md +109 -0
- package/src/devcouncil/skills/library/devcouncil-verification.md +109 -0
- package/src/devcouncil/skills/library/devcouncil.md +93 -0
- package/src/devcouncil/skills/registry.py +43 -12
- package/src/devcouncil/storage/db.py +57 -11
- package/src/devcouncil/storage/models.py +6 -0
- package/src/devcouncil/storage/native.py +5 -3
- package/src/devcouncil/storage/repositories.py +50 -18
- package/src/devcouncil/telemetry/context.py +28 -0
- package/src/devcouncil/telemetry/cost.py +4 -5
- package/src/devcouncil/telemetry/logging_setup.py +78 -11
- package/src/devcouncil/telemetry/model_pricing.yaml +7 -0
- package/src/devcouncil/telemetry/stages.py +27 -2
- package/src/devcouncil/telemetry/tracker.py +50 -13
- package/src/devcouncil/ui/dashboard.py +120 -8
- package/src/devcouncil/utils/fsio.py +58 -0
- package/src/devcouncil/utils/git_snapshot.py +112 -0
- package/src/devcouncil/utils/json_persist.py +53 -0
- package/src/devcouncil/utils/proc.py +89 -0
- package/src/devcouncil/verification/acceptance_compiler.py +36 -13
- package/src/devcouncil/verification/ad_hoc_check.py +95 -3
- package/src/devcouncil/verification/checks/__init__.py +41 -0
- package/src/devcouncil/verification/checks/acceptance.py +39 -0
- package/src/devcouncil/verification/checks/acceptance_corpus.py +194 -0
- package/src/devcouncil/verification/checks/acceptance_evidence.py +239 -0
- package/src/devcouncil/verification/checks/command_evidence.py +148 -0
- package/src/devcouncil/verification/checks/compiled_acceptance.py +179 -0
- package/src/devcouncil/verification/checks/corpus_stale.py +124 -0
- package/src/devcouncil/verification/checks/corpus_verification.py +9 -0
- package/src/devcouncil/verification/checks/dead_symbols.py +360 -0
- package/src/devcouncil/verification/checks/diff_coverage_gate.py +101 -0
- package/src/devcouncil/verification/checks/doc_code_ref.py +79 -0
- package/src/devcouncil/verification/checks/liveness_ratchet.py +336 -0
- package/src/devcouncil/verification/checks/orphan_diff.py +104 -0
- package/src/devcouncil/verification/checks/planned_files.py +98 -0
- package/src/devcouncil/verification/checks/semantic_diff.py +241 -0
- package/src/devcouncil/verification/checks/stale_map.py +80 -0
- package/src/devcouncil/verification/checks/stub_scan.py +71 -0
- package/src/devcouncil/verification/checks/subsystem_boundary.py +103 -0
- package/src/devcouncil/verification/checks/wiring.py +216 -0
- package/src/devcouncil/verification/claims/__init__.py +23 -0
- package/src/devcouncil/verification/claims/checks.py +395 -0
- package/src/devcouncil/verification/claims/mapper.py +168 -0
- package/src/devcouncil/verification/claims/models.py +39 -0
- package/src/devcouncil/verification/claims/transcript.py +92 -0
- package/src/devcouncil/verification/claims/verdict.py +88 -0
- package/src/devcouncil/verification/command_evidence.py +170 -0
- package/src/devcouncil/verification/command_malformation.py +147 -0
- package/src/devcouncil/verification/command_runner.py +164 -0
- package/src/devcouncil/verification/coverage_measurement.py +292 -0
- package/src/devcouncil/verification/diff_coverage.py +151 -0
- package/src/devcouncil/verification/difficulty.py +296 -0
- package/src/devcouncil/verification/effort_heuristics.py +178 -0
- package/src/devcouncil/verification/gap_ids.py +63 -0
- package/src/devcouncil/verification/gate_cache.py +194 -0
- package/src/devcouncil/verification/gate_selector.py +344 -0
- package/src/devcouncil/verification/git_diff_fallback.py +272 -0
- package/src/devcouncil/verification/implementation_reviewer.py +13 -0
- package/src/devcouncil/verification/incremental_check.py +241 -0
- package/src/devcouncil/verification/next_actions.py +60 -1
- package/src/devcouncil/verification/rigor_analytics.py +130 -0
- package/src/devcouncil/verification/sandbox.py +38 -11
- package/src/devcouncil/verification/stub_detector.py +369 -0
- package/src/devcouncil/verification/test_resolver.py +67 -1
- package/src/devcouncil/verification/verifier.py +137 -1666
- package/src/devcouncil/verification/verify_orchestration.py +610 -0
- package/src/devcouncil/verification/verify_setup.py +176 -0
- package/src/devcouncil/verification/wiki_refresh.py +208 -0
- package/src/semantic_layer/__init__.py +58 -0
- package/src/semantic_layer/benchmark.py +75 -0
- package/src/semantic_layer/cache.py +290 -0
- package/src/semantic_layer/compressor.py +137 -0
- package/src/semantic_layer/config.py +75 -0
- package/src/semantic_layer/embeddings.py +69 -0
- package/src/semantic_layer/llm_backends.py +99 -0
- package/src/semantic_layer/pipeline.py +111 -0
- package/src/semantic_layer/router.py +128 -0
- package/src/semantic_layer/tuner.py +72 -0
- package/uv.lock +973 -9
- package/src/devcouncil/artifacts/migrations.py +0 -20
- package/src/devcouncil/artifacts/schemas.py +0 -23
- package/src/devcouncil/artifacts/serializer.py +0 -21
- package/src/devcouncil/integrations/gitnexus.py +0 -70
- package/src/devcouncil/integrations/graphify.py +0 -34
package/README.md
CHANGED
|
@@ -12,23 +12,21 @@
|
|
|
12
12
|
|
|
13
13
|
DevCouncil is a high-integrity command-line orchestration platform for AI-assisted software development. It turns AI implementation from a black-box generation task into a gated engineering workflow where every change is authorized, verified, and traceable back to a requirement.
|
|
14
14
|
|
|
15
|
-
DevCouncil does not replace coding agents.
|
|
15
|
+
DevCouncil does not replace coding agents. Its primary native path is Claude Code, followed by Codex CLI; it also works beside OpenCode, Google Antigravity CLI, Warp/Oz, Cursor, Aider, and bring-your-own prompt-taking CLIs. It owns the plan, task scope, verification loop, repair prompts, and evidence trail.
|
|
16
16
|
|
|
17
17
|
## Documentation
|
|
18
18
|
|
|
19
19
|
- [Quickstart](docs/quickstart.md): shortest install-to-first-task path.
|
|
20
|
-
- [Daily workflow](docs/workflow.md): manual sidecar loop, verification, repair, and
|
|
21
|
-
- [Coding CLI integration](docs/coding-cli-integration.md):
|
|
22
|
-
- [Integration tiers](docs/integration-tiers.md): headless executor vs MCP-only vs sidecar definitions.
|
|
20
|
+
- [Daily workflow](docs/workflow.md): manual sidecar loop, verification, repair, rollback, and `dev watch`.
|
|
21
|
+
- [Coding CLI integration](docs/coding-cli-integration.md): tiers, Claude Code, Codex, OpenCode, Antigravity, Cursor, Grok Build, Aider, MCP, hooks, stop gate / claim checks, and automated executors (Gemini deprecated).
|
|
23
22
|
- [CLI command reference](docs/cli-reference.md): available `dev` commands.
|
|
24
|
-
- [
|
|
25
|
-
- [
|
|
26
|
-
- [
|
|
23
|
+
- [Repo map & code graph](docs/code-graph.md): `dev map` / `dev graph` — navigation, dead code, blast radius, PDG (opt-in), HTML visualizer.
|
|
24
|
+
- [Corpus side index](docs/corpus.md): `dev corpus` for docs/PDFs/images and optional verify gates.
|
|
25
|
+
- [Hero loop](docs/hero-loop.md): certified Claude Code + MCP closed loop, leases, rigor, and `dev check --verify` on-ramp.
|
|
26
|
+
- [Architecture](docs/architecture.md): components, artifact graph, state machine, gating policy, and gated execution.
|
|
27
27
|
- [Model routing](docs/model-routing.md): provider selection, role models, OpenRouter, Vertex AI, Doubleword, and Ollama (local) setup.
|
|
28
|
-
- [Knowledge formats](docs/knowledge-formats.md): Open Knowledge Format (OKF) export/ingest/browse (`dev okf html` renders a bundle as a self-contained static HTML site) and design.md design-system lint/export plus `dev design check` (a CI-friendly gate that fails on hardcoded color/spacing/typography literals bypassing the tokens), injected as planning and coding context, plus the bidirectional OKF <-> engineering-skills bridge (`dev okf export --skills` / `dev okf ingest`).
|
|
29
28
|
- [Security model](docs/security.md): redaction, permissions, allowlists, and local state.
|
|
30
|
-
- [Project status](docs/project-status.md): current maturity by subsystem.
|
|
31
|
-
- [Roadmap](docs/roadmap.md): planned work.
|
|
29
|
+
- [Project status](docs/project-status.md): current maturity by subsystem and near-term focus.
|
|
32
30
|
|
|
33
31
|
## Why DevCouncil Exists
|
|
34
32
|
|
|
@@ -73,6 +71,8 @@ Start the first gated workflow from your target repository:
|
|
|
73
71
|
cd path/to/your/project
|
|
74
72
|
dev setup
|
|
75
73
|
dev plan "Describe the implementation goal"
|
|
74
|
+
dev status # if AWAITING_USER_DECISIONS, run dev approve next
|
|
75
|
+
dev approve # when planning raised advisory gaps
|
|
76
76
|
dev tasks
|
|
77
77
|
dev run TASK-001 --executor manual
|
|
78
78
|
dev prompt TASK-001
|
|
@@ -151,45 +151,51 @@ DevCouncil is an application layer around coding agents. It does not just emit p
|
|
|
151
151
|
|
|
152
152
|
### Workflow Features
|
|
153
153
|
|
|
154
|
-
- **Repository onboarding:** `dev setup` initializes `.devcouncil/`, generates the repo map + `AGENTS.md`/`CLAUDE.md` guides, scaffolds applicable engineering skills, runs environment checks, offers integration setup, and prints the next useful commands. Use `--skip-map` / `--skip-skills` to opt out, or `--scaffold-ci` to also write a starter GitHub Actions workflow.
|
|
155
|
-
- **Repository mapping:** `dev map` writes `.devcouncil/repo_map.json`, identifies important files and subsystems, filters generated/temp files, and keeps managed `AGENTS.md` / `CLAUDE.md` workspace guides synchronized. Subsystems, entry points, neighbors, and important surfaces are
|
|
154
|
+
- **Repository onboarding:** `dev setup` initializes `.devcouncil/`, generates the repo map + `AGENTS.md`/`CLAUDE.md` guides, scaffolds applicable engineering skills, runs environment checks, offers integration setup, and prints the next useful commands. Use `--skip-map` / `--skip-skills` to opt out, or `--scaffold-ci` to also write a starter GitHub Actions workflow. **`dev boot "goal"`** chains setup, `dev integrate --apply`, optional CI scaffold flags, and `dev go` in one command (see [quickstart](docs/quickstart.md)).
|
|
155
|
+
- **Repository mapping:** `dev map` writes `.devcouncil/repo_map.json` and a symbol-level `.devcouncil/graph/code_graph.json`, identifies important files and subsystems, filters generated/temp files, and keeps managed `AGENTS.md` / `CLAUDE.md` workspace guides synchronized. Subsystems, entry points, neighbors, and important surfaces are inferred generically for **any** repository — grouped from the directory tree and ranked by an import-graph in-degree. Freshness uses git HEAD, tracked-file hash, and a content fingerprint so plain edits mark the map stale; a **missing map is stale** (fail-closed on hard rigor). Post-tool-use hooks and `dev map --watch` refresh incrementally. Unified analyze entry: `dev graph ingest`. Query with `dev graph query|trace|dead|search|cypher|html`. Liveness lists are capped at 5000 per list and 256 dependents per file (truncation metadata when hit). The map is also generated automatically on first init.
|
|
156
156
|
- **Engineering skills:** `dev skills` lists the bundled skills and shows which apply to the repository; `dev skills scaffold` writes them into `.claude/skills/<name>/SKILL.md`. A merged always-on `core-engineering` skill (think-before-coding, simplicity, surgical changes, goal-driven execution, evidence-grounded communication) plus domain skills (Android, iOS, Windows, web, AI training) that brief the agent on current SDKs, deprecations, and tooling before coding. Applicable skills are also embedded into `dev prompt` output.
|
|
157
|
-
- **CI scaffolding:** `dev scaffold-ci` writes a starter `.github/workflows/devcouncil.yml` derived from the configured test/lint/typecheck commands, filtered to the detected language stack; it never overwrites existing CI unless `--force`.
|
|
158
|
-
- **Planning council:** `dev plan` turns a goal into requirements, acceptance criteria, assumptions, critique findings, and executable tasks.
|
|
159
|
-
- **Task graph:** `dev tasks` and `dev show TASK-001` expose requirement links, acceptance-criterion links, planned files, expected tests, allowed commands, forbidden changes, dependencies, and
|
|
157
|
+
- **CI scaffolding:** `dev scaffold-ci` writes a starter `.github/workflows/devcouncil.yml` derived from the configured test/lint/typecheck commands, filtered to the detected language stack; it never overwrites existing CI unless `--force`. Run `dev scaffold-ci --evidence` to generate `.github/workflows/devcouncil-evidence.yml` which automates verifying PRs and uploading evidence JSON and HTML reports.
|
|
158
|
+
- **Planning council:** `dev plan` turns a goal into requirements, acceptance criteria, assumptions, critique findings, and executable tasks. When advisory gaps remain, the project stays in `AWAITING_USER_DECISIONS` until you run `dev approve` (or `dev e2e`/`dev go --force`).
|
|
159
|
+
- **Task graph:** `dev tasks` and `dev show TASK-001` expose requirement links, acceptance-criterion links, planned files, expected tests, allowed commands, forbidden changes, dependencies, status, and active **lease** owners. Tasks can declare `depends_on`; the plan gate rejects unknown dependencies and cycles, and `dev go`/`dev e2e` run tasks in topological order and skip a task whose prerequisites didn't complete (rather than letting it fail spuriously and burn its repair budget). `dev tasks cancel`, `dev tasks edit`, and `dev tasks reprioritize` manage the live task graph without replanning.
|
|
160
|
+
- **Gap and requirements surfaces:** `dev gaps` lists blocking and advisory verification gaps project-wide; `dev requirements` summarizes requirement coverage and derived status; `dev export` writes a portable JSON snapshot of requirements, tasks, and gaps.
|
|
160
161
|
- **Scoped task prompts:** `dev prompt TASK-001` creates a constrained implementation prompt for sidecar agents, including file scope, verification expectations, and forbidden changes. The prompt now embeds the current (secret-redacted) contents of each planned file with a top-level symbol outline, structural orientation (from the code-review graph when available, otherwise the generated `repo_map.json`), and a **dependents (blast-radius) list** — the files that import each file being changed, from the map's precomputed reverse-import index — so the agent edits in place and keeps call sites working instead of starting blind. A central prompt budget keeps the core (goal/scope/instructions) always present and fits the optional context sections in priority order (file contents > structural > dependents > skills), dropping the lowest-priority ones with an explicit marker rather than overflowing silently.
|
|
161
162
|
- **Execution:** `dev run TASK-001` supports manual sidecar mode, built-in coding CLI executors, external executors, and registered custom CLI agents.
|
|
162
163
|
- **One-command flow:** `dev e2e "goal"` and `dev go "goal"` can initialize state, plan, run approved tasks, verify the diff, and generate a report. With an automated executor the run is now a **closed loop**: a task that fails verification is re-driven through a bounded self-repair loop (a correction manifest is written and the executor re-run) until it verifies or the `execution.max_repair_attempts` budget is spent, with no-progress detection that stops early when the same blocking gaps reappear.
|
|
163
164
|
- **Verification:** `dev verify TASK-001` captures the diff, runs expected evidence commands, checks planned-file compliance, detects orphan changes, flags unplanned dependency edits, scans for secrets, and links evidence to acceptance criteria. An **empty diff can no longer pass** a task that declares files to create or modify (work that committed earlier is still recognized via the task checkpoint), and the result reports the rigor it ran at (`verification_mode` compiled vs coarse, `diff_empty`, `coverage_measured`/`coverage_skipped_reason`) plus a distinct `advisory_actions` list so an agent never mistakes "passed" for "proven." `dev verify` exits non-zero when a task is blocked so shell-driven agents can gate on `$?`.
|
|
165
|
+
- **Lite check:** `dev check --verify` runs the same deterministic evidence gate against the current working tree without planning or provider keys — useful for CI and quick audits. `dev check` without `--verify` performs an LLM audit of current changes. Run `dev check --watch` to start a fast, incremental check loop that selects and re-runs only the stack gates affected by changed files using an input-content hash cache.
|
|
164
166
|
- **Repair:** `dev repair` converts blocking gaps into focused follow-up work instead of leaving failures as vague test output.
|
|
165
167
|
- **Rollback:** `dev rollback TASK-001` uses task checkpoints to revert scoped work when a task needs to be backed out.
|
|
166
|
-
- **
|
|
168
|
+
- **Codebase wiki:** `dev wiki update` generates and maintains an agent-facing wiki of the repository as an Open Knowledge Format bundle under `.devcouncil/knowledge/okf/wiki/` — an index, one cross-linked page per subsystem (entry points, roles, neighbors, handoff paths), a development guide, and a `log.md` change history. Pages are built deterministically from `repo_map.json` and, when a model is configured, enriched with LLM-written prose (overview, key flows, agent guidance) by the `wiki_writer` role; enrichment degrades cleanly to the skeleton. Updates are incremental (per-page fingerprints preserve prior enrichment), `dev map` refreshes stale skeletons automatically, `dev wiki status` reports freshness, and `dev wiki install-action` adds a GitHub Action that keeps the wiki current via automated PRs. Because the bundle lives under the knowledge directory, wiki pages are selected into planning/task prompts like any other OKF knowledge — tagged by subsystem so goals pull the right page.
|
|
169
|
+
- **Run supervision (Preview):** every automated run is a reversible object (Shepherd-style): `dev runs timeline <run-or-task>` joins the run manifest, trace events, and git checkpoints into one inspectable timeline; `dev runs diff` shows exactly what the run changed; `dev runs revert` reverses it from its checkpoints (and records the revert in the trace); and `dev runs supervise` asks a supervisor meta-agent (the `run_supervisor` role, with deterministic heuristics as fallback) for a keep/revert/repair verdict — add `--apply` on the CLI to act on a revert verdict. Over MCP, `devcouncil_run_timeline` and `devcouncil_run_supervise` expose the same inspection and verdict surfaces; MCP supervise is verdict-only (no workspace modify — use `dev runs revert` or CLI `--apply` separately).
|
|
170
|
+
- **Reporting:** `dev report` emits a requirements coverage table, evidence summary, blocking gaps, and live-review blockers; JSON, PR-comment, and interactive HTML report (`dev report --evidence-html PATH`) formats are available for automation.
|
|
167
171
|
|
|
168
172
|
### App Surfaces
|
|
169
173
|
|
|
170
174
|
- **CLI:** `dev` and `devcouncil` expose the same Typer command surface for local terminal workflows.
|
|
175
|
+
- **Multi-agent campaigns:** `dev campaign run` executes a planned task graph as a parallel, dependency-aware multi-agent campaign (Director → Coordinator → Worker pool + Reviewer QC) with automatic file-overlap serialization, cost budgeting, ntfy push notifications, and a markdown progress dashboard at `.devcouncil/campaign/dashboard.md`. Roster and mailbox commands (`dev campaign roster` / `dev campaign inbox`) expose the role hierarchy and on-disk message bus.
|
|
171
176
|
- **Agent hub:** `dev agents` lists built-in and custom agents, `dev agents add` registers prompt-taking CLIs, `dev agents doctor` checks wiring, `dev agents run` executes a task through a named agent/profile, and `dev agents optimize` uses GEPA to tune profile preambles from offline eval examples.
|
|
172
|
-
- **Integration hub:** `dev integrate all --apply` configures supported coding CLI and MCP integrations
|
|
173
|
-
- **MCP server:** `dev mcp-server` exposes DevCouncil context and workflow tools over stdio for MCP-capable clients. `devcouncil_verify_task` now runs DevCouncil's strong compiled per-criterion checks when a provider key is configured (falling back to a clearly-labeled `coarse` mode otherwise), refuses to pass on an empty diff, and returns `verification_mode`, `diff_empty`, `coverage_measured`/`coverage_skipped_reason`, and an `advisory_actions` array alongside the blocking `next_actions`. Cheap, re-verify-free read tools — `devcouncil_get_gaps` and `devcouncil_get_next_actions` — let a reconnecting agent resume outstanding work from persisted gaps (which now carry `file`/`line`/`suggested_command`/`acceptance_criterion_id`). Task leases expire on a config-driven TTL so a crashed agent's task frees itself, with `devcouncil_renew_lease` and `devcouncil_list_leases` for long runs and fleet supervision; a partial-unique DB index enforces a single active lease per task, so concurrent checkouts can't both win the writer slot. A pure-MCP agent can now make the change itself through lease-gated write tools — `devcouncil_write_file` and `devcouncil_apply_patch` — which policy-check every target path *before* it lands (out-of-scope, protected, or escaping paths are rejected; a patch with any out-of-scope target is rejected whole, never partially applied), write atomically, and record a `FileChangeEvent` for provenance. The corpus is also browsable as MCP **resources** (`devcouncil://report`, `devcouncil://tasks`, `devcouncil://gaps`, `devcouncil://cards`, `devcouncil://task/{id}`) so a host can read project state without a tool call. `devcouncil_get_task_provenance` then exposes that audit trail — gated file changes, verification runs, diff-coverage evidence, and the latest correction manifest — so what happened on disk is inspectable. The diff↔coverage proof is now also retained across graph reloads (it was previously dropped), so reports and `dev status` reflect whether the changed lines were actually exercised.
|
|
177
|
+
- **Integration hub:** `dev integrate all --apply` configures supported coding CLI and MCP integrations in Claude-first, Codex-second order. `dev integrate check` reports each client's **enforcement posture**: `pre-action`, `advisory+verify`, or `verify-only`, so a client API that cannot natively deny PreToolUse is never presented as blocking.
|
|
178
|
+
- **MCP server:** `dev mcp-server` exposes DevCouncil context and workflow tools over stdio for MCP-capable clients. Native graph tools include `devcouncil_graph_ingest`, `devcouncil_graph_cypher`, `devcouncil_pdg_query`, and `devcouncil_explain` alongside repo-map and symbol-query surfaces. `devcouncil_verify_task` now runs DevCouncil's strong compiled per-criterion checks when a provider key is configured (falling back to a clearly-labeled `coarse` mode otherwise), refuses to pass on an empty diff, and returns `verification_mode`, `diff_empty`, `coverage_measured`/`coverage_skipped_reason`, and an `advisory_actions` array alongside the blocking `next_actions`. Cheap, re-verify-free read tools — `devcouncil_get_gaps` and `devcouncil_get_next_actions` — let a reconnecting agent resume outstanding work from persisted gaps (which now carry `file`/`line`/`suggested_command`/`acceptance_criterion_id`). Task leases expire on a config-driven TTL so a crashed agent's task frees itself, with `devcouncil_renew_lease` and `devcouncil_list_leases` for long runs and fleet supervision; a partial-unique DB index enforces a single active lease per task, so concurrent checkouts can't both win the writer slot. A pure-MCP agent can now make the change itself through lease-gated write tools — `devcouncil_write_file` and `devcouncil_apply_patch` — which policy-check every target path *before* it lands (out-of-scope, protected, or escaping paths are rejected; a patch with any out-of-scope target is rejected whole, never partially applied), write atomically, and record a `FileChangeEvent` for provenance. The corpus is also browsable as MCP **resources** (`devcouncil://report`, `devcouncil://tasks`, `devcouncil://gaps`, `devcouncil://cards`, `devcouncil://task/{id}`) so a host can read project state without a tool call. `devcouncil_get_task_provenance` then exposes that audit trail — gated file changes, verification runs, diff-coverage evidence, and the latest correction manifest — so what happened on disk is inspectable. The diff↔coverage proof is now also retained across graph reloads (it was previously dropped), so reports and `dev status` reflect whether the changed lines were actually exercised.
|
|
174
179
|
- **Live review:** `dev watch` tracks review cards, signals, blocking feedback, and repair guidance while a session is active.
|
|
175
180
|
- **Trace viewer:** `dev trace tail --follow` streams local DevCouncil trace events for execution, verification, and agent handoff.
|
|
176
|
-
- **
|
|
181
|
+
- **Cost and runs:** `dev cost show` reports estimated model-call cost from the local ledger; `dev runs list` and `dev runs show` inspect coding-agent run manifests under `.devcouncil/runs/`, and `dev runs timeline`/`diff`/`revert`/`supervise` treat each run as a reversible, supervisable trace. Over MCP, `devcouncil_wiki_page` exposes the codebase wiki; run supervision tools are documented in [coding-cli-integration.md](docs/coding-cli-integration.md#run-supervision) (`devcouncil_run_timeline`, `devcouncil_run_supervise`).
|
|
182
|
+
- **Live Dashboard (Stable local UI):** `dev dashboard --open` serves a local-only status dashboard (blocking-first **gaps** table, recent runs, integration diagnostics) and opens it in the default browser. Apply controls are loopback + token-guarded.
|
|
177
183
|
- **Agent-consumable CLI:** machine output for shell-driven agents — `dev prompt --json` (`{ok, task_id, prompt}`), `dev handoff --json` (`{ok, manifest_path, run_id, next_command}` to chain `dev run`), `dev verify` exits non-zero when blocked, and `dev status`/`dev report` accept `--fail-on-blocking` to exit non-zero on outstanding blocking gaps so a loop can gate on `$?`.
|
|
178
|
-
- **Config editor:** `dev config` and `dev config models` inspect/update provider, model, executor, and command configuration.
|
|
184
|
+
- **Config editor:** `dev config`, `dev config show`, `dev config set`, and `dev config models` inspect/update provider, model, executor, and command configuration.
|
|
179
185
|
- **Artifact tools:** `dev artifacts validate` checks stored graph integrity.
|
|
180
|
-
- **Code intelligence:** `dev lsp inspect` checks optional language-server readiness, and `dev ast match` searches code structurally.
|
|
181
|
-
- **Doctor:** `dev doctor` validates local dependencies,
|
|
186
|
+
- **Code intelligence:** `dev lsp inspect` (with `--json` for automation) checks optional language-server readiness, and `dev ast match` searches code structurally.
|
|
187
|
+
- **Doctor:** `dev doctor` validates local dependencies, configures coverage floor checks (`[tool.coverage.report] fail_under`), checks mypy status, and runs environment prerequisites before a workflow fails; it includes a subsystem maturity table aligned with `docs/project-status.md`.
|
|
182
188
|
|
|
183
189
|
### Agent And Executor Support
|
|
184
190
|
|
|
185
191
|
DevCouncil works with human-in-the-loop sidecar sessions and automated prompt handoff:
|
|
186
192
|
|
|
187
193
|
- **Manual sidecar:** paste `dev prompt TASK-001` into any agent, then run `dev verify TASK-001`.
|
|
188
|
-
- **Built-in coding CLI adapters:** `codex`, `
|
|
194
|
+
- **Built-in coding CLI adapters:** `codex`, `claude`, `opencode`, `antigravity`, `warp`, `cursor`, `grok`, `aider`, `copilot`, `goose`, `amp`, `qwen`, `crush`, and aliases such as `codex-cli`, `claude-code`, `opencode-cli`, `antigravity-cli`, `agy`, `agy-cli`, `warp-cli`, `oz`, `cursor-agent`, `cursor-cli`, `grok-build`, `grok-cli`, `gork`, `xai-grok`, `copilot-cli`, `github-copilot`, `goose-cli`, `amp-cli`, `qwen-code`, and `crush-cli`. **`gemini` / `gemini-cli` remain as deprecated compat only** — prefer Antigravity.
|
|
189
195
|
- **Custom CLI agents:** register any prompt-taking command with stdin, argument, or prompt-file handoff.
|
|
190
196
|
- **Execution profiles:** custom agents can use profiles such as `default`, `yolo`, and `prod` to adjust prompt constraints while DevCouncil still verifies the final diff.
|
|
191
|
-
- **External automated adapters:** `mini`, `openhands`, `native-preview`, and `native` are available when the corresponding local executor is configured.
|
|
192
|
-
- **Hook-aware clients:** `dev integrate hooks --apply` installs
|
|
197
|
+
- **External automated adapters:** `mini`, `openhands`, `native-preview`, and `native` are available when the corresponding local executor is configured. The **native executor** (`NativeAgent`) is in Preview status and supports lease-gated writes (gated by the same safety path as MCP) and a bounded self-repair closed loop.
|
|
198
|
+
- **Hook-aware clients:** `dev integrate hooks --apply` installs native lifecycle hooks. Claude Code can enforce the opt-in blocking write gate; Codex currently accepts advisory `systemMessage` output for PreToolUse and uses its native sandbox plus deterministic post-run verification for containment. Codex Stop/SubagentStop uses the supported `continue`/`stopReason` schema. File-write policy resolves every target and denies anything outside the project root.
|
|
193
199
|
|
|
194
200
|
### Gates And Evidence
|
|
195
201
|
|
|
@@ -198,6 +204,7 @@ DevCouncil blocks completion on concrete gaps rather than model confidence:
|
|
|
198
204
|
- **Plan approval gates:** requirements must have acceptance criteria, acceptance criteria need verification methods, tasks must map to known requirements and acceptance criteria, high-impact assumptions must be resolved, and high/critical critique findings must be closed.
|
|
199
205
|
- **Task readiness gates:** the working tree must be clean for the task, planned files must be declared, and each task needs allowed commands plus expected verification evidence.
|
|
200
206
|
- **Diff gates:** verification detects files changed outside the planned task scope, dependency-file edits made without authorization, deleted/added files, and untracked file diffs.
|
|
207
|
+
- **Architecture/subsystem boundary gates:** flags edits that cross non-neighbor subsystems without plan coverage, preventing unauthorized architecture drift. **Write policy** also soft-blocks paths outside `planned_files` unless the target shares a subsystem or a map `neighbors` area (widen via `dev scope update`).
|
|
201
208
|
- **Evidence gates:** passing evidence commands are linked back to acceptance criteria; missing passing evidence becomes a blocking gap.
|
|
202
209
|
- **Security gates:** secret scanning runs over captured diffs, and command output is redacted before it is written to logs.
|
|
203
210
|
- **Live-review gates:** unresolved critical review cards can block task verification and appear in reports.
|
|
@@ -208,7 +215,7 @@ DevCouncil blocks completion on concrete gaps rather than model confidence:
|
|
|
208
215
|
- **Role models:** planner, critic, arbiter, reviewer, and repair roles can share one model or use per-role overrides.
|
|
209
216
|
- **Structured repair:** model routing includes JSON repair paths for structured planning and review outputs.
|
|
210
217
|
- **Model defaults:** packaged YAML defaults ship with the tool so installed CLI environments do not depend on source-tree-only files.
|
|
211
|
-
- **Telemetry:** local trace and cost data feed `dev status`, reports, and dashboard surfaces.
|
|
218
|
+
- **Telemetry:** local trace and cost data feed `dev status`, `dev cost show`, reports, and dashboard surfaces.
|
|
212
219
|
|
|
213
220
|
### Reports And Automation Outputs
|
|
214
221
|
|
|
@@ -225,11 +232,13 @@ DevCouncil stores local workflow state in the target repository:
|
|
|
225
232
|
- `.devcouncil/config.yaml`: provider, executor, command, integration, and workflow settings.
|
|
226
233
|
- `.devcouncil/secrets.env`: local provider secrets such as API keys or Vertex AI project/location values. Git-ignored; copy `.devcouncil/secrets.env.example` and fill in real values. Environment variables take precedence over this file.
|
|
227
234
|
- `.devcouncil/repo_map.json`: generated repository map and subsystem navigation index.
|
|
235
|
+
- `.devcouncil/graph/code_graph.json`: symbol-level knowledge graph (imports, calls, dead-code tiers); visualize with `dev graph html`.
|
|
228
236
|
- `.devcouncil/state.sqlite`: SQLite state for requirements, assumptions, tasks, evidence, gaps, critique findings, and project phase history.
|
|
229
237
|
- `.devcouncil/checkpoints/`: task snapshots used by verification and rollback.
|
|
230
238
|
- `.devcouncil/logs/`: the durable run log (`devcouncil.log`, rotating, DEBUG-level) plus redacted stdout/stderr from verification commands.
|
|
231
239
|
- `.devcouncil/runs/<run-id>/run.log`: the full per-run log isolated to a single executor run.
|
|
232
240
|
- `.devcouncil/runs/<run-id>/agent-run.json`: prompt, executor, profile, exit status, and run metadata for automated agent executions.
|
|
241
|
+
- `.devcouncil/knowledge/okf/wiki/`: the generated codebase wiki (OKF bundle) — the one part of `.devcouncil/` meant to be committed and shared, maintained by `dev wiki update`.
|
|
233
242
|
- `.devcouncil/reports/latest.json`: optional machine-readable report generated by `dev e2e --agent`.
|
|
234
243
|
- `.devcouncil/integrations/` and `.agents/`: generated integration files such as Warp/Oz MCP JSON and Antigravity MCP config.
|
|
235
244
|
|
|
@@ -244,7 +253,7 @@ Every command logs each stage and step. The full DEBUG trail always lands in `.d
|
|
|
244
253
|
|
|
245
254
|
### Maturity
|
|
246
255
|
|
|
247
|
-
The stable daily workflow is planning, manual sidecar execution, verification, repair
|
|
256
|
+
The stable daily workflow is planning, manual sidecar execution, verification, the deterministic repair loop in `dev go`/`dev e2e`, rollback, reporting, repo map/code graph (`dev map` / `dev graph`), and the local Live Dashboard (`dev dashboard --open`). The **certified Claude Code MCP closed loop** (checkout → write → verify → repair → release) is **Stable** (see [hero-loop.md](docs/hero-loop.md#certified-path-stable)). Coding CLI executors and hooks (including stop-gate claim checks), `dev boot` onboarding, CI scaffolding, multi-agent campaigns, watch mode, live review, PR comments, LSP/AST tools, corpus side index, opt-in PDG, and GitHub check surfaces are preview features. Optional LLM repair inference remains preview and is not required for the deterministic loop. The native autonomous executor is **Preview** (lease-gated writes + shared verify loop) and still requires DevCouncil verification before work is considered complete.
|
|
248
257
|
|
|
249
258
|
## Core Flow
|
|
250
259
|
|
|
@@ -315,11 +324,15 @@ uv run dev --help
|
|
|
315
324
|
For a global install from this repository:
|
|
316
325
|
|
|
317
326
|
```bash
|
|
318
|
-
uv tool install --force .
|
|
327
|
+
uv tool install --force --reinstall --editable .
|
|
319
328
|
dev --help
|
|
320
329
|
devcouncil --help
|
|
321
330
|
```
|
|
322
331
|
|
|
332
|
+
`--editable` keeps `~/.local/bin/dev` pointed at this checkout so map/graph and other WIP features stay current without reinstalling after every edit. Use `uv tool install --force .` (without `--editable`) for a frozen snapshot of the tree at install time.
|
|
333
|
+
|
|
334
|
+
See [docs/code-graph.md](docs/code-graph.md) for `dev map` / `dev graph` usage (dead code, blast radius, HTML visualizer).
|
|
335
|
+
|
|
323
336
|
## Project Shape
|
|
324
337
|
|
|
325
338
|
DevCouncil implements a 7-phase software-team workflow:
|
|
@@ -345,8 +358,11 @@ Project ideas and execution patterns come from the open-source ecosystem:
|
|
|
345
358
|
- [OpenHands](https://github.com/All-Hands-AI/OpenHands): for workspace-aware agent execution patterns.
|
|
346
359
|
- [mini-SWE-agent](https://github.com/SWE-agent/mini-swe-agent): for lightweight execution loop inspiration.
|
|
347
360
|
- [SWE-agent](https://github.com/SWE-agent/SWE-agent): for full-spectrum autonomous SWE-style tasking patterns.
|
|
348
|
-
- [GitNexus](https://github.com/abhigyanpatwari/GitNexus):
|
|
349
|
-
- [graphify](https://github.com/safishamsi/graphify):
|
|
361
|
+
- [GitNexus](https://github.com/abhigyanpatwari/GitNexus): structural codebase awareness concepts (native `dev map` / `dev graph` — no runtime integration).
|
|
362
|
+
- [graphify](https://github.com/safishamsi/graphify): knowledge-graph / corpus coordination concepts (native `dev corpus` + optional verify gates — no runtime integration).
|
|
363
|
+
- [Claude-oversight](https://github.com/sabarishraja/Claude-oversight): claim-to-evidence stop-gate semantics (native stop gate + claim mapper).
|
|
364
|
+
- [Claude-hindsight](https://github.com/sabarishraja/Claude-hindsight): session continuity / statusline briefing patterns (native SessionStart briefing).
|
|
365
|
+
- [Shepherd](https://github.com/shepherd-agents/shepherd): reversible run traces and meta-agent supervision (`dev runs timeline` / `diff` / `revert` / `supervise`).
|
|
350
366
|
|
|
351
367
|
## License
|
|
352
368
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "devcouncil",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Gated orchestrator for AI-assisted software development",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://github.com/bharathvbcr/DevCouncil#readme",
|
|
@@ -31,13 +31,17 @@
|
|
|
31
31
|
"src/**/*.svg",
|
|
32
32
|
"src/**/*.yaml",
|
|
33
33
|
"src/**/*.mjs",
|
|
34
|
+
"src/**/*.js",
|
|
35
|
+
"packages/codeintel-grammars/pyproject.toml",
|
|
36
|
+
"packages/codeintel-grammars/hatch_build.py",
|
|
37
|
+
"packages/codeintel-grammars/src/devcouncil_codeintel_grammars/__init__.py",
|
|
34
38
|
"pyproject.toml",
|
|
35
39
|
"uv.lock",
|
|
36
40
|
"README.md",
|
|
37
41
|
"LICENSE"
|
|
38
42
|
],
|
|
39
43
|
"scripts": {
|
|
40
|
-
"install:dev": "uv tool install --force .",
|
|
44
|
+
"install:dev": "uv tool install --force '.[codeintel-full]'",
|
|
41
45
|
"install:editable": "uv pip install -e .",
|
|
42
46
|
"dev": "uv run devcouncil",
|
|
43
47
|
"pack:check": "npm pack --dry-run",
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Mark grammar artifacts as platform-specific without tying them to one ABI."""
|
|
2
|
+
|
|
3
|
+
import hashlib
|
|
4
|
+
import json
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from hatchling.builders.hooks.plugin.interface import BuildHookInterface
|
|
8
|
+
from packaging.tags import sys_tags
|
|
9
|
+
|
|
10
|
+
__all__ = ["CustomBuildHook"]
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class CustomBuildHook(BuildHookInterface):
|
|
14
|
+
def initialize(self, version: str, build_data: dict) -> None:
|
|
15
|
+
del version
|
|
16
|
+
assets = Path(self.root) / "src" / "devcouncil_codeintel_grammars" / "assets"
|
|
17
|
+
manifest_path = assets / "manifest.json"
|
|
18
|
+
if not manifest_path.is_file():
|
|
19
|
+
raise RuntimeError(
|
|
20
|
+
"grammar assets are not staged; run scripts/build-codeintel-grammar-wheel.py first"
|
|
21
|
+
)
|
|
22
|
+
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
|
23
|
+
checksums = dict(manifest.get("sha256") or {})
|
|
24
|
+
required = set(manifest.get("required_grammars") or [])
|
|
25
|
+
available = set(manifest.get("languages") or [])
|
|
26
|
+
missing = sorted(required - available)
|
|
27
|
+
failed = [
|
|
28
|
+
rel
|
|
29
|
+
for rel, digest in checksums.items()
|
|
30
|
+
if not (assets / rel).is_file()
|
|
31
|
+
or hashlib.sha256((assets / rel).read_bytes()).hexdigest() != digest
|
|
32
|
+
]
|
|
33
|
+
if not checksums or not required or missing or failed:
|
|
34
|
+
raise RuntimeError(
|
|
35
|
+
"invalid grammar assets: "
|
|
36
|
+
f"missing={missing}, failed_checksums={failed}, asset_count={len(checksums)}"
|
|
37
|
+
)
|
|
38
|
+
platform_tag = next(sys_tags()).platform
|
|
39
|
+
build_data["tag"] = f"py3-none-{platform_tag}"
|
|
40
|
+
build_data["pure_python"] = False
|
|
41
|
+
build_data.setdefault("force_include", {})[str(assets)] = (
|
|
42
|
+
"devcouncil_codeintel_grammars/assets"
|
|
43
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "devcouncil-codeintel-grammars"
|
|
3
|
+
version = "0.4.0"
|
|
4
|
+
description = "Platform-specific Tree-sitter grammar assets for DevCouncil code intelligence"
|
|
5
|
+
requires-python = ">=3.12"
|
|
6
|
+
dependencies = ["tree-sitter-language-pack>=1.12.5"]
|
|
7
|
+
|
|
8
|
+
[build-system]
|
|
9
|
+
requires = ["hatchling"]
|
|
10
|
+
build-backend = "hatchling.build"
|
|
11
|
+
|
|
12
|
+
[tool.hatch.build.targets.wheel]
|
|
13
|
+
packages = ["src/devcouncil_codeintel_grammars"]
|
|
14
|
+
|
|
15
|
+
[tool.hatch.build.hooks.custom]
|
|
16
|
+
path = "hatch_build.py"
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"""Activate the packaged, offline Tree-sitter grammar cache."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import hashlib
|
|
6
|
+
import json
|
|
7
|
+
import threading
|
|
8
|
+
from importlib.resources import files
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
_ACTIVATION_LOCK = threading.Lock()
|
|
13
|
+
_ACTIVATION_STATUS: dict[str, Any] | None = None
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def asset_root() -> Path:
|
|
17
|
+
return Path(str(files("devcouncil_codeintel_grammars").joinpath("assets")))
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def verify() -> dict[str, Any]:
|
|
21
|
+
root = asset_root()
|
|
22
|
+
manifest_path = root / "manifest.json"
|
|
23
|
+
if not manifest_path.is_file():
|
|
24
|
+
return {"ok": False, "error": "grammar manifest missing", "assets": str(root)}
|
|
25
|
+
try:
|
|
26
|
+
manifest = json.loads(manifest_path.read_text(encoding="utf-8"))
|
|
27
|
+
except (OSError, ValueError) as exc:
|
|
28
|
+
return {
|
|
29
|
+
"ok": False,
|
|
30
|
+
"error": f"invalid grammar manifest: {exc}",
|
|
31
|
+
"assets": str(root),
|
|
32
|
+
}
|
|
33
|
+
checksums = dict(manifest.get("sha256") or {})
|
|
34
|
+
languages = sorted(set(manifest.get("languages") or []))
|
|
35
|
+
required = sorted(set(manifest.get("required_grammars") or []))
|
|
36
|
+
failures: list[str] = []
|
|
37
|
+
for rel, digest in checksums.items():
|
|
38
|
+
path = (root / rel).resolve()
|
|
39
|
+
if root.resolve() not in path.parents:
|
|
40
|
+
failures.append(rel)
|
|
41
|
+
continue
|
|
42
|
+
if not path.is_file() or hashlib.sha256(path.read_bytes()).hexdigest() != digest:
|
|
43
|
+
failures.append(rel)
|
|
44
|
+
missing = sorted(set(required) - set(languages))
|
|
45
|
+
error = ""
|
|
46
|
+
if not checksums:
|
|
47
|
+
error = "grammar manifest contains no checksummed assets"
|
|
48
|
+
elif not required:
|
|
49
|
+
error = "grammar manifest contains no required grammar list"
|
|
50
|
+
elif missing:
|
|
51
|
+
error = f"grammar wheel is missing required assets: {', '.join(missing)}"
|
|
52
|
+
return {
|
|
53
|
+
"ok": not failures and not error,
|
|
54
|
+
"assets": str(root),
|
|
55
|
+
"pack_version": manifest.get("pack_version"),
|
|
56
|
+
"platform": manifest.get("platform"),
|
|
57
|
+
"languages": languages,
|
|
58
|
+
"required_grammars": required,
|
|
59
|
+
"missing_grammars": missing,
|
|
60
|
+
"failed_checksums": failures,
|
|
61
|
+
"error": error,
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def activate() -> dict[str, Any]:
|
|
66
|
+
global _ACTIVATION_STATUS
|
|
67
|
+
with _ACTIVATION_LOCK:
|
|
68
|
+
if _ACTIVATION_STATUS is not None:
|
|
69
|
+
return dict(_ACTIVATION_STATUS)
|
|
70
|
+
status = verify()
|
|
71
|
+
if not status["ok"]:
|
|
72
|
+
_ACTIVATION_STATUS = {**status, "activated": False}
|
|
73
|
+
return dict(_ACTIVATION_STATUS)
|
|
74
|
+
import tree_sitter_language_pack as pack
|
|
75
|
+
|
|
76
|
+
pack.configure(pack.PackConfig(cache_dir=str(asset_root() / "cache")))
|
|
77
|
+
available = set(pack.available_languages())
|
|
78
|
+
missing = sorted(set(status["required_grammars"]) - available)
|
|
79
|
+
_ACTIVATION_STATUS = {
|
|
80
|
+
**status,
|
|
81
|
+
"ok": not missing,
|
|
82
|
+
"activated": not missing,
|
|
83
|
+
"missing_grammars": missing,
|
|
84
|
+
"error": (
|
|
85
|
+
f"pack could not activate required grammars: {', '.join(missing)}"
|
|
86
|
+
if missing
|
|
87
|
+
else ""
|
|
88
|
+
),
|
|
89
|
+
}
|
|
90
|
+
return dict(_ACTIVATION_STATUS)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
__all__ = ["activate", "asset_root", "verify"]
|
package/pyproject.toml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "devcouncil"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.4.0"
|
|
4
4
|
description = "Gated orchestrator for AI-assisted software development"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -12,19 +12,28 @@ dependencies = [
|
|
|
12
12
|
"sqlmodel>=0.0.19",
|
|
13
13
|
"httpx>=0.27.0",
|
|
14
14
|
"gitpython>=3.1.49",
|
|
15
|
-
"mcp>=1.27.
|
|
15
|
+
"mcp>=1.27.2",
|
|
16
16
|
"gepa>=0.1.1",
|
|
17
17
|
"watchdog>=4.0.0",
|
|
18
|
+
"tree-sitter>=0.23.0",
|
|
19
|
+
"tree-sitter-language-pack>=1.12.5",
|
|
20
|
+
"networkx>=3.3",
|
|
18
21
|
]
|
|
19
22
|
|
|
23
|
+
[project.optional-dependencies]
|
|
24
|
+
# Platform wheel containing the complete, checksum-manifested Tree-sitter cache.
|
|
25
|
+
# The core package remains useful with locally installed grammars; release builds
|
|
26
|
+
# install this extra to guarantee the full code-intelligence language matrix.
|
|
27
|
+
codeintel-full = ["devcouncil-codeintel-grammars==0.4.0"]
|
|
28
|
+
|
|
20
29
|
[project.urls]
|
|
21
30
|
Homepage = "https://github.com/bharathvbcr/DevCouncil"
|
|
22
31
|
Repository = "https://github.com/bharathvbcr/DevCouncil.git"
|
|
23
32
|
Issues = "https://github.com/bharathvbcr/DevCouncil/issues"
|
|
24
33
|
|
|
25
34
|
[project.scripts]
|
|
26
|
-
dev = "devcouncil.cli.main:
|
|
27
|
-
devcouncil = "devcouncil.cli.main:
|
|
35
|
+
dev = "devcouncil.cli.main:run_cli"
|
|
36
|
+
devcouncil = "devcouncil.cli.main:run_cli"
|
|
28
37
|
|
|
29
38
|
[dependency-groups]
|
|
30
39
|
dev = [
|
|
@@ -35,6 +44,19 @@ dev = [
|
|
|
35
44
|
# Used only to exercise the diff↔coverage path end-to-end in tests. DevCouncil
|
|
36
45
|
# never requires coverage at runtime — it uses whatever the target repo provides.
|
|
37
46
|
"coverage>=7.4",
|
|
47
|
+
# Required for semantic_layer unit tests (cache FAISS backend).
|
|
48
|
+
"faiss-cpu>=1.8.0",
|
|
49
|
+
"numpy>=1.26.0",
|
|
50
|
+
]
|
|
51
|
+
platform-test = [
|
|
52
|
+
# Required only by the real Debug Adapter Protocol integration matrix.
|
|
53
|
+
"debugpy>=1.8.0",
|
|
54
|
+
]
|
|
55
|
+
semantic = [
|
|
56
|
+
"sentence-transformers>=3.0.0",
|
|
57
|
+
"faiss-cpu>=1.8.0",
|
|
58
|
+
"numpy>=1.26.0",
|
|
59
|
+
"torch>=2.2.0",
|
|
38
60
|
]
|
|
39
61
|
|
|
40
62
|
[tool.uv]
|
|
@@ -49,18 +71,91 @@ constraint-dependencies = [
|
|
|
49
71
|
"python-multipart>=0.0.31",
|
|
50
72
|
"pydantic-settings>=2.14.2",
|
|
51
73
|
"idna>=3.15",
|
|
74
|
+
"setuptools>=83.0.0",
|
|
52
75
|
]
|
|
53
76
|
|
|
77
|
+
[tool.uv.workspace]
|
|
78
|
+
members = ["packages/codeintel-grammars"]
|
|
79
|
+
|
|
80
|
+
[tool.uv.sources]
|
|
81
|
+
devcouncil-codeintel-grammars = { workspace = true }
|
|
82
|
+
|
|
54
83
|
[tool.pytest.ini_options]
|
|
55
84
|
testpaths = ["tests"]
|
|
85
|
+
pythonpath = ["src"]
|
|
86
|
+
|
|
87
|
+
[tool.coverage.run]
|
|
88
|
+
source = ["src/devcouncil"]
|
|
89
|
+
branch = true
|
|
90
|
+
# Gate focuses on stable units; large CLI/orchestration glue is exercised by CLI tests.
|
|
91
|
+
omit = [
|
|
92
|
+
"*/cli/commands/graph_cmd.py",
|
|
93
|
+
"*/cli/commands/plan.py",
|
|
94
|
+
"*/cli/commands/map.py",
|
|
95
|
+
"*/cli/commands/doctor.py",
|
|
96
|
+
"*/cli/commands/hook.py",
|
|
97
|
+
"*/cli/commands/integrate.py",
|
|
98
|
+
"*/codeintel/sync/coordinator.py",
|
|
99
|
+
"*/codeintel/resolution/semantic.py",
|
|
100
|
+
"*/codeintel/debug/python_trace_runner.py",
|
|
101
|
+
"*/verification/verify_orchestration.py",
|
|
102
|
+
"*/verification/checks/liveness_ratchet.py",
|
|
103
|
+
"*/verification/checks/acceptance_corpus.py",
|
|
104
|
+
"*/verification/checks/corpus_stale.py",
|
|
105
|
+
"*/skills/registry.py",
|
|
106
|
+
]
|
|
107
|
+
|
|
108
|
+
[tool.coverage.report]
|
|
109
|
+
fail_under = 90
|
|
110
|
+
omit = [
|
|
111
|
+
"*/cli/commands/graph_cmd.py",
|
|
112
|
+
"*/cli/commands/plan.py",
|
|
113
|
+
"*/cli/commands/map.py",
|
|
114
|
+
"*/cli/commands/doctor.py",
|
|
115
|
+
"*/cli/commands/hook.py",
|
|
116
|
+
"*/cli/commands/integrate.py",
|
|
117
|
+
"*/codeintel/sync/coordinator.py",
|
|
118
|
+
"*/codeintel/resolution/semantic.py",
|
|
119
|
+
"*/codeintel/debug/python_trace_runner.py",
|
|
120
|
+
"*/verification/verify_orchestration.py",
|
|
121
|
+
"*/verification/checks/liveness_ratchet.py",
|
|
122
|
+
"*/verification/checks/acceptance_corpus.py",
|
|
123
|
+
"*/verification/checks/corpus_stale.py",
|
|
124
|
+
"*/skills/registry.py",
|
|
125
|
+
]
|
|
126
|
+
exclude_lines = [
|
|
127
|
+
"pragma: no cover",
|
|
128
|
+
"if TYPE_CHECKING:",
|
|
129
|
+
"raise NotImplementedError",
|
|
130
|
+
"if __name__ == .__main__.:",
|
|
131
|
+
]
|
|
132
|
+
|
|
133
|
+
[tool.ruff]
|
|
134
|
+
line-length = 120
|
|
135
|
+
target-version = "py312"
|
|
136
|
+
|
|
137
|
+
[tool.mypy]
|
|
138
|
+
python_version = "3.12"
|
|
139
|
+
warn_return_any = true
|
|
140
|
+
warn_unused_ignores = true
|
|
141
|
+
ignore_missing_imports = true
|
|
56
142
|
|
|
57
143
|
[build-system]
|
|
58
144
|
requires = ["hatchling"]
|
|
59
145
|
build-backend = "hatchling.build"
|
|
60
146
|
|
|
147
|
+
[tool.hatch.build.targets.wheel]
|
|
148
|
+
packages = ["src/devcouncil", "src/semantic_layer"]
|
|
149
|
+
|
|
61
150
|
[tool.hatch.build.targets.wheel.force-include]
|
|
62
151
|
"src/devcouncil/llm/model_defaults.yaml" = "devcouncil/llm/model_defaults.yaml"
|
|
63
152
|
"src/devcouncil/telemetry/model_pricing.yaml" = "devcouncil/telemetry/model_pricing.yaml"
|
|
64
153
|
"src/devcouncil/assets/devcouncil-logo.svg" = "devcouncil/assets/devcouncil-logo.svg"
|
|
65
154
|
"src/devcouncil/assets/devcouncil_logo_premium.png" = "devcouncil/assets/devcouncil_logo_premium.png"
|
|
155
|
+
"src/devcouncil/assets/vendor/force-graph.min.js" = "devcouncil/assets/vendor/force-graph.min.js"
|
|
66
156
|
"src/devcouncil/integrations/opencode_devcouncil_plugin.mjs" = "devcouncil/integrations/opencode_devcouncil_plugin.mjs"
|
|
157
|
+
"src/devcouncil/campaign/prompts/coordinator.md" = "devcouncil/campaign/prompts/coordinator.md"
|
|
158
|
+
"src/devcouncil/campaign/prompts/director.md" = "devcouncil/campaign/prompts/director.md"
|
|
159
|
+
"src/devcouncil/campaign/prompts/protocol.md" = "devcouncil/campaign/prompts/protocol.md"
|
|
160
|
+
"src/devcouncil/campaign/prompts/reviewer.md" = "devcouncil/campaign/prompts/reviewer.md"
|
|
161
|
+
"src/devcouncil/campaign/prompts/worker.md" = "devcouncil/campaign/prompts/worker.md"
|