stacktrace-cli 0.14.0__tar.gz → 0.16.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.
Files changed (737) hide show
  1. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/workflows/guard-staging.yml +13 -6
  2. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/PKG-INFO +8 -7
  3. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/README.md +6 -5
  4. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0112-a-person-is-known-by-the-accounts-on-the-host.md +1 -1
  5. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0118-observe-agents-through-adapters-and-a-shared-analyzer.md +1 -1
  6. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0119-read-sessions-from-an-ai-gateway-and-block-inline.md +1 -1
  7. stacktrace_cli-0.16.0/docs/adrs/0151-step-one-puts-the-daemon-beside-the-gateway.md +174 -0
  8. stacktrace_cli-0.16.0/docs/adrs/0153-a-gateway-person-reaches-fleet-as-an-account-card.md +62 -0
  9. stacktrace_cli-0.16.0/docs/adrs/0155-a-remote-mcp-servers-exact-url-reaches-fleet.md +69 -0
  10. stacktrace_cli-0.16.0/docs/adrs/0156-the-client-localizes-fleet-policy-targets.md +67 -0
  11. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/INDEX.md +4 -0
  12. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/agent-support.html +106 -50
  13. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/agent-support.md +86 -56
  14. stacktrace_cli-0.16.0/docs/releases/v0.15.0.md +53 -0
  15. stacktrace_cli-0.16.0/docs/releases/v0.16.0.md +46 -0
  16. stacktrace_cli-0.16.0/docs/specs/cursor-agent-kind.md +378 -0
  17. stacktrace_cli-0.16.0/docs/specs/gateway-daemon.md +440 -0
  18. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/managed-policy-deployment.md +5 -0
  19. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/policy-enforcement.md +77 -4
  20. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/remote-sync.md +22 -0
  21. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/README.md +39 -0
  22. stacktrace_cli-0.16.0/infra/guard-staging/images/daemon.sh +47 -0
  23. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/images/envoy/Dockerfile +6 -4
  24. stacktrace_cli-0.16.0/infra/guard-staging/images/envoy/entrypoint.sh +31 -0
  25. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/images/litellm/Dockerfile +1 -1
  26. stacktrace_cli-0.16.0/infra/guard-staging/images/litellm/entrypoint.sh +21 -0
  27. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/main.tf +35 -9
  28. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/outputs.tf +5 -0
  29. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/smoke.sh +33 -1
  30. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/variables.tf +12 -0
  31. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/envoy/envoy.yaml +31 -1
  32. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/stacktrace_litellm.py +39 -6
  33. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/pyproject.toml +4 -3
  34. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/__init__.py +1 -1
  35. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/composition.py +9 -0
  36. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/evidence.py +0 -10
  37. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/cli.py +17 -4
  38. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/config.py +38 -0
  39. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/fleet.py +4 -1
  40. stacktrace_cli-0.16.0/src/stacktrace/daemon/gateway.py +153 -0
  41. stacktrace_cli-0.16.0/src/stacktrace/daemon/gateway_policy.py +161 -0
  42. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/policy_collect.py +90 -5
  43. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/policy_runtime.py +116 -28
  44. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/runtime.py +20 -1
  45. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-infra-unsafe-action.json +1 -1
  46. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/analyzer.py +117 -11
  47. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/check.py +4 -0
  48. stacktrace_cli-0.16.0/src/stacktrace/gateway/principal.py +88 -0
  49. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/service.py +29 -4
  50. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/sink.py +129 -15
  51. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/hooks/claude.py +10 -5
  52. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/detect_payload.py +14 -0
  53. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/policy.py +17 -1
  54. stacktrace_cli-0.16.0/src/stacktrace/remote/policy_localize.py +211 -0
  55. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/policy_worker.py +14 -1
  56. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/redact.py +5 -1
  57. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/upload_contract.py +61 -1
  58. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/entrypoint.py +8 -6
  59. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/conftest.py +13 -0
  60. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_evidence.py +1 -8
  61. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_claude_policy_conformance.py +5 -0
  62. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_cli.py +37 -5
  63. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_codex_policy_collect_contract.py +15 -0
  64. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_config.py +23 -0
  65. stacktrace_cli-0.16.0/tests/daemon/test_gateway.py +375 -0
  66. stacktrace_cli-0.16.0/tests/daemon/test_gateway_fleet.py +131 -0
  67. stacktrace_cli-0.16.0/tests/daemon/test_gateway_person.py +140 -0
  68. stacktrace_cli-0.16.0/tests/daemon/test_gateway_policy.py +372 -0
  69. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_agent_scopes.py +27 -0
  70. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_collect.py +39 -1
  71. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_collect_contract.py +57 -0
  72. stacktrace_cli-0.16.0/tests/daemon/test_policy_decide.py +94 -0
  73. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_hook_transport.py +12 -0
  74. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_reconcile.py +141 -2
  75. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_runtime.py +75 -1
  76. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_runtime.py +16 -1
  77. stacktrace_cli-0.16.0/tests/gateway/test_envoy_principal.py +37 -0
  78. stacktrace_cli-0.16.0/tests/gateway/test_litellm_through_daemon.py +272 -0
  79. stacktrace_cli-0.16.0/tests/gateway/test_principal.py +249 -0
  80. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_contract_is_exhaustive.py +11 -6
  81. stacktrace_cli-0.16.0/tests/remote/test_exact_remote_mcp_url.py +185 -0
  82. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_facade_contract.py +21 -0
  83. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_hook_policy.py +3 -1
  84. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_identity.py +3 -0
  85. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_policy.py +45 -0
  86. stacktrace_cli-0.16.0/tests/remote/test_policy_localize.py +379 -0
  87. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_events.py +1 -1
  88. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_every_derived_site.py +1 -1
  89. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_hooks.py +1 -1
  90. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_agent_support_doc.py +1 -0
  91. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_cli.py +1 -1
  92. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_entrypoint_conventions.py +4 -2
  93. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_kind_conformance.py +36 -0
  94. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_no_agent_kind_is_named.py +8 -0
  95. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_openaidr_contract.py +231 -0
  96. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_session_identity_is_the_pair.py +4 -0
  97. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/uv.lock +5 -5
  98. stacktrace_cli-0.14.0/infra/guard-staging/images/envoy/entrypoint.sh +0 -13
  99. stacktrace_cli-0.14.0/infra/guard-staging/images/litellm/entrypoint.sh +0 -8
  100. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.agents/skills/release-stacktrace/SKILL.md +0 -0
  101. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.claude/settings.json +0 -0
  102. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.claude/skills/release-stacktrace/SKILL.md +0 -0
  103. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.codex/hooks.json +0 -0
  104. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/managed-autofix.md +0 -0
  105. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/pull_request_template.md +0 -0
  106. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/workflows/bedrock-live.yml +0 -0
  107. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/workflows/ci.yml +0 -0
  108. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.github/workflows/publish-pypi.yml +0 -0
  109. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/.gitignore +0 -0
  110. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/AGENTS.md +0 -0
  111. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/CLAUDE.md +0 -0
  112. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/SECURITY.md +0 -0
  113. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/decision-request.example.json +0 -0
  114. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/decision-request.schema.json +0 -0
  115. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/decision-response.example.json +0 -0
  116. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/decision-response.schema.json +0 -0
  117. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/example.json +0 -0
  118. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/contracts/observations/v1/schema.json +0 -0
  119. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0001-session-telemetry-as-input.md +0 -0
  120. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0002-session-collection-in-openaidr.md +0 -0
  121. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0003-runtime-edges.md +0 -0
  122. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0004-three-stage-detector.md +0 -0
  123. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0005-detection-family-and-report-assembly.md +0 -0
  124. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0006-trust-boundary-and-detection-upload.md +0 -0
  125. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0007-proprietary-package-on-open-dependencies.md +0 -0
  126. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0008-console-in-separate-demo-package.md +0 -0
  127. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0010-detection-severity-and-confidence-ladders.md +0 -0
  128. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0011-verdict-cache.md +0 -0
  129. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0012-observation-evidence-kinds-and-transport.md +0 -0
  130. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0013-rule-catalogue-triage-and-per-rule-context.md +0 -0
  131. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0014-declared-project-mapping.md +0 -0
  132. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0015-narrow-the-security-catalogue.md +0 -0
  133. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0016-stall-grouping-is-session-wide.md +0 -0
  134. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0017-a-declined-repeat-is-a-stall.md +0 -0
  135. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0018-remote-sync-config-and-facade-consumption.md +0 -0
  136. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0019-delegated-commands-are-openaca-objects.md +0 -0
  137. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0020-openaca-consumption-boundary.md +0 -0
  138. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0021-two-command-kinds.md +0 -0
  139. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0022-detection-scope-is-a-catalogue-column.md +0 -0
  140. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0023-sync-detect-collects-and-does-not-escalate.md +0 -0
  141. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0024-the-upload-carries-observations.md +0 -0
  142. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0025-a-denied-call-is-activity-never-an-invocation.md +0 -0
  143. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0026-the-console-becomes-a-product-surface.md +0 -0
  144. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0027-a-finding-may-name-what-it-could-not-place.md +0 -0
  145. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0028-the-console-shows-what-it-placed.md +0 -0
  146. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0029-stage-three-returns-to-opt-in.md +0 -0
  147. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0030-a-detection-is-dated-by-the-turns-it-cites.md +0 -0
  148. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0031-one-host-daemon-observes-native-session-logs.md +0 -0
  149. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0032-refresh-daemon-compositions-outside-detection.md +0 -0
  150. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0033-a-third-party-analyzer-only-by-a-flag-that-names-it.md +0 -0
  151. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0034-the-drift-grade-is-read-off-a-run-not-a-call.md +0 -0
  152. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0035-naming-an-analyzer-selects-stored-answers.md +0 -0
  153. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0036-deliver-eligible-findings-to-slack-from-the-daemon.md +0 -0
  154. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0037-reuse-openaidr-append-cursors-in-the-daemon.md +0 -0
  155. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0038-poll-normalized-sessions-for-supplemental-changes.md +0 -0
  156. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0039-send-usage-telemetry-by-default-with-an-opt-out.md +0 -0
  157. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0041-defer-native-windows-support.md +0 -0
  158. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0042-read-the-build-commit-from-the-install-record.md +0 -0
  159. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0043-name-the-session-agent-and-host-and-count-errors-by-class.md +0 -0
  160. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0044-send-the-build-as-version-prints-it.md +0 -0
  161. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0045-scan-every-session-and-outlive-them.md +0 -0
  162. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0046-the-finding-store-is-an-append-only-queue.md +0 -0
  163. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0047-capture-activity-during-correlation-or-lose-it.md +0 -0
  164. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0048-the-daemon-keeps-a-leveled-content-free-activity-log.md +0 -0
  165. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0056-stop-a-resident-daemon-by-record-and-signal.md +0 -0
  166. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0057-grow-the-queue-schema-additively-and-share-only-the-document.md +0 -0
  167. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0058-one-word-for-a-finding-columns-for-a-counter-and-a-push-that-does-not-wait.md +0 -0
  168. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0059-the-daemon-does-not-decide-whether-it-should-be-running.md +0 -0
  169. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0060-two-upload-postures-not-one-command-with-two-sources.md +0 -0
  170. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0061-the-drain-sends-findings-only.md +0 -0
  171. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0062-hold-the-transition-lock-across-remote-side-effects.md +0 -0
  172. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0063-underbuilt-debt-does-not-hold-the-scan-watermark.md +0 -0
  173. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0064-a-redacted-value-has-one-path-span.md +0 -0
  174. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0065-asset-external-id-resolves-by-a-ladder.md +0 -0
  175. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0066-host-owned-daemon-supervision.md +0 -0
  176. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0067-a-webhook-is-an-independent-queue-subscriber.md +0 -0
  177. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0068-webhooks-retry-the-retained-backlog.md +0 -0
  178. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0069-webhooks-deliver-what-retention-holds.md +0 -0
  179. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0070-package-the-cloud-agent-environment-bootstrap.md +0 -0
  180. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0071-render-the-allowlisted-payload-per-destination.md +0 -0
  181. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0072-host-supervisors-own-daemon-restarts.md +0 -0
  182. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0073-name-what-fired-and-which-component.md +0 -0
  183. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0074-a-window-selects-findings-by-when-they-happened.md +0 -0
  184. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0076-two-phase-detection-pipeline.md +0 -0
  185. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0077-the-bom-job-wakes-once-at-startup-staggered.md +0 -0
  186. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0078-a-seeded-display-prefix-replaces-the-hostname-label.md +0 -0
  187. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0079-the-monitor-page-renders-findings-not-pipeline-health.md +0 -0
  188. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0080-enabling-reasoning-does-not-requeue-the-past.md +0 -0
  189. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0081-reasoning-activation-returns-to-explicit-opt-in.md +0 -0
  190. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0082-monitor-checks-every-installed-component-by-default.md +0 -0
  191. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0083-each-block-reason-is-its-own-rule.md +0 -0
  192. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0084-a-recursive-deletes-evidence-is-the-rm-that-ran.md +0 -0
  193. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0085-show-when-and-which-finding-slack-delivered.md +0 -0
  194. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0086-a-refusal-names-who-answered-the-call.md +0 -0
  195. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0087-deploy-compiled-policy-with-a-privileged-scheduled-job.md +0 -0
  196. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0088-slack-alerts-leave-out-confidence.md +0 -0
  197. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0089-infra-gate-reads-commands-not-shell-semantics.md +0 -0
  198. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0090-count-completed-commands-locate-by-ip-send-through-the-managed-proxy.md +0 -0
  199. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0091-mark-our-own-machines-and-name-what-failed.md +0 -0
  200. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0092-cost-is-its-own-rule-family.md +0 -0
  201. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0093-environment-cost-baselines-count-tokens-keyed-by-model.md +0 -0
  202. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0094-estimate-cost-from-tokens-the-agent-figure-is-a-cross-check.md +0 -0
  203. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0095-cost-findings-reach-fleet-each-rule-can-be-muted.md +0 -0
  204. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0096-cost-usage-may-leave-as-token-totals-and-work-identifiers.md +0 -0
  205. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0097-the-daemon-makes-cost-findings-and-the-monitor-reads-them.md +0 -0
  206. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0098-a-run-is-its-main-session.md +0 -0
  207. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0099-cost-is-measured-in-tokens-and-relative-increases.md +0 -0
  208. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0100-the-monitor-runs-offline-for-the-website.md +0 -0
  209. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0101-what-names-a-run-in-fleet.md +0 -0
  210. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0102-token-use-is-never-compared-with-a-providers-usage-api.md +0 -0
  211. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0103-finished-runs-may-leave-as-numbers-for-org-baselines.md +0 -0
  212. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0104-usage-is-its-own-upload.md +0 -0
  213. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0105-an-asset-key-is-a-bare-uuid.md +0 -0
  214. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0106-boot-id-is-salted-with-the-pid-namespace.md +0 -0
  215. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0107-the-daemon-follows-every-kind-openaidr-reads.md +0 -0
  216. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0108-a-kind-renamed-before-any-release-read-it-keeps-no-alias.md +0 -0
  217. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0109-a-detection-carries-its-runs-title-and-the-persons-name.md +0 -0
  218. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0110-every-kinds-account-comes-from-openaidr.md +0 -0
  219. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0111-built-in-sub-agents-and-skills-come-from-the-bom.md +0 -0
  220. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0113-size-triggers-behaviour-explains-session-cost-carries-reasons.md +0 -0
  221. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0114-similar-sessions-are-the-same-agent-in-the-same-repo.md +0 -0
  222. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0115-usage-states-its-coverage-and-fleet-returns-expected-runs.md +0 -0
  223. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0116-a-component-row-carries-what-its-results-cost-under-one-closed-key.md +0 -0
  224. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0117-a-component-row-on-the-day-of-a-switch-counts-from-the-switch.md +0 -0
  225. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0120-own-the-adapter-event-envelope.md +0 -0
  226. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0121-a-cloud-sessions-runs-are-its-persons-and-a-card-says-where-its-name-came-from.md +0 -0
  227. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0122-use-stacktrace-as-the-python-package.md +0 -0
  228. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0123-the-cloud-boot-hook-brings-the-client-up-to-the-latest-release.md +0 -0
  229. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0124-fleet-imports-core-from-the-stacktrace-distribution.md +0 -0
  230. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0127-the-monitor-shows-weighted-tokens-beside-raw-tokens.md +0 -0
  231. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0128-usage-files-each-response-once-where-it-was-first-filed.md +0 -0
  232. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0129-an-unfinished-response-counts-the-output-it-shows.md +0 -0
  233. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0130-usage-carries-one-hour-cache-writes-and-each-responses-price-class.md +0 -0
  234. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0131-activate-hook-policy-without-a-privileged-runtime.md +0 -0
  235. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0132-every-usage-page-names-the-store-that-built-it.md +0 -0
  236. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0133-a-clients-own-error-record-is-a-third-block-channel.md +0 -0
  237. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0134-a-secret-sent-to-a-server-configured-as-remote-is-egress.md +0 -0
  238. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0135-enforce-policy-through-the-daemon-and-agent-hooks.md +0 -0
  239. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0136-bound-policy-evidence-collection-as-one-bundle.md +0 -0
  240. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0137-a-rule-in-wording-reads-the-same-on-every-surface.md +0 -0
  241. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0138-a-credential-in-a-prompt-travels-as-a-mask-and-a-digest.md +0 -0
  242. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0139-remediation-finding-contract.md +0 -0
  243. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0140-an-untitled-run-names-itself-by-its-first-five-words.md +0 -0
  244. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0141-two-remediation-models-one-credential-identity-and-a-letters-only-fragment.md +0 -0
  245. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0142-the-cli-has-no-machine-limit.md +0 -0
  246. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0143-the-plugin-owns-session-hooks-on-every-host.md +0 -0
  247. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0146-eight-rules-send-remediation-targets.md +0 -0
  248. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0147-the-webhook-names-the-run-and-the-person-and-an-egress-label-keeps-its-last-four.md +0 -0
  249. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0148-credential-egress-notifies-at-medium-confidence-when-it-is-high.md +0 -0
  250. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0149-a-credential-switch-replaces-the-mcp-sign-in-rule.md +0 -0
  251. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/0150-codex-hooks-use-the-shared-policy-runtime.md +0 -0
  252. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/HOOK-PROMPT.md +0 -0
  253. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/adrs/TEMPLATE.md +0 -0
  254. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/cutover-openaca-remote.md +0 -0
  255. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/002-session-input.md +0 -0
  256. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/003-correlation.md +0 -0
  257. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/004-detector.md +0 -0
  258. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/005-remote-sync.md +0 -0
  259. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/006-cli-composition.md +0 -0
  260. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/007-detection-upload.md +0 -0
  261. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/008-monitor.md +0 -0
  262. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/009-reasoning-jev.md +0 -0
  263. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/010-session-daemon.md +0 -0
  264. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/011-daemon-store.md +0 -0
  265. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/012-daemon-scanning.md +0 -0
  266. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/013-daemon-uploads.md +0 -0
  267. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/014-asset-identity.md +0 -0
  268. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/015-managed-policy-deployment.md +0 -0
  269. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/016-cost-phase-1.md +0 -0
  270. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/017-cost-phase-2.md +0 -0
  271. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/018-remediation-rules.md +0 -0
  272. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/plans/019-credential-switch.md +0 -0
  273. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.0.1.md +0 -0
  274. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.1.0.md +0 -0
  275. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.10.0.md +0 -0
  276. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.11.0.md +0 -0
  277. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.12.0.md +0 -0
  278. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.13.0.md +0 -0
  279. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.14.0.md +0 -0
  280. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.2.0.md +0 -0
  281. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.2.1.md +0 -0
  282. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.2.2.md +0 -0
  283. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.2.3.md +0 -0
  284. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.3.0.md +0 -0
  285. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.3.1.md +0 -0
  286. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.4.0.md +0 -0
  287. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.4.1.md +0 -0
  288. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.5.0.md +0 -0
  289. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.5.1.md +0 -0
  290. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.5.2.md +0 -0
  291. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.5.3.md +0 -0
  292. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.6.0.md +0 -0
  293. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.6.1.md +0 -0
  294. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.7.0.md +0 -0
  295. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.7.1.md +0 -0
  296. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.8.0.md +0 -0
  297. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/releases/v0.9.0.md +0 -0
  298. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/research/001-intent-drift-metric.md +0 -0
  299. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/TEMPLATE.md +0 -0
  300. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/agent-observability.md +0 -0
  301. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/aidr.md +0 -0
  302. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/cli-composition.md +0 -0
  303. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/codex-agent-kind.md +0 -0
  304. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/codex-hook-policy.md +0 -0
  305. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/correlation.md +0 -0
  306. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/cost-notifications.md +0 -0
  307. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/cost-phase-1.md +0 -0
  308. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/cost-phase-2.md +0 -0
  309. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/cost.md +0 -0
  310. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/daemon-scanning.md +0 -0
  311. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/daemon-store.md +0 -0
  312. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/daemon-uploads.md +0 -0
  313. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/detection-policies.md +0 -0
  314. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/detection-upload.md +0 -0
  315. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/detector.md +0 -0
  316. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/event-time.md +0 -0
  317. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/hook-policy-rollout.md +0 -0
  318. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/monitor-inventory.md +0 -0
  319. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/monitor.md +0 -0
  320. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/notification-delivery.md +0 -0
  321. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/plugin-installation.md +0 -0
  322. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/production-agent-observability.md +0 -0
  323. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/reasoning-jev.md +0 -0
  324. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/session-input.md +0 -0
  325. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/specs/usage-upload.md +0 -0
  326. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/docs/trust.md +0 -0
  327. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/examples/observations/custom_agent.py +0 -0
  328. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/README.md +0 -0
  329. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/bedrock-sandbox/.gitignore +0 -0
  330. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/bedrock-sandbox/ci.tf +0 -0
  331. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/bedrock-sandbox/main.tf +0 -0
  332. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/bedrock-sandbox/outputs.tf +0 -0
  333. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/bedrock-sandbox/variables.tf +0 -0
  334. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/.gitignore +0 -0
  335. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/check.sh +0 -0
  336. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/ci.tf +0 -0
  337. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/connect.sh +0 -0
  338. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/images/envoy/litellm.yaml +0 -0
  339. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/images/litellm/config.subscription.yaml +0 -0
  340. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/images/litellm/config.yaml +0 -0
  341. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/moved.tf +0 -0
  342. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/guard-staging/user-key.sh +0 -0
  343. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/modules/express-gateway/main.tf +0 -0
  344. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/modules/express-gateway/outputs.tf +0 -0
  345. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/infra/modules/express-gateway/variables.tf +0 -0
  346. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/e2e/claude.sh +0 -0
  347. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/e2e/scenarios.sh +0 -0
  348. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/envoy/run.sh +0 -0
  349. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/README.md +0 -0
  350. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/config.example.yaml +0 -0
  351. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/config.subscription.yaml +0 -0
  352. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/e2e/config.baseten.yaml +0 -0
  353. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/e2e/config.mock.yaml +0 -0
  354. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/e2e/mock_upstream.py +0 -0
  355. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/e2e/parity.py +0 -0
  356. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/integrations/litellm/stacktrace_keys.py +0 -0
  357. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/scripts/cost_latency.py +0 -0
  358. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/scripts/git-hooks/pre-push +0 -0
  359. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/scripts/install-hooks.sh +0 -0
  360. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/__main__.py +0 -0
  361. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/analysis.py +0 -0
  362. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/build.py +0 -0
  363. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cli.py +0 -0
  364. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cloud/__init__.py +0 -0
  365. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cloud/boot.py +0 -0
  366. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cloud/profile.py +0 -0
  367. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cloud/setup.sh +0 -0
  368. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/core/__init__.py +0 -0
  369. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/core/observations.py +0 -0
  370. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/__init__.py +0 -0
  371. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/acquire.py +0 -0
  372. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/join.py +0 -0
  373. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/observed.py +0 -0
  374. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/orchestrate.py +0 -0
  375. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/project_map.py +0 -0
  376. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/record.py +0 -0
  377. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/correlate/render.py +0 -0
  378. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/__init__.py +0 -0
  379. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/baseline.py +0 -0
  380. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/clock.py +0 -0
  381. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/component_usage.py +0 -0
  382. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/components.py +0 -0
  383. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/copies.py +0 -0
  384. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/ledger.py +0 -0
  385. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/measures.py +0 -0
  386. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/models.py +0 -0
  387. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/org_baselines.py +0 -0
  388. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/output.py +0 -0
  389. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/price_class.py +0 -0
  390. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/reasons.py +0 -0
  391. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/rules.py +0 -0
  392. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/runs.py +0 -0
  393. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/tokens.py +0 -0
  394. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/totals.py +0 -0
  395. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/usage.py +0 -0
  396. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/cost/weights.py +0 -0
  397. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/__init__.py +0 -0
  398. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/accounts.py +0 -0
  399. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/activity_log.py +0 -0
  400. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/bom.py +0 -0
  401. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/client.py +0 -0
  402. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/composition.py +0 -0
  403. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/costs.py +0 -0
  404. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/db.py +0 -0
  405. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/identity.py +0 -0
  406. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/jobs.py +0 -0
  407. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/lifecycle.py +0 -0
  408. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/observer.py +0 -0
  409. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/paths.py +0 -0
  410. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/policy_inputs.py +0 -0
  411. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/presentation.py +0 -0
  412. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/protocol.py +0 -0
  413. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/scan.py +0 -0
  414. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/server.py +0 -0
  415. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/service.py +0 -0
  416. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/store.py +0 -0
  417. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/usage.py +0 -0
  418. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/daemon/webhook.py +0 -0
  419. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/__init__.py +0 -0
  420. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/analyzer.py +0 -0
  421. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/blocked.py +0 -0
  422. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/cache.py +0 -0
  423. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/deterministic.py +0 -0
  424. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/finding.py +0 -0
  425. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/history.py +0 -0
  426. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/jev.py +0 -0
  427. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/personal_data.py +0 -0
  428. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/priors.py +0 -0
  429. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/__init__.py +0 -0
  430. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/jev-v1/stacktrace-deceptive-completion.json +0 -0
  431. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-deceptive-completion.json +0 -0
  432. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/jev-v2/stacktrace-infra-unsafe-action.json +0 -0
  433. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/jev-v3/stacktrace-deceptive-completion.json +0 -0
  434. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/v1/exclusions.md +0 -0
  435. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/v1/framing.md +0 -0
  436. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/prompts/v1/stacktrace-deceptive-completion.md +0 -0
  437. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/reasoning.py +0 -0
  438. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/render.py +0 -0
  439. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/rules.py +0 -0
  440. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/run.py +0 -0
  441. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/secrets.py +0 -0
  442. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/verdict.py +0 -0
  443. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/detector/windows.py +0 -0
  444. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/finding_contract.py +0 -0
  445. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/finding_titles.py +0 -0
  446. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/__init__.py +0 -0
  447. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/cli.py +0 -0
  448. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/exchange.py +0 -0
  449. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/__init__.py +0 -0
  450. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/_json.py +0 -0
  451. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/anthropic.py +0 -0
  452. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/bedrock.py +0 -0
  453. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/body.py +0 -0
  454. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/openai_chat.py +0 -0
  455. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/formats/openai_responses.py +0 -0
  456. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/gateway/session.py +0 -0
  457. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/hooks/__init__.py +0 -0
  458. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/hooks/codex.py +0 -0
  459. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/hooks/session.py +0 -0
  460. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/__init__.py +0 -0
  461. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/costs.py +0 -0
  462. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/inventory.py +0 -0
  463. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/offline.py +0 -0
  464. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/reasoning.py +0 -0
  465. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/render.py +0 -0
  466. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/server.py +0 -0
  467. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/app.js +0 -0
  468. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/apple-icon.png +0 -0
  469. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/cost.js +0 -0
  470. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/favicon.ico +0 -0
  471. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/fonts/OFL.txt +0 -0
  472. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/fonts/dm-mono-400-latin.woff2 +0 -0
  473. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/fonts/dm-mono-500-latin.woff2 +0 -0
  474. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/fonts/dm-sans-latin.woff2 +0 -0
  475. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/fonts/playfair-display-600-italic-latin.woff2 +0 -0
  476. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/icon.svg +0 -0
  477. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/index.html +0 -0
  478. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/inventory.js +0 -0
  479. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/site/styles.css +0 -0
  480. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/state.py +0 -0
  481. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/verdicts.py +0 -0
  482. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/monitor/watch.py +0 -0
  483. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/options.py +0 -0
  484. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/policy_display.py +0 -0
  485. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/private_state.py +0 -0
  486. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/py.typed +0 -0
  487. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/__init__.py +0 -0
  488. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/cli.py +0 -0
  489. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/client.py +0 -0
  490. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/config.py +0 -0
  491. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/hook_policy.py +0 -0
  492. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/identity.py +0 -0
  493. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/payload.py +0 -0
  494. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/policy_service.py +0 -0
  495. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/policy_show.py +0 -0
  496. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/spool.py +0 -0
  497. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/sync.py +0 -0
  498. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/remote/sync_detect.py +0 -0
  499. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sdk.py +0 -0
  500. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/__init__.py +0 -0
  501. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/access.py +0 -0
  502. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/index.py +0 -0
  503. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/lineage.py +0 -0
  504. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/outcome.py +0 -0
  505. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/protocols.py +0 -0
  506. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/sessions/render.py +0 -0
  507. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/telemetry/__init__.py +0 -0
  508. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/telemetry/cli.py +0 -0
  509. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/telemetry/events.py +0 -0
  510. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/telemetry/posthog.py +0 -0
  511. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/telemetry/state.py +0 -0
  512. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/webhook/__init__.py +0 -0
  513. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/webhook/cli.py +0 -0
  514. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/src/stacktrace/webhook/config.py +0 -0
  515. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/__init__.py +0 -0
  516. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/agent_bom_fixture.py +0 -0
  517. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/__init__.py +0 -0
  518. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/fakes.py +0 -0
  519. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/scenarios.py +0 -0
  520. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_as_of_cuts_every_timed_collection.py +0 -0
  521. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_baseline.py +0 -0
  522. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_clock.py +0 -0
  523. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_component_usage.py +0 -0
  524. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_components.py +0 -0
  525. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_copies.py +0 -0
  526. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_cost_evidence_travels.py +0 -0
  527. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_cost_findings_are_dated_by_their_citations.py +0 -0
  528. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_cost_findings_carry_no_session_text.py +0 -0
  529. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_cost_is_tokens.py +0 -0
  530. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_cost_latency.py +0 -0
  531. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_ledger.py +0 -0
  532. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_measures.py +0 -0
  533. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_models.py +0 -0
  534. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_org_baselines.py +0 -0
  535. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_output.py +0 -0
  536. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_price_class.py +0 -0
  537. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_reasons.py +0 -0
  538. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_rules_baseline.py +0 -0
  539. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_runs.py +0 -0
  540. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_totals.py +0 -0
  541. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_unfinished_output_counts_what_it_shows.py +0 -0
  542. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_usage.py +0 -0
  543. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/cost/test_weights.py +0 -0
  544. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/__init__.py +0 -0
  545. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/observing.py +0 -0
  546. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_accounts.py +0 -0
  547. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_activity_log.py +0 -0
  548. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_claude_policy_hook.py +0 -0
  549. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_client.py +0 -0
  550. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_codex_policy_conformance.py +0 -0
  551. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_codex_policy_hook.py +0 -0
  552. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_composition.py +0 -0
  553. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_cost_guidance.py +0 -0
  554. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_costs.py +0 -0
  555. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_db.py +0 -0
  556. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_detection_needs_no_subscriber.py +0 -0
  557. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_fleet.py +0 -0
  558. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_identity.py +0 -0
  559. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_job_thread.py +0 -0
  560. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_jobs.py +0 -0
  561. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_lifecycle.py +0 -0
  562. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_observer.py +0 -0
  563. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_inputs.py +0 -0
  564. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_policy_socket.py +0 -0
  565. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_queue_reader.py +0 -0
  566. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_scan.py +0 -0
  567. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_service.py +0 -0
  568. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_session_cost_notices.py +0 -0
  569. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_socket.py +0 -0
  570. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_stage_times.py +0 -0
  571. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_store.py +0 -0
  572. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_subagent_routing.py +0 -0
  573. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_the_drained_payload_is_the_cold_one.py +0 -0
  574. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_the_stored_row_is_sufficient.py +0 -0
  575. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_usage.py +0 -0
  576. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_usage_store.py +0 -0
  577. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_webhook.py +0 -0
  578. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/daemon/test_wire_frames_are_bounded.py +0 -0
  579. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/detector_session_fixture.py +0 -0
  580. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/__init__.py +0 -0
  581. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/gateway-last-turn.json +0 -0
  582. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/fixtures/claude-code-2.1.296-suite/projects/run/b23c3bab-a677-4b5f-ac36-e132c7df29e5.jsonl +0 -0
  583. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_analyzer.py +0 -0
  584. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_bodies_and_logs.py +0 -0
  585. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_call_records.py +0 -0
  586. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_check.py +0 -0
  587. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_every_choice_is_read.py +0 -0
  588. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_every_read_field_is_validated.py +0 -0
  589. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_every_shortfall_is_a_recorded_fallback.py +0 -0
  590. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_gateway_keys.py +0 -0
  591. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_gateway_scripts.py +0 -0
  592. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_litellm_stream.py +0 -0
  593. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_litellm_subscription_config.py +0 -0
  594. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_parity_live_capture.py +0 -0
  595. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_service.py +0 -0
  596. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_session.py +0 -0
  597. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/gateway/test_unstated_outcomes.py +0 -0
  598. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/__init__.py +0 -0
  599. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/cost_harness.mjs +0 -0
  600. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/feed_harness.mjs +0 -0
  601. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/inventory_harness.mjs +0 -0
  602. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_cost_page.py +0 -0
  603. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_cost_range_switch.py +0 -0
  604. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_feed_model.py +0 -0
  605. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_inventory.py +0 -0
  606. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_inventory_page.py +0 -0
  607. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_offline.py +0 -0
  608. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_reasoning_gates.py +0 -0
  609. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_render.py +0 -0
  610. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_render_cost.py +0 -0
  611. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_server.py +0 -0
  612. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_site_assets.py +0 -0
  613. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_state.py +0 -0
  614. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_verdicts.py +0 -0
  615. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/monitor/test_watch.py +0 -0
  616. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/observations/test_contract.py +0 -0
  617. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/observations/test_decisions.py +0 -0
  618. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/observations/test_event_envelope.py +0 -0
  619. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/__init__.py +0 -0
  620. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/helpers.py +0 -0
  621. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_cli.py +0 -0
  622. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_client.py +0 -0
  623. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_cloud_boot_updates_the_client.py +0 -0
  624. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_cloud_session.py +0 -0
  625. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_cloud_setup_asset_id.py +0 -0
  626. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_config.py +0 -0
  627. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_activity.py +0 -0
  628. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_cli.py +0 -0
  629. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_client.py +0 -0
  630. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_gate_matches_the_cloud.py +0 -0
  631. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_layers_compose.py +0 -0
  632. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_payload_reaches_the_cloud_model.py +0 -0
  633. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_redaction.py +0 -0
  634. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_spool.py +0 -0
  635. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_upload_contract.py +0 -0
  636. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_detect_wire_payload.py +0 -0
  637. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_no_local_path_survives_redaction.py +0 -0
  638. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_payload.py +0 -0
  639. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_policy_service.py +0 -0
  640. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_policy_service_cli.py +0 -0
  641. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_policy_show.py +0 -0
  642. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_redact_payload.py +0 -0
  643. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_seam.py +0 -0
  644. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_session_registration.py +0 -0
  645. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_spool.py +0 -0
  646. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_sync.py +0 -0
  647. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_sync_detect.py +0 -0
  648. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_upload_contract.py +0 -0
  649. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_usage_client.py +0 -0
  650. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_usage_contract.py +0 -0
  651. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/remote/test_user_install_profile.py +0 -0
  652. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/sdk/test_observation_client.py +0 -0
  653. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/__init__.py +0 -0
  654. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_activity_log.py +0 -0
  655. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_cli.py +0 -0
  656. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_every_internal_save_is_reported.py +0 -0
  657. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_release_gate.py +0 -0
  658. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_state.py +0 -0
  659. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/telemetry/test_uploader.py +0 -0
  660. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_acquire.py +0 -0
  661. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_adr_cross_references_are_reciprocal.py +0 -0
  662. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_agent_instance_id.py +0 -0
  663. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_analysis.py +0 -0
  664. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_bom_shape.py +0 -0
  665. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_build_commit.py +0 -0
  666. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_call_status_conventions.py +0 -0
  667. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_composition.py +0 -0
  668. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_correlate_orchestrate.py +0 -0
  669. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_correlate_render.py +0 -0
  670. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_correlated_session.py +0 -0
  671. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detection_components.py +0 -0
  672. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detection_event_time.py +0 -0
  673. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detection_subject.py +0 -0
  674. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_analyzer_contract.py +0 -0
  675. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_analyzer_live.py +0 -0
  676. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_blocked.py +0 -0
  677. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_cache.py +0 -0
  678. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_client_errors.py +0 -0
  679. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_credential_in_prompt.py +0 -0
  680. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_credential_switched.py +0 -0
  681. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_declared_egress.py +0 -0
  682. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_deterministic.py +0 -0
  683. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_end_to_end.py +0 -0
  684. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_finding.py +0 -0
  685. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_history.py +0 -0
  686. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_infra_reasoning.py +0 -0
  687. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_jev.py +0 -0
  688. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_names_the_service.py +0 -0
  689. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_new_deterministic.py +0 -0
  690. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_personal_data.py +0 -0
  691. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_pii_in_prompt.py +0 -0
  692. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_priors.py +0 -0
  693. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_prompts.py +0 -0
  694. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_reasoning.py +0 -0
  695. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_render.py +0 -0
  696. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_run.py +0 -0
  697. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_secrets.py +0 -0
  698. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_verdict.py +0 -0
  699. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_vulnerable_dep_invoked.py +0 -0
  700. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_why_it_stopped.py +0 -0
  701. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_detector_windows.py +0 -0
  702. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_evidence_is_dated_not_numbered.py +0 -0
  703. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_finding_contract.py +0 -0
  704. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_fingerprint_covers_what_the_analyzer_reads.py +0 -0
  705. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_help_sections.py +0 -0
  706. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_join.py +0 -0
  707. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_monitor_cli.py +0 -0
  708. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_no_live_document_states_the_old_stage_three_default.py +0 -0
  709. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_no_test_undoes_every_patch_at_once.py +0 -0
  710. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_observed.py +0 -0
  711. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_one_wording_per_rule.py +0 -0
  712. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_openaca_contract.py +0 -0
  713. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_option_arity_matches_the_binary.py +0 -0
  714. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_project_map.py +0 -0
  715. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_python_namespace.py +0 -0
  716. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_readme_examples_are_real_output.py +0 -0
  717. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_release_gate_coverage.py +0 -0
  718. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_release_readiness.py +0 -0
  719. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_rules_send_remediation_targets.py +0 -0
  720. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_seam_boundary.py +0 -0
  721. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_sessions_access.py +0 -0
  722. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_sessions_end_to_end.py +0 -0
  723. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_sessions_protocol_typing.py +0 -0
  724. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_sessions_protocols.py +0 -0
  725. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_sessions_render.py +0 -0
  726. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_shell_separators_match_the_shell.py +0 -0
  727. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_signed_in_asks_the_agent.py +0 -0
  728. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_stored_verdicts_are_never_gated_on_reasoning.py +0 -0
  729. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_the_detector_spec_lists_the_shipped_catalogue.py +0 -0
  730. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_the_jev_spec_states_the_shipped_thresholds.py +0 -0
  731. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_the_locality_claim_is_qualified_everywhere.py +0 -0
  732. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_title_disclosure_invariant.py +0 -0
  733. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_untrusted_content_never_travels.py +0 -0
  734. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_verification_subcommands_match_the_binary.py +0 -0
  735. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/test_what_jev_is_told_is_what_was_disclosed.py +0 -0
  736. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/tool_fields.py +0 -0
  737. {stacktrace_cli-0.14.0 → stacktrace_cli-0.16.0}/tests/webhook/test_cli.py +0 -0
