stacktrace-cli 0.11.0__tar.gz → 0.13.0__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.
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/workflows/ci.yml +6 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/CLAUDE.md +83 -10
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/PKG-INFO +15 -7
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/README.md +12 -4
- stacktrace_cli-0.13.0/SECURITY.md +41 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0006-trust-boundary-and-detection-upload.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0020-openaca-consumption-boundary.md +1 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0024-the-upload-carries-observations.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0031-one-host-daemon-observes-native-session-logs.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0070-package-the-cloud-agent-environment-bootstrap.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0072-host-supervisors-own-daemon-restarts.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0073-name-what-fired-and-which-component.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0090-count-completed-commands-locate-by-ip-send-through-the-managed-proxy.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0093-environment-cost-baselines-count-tokens-keyed-by-model.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0096-cost-usage-may-leave-as-token-totals-and-work-identifiers.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0099-cost-is-measured-in-tokens-and-relative-increases.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0101-what-names-a-run-in-fleet.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0104-usage-is-its-own-upload.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0109-a-detection-carries-its-runs-title-and-the-persons-name.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0113-size-triggers-behaviour-explains-session-cost-carries-reasons.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0118-observe-agents-through-adapters-and-a-shared-analyzer.md +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0123-the-cloud-boot-hook-brings-the-client-up-to-the-latest-release.md +1 -1
- stacktrace_cli-0.13.0/docs/adrs/0127-the-monitor-shows-weighted-tokens-beside-raw-tokens.md +121 -0
- stacktrace_cli-0.13.0/docs/adrs/0128-usage-files-each-response-once-where-it-was-first-filed.md +118 -0
- stacktrace_cli-0.13.0/docs/adrs/0129-an-unfinished-response-counts-the-output-it-shows.md +130 -0
- stacktrace_cli-0.13.0/docs/adrs/0130-usage-carries-one-hour-cache-writes-and-each-responses-price-class.md +126 -0
- stacktrace_cli-0.13.0/docs/adrs/0131-activate-hook-policy-without-a-privileged-runtime.md +87 -0
- stacktrace_cli-0.13.0/docs/adrs/0132-every-usage-page-names-the-store-that-built-it.md +92 -0
- stacktrace_cli-0.13.0/docs/adrs/0133-a-clients-own-error-record-is-a-third-block-channel.md +68 -0
- stacktrace_cli-0.13.0/docs/adrs/0134-a-secret-sent-to-a-server-configured-as-remote-is-egress.md +61 -0
- stacktrace_cli-0.13.0/docs/adrs/0135-enforce-policy-through-the-daemon-and-agent-hooks.md +111 -0
- stacktrace_cli-0.13.0/docs/adrs/0136-bound-policy-evidence-collection-as-one-bundle.md +102 -0
- stacktrace_cli-0.13.0/docs/adrs/0137-a-rule-in-wording-reads-the-same-on-every-surface.md +87 -0
- stacktrace_cli-0.13.0/docs/adrs/0138-a-credential-in-a-prompt-travels-as-a-mask-and-a-digest.md +98 -0
- stacktrace_cli-0.13.0/docs/adrs/0139-remediation-finding-contract.md +95 -0
- stacktrace_cli-0.13.0/docs/adrs/0140-an-untitled-run-names-itself-by-its-first-five-words.md +70 -0
- stacktrace_cli-0.13.0/docs/adrs/0141-two-remediation-models-one-credential-identity-and-a-letters-only-fragment.md +81 -0
- stacktrace_cli-0.13.0/docs/adrs/0142-the-cli-has-no-machine-limit.md +72 -0
- stacktrace_cli-0.13.0/docs/adrs/0143-the-plugin-owns-session-hooks-on-every-host.md +139 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/INDEX.md +26 -6
- stacktrace_cli-0.13.0/docs/agent-support.html +503 -0
- stacktrace_cli-0.13.0/docs/agent-support.md +140 -0
- stacktrace_cli-0.13.0/docs/releases/v0.12.0.md +74 -0
- stacktrace_cli-0.13.0/docs/releases/v0.13.0.md +98 -0
- stacktrace_cli-0.13.0/docs/specs/codex-agent-kind.md +361 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/cost-notifications.md +15 -8
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/cost-phase-1.md +18 -8
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/cost.md +12 -3
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-uploads.md +2 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/detection-policies.md +91 -11
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/detector.md +10 -8
- stacktrace_cli-0.13.0/docs/specs/hook-policy-rollout.md +205 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/managed-policy-deployment.md +6 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/monitor.md +54 -16
- stacktrace_cli-0.13.0/docs/specs/plugin-installation.md +107 -0
- stacktrace_cli-0.13.0/docs/specs/policy-enforcement.md +417 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/remote-sync.md +6 -3
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/usage-upload.md +79 -7
- stacktrace_cli-0.13.0/docs/trust.md +204 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/pyproject.toml +11 -5
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/__init__.py +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cli.py +14 -10
- stacktrace_cli-0.13.0/src/stacktrace/cloud/__init__.py +37 -0
- stacktrace_cli-0.13.0/src/stacktrace/cloud/boot.py +186 -0
- stacktrace_cli-0.13.0/src/stacktrace/cloud/profile.py +71 -0
- stacktrace_cli-0.13.0/src/stacktrace/cloud/setup.sh +185 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/composition.py +22 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/observed.py +49 -5
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/baseline.py +16 -1
- stacktrace_cli-0.13.0/src/stacktrace/cost/copies.py +90 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/ledger.py +8 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/measures.py +3 -2
- stacktrace_cli-0.13.0/src/stacktrace/cost/models.py +76 -0
- stacktrace_cli-0.13.0/src/stacktrace/cost/output.py +123 -0
- stacktrace_cli-0.13.0/src/stacktrace/cost/price_class.py +48 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/reasons.py +3 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/rules.py +4 -193
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/usage.py +224 -16
- stacktrace_cli-0.13.0/src/stacktrace/cost/weights.py +120 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/client.py +10 -4
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/config.py +0 -42
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/costs.py +7 -10
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/db.py +168 -15
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/fleet.py +9 -9
- stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_collect.py +306 -0
- stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_inputs.py +278 -0
- stacktrace_cli-0.13.0/src/stacktrace/daemon/policy_runtime.py +569 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/presentation.py +40 -9
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/protocol.py +46 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/runtime.py +10 -11
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/server.py +76 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/store.py +155 -29
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/usage.py +85 -35
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/webhook.py +24 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/blocked.py +102 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/cache.py +2 -8
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/deterministic.py +426 -103
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/finding.py +35 -6
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/history.py +4 -13
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/jev.py +1 -14
- stacktrace_cli-0.13.0/src/stacktrace/detector/personal_data.py +328 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/__init__.py +3 -2
- stacktrace_cli-0.13.0/src/stacktrace/detector/prompts/jev-v3/stacktrace-deceptive-completion.json +16 -0
- stacktrace_cli-0.13.0/src/stacktrace/detector/prompts/jev-v3/stacktrace-infra-unsafe-action.json +10 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/reasoning.py +6 -28
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/render.py +10 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/rules.py +80 -15
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/run.py +6 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/secrets.py +88 -3
- stacktrace_cli-0.13.0/src/stacktrace/finding_contract.py +236 -0
- stacktrace_cli-0.13.0/src/stacktrace/finding_titles.py +57 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/_json.py +1 -5
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/session.py +20 -2
- stacktrace_cli-0.13.0/src/stacktrace/hooks/__init__.py +1 -0
- stacktrace_cli-0.13.0/src/stacktrace/hooks/claude.py +239 -0
- stacktrace_cli-0.13.0/src/stacktrace/hooks/session.py +76 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/costs.py +116 -15
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/render.py +33 -4
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/app.js +44 -10
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/cost.js +168 -25
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/index.html +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/styles.css +14 -2
- stacktrace_cli-0.13.0/src/stacktrace/policy_display.py +129 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/cli.py +8 -44
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/client.py +159 -15
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/config.py +61 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/detect_payload.py +37 -4
- stacktrace_cli-0.13.0/src/stacktrace/remote/hook_policy.py +148 -0
- stacktrace_cli-0.13.0/src/stacktrace/remote/policy_show.py +109 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/sync.py +14 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/upload_contract.py +35 -0
- stacktrace_cli-0.13.0/src/stacktrace/sessions/entrypoint.py +43 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/protocols.py +5 -39
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/events.py +1 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/conftest.py +32 -6
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/fakes.py +6 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_baseline.py +15 -0
- stacktrace_cli-0.13.0/tests/cost/test_copies.py +91 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_evidence_travels.py +0 -35
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_findings_are_dated_by_their_citations.py +9 -28
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_findings_carry_no_session_text.py +0 -10
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_is_tokens.py +10 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_measures.py +9 -0
- stacktrace_cli-0.13.0/tests/cost/test_models.py +66 -0
- stacktrace_cli-0.13.0/tests/cost/test_output.py +149 -0
- stacktrace_cli-0.13.0/tests/cost/test_price_class.py +113 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_rules_baseline.py +16 -2
- stacktrace_cli-0.13.0/tests/cost/test_unfinished_output_counts_what_it_shows.py +330 -0
- stacktrace_cli-0.13.0/tests/cost/test_usage.py +478 -0
- stacktrace_cli-0.13.0/tests/cost/test_weights.py +158 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_accounts.py +4 -3
- stacktrace_cli-0.13.0/tests/daemon/test_claude_policy_conformance.py +586 -0
- stacktrace_cli-0.13.0/tests/daemon/test_claude_policy_hook.py +232 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_cli.py +9 -3
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_client.py +7 -3
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_costs.py +76 -99
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_db.py +197 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_fleet.py +50 -2
- stacktrace_cli-0.13.0/tests/daemon/test_policy_collect.py +344 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_collect_contract.py +180 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_hook_transport.py +207 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_inputs.py +551 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_reconcile.py +535 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_runtime.py +277 -0
- stacktrace_cli-0.13.0/tests/daemon/test_policy_socket.py +153 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_runtime.py +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_session_cost_notices.py +2 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_the_stored_row_is_sufficient.py +5 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_usage.py +480 -6
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_usage_store.py +260 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_webhook.py +56 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_wire_frames_are_bounded.py +6 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/detector_session_fixture.py +0 -4
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_session.py +108 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/cost_harness.mjs +65 -15
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/feed_harness.mjs +16 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_cost_page.py +173 -14
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_feed_model.py +30 -5
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_render_cost.py +523 -17
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_site_assets.py +11 -7
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_cli.py +19 -211
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_client.py +292 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_cloud_boot_updates_the_client.py +87 -16
- stacktrace_cli-0.13.0/tests/remote/test_cloud_session.py +59 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_cloud_setup_asset_id.py +6 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_config.py +85 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_contract_is_exhaustive.py +31 -3
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_gate_matches_the_cloud.py +7 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_facade_contract.py +40 -1
- stacktrace_cli-0.13.0/tests/remote/test_hook_policy.py +81 -0
- stacktrace_cli-0.13.0/tests/remote/test_policy_show.py +138 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_seam.py +8 -0
- stacktrace_cli-0.13.0/tests/remote/test_session_registration.py +54 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_usage_contract.py +5 -0
- stacktrace_cli-0.13.0/tests/remote/test_user_install_profile.py +45 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_every_derived_site.py +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_hooks.py +1 -1
- stacktrace_cli-0.13.0/tests/test_agent_support_doc.py +81 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_build_commit.py +2 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_composition.py +3 -6
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_blocked.py +18 -9
- stacktrace_cli-0.13.0/tests/test_detector_client_errors.py +125 -0
- stacktrace_cli-0.13.0/tests/test_detector_credential_in_prompt.py +217 -0
- stacktrace_cli-0.13.0/tests/test_detector_declared_egress.py +100 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_deterministic.py +56 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_end_to_end.py +6 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_finding.py +9 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_history.py +38 -8
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_new_deterministic.py +33 -0
- stacktrace_cli-0.13.0/tests/test_detector_personal_data.py +220 -0
- stacktrace_cli-0.13.0/tests/test_detector_pii_in_prompt.py +117 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_prompts.py +1 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_reasoning.py +16 -6
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_secrets.py +164 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_vulnerable_dep_invoked.py +68 -54
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_why_it_stopped.py +44 -0
- stacktrace_cli-0.13.0/tests/test_entrypoint_conventions.py +110 -0
- stacktrace_cli-0.13.0/tests/test_finding_contract.py +168 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -2
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_join.py +0 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_kind_conformance.py +42 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_no_agent_kind_is_named.py +3 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_observed.py +93 -1
- stacktrace_cli-0.13.0/tests/test_one_wording_per_rule.py +168 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_openaidr_contract.py +220 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_release_gate_coverage.py +4 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_seam_boundary.py +8 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_session_identity_is_the_pair.py +19 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_the_locality_claim_is_qualified_everywhere.py +0 -9
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_title_disclosure_invariant.py +95 -18
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_untrusted_content_never_travels.py +64 -1
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/uv.lock +33 -9
- stacktrace_cli-0.11.0/src/stacktrace/cloud/__init__.py +0 -60
- stacktrace_cli-0.11.0/src/stacktrace/cloud/setup.sh +0 -469
- stacktrace_cli-0.11.0/src/stacktrace/cost/models.py +0 -38
- stacktrace_cli-0.11.0/tests/cost/test_models.py +0 -15
- stacktrace_cli-0.11.0/tests/cost/test_rules_budget.py +0 -189
- stacktrace_cli-0.11.0/tests/cost/test_usage.py +0 -255
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.agents/skills/release-stacktrace/SKILL.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.claude/settings.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.claude/skills/release-stacktrace/SKILL.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.codex/hooks.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/managed-autofix.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/pull_request_template.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/workflows/bedrock-live.yml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/workflows/guard-staging.yml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.github/workflows/publish-pypi.yml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/.gitignore +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/AGENTS.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-request.example.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-request.schema.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-response.example.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/decision-response.schema.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/example.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/contracts/observations/v1/schema.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0003-runtime-edges.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0004-three-stage-detector.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0011-verdict-cache.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0014-declared-project-mapping.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0021-two-command-kinds.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0030-a-detection-is-dated-by-the-turns-it-cites.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0032-refresh-daemon-compositions-outside-detection.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0033-a-third-party-analyzer-only-by-a-flag-that-names-it.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0034-the-drift-grade-is-read-off-a-run-not-a-call.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0035-naming-an-analyzer-selects-stored-answers.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0036-deliver-eligible-findings-to-slack-from-the-daemon.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0037-reuse-openaidr-append-cursors-in-the-daemon.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0038-poll-normalized-sessions-for-supplemental-changes.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0039-send-usage-telemetry-by-default-with-an-opt-out.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0041-defer-native-windows-support.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0042-read-the-build-commit-from-the-install-record.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0043-name-the-session-agent-and-host-and-count-errors-by-class.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0044-send-the-build-as-version-prints-it.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0045-scan-every-session-and-outlive-them.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0046-the-finding-store-is-an-append-only-queue.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0047-capture-activity-during-correlation-or-lose-it.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0048-the-daemon-keeps-a-leveled-content-free-activity-log.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0056-stop-a-resident-daemon-by-record-and-signal.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0057-grow-the-queue-schema-additively-and-share-only-the-document.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0058-one-word-for-a-finding-columns-for-a-counter-and-a-push-that-does-not-wait.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0059-the-daemon-does-not-decide-whether-it-should-be-running.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0060-two-upload-postures-not-one-command-with-two-sources.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0061-the-drain-sends-findings-only.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0062-hold-the-transition-lock-across-remote-side-effects.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0063-underbuilt-debt-does-not-hold-the-scan-watermark.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0064-a-redacted-value-has-one-path-span.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0065-asset-external-id-resolves-by-a-ladder.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0066-host-owned-daemon-supervision.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0067-a-webhook-is-an-independent-queue-subscriber.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0068-webhooks-retry-the-retained-backlog.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0069-webhooks-deliver-what-retention-holds.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0071-render-the-allowlisted-payload-per-destination.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0074-a-window-selects-findings-by-when-they-happened.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0076-two-phase-detection-pipeline.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0077-the-bom-job-wakes-once-at-startup-staggered.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0078-a-seeded-display-prefix-replaces-the-hostname-label.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0079-the-monitor-page-renders-findings-not-pipeline-health.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0080-enabling-reasoning-does-not-requeue-the-past.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0081-reasoning-activation-returns-to-explicit-opt-in.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0082-monitor-checks-every-installed-component-by-default.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0083-each-block-reason-is-its-own-rule.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0084-a-recursive-deletes-evidence-is-the-rm-that-ran.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0085-show-when-and-which-finding-slack-delivered.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0086-a-refusal-names-who-answered-the-call.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0087-deploy-compiled-policy-with-a-privileged-scheduled-job.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0088-slack-alerts-leave-out-confidence.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0089-infra-gate-reads-commands-not-shell-semantics.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0091-mark-our-own-machines-and-name-what-failed.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0092-cost-is-its-own-rule-family.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0094-estimate-cost-from-tokens-the-agent-figure-is-a-cross-check.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0095-cost-findings-reach-fleet-each-rule-can-be-muted.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0097-the-daemon-makes-cost-findings-and-the-monitor-reads-them.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0098-a-run-is-its-main-session.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0100-the-monitor-runs-offline-for-the-website.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0102-token-use-is-never-compared-with-a-providers-usage-api.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0103-finished-runs-may-leave-as-numbers-for-org-baselines.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0105-an-asset-key-is-a-bare-uuid.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0106-boot-id-is-salted-with-the-pid-namespace.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0107-the-daemon-follows-every-kind-openaidr-reads.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0108-a-kind-renamed-before-any-release-read-it-keeps-no-alias.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0110-every-kinds-account-comes-from-openaidr.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0111-built-in-sub-agents-and-skills-come-from-the-bom.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0112-a-person-is-known-by-the-accounts-on-the-host.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0114-similar-sessions-are-the-same-agent-in-the-same-repo.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0115-usage-states-its-coverage-and-fleet-returns-expected-runs.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0116-a-component-row-carries-what-its-results-cost-under-one-closed-key.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0117-a-component-row-on-the-day-of-a-switch-counts-from-the-switch.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0119-read-sessions-from-an-ai-gateway-and-block-inline.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0120-own-the-adapter-event-envelope.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0121-a-cloud-sessions-runs-are-its-persons-and-a-card-says-where-its-name-came-from.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0122-use-stacktrace-as-the-python-package.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/0124-fleet-imports-core-from-the-stacktrace-distribution.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/HOOK-PROMPT.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/adrs/TEMPLATE.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/cutover-openaca-remote.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/002-session-input.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/003-correlation.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/004-detector.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/005-remote-sync.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/006-cli-composition.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/007-detection-upload.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/008-monitor.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/009-reasoning-jev.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/010-session-daemon.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/011-daemon-store.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/012-daemon-scanning.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/013-daemon-uploads.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/014-asset-identity.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/015-managed-policy-deployment.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/016-cost-phase-1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/plans/017-cost-phase-2.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.0.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.1.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.10.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.11.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.2.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.2.3.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.3.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.3.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.4.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.4.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.2.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.5.3.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.6.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.6.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.7.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.7.1.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.8.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/releases/v0.9.0.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/research/001-intent-drift-metric.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/agent-observability.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/aidr.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/cli-composition.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/correlation.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/cost-phase-2.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-scanning.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/daemon-store.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/detection-upload.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/event-time.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/monitor-inventory.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/notification-delivery.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/production-agent-observability.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/reasoning-jev.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/docs/specs/session-input.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/examples/observations/custom_agent.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/README.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/.gitignore +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/ci.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/main.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/outputs.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/bedrock-sandbox/variables.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/.gitignore +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/README.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/check.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/ci.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/connect.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/Dockerfile +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/entrypoint.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/envoy/litellm.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/Dockerfile +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/config.subscription.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/config.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/images/litellm/entrypoint.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/main.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/moved.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/outputs.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/smoke.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/user-key.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/guard-staging/variables.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/main.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/outputs.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/infra/modules/express-gateway/variables.tf +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/e2e/claude.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/e2e/scenarios.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/envoy/envoy.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/envoy/run.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/README.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/config.example.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/config.subscription.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/config.baseten.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/config.mock.yaml +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/mock_upstream.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/e2e/parity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/stacktrace_keys.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/integrations/litellm/stacktrace_litellm.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/scripts/cost_latency.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/scripts/git-hooks/pre-push +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/scripts/install-hooks.sh +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/__main__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/analysis.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/build.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/core/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/core/observations.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/acquire.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/join.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/orchestrate.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/project_map.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/record.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/correlate/render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/clock.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/component_usage.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/components.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/evidence.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/org_baselines.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/runs.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/tokens.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/cost/totals.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/accounts.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/activity_log.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/bom.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/composition.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/identity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/jobs.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/lifecycle.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/observer.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/paths.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/scan.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/daemon/service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/analyzer.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/priors.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v1/stacktrace-deceptive-completion.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-deceptive-completion.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-infra-unsafe-action.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/exclusions.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/framing.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/verdict.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/detector/windows.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/analyzer.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/check.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/exchange.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/anthropic.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/bedrock.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/body.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/openai_chat.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/formats/openai_responses.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/gateway/sink.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/inventory.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/offline.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/reasoning.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/server.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/apple-icon.png +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/favicon.ico +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/OFL.txt +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/fonts/playfair-display-600-italic-latin.woff2 +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/icon.svg +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/site/inventory.js +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/state.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/verdicts.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/monitor/watch.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/options.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/private_state.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/py.typed +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/identity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/payload.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy_service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/policy_worker.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/redact.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/spool.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/remote/sync_detect.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sdk.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/access.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/index.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/lineage.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/outcome.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/sessions/render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/posthog.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/telemetry/state.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/src/stacktrace/webhook/config.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/agent_bom_fixture.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/scenarios.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_as_of_cuts_every_timed_collection.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_clock.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_component_usage.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_components.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_cost_latency.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_evidence.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_ledger.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_org_baselines.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_reasons.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_runs.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/cost/test_totals.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/observing.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_activity_log.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_composition.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_config.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_cost_guidance.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_detection_needs_no_subscriber.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_identity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_job_thread.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_jobs.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_lifecycle.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_observer.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_queue_reader.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_scan.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_socket.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_stage_times.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_store.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_subagent_routing.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/daemon/test_the_drained_payload_is_the_cold_one.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/gateway-last-turn.json +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/projects/run/b23c3bab-a677-4b5f-ac36-e132c7df29e5.jsonl +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_analyzer.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_bodies_and_logs.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_call_records.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_check.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_choice_is_read.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_read_field_is_validated.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_every_shortfall_is_a_recorded_fallback.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_gateway_keys.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_gateway_scripts.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_litellm_stream.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_litellm_subscription_config.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_parity_live_capture.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/gateway/test_unstated_outcomes.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/inventory_harness.mjs +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_cost_range_switch.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_inventory.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_inventory_page.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_offline.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_reasoning_gates.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_server.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_state.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_verdicts.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/monitor/test_watch.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/observations/test_contract.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/observations/test_decisions.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/observations/test_event_envelope.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/helpers.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_activity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_client.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_layers_compose.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_redaction.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_spool.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_upload_contract.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_detect_wire_payload.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_identity.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_no_local_path_survives_redaction.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_payload.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy_service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_policy_service_cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_redact_payload.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_spool.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_sync.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_sync_detect.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_upload_contract.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/remote/test_usage_client.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/sdk/test_observation_client.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/__init__.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_activity_log.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_events.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_every_internal_save_is_reported.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_release_gate.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_state.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/telemetry/test_uploader.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_acquire.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_adr_cross_references_are_reciprocal.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_agent_instance_id.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_analysis.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_bom_shape.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_call_status_conventions.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_correlate_orchestrate.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_correlate_render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_correlated_session.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detection_components.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detection_event_time.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detection_subject.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_analyzer_contract.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_analyzer_live.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_cache.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_infra_reasoning.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_jev.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_names_the_service.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_priors.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_run.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_verdict.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_detector_windows.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_evidence_is_dated_not_numbered.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_help_sections.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_monitor_cli.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_no_test_undoes_every_patch_at_once.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_openaca_contract.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_option_arity_matches_the_binary.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_project_map.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_python_namespace.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_readme_examples_are_real_output.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_release_readiness.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_sessions_access.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_sessions_end_to_end.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_sessions_protocol_typing.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_sessions_protocols.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_sessions_render.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_shell_separators_match_the_shell.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_signed_in_asks_the_agent.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_the_detector_spec_lists_the_shipped_catalogue.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_the_jev_spec_states_the_shipped_thresholds.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_verification_subcommands_match_the_binary.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/test_what_jev_is_told_is_what_was_disclosed.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/tool_fields.py +0 -0
- {stacktrace_cli-0.11.0 → stacktrace_cli-0.13.0}/tests/webhook/test_cli.py +0 -0
|
@@ -5,6 +5,12 @@ on:
|
|
|
5
5
|
branches: [main]
|
|
6
6
|
pull_request:
|
|
7
7
|
|
|
8
|
+
# A new push to a PR cancels the run for the push it replaces, as in Fleet.
|
|
9
|
+
# Runs on main are never cancelled, so every merged commit is checked.
|
|
10
|
+
concurrency:
|
|
11
|
+
group: ci-${{ github.workflow }}-${{ github.ref }}
|
|
12
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
13
|
+
|
|
8
14
|
jobs:
|
|
9
15
|
lint-and-test:
|
|
10
16
|
runs-on: ubuntu-latest
|
|
@@ -240,13 +240,23 @@ the alternative we rejected? If yes, write the ADR.
|
|
|
240
240
|
full ADR. The cost of one Read is much smaller than the cost of
|
|
241
241
|
re-deriving or re-litigating a decision.
|
|
242
242
|
|
|
243
|
-
**Supersede, never edit.** Accepted ADRs are immutable. If a later
|
|
244
|
-
decision contradicts an existing ADR, write a NEW ADR
|
|
243
|
+
**Supersede or amend, never edit.** Accepted ADRs are immutable. If a later
|
|
244
|
+
decision contradicts an existing ADR, write a NEW ADR that supersedes or
|
|
245
|
+
amends it, as the next rule decides. For a supersession, put
|
|
245
246
|
`supersedes: NNNN` in its frontmatter, and update the old one's
|
|
246
247
|
frontmatter to `status: superseded` + `superseded-by: NNNN`. Old PRs
|
|
247
248
|
need to remain readable against the rules in effect at the time —
|
|
248
249
|
silently editing an accepted ADR breaks that contract.
|
|
249
250
|
|
|
251
|
+
**Amend or supersede: one test.** Ask if any decision in the old ADR still
|
|
252
|
+
binds, whether or not the ADR numbers its decisions. If one does, amend: put
|
|
253
|
+
`amends: NNNN` on the new ADR and `amended-by: NNNN` on the old one, and both
|
|
254
|
+
stay active. If none does, supersede. Only this test decides. The size of
|
|
255
|
+
the change, the importance of the replaced clause, and the old ADR's "When
|
|
256
|
+
to revisit" text do not change the result. `docs/adrs/INDEX.md` gives the
|
|
257
|
+
worked example. A reviewer reports the choice only when the finding names
|
|
258
|
+
every decision in the old ADR and shows that none still binds.
|
|
259
|
+
|
|
250
260
|
## Commits and PRs
|
|
251
261
|
|
|
252
262
|
- Frequent commits, one logical change per commit.
|
|
@@ -264,12 +274,55 @@ silently editing an accepted ADR breaks that contract.
|
|
|
264
274
|
the user explicitly says "merge locally," "keep as branch," or
|
|
265
275
|
"discard."
|
|
266
276
|
|
|
277
|
+
## Writing documents
|
|
278
|
+
|
|
279
|
+
Write all Markdown documents in ASD-STE100 Simplified Technical English.
|
|
280
|
+
This includes specs, ADRs, READMEs, plans and release notes. The rule
|
|
281
|
+
applies to every author, human or agent.
|
|
282
|
+
|
|
283
|
+
- Write one idea in each sentence.
|
|
284
|
+
- Use a maximum of 20 words in an instruction and 25 words in a
|
|
285
|
+
description.
|
|
286
|
+
- Use a maximum of six sentences in a paragraph.
|
|
287
|
+
- Use the active voice and the present tense.
|
|
288
|
+
- Start an instruction with a verb, for example "Run the tests."
|
|
289
|
+
- Use "a", "an" and "the". Do not remove them to make the text shorter.
|
|
290
|
+
- Use one term for one thing, and use it the same way in all of the
|
|
291
|
+
document.
|
|
292
|
+
- Use simple, common words. Do not use filler, such as "in order to" or
|
|
293
|
+
"utilize".
|
|
294
|
+
- Do not use em-dash asides. Write a new sentence.
|
|
295
|
+
- Do not change technical names, commands or code. Code blocks, tables and
|
|
296
|
+
quoted text do not have to obey these rules.
|
|
297
|
+
|
|
298
|
+
Apply these rules to the text that you write or change. Do not rewrite an
|
|
299
|
+
existing document only to change its style. Do not edit an accepted ADR to
|
|
300
|
+
change its style.
|
|
301
|
+
|
|
302
|
+
These rules are for authors. They are not a code review topic. Reviewers
|
|
303
|
+
do not report style findings.
|
|
304
|
+
|
|
267
305
|
## Code Review Rules
|
|
268
306
|
|
|
307
|
+
**The goal of review is to converge.** The reviewer and the fixer both work
|
|
308
|
+
toward a PR that can merge in few rounds. Each round costs a full CI run and
|
|
309
|
+
a review, and a finding on text that was already reviewed starts another
|
|
310
|
+
round. Converging does not mean letting a serious defect through. The first
|
|
311
|
+
review catches the glaring issues, and later reviews check only what changed.
|
|
312
|
+
|
|
269
313
|
### Reviewer
|
|
270
314
|
|
|
271
|
-
-
|
|
272
|
-
|
|
315
|
+
- **The first review of a PR is the complete one.** Review the full PR
|
|
316
|
+
against its base branch. Report every qualifying finding together. Do not
|
|
317
|
+
reserve findings for later rounds.
|
|
318
|
+
- **A later review covers only what changed since the previous reviewed
|
|
319
|
+
head.** That is the PR's new commits, plus existing code whose behavior
|
|
320
|
+
those commits change, such as a caller or dependency of changed code.
|
|
321
|
+
Changes that a merge or rebase brings in from the base branch are not part
|
|
322
|
+
of it.
|
|
323
|
+
- **Do not report a defect that existed at the previous reviewed head**,
|
|
324
|
+
unless the new commits change its behavior. Exception: report a P0 or P1
|
|
325
|
+
even if it existed before, and label it a late discovery.
|
|
273
326
|
- Report concrete, actionable defects with supported failure scenarios.
|
|
274
327
|
Respect explicit scope decisions and accepted tradeoffs. Do not present
|
|
275
328
|
speculative hardening or optional improvements as correctness defects.
|
|
@@ -280,12 +333,16 @@ silently editing an accepted ADR breaks that contract.
|
|
|
280
333
|
- P3: low-priority suggestion.
|
|
281
334
|
- Report only P0 and P1 findings. Do not post P2 or P3 findings, inline or
|
|
282
335
|
in the review summary. Do not inflate priority to get a finding reported.
|
|
283
|
-
-
|
|
284
|
-
|
|
336
|
+
- A missing detail or an optional improvement is never P1. This applies to
|
|
337
|
+
code and to documentation. A P1 is something wrong: a defect, or a false
|
|
338
|
+
statement.
|
|
339
|
+
- On later reviews, verify that the earlier fixes work. Check their effects on
|
|
340
|
+
callers and dependencies.
|
|
285
341
|
- When review history supports it, identify a finding as:
|
|
286
342
|
- Regression: introduced since the previous reviewed head.
|
|
287
|
-
- Late discovery: present at a previously reviewed head but not reported.
|
|
288
343
|
- Unresolved: a previously reported defect remains.
|
|
344
|
+
- Late discovery: present at a previously reviewed head but not reported.
|
|
345
|
+
Only a P0 or P1 may be a late discovery.
|
|
289
346
|
If the history is unavailable or ambiguous, say so rather than guessing.
|
|
290
347
|
- Deduplicate by underlying defect and remedy, not by title. Refer to an
|
|
291
348
|
existing thread for an unresolved defect instead of opening another one.
|
|
@@ -301,6 +358,13 @@ silently editing an accepted ADR breaks that contract.
|
|
|
301
358
|
If its reasoning or priority is wrong, explain why rather than applying
|
|
302
359
|
it solely because a reviewer requested it. Surface unresolved disputes
|
|
303
360
|
for human judgment.
|
|
361
|
+
- Decline a late discovery that is not P0 or P1. If the defect existed at the
|
|
362
|
+
previous reviewed head and the new commits do not change its behavior,
|
|
363
|
+
reply that the review rules exclude it, and do not fix it. A declined
|
|
364
|
+
finding does not count as a fix round.
|
|
365
|
+
- Keep each fix to what its finding needs. Do not rewrite or extend nearby
|
|
366
|
+
code or text. A change beyond the finding gives the next review new
|
|
367
|
+
material to report, and the PR does not converge.
|
|
304
368
|
- Fix the underlying invariant across relevant call sites. Test the
|
|
305
369
|
failure class rather than only the reported example.
|
|
306
370
|
- Preserve accepted fixes and regression tests when reviewing a rebased PR or
|
|
@@ -310,9 +374,18 @@ silently editing an accepted ADR breaks that contract.
|
|
|
310
374
|
- Batch related fixes into one tested update before requesting re-review.
|
|
311
375
|
Avoid duplicate review requests for the same head.
|
|
312
376
|
- An automated fixer pushes ordinary commits to the existing PR branch and
|
|
313
|
-
runs every required gate. It does not bypass gates, merge,
|
|
314
|
-
|
|
315
|
-
|
|
377
|
+
runs every required gate. It does not bypass gates, merge, or change
|
|
378
|
+
workflows, permissions, credentials, or branch protection. It force-pushes
|
|
379
|
+
only after a rebase, as the next rule says. Report an environment failure
|
|
380
|
+
as a blocker.
|
|
381
|
+
- When a PR branch conflicts with its base branch, the automated fixer
|
|
382
|
+
rebases it onto the current base branch. The base branch is normally
|
|
383
|
+
`main`. It resolves the conflicts, runs every required gate, and pushes
|
|
384
|
+
with `git push --force-with-lease`. It does not merge the base branch into
|
|
385
|
+
the PR branch. PR branches are rarely shared, so rewritten history is
|
|
386
|
+
acceptable. Report a conflict as a blocker when both sides change the same
|
|
387
|
+
logic and each resolution loses behavior. A rebase with no other change is
|
|
388
|
+
not a fix round.
|
|
316
389
|
- After pushing fixes, wait for CI and a completed review of the current
|
|
317
390
|
head. Silence, an older review, or a running review is not clearance.
|
|
318
391
|
- Stop and ask for human input when the same failure repeats without progress.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: stacktrace-cli
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.13.0
|
|
4
4
|
Summary: CLI for Stacktrace — Detection and Response platform for AI Agents.
|
|
5
5
|
Project-URL: Homepage, https://stacktrace.ai
|
|
6
6
|
Author-email: "Stacktrace AI, Inc" <founders@stacktrace.ai>
|
|
@@ -20,8 +20,8 @@ Classifier: Topic :: Security
|
|
|
20
20
|
Requires-Python: >=3.11
|
|
21
21
|
Requires-Dist: click>=8.1
|
|
22
22
|
Requires-Dist: httpx<1.0.dev0,>=0.28.1
|
|
23
|
-
Requires-Dist: openaca==0.
|
|
24
|
-
Requires-Dist: openaidr==0.
|
|
23
|
+
Requires-Dist: openaca==0.11.0
|
|
24
|
+
Requires-Dist: openaidr==0.7.0
|
|
25
25
|
Requires-Dist: posthog<8,>=7.0
|
|
26
26
|
Requires-Dist: pydantic<3,>=2.10
|
|
27
27
|
Description-Content-Type: text/markdown
|
|
@@ -52,7 +52,7 @@ Requires Python 3.11 or newer.
|
|
|
52
52
|
|
|
53
53
|
```console
|
|
54
54
|
$ stacktrace --version
|
|
55
|
-
stacktrace 0.
|
|
55
|
+
stacktrace 0.13.0
|
|
56
56
|
```
|
|
57
57
|
|
|
58
58
|
## Python package namespace
|
|
@@ -107,9 +107,14 @@ stacktrace webhook disable
|
|
|
107
107
|
```
|
|
108
108
|
|
|
109
109
|
`configure` prompts for an optional HMAC-SHA256 signing secret without echoing
|
|
110
|
-
it. The endpoint receives a narrow JSON document
|
|
111
|
-
severity, confidence and session identity
|
|
112
|
-
|
|
110
|
+
it. The endpoint receives a narrow JSON document: the event ID, detection time,
|
|
111
|
+
rule, severity, confidence and session identity, plus, when the finding has
|
|
112
|
+
them, the rule's catalogue title, the component it concerns (type and name) and
|
|
113
|
+
the kinds of evidence it cites. For `stacktrace-destructive-action` the
|
|
114
|
+
evidence kind is `rm -rf` and the paths it deleted outside the workspace,
|
|
115
|
+
redacted so an absolute path is never sent (ADR-0073, ADR-0084). Transcript
|
|
116
|
+
content, remediation text and evidence detail are not sent. Delivery is at
|
|
117
|
+
least once, so receivers should deduplicate on
|
|
113
118
|
`event_id`. The URL and secret are stored in a mode-0600 host configuration
|
|
114
119
|
file. HTTP is accepted only for loopback development endpoints.
|
|
115
120
|
|
|
@@ -250,6 +255,9 @@ Beta, and under active development.
|
|
|
250
255
|
Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
|
|
251
256
|
[OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
|
|
252
257
|
kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
|
|
258
|
+
[Agent support](docs/agent-support.md) lists what works for each agent, rule by
|
|
259
|
+
rule, and what cannot. Codex is next
|
|
260
|
+
([spec](docs/specs/codex-agent-kind.md)).
|
|
253
261
|
|
|
254
262
|
## Built on
|
|
255
263
|
|
|
@@ -24,7 +24,7 @@ Requires Python 3.11 or newer.
|
|
|
24
24
|
|
|
25
25
|
```console
|
|
26
26
|
$ stacktrace --version
|
|
27
|
-
stacktrace 0.
|
|
27
|
+
stacktrace 0.13.0
|
|
28
28
|
```
|
|
29
29
|
|
|
30
30
|
## Python package namespace
|
|
@@ -79,9 +79,14 @@ stacktrace webhook disable
|
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
`configure` prompts for an optional HMAC-SHA256 signing secret without echoing
|
|
82
|
-
it. The endpoint receives a narrow JSON document
|
|
83
|
-
severity, confidence and session identity
|
|
84
|
-
|
|
82
|
+
it. The endpoint receives a narrow JSON document: the event ID, detection time,
|
|
83
|
+
rule, severity, confidence and session identity, plus, when the finding has
|
|
84
|
+
them, the rule's catalogue title, the component it concerns (type and name) and
|
|
85
|
+
the kinds of evidence it cites. For `stacktrace-destructive-action` the
|
|
86
|
+
evidence kind is `rm -rf` and the paths it deleted outside the workspace,
|
|
87
|
+
redacted so an absolute path is never sent (ADR-0073, ADR-0084). Transcript
|
|
88
|
+
content, remediation text and evidence detail are not sent. Delivery is at
|
|
89
|
+
least once, so receivers should deduplicate on
|
|
85
90
|
`event_id`. The URL and secret are stored in a mode-0600 host configuration
|
|
86
91
|
file. HTTP is accepted only for loopback development endpoints.
|
|
87
92
|
|
|
@@ -222,6 +227,9 @@ Beta, and under active development.
|
|
|
222
227
|
Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
|
|
223
228
|
[OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
|
|
224
229
|
kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
|
|
230
|
+
[Agent support](docs/agent-support.md) lists what works for each agent, rule by
|
|
231
|
+
rule, and what cannot. Codex is next
|
|
232
|
+
([spec](docs/specs/codex-agent-kind.md)).
|
|
225
233
|
|
|
226
234
|
## Built on
|
|
227
235
|
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Security policy
|
|
2
|
+
|
|
3
|
+
## Reporting a vulnerability
|
|
4
|
+
|
|
5
|
+
Email **security@stacktrace.ai**. Please do not open a public issue, post in a
|
|
6
|
+
public channel, or disclose details before we have released a fix.
|
|
7
|
+
|
|
8
|
+
A useful report says:
|
|
9
|
+
|
|
10
|
+
- the `stacktrace --version` output and your operating system;
|
|
11
|
+
- what you did, what happened, and what you expected;
|
|
12
|
+
- whether the issue can expose session content, credentials or file paths, or
|
|
13
|
+
send anything off the machine that [docs/trust.md](docs/trust.md) says stays
|
|
14
|
+
on it.
|
|
15
|
+
|
|
16
|
+
We acknowledge a report within three business days and keep you informed until
|
|
17
|
+
it is resolved. Once a fix is released we credit you in the release notes,
|
|
18
|
+
unless you ask us not to.
|
|
19
|
+
|
|
20
|
+
## Supported versions
|
|
21
|
+
|
|
22
|
+
Fixes ship in a new release on PyPI (`stacktrace-cli`). Only the latest release
|
|
23
|
+
is supported: upgrade with `uv tool upgrade stacktrace-cli` or
|
|
24
|
+
`pip install -U stacktrace-cli`. A published version is never re-uploaded, so a
|
|
25
|
+
fix always arrives as a new version number.
|
|
26
|
+
|
|
27
|
+
## Scope
|
|
28
|
+
|
|
29
|
+
In scope: the `stacktrace` command, its daemon, and every path by which it
|
|
30
|
+
sends data off the machine (see [docs/trust.md](docs/trust.md)).
|
|
31
|
+
|
|
32
|
+
Session collection and composition analysis come from two open-source
|
|
33
|
+
dependencies, [`openaidr`](https://github.com/open-agent-security/openaidr) and
|
|
34
|
+
[`openaca`](https://pypi.org/project/openaca/). Report an issue in either one
|
|
35
|
+
to us at the same address; we coordinate the fix upstream.
|
|
36
|
+
|
|
37
|
+
## Good-faith research
|
|
38
|
+
|
|
39
|
+
We will not pursue legal action against research that is done in good faith,
|
|
40
|
+
stays within your own machines and accounts, avoids harm to other people's
|
|
41
|
+
data, and gives us reasonable time to fix the issue before disclosure.
|
|
@@ -6,7 +6,7 @@ date: 2026-09-17
|
|
|
6
6
|
supersedes: null
|
|
7
7
|
superseded-by: null
|
|
8
8
|
amends: 0006
|
|
9
|
-
amended-by: 0032, 0036, 0037, 0038, 0039, 0045, 0046, 0066, 0072, 0107, 0113, 0118
|
|
9
|
+
amended-by: 0032, 0036, 0037, 0038, 0039, 0045, 0046, 0066, 0072, 0107, 0113, 0118, 0135
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
## Context
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
id: 0127
|
|
3
|
+
title: The monitor shows weighted tokens beside raw tokens
|
|
4
|
+
status: proposed
|
|
5
|
+
date: 2026-10-15
|
|
6
|
+
supersedes: null
|
|
7
|
+
superseded-by: null
|
|
8
|
+
amends: 0099
|
|
9
|
+
amended-by: null
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Context
|
|
13
|
+
|
|
14
|
+
The monitor's Usage tab adds fresh input, cache reads, cache writes and output
|
|
15
|
+
one to one. On the measured machine 98% of those tokens were cache reads
|
|
16
|
+
(ADR-0099). A cache read is billed at a tenth of a fresh input token on most
|
|
17
|
+
Claude models, and at less on the newest. So the raw total mostly says how
|
|
18
|
+
often a context was re-read. A long session that re-reads a large cache looks
|
|
19
|
+
heavy. A session that sends the same context uncached on every call looks
|
|
20
|
+
light.
|
|
21
|
+
|
|
22
|
+
Fleet now judges and shows cost in dollars (Fleet ADR-0087). A developer who
|
|
23
|
+
opens the monitor sees a raw count that moves differently from Fleet's figure.
|
|
24
|
+
Nothing on the page says why.
|
|
25
|
+
|
|
26
|
+
The product owner asked the monitor to show each kind of token on its own, and
|
|
27
|
+
what each kind weighs, beside the raw count.
|
|
28
|
+
|
|
29
|
+
ADR-0099 rejected tokens weighted by kind: "that is a price table by another
|
|
30
|
+
name." Its concern was a table kept current for every model, and a figure read
|
|
31
|
+
against an invoice it never matches. That conclusion does not hold for this
|
|
32
|
+
use:
|
|
33
|
+
|
|
34
|
+
- The table holds ratios between the kinds of one model, as the provider's
|
|
35
|
+
pricing page states them. It holds no price. The ratios change rarely: every
|
|
36
|
+
Claude model shares the same cache write and output ratios, and only four
|
|
37
|
+
models have cheaper cache reads.
|
|
38
|
+
- A model the table does not list still gets a figure, at Anthropic's usual
|
|
39
|
+
ratios, marked estimated. ADR-0099's "a new model works on day one" holds.
|
|
40
|
+
- A weighted token is still a token: one fresh input token of the model that
|
|
41
|
+
served it. It names no money and makes no claim about any invoice.
|
|
42
|
+
- Rules, thresholds, baselines, evidence and the usual stay in raw tokens.
|
|
43
|
+
Only what the monitor shows changes.
|
|
44
|
+
|
|
45
|
+
## Decision
|
|
46
|
+
|
|
47
|
+
1. **The monitor shows weighted tokens beside raw tokens.** The Usage tab's
|
|
48
|
+
head states the range's weighted total under its raw total. A card lists each
|
|
49
|
+
kind of token with its raw count, the ratio it was weighed at, its weighted
|
|
50
|
+
count and its share of the weighted total. Each row of the table by model and
|
|
51
|
+
by agent carries its weighted count. The Live tab's session line carries the
|
|
52
|
+
session's weighted count beside its tokens.
|
|
53
|
+
2. **One weighted token is one fresh input token of the model that served it.**
|
|
54
|
+
Each kind is multiplied by that model's published ratio to its own fresh
|
|
55
|
+
input, model by model, and then summed. On every Anthropic model: fresh input
|
|
56
|
+
×1, 5-minute cache write ×1.25, 1-hour cache write ×2, output ×5. Cache reads
|
|
57
|
+
×0.1, except ×0.05 on Opus 5.5 and Sonnet 5.5 and ×0.025 on Fable 5.1 and
|
|
58
|
+
Mythos 5.1. A cache write recorded without its lifetime weighs as a 5-minute
|
|
59
|
+
write.
|
|
60
|
+
3. **The table lives in the client, as ratios** (`cost/weights.py`). A model is
|
|
61
|
+
looked up by the name `cost.models` gives it, without its snapshot date, and
|
|
62
|
+
without the effort suffix Devin records (`claude-opus-5-5-medium`).
|
|
63
|
+
4. **A figure weighed by defaults is marked estimated.** A `claude-*` model the
|
|
64
|
+
table does not list, any other model (Devin's `swe-1-6`) and a response with
|
|
65
|
+
no model weigh at Anthropic's usual ratios, cache reads at ×0.1. No token is
|
|
66
|
+
dropped. The page says "estimated" and names the models.
|
|
67
|
+
5. **Three charges are not weighted:** fast mode, US-only inference, and Haiku
|
|
68
|
+
5.5's tier for prompts over 100K tokens. Each is billed higher, so each
|
|
69
|
+
leaves a weighted figure under the bill, never over. The page says so.
|
|
70
|
+
6. **Nothing else changes unit.** The chart, the runs, the components, the
|
|
71
|
+
usual, Session cost and its reasons, and every figure that leaves the
|
|
72
|
+
machine stay in raw tokens.
|
|
73
|
+
|
|
74
|
+
What this amends: ADR-0099's rejection of "tokens weighted by kind", for what
|
|
75
|
+
the monitor shows. ADR-0099's decision stands. Every cost figure is tokens, and
|
|
76
|
+
a weighted token is a token. There is still no price table: this table holds
|
|
77
|
+
ratios.
|
|
78
|
+
|
|
79
|
+
## Alternatives considered
|
|
80
|
+
|
|
81
|
+
- **Dollars on the machine.** Rejected by ADR-0099 and by this repo's rule that
|
|
82
|
+
cost is tokens, never dollars. It needs prices kept current, and invites a
|
|
83
|
+
comparison with an invoice that subscriptions and discounts never match.
|
|
84
|
+
- **One reference model for every model.** Weigh each model's tokens against a
|
|
85
|
+
single model's fresh input, so Opus and Haiku add up on one scale. Rejected:
|
|
86
|
+
the ratio between two models is a ratio of their prices, so this is dollars in
|
|
87
|
+
disguise, with a reference price to keep current.
|
|
88
|
+
- **Weigh only in Fleet**, as cost-notifications §6 proposed. Rejected: the
|
|
89
|
+
product owner asked for it on the machine. Fleet now shows dollars (Fleet
|
|
90
|
+
ADR-0087), so a monitor with raw tokens alone disagrees with Fleet by a factor
|
|
91
|
+
that moves with the mix of kinds, and nothing explains it.
|
|
92
|
+
- **Show weighted tokens instead of raw ones.** Rejected: the rules, the usual
|
|
93
|
+
and Session cost read raw tokens, and the page must show the figure they
|
|
94
|
+
judge.
|
|
95
|
+
- **Fold cache writes without a lifetime into 5-minute writes.** Rejected: that
|
|
96
|
+
changes the raw 5-minute figure. They get their own row when there are any.
|
|
97
|
+
|
|
98
|
+
## Consequences
|
|
99
|
+
|
|
100
|
+
- A reader sees why a large raw total can weigh little: cache reads count a
|
|
101
|
+
tenth or less.
|
|
102
|
+
- The table is one more thing to keep current. A changed ratio needs a client
|
|
103
|
+
release. Until it ships, a listed model's figure is off, and a new model's
|
|
104
|
+
figure says estimated.
|
|
105
|
+
- The machine's weighted tokens and Fleet's dollars are different scales. Within
|
|
106
|
+
one model they move together. Across models they do not, because each
|
|
107
|
+
model's weighted token is its own fresh input token.
|
|
108
|
+
- The monitor weighs 1-hour writes at ×2, because transcripts split the two
|
|
109
|
+
lifetimes. cost-notifications §6 had Fleet weigh both at ×1.25.
|
|
110
|
+
- `tests/cost/test_weights.py` holds each listed model's cache-read ratio,
|
|
111
|
+
checks that no kind of token is dropped, and checks that every model with a
|
|
112
|
+
known context window has ratios of its own.
|
|
113
|
+
|
|
114
|
+
## When to revisit
|
|
115
|
+
|
|
116
|
+
- When Anthropic changes a ratio, or a new model's cache reads differ from
|
|
117
|
+
×0.1.
|
|
118
|
+
- When OpenAIDR reads an agent whose provider publishes different ratios, such
|
|
119
|
+
as Codex.
|
|
120
|
+
- If Session cost or the usual should judge weighted tokens. That changes the
|
|
121
|
+
rules, and needs its own ADR.
|