conduct-cli 0.6.18__tar.gz → 0.6.19__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.
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/PKG-INFO +1 -1
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/pyproject.toml +1 -1
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/base.py +18 -2
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/PKG-INFO +1 -1
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/README.md +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/setup.cfg +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/setup.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/__init__.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/api.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/guard.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/guardmcp.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hook_precompact_template.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hook_session_start_template.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hook_stop_template.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hook_template.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/__init__.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/posttooluse.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/precompact.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/pretooluse.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/session_parser.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/session_start.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/hooks/stop.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/log_util.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/main.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/mcp_server.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/memory.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli/paxel.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/SOURCES.txt +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/dependency_links.txt +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/entry_points.txt +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/requires.txt +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/src/conduct_cli.egg-info/top_level.txt +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_bash_operator_signature.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_command_word_matcher.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_guard_policy.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_guard_savings.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_hook_syntax.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_journal_drain.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_log_util.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_proxy_env.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_signed_policy.py +0 -0
- {conduct_cli-0.6.18 → conduct_cli-0.6.19}/tests/test_switch.py +0 -0
|
@@ -159,10 +159,18 @@ def run_drain_daemon() -> None:
|
|
|
159
159
|
if isinstance(entry["payload"], str)
|
|
160
160
|
else entry["payload"]
|
|
161
161
|
)
|
|
162
|
+
try:
|
|
163
|
+
from importlib.metadata import version as _pkg_ver
|
|
164
|
+
_ua = f"conduct-cli/{_pkg_ver('conduct-cli')}"
|
|
165
|
+
except Exception:
|
|
166
|
+
_ua = "conduct-cli"
|
|
162
167
|
req = urllib.request.Request(
|
|
163
168
|
f"{api_url}/guard/events",
|
|
164
169
|
data=payload,
|
|
165
|
-
headers={
|
|
170
|
+
headers={
|
|
171
|
+
"Content-Type": "application/json",
|
|
172
|
+
"User-Agent": _ua,
|
|
173
|
+
},
|
|
166
174
|
method="POST",
|
|
167
175
|
)
|
|
168
176
|
urllib.request.urlopen(req, timeout=8)
|
|
@@ -181,6 +189,14 @@ def run_drain_daemon() -> None:
|
|
|
181
189
|
pass
|
|
182
190
|
|
|
183
191
|
|
|
192
|
+
_WAF_CHARS = str.maketrans("", "", "|;&$`<>")
|
|
193
|
+
|
|
194
|
+
def _safe_summary(tool_input: dict) -> str:
|
|
195
|
+
"""Summarise tool input, stripping shell metacharacters that trigger WAF rules."""
|
|
196
|
+
raw = json.dumps(tool_input)[:300]
|
|
197
|
+
return raw.translate(_WAF_CHARS)[:200]
|
|
198
|
+
|
|
199
|
+
|
|
184
200
|
def post_event(
|
|
185
201
|
tool_name: str,
|
|
186
202
|
tool_input: dict,
|
|
@@ -207,7 +223,7 @@ def post_event(
|
|
|
207
223
|
"user_email": cfg.get("user_email"),
|
|
208
224
|
"ai_tool": detect_ai_tool(),
|
|
209
225
|
"tool_call": tool_name,
|
|
210
|
-
"input_summary":
|
|
226
|
+
"input_summary": _safe_summary(tool_input),
|
|
211
227
|
"decision": decision,
|
|
212
228
|
"rule_id": rule_id,
|
|
213
229
|
"rule_message": message,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|