dmint-cli 1.0.1__tar.gz → 1.0.3__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.
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/CHANGELOG.md +11 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/PKG-INFO +31 -4
- dmint_cli-1.0.1/src/dmint_cli.egg-info/PKG-INFO → dmint_cli-1.0.3/README.md +28 -28
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/pyproject.toml +3 -1
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/__main__.py +9 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/create_policy.py +17 -27
- dmint_cli-1.0.3/src/dmint_cli/dashboard.py +27 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/version.py +1 -1
- dmint_cli-1.0.1/README.md → dmint_cli-1.0.3/src/dmint_cli.egg-info/PKG-INFO +55 -3
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/SOURCES.txt +1 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/requires.txt +2 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/LICENSE +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/MANIFEST.in +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/setup.cfg +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/setup.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/__init__.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/api.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/compile_policy.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/create_mcp_policy.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/errors.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/install_skill.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/io_utils.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/limits.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_auth.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_connections.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_credentials.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_oauth.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/prompts/__init__.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/prompts/policy_skill.md +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/skills/__init__.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/skills/dmint-policy-manager/SKILL.md +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/verify_policy.py +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/dependency_links.txt +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/entry_points.txt +0 -0
- {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/top_level.txt +0 -0
|
@@ -5,6 +5,17 @@ All notable changes to `dmint-cli` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.3] - 2026-09-17
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
- Bump patch version for PyPI release.
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
- **Dashboard Command (`dmint dashboard`)**:
|
|
15
|
+
- Integrated local human approval dashboard launcher connecting to Core-owned SQLite.
|
|
16
|
+
- Added CLI options: `--db-path`, `--host`, `--port`, `--deployment-epoch`, `--authority-issuer`, `--approver-id`.
|
|
17
|
+
- Added runtime dependency on `dmint-dashboard>=1.0.0,<2.0.0`.
|
|
18
|
+
|
|
8
19
|
## [1.0.1] - 2026-09-16
|
|
9
20
|
|
|
10
21
|
### Changed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dmint-cli
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.3
|
|
4
4
|
Summary: CLI tooling for Dmint policy creation, compilation, and management
|
|
5
5
|
Author: Dmint Authors
|
|
6
6
|
License-Expression: Apache-2.0
|
|
@@ -19,11 +19,13 @@ Description-Content-Type: text/markdown
|
|
|
19
19
|
License-File: LICENSE
|
|
20
20
|
Requires-Dist: dmint<2.0.0,>=1.0.0
|
|
21
21
|
Requires-Dist: mcp<3.0.0,>=2.2.0
|
|
22
|
+
Requires-Dist: dmint-dashboard<2.0.0,>=1.0.0
|
|
23
|
+
Requires-Dist: questionary>=2.0.0
|
|
22
24
|
Provides-Extra: test
|
|
23
25
|
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
24
26
|
Dynamic: license-file
|
|
25
27
|
|
|
26
|
-
# dmint-cli (v1.0.
|
|
28
|
+
# dmint-cli (v1.0.3)
|
|
27
29
|
|
|
28
30
|
> **Developer tooling for interactive discovery, authoring, compilation, and offline verification of Dmint security policies and MCP protection artifacts.**
|
|
29
31
|
|
|
@@ -138,7 +140,7 @@ Verify your installation and version:
|
|
|
138
140
|
|
|
139
141
|
```bash
|
|
140
142
|
dmint --version
|
|
141
|
-
# dmint 1.0.
|
|
143
|
+
# dmint 1.0.3
|
|
142
144
|
```
|
|
143
145
|
|
|
144
146
|
### 3-Step Walkthrough
|
|
@@ -290,6 +292,31 @@ When run without `--dest`, `dmint install-skill` displays a numbered menu and al
|
|
|
290
292
|
|
|
291
293
|
---
|
|
292
294
|
|
|
295
|
+
### Human Approval Dashboard (`dashboard`)
|
|
296
|
+
|
|
297
|
+
Launch the local human approval web dashboard directly via the CLI:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Launch dashboard pointing to Core-owned SQLite:
|
|
301
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3
|
|
302
|
+
|
|
303
|
+
# Custom bind host and port:
|
|
304
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --host 127.0.0.1 --port 8080
|
|
305
|
+
|
|
306
|
+
# With specific deployment epoch:
|
|
307
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --deployment-epoch prod-v1
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Available options:
|
|
311
|
+
- `--db-path`: Path to Core-owned SQLite database (required, or set `DMINT_DB_PATH`)
|
|
312
|
+
- `--host`: Bind host (default: `127.0.0.1`)
|
|
313
|
+
- `--port`: Bind port (default: `8080`)
|
|
314
|
+
- `--deployment-epoch`: Core deployment epoch (default: `default`)
|
|
315
|
+
- `--authority-issuer`: Issuer ID for the dashboard `LocalApprovalAuthority` (default: `dmint-dashboard`)
|
|
316
|
+
- `--approver-id`: Human subject ID recorded in Core when approving/rejecting (default: `dashboard-human`)
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
293
320
|
## 8. stdio MCP Transport
|
|
294
321
|
|
|
295
322
|
For local tool servers, `dmint-cli` connects over standard input/output (`stdio`):
|
|
@@ -322,7 +349,7 @@ When an MCP endpoint responds with `401 Unauthorized` or `403 Forbidden`:
|
|
|
322
349
|
1. **RFC 9728 PRM Discovery**: Looks for the `WWW-Authenticate` header and resolves Protected Resource Metadata (PRM) via `/.well-known/oauth-protected-resource`.
|
|
323
350
|
2. **RFC 8414 AS Discovery**: Resolves the OAuth 2.0 Authorization Server metadata via `/.well-known/oauth-authorization-server`.
|
|
324
351
|
3. **Issuer Validation**: Enforces RFC 9207 issuer matching to prevent authorization server mix-up attacks.
|
|
325
|
-
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.
|
|
352
|
+
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.3"`.
|
|
326
353
|
|
|
327
354
|
---
|
|
328
355
|
|
|
@@ -1,29 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
Name: dmint-cli
|
|
3
|
-
Version: 1.0.1
|
|
4
|
-
Summary: CLI tooling for Dmint policy creation, compilation, and management
|
|
5
|
-
Author: Dmint Authors
|
|
6
|
-
License-Expression: Apache-2.0
|
|
7
|
-
Classifier: Development Status :: 5 - Production/Stable
|
|
8
|
-
Classifier: Environment :: Console
|
|
9
|
-
Classifier: Intended Audience :: Developers
|
|
10
|
-
Classifier: Operating System :: OS Independent
|
|
11
|
-
Classifier: Programming Language :: Python :: 3
|
|
12
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
-
Classifier: Topic :: Security
|
|
16
|
-
Classifier: Topic :: Software Development :: Compilers
|
|
17
|
-
Requires-Python: >=3.10
|
|
18
|
-
Description-Content-Type: text/markdown
|
|
19
|
-
License-File: LICENSE
|
|
20
|
-
Requires-Dist: dmint<2.0.0,>=1.0.0
|
|
21
|
-
Requires-Dist: mcp<3.0.0,>=2.2.0
|
|
22
|
-
Provides-Extra: test
|
|
23
|
-
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
24
|
-
Dynamic: license-file
|
|
25
|
-
|
|
26
|
-
# dmint-cli (v1.0.1)
|
|
1
|
+
# dmint-cli (v1.0.3)
|
|
27
2
|
|
|
28
3
|
> **Developer tooling for interactive discovery, authoring, compilation, and offline verification of Dmint security policies and MCP protection artifacts.**
|
|
29
4
|
|
|
@@ -138,7 +113,7 @@ Verify your installation and version:
|
|
|
138
113
|
|
|
139
114
|
```bash
|
|
140
115
|
dmint --version
|
|
141
|
-
# dmint 1.0.
|
|
116
|
+
# dmint 1.0.3
|
|
142
117
|
```
|
|
143
118
|
|
|
144
119
|
### 3-Step Walkthrough
|
|
@@ -290,6 +265,31 @@ When run without `--dest`, `dmint install-skill` displays a numbered menu and al
|
|
|
290
265
|
|
|
291
266
|
---
|
|
292
267
|
|
|
268
|
+
### Human Approval Dashboard (`dashboard`)
|
|
269
|
+
|
|
270
|
+
Launch the local human approval web dashboard directly via the CLI:
|
|
271
|
+
|
|
272
|
+
```bash
|
|
273
|
+
# Launch dashboard pointing to Core-owned SQLite:
|
|
274
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3
|
|
275
|
+
|
|
276
|
+
# Custom bind host and port:
|
|
277
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --host 127.0.0.1 --port 8080
|
|
278
|
+
|
|
279
|
+
# With specific deployment epoch:
|
|
280
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --deployment-epoch prod-v1
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Available options:
|
|
284
|
+
- `--db-path`: Path to Core-owned SQLite database (required, or set `DMINT_DB_PATH`)
|
|
285
|
+
- `--host`: Bind host (default: `127.0.0.1`)
|
|
286
|
+
- `--port`: Bind port (default: `8080`)
|
|
287
|
+
- `--deployment-epoch`: Core deployment epoch (default: `default`)
|
|
288
|
+
- `--authority-issuer`: Issuer ID for the dashboard `LocalApprovalAuthority` (default: `dmint-dashboard`)
|
|
289
|
+
- `--approver-id`: Human subject ID recorded in Core when approving/rejecting (default: `dashboard-human`)
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
293
|
## 8. stdio MCP Transport
|
|
294
294
|
|
|
295
295
|
For local tool servers, `dmint-cli` connects over standard input/output (`stdio`):
|
|
@@ -322,7 +322,7 @@ When an MCP endpoint responds with `401 Unauthorized` or `403 Forbidden`:
|
|
|
322
322
|
1. **RFC 9728 PRM Discovery**: Looks for the `WWW-Authenticate` header and resolves Protected Resource Metadata (PRM) via `/.well-known/oauth-protected-resource`.
|
|
323
323
|
2. **RFC 8414 AS Discovery**: Resolves the OAuth 2.0 Authorization Server metadata via `/.well-known/oauth-authorization-server`.
|
|
324
324
|
3. **Issuer Validation**: Enforces RFC 9207 issuer matching to prevent authorization server mix-up attacks.
|
|
325
|
-
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.
|
|
325
|
+
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.3"`.
|
|
326
326
|
|
|
327
327
|
---
|
|
328
328
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dmint-cli"
|
|
7
|
-
version = "1.0.
|
|
7
|
+
version = "1.0.3"
|
|
8
8
|
description = "CLI tooling for Dmint policy creation, compilation, and management"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "Apache-2.0"
|
|
@@ -27,6 +27,8 @@ classifiers = [
|
|
|
27
27
|
dependencies = [
|
|
28
28
|
"dmint>=1.0.0,<2.0.0",
|
|
29
29
|
"mcp>=2.2.0,<3.0.0",
|
|
30
|
+
"dmint-dashboard>=1.0.0,<2.0.0",
|
|
31
|
+
"questionary>=2.0.0",
|
|
30
32
|
]
|
|
31
33
|
|
|
32
34
|
[project.optional-dependencies]
|
|
@@ -8,6 +8,7 @@ import sys
|
|
|
8
8
|
from dmint_cli.compile_policy import main_compile
|
|
9
9
|
from dmint_cli.create_mcp_policy import main_create_mcp
|
|
10
10
|
from dmint_cli.create_policy import main_create
|
|
11
|
+
from dmint_cli.dashboard import main_dashboard
|
|
11
12
|
from dmint_cli.install_skill import main_install_skill
|
|
12
13
|
from dmint_cli.verify_policy import main_verify
|
|
13
14
|
from dmint_cli.version import __version__
|
|
@@ -73,6 +74,7 @@ Recommended Workflow:
|
|
|
73
74
|
create-mcp-policy Specialized MCP workflow: live tool discovery + policy authoring + mcp_protection.json generation
|
|
74
75
|
verify-policy Deterministic offline validation of policy.json against Dmint schema and invariants (LLM-free)
|
|
75
76
|
install-skill Install Dmint AI coding agent skill into workspace (.agents/skills/) or global config
|
|
77
|
+
dashboard Launch the local human approval dashboard (connects to Core SQLite)
|
|
76
78
|
|
|
77
79
|
Compatibility Commands:
|
|
78
80
|
compile-policy [Compatibility] Legacy batch compilation of policy requirements (prefer 'create-policy')
|
|
@@ -108,6 +110,11 @@ Compatibility Commands:
|
|
|
108
110
|
help="Install Dmint AI coding agent skill into workspace (.agents/skills/) or global config",
|
|
109
111
|
add_help=False,
|
|
110
112
|
)
|
|
113
|
+
subparsers.add_parser(
|
|
114
|
+
"dashboard",
|
|
115
|
+
help="Launch the local human approval dashboard (connects to Core SQLite)",
|
|
116
|
+
add_help=False,
|
|
117
|
+
)
|
|
111
118
|
subparsers.add_parser(
|
|
112
119
|
"compile-policy",
|
|
113
120
|
help="[Compatibility] Legacy batch compilation of policy requirements (prefer 'create-policy')",
|
|
@@ -140,6 +147,8 @@ Compatibility Commands:
|
|
|
140
147
|
return main_compile(cmd_args)
|
|
141
148
|
elif cmd == "install-skill":
|
|
142
149
|
return main_install_skill(cmd_args)
|
|
150
|
+
elif cmd == "dashboard":
|
|
151
|
+
return main_dashboard(cmd_args)
|
|
143
152
|
else:
|
|
144
153
|
parser.print_help(file=sys.stderr)
|
|
145
154
|
return 2
|
|
@@ -7,6 +7,7 @@ import ast
|
|
|
7
7
|
import getpass
|
|
8
8
|
import json
|
|
9
9
|
import sys
|
|
10
|
+
import questionary
|
|
10
11
|
from pathlib import Path
|
|
11
12
|
from typing import Any
|
|
12
13
|
|
|
@@ -186,19 +187,22 @@ def run_create_policy_wizard(
|
|
|
186
187
|
policy_text = f"[DISCOVERED TOOL DECLARATIONS VIA AST IN {Path(tools_file).name}]\n{tools_summary}\n\n[HUMAN SECURITY REQUIREMENTS]\n{policy_text}"
|
|
187
188
|
|
|
188
189
|
# 1. Provider & Key setup
|
|
189
|
-
selected_provider = (provider or "").lower().strip()
|
|
190
190
|
if is_tty and not selected_provider:
|
|
191
|
-
|
|
192
|
-
|
|
191
|
+
selected_provider = questionary.select(
|
|
192
|
+
"Select provider",
|
|
193
|
+
choices=["openai", "gemini", "groq", "openrouter", "ollama", "custom"],
|
|
194
|
+
default="openai"
|
|
195
|
+
).ask()
|
|
193
196
|
elif not selected_provider:
|
|
194
197
|
selected_provider = "openai"
|
|
195
198
|
|
|
196
199
|
resolved_key = resolve_api_key(api_key, selected_provider)
|
|
197
200
|
if is_tty and not resolved_key and selected_provider != "ollama":
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
201
|
+
resolved_key = questionary.password(
|
|
202
|
+
f"Enter API Key for {selected_provider} (leave blank if using env var):"
|
|
203
|
+
).ask()
|
|
204
|
+
if resolved_key:
|
|
205
|
+
api_key = resolved_key
|
|
202
206
|
|
|
203
207
|
# 2. Model Discovery & Selection
|
|
204
208
|
client = OpenAICompatClient(
|
|
@@ -213,28 +217,14 @@ def run_create_policy_wizard(
|
|
|
213
217
|
if is_tty and not selected_model:
|
|
214
218
|
try:
|
|
215
219
|
available_models = client.list_models()
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
default_m = available_models[0]
|
|
223
|
-
choice = input(f"\nSelect model number (1-{min(len(available_models), 15)}) or type model ID [default: {default_m}]: ").strip()
|
|
224
|
-
if choice.isdigit():
|
|
225
|
-
c_idx = int(choice) - 1
|
|
226
|
-
if 0 <= c_idx < len(available_models):
|
|
227
|
-
selected_model = available_models[c_idx]
|
|
228
|
-
else:
|
|
229
|
-
selected_model = default_m
|
|
230
|
-
elif choice:
|
|
231
|
-
selected_model = choice
|
|
232
|
-
else:
|
|
233
|
-
selected_model = default_m
|
|
220
|
+
selected_model = questionary.select(
|
|
221
|
+
"Select model",
|
|
222
|
+
choices=available_models,
|
|
223
|
+
default=available_models[0] if available_models else "gpt-4o-mini"
|
|
224
|
+
).ask()
|
|
234
225
|
except Exception as exc:
|
|
235
226
|
print(f"\n[!] Could not list models: {exc}. Please enter model ID manually.")
|
|
236
|
-
|
|
237
|
-
selected_model = manual_m or "gpt-4o-mini"
|
|
227
|
+
selected_model = questionary.text("Enter model ID [default: gpt-4o-mini]:", default="gpt-4o-mini").ask()
|
|
238
228
|
elif not selected_model:
|
|
239
229
|
selected_model = "gpt-4o-mini"
|
|
240
230
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"""Dashboard launcher for dmint CLI."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def main_dashboard(args: list[str] | None = None) -> int:
|
|
9
|
+
"""Launch the Dmint local human approval dashboard."""
|
|
10
|
+
try:
|
|
11
|
+
from dmint_dashboard import main as dashboard_main
|
|
12
|
+
except ImportError as exc:
|
|
13
|
+
print(
|
|
14
|
+
f"Error: dmint-dashboard is required for this command: {exc}\n"
|
|
15
|
+
f"Install it with: pip install dmint-dashboard",
|
|
16
|
+
file=sys.stderr,
|
|
17
|
+
)
|
|
18
|
+
return 1
|
|
19
|
+
|
|
20
|
+
try:
|
|
21
|
+
dashboard_main(argv=args, prog="dmint dashboard")
|
|
22
|
+
return 0
|
|
23
|
+
except SystemExit as exc:
|
|
24
|
+
return exc.code if isinstance(exc.code, int) else (0 if exc.code is None else 1)
|
|
25
|
+
except Exception as exc:
|
|
26
|
+
print(f"Error starting dashboard: {exc}", file=sys.stderr)
|
|
27
|
+
return 1
|
|
@@ -6,7 +6,7 @@ Single source of truth for package version, User-Agent strings, and client metad
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
# Canonical package version (single source of truth for runtime code)
|
|
9
|
-
__version__ = "1.0.
|
|
9
|
+
__version__ = "1.0.3"
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
def get_user_agent(component: str | None = None) -> str:
|
|
@@ -1,4 +1,31 @@
|
|
|
1
|
-
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: dmint-cli
|
|
3
|
+
Version: 1.0.3
|
|
4
|
+
Summary: CLI tooling for Dmint policy creation, compilation, and management
|
|
5
|
+
Author: Dmint Authors
|
|
6
|
+
License-Expression: Apache-2.0
|
|
7
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
8
|
+
Classifier: Environment :: Console
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: Operating System :: OS Independent
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
15
|
+
Classifier: Topic :: Security
|
|
16
|
+
Classifier: Topic :: Software Development :: Compilers
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Description-Content-Type: text/markdown
|
|
19
|
+
License-File: LICENSE
|
|
20
|
+
Requires-Dist: dmint<2.0.0,>=1.0.0
|
|
21
|
+
Requires-Dist: mcp<3.0.0,>=2.2.0
|
|
22
|
+
Requires-Dist: dmint-dashboard<2.0.0,>=1.0.0
|
|
23
|
+
Requires-Dist: questionary>=2.0.0
|
|
24
|
+
Provides-Extra: test
|
|
25
|
+
Requires-Dist: pytest>=8.0.0; extra == "test"
|
|
26
|
+
Dynamic: license-file
|
|
27
|
+
|
|
28
|
+
# dmint-cli (v1.0.3)
|
|
2
29
|
|
|
3
30
|
> **Developer tooling for interactive discovery, authoring, compilation, and offline verification of Dmint security policies and MCP protection artifacts.**
|
|
4
31
|
|
|
@@ -113,7 +140,7 @@ Verify your installation and version:
|
|
|
113
140
|
|
|
114
141
|
```bash
|
|
115
142
|
dmint --version
|
|
116
|
-
# dmint 1.0.
|
|
143
|
+
# dmint 1.0.3
|
|
117
144
|
```
|
|
118
145
|
|
|
119
146
|
### 3-Step Walkthrough
|
|
@@ -265,6 +292,31 @@ When run without `--dest`, `dmint install-skill` displays a numbered menu and al
|
|
|
265
292
|
|
|
266
293
|
---
|
|
267
294
|
|
|
295
|
+
### Human Approval Dashboard (`dashboard`)
|
|
296
|
+
|
|
297
|
+
Launch the local human approval web dashboard directly via the CLI:
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
# Launch dashboard pointing to Core-owned SQLite:
|
|
301
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3
|
|
302
|
+
|
|
303
|
+
# Custom bind host and port:
|
|
304
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --host 127.0.0.1 --port 8080
|
|
305
|
+
|
|
306
|
+
# With specific deployment epoch:
|
|
307
|
+
dmint dashboard --db-path /path/to/approvals.sqlite3 --deployment-epoch prod-v1
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
Available options:
|
|
311
|
+
- `--db-path`: Path to Core-owned SQLite database (required, or set `DMINT_DB_PATH`)
|
|
312
|
+
- `--host`: Bind host (default: `127.0.0.1`)
|
|
313
|
+
- `--port`: Bind port (default: `8080`)
|
|
314
|
+
- `--deployment-epoch`: Core deployment epoch (default: `default`)
|
|
315
|
+
- `--authority-issuer`: Issuer ID for the dashboard `LocalApprovalAuthority` (default: `dmint-dashboard`)
|
|
316
|
+
- `--approver-id`: Human subject ID recorded in Core when approving/rejecting (default: `dashboard-human`)
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
268
320
|
## 8. stdio MCP Transport
|
|
269
321
|
|
|
270
322
|
For local tool servers, `dmint-cli` connects over standard input/output (`stdio`):
|
|
@@ -297,7 +349,7 @@ When an MCP endpoint responds with `401 Unauthorized` or `403 Forbidden`:
|
|
|
297
349
|
1. **RFC 9728 PRM Discovery**: Looks for the `WWW-Authenticate` header and resolves Protected Resource Metadata (PRM) via `/.well-known/oauth-protected-resource`.
|
|
298
350
|
2. **RFC 8414 AS Discovery**: Resolves the OAuth 2.0 Authorization Server metadata via `/.well-known/oauth-authorization-server`.
|
|
299
351
|
3. **Issuer Validation**: Enforces RFC 9207 issuer matching to prevent authorization server mix-up attacks.
|
|
300
|
-
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.
|
|
352
|
+
4. **Dynamic Client Registration**: Performs RFC 7591 Dynamic Client Registration if the server supports it, advertising `client_name="dmint-cli"` and `software_version="1.0.3"`.
|
|
301
353
|
|
|
302
354
|
---
|
|
303
355
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|