conduct-cli 0.4.21__tar.gz → 0.4.23__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conduct-cli
3
- Version: 0.4.21
3
+ Version: 0.4.23
4
4
  Summary: CLI for Conduct AI — install agents, manage projects, run tests
5
5
  Author-email: Conduct AI <hello@conductai.ai>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "conduct-cli"
7
- version = "0.4.21"
7
+ version = "0.4.23"
8
8
  description = "CLI for Conduct AI — install agents, manage projects, run tests"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -479,11 +479,12 @@ _MCP_TARGETS = [
479
479
 
480
480
 
481
481
  def _register_mcp(workspace_id: str, member_token: str, api_url: str) -> None:
482
- """Write conductguard MCP entry into every AI tool config found on this machine."""
483
- entry = {
484
- "command": "conductguard-mcp",
485
- "args": ["--workspace", workspace_id, "--token", member_token, "--api-url", api_url],
486
- }
482
+ """Write conductguard MCP entry into every AI tool config found on this machine.
483
+
484
+ Credentials are NOT stored in the MCP config — the server reads them from
485
+ ~/.conductguard/config.json at startup, which is already written by guard join.
486
+ """
487
+ entry = {"command": "conductguard-mcp"}
487
488
  found_any = False
488
489
  for cfg_path, label in _MCP_TARGETS:
489
490
  if not cfg_path.exists():
@@ -494,7 +495,7 @@ def _register_mcp(workspace_id: str, member_token: str, api_url: str) -> None:
494
495
  except (json.JSONDecodeError, OSError):
495
496
  existing = {}
496
497
  mcp = existing.setdefault("mcpServers", {})
497
- if mcp.get("conductguard", {}).get("args") == entry["args"]:
498
+ if mcp.get("conductguard") == entry:
498
499
  print(f" {GRAY}Guard MCP already registered in {label}{RESET}")
499
500
  continue
500
501
  mcp["conductguard"] = entry
@@ -11,6 +11,7 @@ Exposes three tools:
11
11
  guard_check — check whether a tool call would be blocked by policy
12
12
  guard_sync — pull latest policy from the ConductGuard API
13
13
  """
14
+ from __future__ import annotations
14
15
  import argparse
15
16
  import json
16
17
  import re
@@ -208,13 +209,14 @@ def _err(msg_id, code: int, message: str) -> None:
208
209
 
209
210
  def main() -> None:
210
211
  parser = argparse.ArgumentParser(prog="conductguard-mcp")
211
- parser.add_argument("--workspace", required=True, help="Guard workspace ID")
212
- parser.add_argument("--token", required=True, help="Member token")
213
- parser.add_argument("--api-url", default="https://api.conductai.ai", help=argparse.SUPPRESS)
212
+ parser.add_argument("--workspace", default=None, help="Guard workspace ID (falls back to ~/.conductguard/config.json)")
213
+ parser.add_argument("--token", default=None, help="Member token (falls back to ~/.conductguard/config.json)")
214
+ parser.add_argument("--api-url", default=None, help=argparse.SUPPRESS)
214
215
  args = parser.parse_args()
215
216
 
216
- workspace_id = args.workspace
217
- token = args.token
217
+ cfg = _load_config()
218
+ workspace_id = args.workspace or cfg.get("workspace_id", "")
219
+ token = args.token or cfg.get("member_token", "")
218
220
 
219
221
  for raw in sys.stdin:
220
222
  raw = raw.strip()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conduct-cli
3
- Version: 0.4.21
3
+ Version: 0.4.23
4
4
  Summary: CLI for Conduct AI — install agents, manage projects, run tests
5
5
  Author-email: Conduct AI <hello@conductai.ai>
6
6
  License: MIT
File without changes
File without changes
File without changes