conduct-cli 0.8.3__tar.gz → 0.8.4__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 (49) hide show
  1. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/PKG-INFO +1 -1
  2. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/pyproject.toml +2 -2
  3. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/guard.py +5 -17
  4. conduct_cli-0.8.4/src/conduct_cli/guard_policy.md +16 -0
  5. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/PKG-INFO +1 -1
  6. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/SOURCES.txt +1 -0
  7. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/README.md +0 -0
  8. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/setup.cfg +0 -0
  9. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/setup.py +0 -0
  10. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/__init__.py +0 -0
  11. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/api.py +0 -0
  12. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/guardmcp.py +0 -0
  13. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/__init__.py +0 -0
  14. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/base.py +0 -0
  15. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/posttooluse.py +0 -0
  16. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/precompact.py +0 -0
  17. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/pretooluse.py +0 -0
  18. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/session_parser.py +0 -0
  19. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/session_report_push.py +0 -0
  20. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/session_start.py +0 -0
  21. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/hooks/stop.py +0 -0
  22. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/log_util.py +0 -0
  23. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/main.py +0 -0
  24. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/mcp_server.py +0 -0
  25. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/memory.py +0 -0
  26. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/paxel.py +0 -0
  27. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli/tool_groups.py +0 -0
  28. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/dependency_links.txt +0 -0
  29. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/entry_points.txt +0 -0
  30. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/requires.txt +0 -0
  31. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/src/conduct_cli.egg-info/top_level.txt +0 -0
  32. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_advisory_and_hook.py +0 -0
  33. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_api_client.py +0 -0
  34. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_bash_operator_signature.py +0 -0
  35. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_blast_radius.py +0 -0
  36. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_cmd_run.py +0 -0
  37. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_command_word_matcher.py +0 -0
  38. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_drain_daemon_health.py +0 -0
  39. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_guard_policy.py +0 -0
  40. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_guard_savings.py +0 -0
  41. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_hook_dispatch.py +0 -0
  42. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_instruction_files.py +0 -0
  43. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_journal_drain.py +0 -0
  44. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_log_util.py +0 -0
  45. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_proxy_coverage.py +0 -0
  46. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_proxy_env.py +0 -0
  47. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_signed_policy.py +0 -0
  48. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_switch.py +0 -0
  49. {conduct_cli-0.8.3 → conduct_cli-0.8.4}/tests/test_token_lifecycle.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conduct-cli
3
- Version: 0.8.3
3
+ Version: 0.8.4
4
4
  Summary: CLI for Conduct AI — secure, govern, 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.8.3"
7
+ version = "0.8.4"
8
8
  description = "CLI for Conduct AI — secure, govern, install agents, manage projects, run tests"
9
9
  readme = "README.md"
10
10
  license = { text = "MIT" }
@@ -44,4 +44,4 @@ where = ["src"]
44
44
  include = ["conduct_cli*"]
45
45
 
46
46
  [tool.setuptools.package-data]
47
- conduct_cli = ["paxel.py"]
47
+ conduct_cli = ["paxel.py", "guard_policy.md"]
@@ -521,21 +521,7 @@ def _write_mcp_file(
521
521
  cfg_path.write_text(json.dumps(cfg, indent=2))
522
522
 
523
523
 
524
- _GUARD_RULES_TEXT = (
525
- "## ConductGuard — AI Governance Policy\n\n"
526
- "A ConductGuard MCP server is connected to this session (server name: `conduct-guard`).\n"
527
- "All Guard policies are enforced through it. You MUST follow these rules:\n\n"
528
- "Before executing any shell command, file write, network request, API call, or code change:\n"
529
- "1. Call the `guard_check` tool from the `conduct-guard` MCP server with the action and parameters.\n"
530
- "2. If the response is BLOCKED: stop immediately and explain the policy rule to the user. Do not proceed.\n"
531
- "3. If the response is WARNING: proceed but surface the warning message to the user.\n"
532
- "4. If the response is ALLOWED: proceed normally.\n\n"
533
- "Always-on rules (no guard_check needed, enforce unconditionally):\n"
534
- "- Never write credentials, API keys, tokens, or secrets to any file or output.\n"
535
- "- Never send PII (emails, names, payment data) to external endpoints.\n\n"
536
- "Use `guard_status` (conduct-guard MCP) to show the user their current policy and team info.\n"
537
- "Use `guard_activity` at the start of every session with a one-line summary of what you are doing."
538
- )
524
+ _GUARD_RULES_TEXT = (Path(__file__).parent / "guard_policy.md").read_text().rstrip()
539
525
 
540
526
 
541
527
  def _patch_cursor_global_rules() -> None:
@@ -608,14 +594,16 @@ def _patch_tool_instruction_files(agent_token: str, api_url: str, dry_run: bool
608
594
  (repo_root / ".cursorrules" if repo_root else None, Path.home() / ".cursor" / "rules" / "conduct.md", ".cursorrules"),
609
595
  (repo_root / ".windsurfrules" if repo_root else None, Path.home() / ".windsurf"/ "rules" / "conduct.md", ".windsurfrules"),
610
596
  ]
611
- pattern = _re.compile(_re.escape(MARKER_START) + r".*?" + _re.escape(MARKER_END), _re.DOTALL)
597
+ # Tolerate legacy marker variants (e.g. ", do not edit this block") so re-sync
598
+ # replaces old blocks in place instead of appending a second one.
599
+ pattern = _re.compile(r"<!-- ConductGuard[^\n]*-->.*?<!-- /ConductGuard -->", _re.DOTALL)
612
600
 
613
601
  for repo_path, global_path, label in targets:
614
602
  path = repo_path if (repo_path and repo_path.exists()) else global_path
615
603
  if not path.exists() and repo_path:
616
604
  path = repo_path
617
605
  existing = path.read_text() if path.exists() else ""
618
- if MARKER_START in existing:
606
+ if pattern.search(existing):
619
607
  updated = pattern.sub(guard_block, existing)
620
608
  if dry_run:
621
609
  if updated == existing:
@@ -0,0 +1,16 @@
1
+ At the start of every conversation:
2
+ - Call `guard_activity` once with a one-line summary of the user's request.
3
+
4
+ Before every shell command, file write, network request, API call, or code change:
5
+ - Call `guard_check` with the proposed action and parameters.
6
+ - If BLOCKED: stop and explain the policy rule.
7
+ - If WARNING: proceed and surface the warning.
8
+ - If ALLOWED: proceed normally.
9
+
10
+ Example:
11
+ 1. User asks to fix a bug → call `guard_activity` once.
12
+ 2. Before reading files or running tests → call `guard_check`.
13
+ 3. Before editing code → call `guard_check` again.
14
+
15
+ Never write secrets to files or output.
16
+ Never send PII to external endpoints.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: conduct-cli
3
- Version: 0.8.3
3
+ Version: 0.8.4
4
4
  Summary: CLI for Conduct AI — secure, govern, install agents, manage projects, run tests
5
5
  Author-email: Conduct AI <hello@conductai.ai>
6
6
  License: MIT
@@ -4,6 +4,7 @@ setup.py
4
4
  src/conduct_cli/__init__.py
5
5
  src/conduct_cli/api.py
6
6
  src/conduct_cli/guard.py
7
+ src/conduct_cli/guard_policy.md
7
8
  src/conduct_cli/guardmcp.py
8
9
  src/conduct_cli/log_util.py
9
10
  src/conduct_cli/main.py
File without changes
File without changes
File without changes