conduct-cli 0.4.91__tar.gz → 0.4.93__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.4.91 → conduct_cli-0.4.93}/PKG-INFO +1 -1
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/pyproject.toml +1 -1
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/guard.py +1 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/main.py +24 -2
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/PKG-INFO +1 -1
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/README.md +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/setup.cfg +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/setup.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/__init__.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/api.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/guardmcp.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/hook_precompact_template.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/hook_session_start_template.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/hook_stop_template.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/hook_template.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/mcp_server.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/memory.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli/paxel.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/SOURCES.txt +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/dependency_links.txt +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/entry_points.txt +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/requires.txt +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/src/conduct_cli.egg-info/top_level.txt +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/tests/test_guard_policy.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/tests/test_guard_savings.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/tests/test_hook_syntax.py +0 -0
- {conduct_cli-0.4.91 → conduct_cli-0.4.93}/tests/test_switch.py +0 -0
|
@@ -168,6 +168,7 @@ def _load_guard_config() -> dict:
|
|
|
168
168
|
def _save_guard_config(data: dict):
|
|
169
169
|
GUARD_DIR.mkdir(parents=True, exist_ok=True)
|
|
170
170
|
CONFIG_PATH.write_text(json.dumps(data, indent=2))
|
|
171
|
+
CONFIG_PATH.chmod(0o600)
|
|
171
172
|
|
|
172
173
|
|
|
173
174
|
def _require_guard_config() -> dict:
|
|
@@ -2286,8 +2286,12 @@ def cmd_session_report(args):
|
|
|
2286
2286
|
)
|
|
2287
2287
|
__import__("urllib.request", fromlist=["urlopen"]).urlopen(req, timeout=10)
|
|
2288
2288
|
print("✓ Report saved to Guard dashboard.")
|
|
2289
|
-
except Exception:
|
|
2290
|
-
|
|
2289
|
+
except Exception as _push_err:
|
|
2290
|
+
msg = str(_push_err)
|
|
2291
|
+
if "conduct login" in msg or "No server" in msg or "No workspace" in msg or "No credentials" in msg:
|
|
2292
|
+
print(" (Could not push to dashboard — run 'conduct login' to enable)")
|
|
2293
|
+
else:
|
|
2294
|
+
print(f" (Dashboard push failed: {_push_err})")
|
|
2291
2295
|
|
|
2292
2296
|
|
|
2293
2297
|
def cmd_emit_finding(args):
|
|
@@ -2368,12 +2372,30 @@ def cmd_run(args):
|
|
|
2368
2372
|
print(f" {GRAY}{k}={v}{RESET}")
|
|
2369
2373
|
print()
|
|
2370
2374
|
|
|
2375
|
+
# Preflight: estimate turns + show files likely to be modified
|
|
2376
|
+
try:
|
|
2377
|
+
pf = api.req("POST", f"{server}/workflows/{workflow_id}/preflight", json_h, {
|
|
2378
|
+
"issue_title": initial_state.get("title", ""),
|
|
2379
|
+
"issue_body": initial_state.get("body", ""),
|
|
2380
|
+
})
|
|
2381
|
+
suggested = pf.get("suggested_max_turns", 20)
|
|
2382
|
+
files = pf.get("total_files", [])
|
|
2383
|
+
print(f" {BOLD}Estimated turns:{RESET} {suggested}")
|
|
2384
|
+
if files:
|
|
2385
|
+
print(f" {BOLD}Files likely to be modified:{RESET} {', '.join(files)}")
|
|
2386
|
+
print()
|
|
2387
|
+
except Exception:
|
|
2388
|
+
suggested = 20
|
|
2389
|
+
|
|
2371
2390
|
# Call the test-trigger endpoint so the YAML's built-in test_trigger.payload
|
|
2372
2391
|
# (PR fixture, issue fixture, etc.) is loaded and the configured repo is
|
|
2373
2392
|
# injected — instead of running with an empty trigger context.
|
|
2374
2393
|
body: dict = {**initial_state}
|
|
2394
|
+
# Use preflight suggestion unless user explicitly passed --max-turns
|
|
2375
2395
|
if getattr(args, "max_turns", None):
|
|
2376
2396
|
body["__max_turns"] = args.max_turns
|
|
2397
|
+
elif suggested > 20:
|
|
2398
|
+
body["__max_turns"] = suggested
|
|
2377
2399
|
run = api.req("POST", f"{server}/workflows/{workflow_id}/trigger", json_h, body)
|
|
2378
2400
|
_stream_run(server, workflow_id, run["id"], workspace_id, token, api_key)
|
|
2379
2401
|
|
|
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
|