devagent-ai 0.3.2__tar.gz → 0.4.0__tar.gz

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 (72) hide show
  1. devagent_ai-0.4.0/PKG-INFO +391 -0
  2. devagent_ai-0.4.0/README.md +360 -0
  3. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/__init__.py +1 -1
  4. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/cli.py +80 -16
  5. devagent_ai-0.4.0/devagent/config.py +210 -0
  6. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/evaluation.py +31 -8
  7. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/models.py +30 -2
  8. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/orchestrator.py +443 -19
  9. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/providers.py +16 -2
  10. devagent_ai-0.4.0/devagent/qualification.py +175 -0
  11. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/report.py +16 -7
  12. devagent_ai-0.4.0/devagent/routing.py +75 -0
  13. devagent_ai-0.4.0/devagent/tasking.py +261 -0
  14. devagent_ai-0.4.0/devagent/technical_review.py +428 -0
  15. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/workspace.py +15 -0
  16. devagent_ai-0.4.0/devagent_ai.egg-info/PKG-INFO +391 -0
  17. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent_ai.egg-info/SOURCES.txt +10 -0
  18. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/pyproject.toml +2 -2
  19. devagent_ai-0.4.0/tests/test_acceptance_contract.py +449 -0
  20. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_developer_review_report.py +2 -2
  21. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_evaluation_harness.py +23 -2
  22. devagent_ai-0.4.0/tests/test_functional_qualification.py +149 -0
  23. devagent_ai-0.4.0/tests/test_model_routing.py +141 -0
  24. devagent_ai-0.4.0/tests/test_multilang_technical_review.py +143 -0
  25. devagent_ai-0.4.0/tests/test_multistack_devagent_e2e.py +298 -0
  26. devagent_ai-0.4.0/tests/test_multistack_qualification.py +163 -0
  27. devagent_ai-0.4.0/tests/test_production_v040.py +86 -0
  28. devagent_ai-0.4.0/tests/test_workspace_environment.py +82 -0
  29. devagent_ai-0.3.2/PKG-INFO +0 -548
  30. devagent_ai-0.3.2/README.md +0 -517
  31. devagent_ai-0.3.2/devagent/config.py +0 -72
  32. devagent_ai-0.3.2/devagent/tasking.py +0 -83
  33. devagent_ai-0.3.2/devagent/technical_review.py +0 -230
  34. devagent_ai-0.3.2/devagent_ai.egg-info/PKG-INFO +0 -548
  35. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/LICENSE +0 -0
  36. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/NOTICE +0 -0
  37. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/__init__.py +0 -0
  38. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/llm.py +0 -0
  39. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/loop.py +0 -0
  40. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/memory.py +0 -0
  41. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/prompts.py +0 -0
  42. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/agent/tools.py +0 -0
  43. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/__main__.py +0 -0
  44. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/artifacts.py +0 -0
  45. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/discovery.py +0 -0
  46. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/memory.py +0 -0
  47. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/retrieval.py +0 -0
  48. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/safety.py +0 -0
  49. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/source_control.py +0 -0
  50. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/state_machine.py +0 -0
  51. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent/worktree.py +0 -0
  52. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent_ai.egg-info/dependency_links.txt +0 -0
  53. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent_ai.egg-info/entry_points.txt +0 -0
  54. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent_ai.egg-info/requires.txt +0 -0
  55. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/devagent_ai.egg-info/top_level.txt +0 -0
  56. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/setup.cfg +0 -0
  57. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_benchmark_catalog.py +0 -0
  58. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_capability_discovery.py +0 -0
  59. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_cli.py +0 -0
  60. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_discovery_memory.py +0 -0
  61. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_e2e_fake_provider.py +0 -0
  62. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_evaluation_matrix.py +0 -0
  63. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_evaluation_regression_evidence.py +0 -0
  64. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_packaging_metadata.py +0 -0
  65. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_preservation_contradiction.py +0 -0
  66. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_production_hardening.py +0 -0
  67. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_retrieval.py +0 -0
  68. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_safety_workspace.py +0 -0
  69. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_source_control_publish.py +0 -0
  70. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_structured_provider_contract.py +0 -0
  71. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_tasking_state.py +0 -0
  72. {devagent_ai-0.3.2 → devagent_ai-0.4.0}/tests/test_worktree.py +0 -0
