agent-loop-guard-runtime 0.6.0a2__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.
- agent_loop_guard_runtime-0.6.0a2.dist-info/METADATA +407 -0
- agent_loop_guard_runtime-0.6.0a2.dist-info/RECORD +76 -0
- agent_loop_guard_runtime-0.6.0a2.dist-info/WHEEL +5 -0
- agent_loop_guard_runtime-0.6.0a2.dist-info/entry_points.txt +2 -0
- agent_loop_guard_runtime-0.6.0a2.dist-info/licenses/LICENSE +202 -0
- agent_loop_guard_runtime-0.6.0a2.dist-info/top_level.txt +1 -0
- app/__init__.py +6 -0
- app/api/__init__.py +1 -0
- app/api/admin_routes.py +179 -0
- app/api/anthropic_routes.py +21 -0
- app/api/common.py +457 -0
- app/api/mcp_routes.py +218 -0
- app/api/openai_routes.py +26 -0
- app/api/replay_routes.py +202 -0
- app/api/ui_routes.py +295 -0
- app/benchmark/__init__.py +2 -0
- app/benchmark/adapters.py +97 -0
- app/benchmark/data/starter-v1.json +38 -0
- app/benchmark/dataset.py +59 -0
- app/benchmark/models.py +46 -0
- app/benchmark/runner.py +63 -0
- app/benchmark/scorers.py +34 -0
- app/benchmark/statistics.py +48 -0
- app/benchmark/storage.py +78 -0
- app/cli.py +624 -0
- app/core/config.py +196 -0
- app/core/demo.py +109 -0
- app/core/loop_detector.py +120 -0
- app/core/policy_engine.py +167 -0
- app/core/redaction.py +84 -0
- app/core/security.py +54 -0
- app/core/token_meter.py +67 -0
- app/db/models.py +296 -0
- app/db/repository.py +1488 -0
- app/db/session.py +57 -0
- app/main.py +59 -0
- app/mcp/__init__.py +1 -0
- app/mcp/gateway.py +230 -0
- app/mcp/policy.py +281 -0
- app/mcp/presets/development.yml +25 -0
- app/mcp/presets/filesystem.yml +18 -0
- app/mcp/stdio.py +142 -0
- app/platform/__init__.py +1 -0
- app/platform/alembic/__init__.py +2 -0
- app/platform/alembic/env.py +38 -0
- app/platform/alembic/script.py.mako +24 -0
- app/platform/alembic/versions/0001_initial_schema.py +18 -0
- app/platform/alembic/versions/__init__.py +2 -0
- app/platform/events.py +44 -0
- app/platform/maintenance.py +138 -0
- app/platform/migrations.py +24 -0
- app/platform/setup.py +92 -0
- app/providers/__init__.py +5 -0
- app/providers/base.py +23 -0
- app/providers/mock.py +169 -0
- app/providers/upstream.py +101 -0
- app/replay/__init__.py +1 -0
- app/replay/costs.py +37 -0
- app/replay/formats.py +87 -0
- app/replay/sdk.py +102 -0
- app/sandbox/__init__.py +2 -0
- app/sandbox/policy.py +22 -0
- app/sandbox/workspace.py +281 -0
- app/static/styles.css +327 -0
- app/templates/agents.html +48 -0
- app/templates/base.html +27 -0
- app/templates/dashboard.html +55 -0
- app/templates/demo.html +36 -0
- app/templates/mcp.html +69 -0
- app/templates/policies.html +30 -0
- app/templates/replay.html +63 -0
- app/templates/replay_compare.html +74 -0
- app/templates/replay_detail.html +130 -0
- app/templates/session_detail.html +71 -0
- app/templates/sessions.html +24 -0
- app/templates/settings.html +20 -0
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: agent-loop-guard-runtime
|
|
3
|
+
Version: 0.6.0a2
|
|
4
|
+
Summary: Local runtime guard for coding agents with loop detection and explainable policy decisions.
|
|
5
|
+
Author: Agent Loop Guard contributors
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Project-URL: Homepage, https://github.com/RIMUMURUDEV/agent-loop-guard
|
|
8
|
+
Project-URL: Repository, https://github.com/RIMUMURUDEV/agent-loop-guard.git
|
|
9
|
+
Project-URL: Issues, https://github.com/RIMUMURUDEV/agent-loop-guard/issues
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Environment :: Console
|
|
12
|
+
Classifier: Framework :: FastAPI
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
16
|
+
Classifier: Topic :: Software Development :: Testing
|
|
17
|
+
Classifier: Topic :: Security
|
|
18
|
+
Requires-Python: >=3.11
|
|
19
|
+
Description-Content-Type: text/markdown
|
|
20
|
+
License-File: LICENSE
|
|
21
|
+
Requires-Dist: alembic>=1.13
|
|
22
|
+
Requires-Dist: fastapi>=0.115
|
|
23
|
+
Requires-Dist: httpx>=0.27
|
|
24
|
+
Requires-Dist: jinja2>=3.1
|
|
25
|
+
Requires-Dist: jsonschema>=4.23
|
|
26
|
+
Requires-Dist: pydantic>=2.8
|
|
27
|
+
Requires-Dist: pyyaml>=6.0
|
|
28
|
+
Requires-Dist: sqlalchemy>=2.0
|
|
29
|
+
Requires-Dist: uvicorn[standard]>=0.30
|
|
30
|
+
Provides-Extra: mcp
|
|
31
|
+
Provides-Extra: bench
|
|
32
|
+
Requires-Dist: duckdb>=1.1; extra == "bench"
|
|
33
|
+
Requires-Dist: mlflow>=3.0; extra == "bench"
|
|
34
|
+
Requires-Dist: pyarrow>=17.0; extra == "bench"
|
|
35
|
+
Provides-Extra: sandbox
|
|
36
|
+
Provides-Extra: docs
|
|
37
|
+
Requires-Dist: mkdocs-material>=9.5; extra == "docs"
|
|
38
|
+
Provides-Extra: dev
|
|
39
|
+
Requires-Dist: coverage[toml]>=7.6; extra == "dev"
|
|
40
|
+
Requires-Dist: pytest>=8.3; extra == "dev"
|
|
41
|
+
Requires-Dist: pytest-asyncio>=0.24; extra == "dev"
|
|
42
|
+
Requires-Dist: respx>=0.21; extra == "dev"
|
|
43
|
+
Requires-Dist: ruff>=0.6; extra == "dev"
|
|
44
|
+
Dynamic: license-file
|
|
45
|
+
|
|
46
|
+
# Agent Loop Guard
|
|
47
|
+
|
|
48
|
+
[](https://github.com/RIMUMURUDEV/agent-loop-guard/actions/workflows/ci.yml)
|
|
49
|
+
[](https://rimumurudev.github.io/agent-loop-guard/)
|
|
50
|
+
[](https://www.python.org/)
|
|
51
|
+
[](LICENSE)
|
|
52
|
+
[](https://marketplace.visualstudio.com/items?itemName=RIMUMURUDEV.agent-loop-guard-vscode)
|
|
53
|
+
|
|
54
|
+
Agent Loop Guard is an Apache-2.0 local safety and observability toolkit for coding agents. It combines a loop guard, MCP permission firewall, session replay, deterministic benchmark lab, and a Docker-backed sandbox technical preview.
|
|
55
|
+
|
|
56
|
+
The default setup uses a local mock provider, so the demo works without an external API key.
|
|
57
|
+
|
|
58
|
+

|
|
59
|
+
|
|
60
|
+
## Install
|
|
61
|
+
|
|
62
|
+
Install the current alpha directly from GitHub. The installed command is `alg`:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
pipx install git+https://github.com/RIMUMURUDEV/agent-loop-guard.git
|
|
66
|
+
# or
|
|
67
|
+
uv tool install git+https://github.com/RIMUMURUDEV/agent-loop-guard.git
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Run once without a permanent installation:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
uvx --from git+https://github.com/RIMUMURUDEV/agent-loop-guard.git alg doctor
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
PyPI publication under the distribution name `agent-loop-guard-runtime` is planned after trusted publishing is configured. The project does not claim that an unpublished package is available.
|
|
77
|
+
|
|
78
|
+
For development from this checkout:
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
python -m venv .venv
|
|
82
|
+
.venv\Scripts\activate
|
|
83
|
+
pip install -e ".[dev]"
|
|
84
|
+
alg setup
|
|
85
|
+
alg doctor
|
|
86
|
+
alg guard run
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Open `http://127.0.0.1:8787`, then run Demo Lab or:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
alg demo exact-loop
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Default local gateway key:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
alg_demo_key
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Proxy Endpoints
|
|
102
|
+
|
|
103
|
+
OpenAI-compatible:
|
|
104
|
+
|
|
105
|
+
```text
|
|
106
|
+
POST /v1/responses
|
|
107
|
+
POST /v1/chat/completions
|
|
108
|
+
GET /v1/models
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Anthropic-compatible:
|
|
112
|
+
|
|
113
|
+
```text
|
|
114
|
+
POST /v1/messages
|
|
115
|
+
POST /v1/messages/count_tokens
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Connectivity probe:
|
|
119
|
+
|
|
120
|
+
```text
|
|
121
|
+
HEAD /
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Use `Authorization: Bearer alg_demo_key` or `x-api-key: alg_demo_key`.
|
|
125
|
+
|
|
126
|
+
`alg setup` creates a local YAML configuration and connection profiles for Codex, Claude Code, Cline, and OpenCode under `.agent-loop-guard/profiles`. Open `http://127.0.0.1:8787`, then run Demo Lab or `alg demo exact-loop`.
|
|
127
|
+
|
|
128
|
+
## Modules
|
|
129
|
+
|
|
130
|
+
```text
|
|
131
|
+
alg setup | doctor | status | open
|
|
132
|
+
alg guard run
|
|
133
|
+
alg mcp run | serve | validate-policy | test-server
|
|
134
|
+
alg replay import | export
|
|
135
|
+
alg bench dataset validate | run | compare | regression-check
|
|
136
|
+
alg sandbox create | exec | diff | apply | discard | export
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
- **Guard** detects exact request, tool, error, and sequence loops with Shadow and Enforce modes.
|
|
140
|
+
- **MCP Firewall** proxies stdio and Streamable HTTP, validates schemas, filters discovery, and applies YAML policies.
|
|
141
|
+
- **Replay** stores redacted traces, spans, events, costs, deterministic failure tags, and JSONL/OpenTelemetry exports.
|
|
142
|
+
- **Benchmark Lab** runs the bundled 30-task dataset through mock, HTTP, or CLI adapters and computes paired bootstrap confidence intervals.
|
|
143
|
+
- **Sandbox Preview** runs a copied workspace in a resource-limited Docker container and applies no changes before explicit approval.
|
|
144
|
+
|
|
145
|
+
Read the [public documentation](https://rimumurudev.github.io/agent-loop-guard/), [Architecture](docs/architecture.md), [Threat Model](docs/security.md), [Benchmark Guide](docs/guides/benchmark.md), and [Sandbox Guide](docs/guides/sandbox.md). A [Russian overview](docs/ru/index.md) is also available.
|
|
146
|
+
|
|
147
|
+
## Guard Behavior
|
|
148
|
+
|
|
149
|
+
The guard implements:
|
|
150
|
+
|
|
151
|
+
- exact repeated request detection
|
|
152
|
+
- repeated tool call detection
|
|
153
|
+
- repeated upstream error detection
|
|
154
|
+
- repeated request sequence detection
|
|
155
|
+
- request and token limits
|
|
156
|
+
- project-level Shadow and Enforce modes
|
|
157
|
+
- manual session and agent pause/resume
|
|
158
|
+
- metadata-only logging by default
|
|
159
|
+
- JSON session export and aggregate CSV export
|
|
160
|
+
- trace runs, spans, events, replay UI, JSON export, and run comparison
|
|
161
|
+
|
|
162
|
+
Shadow Mode flags suspicious requests without blocking. Enforce Mode blocks requests when a blocking rule triggers.
|
|
163
|
+
|
|
164
|
+
## MCP Firewall
|
|
165
|
+
|
|
166
|
+
Validate and run a stdio policy proxy:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
alg mcp validate-policy app/mcp/presets/filesystem.yml
|
|
170
|
+
alg mcp run --policy app/mcp/presets/filesystem.yml -- your-mcp-server
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
For Streamable HTTP, configure a server under `mcp.servers`, run `alg mcp serve`, and connect to `/mcp/{server_id}`. Approval requests appear at `/mcp`. Raw arguments and secrets are redacted; audit records store hashes and policy metadata.
|
|
174
|
+
|
|
175
|
+
## Session Replay
|
|
176
|
+
|
|
177
|
+
Every proxied model request now creates a replay trace automatically. Open:
|
|
178
|
+
|
|
179
|
+
```text
|
|
180
|
+
http://127.0.0.1:8787/replay
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
The Replay view shows trace runs, model request spans, policy decision events, token totals, duration, source session links, JSON export, and a simple two-run comparison.
|
|
184
|
+
|
|
185
|
+
Replay ingest API:
|
|
186
|
+
|
|
187
|
+
```text
|
|
188
|
+
POST /api/v1/traces
|
|
189
|
+
POST /api/v1/spans
|
|
190
|
+
POST /api/v1/events/batch
|
|
191
|
+
GET /api/v1/runs
|
|
192
|
+
GET /api/v1/runs/{trace_id}
|
|
193
|
+
GET /api/v1/runs/{trace_id}/export?format=json|jsonl|otel
|
|
194
|
+
POST /api/v1/runs/import
|
|
195
|
+
POST /api/v1/runs/{trace_id}/pin
|
|
196
|
+
POST /api/v1/compare
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
CLI transfer:
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
alg replay export TRACE_ID --format jsonl --output trace.jsonl
|
|
203
|
+
alg replay import trace.jsonl
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
## Benchmark Lab
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
alg bench dataset validate
|
|
210
|
+
alg bench run --adapter mock --candidate baseline --output baseline.jsonl
|
|
211
|
+
alg bench run --adapter mock --variant regressed --candidate candidate --output candidate.jsonl
|
|
212
|
+
alg bench regression-check baseline.jsonl candidate.jsonl
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Parquet, DuckDB, and MLflow are optional:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
pip install -e ".[bench]"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
The regression command exits `0` for no regression, `1` for a statistically supported regression, and `2` when the result is inconclusive.
|
|
222
|
+
|
|
223
|
+
## Sandbox Preview
|
|
224
|
+
|
|
225
|
+
Docker must be installed and running first. The original project is not mounted into the container; the sandbox uses a private copy.
|
|
226
|
+
|
|
227
|
+
```bash
|
|
228
|
+
alg sandbox create .
|
|
229
|
+
alg sandbox exec SANDBOX_ID -- pytest -q
|
|
230
|
+
alg sandbox diff SANDBOX_ID
|
|
231
|
+
alg sandbox apply SANDBOX_ID --path app/example.py
|
|
232
|
+
alg sandbox discard SANDBOX_ID
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Network is disabled by default. This is a defense-in-depth development tool, not a certified security boundary; read [the threat model](docs/security.md) before using it with untrusted code.
|
|
236
|
+
|
|
237
|
+
Minimal trace ingest example:
|
|
238
|
+
|
|
239
|
+
```bash
|
|
240
|
+
curl -X POST http://127.0.0.1:8787/api/v1/traces ^
|
|
241
|
+
-H "Content-Type: application/json" ^
|
|
242
|
+
-d "{\"trace_id\":\"demo_trace\",\"task_id\":\"demo\",\"spans\":[{\"name\":\"tool.call\",\"start_ns\":1,\"end_ns\":2000000}]}"
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Agent Setup
|
|
246
|
+
|
|
247
|
+
Codex CLI:
|
|
248
|
+
|
|
249
|
+
```toml
|
|
250
|
+
model = "demo-model"
|
|
251
|
+
model_provider = "agent_loop_guard"
|
|
252
|
+
|
|
253
|
+
[model_providers.agent_loop_guard]
|
|
254
|
+
name = "Agent Loop Guard"
|
|
255
|
+
base_url = "http://127.0.0.1:8787/v1"
|
|
256
|
+
env_key = "ALG_GATEWAY_KEY"
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Claude Code:
|
|
260
|
+
|
|
261
|
+
```bash
|
|
262
|
+
set ANTHROPIC_BASE_URL=http://127.0.0.1:8787
|
|
263
|
+
set ANTHROPIC_AUTH_TOKEN=alg_demo_key
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
OpenCode:
|
|
267
|
+
|
|
268
|
+
```json
|
|
269
|
+
{
|
|
270
|
+
"provider": {
|
|
271
|
+
"alg": {
|
|
272
|
+
"npm": "@ai-sdk/openai-compatible",
|
|
273
|
+
"name": "Agent Loop Guard",
|
|
274
|
+
"options": {
|
|
275
|
+
"baseURL": "http://127.0.0.1:8787/v1",
|
|
276
|
+
"apiKey": "{env:ALG_GATEWAY_KEY}"
|
|
277
|
+
},
|
|
278
|
+
"models": {
|
|
279
|
+
"demo-model": {"name": "Guarded model"}
|
|
280
|
+
}
|
|
281
|
+
}
|
|
282
|
+
},
|
|
283
|
+
"model": "alg/demo-model"
|
|
284
|
+
}
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
Cline:
|
|
288
|
+
|
|
289
|
+
```text
|
|
290
|
+
API Provider: OpenAI Compatible
|
|
291
|
+
Base URL: http://127.0.0.1:8787/v1
|
|
292
|
+
API Key: alg_demo_key
|
|
293
|
+
Model ID: demo-model
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
## VS Code Extension
|
|
297
|
+
|
|
298
|
+
The VS Code extension starts the local guard daemon, shows health in the status bar, opens dashboard and replay views, and copies agent connection settings.
|
|
299
|
+
|
|
300
|
+
Install it from the [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=RIMUMURUDEV.agent-loop-guard-vscode) or from the command line:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
code --install-extension RIMUMURUDEV.agent-loop-guard-vscode
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
Install the Python runtime first, then use `Agent Loop Guard: Setup Current Workspace`:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
pipx install git+https://github.com/RIMUMURUDEV/agent-loop-guard.git
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
Run the extension from source:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
cd extensions/vscode
|
|
316
|
+
npm run check
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
Then open this repository in VS Code, press `F5`, and run `Agent Loop Guard: Start Guard` in the Extension Development Host.
|
|
320
|
+
|
|
321
|
+
Package and install a local `.vsix`:
|
|
322
|
+
|
|
323
|
+
```bash
|
|
324
|
+
cd extensions/vscode
|
|
325
|
+
npm run package
|
|
326
|
+
code --install-extension agent-loop-guard-vscode-0.2.0.vsix
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
If `alg` is installed globally, keep `agentLoopGuard.startMode` as `cli`. To run from this checkout instead, set:
|
|
330
|
+
|
|
331
|
+
```json
|
|
332
|
+
{
|
|
333
|
+
"agentLoopGuard.startMode": "source",
|
|
334
|
+
"agentLoopGuard.pythonPath": ".venv\\Scripts\\python.exe",
|
|
335
|
+
"agentLoopGuard.sourcePath": "C:\\path\\to\\agent-loop-guard"
|
|
336
|
+
}
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
After the guard is running, point agents at:
|
|
340
|
+
|
|
341
|
+
```text
|
|
342
|
+
OpenAI base URL: http://127.0.0.1:8787/v1
|
|
343
|
+
Anthropic base URL: http://127.0.0.1:8787
|
|
344
|
+
API key: alg_demo_key
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
See `extensions/vscode/README.md` for all commands and settings.
|
|
348
|
+
|
|
349
|
+
## Configuration
|
|
350
|
+
|
|
351
|
+
Create a config file:
|
|
352
|
+
|
|
353
|
+
```bash
|
|
354
|
+
alg init --path agent-loop-guard.yml
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
Run with it:
|
|
358
|
+
|
|
359
|
+
```bash
|
|
360
|
+
alg run --config agent-loop-guard.yml
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Environment overrides include:
|
|
364
|
+
|
|
365
|
+
- `ALG_HOST`
|
|
366
|
+
- `ALG_PORT`
|
|
367
|
+
- `ALG_STORAGE_URL`
|
|
368
|
+
- `ALG_MODE`
|
|
369
|
+
- `ALG_PROVIDER`
|
|
370
|
+
- `ALG_GATEWAY_KEY`
|
|
371
|
+
- `ALG_OPENAI_BASE_URL`
|
|
372
|
+
- `OPENAI_API_KEY`
|
|
373
|
+
- `ALG_ANTHROPIC_BASE_URL`
|
|
374
|
+
- `ANTHROPIC_API_KEY`
|
|
375
|
+
|
|
376
|
+
## Development
|
|
377
|
+
|
|
378
|
+
```bash
|
|
379
|
+
pip install -e ".[dev,docs]"
|
|
380
|
+
pytest -q
|
|
381
|
+
ruff check .
|
|
382
|
+
mkdocs build --strict
|
|
383
|
+
```
|
|
384
|
+
|
|
385
|
+
Run the documentation site locally:
|
|
386
|
+
|
|
387
|
+
```bash
|
|
388
|
+
mkdocs serve
|
|
389
|
+
```
|
|
390
|
+
|
|
391
|
+
The full contributor workflow is in [CONTRIBUTING.md](CONTRIBUTING.md). Security assumptions and private reporting guidance are in [SECURITY.md](SECURITY.md).
|
|
392
|
+
|
|
393
|
+
Docker:
|
|
394
|
+
|
|
395
|
+
```bash
|
|
396
|
+
docker compose up --build
|
|
397
|
+
```
|
|
398
|
+
|
|
399
|
+
## Project Status
|
|
400
|
+
|
|
401
|
+
This repository is developed as an educational open-source project. Guard, MCP, Replay, and Benchmark are locally testable. Sandbox is a technical preview and its real Docker smoke-test runs only on Linux CI; it could not be executed on the current Windows machine because Docker is not installed. The VS Code extension is publicly available; PyPI publication still requires trusted-publisher account setup.
|
|
402
|
+
|
|
403
|
+
There is no telemetry, paid cloud, subscription, SLA, or closed feature set. Optional donations may be added later, but they do not influence architecture or priorities.
|
|
404
|
+
|
|
405
|
+
## Limits
|
|
406
|
+
|
|
407
|
+
The toolkit only sees traffic routed through it. It does not provide enterprise IAM, distributed leases, legal audit guarantees, a kernel-level isolation guarantee, or hidden chain-of-thought capture. Full Content Logging is off by default and should not be enabled for sensitive data unless the data owner understands the risk.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/licenses/LICENSE,sha256=z8d0m5b2O9McPEK1xHG_dWgUBT6EfBDz6wA0F7xSPTA,11358
|
|
2
|
+
app/__init__.py,sha256=oogkEKlNAxwypSElFATVWVs1QXz2acbBluLyFLz0sw4,83
|
|
3
|
+
app/cli.py,sha256=GyNL6KjFlSZLFWzYF-EQ37iAVYufkRkK6Q7Jxm2PQ80,24180
|
|
4
|
+
app/main.py,sha256=z9HR_tdMCGi-qLM0CSPAMTyM4FEMw-g0A78OxCgsIIU,2020
|
|
5
|
+
app/api/__init__.py,sha256=YcO0Yt92HhIyqoaZ9yPRoUD3AmZ7XaDM8T1UqOnvp2o,45
|
|
6
|
+
app/api/admin_routes.py,sha256=DA-zGL5ekyHkQoT94WO3t27A8SQqcYjKU9r7a6S9-_s,5853
|
|
7
|
+
app/api/anthropic_routes.py,sha256=0n_kxlaPhJy0tmI8vTuAe7QumofECxUnGWZYXs6wR4c,657
|
|
8
|
+
app/api/common.py,sha256=_my2F6JBk_c9_nBB_-vCqck8ui2lmZXgVkovXR7oD8k,15440
|
|
9
|
+
app/api/mcp_routes.py,sha256=dKJkWy5AzUxc17KzGsmz-oaJGz99caJjLm2FrBdPj_Y,9166
|
|
10
|
+
app/api/openai_routes.py,sha256=YaX02DdcV4e7N6XMLIvb-ZBS9kvrxIUkOXA7H9d_inM,823
|
|
11
|
+
app/api/replay_routes.py,sha256=dC4VpWFtLOMCthCLWOxqKS0iCAegCI8Kn8xLkO5FEYw,6587
|
|
12
|
+
app/api/ui_routes.py,sha256=YBTmE4uUZf-6LgzEGghlplcEwTdpijWqgP2ZKXdxzjg,10235
|
|
13
|
+
app/benchmark/__init__.py,sha256=SXuy4yEZ8IAYQF8a7RjsDDK0iuwJ-JWWPUu7o-RtspQ,59
|
|
14
|
+
app/benchmark/adapters.py,sha256=w6nS3dMOPzh6-PEhdyDTBMcJIHewnwd1YK1m7qCf1jg,3655
|
|
15
|
+
app/benchmark/dataset.py,sha256=BYOlSrZmJNRe9eOSwxVYGm8T9mGCUmwLhOxgloStwNM,2321
|
|
16
|
+
app/benchmark/models.py,sha256=EkA_YgMAuzcC0YaAPwfBVJALvHZ3-BOC6y0axd8xObk,958
|
|
17
|
+
app/benchmark/runner.py,sha256=5NFkAyUhTjeAelF104qT7jGaFnwRMoF_kf4M5w8yKAQ,2275
|
|
18
|
+
app/benchmark/scorers.py,sha256=CatZTpLlLwSRep5iLHOIwn9v9rjsY-GIjzJRVk-Prqs,1262
|
|
19
|
+
app/benchmark/statistics.py,sha256=AXOKHs9Ab6uVNIrHidsSXms6OHP3oPGc8-F8nOo_8eg,1849
|
|
20
|
+
app/benchmark/storage.py,sha256=-3fRiJAH3924Co7bc4UVok64h5EJuFUgCbsOs9KzVoI,2994
|
|
21
|
+
app/benchmark/data/starter-v1.json,sha256=NyeXXn19X35oGk9WWlJ9CGT2XWAF1fBV1LleJ2HNZQc,4881
|
|
22
|
+
app/core/config.py,sha256=8G20nUOCTAVEQQeXxbnAul-sAMOHQQi7_3rxCKbPwqo,6669
|
|
23
|
+
app/core/demo.py,sha256=WBtV1Yhq49lSNbF1p3VN7vEgE0eQwsoEnRHMkLLam-I,4765
|
|
24
|
+
app/core/loop_detector.py,sha256=gLghTn5I9o2AXwwccuagPGLtN94w7-EWSgTbGEI5alY,3972
|
|
25
|
+
app/core/policy_engine.py,sha256=FjNVl2Jc5FERJ1PpOMHPZB7uepQB8cLs6LUfIpjYrMw,5206
|
|
26
|
+
app/core/redaction.py,sha256=DTyhVwsT1y0WSS-Q1l3pUM_VwDVwmcmVS3jzgeStOm0,2549
|
|
27
|
+
app/core/security.py,sha256=sL5VQps5Zkk5aqldCL2Wa3HTicWyib0Sry2yeFiquKQ,1569
|
|
28
|
+
app/core/token_meter.py,sha256=OAzaj8xgHRQgwI3OI0QIScjoHd5rdo9WpoU-esZJoYs,2181
|
|
29
|
+
app/db/models.py,sha256=siAyoJ8ac3L5HHjah-V2lsj4c8YUdebRtgtL7S30Gxk,16091
|
|
30
|
+
app/db/repository.py,sha256=kPWN1DhhGXUf4ClCpqiUREt_TENW9zZb-AtMV8WRH6A,54697
|
|
31
|
+
app/db/session.py,sha256=pE-gXacoozOg_pJszqCOWsOSbscRBrwqqtuSSud_2tA,1983
|
|
32
|
+
app/mcp/__init__.py,sha256=b_xc4UsQpfB2CehcQr1Byc11_zmtzWNnxDGdt-altMY,31
|
|
33
|
+
app/mcp/gateway.py,sha256=1icb_HA7VcGnYRjAr-R83YBFOzbELTo4XCn4zHocvfQ,8179
|
|
34
|
+
app/mcp/policy.py,sha256=a6O8Dl8MW3n1xRqu1S4fGoCueadiQ0uQcxY3TmOxnvQ,11079
|
|
35
|
+
app/mcp/stdio.py,sha256=OHRcJBmEtMlAw_14Qb8Me9H5gy9_LIaVu2JgOG5L6I4,4763
|
|
36
|
+
app/mcp/presets/development.yml,sha256=Fvbgzy0xWhmSxobh47uCV9A3a3xKzgFX_S7aa6bz-5w,609
|
|
37
|
+
app/mcp/presets/filesystem.yml,sha256=3_yjw4aZjutPoLUH424FldS31_OhfHvUWB33_E-2KTQ,344
|
|
38
|
+
app/platform/__init__.py,sha256=UMNWxAZweIYcX43z3gAwmq-2smNjo1aGQn2E_f5A8WU,70
|
|
39
|
+
app/platform/events.py,sha256=6bLo-fdvPdRjUmcD0YK6q1LfUwdbkUwfOs06m6KO8PM,1593
|
|
40
|
+
app/platform/maintenance.py,sha256=sJ0wKUJR1i4UKPwhbOmiJ4IQe1jiHSk2ZiCwYHG_0tI,5545
|
|
41
|
+
app/platform/migrations.py,sha256=FagKyZHYc6RuF2u-4kbfoYL6ikkr5txO12Z6SkjeS0M,805
|
|
42
|
+
app/platform/setup.py,sha256=cZlNXtpUStQ69D3LwDkIDpMmFLxAExH7aBDQHLAVPF4,3152
|
|
43
|
+
app/platform/alembic/__init__.py,sha256=WhdnO3IM31nUscIpCqXuqEO09_8NgTd4WeEI19j9J6Y,47
|
|
44
|
+
app/platform/alembic/env.py,sha256=WNj__PtycndEw4aRWj3Z0H2IC66WvYXr_2E5hTuZY-U,1019
|
|
45
|
+
app/platform/alembic/script.py.mako,sha256=wg9quS1O0213-8y4K8QQzSztQvLBYu67Q93UWuk92Q4,593
|
|
46
|
+
app/platform/alembic/versions/0001_initial_schema.py,sha256=GmU2v1yXt2bh7nlU9xaPxoHEVN198k0zWlFCrlDi9P8,341
|
|
47
|
+
app/platform/alembic/versions/__init__.py,sha256=6ja204fWWHirg76cganpr0BaGZDBv2fs-ShWfPkU8TQ,34
|
|
48
|
+
app/providers/__init__.py,sha256=q0VgMrA8tvBbUCKxDl4eabkSqj0SRQEUXEQdG-XWqoQ,242
|
|
49
|
+
app/providers/base.py,sha256=Rtevlaf4Y8ppjp_ThLI2MoJnsjNM-MLUALcDwQJUHXs,489
|
|
50
|
+
app/providers/mock.py,sha256=80NZVvVltS-sB8kMF5GK4Gj_m-7SCHBZh521VC97p5Q,6920
|
|
51
|
+
app/providers/upstream.py,sha256=F6WKEACwHamH2kA50BnB6lxZpPLn72Nlam13GeBrtAk,3392
|
|
52
|
+
app/replay/__init__.py,sha256=Kuxm1lqqYZKKIyJTzF31FQs1sYDGLwCPSkv5dyduRp0,45
|
|
53
|
+
app/replay/costs.py,sha256=7SkGtb-Sfg8O51nUO1hhSl9rC8T5LWqJGVkb_TVFYO0,1272
|
|
54
|
+
app/replay/formats.py,sha256=HF_t1midqoJ_MmNv9VXRsSpABdY3L9ere6tr9uOHJ20,3495
|
|
55
|
+
app/replay/sdk.py,sha256=UzPQL88IVPaq2X5DkoLt7lWdo1Pua1VYnbEw3tdkJKY,3308
|
|
56
|
+
app/sandbox/__init__.py,sha256=rB22ZTD7RIQmsIOYDQFHFtnRIP9UsFZM8IWPwczijhI,61
|
|
57
|
+
app/sandbox/policy.py,sha256=7FKSMGq-pM1SGdffxdpx8w7nNI1KEMjO01cX5fqbh-0,599
|
|
58
|
+
app/sandbox/workspace.py,sha256=F7_uyS6-qgVP1K-a_s3sLmi3ReX2_E1Zh7e3DWWg9gU,10072
|
|
59
|
+
app/static/styles.css,sha256=IncabQ-rJbYFfv0ZTutre-VqQ79QjBIDIMmdJ0bpaTg,4667
|
|
60
|
+
app/templates/agents.html,sha256=vjCgw74ucRfTCrv2RuI6S1vD9uNltTqoFsM7CtiIsHw,1601
|
|
61
|
+
app/templates/base.html,sha256=laoYBQlQoJTnrtikTgqh4yI1aTw1oLejBTXVJEbtgwk,758
|
|
62
|
+
app/templates/dashboard.html,sha256=szFF8oV7nTT8FBN1KLXkBrKPwzwoFXrsqDBmI-DiSSM,2566
|
|
63
|
+
app/templates/demo.html,sha256=f878WxBmtVL36PRzPwtyg9E-Emh40Bl_nxNd7-0mULI,1182
|
|
64
|
+
app/templates/mcp.html,sha256=F1Ihh3-TtkqZyivWcsH7Xvn-Sj_2YetOUiz4BAAEvxc,2611
|
|
65
|
+
app/templates/policies.html,sha256=N7VXX7yeI-NP3VDLxaIvpR-xArHJV08WYcOY6drK7EU,1320
|
|
66
|
+
app/templates/replay.html,sha256=sAnKkEPg1FUAa2ZkeEKcWDHYNhhOo_u6TkzokfxJkPM,2017
|
|
67
|
+
app/templates/replay_compare.html,sha256=BR8MjjS5afE8qQvU5txq7zEb6ak4lOsGUr-zbVxnh4U,2395
|
|
68
|
+
app/templates/replay_detail.html,sha256=MC1qs1dVf7xFLk3o_ZQFJb8Vy1ra4eyfOwyiBfFG68w,4995
|
|
69
|
+
app/templates/session_detail.html,sha256=Kc6H-B7MwjkhS3awj5hJrWBVTCTg55hyWS3ClSUPSvE,2635
|
|
70
|
+
app/templates/sessions.html,sha256=LvvgzxkrQwg8-q51CuboxLHM4psBCnlOjlX8jYALvPQ,918
|
|
71
|
+
app/templates/settings.html,sha256=Zc-KhuXqhBhPzfX_uvVxvVQ0cn1RUCFzc7A8NbXmH4c,914
|
|
72
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/METADATA,sha256=cClkrV0hpYIMkz7R7FkjvVchWo63Gztq7opR7LnCurg,12539
|
|
73
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
|
|
74
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/entry_points.txt,sha256=Y2Dgxr9VzbxhAABs3iGKEKvToXhwWJqBSEpnoZKNQyw,37
|
|
75
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/top_level.txt,sha256=io9g7LCbfmTG1SFKgEOGXmCFB9uMP2H5lerm0HiHWQE,4
|
|
76
|
+
agent_loop_guard_runtime-0.6.0a2.dist-info/RECORD,,
|