universal-agent-middleware 0.5.1rc1__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.
- universal_agent_middleware-0.5.1rc1/LICENSE +21 -0
- universal_agent_middleware-0.5.1rc1/MANIFEST.in +6 -0
- universal_agent_middleware-0.5.1rc1/PKG-INFO +179 -0
- universal_agent_middleware-0.5.1rc1/README.md +162 -0
- universal_agent_middleware-0.5.1rc1/pyproject.toml +27 -0
- universal_agent_middleware-0.5.1rc1/setup.cfg +4 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/__init__.py +3 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/adapters/__init__.py +5 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/adapters/mcp_sdk.py +577 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/adapters/openai_actions.py +24 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/audit.py +224 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/cli.py +175 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/contracts.py +215 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/discovery.py +675 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/doctor.py +153 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/errors.py +22 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/executors/__init__.py +224 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/exploration.py +514 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/gateway.py +478 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/git_readonly.py +144 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/installer.py +315 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/mcp.py +290 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/models.py +64 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/openapi.py +279 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/policy.py +85 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/project.py +381 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/results.py +134 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/root_scope.py +144 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/runtime.py +187 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/server.py +292 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/service.py +161 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/supervisor.py +225 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/tool_contract.json +21 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware/workspace.py +256 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/PKG-INFO +179 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/SOURCES.txt +61 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/dependency_links.txt +1 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/entry_points.txt +2 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/requires.txt +7 -0
- universal_agent_middleware-0.5.1rc1/src/universal_agent_middleware.egg-info/top_level.txt +1 -0
- universal_agent_middleware-0.5.1rc1/tests/fixtures/freshness/README.md +42 -0
- universal_agent_middleware-0.5.1rc1/tests/fixtures/freshness/test.txt +1 -0
- universal_agent_middleware-0.5.1rc1/tests/fixtures/prompt_injection.txt +6 -0
- universal_agent_middleware-0.5.1rc1/tests/synthetic_fixtures.py +192 -0
- universal_agent_middleware-0.5.1rc1/tests/test_agent_plugin_package.py +32 -0
- universal_agent_middleware-0.5.1rc1/tests/test_api_e2e.py +158 -0
- universal_agent_middleware-0.5.1rc1/tests/test_audit.py +26 -0
- universal_agent_middleware-0.5.1rc1/tests/test_broad_reality.py +814 -0
- universal_agent_middleware-0.5.1rc1/tests/test_contracts.py +53 -0
- universal_agent_middleware-0.5.1rc1/tests/test_gateway_boundaries.py +107 -0
- universal_agent_middleware-0.5.1rc1/tests/test_git_readonly.py +49 -0
- universal_agent_middleware-0.5.1rc1/tests/test_hardening.py +501 -0
- universal_agent_middleware-0.5.1rc1/tests/test_local_executor.py +129 -0
- universal_agent_middleware-0.5.1rc1/tests/test_mcp.py +76 -0
- universal_agent_middleware-0.5.1rc1/tests/test_mcp_http.py +154 -0
- universal_agent_middleware-0.5.1rc1/tests/test_mcp_sdk_adapter.py +153 -0
- universal_agent_middleware-0.5.1rc1/tests/test_openapi_contract.py +43 -0
- universal_agent_middleware-0.5.1rc1/tests/test_policy.py +38 -0
- universal_agent_middleware-0.5.1rc1/tests/test_real_workspace_e2e.py +169 -0
- universal_agent_middleware-0.5.1rc1/tests/test_results.py +76 -0
- universal_agent_middleware-0.5.1rc1/tests/test_v032_acceptance.py +209 -0
- universal_agent_middleware-0.5.1rc1/tests/test_vendor_neutrality.py +41 -0
- universal_agent_middleware-0.5.1rc1/tests/test_workspace.py +71 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 OpenJay
|
|
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.
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: universal-agent-middleware
|
|
3
|
+
Version: 0.5.1rc1
|
|
4
|
+
Summary: Vendor-neutral local-first middleware for AI agent workspace observation, bounded execution handoff, and evidence review.
|
|
5
|
+
Author: OpenJay
|
|
6
|
+
License: MIT
|
|
7
|
+
Keywords: ai,agents,middleware,interop,mcp,agent-skills,agent-plugins,openapi
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Description-Content-Type: text/markdown
|
|
10
|
+
License-File: LICENSE
|
|
11
|
+
Provides-Extra: mcp
|
|
12
|
+
Requires-Dist: mcp<3,>=2.0.0; extra == "mcp"
|
|
13
|
+
Provides-Extra: service
|
|
14
|
+
Requires-Dist: mcp<3,>=2.0.0; extra == "service"
|
|
15
|
+
Requires-Dist: PyYAML<7,>=6.0; extra == "service"
|
|
16
|
+
Dynamic: license-file
|
|
17
|
+
|
|
18
|
+
# Universal Agent Middleware (UAM) v0.5.1rc1
|
|
19
|
+
|
|
20
|
+
**Public Preview RC1** — read-only MCP observation for local codebases
|
|
21
|
+
|
|
22
|
+
UAM is a vendor-neutral, local-first middleware that lets any reasoning client (ChatGPT, Claude, Cursor, future agents) observe your local project workspaces in real time through a secure read-only interface — with project-level reality coverage, lifecycle tracking, and observation-based diagnostics.
|
|
23
|
+
|
|
24
|
+
## What it does
|
|
25
|
+
|
|
26
|
+
```text
|
|
27
|
+
Reasoning client (new session, no history needed)
|
|
28
|
+
│
|
|
29
|
+
▼
|
|
30
|
+
UAM MCP App (19 read-only tools)
|
|
31
|
+
│
|
|
32
|
+
▼
|
|
33
|
+
Optional secure MCP tunnel (outbound-only)
|
|
34
|
+
│
|
|
35
|
+
▼
|
|
36
|
+
Your local machine
|
|
37
|
+
│
|
|
38
|
+
▼
|
|
39
|
+
Registered workspaces + project reality
|
|
40
|
+
(my-app, api-service, etc.)
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
A new conversation can read live repository state — HEAD, branch, files, diffs, search, project reality coverage — without copy-paste and without granting write access.
|
|
44
|
+
|
|
45
|
+
## Quick start
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
# Install
|
|
49
|
+
python -m venv .venv && source .venv/bin/activate
|
|
50
|
+
pip install -e ".[mcp]"
|
|
51
|
+
|
|
52
|
+
# Register workspaces
|
|
53
|
+
cp config/workspaces.example.json config/workspaces.json
|
|
54
|
+
# Edit workspace roots to match your machine
|
|
55
|
+
|
|
56
|
+
# Optional: root scope registry for autonomous discovery
|
|
57
|
+
cp examples/root_scopes.example.json config/root_scopes.json
|
|
58
|
+
|
|
59
|
+
# Local MCP smoke test
|
|
60
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-07-28","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | \
|
|
61
|
+
uam mcp-sdk-stdio --profile session-read \
|
|
62
|
+
--registry config/workspaces.json \
|
|
63
|
+
--state-dir ~/.local/share/uam
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
For remote clients, configure an outbound MCP tunnel using your platform credentials. See `docs/adapters/MCP.md`.
|
|
67
|
+
|
|
68
|
+
## Available MCP tools
|
|
69
|
+
|
|
70
|
+
| Tool | Description |
|
|
71
|
+
|------|-------------|
|
|
72
|
+
| `uam_list_workspaces` | List registered workspaces, capabilities, and project grouping |
|
|
73
|
+
| `uam_workspace_snapshot` | HEAD, branch, head_state, dirty count |
|
|
74
|
+
| `uam_session_bootstrap` | Full reasoning context in one call (project-aware, v2 schema) |
|
|
75
|
+
| `uam_tree` | Directory listing |
|
|
76
|
+
| `uam_read_file` | Read text files (relative paths only) |
|
|
77
|
+
| `uam_search_text` | Search across workspace files |
|
|
78
|
+
| `uam_git_status` | Git HEAD, branch, working tree changes |
|
|
79
|
+
| `uam_git_diff` | Git diff (optionally scoped) |
|
|
80
|
+
| `uam_git_log` | Recent commit history |
|
|
81
|
+
| `uam_verify_audit` | Hash-chain audit log integrity |
|
|
82
|
+
| `uam_project_reality` | Multi-instance project reality snapshot with coverage diagnostics |
|
|
83
|
+
| `uam_list_project_instances` | List workspace instances and discovered worktrees for a project |
|
|
84
|
+
| `uam_list_scopes` | List authorized RootScopes (standing trust zones) |
|
|
85
|
+
| `uam_discover_projects` | Autonomously discover all projects within a scope |
|
|
86
|
+
| `uam_scope_inventory` | Cached project inventory for a scope |
|
|
87
|
+
| `uam_search_scope` | Cross-project text search across entire scope |
|
|
88
|
+
| `uam_explain_coverage` | Per-project coverage gap analysis |
|
|
89
|
+
| `uam_what_am_i_missing` | Aggregate missing reality across active projects |
|
|
90
|
+
| `uam_explore` | Intent-driven exploration with ranking, graph, and retrieval plan |
|
|
91
|
+
|
|
92
|
+
All session-read tools expose `readOnlyHint=true, destructiveHint=false`. No write, exec, merge, deploy, or credential tools are part of the Public Preview contract.
|
|
93
|
+
|
|
94
|
+
## Security model
|
|
95
|
+
|
|
96
|
+
- **Read-only remote surface** — no mutation tools exposed in session-read profile
|
|
97
|
+
- **Path containment** — `.env`, `.git/**`, `../` traversal all denied
|
|
98
|
+
- **Prompt injection defense** — security is middleware-enforced, not model-dependent
|
|
99
|
+
- **No credentials in repo** — tunnel credentials via environment only
|
|
100
|
+
- **Outbound-only tunnel** — no public inbound listener required (optional adapter)
|
|
101
|
+
- **Secret firewall** — credential-like files denied even under broad scope authority
|
|
102
|
+
|
|
103
|
+
## Architecture
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
Reasoning clients / humans
|
|
107
|
+
ChatGPT · Claude · Gemini · Cursor · Copilot · future agents
|
|
108
|
+
│
|
|
109
|
+
northbound adapters
|
|
110
|
+
HTTP/OpenAPI · MCP (official SDK) · Agent Plugins
|
|
111
|
+
│
|
|
112
|
+
▼
|
|
113
|
+
┌────────────────────────────────────────────────┐
|
|
114
|
+
│ Universal Agent Middleware Core │
|
|
115
|
+
│ workspace registry → policy → observation │
|
|
116
|
+
│ project registry → coverage diagnostics │
|
|
117
|
+
│ audit → execution contract → result review │
|
|
118
|
+
└──────────────────┬─────────────────────────────┘
|
|
119
|
+
│ │
|
|
120
|
+
READ ONLY .state/
|
|
121
|
+
│ contracts/results/audit
|
|
122
|
+
▼
|
|
123
|
+
registered project workspaces
|
|
124
|
+
my-app · api-service · others
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Core invariants
|
|
128
|
+
|
|
129
|
+
- **Vendor-neutral core:** no OpenAI/Anthropic/Cursor/GitHub dependency
|
|
130
|
+
- **Project sovereignty:** target project SSOT remains authoritative
|
|
131
|
+
- **Read-only boundary:** session-read profile grants no write, shell, commit, push, merge, or deploy
|
|
132
|
+
- **Observation ≠ Authority:** UAM reports reality; project governance decides actions
|
|
133
|
+
- **Separate state:** UAM state is physically disjoint from target workspaces
|
|
134
|
+
- **Evidence-bound execution:** (v0.2+ contracts; legacy LocalExecutor is experimental)
|
|
135
|
+
|
|
136
|
+
## Project reality model (v0.3.1+)
|
|
137
|
+
|
|
138
|
+
UAM tracks multi-instance projects with orthogonal dimensions:
|
|
139
|
+
|
|
140
|
+
- **role** — structural function: `canonical-main`, `candidate`, `review-carrier`
|
|
141
|
+
- **lifecycle** — temporal state: `active`, `landed`, `stale`, `superseded`
|
|
142
|
+
- **coverage** — observation completeness per truth surface
|
|
143
|
+
|
|
144
|
+
Coverage states: `observed`, `externally_verified`, `not_applicable`, `not_observed`, `not_registered`
|
|
145
|
+
|
|
146
|
+
Project-specific observation profiles in `config/project-observation-profiles/` (local-only, gitignored) define per-project requirements without embedding project semantics into UAM core.
|
|
147
|
+
|
|
148
|
+
## Documentation
|
|
149
|
+
|
|
150
|
+
- `docs/REALITY_PREAMBLE.md` — Reality Preamble protocol
|
|
151
|
+
- `docs/BACKLOG.md` — Roadmap and hardening priorities
|
|
152
|
+
- `docs/adapters/MCP.md` — MCP adapter setup
|
|
153
|
+
- `docs/oss/public-profile-contract.md` — Public Preview supported surface
|
|
154
|
+
- `CHANGELOG.md` — Version history
|
|
155
|
+
- `SECURITY.md` — Vulnerability reporting
|
|
156
|
+
- `CONTRIBUTING.md` — Contribution guidelines
|
|
157
|
+
|
|
158
|
+
## Status
|
|
159
|
+
|
|
160
|
+
**v0.5.1rc1 — Public Preview RC1**
|
|
161
|
+
|
|
162
|
+
| Gate | Status |
|
|
163
|
+
|------|--------|
|
|
164
|
+
| Source implementation | PASS (19 read-only MCP tools) |
|
|
165
|
+
| RootScope foundation | PASS |
|
|
166
|
+
| Git repository discovery | PASS |
|
|
167
|
+
| Project grouping | PASS |
|
|
168
|
+
| CoverageGap MVP | PASS |
|
|
169
|
+
| Audit v2 integrity | PASS |
|
|
170
|
+
| Scope search enforcement | PASS (OSS-SEC-001 pre-read boundary) |
|
|
171
|
+
| Portable test suite | PASS (199 tests, 1 skipped; synthetic fixtures) |
|
|
172
|
+
| Python/OS matrix (3.11–3.14) | **PASS** — 8/8 public CI (run `33954828455`) |
|
|
173
|
+
| Public release gates (O0–O9) | **PASS** — live public repo; see `docs/oss/launch-packet.md` |
|
|
174
|
+
| GitHub Release `v0.5.1rc1` | **PASS** — wheel + sdist attached |
|
|
175
|
+
| PyPI distribution | **Configured** — OIDC trusted publishing via `release.yml` (manual Pending Publisher step on pypi.org) |
|
|
176
|
+
|
|
177
|
+
Public Preview supports SDK stdio session-read profile only. Legacy HTTP adapter and LocalExecutor are experimental and not part of the Preview contract. See `docs/oss/public-profile-contract.md`.
|
|
178
|
+
|
|
179
|
+
Deferred: forge/runtime observation, write-capable remote tools, autonomous execution, production OAuth.
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
# Universal Agent Middleware (UAM) v0.5.1rc1
|
|
2
|
+
|
|
3
|
+
**Public Preview RC1** — read-only MCP observation for local codebases
|
|
4
|
+
|
|
5
|
+
UAM is a vendor-neutral, local-first middleware that lets any reasoning client (ChatGPT, Claude, Cursor, future agents) observe your local project workspaces in real time through a secure read-only interface — with project-level reality coverage, lifecycle tracking, and observation-based diagnostics.
|
|
6
|
+
|
|
7
|
+
## What it does
|
|
8
|
+
|
|
9
|
+
```text
|
|
10
|
+
Reasoning client (new session, no history needed)
|
|
11
|
+
│
|
|
12
|
+
▼
|
|
13
|
+
UAM MCP App (19 read-only tools)
|
|
14
|
+
│
|
|
15
|
+
▼
|
|
16
|
+
Optional secure MCP tunnel (outbound-only)
|
|
17
|
+
│
|
|
18
|
+
▼
|
|
19
|
+
Your local machine
|
|
20
|
+
│
|
|
21
|
+
▼
|
|
22
|
+
Registered workspaces + project reality
|
|
23
|
+
(my-app, api-service, etc.)
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
A new conversation can read live repository state — HEAD, branch, files, diffs, search, project reality coverage — without copy-paste and without granting write access.
|
|
27
|
+
|
|
28
|
+
## Quick start
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
# Install
|
|
32
|
+
python -m venv .venv && source .venv/bin/activate
|
|
33
|
+
pip install -e ".[mcp]"
|
|
34
|
+
|
|
35
|
+
# Register workspaces
|
|
36
|
+
cp config/workspaces.example.json config/workspaces.json
|
|
37
|
+
# Edit workspace roots to match your machine
|
|
38
|
+
|
|
39
|
+
# Optional: root scope registry for autonomous discovery
|
|
40
|
+
cp examples/root_scopes.example.json config/root_scopes.json
|
|
41
|
+
|
|
42
|
+
# Local MCP smoke test
|
|
43
|
+
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2026-07-28","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | \
|
|
44
|
+
uam mcp-sdk-stdio --profile session-read \
|
|
45
|
+
--registry config/workspaces.json \
|
|
46
|
+
--state-dir ~/.local/share/uam
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
For remote clients, configure an outbound MCP tunnel using your platform credentials. See `docs/adapters/MCP.md`.
|
|
50
|
+
|
|
51
|
+
## Available MCP tools
|
|
52
|
+
|
|
53
|
+
| Tool | Description |
|
|
54
|
+
|------|-------------|
|
|
55
|
+
| `uam_list_workspaces` | List registered workspaces, capabilities, and project grouping |
|
|
56
|
+
| `uam_workspace_snapshot` | HEAD, branch, head_state, dirty count |
|
|
57
|
+
| `uam_session_bootstrap` | Full reasoning context in one call (project-aware, v2 schema) |
|
|
58
|
+
| `uam_tree` | Directory listing |
|
|
59
|
+
| `uam_read_file` | Read text files (relative paths only) |
|
|
60
|
+
| `uam_search_text` | Search across workspace files |
|
|
61
|
+
| `uam_git_status` | Git HEAD, branch, working tree changes |
|
|
62
|
+
| `uam_git_diff` | Git diff (optionally scoped) |
|
|
63
|
+
| `uam_git_log` | Recent commit history |
|
|
64
|
+
| `uam_verify_audit` | Hash-chain audit log integrity |
|
|
65
|
+
| `uam_project_reality` | Multi-instance project reality snapshot with coverage diagnostics |
|
|
66
|
+
| `uam_list_project_instances` | List workspace instances and discovered worktrees for a project |
|
|
67
|
+
| `uam_list_scopes` | List authorized RootScopes (standing trust zones) |
|
|
68
|
+
| `uam_discover_projects` | Autonomously discover all projects within a scope |
|
|
69
|
+
| `uam_scope_inventory` | Cached project inventory for a scope |
|
|
70
|
+
| `uam_search_scope` | Cross-project text search across entire scope |
|
|
71
|
+
| `uam_explain_coverage` | Per-project coverage gap analysis |
|
|
72
|
+
| `uam_what_am_i_missing` | Aggregate missing reality across active projects |
|
|
73
|
+
| `uam_explore` | Intent-driven exploration with ranking, graph, and retrieval plan |
|
|
74
|
+
|
|
75
|
+
All session-read tools expose `readOnlyHint=true, destructiveHint=false`. No write, exec, merge, deploy, or credential tools are part of the Public Preview contract.
|
|
76
|
+
|
|
77
|
+
## Security model
|
|
78
|
+
|
|
79
|
+
- **Read-only remote surface** — no mutation tools exposed in session-read profile
|
|
80
|
+
- **Path containment** — `.env`, `.git/**`, `../` traversal all denied
|
|
81
|
+
- **Prompt injection defense** — security is middleware-enforced, not model-dependent
|
|
82
|
+
- **No credentials in repo** — tunnel credentials via environment only
|
|
83
|
+
- **Outbound-only tunnel** — no public inbound listener required (optional adapter)
|
|
84
|
+
- **Secret firewall** — credential-like files denied even under broad scope authority
|
|
85
|
+
|
|
86
|
+
## Architecture
|
|
87
|
+
|
|
88
|
+
```text
|
|
89
|
+
Reasoning clients / humans
|
|
90
|
+
ChatGPT · Claude · Gemini · Cursor · Copilot · future agents
|
|
91
|
+
│
|
|
92
|
+
northbound adapters
|
|
93
|
+
HTTP/OpenAPI · MCP (official SDK) · Agent Plugins
|
|
94
|
+
│
|
|
95
|
+
▼
|
|
96
|
+
┌────────────────────────────────────────────────┐
|
|
97
|
+
│ Universal Agent Middleware Core │
|
|
98
|
+
│ workspace registry → policy → observation │
|
|
99
|
+
│ project registry → coverage diagnostics │
|
|
100
|
+
│ audit → execution contract → result review │
|
|
101
|
+
└──────────────────┬─────────────────────────────┘
|
|
102
|
+
│ │
|
|
103
|
+
READ ONLY .state/
|
|
104
|
+
│ contracts/results/audit
|
|
105
|
+
▼
|
|
106
|
+
registered project workspaces
|
|
107
|
+
my-app · api-service · others
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Core invariants
|
|
111
|
+
|
|
112
|
+
- **Vendor-neutral core:** no OpenAI/Anthropic/Cursor/GitHub dependency
|
|
113
|
+
- **Project sovereignty:** target project SSOT remains authoritative
|
|
114
|
+
- **Read-only boundary:** session-read profile grants no write, shell, commit, push, merge, or deploy
|
|
115
|
+
- **Observation ≠ Authority:** UAM reports reality; project governance decides actions
|
|
116
|
+
- **Separate state:** UAM state is physically disjoint from target workspaces
|
|
117
|
+
- **Evidence-bound execution:** (v0.2+ contracts; legacy LocalExecutor is experimental)
|
|
118
|
+
|
|
119
|
+
## Project reality model (v0.3.1+)
|
|
120
|
+
|
|
121
|
+
UAM tracks multi-instance projects with orthogonal dimensions:
|
|
122
|
+
|
|
123
|
+
- **role** — structural function: `canonical-main`, `candidate`, `review-carrier`
|
|
124
|
+
- **lifecycle** — temporal state: `active`, `landed`, `stale`, `superseded`
|
|
125
|
+
- **coverage** — observation completeness per truth surface
|
|
126
|
+
|
|
127
|
+
Coverage states: `observed`, `externally_verified`, `not_applicable`, `not_observed`, `not_registered`
|
|
128
|
+
|
|
129
|
+
Project-specific observation profiles in `config/project-observation-profiles/` (local-only, gitignored) define per-project requirements without embedding project semantics into UAM core.
|
|
130
|
+
|
|
131
|
+
## Documentation
|
|
132
|
+
|
|
133
|
+
- `docs/REALITY_PREAMBLE.md` — Reality Preamble protocol
|
|
134
|
+
- `docs/BACKLOG.md` — Roadmap and hardening priorities
|
|
135
|
+
- `docs/adapters/MCP.md` — MCP adapter setup
|
|
136
|
+
- `docs/oss/public-profile-contract.md` — Public Preview supported surface
|
|
137
|
+
- `CHANGELOG.md` — Version history
|
|
138
|
+
- `SECURITY.md` — Vulnerability reporting
|
|
139
|
+
- `CONTRIBUTING.md` — Contribution guidelines
|
|
140
|
+
|
|
141
|
+
## Status
|
|
142
|
+
|
|
143
|
+
**v0.5.1rc1 — Public Preview RC1**
|
|
144
|
+
|
|
145
|
+
| Gate | Status |
|
|
146
|
+
|------|--------|
|
|
147
|
+
| Source implementation | PASS (19 read-only MCP tools) |
|
|
148
|
+
| RootScope foundation | PASS |
|
|
149
|
+
| Git repository discovery | PASS |
|
|
150
|
+
| Project grouping | PASS |
|
|
151
|
+
| CoverageGap MVP | PASS |
|
|
152
|
+
| Audit v2 integrity | PASS |
|
|
153
|
+
| Scope search enforcement | PASS (OSS-SEC-001 pre-read boundary) |
|
|
154
|
+
| Portable test suite | PASS (199 tests, 1 skipped; synthetic fixtures) |
|
|
155
|
+
| Python/OS matrix (3.11–3.14) | **PASS** — 8/8 public CI (run `33954828455`) |
|
|
156
|
+
| Public release gates (O0–O9) | **PASS** — live public repo; see `docs/oss/launch-packet.md` |
|
|
157
|
+
| GitHub Release `v0.5.1rc1` | **PASS** — wheel + sdist attached |
|
|
158
|
+
| PyPI distribution | **Configured** — OIDC trusted publishing via `release.yml` (manual Pending Publisher step on pypi.org) |
|
|
159
|
+
|
|
160
|
+
Public Preview supports SDK stdio session-read profile only. Legacy HTTP adapter and LocalExecutor are experimental and not part of the Preview contract. See `docs/oss/public-profile-contract.md`.
|
|
161
|
+
|
|
162
|
+
Deferred: forge/runtime observation, write-capable remote tools, autonomous execution, production OAuth.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=68", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "universal-agent-middleware"
|
|
7
|
+
version = "0.5.1rc1"
|
|
8
|
+
description = "Vendor-neutral local-first middleware for AI agent workspace observation, bounded execution handoff, and evidence review."
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.11"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [{name = "OpenJay"}]
|
|
13
|
+
keywords = ["ai", "agents", "middleware", "interop", "mcp", "agent-skills", "agent-plugins", "openapi"]
|
|
14
|
+
dependencies = []
|
|
15
|
+
|
|
16
|
+
[project.optional-dependencies]
|
|
17
|
+
mcp = ["mcp>=2.0.0,<3"]
|
|
18
|
+
service = ["mcp>=2.0.0,<3", "PyYAML>=6.0,<7"]
|
|
19
|
+
|
|
20
|
+
[project.scripts]
|
|
21
|
+
uam = "universal_agent_middleware.cli:main"
|
|
22
|
+
|
|
23
|
+
[tool.setuptools.packages.find]
|
|
24
|
+
where = ["src"]
|
|
25
|
+
|
|
26
|
+
[tool.setuptools.package-data]
|
|
27
|
+
universal_agent_middleware = ["tool_contract.json"]
|