@@ -0,0 +1,391 @@
1
+ Metadata-Version: 2.4
2
+ Name: devagent-ai
3
+ Version: 0.4.0
4
+ Summary: Evidence-driven local autonomous software engineering agent
5
+ Author: Tom Ha
6
+ Maintainer: Tom Ha
7
+ License: MIT
8
+ Project-URL: Homepage, https://github.com/tomha85/devagent
9
+ Project-URL: Repository, https://github.com/tomha85/devagent
10
+ Project-URL: Issues, https://github.com/tomha85/devagent/issues
11
+ Project-URL: Changelog, https://github.com/tomha85/devagent/blob/main/CHANGELOG.md
12
+ Keywords: ai,agent,developer-tools,software-engineering,verification,local-first
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Operating System :: OS Independent
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Topic :: Software Development :: Quality Assurance
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ License-File: NOTICE
24
+ Requires-Dist: openai>=1.40.0
25
+ Requires-Dist: anthropic>=0.34.0
26
+ Requires-Dist: tomli>=2.0.0; python_version < "3.11"
27
+ Provides-Extra: dev
28
+ Requires-Dist: pytest>=8.0; extra == "dev"
29
+ Requires-Dist: pytest-cov>=5.0; extra == "dev"
30
+ Dynamic: license-file
31
+
32
+ # DevAgent
33
+
34
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
35
+ [![Python 3.10+](https://img.shields.io/badge/Python-3.10%2B-blue.svg)](https://www.python.org/)
36
+ [![Status: Beta](https://img.shields.io/badge/status-beta-blue.svg)](#project-status)
37
+ [![Production CI](https://github.com/tomha85/devagent/actions/workflows/ci.yml/badge.svg)](https://github.com/tomha85/devagent/actions/workflows/ci.yml)
38
+
39
+ **A local, evidence-driven software engineering agent that turns a requirement into a tested, independently reviewed patch, prints a developer-grade engineering report, and only publishes a branch when the result is `VERIFIED`.**
40
+
41
+ > **From requirement to evidence-backed verified branch.**
42
+
43
+ DevAgent runs against a developer's local repository. It discovers the application, gathers source evidence, compiles explicit acceptance criteria, plans a bounded change, creates backups, implements the minimum necessary patch, runs repository-supported verification, independently reviews the final diff, and decides `VERIFIED`, `PARTIALLY_VERIFIED`, or `BLOCKED` from evidence rather than model confidence.
44
+
45
+ For a normal verified run the deterministic harness prints the complete engineering report first, then commits reviewed paths and fast-forward pushes the developer's current non-protected branch. If the developer starts on `main`, `master`, or `trunk`, DevAgent creates a new safe branch instead. Runtime DevAgent never creates a pull request, merges, rebases, force-pushes, or deploys.
46
+
47
+ ## Why DevAgent?
48
+
49
+ Many coding agents optimize first for code generation. DevAgent is built around a different question:
50
+
51
+ **Can this change be supported by repository evidence and verified on the current revision?**
52
+
53
+ Core principles:
54
+
55
+ - **Evidence before modification** — insufficient source evidence blocks implementation.
56
+ - **Explicit acceptance contracts** — required criteria are `SATISFIED`, `UNPROVEN`, or `CONTRADICTED`; passing tests do not blanket-prove unrelated requirements.
57
+ - **False-`VERIFIED` resistance** — unsupported required criteria, missing final verification, known regressions, failed review, or source-state violations prevent a trustworthy success result.
58
+ - **Minimal-change discipline** — prefer the smallest correct diff over broad speculative refactors.
59
+ - **Backups before edits** — existing files are backed up before first modification.
60
+ - **Local-first isolation** — clean repositories use retained external detached worktrees by default; dirty developer work is protected.
61
+ - **Repository-native verification** — manifests, package scripts, test layouts, build files, and bounded CI evidence determine verification capabilities.
62
+ - **Independent review** — the final diff is reviewed separately from implementation.
63
+ - **Developer-grade reporting** — implementation logic, symbols, tests, acceptance evidence, verification, failures, gaps, and source-control status are recorded before publication.
64
+ - **Bring your own model** — OpenAI, Anthropic/Claude, xAI/Grok, Google Gemini, and OpenAI-compatible endpoints use one engineering workflow.
65
+ - **Deterministic branch publication** — only a `VERIFIED` isolated run can be committed and normally fast-forward pushed; `--no-publish` keeps the result local.
66
+
67
+ ## Install
68
+
69
+ From PyPI:
70
+
71
+ ```bash
72
+ python -m pip install devagent-ai
73
+ ```
74
+
75
+ For an isolated CLI installation:
76
+
77
+ ```bash
78
+ pipx install devagent-ai
79
+ ```
80
+
81
+ For development from source:
82
+
83
+ ```bash
84
+ git clone https://github.com/tomha85/devagent.git
85
+ cd devagent
86
+ python -m venv .venv
87
+ source .venv/bin/activate
88
+ python -m pip install -e ".[dev]"
89
+ pytest -q
90
+ ```
91
+
92
+ The PyPI distribution is `devagent-ai`; the Python package and CLI command are both `devagent`.
93
+
94
+ ## Configure a provider
95
+
96
+ OpenAI:
97
+
98
+ ```bash
99
+ devagent setup --provider openai --model YOUR_MODEL
100
+ export OPENAI_API_KEY=...
101
+ devagent doctor
102
+ ```
103
+
104
+ Anthropic / Claude:
105
+
106
+ ```bash
107
+ devagent setup --provider anthropic --model YOUR_MODEL
108
+ export ANTHROPIC_API_KEY=...
109
+ devagent doctor
110
+ ```
111
+
112
+ xAI / Grok:
113
+
114
+ ```bash
115
+ devagent setup --provider xai --model YOUR_MODEL
116
+ export XAI_API_KEY=...
117
+ devagent doctor
118
+ ```
119
+
120
+ Google Gemini:
121
+
122
+ ```bash
123
+ devagent setup --provider gemini --model gemini-3.7-flash
124
+ export GEMINI_API_KEY=...
125
+ devagent doctor
126
+ ```
127
+
128
+ Gemini uses Google's documented OpenAI-compatible Gemini endpoint so DevAgent can reuse the same bounded provider interface and deterministic local schema validation. `--provider google` is an alias for the same integration.
129
+
130
+ OpenAI-compatible local or private endpoint:
131
+
132
+ ```bash
133
+ devagent setup \
134
+ --provider compatible \
135
+ --model local-model \
136
+ --base-url http://127.0.0.1:11434/v1
137
+ ```
138
+
139
+ DevAgent stores the provider configuration and the **name** of the API-key environment variable. It does not store the API key itself.
140
+
141
+ ### Model routing by engineering role
142
+
143
+ DevAgent can use one default model or route different models to stable roles:
144
+
145
+ ```text
146
+ investigator → understand repository/problem
147
+ planner → produce bounded implementation/verification plan
148
+ implementer → implement, diagnose, repair/replan
149
+ reviewer → independently review final diff
150
+ ```
151
+
152
+ The deterministic harness remains responsible for safety, tool execution, verification validity, acceptance adjudication, final status, reporting, and source-control publication regardless of which model handles a role.
153
+
154
+ ## Run
155
+
156
+ From the application repository:
157
+
158
+ ```bash
159
+ devagent "Fix websocket reconnect bug and add regression tests"
160
+ ```
161
+
162
+ For a normal `VERIFIED` result:
163
+
164
+ ```text
165
+ DISCOVER / UNDERSTAND
166
+ ↓
167
+ COMPILE ACCEPTANCE CONTRACT
168
+ ↓
169
+ BASELINE / PLAN / GATHER CONTEXT
170
+ ↓
171
+ IMPLEMENT MINIMAL PATCH
172
+ ↓
173
+ TARGETED + BROAD VERIFICATION
174
+ ↓
175
+ DIAGNOSE / REPLAN if needed
176
+ ↓
177
+ INDEPENDENT REVIEW
178
+ ↓
179
+ FINAL CURRENT-REVISION VERIFICATION
180
+ ↓
181
+ FULL ENGINEERING REPORT
182
+ ↓
183
+ VERIFIED ONLY: COMMIT + FAST-FORWARD PUSH BRANCH
184
+ ↓
185
+ STOP — NO PR, NO MERGE
186
+ ```
187
+
188
+ Repeated prompts on a normal local development branch continue that same branch when local/remote history is safely compatible. A protected starting branch (`main`, `master`, `trunk`) causes a new branch such as:
189
+
190
+ ```text
191
+ devagent/20260825T020000Z-ab12cd
192
+ ```
193
+
194
+ Explicitly start a new branch:
195
+
196
+ ```bash
197
+ devagent \
198
+ --publish-branch feature/devagent-csv-export \
199
+ "Add CSV export to reports"
200
+ ```
201
+
202
+ Run without commit/push:
203
+
204
+ ```bash
205
+ devagent --no-publish "Add CSV export to reports"
206
+ ```
207
+
208
+ Long requirements can be read from any bounded UTF-8 text file path; the filename extension is unrestricted:
209
+
210
+ ```bash
211
+ devagent --input requirements/customer-feature.md
212
+ devagent --input ./task
213
+ devagent --input ../specs/release.requirement
214
+ ```
215
+
216
+ Binary data, invalid UTF-8, secret-like paths, and files above the input-size bound are refused.
217
+
218
+ Useful commands:
219
+
220
+ ```bash
221
+ devagent --help
222
+ devagent --version
223
+ devagent setup --help
224
+ devagent doctor
225
+ devagent models
226
+ devagent status
227
+ ```
228
+
229
+ ## Outcome contract
230
+
231
+ ### `VERIFIED`
232
+
233
+ Used only when required acceptance criteria are satisfied by admissible evidence, applicable final verification passes on the current revision, no known new regression remains, scope is acceptable, and independent review approves the final diff.
234
+
235
+ Only `VERIFIED` is eligible for automatic commit/push.
236
+
237
+ ### `PARTIALLY_VERIFIED`
238
+
239
+ Used when meaningful implementation evidence exists but complete proof cannot be obtained, for example because of unavailable hardware, VPNs, credentials, external services, or environment limitations.
240
+
241
+ It is never auto-published.
242
+
243
+ ### `BLOCKED`
244
+
245
+ Used when DevAgent cannot safely understand, implement, or verify the request. It is never auto-published.
246
+
247
+ A truthful conservative result is preferable to a false `VERIFIED`.
248
+
249
+ ## Safety boundary
250
+
251
+ DevAgent uses defense-in-depth controls around repository modification, command execution, and publishing:
252
+
253
+ - external isolated worktrees for clean repositories by default;
254
+ - dirty tracked and real untracked developer files are protected;
255
+ - backups before first file modification;
256
+ - workspace confinement and symlink-escape checks;
257
+ - secret-like path exclusions;
258
+ - engineering commands executed as argv without a general shell;
259
+ - credential environment scrubbing for verification where appropriate;
260
+ - model-facing command policy blocks Git write operations;
261
+ - publication is a separate deterministic post-report step;
262
+ - only reviewed changed paths are staged;
263
+ - remote branch state is captured and rechecked to block publication races;
264
+ - protected targets are refused and force push is never used;
265
+ - no runtime PR, merge, rebase, force-push, or deployment automation.
266
+
267
+ DevAgent is **not an operating-system sandbox**. Review the report and pushed branch before integrating customer or production code.
268
+
269
+ ## Repository intelligence and verification
270
+
271
+ Discovery understands common evidence from:
272
+
273
+ - Python: `pyproject.toml`, requirements, pytest/unittest conventions;
274
+ - JavaScript/TypeScript: `package.json`, scripts, TypeScript configuration, React/Vite/Next-style repositories;
275
+ - Go: `go.mod`;
276
+ - Rust: `Cargo.toml`;
277
+ - Java: Maven/Gradle;
278
+ - C/C++: CMake/Make/Meson;
279
+ - .NET: solution/project files;
280
+ - CI: GitHub Actions, Jenkins, GitLab CI, Azure Pipelines;
281
+ - multi-component repositories and repository documentation.
282
+
283
+ Verification can include baseline tests, targeted tests, component/broad checks, integration/e2e commands, builds, lint/type checks, and `git diff --check`. Every verification result records phase and revision so an edit invalidates success from an older tree.
284
+
285
+ ## Production qualification
286
+
287
+ DevAgent 0.4.0 adds **production qualification v3**. The release catalog contains 52 required cases and preserves the primary invariant:
288
+
289
+ ```text
290
+ false_verified == 0
291
+ ```
292
+
293
+ It covers end-to-end engineering behavior, acceptance truthfulness, task scope, provider contracts/parity, model routing, worktree and Git publication safety, CLI input, review/repair loops, report/evaluation integrity, release integrity, and actual repository-native toolchain execution for:
294
+
295
+ ```text
296
+ Python / pytest
297
+ Node + TypeScript repository discovery
298
+ Go
299
+ Rust / Cargo
300
+ C++ / Make
301
+ ```
302
+
303
+ Run the release qualification locally on a machine with those toolchains:
304
+
305
+ ```bash
306
+ python -m devagent.qualification \
307
+ --catalog evaluation/benchmark_v3.json \
308
+ --report .devagent/production-qualification-v3.json
309
+ ```
310
+
311
+ Production CI runs Python 3.10/3.11/3.12, a clean wheel install, and this production qualification gate. The qualification JSON is retained as CI evidence.
312
+
313
+ **100% qualified means 100% of this explicit catalog passed.** It does not mean mathematical correctness for every unseen repository, environment, model response, language, or engineering task.
314
+
315
+ See [docs/production-readiness.md](docs/production-readiness.md) for the evidence behind the 0.4.0 production-readiness assessment and its explicit limitations.
316
+
317
+ ## Provider architecture
318
+
319
+ Currently supported:
320
+
321
+ | Provider | Configuration |
322
+ | --- | --- |
323
+ | OpenAI | `--provider openai` |
324
+ | Anthropic / Claude | `--provider anthropic` or `--provider claude` |
325
+ | xAI / Grok | `--provider xai` or `--provider grok` |
326
+ | Google Gemini | `--provider gemini` or `--provider google` |
327
+ | Local / OpenAI-compatible | `--provider compatible --base-url ...` |
328
+
329
+ Provider choice affects reasoning quality, cost, latency, and privacy characteristics. It does not change DevAgent's deterministic acceptance, safety, verification, reporting, and publication rules.
330
+
331
+ ## Engineering report
332
+
333
+ The report is emitted **before** source-control publication and includes:
334
+
335
+ - implementation logic summary first;
336
+ - requirement, task type, and risk;
337
+ - root cause or design gap;
338
+ - implementation decisions;
339
+ - deterministically extractable changed symbols and test cases;
340
+ - acceptance criteria with status, evidence, and reasons;
341
+ - verification matrix with command, phase, revision, exit code, duration, and test counts;
342
+ - failed-check output and failure classification;
343
+ - independent-review result;
344
+ - completeness and known gaps;
345
+ - recommendations;
346
+ - source-control plan/status and developer review checklist.
347
+
348
+ After a successful verified publication, a separate receipt records remote, branch, exact commit SHA, committed/pushed status, and confirms no PR or merge was performed.
349
+
350
+ ## Local run data
351
+
352
+ Run artifacts are stored under the target repository's `.devagent/` state, including metadata, per-run backups, observations, verification records, `report.json`, retained worktrees, and evidence-backed repository/strategy memory.
353
+
354
+ Repository facts carry source fingerprints so stale evidence can be invalidated when source files change.
355
+
356
+ ## Development
357
+
358
+ ```bash
359
+ python -m compileall -q devagent
360
+ pytest -q
361
+ git diff --check
362
+ python -m devagent.qualification
363
+ ```
364
+
365
+ Automated provider tests normally use deterministic or mocked clients and do not consume cloud-model credits. Source-control tests use disposable local Git repositories. Production qualification deliberately executes its real local toolchain fixtures.
366
+
367
+ ## Project status
368
+
369
+ DevAgent 0.4 is **beta software** with a production-readiness target of approximately **9/10 for the documented local engineering workflow**. That assessment is based on explicit qualification evidence, not on a claim of universal correctness or parity with every capability of a hosted coding platform.
370
+
371
+ Remaining gaps include browser/UI runtime qualification, a broader Java/.NET/database-migration matrix, very large monorepo benchmarks, parallel multi-agent orchestration, operating-system sandboxing, and continuous paid real-provider testing across every model/provider combination.
372
+
373
+ The project intentionally prioritizes trustworthy outcomes over feature count.
374
+
375
+ ## Contributing
376
+
377
+ Contributions are welcome. Read [CONTRIBUTING.md](CONTRIBUTING.md) before opening a pull request. Changes to safety, verification, reporting, acceptance semantics, providers, or bounded publication behavior should include regression evidence and must not give model-generated actions unrestricted Git publishing authority.
378
+
379
+ ## Security
380
+
381
+ Please do not publish sensitive vulnerability details in a public issue. See [SECURITY.md](SECURITY.md) for the reporting process and security scope.
382
+
383
+ ## License and attribution
384
+
385
+ DevAgent is open source under the [MIT License](LICENSE).
386
+
387
+ ```text
388
+ Copyright (c) 2026 Tom Ha
389
+ ```
390
+
391
+ DevAgent was created by **Tom Ha**. Original repository: **https://github.com/tomha85/devagent**. See [NOTICE](NOTICE) and [COPYRIGHT](COPYRIGHT) for project attribution.