opencode-arch 1.0.0__py3-none-any.whl

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 (65) hide show
  1. opencode_arch/__init__.py +3 -0
  2. opencode_arch/artifacts/__init__.py +48 -0
  3. opencode_arch/artifacts/context.py +451 -0
  4. opencode_arch/artifacts/diagrams.py +451 -0
  5. opencode_arch/artifacts/selector.py +331 -0
  6. opencode_arch/artifacts/templates.py +444 -0
  7. opencode_arch/cli/__init__.py +1 -0
  8. opencode_arch/cli/bench.py +25 -0
  9. opencode_arch/cli/calibrate.py +208 -0
  10. opencode_arch/cli/confidence.py +66 -0
  11. opencode_arch/cli/docs.py +333 -0
  12. opencode_arch/cli/docs_validator.py +295 -0
  13. opencode_arch/cli/export_data.py +133 -0
  14. opencode_arch/cli/extract.py +93 -0
  15. opencode_arch/cli/gap_analyzer.py +107 -0
  16. opencode_arch/cli/generate.py +68 -0
  17. opencode_arch/cli/launch.py +264 -0
  18. opencode_arch/cli/main.py +360 -0
  19. opencode_arch/cli/metrics.py +186 -0
  20. opencode_arch/cli/prompts.py +20 -0
  21. opencode_arch/cli/regen_loop.py +1028 -0
  22. opencode_arch/context/__init__.py +29 -0
  23. opencode_arch/context/formatter.py +492 -0
  24. opencode_arch/context/pipeline_bridge.py +201 -0
  25. opencode_arch/extract/__init__.py +8 -0
  26. opencode_arch/extract/constraint_detector.py +398 -0
  27. opencode_arch/extract/from_artifacts.py +837 -0
  28. opencode_arch/extract/from_code.py +646 -0
  29. opencode_arch/extract/route_detector.py +400 -0
  30. opencode_arch/extract/table_parser.py +177 -0
  31. opencode_arch/learning/__init__.py +19 -0
  32. opencode_arch/learning/adapter.py +157 -0
  33. opencode_arch/learning/assessor.py +170 -0
  34. opencode_arch/learning/classifier.py +144 -0
  35. opencode_arch/learning/lessons.py +139 -0
  36. opencode_arch/learning/maintainer.py +281 -0
  37. opencode_arch/learning/patterns.py +51 -0
  38. opencode_arch/mcp/__init__.py +1 -0
  39. opencode_arch/mcp/__main__.py +8 -0
  40. opencode_arch/mcp/server.py +183 -0
  41. opencode_arch/mcp/tools/__init__.py +1 -0
  42. opencode_arch/mcp/tools/check.py +159 -0
  43. opencode_arch/mcp/tools/extract.py +107 -0
  44. opencode_arch/mcp/tools/feedback.py +65 -0
  45. opencode_arch/mcp/tools/generate.py +104 -0
  46. opencode_arch/mcp/tools/group.py +62 -0
  47. opencode_arch/mcp/tools/ingest.py +101 -0
  48. opencode_arch/mcp/tools/require.py +77 -0
  49. opencode_arch/mcp/tools/scan.py +53 -0
  50. opencode_arch/mcp/tools/slice.py +235 -0
  51. opencode_arch/mcp/tools/validate.py +59 -0
  52. opencode_arch/prompts/__init__.py +1 -0
  53. opencode_arch/prompts/regen.py +36 -0
  54. opencode_arch/runner/__init__.py +5 -0
  55. opencode_arch/runner/base.py +21 -0
  56. opencode_arch/runner/opencode.py +66 -0
  57. opencode_arch/telemetry/__init__.py +6 -0
  58. opencode_arch/telemetry/collector.py +40 -0
  59. opencode_arch/telemetry/recorder.py +12 -0
  60. opencode_arch/telemetry/store.py +537 -0
  61. opencode_arch-1.0.0.dist-info/METADATA +247 -0
  62. opencode_arch-1.0.0.dist-info/RECORD +65 -0
  63. opencode_arch-1.0.0.dist-info/WHEEL +4 -0
  64. opencode_arch-1.0.0.dist-info/entry_points.txt +2 -0
  65. opencode_arch-1.0.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,247 @@
