notari 0.3.0__py3-none-any.whl

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 (67) hide show
  1. notari/__init__.py +50 -0
  2. notari/__main__.py +13 -0
  3. notari/_version.py +1 -0
  4. notari/adapters/__init__.py +7 -0
  5. notari/adapters/claude_code.py +1523 -0
  6. notari/adapters/cursor.py +530 -0
  7. notari/approvals.py +258 -0
  8. notari/attest.py +197 -0
  9. notari/audit.py +349 -0
  10. notari/audit_summary.py +674 -0
  11. notari/bridge.py +83 -0
  12. notari/cli.py +5041 -0
  13. notari/code_scan.py +242 -0
  14. notari/config.py +303 -0
  15. notari/contract.py +264 -0
  16. notari/controls.toml +430 -0
  17. notari/decay.py +307 -0
  18. notari/doctor.py +531 -0
  19. notari/errors.py +43 -0
  20. notari/events.py +100 -0
  21. notari/explain.py +353 -0
  22. notari/explain_html.py +111 -0
  23. notari/exports.py +563 -0
  24. notari/githook.py +283 -0
  25. notari/github_review.py +130 -0
  26. notari/hints.py +187 -0
  27. notari/hints.toml +99 -0
  28. notari/insights.py +364 -0
  29. notari/integrate.py +288 -0
  30. notari/journal.py +435 -0
  31. notari/learn.py +516 -0
  32. notari/learning.py +893 -0
  33. notari/lessons.py +360 -0
  34. notari/onboard.py +456 -0
  35. notari/otel.py +195 -0
  36. notari/overnight.py +304 -0
  37. notari/passport.py +331 -0
  38. notari/paths.py +67 -0
  39. notari/pause.py +215 -0
  40. notari/perimeter.py +266 -0
  41. notari/pinning.py +258 -0
  42. notari/policy.py +1724 -0
  43. notari/prompt.py +270 -0
  44. notari/prompt_injection.py +317 -0
  45. notari/provenance.py +237 -0
  46. notari/py.typed +0 -0
  47. notari/readiness.py +247 -0
  48. notari/receipt.py +318 -0
  49. notari/roster.py +139 -0
  50. notari/saves.py +456 -0
  51. notari/secrets.py +405 -0
  52. notari/session.py +294 -0
  53. notari/session_approvals.py +147 -0
  54. notari/severity.py +151 -0
  55. notari/taint.py +250 -0
  56. notari/teach.py +164 -0
  57. notari/telemetry.py +279 -0
  58. notari/tool_scan.py +269 -0
  59. notari/touchid.py +187 -0
  60. notari/transparency.py +246 -0
  61. notari/verify.py +1173 -0
  62. notari-0.3.0.dist-info/METADATA +513 -0
  63. notari-0.3.0.dist-info/RECORD +67 -0
  64. notari-0.3.0.dist-info/WHEEL +4 -0
  65. notari-0.3.0.dist-info/entry_points.txt +2 -0
  66. notari-0.3.0.dist-info/licenses/LICENSE +21 -0
  67. notari-0.3.0.dist-info/licenses/NOTICE +41 -0
notari/__init__.py ADDED
@@ -0,0 +1,50 @@
1
+ """notari: the pause button between AI agents and the things you can't undo.
2
+
3
+ An MCP proxy server that:
4
+ - captures the session intent at start of a vibe-coding session,
5
+ - records every tool call with a signed line in an append-only audit log,
6
+ - blocks out-of-scope calls deterministically before the agent can even try,
7
+ - pauses high-risk actions for a human ACK,
8
+ - requires type-to-confirm on critical actions,
9
+ - propagates governance through multi-agent delegation chains.
10
+
11
+ Place notari between your MCP client (Claude Code, Cursor, Cline) and your
12
+ upstream MCP servers (filesystem, GitHub, Postgres, Slack). Once you're inside
13
+ the gate, you can breathe.
14
+
15
+ License: MIT
16
+ """
17
+
18
+ from notari._version import __version__
19
+ from notari.audit import AuditLog
20
+ from notari.errors import (
21
+ ConfirmationMismatch,
22
+ HumanDeclined,
23
+ NotariError,
24
+ PolicyDenied,
25
+ ScopeViolation,
26
+ )
27
+ from notari.policy import (
28
+ CommandClassification,
29
+ Risk,
30
+ Scope,
31
+ SessionIntent,
32
+ classify,
33
+ classify_command,
34
+ )
35
+
36
+ __all__ = [
37
+ "AuditLog",
38
+ "CommandClassification",
39
+ "ConfirmationMismatch",
40
+ "HumanDeclined",
41
+ "NotariError",
42
+ "PolicyDenied",
43
+ "Risk",
44
+ "Scope",
45
+ "ScopeViolation",
46
+ "SessionIntent",
47
+ "__version__",
48
+ "classify",
49
+ "classify_command",
50
+ ]
notari/__main__.py ADDED
@@ -0,0 +1,13 @@
1
+ """Allow `python -m notari ...` (and the daemon spawn path).
2
+
3
+ The daemon helper in watch.py spawns
4
+ [sys.executable, "-m", "notari", "watch", "--daemon-child", ...]
5
+ so the same Python interpreter that installed the package runs the
6
+ detached dashboard process. This module just delegates to the typer
7
+ app defined in cli.py.
8
+ """
9
+
10
+ from notari.cli import app
11
+
12
+ if __name__ == "__main__":
13
+ app()
notari/_version.py ADDED
@@ -0,0 +1 @@
1
+ __version__ = "0.3.0"
@@ -0,0 +1,7 @@
1
+ """Adapters that wire Notari into specific MCP clients.
2
+
3
+ Each adapter knows the host's tool-call protocol and translates it to a
4
+ gate decision + an audit log entry. Notari itself stays client-agnostic;
5
+ adapters live here so a future Cursor / Cline / Continue / OpenAI Agents
6
+ SDK adapter can land alongside without touching the core.
7
+ """