@@ -9,7 +9,8 @@ name: guard-staging
9
9
  # litellm-staging environment: AWS_DEPLOY_ROLE_ARN, ECR_REPOSITORY_URL,
10
10
  # ENVOY_ECR_REPOSITORY_URL, SUBSCRIPTION_ECR_REPOSITORY_URL, ECS_CLUSTER,
11
11
  # ECS_SERVICE, ENVOY_SERVICE, SUBSCRIPTION_SERVICE, LOG_GROUP, MASTER_KEY_SECRET,
12
- # STAGING_ENDPOINT, ENVOY_ENDPOINT, SUBSCRIPTION_ENDPOINT, GUARD_MODE.
12
+ # STAGING_ENDPOINT, ENVOY_ENDPOINT, SUBSCRIPTION_ENDPOINT, GUARD_MODE, and
13
+ # GATEWAY_DAEMON=1 once tofu runs with fleet_enrollment = true (ADR-0151).
13
14
 
14
15
  on:
15
16
  workflow_dispatch:
@@ -128,16 +129,22 @@ jobs:
128
129
  env:
129
130
  MODE: ${{ vars.GUARD_MODE }}
130
131
  LOG_GROUP: ${{ vars.LOG_GROUP }}
132
+ # 1: each task runs the enrolled daemon, and the smoke test checks that
133
+ # the rm finding reached Fleet through it (infra/guard-staging/smoke.sh).
134
+ DAEMON: ${{ vars.GATEWAY_DAEMON }}
131
135
  run: |
