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.
- notari/__init__.py +50 -0
- notari/__main__.py +13 -0
- notari/_version.py +1 -0
- notari/adapters/__init__.py +7 -0
- notari/adapters/claude_code.py +1523 -0
- notari/adapters/cursor.py +530 -0
- notari/approvals.py +258 -0
- notari/attest.py +197 -0
- notari/audit.py +349 -0
- notari/audit_summary.py +674 -0
- notari/bridge.py +83 -0
- notari/cli.py +5041 -0
- notari/code_scan.py +242 -0
- notari/config.py +303 -0
- notari/contract.py +264 -0
- notari/controls.toml +430 -0
- notari/decay.py +307 -0
- notari/doctor.py +531 -0
- notari/errors.py +43 -0
- notari/events.py +100 -0
- notari/explain.py +353 -0
- notari/explain_html.py +111 -0
- notari/exports.py +563 -0
- notari/githook.py +283 -0
- notari/github_review.py +130 -0
- notari/hints.py +187 -0
- notari/hints.toml +99 -0
- notari/insights.py +364 -0
- notari/integrate.py +288 -0
- notari/journal.py +435 -0
- notari/learn.py +516 -0
- notari/learning.py +893 -0
- notari/lessons.py +360 -0
- notari/onboard.py +456 -0
- notari/otel.py +195 -0
- notari/overnight.py +304 -0
- notari/passport.py +331 -0
- notari/paths.py +67 -0
- notari/pause.py +215 -0
- notari/perimeter.py +266 -0
- notari/pinning.py +258 -0
- notari/policy.py +1724 -0
- notari/prompt.py +270 -0
- notari/prompt_injection.py +317 -0
- notari/provenance.py +237 -0
- notari/py.typed +0 -0
- notari/readiness.py +247 -0
- notari/receipt.py +318 -0
- notari/roster.py +139 -0
- notari/saves.py +456 -0
- notari/secrets.py +405 -0
- notari/session.py +294 -0
- notari/session_approvals.py +147 -0
- notari/severity.py +151 -0
- notari/taint.py +250 -0
- notari/teach.py +164 -0
- notari/telemetry.py +279 -0
- notari/tool_scan.py +269 -0
- notari/touchid.py +187 -0
- notari/transparency.py +246 -0
- notari/verify.py +1173 -0
- notari-0.3.0.dist-info/METADATA +513 -0
- notari-0.3.0.dist-info/RECORD +67 -0
- notari-0.3.0.dist-info/WHEEL +4 -0
- notari-0.3.0.dist-info/entry_points.txt +2 -0
- notari-0.3.0.dist-info/licenses/LICENSE +21 -0
- 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
|
+
"""
|