devcouncil 0.1.1 → 0.2.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 +190 -6
- package/package.json +9 -2
- package/pyproject.toml +34 -2
- package/src/devcouncil/app/config.py +167 -5
- package/src/devcouncil/artifacts/graph.py +23 -3
- package/src/devcouncil/assets/__init__.py +1 -0
- package/src/devcouncil/assets/devcouncil-logo.svg +60 -0
- package/src/devcouncil/assets/devcouncil_logo_premium.png +0 -0
- package/src/devcouncil/cli/commands/agents.py +292 -0
- package/src/devcouncil/cli/commands/artifacts.py +6 -3
- package/src/devcouncil/cli/commands/check.py +209 -0
- package/src/devcouncil/cli/commands/config.py +43 -4
- package/src/devcouncil/cli/commands/cost.py +57 -0
- package/src/devcouncil/cli/commands/dashboard.py +6 -1
- package/src/devcouncil/cli/commands/doctor.py +221 -21
- package/src/devcouncil/cli/commands/evidence.py +48 -0
- package/src/devcouncil/cli/commands/go.py +452 -33
- package/src/devcouncil/cli/commands/handoff.py +69 -0
- package/src/devcouncil/cli/commands/hook.py +124 -15
- package/src/devcouncil/cli/commands/init.py +154 -18
- package/src/devcouncil/cli/commands/integrate.py +894 -105
- package/src/devcouncil/cli/commands/map.py +80 -10
- package/src/devcouncil/cli/commands/plan.py +212 -51
- package/src/devcouncil/cli/commands/prompt.py +18 -7
- package/src/devcouncil/cli/commands/repair.py +40 -23
- package/src/devcouncil/cli/commands/report.py +8 -0
- package/src/devcouncil/cli/commands/reset_demo_state.py +4 -2
- package/src/devcouncil/cli/commands/rollback.py +27 -28
- package/src/devcouncil/cli/commands/run.py +69 -49
- package/src/devcouncil/cli/commands/runs.py +223 -0
- package/src/devcouncil/cli/commands/scaffold.py +32 -0
- package/src/devcouncil/cli/commands/semantic.py +47 -0
- package/src/devcouncil/cli/commands/setup.py +145 -6
- package/src/devcouncil/cli/commands/shell.py +73 -0
- package/src/devcouncil/cli/commands/skills.py +88 -0
- package/src/devcouncil/cli/commands/status.py +25 -1
- package/src/devcouncil/cli/commands/trace.py +47 -3
- package/src/devcouncil/cli/commands/verify.py +138 -3
- package/src/devcouncil/cli/commands/watch.py +9 -9
- package/src/devcouncil/cli/commands/watch_fs.py +40 -0
- package/src/devcouncil/cli/main.py +56 -7
- package/src/devcouncil/domain/evidence.py +22 -2
- package/src/devcouncil/domain/gap.py +27 -1
- package/src/devcouncil/domain/task.py +31 -2
- package/src/devcouncil/execution/checkpoints.py +246 -0
- package/src/devcouncil/execution/context_builder.py +1 -1
- package/src/devcouncil/execution/fs_watcher.py +180 -0
- package/src/devcouncil/execution/handoff.py +102 -0
- package/src/devcouncil/execution/hook_policy.py +162 -74
- package/src/devcouncil/execution/patch.py +59 -10
- package/src/devcouncil/execution/permissions.py +17 -24
- package/src/devcouncil/execution/policy_engine.py +343 -0
- package/src/devcouncil/execution/prompt_builder.py +633 -21
- package/src/devcouncil/execution/shell_session.py +225 -0
- package/src/devcouncil/execution/task_runner.py +6 -2
- package/src/devcouncil/executors/agent_registry.py +575 -0
- package/src/devcouncil/executors/coding_cli.py +663 -39
- package/src/devcouncil/executors/native/agent.py +121 -20
- package/src/devcouncil/gating/checks/clean_git.py +3 -1
- package/src/devcouncil/gating/checks/secret_scan_check.py +40 -21
- package/src/devcouncil/gating/policy.py +158 -10
- package/src/devcouncil/hardware.py +184 -0
- package/src/devcouncil/indexing/ast_matcher.py +1 -1
- package/src/devcouncil/indexing/lsp.py +45 -4
- package/src/devcouncil/indexing/repo_mapper.py +1256 -9
- package/src/devcouncil/indexing/semantic_index.py +205 -0
- package/src/devcouncil/integrations/actions.py +146 -0
- package/src/devcouncil/integrations/check.py +423 -0
- package/src/devcouncil/integrations/github_intent.py +142 -0
- package/src/devcouncil/integrations/gitnexus.py +35 -0
- package/src/devcouncil/integrations/mcp/server.py +1552 -29
- package/src/devcouncil/integrations/opencode_devcouncil_plugin.mjs +24 -0
- package/src/devcouncil/live/cards.py +161 -19
- package/src/devcouncil/live/signals.py +2 -2
- package/src/devcouncil/live/transcripts.py +9 -6
- package/src/devcouncil/llm/cache.py +10 -6
- package/src/devcouncil/llm/model_defaults.yaml +44 -0
- package/src/devcouncil/llm/provider.py +515 -34
- package/src/devcouncil/llm/router.py +231 -46
- package/src/devcouncil/optimization/__init__.py +1 -0
- package/src/devcouncil/optimization/gepa_agent.py +318 -0
- package/src/devcouncil/planning/correction_manifest.py +303 -0
- package/src/devcouncil/planning/critique_service.py +7 -2
- package/src/devcouncil/planning/plan_service.py +17 -3
- package/src/devcouncil/planning/prompt_enhancer_service.py +82 -1
- package/src/devcouncil/planning/spec_service.py +27 -1
- package/src/devcouncil/repo/ci_scaffold.py +157 -0
- package/src/devcouncil/repo/gitignore.py +123 -0
- package/src/devcouncil/repo/sca.py +374 -0
- package/src/devcouncil/reporting/json_report.py +11 -1
- package/src/devcouncil/reporting/markdown_report.py +15 -0
- package/src/devcouncil/skills/__init__.py +19 -0
- package/src/devcouncil/skills/library/README.md +46 -0
- package/src/devcouncil/skills/library/ai-training.md +50 -0
- package/src/devcouncil/skills/library/android.md +50 -0
- package/src/devcouncil/skills/library/backend.md +52 -0
- package/src/devcouncil/skills/library/core-engineering.md +95 -0
- package/src/devcouncil/skills/library/data-engineering.md +47 -0
- package/src/devcouncil/skills/library/desktop.md +46 -0
- package/src/devcouncil/skills/library/devops.md +48 -0
- package/src/devcouncil/skills/library/game-dev.md +46 -0
- package/src/devcouncil/skills/library/ios.md +48 -0
- package/src/devcouncil/skills/library/mobile-cross-platform.md +46 -0
- package/src/devcouncil/skills/library/security.md +48 -0
- package/src/devcouncil/skills/library/systems.md +48 -0
- package/src/devcouncil/skills/library/web.md +47 -0
- package/src/devcouncil/skills/library/windows.md +47 -0
- package/src/devcouncil/skills/registry.py +330 -0
- package/src/devcouncil/storage/db.py +83 -2
- package/src/devcouncil/storage/models.py +121 -0
- package/src/devcouncil/storage/native.py +557 -0
- package/src/devcouncil/storage/repositories.py +137 -75
- package/src/devcouncil/telemetry/cost.py +123 -17
- package/src/devcouncil/telemetry/model_pricing.yaml +48 -0
- package/src/devcouncil/telemetry/pricing.py +28 -0
- package/src/devcouncil/telemetry/traces.py +62 -7
- package/src/devcouncil/telemetry/tracker.py +12 -9
- package/src/devcouncil/ui/dashboard.py +324 -23
- package/src/devcouncil/utils/redaction.py +9 -3
- package/src/devcouncil/utils/subprocess_env.py +69 -0
- package/src/devcouncil/verification/acceptance_compiler.py +125 -0
- package/src/devcouncil/verification/ad_hoc_check.py +129 -0
- package/src/devcouncil/verification/diff_coverage.py +353 -0
- package/src/devcouncil/verification/next_actions.py +189 -0
- package/src/devcouncil/verification/sandbox.py +178 -0
- package/src/devcouncil/verification/test_resolver.py +91 -0
- package/src/devcouncil/verification/verifier.py +1065 -47
- package/uv.lock +205 -64
- package/src/devcouncil/indexing/symbol_index.py +0 -0
|
@@ -16,7 +16,16 @@ class LspServerCandidate:
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class LspInspector:
|
|
19
|
-
"""
|
|
19
|
+
"""Language-server *detection* only — DevCouncil does not run an LSP client.
|
|
20
|
+
|
|
21
|
+
This inspector exists to answer one honest question: which language servers
|
|
22
|
+
for the repo's languages are installed on PATH? It does NOT spawn a server,
|
|
23
|
+
does NOT speak the LSP wire protocol, and does NOT send the ``initialize``
|
|
24
|
+
handshake. ``starter_initialize_payload`` builds the JSON-RPC ``initialize``
|
|
25
|
+
request a *future* client would send, but it is never transmitted — it is
|
|
26
|
+
surfaced purely as a reference/starter payload, clearly labelled as such, so
|
|
27
|
+
no consumer mistakes detection for a live LSP capability.
|
|
28
|
+
"""
|
|
20
29
|
|
|
21
30
|
_LANGUAGE_SERVERS: dict[str, list[list[str]]] = {
|
|
22
31
|
"python": [["pyright-langserver", "--stdio"], ["pylsp"]],
|
|
@@ -76,7 +85,14 @@ class LspInspector:
|
|
|
76
85
|
)
|
|
77
86
|
return candidates
|
|
78
87
|
|
|
79
|
-
def
|
|
88
|
+
def starter_initialize_payload(self, language: str) -> dict[str, Any]:
|
|
89
|
+
"""Build the JSON-RPC ``initialize`` request a future LSP client *would* send.
|
|
90
|
+
|
|
91
|
+
This payload is NEVER sent — DevCouncil has no LSP client. It is provided
|
|
92
|
+
only as a reference/starter for anyone wiring up real LSP support. See the
|
|
93
|
+
``initialize_requests`` block in :meth:`summary`, which carries the same
|
|
94
|
+
non-sent payloads under an explicit ``"_note"`` disclaimer.
|
|
95
|
+
"""
|
|
80
96
|
return {
|
|
81
97
|
"jsonrpc": "2.0",
|
|
82
98
|
"id": 1,
|
|
@@ -97,10 +113,32 @@ class LspInspector:
|
|
|
97
113
|
},
|
|
98
114
|
}
|
|
99
115
|
|
|
116
|
+
# Made explicit in every summary so no consumer reads this as a live LSP feature.
|
|
117
|
+
_DETECTION_ONLY_NOTE = (
|
|
118
|
+
"Detection only: DevCouncil checks which language servers are installed on "
|
|
119
|
+
"PATH; it does not run an LSP client or send any requests."
|
|
120
|
+
)
|
|
121
|
+
_STARTER_PAYLOAD_NOTE = (
|
|
122
|
+
"Starter payloads only — these initialize requests are NEVER sent. They are "
|
|
123
|
+
"a reference for wiring up a real LSP client later."
|
|
124
|
+
)
|
|
125
|
+
|
|
100
126
|
def summary(self, files: list[str] | None = None) -> dict[str, Any]:
|
|
101
127
|
candidates = self.server_candidates(files)
|
|
102
128
|
return {
|
|
129
|
+
"mode": "detection-only",
|
|
130
|
+
"note": self._DETECTION_ONLY_NOTE,
|
|
103
131
|
"languages": self.detect_languages(files),
|
|
132
|
+
"detected_servers": [
|
|
133
|
+
{
|
|
134
|
+
"language": candidate.language,
|
|
135
|
+
"command": candidate.command,
|
|
136
|
+
"available": candidate.available,
|
|
137
|
+
"reason": candidate.reason,
|
|
138
|
+
}
|
|
139
|
+
for candidate in candidates
|
|
140
|
+
],
|
|
141
|
+
# Back-compat alias for "detected_servers" (older consumers/tests).
|
|
104
142
|
"servers": [
|
|
105
143
|
{
|
|
106
144
|
"language": candidate.language,
|
|
@@ -111,8 +149,11 @@ class LspInspector:
|
|
|
111
149
|
for candidate in candidates
|
|
112
150
|
],
|
|
113
151
|
"initialize_requests": {
|
|
114
|
-
|
|
115
|
-
|
|
152
|
+
"_note": self._STARTER_PAYLOAD_NOTE,
|
|
153
|
+
**{
|
|
154
|
+
language: self.starter_initialize_payload(language)
|
|
155
|
+
for language in sorted({candidate.language for candidate in candidates})
|
|
156
|
+
},
|
|
116
157
|
},
|
|
117
158
|
}
|
|
118
159
|
|