132
136
  MASTER_KEY=$(aws secretsmanager get-secret-value --secret-id "${{ vars.MASTER_KEY_SECRET }}" \
133
137
  --query SecretString --output text)
134
138
  echo "::add-mask::$MASTER_KEY"
135
139
  fail=0
136
- for endpoint in "${{ vars.STAGING_ENDPOINT }}" "${{ vars.ENVOY_ENDPOINT }}"; do
137
- echo "== $endpoint"
138
- ENDPOINT="$endpoint" MASTER_KEY="$MASTER_KEY" infra/guard-staging/smoke.sh || fail=1
139
- done
140
+ # Each service logs under its own stream prefix (infra/guard-staging/main.tf).
141
+ echo "== ${{ vars.STAGING_ENDPOINT }}"
142
+ ENDPOINT="${{ vars.STAGING_ENDPOINT }}" MASTER_KEY="$MASTER_KEY" LOG_STREAM_PREFIX=litellm \
143
+ infra/guard-staging/smoke.sh || fail=1
144
+ echo "== ${{ vars.ENVOY_ENDPOINT }}"
145
+ ENDPOINT="${{ vars.ENVOY_ENDPOINT }}" MASTER_KEY="$MASTER_KEY" LOG_STREAM_PREFIX=envoy \
146
+ infra/guard-staging/smoke.sh || fail=1
140
147
  echo "== ${{ vars.SUBSCRIPTION_ENDPOINT }} (subscription)"
