devcouncil 0.2.0 → 0.2.1

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.
Files changed (205) hide show
  1. package/README.md +191 -253
  2. package/bin/devcouncil.js +130 -32
  3. package/package.json +6 -17
  4. package/pyproject.toml +0 -66
  5. package/src/devcouncil/__init__.py +0 -0
  6. package/src/devcouncil/__main__.py +0 -4
  7. package/src/devcouncil/app/__init__.py +0 -28
  8. package/src/devcouncil/app/config.py +0 -320
  9. package/src/devcouncil/app/errors.py +0 -23
  10. package/src/devcouncil/app/events.py +0 -44
  11. package/src/devcouncil/app/orchestrator.py +0 -92
  12. package/src/devcouncil/app/project_status.py +0 -29
  13. package/src/devcouncil/app/run_context.py +0 -39
  14. package/src/devcouncil/app/state_machine.py +0 -108
  15. package/src/devcouncil/artifacts/__init__.py +0 -1
  16. package/src/devcouncil/artifacts/coverage.py +0 -96
  17. package/src/devcouncil/artifacts/graph.py +0 -163
  18. package/src/devcouncil/artifacts/migrations.py +0 -20
  19. package/src/devcouncil/artifacts/schemas.py +0 -23
  20. package/src/devcouncil/artifacts/serializer.py +0 -21
  21. package/src/devcouncil/artifacts/validators.py +0 -27
  22. package/src/devcouncil/assets/__init__.py +0 -1
  23. package/src/devcouncil/assets/devcouncil-logo.svg +0 -60
  24. package/src/devcouncil/assets/devcouncil_logo_premium.png +0 -0
  25. package/src/devcouncil/cli/__init__.py +0 -0
  26. package/src/devcouncil/cli/commands/__init__.py +0 -0
  27. package/src/devcouncil/cli/commands/agents.py +0 -292
  28. package/src/devcouncil/cli/commands/artifacts.py +0 -54
  29. package/src/devcouncil/cli/commands/ast.py +0 -22
  30. package/src/devcouncil/cli/commands/baseline.py +0 -35
  31. package/src/devcouncil/cli/commands/check.py +0 -209
  32. package/src/devcouncil/cli/commands/config.py +0 -115
  33. package/src/devcouncil/cli/commands/cost.py +0 -57
  34. package/src/devcouncil/cli/commands/dashboard.py +0 -31
  35. package/src/devcouncil/cli/commands/doctor.py +0 -340
  36. package/src/devcouncil/cli/commands/evidence.py +0 -48
  37. package/src/devcouncil/cli/commands/go.py +0 -656
  38. package/src/devcouncil/cli/commands/handoff.py +0 -69
  39. package/src/devcouncil/cli/commands/hook.py +0 -237
  40. package/src/devcouncil/cli/commands/init.py +0 -289
  41. package/src/devcouncil/cli/commands/integrate.py +0 -1515
  42. package/src/devcouncil/cli/commands/lsp.py +0 -20
  43. package/src/devcouncil/cli/commands/map.py +0 -112
  44. package/src/devcouncil/cli/commands/mcp_server.py +0 -18
  45. package/src/devcouncil/cli/commands/plan.py +0 -488
  46. package/src/devcouncil/cli/commands/prompt.py +0 -61
  47. package/src/devcouncil/cli/commands/repair.py +0 -89
  48. package/src/devcouncil/cli/commands/report.py +0 -137
  49. package/src/devcouncil/cli/commands/reset_demo_state.py +0 -33
  50. package/src/devcouncil/cli/commands/rollback.py +0 -59
  51. package/src/devcouncil/cli/commands/run.py +0 -289
  52. package/src/devcouncil/cli/commands/runs.py +0 -223
  53. package/src/devcouncil/cli/commands/scaffold.py +0 -32
  54. package/src/devcouncil/cli/commands/semantic.py +0 -47
  55. package/src/devcouncil/cli/commands/setup.py +0 -362
  56. package/src/devcouncil/cli/commands/shell.py +0 -73
  57. package/src/devcouncil/cli/commands/show.py +0 -76
  58. package/src/devcouncil/cli/commands/skills.py +0 -88
  59. package/src/devcouncil/cli/commands/status.py +0 -141
  60. package/src/devcouncil/cli/commands/tasks.py +0 -55
  61. package/src/devcouncil/cli/commands/trace.py +0 -88
  62. package/src/devcouncil/cli/commands/verify.py +0 -328
  63. package/src/devcouncil/cli/commands/version.py +0 -20
  64. package/src/devcouncil/cli/commands/watch.py +0 -574
  65. package/src/devcouncil/cli/commands/watch_fs.py +0 -40
  66. package/src/devcouncil/cli/main.py +0 -137
  67. package/src/devcouncil/council/__init__.py +0 -0
  68. package/src/devcouncil/council/prompts/__init__.py +0 -0
  69. package/src/devcouncil/council/prompts/arbiter.md +0 -19
  70. package/src/devcouncil/council/prompts/critic_a.md +0 -10
  71. package/src/devcouncil/council/prompts/critic_b.md +0 -10
  72. package/src/devcouncil/council/prompts/implementation_reviewer.md +0 -16
  73. package/src/devcouncil/council/prompts/planner_a.md +0 -16
  74. package/src/devcouncil/council/prompts/planner_b.md +0 -16
  75. package/src/devcouncil/council/prompts/rebuttal.md +0 -10
  76. package/src/devcouncil/council/prompts/spec_writer.md +0 -12
  77. package/src/devcouncil/domain/__init__.py +0 -0
  78. package/src/devcouncil/domain/assumption.py +0 -17
  79. package/src/devcouncil/domain/critique.py +0 -32
  80. package/src/devcouncil/domain/evidence.py +0 -47
  81. package/src/devcouncil/domain/gap.py +0 -52
  82. package/src/devcouncil/domain/requirement.py +0 -22
  83. package/src/devcouncil/domain/task.py +0 -55
  84. package/src/devcouncil/execution/__init__.py +0 -1
  85. package/src/devcouncil/execution/checkpoints.py +0 -246
  86. package/src/devcouncil/execution/context_builder.py +0 -60
  87. package/src/devcouncil/execution/executor.py +0 -15
  88. package/src/devcouncil/execution/fs_watcher.py +0 -180
  89. package/src/devcouncil/execution/handoff.py +0 -102
  90. package/src/devcouncil/execution/hook_policy.py +0 -253
  91. package/src/devcouncil/execution/patch.py +0 -77
  92. package/src/devcouncil/execution/paths.py +0 -14
  93. package/src/devcouncil/execution/permissions.py +0 -85
  94. package/src/devcouncil/execution/policy_engine.py +0 -343
  95. package/src/devcouncil/execution/prompt_builder.py +0 -671
  96. package/src/devcouncil/execution/shell_session.py +0 -225
  97. package/src/devcouncil/execution/task_runner.py +0 -170
  98. package/src/devcouncil/executors/__init__.py +0 -1
  99. package/src/devcouncil/executors/agent_registry.py +0 -575
  100. package/src/devcouncil/executors/coding_cli.py +0 -736
  101. package/src/devcouncil/executors/mini_swe.py +0 -73
  102. package/src/devcouncil/executors/native/__init__.py +0 -0
  103. package/src/devcouncil/executors/native/agent.py +0 -208
  104. package/src/devcouncil/executors/openhands.py +0 -71
  105. package/src/devcouncil/gating/__init__.py +0 -1
  106. package/src/devcouncil/gating/checks/__init__.py +0 -0
  107. package/src/devcouncil/gating/checks/clean_git.py +0 -52
  108. package/src/devcouncil/gating/checks/planned_files_check.py +0 -32
  109. package/src/devcouncil/gating/checks/requirement_coverage.py +0 -26
  110. package/src/devcouncil/gating/checks/secret_scan_check.py +0 -53
  111. package/src/devcouncil/gating/policy.py +0 -338
  112. package/src/devcouncil/hardware.py +0 -184
  113. package/src/devcouncil/indexing/__init__.py +0 -1
  114. package/src/devcouncil/indexing/ast_matcher.py +0 -168
  115. package/src/devcouncil/indexing/graph_index.py +0 -48
  116. package/src/devcouncil/indexing/lsp.py +0 -161
  117. package/src/devcouncil/indexing/repo_mapper.py +0 -1455
  118. package/src/devcouncil/indexing/semantic_index.py +0 -205
  119. package/src/devcouncil/integrations/actions.py +0 -146
  120. package/src/devcouncil/integrations/check.py +0 -423
  121. package/src/devcouncil/integrations/code_review_graph.py +0 -163
  122. package/src/devcouncil/integrations/github.py +0 -39
  123. package/src/devcouncil/integrations/github_intent.py +0 -142
  124. package/src/devcouncil/integrations/gitnexus.py +0 -62
  125. package/src/devcouncil/integrations/graphify.py +0 -34
  126. package/src/devcouncil/integrations/mcp/__init__.py +0 -0
  127. package/src/devcouncil/integrations/mcp/server.py +0 -2122
  128. package/src/devcouncil/integrations/opencode_devcouncil_plugin.mjs +0 -24
  129. package/src/devcouncil/integrations/pr_comments.py +0 -62
  130. package/src/devcouncil/live/__init__.py +0 -2
  131. package/src/devcouncil/live/cards.py +0 -349
  132. package/src/devcouncil/live/models.py +0 -63
  133. package/src/devcouncil/live/repair_prompt.py +0 -83
  134. package/src/devcouncil/live/reviewer.py +0 -70
  135. package/src/devcouncil/live/signals.py +0 -135
  136. package/src/devcouncil/live/summary.py +0 -34
  137. package/src/devcouncil/live/tasks.py +0 -18
  138. package/src/devcouncil/live/transcripts.py +0 -141
  139. package/src/devcouncil/llm/__init__.py +0 -1
  140. package/src/devcouncil/llm/cache.py +0 -42
  141. package/src/devcouncil/llm/model_defaults.yaml +0 -44
  142. package/src/devcouncil/llm/provider.py +0 -627
  143. package/src/devcouncil/llm/router.py +0 -310
  144. package/src/devcouncil/optimization/__init__.py +0 -1
  145. package/src/devcouncil/optimization/gepa_agent.py +0 -318
  146. package/src/devcouncil/planning/__init__.py +0 -1
  147. package/src/devcouncil/planning/arbiter_service.py +0 -57
  148. package/src/devcouncil/planning/correction_manifest.py +0 -303
  149. package/src/devcouncil/planning/critique_service.py +0 -71
  150. package/src/devcouncil/planning/plan_service.py +0 -60
  151. package/src/devcouncil/planning/prompt_enhancer_service.py +0 -167
  152. package/src/devcouncil/planning/repair_service.py +0 -39
  153. package/src/devcouncil/planning/spec_service.py +0 -70
  154. package/src/devcouncil/repo/__init__.py +0 -0
  155. package/src/devcouncil/repo/ci_scaffold.py +0 -157
  156. package/src/devcouncil/repo/gitignore.py +0 -123
  157. package/src/devcouncil/repo/sca.py +0 -374
  158. package/src/devcouncil/reporting/__init__.py +0 -0
  159. package/src/devcouncil/reporting/github_check.py +0 -32
  160. package/src/devcouncil/reporting/json_report.py +0 -30
  161. package/src/devcouncil/reporting/markdown_report.py +0 -83
  162. package/src/devcouncil/reporting/report_builder.py +0 -14
  163. package/src/devcouncil/skills/__init__.py +0 -19
  164. package/src/devcouncil/skills/library/README.md +0 -46
  165. package/src/devcouncil/skills/library/ai-training.md +0 -50
  166. package/src/devcouncil/skills/library/android.md +0 -50
  167. package/src/devcouncil/skills/library/backend.md +0 -52
  168. package/src/devcouncil/skills/library/core-engineering.md +0 -95
  169. package/src/devcouncil/skills/library/data-engineering.md +0 -47
  170. package/src/devcouncil/skills/library/desktop.md +0 -46
  171. package/src/devcouncil/skills/library/devops.md +0 -48
  172. package/src/devcouncil/skills/library/game-dev.md +0 -46
  173. package/src/devcouncil/skills/library/ios.md +0 -48
  174. package/src/devcouncil/skills/library/mobile-cross-platform.md +0 -46
  175. package/src/devcouncil/skills/library/security.md +0 -48
  176. package/src/devcouncil/skills/library/systems.md +0 -48
  177. package/src/devcouncil/skills/library/web.md +0 -47
  178. package/src/devcouncil/skills/library/windows.md +0 -47
  179. package/src/devcouncil/skills/registry.py +0 -330
  180. package/src/devcouncil/storage/__init__.py +0 -0
  181. package/src/devcouncil/storage/db.py +0 -147
  182. package/src/devcouncil/storage/models.py +0 -204
  183. package/src/devcouncil/storage/native.py +0 -557
  184. package/src/devcouncil/storage/repositories.py +0 -485
  185. package/src/devcouncil/telemetry/__init__.py +0 -0
  186. package/src/devcouncil/telemetry/cost.py +0 -140
  187. package/src/devcouncil/telemetry/model_pricing.yaml +0 -48
  188. package/src/devcouncil/telemetry/pricing.py +0 -28
  189. package/src/devcouncil/telemetry/traces.py +0 -146
  190. package/src/devcouncil/telemetry/tracker.py +0 -52
  191. package/src/devcouncil/ui/__init__.py +0 -1
  192. package/src/devcouncil/ui/dashboard.py +0 -423
  193. package/src/devcouncil/utils/__init__.py +0 -1
  194. package/src/devcouncil/utils/redaction.py +0 -147
  195. package/src/devcouncil/utils/subprocess_env.py +0 -69
  196. package/src/devcouncil/verification/__init__.py +0 -1
  197. package/src/devcouncil/verification/acceptance_compiler.py +0 -125
  198. package/src/devcouncil/verification/ad_hoc_check.py +0 -129
  199. package/src/devcouncil/verification/diff_coverage.py +0 -353
  200. package/src/devcouncil/verification/implementation_reviewer.py +0 -55
  201. package/src/devcouncil/verification/next_actions.py +0 -189
  202. package/src/devcouncil/verification/sandbox.py +0 -178
  203. package/src/devcouncil/verification/test_resolver.py +0 -91
  204. package/src/devcouncil/verification/verifier.py +0 -1548
  205. package/uv.lock +0 -1226
