wright-engineering 0.1.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.
- wright_engineering/__init__.py +3 -0
- wright_engineering/cli.py +37 -0
- wright_engineering-0.1.0.dist-info/METADATA +299 -0
- wright_engineering-0.1.0.dist-info/RECORD +7 -0
- wright_engineering-0.1.0.dist-info/WHEEL +4 -0
- wright_engineering-0.1.0.dist-info/entry_points.txt +2 -0
- wright_engineering-0.1.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
import argparse
|
|
4
|
+
|
|
5
|
+
from . import __version__
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
DOCKER_IMAGE = "burhop/wright"
|
|
9
|
+
GHCR_IMAGE = "ghcr.io/burhop/wright"
|
|
10
|
+
DOCS_URL = "https://burhop.github.io/wright/"
|
|
11
|
+
SUPPORT_EMAIL = "wright@makerengineer.com"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def main(argv: list[str] | None = None) -> int:
|
|
15
|
+
parser = argparse.ArgumentParser(
|
|
16
|
+
prog="wright",
|
|
17
|
+
description="Public-alpha helper for the Wright local-first engineering appliance.",
|
|
18
|
+
)
|
|
19
|
+
parser.add_argument(
|
|
20
|
+
"--version",
|
|
21
|
+
action="version",
|
|
22
|
+
version=f"wright-engineering {__version__}",
|
|
23
|
+
)
|
|
24
|
+
subcommands = parser.add_subparsers(dest="command")
|
|
25
|
+
subcommands.add_parser("doctor", help="Print alpha install guidance.")
|
|
26
|
+
|
|
27
|
+
args = parser.parse_args(argv)
|
|
28
|
+
if args.command in (None, "doctor"):
|
|
29
|
+
print("Wright public alpha")
|
|
30
|
+
print(f"Docker Hub image: {DOCKER_IMAGE}:<tag>")
|
|
31
|
+
print(f"GHCR image: {GHCR_IMAGE}:<tag>")
|
|
32
|
+
print(f"Docs: {DOCS_URL}")
|
|
33
|
+
print(f"Support: {SUPPORT_EMAIL}")
|
|
34
|
+
print("Docker remains the primary end-user install path for alpha.")
|
|
35
|
+
return 0
|
|
36
|
+
parser.error(f"unknown command: {args.command}")
|
|
37
|
+
return 2
|
|
@@ -0,0 +1,299 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wright-engineering
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Public-alpha helper CLI for the Wright local-first engineering appliance
|
|
5
|
+
Project-URL: Homepage, https://github.com/burhop/wright
|
|
6
|
+
Project-URL: Source, https://github.com/burhop/wright
|
|
7
|
+
Project-URL: Issues, https://github.com/burhop/wright/issues
|
|
8
|
+
Project-URL: Documentation, https://burhop.github.io/wright/
|
|
9
|
+
Project-URL: Releases, https://github.com/burhop/wright/releases
|
|
10
|
+
Author-email: Wright Project <wright@makerengineer.com>
|
|
11
|
+
License: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: agent,docker,engineering,local-first,wright
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Environment :: Console
|
|
16
|
+
Classifier: Intended Audience :: Developers
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering
|
|
23
|
+
Requires-Python: >=3.11
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
<p align="center">
|
|
27
|
+
<img src="docs/images/wright-logo.png" width="180" alt="Wright Logo">
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
<h1 align="center">Wright</h1>
|
|
31
|
+
|
|
32
|
+
<p align="center">
|
|
33
|
+
<strong>Public-alpha, local-first agent orchestration for physical engineering.</strong>
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<p align="center">
|
|
37
|
+
<a href="https://github.com/burhop/wright/actions/workflows/python-quality.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/python-quality.yml/badge.svg?branch=main" alt="Production Python CI"></a>
|
|
38
|
+
<a href="https://github.com/burhop/wright/actions/workflows/frontend-quality.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/frontend-quality.yml/badge.svg?branch=main" alt="Production Frontend CI"></a>
|
|
39
|
+
<a href="https://github.com/burhop/wright/actions/workflows/docker-build.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/docker-build.yml/badge.svg?branch=main" alt="Production Docker Build"></a>
|
|
40
|
+
<a href="https://github.com/burhop/wright/actions/workflows/docs-deploy.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/docs-deploy.yml/badge.svg?branch=main" alt="Production Docs"></a>
|
|
41
|
+
<a href="https://github.com/burhop/wright/actions/workflows/public-alpha-safety.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/public-alpha-safety.yml/badge.svg?branch=main" alt="Production Security Scan"></a>
|
|
42
|
+
<a href="https://github.com/burhop/wright/actions/workflows/release.yml?query=branch%3Amain"><img src="https://github.com/burhop/wright/actions/workflows/release.yml/badge.svg?branch=main" alt="Production Release"></a>
|
|
43
|
+
<a href="https://opensource.org/licenses/MIT"><img src="https://img.shields.io/badge/license-MIT-yellow.svg" alt="License: MIT"></a>
|
|
44
|
+
<a href="https://www.python.org/downloads/"><img src="https://img.shields.io/badge/python-3.11%2B-blue.svg" alt="Python 3.11+"></a>
|
|
45
|
+
<a href="https://nodejs.org/"><img src="https://img.shields.io/badge/node-22%2B-green.svg" alt="Node 22+"></a>
|
|
46
|
+
<a href="https://github.com/burhop/wright/pkgs/container/wright"><img src="https://img.shields.io/badge/image-GHCR-blue" alt="GHCR image"></a>
|
|
47
|
+
<a href="https://pypi.org/project/wright-engineering/"><img src="https://img.shields.io/badge/pypi-wright--engineering-blue" alt="PyPI package"></a>
|
|
48
|
+
<a href="https://github.com/burhop/wright/discussions"><img src="https://img.shields.io/badge/discussions-GitHub-orange?logo=github" alt="GitHub Discussions"></a>
|
|
49
|
+
<a href="https://github.com/burhop/wright/stargazers"><img src="https://img.shields.io/github/stars/burhop/wright.svg?style=social" alt="GitHub stars"></a>
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## Public Alpha Status
|
|
55
|
+
|
|
56
|
+
Wright is alpha software for developer testing, MCP porting, demos, and selected
|
|
57
|
+
beta feedback. Expect rough edges, incomplete workflows, and changing APIs.
|
|
58
|
+
|
|
59
|
+
The status badges above are pinned to the production branch, `main`. Integration
|
|
60
|
+
work happens on `dev`, so `dev` CI may fail while production remains green; use
|
|
61
|
+
the GitHub Actions branch filter when checking a specific branch.
|
|
62
|
+
|
|
63
|
+
Wright is bring-your-own-AI. The repository and Docker image do not bundle an
|
|
64
|
+
LLM, API key, local model, hosted model, or paid engineering backend. Configure
|
|
65
|
+
`LLM_API_URL`, `LLM_API_KEY`, and `LLM_API_MODEL` for an OpenAI-compatible
|
|
66
|
+
endpoint, a local model server, or a hosted provider.
|
|
67
|
+
|
|
68
|
+
MCP-specific host software such as FreeCAD, OpenSCAD, CalculiX, Blender, vendor
|
|
69
|
+
CAD systems, license managers, or hardware drivers is installed only for the
|
|
70
|
+
selected MCP validation or usage case. It is not part of the base Docker image.
|
|
71
|
+
Engineering MCP server validation follows
|
|
72
|
+
[the clean-container process](docs/mcp-catalog/mcp-server-testing-process.md).
|
|
73
|
+
|
|
74
|
+
## Why Wright?
|
|
75
|
+
|
|
76
|
+
Engineering teams need AI-assisted workflows without handing every design to a
|
|
77
|
+
single hosted black box. Wright coordinates agents and deterministic tools while
|
|
78
|
+
leaving LLM/provider choice, credentials, licenses, and host software under the
|
|
79
|
+
operator's control.
|
|
80
|
+
|
|
81
|
+
The first public alpha is aimed at developers, MCP porters, demo users, and
|
|
82
|
+
selected beta feedback. Local and hybrid deployments are supported, but real
|
|
83
|
+
engineering toolchains still require explicit configuration.
|
|
84
|
+
|
|
85
|
+
## What Works Today
|
|
86
|
+
|
|
87
|
+
- Agent orchestration surfaces for engineering workflows.
|
|
88
|
+
- MCP tool registry metadata and selected-server validation paths.
|
|
89
|
+
- Deterministic CAD, CAE, CAM, and calculation tool actuation through adapters.
|
|
90
|
+
- Docker appliance for the Wright API, static web UI, Hermes profile/bootstrap,
|
|
91
|
+
and general validation tooling.
|
|
92
|
+
- BYO-AI configuration for local or hosted OpenAI-compatible endpoints.
|
|
93
|
+
|
|
94
|
+
The Docker appliance is not a complete CAD/CAE/CAM workstation and does not
|
|
95
|
+
silently install every possible backend.
|
|
96
|
+
|
|
97
|
+
## User Interface
|
|
98
|
+
|
|
99
|
+
### Agent Chat Interface
|
|
100
|
+
|
|
101
|
+
Interact with local LLM agents to iterate on designs, request modifications, or
|
|
102
|
+
write code.
|
|
103
|
+
|
|
104
|
+