141
148
  ENDPOINT="${{ vars.SUBSCRIPTION_ENDPOINT }}" MASTER_KEY="$MASTER_KEY" SUBSCRIPTION=1 \
142
- infra/guard-staging/smoke.sh || fail=1
149
+ LOG_STREAM_PREFIX=subscription infra/guard-staging/smoke.sh || fail=1
143
150
  exit $fail
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stacktrace-cli
3
- Version: 0.14.0
3
+ Version: 0.16.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>
@@ -21,7 +21,7 @@ Requires-Python: >=3.11
21
21
  Requires-Dist: click>=8.1
22
22
  Requires-Dist: httpx<1.0.dev0,>=0.28.1
23
23
  Requires-Dist: openaca==0.12.0
24
- Requires-Dist: openaidr==0.7.1
24
+ Requires-Dist: openaidr==0.8.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.14.0
55
+ stacktrace 0.16.0
56
56
  ```
57
57
 
58
58
  ## Python package namespace
@@ -251,13 +251,14 @@ enables telemetry again under a new identity (ADR-0039, ADR-0090).
251
251
 
252
252
  Beta, and under active development.
253
253
 
254
- `sessions`, `detect` and `monitor` work end to end today, for Claude Code and
255
- Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
254
+ `sessions`, `detect` and `monitor` work end to end today, for Claude Code,
255
+ Devin (Devin CLI and Devin Desktop's local agent), Codex and Cursor (the Cursor
256
+ CLI) sessions. Session collection is
256
257
  [OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
257
258
  kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
258
259
  [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)).
260
+ rule, and what cannot. Cursor arrives with OpenAIDR 0.8.0
261
+ ([spec](docs/specs/cursor-agent-kind.md)).
261
262
 
262
263
  ## Built on
263
264
 
@@ -24,7 +24,7 @@ Requires Python 3.11 or newer.
24
24
 
25
25
  ```console