@@ -1,204 +0,0 @@
1
- from sqlmodel import SQLModel, Field
2
- from sqlalchemy import Index, text
3
- from typing import Optional
4
-
5
-
6
- class SchemaVersionModel(SQLModel, table=True):
7
- __tablename__ = "schema_version"
8
- id: str = Field(primary_key=True, default="singleton")
9
- version: int
10
-
11
- class RequirementModel(SQLModel, table=True):
12
- __tablename__ = "requirements"
13
- id: str = Field(primary_key=True)
14
- title: str
15
- description: str
16
- priority: str
17
- source: str
18
- # Store complex lists as JSON strings for simplicity in SQLite
19
- acceptance_criteria_json: str = Field(default="[]")
20
-
21
- class AssumptionModel(SQLModel, table=True):
22
- __tablename__ = "assumptions"
23
- id: str = Field(primary_key=True)
24
- statement: str
25
- confidence: str
26
- impact: str
27
- reversible: bool
28
- requires_user_confirmation: bool
29
- linked_requirement_ids_json: str = Field(default="[]")
30
- status: str = "open"
31
-
32
- class TaskModel(SQLModel, table=True):
33
- __tablename__ = "tasks"
34
- id: str = Field(primary_key=True)
35
- title: str
36
- description: str
37
- requirement_ids_json: str = Field(default="[]")
38
- acceptance_criterion_ids_json: str = Field(default="[]")
39
- planned_files_json: str = Field(default="[]")
40
- expected_tests_json: str = Field(default="[]")
41
- allowed_commands_json: str = Field(default="[]")
42
- forbidden_changes_json: str = Field(default="[]")
43
- status: str = "planned"
44
-
45
- class EvidenceModel(SQLModel, table=True):
46
- __tablename__ = "evidence"
47
- id: Optional[int] = Field(default=None, primary_key=True)
48
- type: str # "command", "diff", "test"
49
- task_id: Optional[str] = None
50
- requirement_id: Optional[str] = None
51
- acceptance_criterion_id: Optional[str] = None
52
- data_json: str
53
-
54
- class GapModel(SQLModel, table=True):
55
- __tablename__ = "gaps"
56
- id: str = Field(primary_key=True)
57
- severity: str
58
- gap_type: str
59
- requirement_id: Optional[str] = None
60
- task_id: Optional[str] = None
61
- description: str
62
- evidence_json: str = Field(default="[]")
63
- recommended_fix: str
64
- blocking: bool
65
- # Machine-routable repair hints. Persisted (v4) so the typed next-actions
66
- # contract survives a reload — a reconnecting/crashed agent can read outstanding
67
- # gaps without the heuristic reconstruction the loader used to fall back to.
68
- file: Optional[str] = None
69
- line: Optional[int] = None
70
- suggested_command: Optional[str] = None
71
- acceptance_criterion_id: Optional[str] = None
72
-
73
- class CritiqueFindingModel(SQLModel, table=True):
74
- __tablename__ = "critique_findings"
75
- id: str = Field(primary_key=True)
76
- source_agent: str
77
- target_plan_id: str
78
- severity: str
79
- finding_type: str
80
- claim: str
81
- linked_requirement_id: Optional[str] = None
82
- suggested_requirement: Optional[str] = None
83
- suggested_task: Optional[str] = None
84
- falsifiable_check: str
85
- status: str = "open"
86
-
87
- class ProjectStateModel(SQLModel, table=True):
88
- __tablename__ = "project_state"
89
- id: str = Field(primary_key=True, default="singleton")
90
- current_phase: str
91
- history_json: str = Field(default="[]")
92
-
93
-
94
- class TaskLeaseModel(SQLModel, table=True):
95
- __tablename__ = "task_leases"
96
- # Enforce the single-writer guarantee at the DB level: at most one ACTIVE lease per
97
- # task. A partial unique index turns a concurrent double-checkout race into an
98
- # IntegrityError (surfaced as lease_conflict) instead of two live leases.
99
- __table_args__ = (
100
- Index(
101
- "ux_task_leases_active",
102
- "task_id",
103
- unique=True,
104
- sqlite_where=text("status = 'active'"),
105
- ),
106
- )
107
- id: str = Field(primary_key=True)
108
- task_id: str = Field(index=True)
109
- owner: str
110
- agent: Optional[str] = None
111
- client_id: Optional[str] = None
112
- run_id: Optional[str] = None
113
- branch: Optional[str] = None
114
- lease_token: str
115
- status: str = Field(default="active", index=True)
116
- created_at: str
117
- expires_at: Optional[str] = None
118
- released_at: Optional[str] = None
119
-
120
-
121
- class ShellSessionModel(SQLModel, table=True):
122
- __tablename__ = "shell_sessions"
123
- id: str = Field(primary_key=True)
124
- task_id: str = Field(index=True)
125
- lease_id: Optional[str] = None
126
- shell: str
127
- cwd: str
128
- status: str
129
- started_at: str
130
- ended_at: Optional[str] = None
131
-
132
-
133
- class ShellCommandEventModel(SQLModel, table=True):
134
- __tablename__ = "shell_command_events"
135
- id: Optional[int] = Field(default=None, primary_key=True)
136
- task_id: str = Field(index=True)
137
- session_id: Optional[str] = None
138
- command: str
139
- status: str
140
- exit_code: Optional[int] = None
141
- reason: str = ""
142
- stdout_path: str = ""
143
- stderr_path: str = ""
144
- created_at: str
145
-
146
-
147
- class FileChangeEventModel(SQLModel, table=True):
148
- __tablename__ = "file_change_events"
149
- id: Optional[int] = Field(default=None, primary_key=True)
150
- task_id: Optional[str] = Field(default=None, index=True)
151
- lease_id: Optional[str] = None
152
- session_id: Optional[str] = None
153
- path: str
154
- operation: str
155
- allowed: bool
156
- reason: str = ""
157
- created_at: str
158
-
159
-
160
- class SemanticDiffModel(SQLModel, table=True):
161
- __tablename__ = "semantic_diffs"
162
- id: Optional[int] = Field(default=None, primary_key=True)
163
- task_id: str = Field(index=True)
164
- before_snapshot_path: str
165
- after_snapshot_path: str
166
- classifications_json: str = "[]"
167
- summary: str = ""
168
- created_at: str
169
-
170
-
171
- class AgentHandoffModel(SQLModel, table=True):
172
- __tablename__ = "agent_handoffs"
173
- id: str = Field(primary_key=True)
174
- task_id: str = Field(index=True)
175
- from_agent: str
176
- to_agent: str
177
- run_id: str
178
- manifest_path: str
179
- status: str
180
- created_at: str
181
-
182
-
183
- class CorrectionManifestModel(SQLModel, table=True):
184
- __tablename__ = "correction_manifests"
185
- id: str = Field(primary_key=True)
186
- task_id: str = Field(index=True)
187
- run_id: Optional[str] = None
188
- manifest_path: str
189
- retry_budget: int = 3
190
- attempt: int = 0
191
- status: str
192
- created_at: str
193
-
194
-
195
- class VerificationRunModel(SQLModel, table=True):
196
- __tablename__ = "verification_runs"
197
- id: str = Field(primary_key=True)
198
- task_id: str = Field(index=True)
199
- sandbox: str
200
- environment_json: str = "{}"
201
- commands_json: str = "[]"
202
- status: str
203
- started_at: str
204
- finished_at: Optional[str] = None