1
+ Metadata-Version: 2.4
2
+ Name: opencode-arch
3
+ Version: 1.0.0
4
+ Summary: Architecture-aware development tools — extract, validate, and maintain architectural models with token-efficient AI integration
5
+ Project-URL: Homepage, https://github.com/opn-arch/opencode-arch
6
+ Project-URL: Repository, https://github.com/opn-arch/opencode-arch
7
+ Project-URL: Documentation, https://github.com/opn-arch/opencode-arch#readme
8
+ Project-URL: Bug Tracker, https://github.com/opn-arch/opencode-arch/issues
9
+ Author: Anomaly Contributors
10
+ License-Expression: MIT
11
+ License-File: LICENSE
12
+ Keywords: architecture,ast,code-analysis,llm,mcp,opencode,token-compression
13
+ Classifier: Development Status :: 5 - Production/Stable
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: MIT License
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Programming Language :: Python :: 3.13
19
+ Classifier: Topic :: Software Development :: Documentation
20
+ Classifier: Topic :: Software Development :: Quality Assurance
21
+ Requires-Python: >=3.11
22
+ Requires-Dist: architecture-model-standard>=1.0.0
23
+ Requires-Dist: pyyaml>=6.0
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest-asyncio>=0.21; extra == 'dev'
26
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
27
+ Requires-Dist: pytest>=7.0; extra == 'dev'
28
+ Provides-Extra: mcp
29
+ Requires-Dist: mcp>=1.0; extra == 'mcp'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # opencode-arch
33
+
34
+ **Architecture extraction and validation for Python codebases.**
35
+
36
+ Mechanically verify that your architecture model matches your code. Compress entire repositories into ~430 tokens for AI agents. Produce training data for LLM fine-tuning.
37
+
38
+ ![PyPI](https://img.shields.io/pypi/v/opencode-arch)
39
+ ![Python](https://img.shields.io/pypi/pyversions/opencode-arch)
40
+ ![Tests](https://img.shields.io/badge/tests-278%20passing-brightgreen)
41
+ ![License](https://img.shields.io/badge/license-MIT-blue)
42
+
43
+ ---
44
+
45
+ ## Why
46
+
47
+ | Problem | Solution |
48
+ |---------|----------|
49
+ | Architecture docs drift from code | Mechanical representativeness scoring — know exactly when your model is wrong |
50
+ | AI agents burn tokens reading every file | Token arbitrage — full repo AST compressed to ~430 tokens of dense context |
51
+ | No structured architecture data for training | Produces (code, model, metrics) triples ready for fine-tuning |
52
+ | Manual component boundary decisions | Auto-groups modules by import affinity, name prefix, and subdirectory |
53
+
54
+ ## Features
55
+
56
+ - **Representativeness Scoring** — File coverage, relationship accuracy, boundary coherence, behavioral coverage. Four mechanical sub-scores that tell you if your model is accurate.
57
+ - **Token Arbitrage** — Compress a full repository's AST into a dense context string within any token budget. Agents reason about the whole codebase without reading every file.
58
+ - **Living Documentation** — Components, relationships, behaviors, and event chains extracted directly from code and stored as `.architecture-model.yaml`.
59
+ - **Training Data Export** — Structured triples in `.architecture/` for LLM fine-tuning pipelines.
60
+
61
+ ## Installation
62
+
63
+ ```bash
64
+ pip install opencode-arch
65
+ ```
66
+
67
+ With MCP server support (for AI agent integration):
68
+
69
+ ```bash
70
+ pip install opencode-arch[mcp]
71
+ ```
72
+
73
+ Requires Python 3.11+.
74
+
75
+ ## Quick Start
76
+
77
+ ```bash
78
+ # Launch interactive architecture-aware development
79
+ opencode-arch
80
+
81
+ # Or target a specific repo
82
+ opencode-arch /path/to/your/repo
83
+ ```
84
+
85
+ This scans the codebase (<1s), loads/bootstraps the architecture model, injects compressed context into your session, and launches OpenCode with full architecture awareness.
86
+
87
+ ```bash
88
+ # One-shot commands also available:
89
+ opencode-arch extract /path/to/repo # Extract architecture
90
+ opencode-arch export-data # Export training data
91
+ ```
92
+
93
+ After extraction, your repo contains:
94
+
95
+ ```
96
+ .architecture-model.yaml # Component model (YAML)
97
+ .architecture/
98
+ ├── manifest.json # Full AST scan (modules, functions, imports)
99
+ └── metrics.json # Representativeness scores + telemetry
100
+ ```
101
+
102
+ ## CLI
103
+
104
+ | Command | Purpose |
105
+ |---------|---------|
106
+ | `opencode-arch` | **Launch interactive session** (default — scans, injects context, opens OpenCode) |
107
+ | `opencode-arch extract <repo>` | Extract architecture model from a repository |
108
+ | `opencode-arch generate <repo>` | Generate code with test-guided verification |
109
+ | `opencode-arch bench <repo1> <repo2> ...` | Benchmark extraction across multiple repos |
110
+ | `opencode-arch metrics` | View extraction history and scores |
111
+ | `opencode-arch export-data` | Export training corpus (JSONL) |
112
+
113
+ Options for `extract`:
114
+
115
+ ```bash
116
+ opencode-arch extract /path/to/repo \
117
+ --budget=4000 \ # Token budget for context compression
118
+ --focus=all \ # Focus: "all", F-block ID, layer name
119
+ --target-score=80 # Minimum validation score to accept
120
+ ```
121
+
122
+ ## MCP Integration
123
+
124
+ Register as an MCP server for use with AI coding agents:
125
+
126
+ ```bash
127
+ opencode mcp add
128
+ ```
129
+
130
+ ### 9 Tools
131
+
132
+ | Tool | Purpose |
133
+ |------|---------|
134
+ | `architect_scan` | AST scanning — returns modules, functions, classes, imports |
135
+ | `architect_slice` | Token-compressed context (the core innovation) |
136
+ | `architect_validate` | Structural validation, returns score 0–100 |
137
+ | `architect_extract` | Store validated model + record telemetry |
138
+ | `architect_generate` | Run test suite against generated code |
139
+ | `architect_group` | Auto-group modules into logical components |
140
+ | `architect_check` | Verify representativeness (4 sub-scores) |
141
+ | `architect_require` | Capture functional requirements from conversation |
142
+ | `architect_feedback` | Record corrections, ratings, and training data |
143
+
144
+ ### Typical Agent Workflow
145
+
146
+ ```
147
+ scan → slice → (agent produces YAML) → validate → check → extract
148
+ ```
149
+
150
+ The agent calls `scan` to understand the repo, `slice` to get compressed context, produces an architecture model, then `validate` + `check` gate quality before `extract` persists it.
151
+
152
+ ## How It Works
153
+
154
+ ```
155
+ ┌─────────────────────────────────────────────────┐
156
+ │ AI Agent (frontier model) │
157
+ │ Receives ~430 tokens of compressed context │
158
+ │ Produces architecture YAML │
159
+ └────────────────────┬────────────────────────────┘
160
+ │ MCP Protocol
161
+ ┌────────────────────▼────────────────────────────┐
162
+ │ opencode-arch (FastMCP server) │
163
+ │ scan → slice → validate → check → extract │
164
+ └────────────────────┬────────────────────────────┘
165
+
166
+ ┌────────────────────▼────────────────────────────┐
167
+ │ architecture-model-standard (library) │
168
+ │ AST scanning │ YAML parsing │ Validation │
169
+ │ Context formatting │ Model slicing │
170
+ └─────────────────────────────────────────────────┘
171
+ ```
172
+
173
+ **Key design decision:** The agent IS the oracle. Tools never call external models — they provide compressed context to the frontier model already in the conversation.
174
+
175
+ ## Benchmarks
176
+
177
+ Achieved automatically with no human tuning:
178
+
179
+ | Repository | Modules | Components | Overall Score |
180
+ |------------|---------|------------|---------------|
181
+ | FastAPI | 25 | 9 | 98.1% |
182
+ | Pydantic | 69 | 40 | 98.0% |
183
+ | httpx | 23 | 10 | 96.0% |
184
+ | Requests | 19 | 9 | 94.2% |
185
+ | Flask | 6 | 6 | 100.0% |
186
+ | Celery | 161 | 23 | 84.0% |
187
+
188
+ Scores are composite representativeness: file coverage × relationship accuracy × boundary coherence × behavioral coverage.
189
+
190
+ ## Training Data
191
+
192
+ Each extraction produces a structured triple:
193
+
194
+ ```
195
+ (.architecture-model.yaml, manifest.json, metrics.json)
196
+ ```
197
+
198
+ This enables:
199
+ - Fine-tuning models on architecture extraction tasks
200
+ - Evaluating model quality with mechanical ground truth
201
+ - Building datasets across many repositories with `bench`
202
+
203
+ Export with:
204
+
205
+ ```bash
206
+ opencode-arch export-data --format=jsonl
207
+ ```
208
+
209
+ ## Architecture Model Schema
210
+
211
+ ```yaml
212
+ meta:
213
+ project: my-project
214
+ schema_version: '1.3'
215
+ entities:
216
+ components:
217
+ - id: COMP-1
218
+ name: APILayer
219
+ status: ACTIVE
220
+ capabilities:
221
+ - id: CAP-F1
222
+ name: RequestHandling
223
+ status: ACTIVE
224
+ relationships:
225
+ - from: COMP-1
226
+ to: CAP-F1
227
+ type: realizes
228
+ ```
229
+
230
+ Relationship types: `realizes`, `uses`, `constrains`, `contains`, `triggers`, `depends_on`, `implements`, `exposes`.
231
+
232
+ ## Development
233
+
234
+ ```bash
235
+ git clone https://github.com/anomalyco/opencode-arch
236
+ cd opencode-arch
237
+ pip install -e ".[dev]"
238
+ pytest tests/ -v # 278 tests, ~20s
239
+ ```
240
+
241
+ ## Contributing
242
+
243
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
244
+
245
+ ## License
246
+
247
+ MIT
@@ -0,0 +1,65 @@
1
+ opencode_arch/__init__.py,sha256=rwL_T7LJN36rru7FDlZ5KhoKoMLrVPKbxk5yi4apas8,110
2
+ opencode_arch/artifacts/__init__.py,sha256=137hqiGyGgGPbe58U-PI_ttvkeBc4ro01NT2zDL2tE0,1443
3
+ opencode_arch/artifacts/context.py,sha256=NI69ZrvW2NWaAx_UU8faXb-ePgpSdT5ET4jLltZqBsQ,16517
4
+ opencode_arch/artifacts/diagrams.py,sha256=rdrDfrPpFrHQcsJf3JjhduuP26UTLMnRi2PqdT3KZCY,15973
5
+ opencode_arch/artifacts/selector.py,sha256=n40_n8_XrATI1RIBtrDYwEyWBqbdZ7xdcP76tVvDfWo,10246
6
+ opencode_arch/artifacts/templates.py,sha256=wEFuB3LhtLS4Jb6E3ZmogArzQ97sNeaXIzCP_LyyQLo,16462
7
+ opencode_arch/cli/__init__.py,sha256=CX2aEL7PXFBgMlUZ_7_3ij6C9PqhUxHT9-U0D4IGww8,29
8
+ opencode_arch/cli/bench.py,sha256=DUJ3-Ahopeppd6AsNE--neQFK64gbXwhKTh9KITbTHg,714
9
+ opencode_arch/cli/calibrate.py,sha256=-mGFKduDmUptmsBcx115vkfjKk96hpMDK9ctAZzHI_c,7848
10
+ opencode_arch/cli/confidence.py,sha256=wtPypVPtA1At184VxmJNMPj7qMzKGxLPL6G6iVGAtZI,2482
11
+ opencode_arch/cli/docs.py,sha256=gfUEpBY2JSaZBzc0Ef78oLpUb2p7d3R8FaThoH46qo4,10822
12
+ opencode_arch/cli/docs_validator.py,sha256=A_jrAdcEDUu2DUCfUkYp6Mwb-Lt4RpDmqULPrJQk0k0,10157
13
+ opencode_arch/cli/export_data.py,sha256=sVV50K0pKMzGFW8o4z_f2TnIpRncyPekXLXMqCcO6vY,4872
14
+ opencode_arch/cli/extract.py,sha256=6OKHUY5JM41oQbYbqJi89HrNKC_5xFy6SC2HSpSBjSY,2620
15
+ opencode_arch/cli/gap_analyzer.py,sha256=JQvvwDATJd4qgUILVXL3gUTvwDX_ULAC2A-IiWAzrww,4204
16
+ opencode_arch/cli/generate.py,sha256=cn5P-4ZWwiGDJoYdSjXgm6BHt14r24NJxnknsJdLXe8,2292
17
+ opencode_arch/cli/launch.py,sha256=7zQ-EVMTh3CRNZ0vUigqaUFnpQ7oy8wUMLcT0icipZ4,10019
18
+ opencode_arch/cli/main.py,sha256=xjcnptqaiMj9bj_nhvMb-LKf4wdie4HwQ8U-lsrxtA4,17168
19
+ opencode_arch/cli/metrics.py,sha256=5T_5sgCt-lk-ROGNxWUDLbNbEQCe1YhsiIUKzcGGd9A,6861
20
+ opencode_arch/cli/prompts.py,sha256=qzmuiaTjTdcAd-i3n6lcIbipCH0DGaB-FHPJMEIobQ8,672
21
+ opencode_arch/cli/regen_loop.py,sha256=ldxE8h055MChRv4wkEeBHPEf2M9GdaVkxYMUTdJZD3g,38060
22
+ opencode_arch/context/__init__.py,sha256=tXOcYETE5tcVFoj9m0MuagjzK60iksfXfHxQPG0f6z0,655
23
+ opencode_arch/context/formatter.py,sha256=yjlH4uLE7c7hMlhSPDNIMyJWcLrOdUBkgBcmv4b-6Io,17951
24
+ opencode_arch/context/pipeline_bridge.py,sha256=3RnJlRXHQTr-pp01RhtZ9DEoSqJhW5yEjSvGyfS75fs,6742
25
+ opencode_arch/extract/__init__.py,sha256=dLtkUn6fPcqxGBX9H660j7Bne8hcdt4xcDgxTPRAqBQ,226
26
+ opencode_arch/extract/constraint_detector.py,sha256=TJLGg1YhDCg140qnyrb3kYyYUYg_3aTaLBpuYMRgP8Y,12477
27
+ opencode_arch/extract/from_artifacts.py,sha256=E122lUj8aOC88TvTpvosnrAp8dLU-M1lNLfScvxpa54,27888
28
+ opencode_arch/extract/from_code.py,sha256=8Ch2POLeh85_w-HdBXYI8Dx5CAAhV_t0nwsw499CwzI,22027
29
+ opencode_arch/extract/route_detector.py,sha256=zobq8Q22-mj10o0MnxT3pkHs_D_c-C8SUZZCeJQWBi0,13454
30
+ opencode_arch/extract/table_parser.py,sha256=h8k4l2h0EnwrAghgCD5cHPxEV1koOT4WRnj5sawZcLo,5932
31
+ opencode_arch/learning/__init__.py,sha256=73VgSlFoKGjmWLlbORZ6eSsU85GsU4avUa0AaHG0jRE,688
32
+ opencode_arch/learning/adapter.py,sha256=kV-R8odtC20B0TPUtuqCRPpo4jUUx4EkLztMPvvf_RQ,6397
33
+ opencode_arch/learning/assessor.py,sha256=9WSF5k1hLiv4GJJ1jVEaCnLOabS1szBsNuDAyImrJ4M,5765
34
+ opencode_arch/learning/classifier.py,sha256=b3YZi_svO6_gQWGw7IsOqgmBtuWa-TcV02wcf2CMpIM,5795
35
+ opencode_arch/learning/lessons.py,sha256=xabq9MuvI03W5qVE-2h-LIWnCEMH7Vn70Kr-YIBXPgA,5335
36
+ opencode_arch/learning/maintainer.py,sha256=SYQjsv2cwfCoG-vNEeorIFiysblXnbu2QeaUoEgcn44,10402
37
+ opencode_arch/learning/patterns.py,sha256=lxE5Zyx99lSjXBxzaE8OSPWq9-dOBGzc45DN9WGrXQY,2480
38
+ opencode_arch/mcp/__init__.py,sha256=uVqMFWDM_XgiNGNpKVuwGV5DuWxBIRq68n_Mpk7bbm4,41
39
+ opencode_arch/mcp/__main__.py,sha256=kXtbEmog7XsEiNHTlFK9BSTHwL1n0d1Ge6i8gkLa_NE,252
40
+ opencode_arch/mcp/server.py,sha256=3z59-qZGVaZTxHZpEmHoxV4p30py6mmBTx2W-SEYV64,7369
41
+ opencode_arch/mcp/tools/__init__.py,sha256=fg4O3SwAivyWG4uxkVbD3mv89bnC9JXzmbiu_CFx18w,32
42
+ opencode_arch/mcp/tools/check.py,sha256=ECqVRThM1bjNXmMik0pRUM0Q-7iLMGz9IpX9oGcUsQk,6127
43
+ opencode_arch/mcp/tools/extract.py,sha256=-o5o6NQVXa3cwjX_-erxMUIgP3zXDUofaKNZVEmk6Mw,3673
44
+ opencode_arch/mcp/tools/feedback.py,sha256=9Z4n6IBHc2FZmxeUkhPQviN91potJytj8ZOQeqCqgqk,1969
45
+ opencode_arch/mcp/tools/generate.py,sha256=78l8a8UAtiAuzSg15IkLSom41WF5NeiepFTQ-7JL-M4,3373
46
+ opencode_arch/mcp/tools/group.py,sha256=8cxjD-vOB3m5zNp-vh4_iqUAgLF20PZtmYshS9V18-o,2102
47
+ opencode_arch/mcp/tools/ingest.py,sha256=t7rtri4v8la_ZsI2qZv4Z3BUf--Qebe5_SbVyQPJqDg,3554
48
+ opencode_arch/mcp/tools/require.py,sha256=s5FHe3sj5coVExbI4Ae_3lAbx_1XExozset-rWvjtGg,2163
49
+ opencode_arch/mcp/tools/scan.py,sha256=KQ9XI5s9gMqzExX5TcJMAqHwLFLXlbzhVjO6f7M4_OU,1794
50
+ opencode_arch/mcp/tools/slice.py,sha256=ai-hjJgnDSJQOz4kpMkNyZZ913onYTL5JhCPU75bQ70,9533
51
+ opencode_arch/mcp/tools/validate.py,sha256=mFYofkkXSrVo-o1M3DF2-OLFUtF3W2ybnIHn6Xi1O4I,1777
52
+ opencode_arch/prompts/__init__.py,sha256=4ZGaFaRVSvlngdrTzOVhZJyCok5nJ4PGj_frzWE4HOI,61
53
+ opencode_arch/prompts/regen.py,sha256=HRkNvLLwZ8h0CAvoKqSuS9uoWJeSOztBcgOgoOhdFK0,739
54
+ opencode_arch/runner/__init__.py,sha256=Nk9Y6VQftEfZwQ3draL-juC6wwHZvCOWhHDTIYZUBtQ,224
55
+ opencode_arch/runner/base.py,sha256=Vj7GY0j8x2XtedRWzcvePExkOpMOSQ50K6VXZ6JrT-A,479
56
+ opencode_arch/runner/opencode.py,sha256=6Uh5CMVUwZ4N_yiY8ZnJFXInJkpdy4fbdDhIBVSN_fU,2119
57
+ opencode_arch/telemetry/__init__.py,sha256=Skg6l-Vv01pldSlAs-vW34-UCeFUIGm8_W-5Zrhvsu0,239
58
+ opencode_arch/telemetry/collector.py,sha256=3168ChrW3_utUWq8l68XodENE90LuuiPOe4yqawmbyE,1372
59
+ opencode_arch/telemetry/recorder.py,sha256=HaqHbJOkIHDDhaeJhQAsWL7sheku2fuOIKTrIV63jdk,575
60
+ opencode_arch/telemetry/store.py,sha256=BTIHqSx01oXXQOJ8GCsuhiE-sA-B_ec8pzR0jwoxIXE,21432
61
+ opencode_arch-1.0.0.dist-info/METADATA,sha256=x5jH-2uQyG43dFaiK_NonR-5oGPepHfPPZdhh8KRuDA,9141
62
+ opencode_arch-1.0.0.dist-info/WHEEL,sha256=lCkmxWfQsSc9CfIClYeavTdQeEX2toPqufh9gI35EQA,87
63
+ opencode_arch-1.0.0.dist-info/entry_points.txt,sha256=x0z-EUD-pg4-UH0x8Ww_P-KIbJXHSaRvdlm15MYPRWU,62
64
+ opencode_arch-1.0.0.dist-info/licenses/LICENSE,sha256=ors_Qa2YCQ2Sc_Xlv0un1pw8FkxWv8nI61oO2CJorXQ,1077
65
+ opencode_arch-1.0.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.31.0
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ opencode-arch = opencode_arch.cli.main:main
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Anomaly Contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.