26
26
  $ stacktrace --version
27
- stacktrace 0.14.0
27
+ stacktrace 0.16.0
28
28
  ```
29
29
 
30
30
  ## Python package namespace
@@ -223,13 +223,14 @@ enables telemetry again under a new identity (ADR-0039, ADR-0090).
223
223
 
224
224
  Beta, and under active development.
225
225
 
226
- `sessions`, `detect` and `monitor` work end to end today, for Claude Code and
227
- Devin sessions alike (Devin CLI and Devin Desktop's local agent). Session collection is
226
+ `sessions`, `detect` and `monitor` work end to end today, for Claude Code,
227
+ Devin (Devin CLI and Devin Desktop's local agent), Codex and Cursor (the Cursor
228
+ CLI) sessions. Session collection is
228
229
  [OpenAIDR](https://github.com/open-agent-security/openaidr)'s, and further agent
229
230
  kinds arrive with it. The daemon observes every kind it reads, sub-agents included.
230
231
  [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)).
232
+ rule, and what cannot. Cursor arrives with OpenAIDR 0.8.0
233
+ ([spec](docs/specs/cursor-agent-kind.md)).
233
234
 
234
235
  ## Built on
235
236
 
@@ -6,7 +6,7 @@ date: 2026-10-11
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0101, 0109, 0110
9
- amended-by: 0121
9
+ amended-by: 0121, 0153
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-11
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: 0001, 0004, 0006, 0031, 0061
9
- amended-by: 0135
9
+ amended-by: 0135, 0151
10
10
  ---
11
11
 
12
12
  ## Context
@@ -6,7 +6,7 @@ date: 2026-10-10
6
6
  supersedes: null
7
7
  superseded-by: null
8
8
  amends: null
9
- amended-by: null
9
+ amended-by: 0151
10
10
  ---
11
11
 
12
12
  ## Context
@@ -0,0 +1,174 @@
1
+ ---
2
+ id: 0151
3
+ title: Step one puts the daemon beside the gateway, names the person, and enforces Fleet policy there; Core is step two
4
+ status: proposed
5
+ date: 2026-10-19
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0118, 0119
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ Stacktrace has two gateway adapters on main: a LiteLLM guardrail and an Envoy
15
+ Lua filter (ADR-0119). Both ask `stacktrace guard serve` one question about a
16
+ model response: may its tool calls reach the agent? The guard runs the three
17
+ `BLOCKING_RULES` and answers `allow` or `block`. It fails open.
18
+
19
+ The guard writes its findings to a JSONL file or to stdout. It has no path to
20
+ Fleet. It has no enrollment, no credentials, no retry queue and no
21
+ notification sinks. It does not know Fleet policy. It knows the person only
22
+ through a separate `call` record that LiteLLM writes, which no finding carries.
23
+
24
+ The user daemon already has the parts the guard lacks. It stores findings in
25
+ `FindingStore`. It uploads them to Fleet through the enrolled drain. It fans
26
+ notifications out to Slack and to webhooks. It fetches the organization's
27
+ policy from Fleet and turns it into decisions with the OpenACA evaluator
28
+ (ADR-0135, ADR-0136). Claude Code hooks ask it a yes or no question over a
29
+ private Unix socket and block on "no" (ADR-0131, ADR-0143).
30
+
31
+ The earlier direction was gateway, then a guard service, then a new Core
32
+ service, then Fleet. ADR-0150 and Plan 018 (proposed, on
33
+ `claude/core-service-plan`) describe Core. Core is not built.
34
+
35
+ At the 2026-10-19 founder sync, Vinod proposed a simpler first step: run the
36
+ daemon beside the gateway, as it runs beside agents today. Micheal agreed, and
37
+ asked for three more things: name the person behind each call, enforce Fleet
38
+ policy at the gateway, and keep the move to Core cheap. The
39
+ [gateway and daemon spec](../specs/gateway-daemon.md) gives the mechanism. The
40
+ [architecture one-pager](https://claude.ai/artifact/MCGpTPuUzH14C6EMKfR8Cx)
41
+ shows the flow, the requirements it meets and the step after it.
42
+
43
+ ## Decision
44
+
45
+ 1. **The daemon answers the gateway.** The daemon runs on the gateway host,
46
+ beside the gateway, in the same container group or on the same machine.
47
+ With `STACKTRACE_GATEWAY_LISTEN` set, it serves ADR-0119's contract
48
+ (`/v1/evaluate`, `/v1/observe`, `/healthz`) on loopback. It replaces
49
+ `stacktrace guard serve` for an enrolled host. The rules, the reply and the
50
+ fail-open behaviour are the guard's own. The listener is off by default.
51
+ 2. **The decision is made on the gateway host.** The adapter asks the daemon
52
+ over loopback, or evaluates in-process. A decision never waits on a network
53
+ round trip to another host. This is the same constraint ADR-0150 sets for
54
+ Core.
55
+ 3. **The gateway names the person.** The adapter adds a `principal` to each
56
+ request: `{"id": "...", "source": "litellm-key" | "envoy-jwt" | ...}`. It
57
+ comes only from the gateway's own authentication (LiteLLM's key check, an
58
+ Envoy auth filter), never from a header the client sets. The daemon accepts
59
+ it only on an authenticated channel: loopback with `STACKTRACE_GUARD_TOKEN`.
60
+ Without a verified identity the principal is absent, not guessed. The
61
+ daemon keys a gateway session by agent kind, session id and principal, and
62
+ every finding it stores carries the principal as `actor`. The event
63
+ identity uses the same key, so two people who send one session id never
64
+ share an event.
65
+ 4. **The gateway enforces Fleet policy.** The daemon already fetches the
66
+ organization's policy. It also serves the decisions to the gateway path.
67
+ The adapter maps each tool call in a model response to a policy subject:
68
+ - an MCP tool call to its server (`mcp__github__create_issue` is server
69
+ `github` for Claude Code; each agent kind has its own naming map),
70
+ - a `Skill` call to the skill it names,
71
+ - a `Task` or `Agent` call with a namespaced `subagent_type` to that plugin
72
+ agent.
73
+ In `enforce`, an explicit `deny` blocks the response, with the hook's own
74
+ message: the rule's description and where to see the policy. In `observe`, a
75
+ deny does not block. The daemon records the action as `allowed`, and keeps
76
+ the policy rule. A deny on one call blocks the whole response, so no call in it runs. A subject the policy does
77
+ not name gets the category default only when the organization turns that on
78
+ for gateways; otherwise it passes. Built-in tools are not policy subjects;
79
+ the three `BLOCKING_RULES` still apply to them. No policy, a policy past its
80
+ time to live, or an unreadable response passes and is recorded as a
81
+ fallback.
82
+ 5. **One decision function.** The hook path and the gateway path call the same
83
+ function to turn the policy into a decision for a named subject. It is
84
+ extracted from `policy_runtime.py`, so a deny in Fleet means the same thing
85
+ on a laptop and at the gateway.
86
+ 6. **The gateway's findings reach Fleet.** Each finding is written to
87
+ `FindingStore` with `actor`, `action` (`blocked`, `allowed`, `observed`) and
88
+ the policy revision or rule pack version that produced it. The Fleet drain
89
+ uploads it under the gateway host's enrollment. A verdict with no finding
90
+ (an allow, a fallback, or a policy deny that no rule matched) stays in the
91
+ daemon's log in step one. Fleet has no record type for it yet. Fleet groups a gateway's findings by `actor`, not
92
+ by asset. On the wire, `actor` travels as ADR-0112's person: the run's
93
+ `session.account` and an `accounts[]` card with its `person_key`, which
94
+ Fleet already accepts. Fleet stays agnostic to where a finding came from,
95
+ so the gateway enrolls as an ordinary asset. The fields that say what the
96
+ gateway did need Fleet to declare them first. The spec lists
97
+ them under "What Fleet needs".
98
+ 7. **The hook protocol does not change.** ADR-0135's socket, its fixed action
99
+ and its version stay as they are. The gateway does not use it: the adapters
100
+ call out over HTTP, and the rules read the request's whole history, not one
101
+ action. The hook frame is 64 KiB and has no principal.
102
+ 8. **The contract is the seam to Core.** `principal`, `action`, the version
103
+ that decided, and the event id (session, rule, anchor span) are defined once
104
+ and are the fields Core's observe and decide APIs accept. The adapters then
105
+ move to Core by changing one URL.
106
+ 9. **Core is step two.** When Core serves observe and decide, the adapters send
107
+ to Core, Core holds the findings, and session-context rules (retry storms,
108
+ cost) start to run on gateway traffic. The daemon listener retires for
109
+ gateways. ADR-0150 and Plan 018, or their successors, govern that step.
110
+ 10. **This amends ADR-0118 decision 2 for step one only.** Until Core serves the
111
+ gateway, the daemon on the gateway host evaluates `BLOCKING_RULES` and
112
+ Fleet policy for it. No other rule blocks.
113
+ 11. **This amends ADR-0119** on where the contract runs and on its fields. The
114
+ daemon hosts it for an enrolled gateway host. The capability is called
115
+ "guard", and it will follow Core's interface. `stacktrace guard serve` goes
116
+ away. Until then, the entrypoint falls back to `guard serve` only on a host
117
+ that is not enrolled. Requests gain `principal`; replies and stored records
118
+ gain `action` and the deciding version.
119
+
120
+ ## Alternatives considered
121
+
122
+ - **A separate guard service that sends to Core.** This was the earlier
123
+ direction. It lost because Core does not exist yet, so the guard has nowhere
124
+ to send. Without Core it must also get enrollment, credentials, a durable
125
+ queue and an uploader. The daemon has all four, and they have shipped.
126
+ - **Go straight to Core.** It lost on time and on evidence. Core is 13 planned
127
+ tasks away, and the gateway-to-Core latency is not measured. Step one gives
128
+ Fleet gateway findings and policy enforcement now, and moving to Core is a
129
+ URL change for each adapter.
130
+ - **Use the hook's `authorize` message as it is.** It lost on two facts. The
131
+ adapters call out over HTTP: LiteLLM from a guardrail callback, Envoy from a
132
+ Lua `httpCall`. The hook protocol is JSON lines on a Unix socket. The rules
133
+ also read the request's whole history, not one action. A request can be up
134
+ to 32 MiB (`gateway/service.py:45`), and the hook frame is 64 KiB. Adding
135
+ arguments and history to `authorize` would make it `/v1/evaluate`. Adding a
136
+ principal would break its version 1 contract for every installed plugin.
137
+ - **Take the person from a request header.** It lost because any client could
138
+ name anyone, and the daemon sits in front of every person on the host.
139
+ - **Enforce policy only on laptops, through hooks.** It lost on coverage. Hooks
140
+ cover Claude Code only. A gateway also covers Codex, SDK and production
141
+ agents, and any machine without the plugin.
142
+ - **Strip denied tools from the request instead of blocking the call.** It lost
143
+ because ADR-0119 never edits traffic, and the model would then call a tool it
144
+ cannot see described.
145
+ - **Envoy `ext_authz`.** It lost because it sees the downstream request only.
146
+ The tool call to judge is in the upstream response.
147
+
148
+ ## Consequences
149
+
150
+ - Gateway findings, blocks and the person behind them reach Fleet, Slack and
151
+ webhooks with no new service.
152
+ - One Fleet policy is enforced in two places: on the laptop through hooks, and
153
+ centrally at the gateway.
154
+ - Policy at the gateway matches by name only. The hook path resolves a
155
+ component from local evidence; the gateway sees only the name the model
156
+ sees. A user can rename an MCP server in their own configuration to pass a
157
+ deny. The hooks stay the authority for components; the gateway is the
158
+ backstop.
159
+ - Slash commands are not enforced at the gateway. They expand on the client.
160
+ - A per-person policy becomes possible, because the gateway knows the
161
+ principal. It is not decided here.
162
+ - The rules and the policy check run in the daemon process, beside its scans.
163
+ Nobody has measured gateway load against the daemon's scan cadence.
164
+ - A listener on a non-loopback address does not start without
165
+ `STACKTRACE_GUARD_TOKEN`.
166
+ - Fleet must accept and show `actor` and `action`. That is a Fleet change.
167
+
168
+ ## When to revisit
169
+
170
+ - When Core serves observe and decide for a gateway. Then step two starts.
171
+ - When one gateway host's load makes the daemon miss its scan cadence or the
172
+ 3000 ms adapter budget.
173
+ - When renamed servers are seen passing a gateway deny. Then fingerprint a
174
+ server by the tools it declares in the request.
@@ -0,0 +1,62 @@
1
+ ---
2
+ id: 0153
3
+ title: A gateway person reaches Fleet as an account and its card
4
+ status: proposed
5
+ date: 2026-10-20
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: 0112
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ ADR-0151 names the person behind each gateway call from the gateway's own
15
+ authentication. #272 stored that person as `actor` and kept it off the wire,
16
+ because Fleet refuses undeclared fields. A gateway finding then reached Fleet
17
+ with no person: the staging finding showed "—" where the person goes.
18
+
19
+ ADR-0112 already gives Fleet a person model: a run's `session.account` and an
20
+ `accounts[]` card, whose `person_key` joins the same email across agent kinds.
21
+ It defines the account as the one the agent is signed in as on the host. A
22
+ gateway principal is a different kind of account. The design is in the
23
+ [gateway spec](../specs/gateway-daemon.md#the-person-behind-each-call).
24
+
25
+ ## Decision
26
+
27
+ A gateway person reaches Fleet as ADR-0112's person, with no new field. The
28
+ finding's `session.account` is a digest of the verified principal's source and
29
+ id, and the payload carries a card for it. When the principal is an email
30
+ address, the card keeps ADR-0112's email digest, so its person key is the one a
31
+ laptop run under that email gets. Any other principal, such as a JWT `sub`, gets
32
+ a card with no person key and no name. `actor` stays local and never travels.
33
+ This amends ADR-0112: an account can also be one a gateway verified.
34
+
35
+ ## Alternatives considered
36
+
37
+ - **Send `actor` as a new detection field.** Rejected: it needs a Fleet change,
38
+ it duplicates the person model Fleet already has, and it sends the principal
39
+ itself.
40
+ - **Use the client's `metadata.user_id`.** Rejected: the client sets it, so
41
+ anyone could claim to be anyone.
42
+ - **Send the principal's id as the account.** Rejected: an email would travel,
43
+ which ADR-0112 clause 4 forbids.
44
+ - **Send no person until Fleet adds a field.** Rejected: Fleet can already show
45
+ a person from a card, and a gateway finding with no person is the gap the
46
+ staging run showed.
47
+
48
+ ## Consequences
49
+
50
+ - One person's laptop runs and gateway calls show as one Person in Fleet when
51
+ the gateway names them by email.
52
+ - A principal that is no email shows as an account with no name. Fleet shows
53
+ the account id until the person is named another way.
54
+ - A person who uses two gateways with different sources gets two accounts. The
55
+ person key still joins them when both are the same email.
56
+
57
+ ## When to revisit
58
+
59
+ - When Fleet holds gateway principals as their own kind of identity, apart from
60
+ host sign-ins.
61
+ - When a gateway names people by something other than an email, such as an
62
+ identity provider's user id that Fleet can resolve.
@@ -0,0 +1,69 @@
1
+ ---
2
+ id: 0155
3
+ title: A remote MCP server's exact URL reaches Fleet
4
+ status: proposed
5
+ date: 2026-10-20
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: null
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ The redaction pass reduces every http(s) URL in an `openaca:*` property to
15
+ `scheme://host`. OpenACA blocks a remote MCP server by its exact URL, and this
16
+ host compiles Fleet's policy against its own unredacted config. So the target
17
+ Fleet offered for a server at `https://mcp.linear.app/mcp` was
18
+ `https://mcp.linear.app`. A run of `compile_endpoint_policy` against a real
19
+ `~/.claude.json` allowed the server under that entry. Only the full URL blocked
20
+ it.
21
+
22
+ The component's `openaca:identity`, `mcp-remote/<host>[:port]<path>`, already
23
+ uploads the path. Fleet ADR-0101 admits the exact URL when it normalizes to
24
+ that identity, and stops offering a URL without a path as a target.
25
+
26
+ The design is in [Remote Sync](../specs/remote-sync.md#privacy-is-unchanged-and-that-is-the-point).
27
+
28
+ ## Decision
29
+
30
+ The redaction pass keeps a remote MCP server's `openaca:url` and
31
+ `openaca:install_source` whole when the component is an `mcp_server` and the
32
+ URL normalizes to the component's own `openaca:identity`. Such a URL has no
33
+ userinfo, query or fragment. The upload contract admits the same values. Every
34
+ other URL, including the URLs inside `openaca:capabilities` evidence, is still
35
+ reduced to `scheme://host`.
36
+
37
+ ## Alternatives considered
38
+
39
+ - **Keep every URL at `scheme://host`, and let Fleet build the URL from the
40
+ identity.** Rejected. The identity drops the query and userinfo. A server at
41
+ `https://host/mcp?key=v` would get the target `https://host/mcp`, which
42
+ matches nothing on the host.
43
+ - **Upload a hash of the exact URL.** Rejected. A policy entry needs the URL
44
+ itself. A hash cannot fill a target.
45
+ - **Keep the path of every http(s) URL.** Rejected. A path that differs from
46
+ the identity's path is a new disclosure. The identity comparison keeps the
47
+ disclosure at what this client already uploads.
48
+ - **Strip the query and keep the rest.** Rejected. The result is not the URL
49
+ on the host, so a block on it blocks nothing. Fleet cannot tell it from an
50
+ exact URL.
51
+
52
+ ## Consequences
53
+
54
+ - (+) Fleet's Policy editor offers a URL target that blocks the server here.
55
+ - (+) Nothing leaves the machine that the identity does not already state,
56
+ apart from the scheme, the host's case and a default port.
57
+ - (–) A Fleet without ADR-0101 refuses a BOM that carries a URL path. Release
58
+ this change only after that Fleet deploys.
59
+ - (–) The rule mirrors an OpenACA function. A test compares the two, so an
60
+ upstream change fails the suite.
61
+ - (–) The redaction pass is no longer a pure transcription of openaca's. The
62
+ exception is marked where it runs.
63
+ - (Watch) A URL path can carry a secret. The identity already uploads it, and
64
+ the upload contract's credential check refuses a value that looks like one.
65
+
66
+ ## When to revisit
67
+
68
+ - OpenACA changes the `mcp-remote` identity form or adds URL prefix matching.
69
+ - This client starts to redact identities that carry a secret path.
@@ -0,0 +1,67 @@
1
+ ---
2
+ id: 0156
3
+ title: The client localizes Fleet's policy targets before it evaluates or compiles them
4
+ status: accepted
5
+ date: 2026-10-21
6
+ supersedes: null
7
+ superseded-by: null
8
+ amends: null
9
+ amended-by: null
10
+ ---
11
+
12
+ ## Context
13
+
14
+ Fleet's catalog (Fleet ADR-0102 and ADR-0104) writes an exact policy target
15
+ for each MCP server that an administrator approves or blocks. Fleet derives
16
+ the target from the uploaded Agent BOM. The upload is redacted: a launch
17
+ command loses its flags, such as `-y`. So Fleet writes
18
+ `{"command": ["npx", "@acme/jira-mcp@1.4.2"]}`. On the machine, OpenACA's
19
+ matcher compares exact targets with `npx -y @acme/jira-mcp@1.4.2`, and
20
+ matches nothing. A simulation with the real client and Fleet showed that a
21
+ decision made in Fleet did not block the server on the machine.
22
+
23
+ A URL is uploaded whole only when it normalizes to the server's identity
24
+ (ADR-0155). Any other URL is uploaded as `scheme://host`. Fleet writes a URL
25
+ target only when the uploaded URL has a path (Fleet ADR-0101). An
26
+ administrator can still type a host-only URL target.
27
+
28
+ ## Decision
29
+
30
+ Before the client evaluates or compiles a fetched policy, it localizes the
31
+ `admission.mcps` lists against the local components. For each local MCP
32
+ server, the client computes the upload form with the same functions that
33
+ prepare the upload. When a list target equals that upload form, the client
34
+ adds the server's exact local target to the same list. The hook path, the
35
+ `remote policy compile` command and the privileged apply worker all localize.
36
+ No new data goes up. Plugins need no step: their `name@marketplace` is not
37
+ redacted.
38
+
39
+ ## Alternatives considered
40
+
41
+ - **Upload the exact launch command, so Fleet can write exact targets**:
42
+ rejected because flags can carry user paths, tenant names and secrets. An
43
+ exact URL is uploaded only because the identity already states its path
44
+ (ADR-0155). A command has no such identity.
45
+ - **Change OpenACA's matcher to compare redacted forms**: rejected because
46
+ the matcher is a shared library whose exact semantics other callers
47
+ depend on, and a client step fixes the defect without a new OpenACA
48
+ release.
49
+ - **Have Fleet guess the exact form, for example add `-y`**: rejected
50
+ because flags vary, and a guess matches only some machines.
51
+
52
+ ## Consequences
53
+
54
+ - A Fleet decision on a launch command now acts on the machine, in the hooks
55
+ and in Claude's managed settings.
56
+ - A decision on an upload form covers every local variant with the same
57
+ upload form. An approval covers each flag variant of the same command.
58
+ - An exact URL target already equals the local target, so the join adds
59
+ nothing for it. A host-only URL target joins each local server whose
60
+ upload shows only that host: a URL with userinfo, a query or a fragment.
61
+ - The localization must use the upload's own functions. A change to the
62
+ redaction must keep the two in step; the tests drive both.
63
+
64
+ ## When to revisit
65
+
66
+ Revisit when Fleet can carry an exact, privacy-safe command target, for
67
+ example a hash that the OpenACA policy language can match.
@@ -184,3 +184,7 @@ supersedes anything yet.
184
184
  - [0149](0149-a-credential-switch-replaces-the-mcp-sign-in-rule.md) — **A credential switch after a refusal replaces the MCP sign-in rule, and the retry storm is removed** (proposed). `stacktrace-credential-switched` fires when a service refuses a call with an auth error and a later call to it succeeds with a credential the refused call did not carry: in its arguments after the agent read it, or in an agent config file the agent wrote between them. Never after a person's turn, never without a new credential. High confidence when the agent read the credential first. Its `switched_credential` target groups by the new credential and carries the refused credential's mask, so every channel shows both, and the webhook adds `before`. The fix revokes the new credential and takes it out of reach. `stacktrace-mcp-transient-failure` and `stacktrace-tool-retry-storm` move to `RETIRED_SCOPES`; the recovered-refusal filter stays. Amends ADR-0073, ADR-0086 and ADR-0146. Rejected: keeping either rule, reviving `scavenged-credential` as it was, firing on any credential read. Read before changing how a credential switch is detected.
185
185
 
186
186
  - [0150: Codex hooks use the shared policy runtime](0150-codex-hooks-use-the-shared-policy-runtime.md). CLI first; desktop and cloud require separate conformance.
187
+ - [0151](0151-step-one-puts-the-daemon-beside-the-gateway.md) — **Step one puts the daemon beside the gateway, names the person, and enforces Fleet policy there; Core is step two** (proposed). With `STACKTRACE_GATEWAY_LISTEN` set, the enrolled daemon on the gateway host serves ADR-0119's `/v1/evaluate` on loopback, runs `BLOCKING_RULES` and Fleet policy (MCP servers, skills, plugin agents, matched by name through the hooks' shared decision function), and uploads findings and verdicts with `actor` and `action`. The `principal` comes only from the gateway's own auth. The hook protocol (ADR-0135) is unchanged. The contract is the seam to Core: adapters move by URL. Amends ADR-0118 decision 2 and ADR-0119 for step one. Rejected: a guard service feeding Core, Core first, the hook socket as is, a header-named person, laptop-only policy, stripping tools, Envoy `ext_authz`. Read before routing a gateway to the daemon or to Core, or enforcing policy at a gateway.
188
+ - [0153](0153-a-gateway-person-reaches-fleet-as-an-account-card.md) — **A gateway person reaches Fleet as an account and its card** (proposed). A gateway finding's `session.account` is a digest of the verified principal, and the payload carries an `accounts[]` card for it. An email principal keeps ADR-0112's email digest, so its person key matches a laptop run under that email; any other principal gets a card with no key and no name. `actor` stays local. Amends ADR-0112. Rejected: an `actor` field, the client's `metadata.user_id`, the principal as the account, no person. Read before changing how a gateway names its person in Fleet.
189
+ - [0155](0155-a-remote-mcp-servers-exact-url-reaches-fleet.md) — **A remote MCP server's exact URL reaches Fleet** (proposed). The redaction pass keeps `openaca:url` and `openaca:install_source` whole on an `mcp_server` when the URL normalizes to the component's own `mcp-remote` identity, so it has no userinfo, query or fragment; the upload contract admits the same values. Every other URL is still reduced to `scheme://host`. Pairs with Fleet ADR-0101; release after that Fleet deploys. Rejected: building the URL from the identity, a URL hash, keeping every path, stripping only the query. Read before changing how a URL is redacted for upload.
190
+ - [0156: The client localizes Fleet's policy targets before it evaluates or compiles them](0156-the-client-localizes-fleet-policy-targets.md). Fleet writes upload-form targets, such as a launch command without its flags; the client adds each matching local server's exact target. An exact URL target (ADR-0155) adds nothing. Rejected: uploading exact commands, changing OpenACA's matcher, guessing flags in Fleet.