conduct-cli 0.4.20__tar.gz → 0.4.22__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.20
3
+ Version: 0.4.22
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.20"
7
+ version = "0.4.22"
8
8
  description = "CLI for Conduct AI — install agents, manage projects, run tests"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -371,7 +371,9 @@ def main():
371
371
  if hard_blocked is None:
372
372
  hard_blocked, reason = _fetch_budget_status()
373
373
  if hard_blocked:
374
- print(f"[ConductGuard] {reason or 'Budget hard cap reached. Contact your manager.'}")
374
+ msg = f"[ConductGuard] {reason or 'Budget hard cap reached. Contact your manager.'}"
375
+ print(msg)
376
+ print(msg, file=sys.stderr)
375
377
  sys.exit(2)
376
378
 
377
379
  session_id = data.get("session_id")
@@ -385,7 +387,9 @@ def main():
385
387
  _post_event(tool_name, tool_input, decision, rule_id, message, session_id=session_id)
386
388
 
387
389
  if action == "block":
388
- print(f"[ConductGuard] {message}")
390
+ msg = f"[ConductGuard] {message}"
391
+ print(msg)
392
+ print(msg, file=sys.stderr)
389
393
  sys.exit(2)
390
394
  if action in ("warn", "approval"):
391
395
  print(f"[ConductGuard] {message}")
@@ -475,11 +479,12 @@ _MCP_TARGETS = [
475
479
 
476
480
 
477
481
  def _register_mcp(workspace_id: str, member_token: str, api_url: str) -> None:
478
- """Write conductguard MCP entry into every AI tool config found on this machine."""
479
- entry = {
480
- "command": "conductguard-mcp",
481
- "args": ["--workspace", workspace_id, "--token", member_token, "--api-url", api_url],
482
- }
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"}
483
488
  found_any = False
484
489
  for cfg_path, label in _MCP_TARGETS:
485
490
  if not cfg_path.exists():
@@ -490,7 +495,7 @@ def _register_mcp(workspace_id: str, member_token: str, api_url: str) -> None:
490
495
  except (json.JSONDecodeError, OSError):
491
496
  existing = {}
492
497
  mcp = existing.setdefault("mcpServers", {})
493
- if mcp.get("conductguard", {}).get("args") == entry["args"]:
498
+ if mcp.get("conductguard") == entry:
494
499
  print(f" {GRAY}Guard MCP already registered in {label}{RESET}")
495
500
  continue
496
501
  mcp["conductguard"] = entry
@@ -208,13 +208,14 @@ def _err(msg_id, code: int, message: str) -> None:
208
208
 
209
209
  def main() -> None:
210
210
  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)
211
+ parser.add_argument("--workspace", default=None, help="Guard workspace ID (falls back to ~/.conductguard/config.json)")
212
+ parser.add_argument("--token", default=None, help="Member token (falls back to ~/.conductguard/config.json)")
213
+ parser.add_argument("--api-url", default=None, help=argparse.SUPPRESS)
214
214
  args = parser.parse_args()
215
215
 
216
- workspace_id = args.workspace
217
- token = args.token
216
+ cfg = _load_config()
217
+ workspace_id = args.workspace or cfg.get("workspace_id", "")
218
+ token = args.token or cfg.get("member_token", "")
218
219
 
219
220
  for raw in sys.stdin:
220
221
  raw = raw.strip()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conduct-cli
3
- Version: 0.4.20
3
+ Version: 0.4.22
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