tenuo-claude-code 0.6.3__tar.gz → 0.6.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 (68) hide show
  1. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/PKG-INFO +2 -2
  2. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/DETAILS.md +1 -1
  3. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/pyproject.toml +2 -2
  4. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/__init__.py +1 -1
  5. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/authorizer_runtime.py +1 -1
  6. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/cli.py +2 -2
  7. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_authorizer_runtime.py +2 -2
  8. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/.gitignore +0 -0
  9. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/CONTRIBUTING.md +0 -0
  10. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/LICENSE +0 -0
  11. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/README.md +0 -0
  12. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/.claude/agents/researcher.md +0 -0
  13. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/.mcp.json +0 -0
  14. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/README.md +0 -0
  15. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/docs/README.md +0 -0
  16. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/fake-secrets.env +0 -0
  17. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/ops_server.py +0 -0
  18. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/sandbox/checkout-evidence.log +0 -0
  19. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/sandbox/incident-report.md +0 -0
  20. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/sandbox/notes.txt +0 -0
  21. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/tenuo.yaml +0 -0
  22. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/demo/tenuo_demo.py +0 -0
  23. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/ENTERPRISE.md +0 -0
  24. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/TROUBLESHOOTING.md +0 -0
  25. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/images/cloud-audit-stream.png +0 -0
  26. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/images/cloud-receipt-approval-detail.png +0 -0
  27. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/images/tenuo_claude_code_architecture.png +0 -0
  28. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/docs/images/tenuo_claude_code_architecture.svg +0 -0
  29. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/examples/managed/README.md +0 -0
  30. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/examples/policies/README.md +0 -0
  31. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/examples/policies/dry-run-rollout.yaml +0 -0
  32. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/examples/policies/enforce-with-mcp.yaml +0 -0
  33. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/examples/policies/read-only-research.yaml +0 -0
  34. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/admin.py +0 -0
  35. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/data/harness_tools.yaml +0 -0
  36. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/filesystem-dev/pack.yaml +0 -0
  37. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/filesystem-dev/tenuo.yaml.tmpl +0 -0
  38. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/github-mcp/pack.yaml +0 -0
  39. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/github-mcp/tenuo.yaml.tmpl +0 -0
  40. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/http-api-safe/pack.yaml +0 -0
  41. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs/http-api-safe/tenuo.yaml.tmpl +0 -0
  42. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/packs.py +0 -0
  43. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/paths.py +0 -0
  44. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/templates/tenuo.yaml.example +0 -0
  45. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/src/tenuo_claude_code/verify.py +0 -0
  46. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/README.md +0 -0
  47. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/admin.env.example +0 -0
  48. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/cloud.env.example +0 -0
  49. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/tenuo.yaml.advanced.example +0 -0
  50. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/tenuo.yaml.cloud.example +0 -0
  51. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/templates/tenuo.yaml.example +0 -0
  52. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/conftest.py +0 -0
  53. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_admin.py +0 -0
  54. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_approvals.py +0 -0
  55. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_authorize_call.py +0 -0
  56. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_check.py +0 -0
  57. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_cloud_bindings.py +0 -0
  58. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_constraints.py +0 -0
  59. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_dx_improvements.py +0 -0
  60. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_ipc_transport.py +0 -0
  61. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_managed_template.py +0 -0
  62. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_mcp_proxy.py +0 -0
  63. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_packs.py +0 -0
  64. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_permissions.py +0 -0
  65. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_posture.py +0 -0
  66. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_routing.py +0 -0
  67. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_scaffold.py +0 -0
  68. {tenuo_claude_code-0.6.3 → tenuo_claude_code-0.6.4}/tests/test_subagents.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tenuo-claude-code
3
- Version: 0.6.3
3
+ Version: 0.6.4
4
4
  Summary: Tenuo governance for Claude Code — warrants, hooks, MCP proxy, and Cloud lifecycle
5
5
  Project-URL: Homepage, https://tenuo.ai
6
6
  Project-URL: Repository, https://github.com/tenuo-ai/claude-governance
@@ -27,7 +27,7 @@ Requires-Dist: certifi>=2024.0
27
27
  Requires-Dist: cryptography>=42.0
28
28
  Requires-Dist: mcp<2,>=1.0
29
29
  Requires-Dist: pyyaml>=6.0
30
- Requires-Dist: tenuo<0.3,>=0.2.3
30
+ Requires-Dist: tenuo<0.4,>=0.3.0
31
31
  Description-Content-Type: text/markdown
32
32
 
33
33
  # Tenuo for Claude Code
@@ -76,7 +76,7 @@ When `subagents:` is declared, you get two layers:
76
76
 
77
77
  Roles must match a real `subagent_type` (`.claude/agents/<name>.md` frontmatter `name:`, or a built-in); `verify` and `status` check this. Omit `subagents:` for flat coverage: spawns are then audited, not gated, and the subagent runs under the full session warrant.
78
78
 
