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.
Files changed (35) hide show
  1. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/CHANGELOG.md +11 -0
  2. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/PKG-INFO +31 -4
  3. dmint_cli-1.0.1/src/dmint_cli.egg-info/PKG-INFO → dmint_cli-1.0.3/README.md +28 -28
  4. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/pyproject.toml +3 -1
  5. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/__main__.py +9 -0
  6. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/create_policy.py +17 -27
  7. dmint_cli-1.0.3/src/dmint_cli/dashboard.py +27 -0
  8. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/version.py +1 -1
  9. dmint_cli-1.0.1/README.md → dmint_cli-1.0.3/src/dmint_cli.egg-info/PKG-INFO +55 -3
  10. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/SOURCES.txt +1 -0
  11. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/requires.txt +2 -0
  12. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/LICENSE +0 -0
  13. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/MANIFEST.in +0 -0
  14. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/setup.cfg +0 -0
  15. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/setup.py +0 -0
  16. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/__init__.py +0 -0
  17. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/api.py +0 -0
  18. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/compile_policy.py +0 -0
  19. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/create_mcp_policy.py +0 -0
  20. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/errors.py +0 -0
  21. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/install_skill.py +0 -0
  22. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/io_utils.py +0 -0
  23. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/limits.py +0 -0
  24. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_auth.py +0 -0
  25. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_connections.py +0 -0
  26. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_credentials.py +0 -0
  27. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/mcp_oauth.py +0 -0
  28. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/prompts/__init__.py +0 -0
  29. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/prompts/policy_skill.md +0 -0
  30. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/skills/__init__.py +0 -0
  31. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/skills/dmint-policy-manager/SKILL.md +0 -0
  32. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli/verify_policy.py +0 -0
  33. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/dependency_links.txt +0 -0
  34. {dmint_cli-1.0.1 → dmint_cli-1.0.3}/src/dmint_cli.egg-info/entry_points.txt +0 -0
  35. {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.1
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.1)
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.1
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.1"`.
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
- Metadata-Version: 2.4
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.1
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.1"`.
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.1"
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
- prov_in = input("Select provider (openai/gemini/groq/openrouter/ollama/custom) [default: openai]: ").strip()
192
- selected_provider = prov_in.lower() if prov_in else "openai"
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
- key_in = getpass.getpass(f"Enter API Key for {selected_provider} (leave blank if using env var): ").strip()
199
- if key_in:
200
- resolved_key = key_in
201
- api_key = key_in
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
- print("\n[✓] Discovered available models:")
217
- for idx, m_id in enumerate(available_models[:15], start=1):
218
- print(f" {idx}) {m_id}")
219
- if len(available_models) > 15:
220
- print(f" ... and {len(available_models) - 15} more")
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
- manual_m = input("Enter model ID [default: gpt-4o-mini]: ").strip()
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.1"
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
- # dmint-cli (v1.0.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.1
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.1"`.
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
 
@@ -10,6 +10,7 @@ src/dmint_cli/api.py
10
10
  src/dmint_cli/compile_policy.py
11
11
  src/dmint_cli/create_mcp_policy.py
12
12
  src/dmint_cli/create_policy.py
13
+ src/dmint_cli/dashboard.py
13
14
  src/dmint_cli/errors.py
14
15
  src/dmint_cli/install_skill.py
15
16
  src/dmint_cli/io_utils.py
@@ -1,5 +1,7 @@
1
1
  dmint<2.0.0,>=1.0.0
2
2
  mcp<3.0.0,>=2.2.0
3
+ dmint-dashboard<2.0.0,>=1.0.0
4
+ questionary>=2.0.0
3
5
 
4
6
  [test]
5
7
  pytest>=8.0.0
File without changes
File without changes
File without changes
File without changes