|
|
105
|
+
|
|
106
|
+
### Tool Registry
|
|
107
|
+
|
|
108
|
+
View engineering tools, MCP status, and validation metadata available to agents.
|
|
109
|
+
|
|
110
|
+

|
|
111
|
+
|
|
112
|
+
### Workspace Artifacts
|
|
113
|
+
|
|
114
|
+
Review files, generated artifacts, logs, and viewer panels inside the active
|
|
115
|
+
workspace. CAD files, scripts, screenshots, and diagnostics stay local to the
|
|
116
|
+
workspace volume or checkout you control.
|
|
117
|
+
|
|
118
|
+

|
|
119
|
+
|
|
120
|
+
## Quick Start
|
|
121
|
+
|
|
122
|
+
### Docker Appliance
|
|
123
|
+
|
|
124
|
+
Docker is the primary end-user install path for the public alpha. Published
|
|
125
|
+
release images use `burhop/wright:<tag>` on Docker Hub and
|
|
126
|
+
`ghcr.io/burhop/wright:<tag>` on GHCR.
|
|
127
|
+
|
|
128
|
+
With a release image and an env file:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
cp docker/.env.example docker/.env
|
|
132
|
+
# Edit docker/.env and set LLM_API_URL, LLM_API_KEY, and LLM_API_MODEL
|
|
133
|
+
docker run --rm -p 127.0.0.1:8080:8000 --env-file docker/.env burhop/wright:<tag>
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
From a source checkout while developing or before a release image is cut:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
git clone https://github.com/burhop/wright.git
|
|
140
|
+
cd wright
|
|
141
|
+
cp docker/.env.example docker/.env
|
|
142
|
+
# Edit docker/.env and set LLM_API_URL, LLM_API_KEY, and LLM_API_MODEL
|
|
143
|
+
docker compose -f docker-compose.minimal.yml up -d --build
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
Then open:
|
|
147
|
+
|
|
148
|
+
```text
|
|
149
|
+
http://localhost:8080
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
The default `docker-compose.yml` also starts Jaeger and maps Wright to
|
|
153
|
+
`http://localhost:8000`. See the
|
|
154
|
+
[Docker quickstart](docs/getting-started/quickstart-docker.md) and
|
|
155
|
+
[Docker deployment guide](docs/user-guide/docker.md) for LAN access, local model
|
|
156
|
+
server, persistent volume, and cleanup examples.
|
|
157
|
+
|
|
158
|
+
For development outside Docker, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
159
|
+
|
|
160
|
+
## Images and Releases
|
|
161
|
+
|
|
162
|
+
Public release images are published as:
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
burhop/wright:<tag>
|
|
166
|
+
ghcr.io/burhop/wright:<tag>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
The public-alpha Python helper package is:
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
pip install wright-engineering
|
|
173
|
+
wright doctor
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
Docker remains the primary end-user install path. `wright-engineering` is a
|
|
177
|
+
lightweight helper/discovery package, not the full appliance. Prerelease tags
|
|
178
|
+
such as `v0.1.0-alpha.1` do not move `latest`; stable tags may.
|
|
179
|
+
|
|
180
|
+
## Architecture
|
|
181
|
+
|
|
182
|
+
Wright is a modular monorepo with a FastAPI gateway, React/Vite web UI,
|
|
183
|
+
agent-neutral workspace services, Hermes and future runtime adapters, an MCP
|
|
184
|
+
tool registry, and local workspace state.
|
|
185
|
+
|
|
186
|
+
```mermaid
|
|
187
|
+
flowchart TD
|
|
188
|
+
User([User Web Browser]) -->|HTTP / WebSockets| API[FastAPI API Gateway]
|
|
189
|
+
API -->|Thin HTTP translation| Workspace[Workspace Service]
|
|
190
|
+
Workspace -->|Runtime selection and context| Agent[Agent Adapters]
|
|
191
|
+
Workspace -->|Tool assignment and policy| MCP[MCP Tool Registry]
|
|
192
|
+
API -->|Catalog and lifecycle reads| MCP
|
|
193
|
+
Agent -->|Wright gateway protocol| MCP
|
|
194
|
+
MCP -->|Selected server| Tools[CAD, CAE, CAM, calculators]
|
|
195
|
+
API -->|State, files, and logs| LocalState[SQLite and local workspace files]
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
Hermes remains the default first-class adapter, but `.hermes.md` and
|
|
199
|
+
`~/.hermes` profile behavior lives in Hermes adapter/profile code. Generic
|
|
200
|
+
workspace lifecycle code delegates context materialization through
|
|
201
|
+
`packages/agent_adapters` contracts so OpenClaw and future engines can plug in
|
|
202
|
+
without inheriting Hermes file formats.
|
|
203
|
+
|
|
204
|
+
### Repository Structure
|
|
205
|
+
|
|
206
|
+
```text
|
|
207
|
+
wright/
|
|
208
|
+
|-- apps/
|
|
209
|
+
| |-- api/ # FastAPI gateway
|
|
210
|
+
| `-- web/ # React + Vite frontend
|
|
211
|
+
|-- packages/
|
|
212
|
+
| |-- core/ # Shared domain models and logging
|
|
213
|
+
| |-- agent_adapters/ # Adapter pattern for agent runtimes
|
|
214
|
+
| |-- workspace_service/ # Workspace lifecycle orchestration facade
|
|
215
|
+
| |-- tool_registry/ # MCP registry and validation logic
|
|
216
|
+
| `-- data_vault/ # Placeholder package for future storage extraction
|
|
217
|
+
|-- hermes-plugin-wright/ # Wright Hermes plugin compatibility package
|
|
218
|
+
|-- tests/
|
|
219
|
+
| |-- ui-integration/ # Playwright integration tests
|
|
220
|
+
| `-- e2e/ # Smoke and system tests
|
|
221
|
+
|-- docker/ # Dockerfile and supervisord configuration
|
|
222
|
+
|-- docs/ # Documentation site content and runbooks
|
|
223
|
+
|-- specs/ # Spec Kit feature artifacts
|
|
224
|
+
`-- .github/ # Community templates and CI workflows
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Refer to [docs/virtual_engineer_architecture.pdf](docs/virtual_engineer_architecture.pdf)
|
|
228
|
+
for the formal architecture analysis and [constitution.md](constitution.md) for
|
|
229
|
+
core project engineering standards.
|
|
230
|
+
|
|
231
|
+
## Development
|
|
232
|
+
|
|
233
|
+
Run the main local quality gates:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
uv run pytest
|
|
237
|
+
uv run ruff check apps/api/ packages/
|
|
238
|
+
uv run ruff format --check apps/api/ packages/
|
|
239
|
+
npm ci
|
|
240
|
+
npx -w apps/web eslint .
|
|
241
|
+
npx prettier --check apps/web/
|
|
242
|
+
npx tsc --noEmit -p apps/web/tsconfig.app.json
|
|
243
|
+
npm run test --workspace=apps/web
|
|
244
|
+
npm run build --workspace=apps/web
|
|
245
|
+
mkdocs build --strict
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Helper scripts live in [scripts/](scripts), including public-alpha leak scans,
|
|
249
|
+
Docker smoke tests, CI failure log fetching, and release checks.
|
|
250
|
+
|
|
251
|
+
## Spec Kit
|
|
252
|
+
|
|
253
|
+
Wright uses [spec-kit](https://github.com/github/spec-kit) for design-led
|
|
254
|
+
feature work. Most substantive changes should start with a feature spec, plan,
|
|
255
|
+
tasks, and implementation checklist under `specs/`.
|
|
256
|
+
|
|
257
|
+
## Contributing
|
|
258
|
+
|
|
259
|
+
Contributions are welcome. Please read [CONTRIBUTING.md](CONTRIBUTING.md) for
|
|
260
|
+
local setup, branch discipline, testing, pull request expectations, and the
|
|
261
|
+
Spec Kit workflow.
|
|
262
|
+
|
|
263
|
+
Looking for a place to start? Browse issues labeled
|
|
264
|
+
[`good-first-issue`](https://github.com/burhop/wright/labels/good-first-issue).
|
|
265
|
+
|
|
266
|
+
## Community and Support
|
|
267
|
+
|
|
268
|
+
- Ask usage questions in
|
|
269
|
+
[GitHub Discussions](https://github.com/burhop/wright/discussions).
|
|
270
|
+
- Contact maintainers for support, sponsorship, and partner questions at
|
|
271
|
+
`wright@makerengineer.com`.
|
|
272
|
+
- Report reproducible bugs with
|
|
273
|
+
[GitHub Issues](https://github.com/burhop/wright/issues/new/choose).
|
|
274
|
+
- Report security issues privately using [SECURITY.md](SECURITY.md); do not
|
|
275
|
+
open public security issues.
|
|
276
|
+
|
|
277
|
+
## Support and Sponsorship
|
|
278
|
+
|
|
279
|
+
Wright is open source, but integration testing, model evaluation, and engineering
|
|
280
|
+
tool adapters require ongoing resources.
|
|
281
|
+
|
|
282
|
+
- API, token, and compute sponsorships help cover continuous LLM testing.
|
|
283
|
+
- Hardware contributions help test local-first and air-gapped deployments.
|
|
284
|
+
- Tool ecosystem contributions help expand the MCP catalog safely.
|
|
285
|
+
- Code, docs, and Spec Kit contributions help harden the public alpha.
|
|
286
|
+
|
|
287
|
+
[Sponsor Wright on GitHub](https://github.com/sponsors/burhop)
|
|
288
|
+
|
|
289
|
+
## License
|
|
290
|
+
|
|
291
|
+
This project is licensed under the MIT License. See [LICENSE](LICENSE).
|
|
292
|
+
|
|
293
|
+
## Star History and Contributors
|
|
294
|
+
|
|
295
|
+
[](https://github.com/burhop/wright)
|
|
296
|
+
|
|
297
|
+
<a href="https://github.com/burhop/wright/graphs/contributors">
|
|
298
|
+
<img src="https://contrib.rocks/image?repo=burhop/wright" alt="Contributors list">
|
|
299
|
+
</a>
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
wright_engineering/__init__.py,sha256=0bXxdbuK9gIIYx5JJ16TdTJJsbtAecmHfn4w2AGV84A,65
|
|
2
|
+
wright_engineering/cli.py,sha256=rm7Ww_1vLgVjJgKK4ec9BL4Y4NvBKk0PRveFL2zUcHI,1168
|
|
3
|
+
wright_engineering-0.1.0.dist-info/METADATA,sha256=XyLM9zqFRAG81qXcjXOs53pDvidCq6MrwZU4vJAi4LQ,12822
|
|
4
|
+
wright_engineering-0.1.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
|
|
5
|
+
wright_engineering-0.1.0.dist-info/entry_points.txt,sha256=KnH2Y9hYzfKZ-tr2lcxYLHpdrFIcST3GhjFcAb7dp8E,55
|
|
6
|
+
wright_engineering-0.1.0.dist-info/licenses/LICENSE,sha256=XhVPREMqnUOMB6hs5htaSHHpYPNdynWrfzDwzlFwrlI,1063
|
|
7
|
+
wright_engineering-0.1.0.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 burhop
|
|
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.
|