79
- Changing `subagents:` is a policy change: re-run `tenuo-admin setup` (Cloud) or `init` (local). Note one sharp edge: the bundled `Workflow` harness tool tags its inner calls with an `agent_type` that isn't a declared role, so under `subagents:` those inner calls are denied. Remove `Workflow` from the `allow:` list or omit `subagents:` if you need it. Requires `tenuo` ≥ 0.2.3 and authorizer `0.2.3` (pinned in `cli.py`).
79
+ Changing `subagents:` is a policy change: re-run `tenuo-admin setup` (Cloud) or `init` (local). Note one sharp edge: the bundled `Workflow` harness tool tags its inner calls with an `agent_type` that isn't a declared role, so under `subagents:` those inner calls are denied. Remove `Workflow` from the `allow:` list or omit `subagents:` if you need it. Requires `tenuo` ≥ 0.3.0 and authorizer `0.3.0` (pinned in `cli.py`).
80
80
 
81
81
  ## Dry-run mode (`mode: dry-run`)
82
82
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "tenuo-claude-code"
3
- version = "0.6.3"
3
+ version = "0.6.4"
4
4
  description = "Tenuo governance for Claude Code — warrants, hooks, MCP proxy, and Cloud lifecycle"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10"
@@ -23,7 +23,7 @@ classifiers = [
23
23
  "Topic :: Software Development :: Libraries :: Python Modules",
24
24
  ]
25
25
  dependencies = [
26
- "tenuo>=0.2.3,<0.3",
26
+ "tenuo>=0.3.0,<0.4",
27
27
  "mcp>=1.0,<2",
28
28
  "PyYAML>=6.0",
29
29
  "certifi>=2024.0",
@@ -1,3 +1,3 @@
1
1
  """Tenuo governance for Claude Code — CLI, hooks, and MCP proxy."""
2
2
 
3
- __version__ = "0.6.3"
3
+ __version__ = "0.6.4"
@@ -23,7 +23,7 @@ from typing import Callable
23
23
 
24
24
  import certifi
25
25
 
26
- DEFAULT_IMAGE = "tenuo/authorizer:0.2.3"
26
+ DEFAULT_IMAGE = "tenuo/authorizer:0.3.0"
27
27
  DEFAULT_AUTHORIZER_PORT = 9090
28
28
  AUTHORIZER_PORT_ENV = "TENUO_AUTHORIZER_PORT"
29
29
  LEGACY_AUTHORIZER_PORT_ENV = "PORT"
@@ -354,7 +354,7 @@ POP_HEADER = "X-Tenuo-PoP"
354
354
  # The authorizer ships as a published container image (Docker Hub), pinned in
355
355
  # lockstep with the `tenuo` PyPI package. Override with TENUO_AUTHORIZER_IMAGE or
356
356
  # an `authorizer.image` key in tenuo.yaml.
357
- DEFAULT_AUTHZ_IMAGE = "tenuo/authorizer:0.2.3"
357
+ DEFAULT_AUTHZ_IMAGE = "tenuo/authorizer:0.3.0"
358
358
 
359
359
  # Claude tool -> (capability, primary arg, Claude input field for that arg)
360
360
  #
@@ -1271,7 +1271,7 @@ def _parse_connect_token(raw: str) -> dict:
1271
1271
  except ImportError as e:
1272
1272
  raise SystemExit(
1273
1273
  "TENUO_CONNECT_TOKEN requires the tenuo_core extension "
1274
- "(bundled with tenuo>=0.2.3)."
1274
+ "(bundled with tenuo>=0.3.0)."
1275
1275
  ) from e
1276
1276
  except Exception as e:
1277
1277
  raise SystemExit(f"Invalid TENUO_CONNECT_TOKEN: {e}") from e
@@ -119,7 +119,7 @@ def test_install_authorizer_skips_when_current(tmp_path, monkeypatch):
119
119
  managed.parent.mkdir()
120
120
  managed.write_bytes(b"fake")
121
121
  with mock.patch.object(art, "managed_binary_path", return_value=managed):
122
- with mock.patch.object(art, "query_binary_version", return_value="0.2.3+authz.3"):
122
+ with mock.patch.object(art, "query_binary_version", return_value="0.3.0+authz.3"):
123
123
  with mock.patch.object(art, "download_release_binary") as dl:
124
124
  result = art.install_authorizer(force=False)
125
125
  assert result == managed
@@ -182,7 +182,7 @@ def test_install_authorizer_cmd_without_project(tmp_path, monkeypatch):
182
182
  fake.parent.mkdir()
183
183
  fake.write_bytes(b"fake")
184
184
  monkeypatch.setattr(art, "install_authorizer", lambda *a, **kw: fake)
185
- monkeypatch.setattr(art, "query_binary_version", lambda p: "0.2.3+authz.3")
185
+ monkeypatch.setattr(art, "query_binary_version", lambda p: "0.3.0+authz.3")
186
186
  cli.main()
187
187
 
188
188