agentprov 0.1.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. agentprov/__init__.py +14 -0
  2. agentprov/__main__.py +8 -0
  3. agentprov/adapters/__init__.py +36 -0
  4. agentprov/adapters/account_paths.py +105 -0
  5. agentprov/adapters/adprov/__init__.py +9 -0
  6. agentprov/adapters/adprov/artefacts.toml +431 -0
  7. agentprov/adapters/adprov/dialect.py +160 -0
  8. agentprov/adapters/adprov/mapper.py +1171 -0
  9. agentprov/adapters/adprov/profiles/adprov-v1.profile.toml +114 -0
  10. agentprov/adapters/adprov/profiles/archive/adprov-v1.profile.v1.toml +100 -0
  11. agentprov/adapters/adprov/rules/adprov.rules.toml +566 -0
  12. agentprov/adapters/adprov/rules/archive/adprov.rules.v1.toml +461 -0
  13. agentprov/adapters/agentdojo/__init__.py +12 -0
  14. agentprov/adapters/agentdojo/artefacts.toml +1356 -0
  15. agentprov/adapters/agentdojo/capture_mapper.py +2710 -0
  16. agentprov/adapters/agentdojo/capture_reader.py +375 -0
  17. agentprov/adapters/agentdojo/census.py +230 -0
  18. agentprov/adapters/agentdojo/citation.py +40 -0
  19. agentprov/adapters/agentdojo/dialect.py +154 -0
  20. agentprov/adapters/agentdojo/drift_mapper.py +917 -0
  21. agentprov/adapters/agentdojo/ext.schema.json +87 -0
  22. agentprov/adapters/agentdojo/family.schema.json +296 -0
  23. agentprov/adapters/agentdojo/history_table.py +159 -0
  24. agentprov/adapters/agentdojo/hooks/__init__.py +10 -0
  25. agentprov/adapters/agentdojo/hooks/agentdyn.py +169 -0
  26. agentprov/adapters/agentdojo/hooks/autodojo.py +296 -0
  27. agentprov/adapters/agentdojo/hooks/defence_denial.py +125 -0
  28. agentprov/adapters/agentdojo/hooks/detector_abort.py +78 -0
  29. agentprov/adapters/agentdojo/hooks/drift.py +101 -0
  30. agentprov/adapters/agentdojo/hooks/mandate.py +108 -0
  31. agentprov/adapters/agentdojo/hooks/melon.py +104 -0
  32. agentprov/adapters/agentdojo/hooks/rope.py +394 -0
  33. agentprov/adapters/agentdojo/hooks/seagent.py +84 -0
  34. agentprov/adapters/agentdojo/identity.py +141 -0
  35. agentprov/adapters/agentdojo/layout.py +122 -0
  36. agentprov/adapters/agentdojo/mapper.py +1849 -0
  37. agentprov/adapters/agentdojo/messages_wire.py +399 -0
  38. agentprov/adapters/agentdojo/profile.py +388 -0
  39. agentprov/adapters/agentdojo/profiles/agentdojo-live.profile.toml +225 -0
  40. agentprov/adapters/agentdojo/profiles/agentdojo-upstream.profile.toml +324 -0
  41. agentprov/adapters/agentdojo/profiles/agentdyn-live.profile.toml +199 -0
  42. agentprov/adapters/agentdojo/profiles/agentdyn.profile.toml +318 -0
  43. agentprov/adapters/agentdojo/profiles/aiauthz-agentdojo.profile.toml +178 -0
  44. agentprov/adapters/agentdojo/profiles/archive/agentdojo-live.profile.v1.toml +187 -0
  45. agentprov/adapters/agentdojo/profiles/archive/agentdojo-live.profile.v2.toml +200 -0
  46. agentprov/adapters/agentdojo/profiles/archive/agentdojo-upstream.profile.v1.toml +309 -0
  47. agentprov/adapters/agentdojo/profiles/archive/agentdyn.profile.v1.toml +246 -0
  48. agentprov/adapters/agentdojo/profiles/archive/agentdyn.profile.v2.toml +298 -0
  49. agentprov/adapters/agentdojo/profiles/archive/agentdyn.profile.v3.toml +316 -0
  50. agentprov/adapters/agentdojo/profiles/archive/autodojo-live.profile.v1.toml +197 -0
  51. agentprov/adapters/agentdojo/profiles/archive/autodojo-live.profile.v2.toml +201 -0
  52. agentprov/adapters/agentdojo/profiles/archive/environmentoptim-agentdojo.profile.v1.toml +176 -0
  53. agentprov/adapters/agentdojo/profiles/archive/geryon-agentdojo.profile.v1.toml +163 -0
  54. agentprov/adapters/agentdojo/profiles/archive/interbolt-agentdojo.profile.v1.toml +174 -0
  55. agentprov/adapters/agentdojo/profiles/archive/kongminos-agentdojo.profile.v1.toml +160 -0
  56. agentprov/adapters/agentdojo/profiles/archive/mandate-agentdojo-eval.profile.v1.toml +177 -0
  57. agentprov/adapters/agentdojo/profiles/archive/melon-agentdojo.profile.v1.toml +205 -0
  58. agentprov/adapters/agentdojo/profiles/archive/memo-ozdincer-agentdojo.profile.v1.toml +226 -0
  59. agentprov/adapters/agentdojo/profiles/archive/rope.profile.v1.toml +233 -0
  60. agentprov/adapters/agentdojo/profiles/archive/seagent-agentdojo.profile.v1.toml +166 -0
  61. agentprov/adapters/agentdojo/profiles/archive/survey-runs.profile.v1.toml +205 -0
  62. agentprov/adapters/agentdojo/profiles/archive/survey-runs.profile.v2.toml +208 -0
  63. agentprov/adapters/agentdojo/profiles/archive/tacit-agentdojo.profile.v1.toml +164 -0
  64. agentprov/adapters/agentdojo/profiles/authority-caps-agentdojo.profile.toml +191 -0
  65. agentprov/adapters/agentdojo/profiles/autodojo-live.profile.toml +211 -0
  66. agentprov/adapters/agentdojo/profiles/autodojo-via-rope.profile.toml +70 -0
  67. agentprov/adapters/agentdojo/profiles/bookkeeper-agentdojo.profile.toml +173 -0
  68. agentprov/adapters/agentdojo/profiles/ceferisbarov-agentdojo.profile.toml +215 -0
  69. agentprov/adapters/agentdojo/profiles/craibench-agentdojo.profile.toml +149 -0
  70. agentprov/adapters/agentdojo/profiles/dca-agentdojo.profile.toml +217 -0
  71. agentprov/adapters/agentdojo/profiles/drift.profile.toml +190 -0
  72. agentprov/adapters/agentdojo/profiles/drift1-agentdojo.profile.toml +157 -0
  73. agentprov/adapters/agentdojo/profiles/environmentoptim-agentdojo.profile.toml +184 -0
  74. agentprov/adapters/agentdojo/profiles/gate-agentdojo.profile.toml +192 -0
  75. agentprov/adapters/agentdojo/profiles/geryon-agentdojo.profile.toml +166 -0
  76. agentprov/adapters/agentdojo/profiles/glitch-agentdojo.profile.toml +169 -0
  77. agentprov/adapters/agentdojo/profiles/hilarytorn-trajectory-poisoning.profile.toml +152 -0
  78. agentprov/adapters/agentdojo/profiles/interbolt-agentdojo.profile.toml +188 -0
  79. agentprov/adapters/agentdojo/profiles/ipi-defenses-agentdojo.profile.toml +198 -0
  80. agentprov/adapters/agentdojo/profiles/kavach-agentdojo.profile.toml +199 -0
  81. agentprov/adapters/agentdojo/profiles/kongminos-agentdojo.profile.toml +173 -0
  82. agentprov/adapters/agentdojo/profiles/linyxus-agentdojo.profile.toml +173 -0
  83. agentprov/adapters/agentdojo/profiles/llm-lock-agentdojo.profile.toml +197 -0
  84. agentprov/adapters/agentdojo/profiles/mandate-agentdojo-eval.profile.toml +185 -0
  85. agentprov/adapters/agentdojo/profiles/melon-agentdojo.profile.toml +226 -0
  86. agentprov/adapters/agentdojo/profiles/memo-ozdincer-agentdojo.profile.toml +228 -0
  87. agentprov/adapters/agentdojo/profiles/menelaus29-ipi-multidomain.profile.toml +181 -0
  88. agentprov/adapters/agentdojo/profiles/mohameduk-agentdojo.profile.toml +210 -0
  89. agentprov/adapters/agentdojo/profiles/rope.profile.toml +239 -0
  90. agentprov/adapters/agentdojo/profiles/seagent-agentdojo.profile.toml +180 -0
  91. agentprov/adapters/agentdojo/profiles/sentry-agentdojo.profile.toml +164 -0
  92. agentprov/adapters/agentdojo/profiles/shreeyavarma-llm-safety.profile.toml +196 -0
  93. agentprov/adapters/agentdojo/profiles/survey-runs.profile.toml +227 -0
  94. agentprov/adapters/agentdojo/profiles/tacit-agentdojo.profile.toml +177 -0
  95. agentprov/adapters/agentdojo/profiles/yockcheng-prompt-injection-harness.profile.toml +158 -0
  96. agentprov/adapters/agentdojo/quirks.py +404 -0
  97. agentprov/adapters/agentdojo/redact.py +250 -0
  98. agentprov/adapters/agentdojo/results_mapper.py +905 -0
  99. agentprov/adapters/agentdojo/results_reader.py +161 -0
  100. agentprov/adapters/agentdojo/rules/agentdojo.rules.toml +1937 -0
  101. agentprov/adapters/agentdojo/rules/agentdyn.rules.toml +289 -0
  102. agentprov/adapters/agentdojo/rules/anthropic_messages.rules.toml +82 -0
  103. agentprov/adapters/agentdojo/rules/archive/agentdojo.rules.v1.toml +1394 -0
  104. agentprov/adapters/agentdojo/rules/archive/agentdyn.rules.v1.toml +129 -0
  105. agentprov/adapters/agentdojo/rules/archive/rescont.rules.v1.toml +548 -0
  106. agentprov/adapters/agentdojo/rules/archive/rope.rules.v1.toml +167 -0
  107. agentprov/adapters/agentdojo/rules/autodojo.rules.toml +35 -0
  108. agentprov/adapters/agentdojo/rules/defence.rules.toml +78 -0
  109. agentprov/adapters/agentdojo/rules/drift.rules.toml +453 -0
  110. agentprov/adapters/agentdojo/rules/mandate.rules.toml +69 -0
  111. agentprov/adapters/agentdojo/rules/rescont.rules.toml +551 -0
  112. agentprov/adapters/agentdojo/rules/rope.rules.toml +210 -0
  113. agentprov/adapters/agentdojo/rules/survey.rules.toml +49 -0
  114. agentprov/adapters/agentdojo/semantics/__init__.py +22 -0
  115. agentprov/adapters/agentdojo/semantics/agentdojo.suites-1/labels.toml +117 -0
  116. agentprov/adapters/agentdojo/semantics/agentdojo.suites-1/profile.toml +58 -0
  117. agentprov/adapters/agentdojo/semantics/agentdojo.suites-1/suite_tools.toml +130 -0
  118. agentprov/adapters/agentdojo/semantics/agentdojo.suites-2/labels.toml +119 -0
  119. agentprov/adapters/agentdojo/semantics/agentdojo.suites-2/profile.toml +77 -0
  120. agentprov/adapters/agentdojo/semantics/agentdojo.suites-2/reviewed_tables.toml +255 -0
  121. agentprov/adapters/agentdojo/semantics/agentdojo.suites-2/suite_tools.toml +130 -0
  122. agentprov/adapters/agentdojo/semantics/agentdojo.suites-3/labels.toml +119 -0
  123. agentprov/adapters/agentdojo/semantics/agentdojo.suites-3/profile.toml +78 -0
  124. agentprov/adapters/agentdojo/semantics/agentdojo.suites-3/reviewed_tables.toml +949 -0
  125. agentprov/adapters/agentdojo/semantics/agentdojo.suites-3/suite_tools.toml +130 -0
  126. agentprov/adapters/agentdojo/semantics/markers.py +303 -0
  127. agentprov/adapters/agentdojo/semantics/scoring.py +115 -0
  128. agentprov/adapters/agentdojo/semantics/suites.py +744 -0
  129. agentprov/adapters/agentdojo/tables/agentdojo-history.table.toml +407 -0
  130. agentprov/adapters/agentdojo/tables/agentdyn_history_pipeline_dirs.toml +21 -0
  131. agentprov/adapters/agentdojo/tables/agentdyn_pipeline_dirs.toml +707 -0
  132. agentprov/adapters/agentdojo/tables/aiauthz_run_dirs.toml +118 -0
  133. agentprov/adapters/agentdojo/tables/authority_caps_pipeline_dirs.toml +174 -0
  134. agentprov/adapters/agentdojo/tables/autodojo_cache_variant0.json +799 -0
  135. agentprov/adapters/agentdojo/tables/bookkeeper_pipeline_dirs.toml +79 -0
  136. agentprov/adapters/agentdojo/tables/dca_run_dirs.toml +207 -0
  137. agentprov/adapters/agentdojo/tables/drift1_model_dirs.toml +24 -0
  138. agentprov/adapters/agentdojo/tables/environmentoptim_run_dirs.toml +962 -0
  139. agentprov/adapters/agentdojo/tables/gate_pipeline_dirs.toml +99 -0
  140. agentprov/adapters/agentdojo/tables/geryon_log_sets.toml +285 -0
  141. agentprov/adapters/agentdojo/tables/interbolt_pipeline_dirs.toml +33 -0
  142. agentprov/adapters/agentdojo/tables/ipi_defenses_run_dirs.toml +144 -0
  143. agentprov/adapters/agentdojo/tables/kavach_run_dirs.toml +97 -0
  144. agentprov/adapters/agentdojo/tables/kongminos_pipeline_dirs.toml +15 -0
  145. agentprov/adapters/agentdojo/tables/linyxus_pipeline_dirs.toml +81 -0
  146. agentprov/adapters/agentdojo/tables/llmlock_defence_arms.toml +56 -0
  147. agentprov/adapters/agentdojo/tables/memo_ozdincer_containers.toml +149 -0
  148. agentprov/adapters/agentdojo/tables/menelaus29_experiment_dirs.toml +166 -0
  149. agentprov/adapters/agentdojo/tables/seagent_run_dirs.toml +290 -0
  150. agentprov/adapters/agentdojo/tables/sentry_pipeline_dirs.toml +24 -0
  151. agentprov/adapters/agentdojo/tables/shreeyavarma_pipeline_dirs.toml +14 -0
  152. agentprov/adapters/agentdojo/tables/tacit_model_dirs.toml +25 -0
  153. agentprov/adapters/agentops/__init__.py +31 -0
  154. agentprov/adapters/agentops/artefacts.toml +308 -0
  155. agentprov/adapters/agentops/dialect.py +234 -0
  156. agentprov/adapters/agentops/ext.schema.json +61 -0
  157. agentprov/adapters/agentops/family.schema.json +67 -0
  158. agentprov/adapters/agentops/join.py +68 -0
  159. agentprov/adapters/agentops/mapper.py +849 -0
  160. agentprov/adapters/agentops/pairing.py +47 -0
  161. agentprov/adapters/agentops/profiles/agentops-bench-pilot.profile.toml +208 -0
  162. agentprov/adapters/agentops/profiles/archive/agentops-bench-pilot.profile.v1.toml +181 -0
  163. agentprov/adapters/agentops/redact.py +257 -0
  164. agentprov/adapters/agentops/rules/agentops.rules.toml +726 -0
  165. agentprov/adapters/agentops/rules/archive/agentops.rules.v1.toml +710 -0
  166. agentprov/adapters/agentops/semantics/__init__.py +21 -0
  167. agentprov/adapters/agentops/semantics/agentops.tools-1/profile.toml +37 -0
  168. agentprov/adapters/agentops/semantics/agentops.tools-1/tools.toml +82 -0
  169. agentprov/adapters/agentops/semantics/agentops.tools-2/profile.toml +38 -0
  170. agentprov/adapters/agentops/semantics/agentops.tools-2/tools.toml +82 -0
  171. agentprov/adapters/agentops/semantics/tools.py +310 -0
  172. agentprov/adapters/agentops/tables/task_files.toml +615 -0
  173. agentprov/adapters/autogen/__init__.py +34 -0
  174. agentprov/adapters/autogen/artefacts.toml +175 -0
  175. agentprov/adapters/autogen/citation.py +41 -0
  176. agentprov/adapters/autogen/dialect.py +299 -0
  177. agentprov/adapters/autogen/events.py +139 -0
  178. agentprov/adapters/autogen/family.schema.json +82 -0
  179. agentprov/adapters/autogen/mapper.py +1229 -0
  180. agentprov/adapters/autogen/profiles/archive/autogen-guard-placement.profile.v1.toml +121 -0
  181. agentprov/adapters/autogen/profiles/autogen-guard-placement.profile.toml +137 -0
  182. agentprov/adapters/autogen/rules/autogen.rules.toml +819 -0
  183. agentprov/adapters/autogen/semantics/__init__.py +21 -0
  184. agentprov/adapters/autogen/semantics/autogen.tools-1/profile.toml +32 -0
  185. agentprov/adapters/autogen/semantics/autogen.tools-1/tools.toml +401 -0
  186. agentprov/adapters/autogen/semantics/tools.py +343 -0
  187. agentprov/adapters/code_verification.py +191 -0
  188. agentprov/adapters/credleak/__init__.py +36 -0
  189. agentprov/adapters/credleak/artefacts.toml +146 -0
  190. agentprov/adapters/credleak/dialect.py +199 -0
  191. agentprov/adapters/credleak/ext.schema.json +47 -0
  192. agentprov/adapters/credleak/family.schema.json +49 -0
  193. agentprov/adapters/credleak/mapper.py +618 -0
  194. agentprov/adapters/credleak/profiles/archive/credleak-p15b.profile.v1.toml +139 -0
  195. agentprov/adapters/credleak/profiles/credleak-p15b.profile.toml +201 -0
  196. agentprov/adapters/credleak/rates.toml +14 -0
  197. agentprov/adapters/credleak/redact.py +200 -0
  198. agentprov/adapters/credleak/rules/archive/credleak.rules.v1.toml +444 -0
  199. agentprov/adapters/credleak/rules/credleak.rules.toml +461 -0
  200. agentprov/adapters/credleak/semantics/__init__.py +155 -0
  201. agentprov/adapters/credleak/semantics/credleak.tools-1/tables.toml +82 -0
  202. agentprov/adapters/credleak/semantics/credleak.tools-2/tables.toml +85 -0
  203. agentprov/adapters/dtap/__init__.py +32 -0
  204. agentprov/adapters/dtap/artefacts.toml +545 -0
  205. agentprov/adapters/dtap/dialect.py +360 -0
  206. agentprov/adapters/dtap/ext.schema.json +98 -0
  207. agentprov/adapters/dtap/family.schema.json +72 -0
  208. agentprov/adapters/dtap/join.py +203 -0
  209. agentprov/adapters/dtap/mapper.py +1383 -0
  210. agentprov/adapters/dtap/matcher.py +109 -0
  211. agentprov/adapters/dtap/pairing.py +174 -0
  212. agentprov/adapters/dtap/profiles/archive/dtap-bench.profile.v1.toml +153 -0
  213. agentprov/adapters/dtap/profiles/archive/dtap-bench.profile.v2.toml +212 -0
  214. agentprov/adapters/dtap/profiles/dtap-bench.profile.toml +217 -0
  215. agentprov/adapters/dtap/rates.toml +42 -0
  216. agentprov/adapters/dtap/redact.py +253 -0
  217. agentprov/adapters/dtap/rules/archive/dtap.rules.v1.toml +1146 -0
  218. agentprov/adapters/dtap/rules/archive/dtap.rules.v2.toml +1163 -0
  219. agentprov/adapters/dtap/rules/dtap.rules.toml +1178 -0
  220. agentprov/adapters/dtap/semantics/__init__.py +21 -0
  221. agentprov/adapters/dtap/semantics/dtap.tools-1/builtins.toml +132 -0
  222. agentprov/adapters/dtap/semantics/dtap.tools-1/domains.toml +58 -0
  223. agentprov/adapters/dtap/semantics/dtap.tools-1/labels.toml +4314 -0
  224. agentprov/adapters/dtap/semantics/dtap.tools-1/profile.toml +37 -0
  225. agentprov/adapters/dtap/semantics/dtap.tools-1/servers.toml +191 -0
  226. agentprov/adapters/dtap/semantics/dtap.tools-2/builtins.toml +132 -0
  227. agentprov/adapters/dtap/semantics/dtap.tools-2/domains.toml +58 -0
  228. agentprov/adapters/dtap/semantics/dtap.tools-2/labels.toml +4314 -0
  229. agentprov/adapters/dtap/semantics/dtap.tools-2/profile.toml +38 -0
  230. agentprov/adapters/dtap/semantics/dtap.tools-2/servers.toml +191 -0
  231. agentprov/adapters/dtap/semantics/dtap.tools-3/builtins.toml +132 -0
  232. agentprov/adapters/dtap/semantics/dtap.tools-3/domains.toml +58 -0
  233. agentprov/adapters/dtap/semantics/dtap.tools-3/labels.toml +4314 -0
  234. agentprov/adapters/dtap/semantics/dtap.tools-3/profile.toml +40 -0
  235. agentprov/adapters/dtap/semantics/dtap.tools-3/servers.toml +191 -0
  236. agentprov/adapters/dtap/semantics/tools.py +622 -0
  237. agentprov/adapters/environment_load.py +35 -0
  238. agentprov/adapters/foobench/__init__.py +22 -0
  239. agentprov/adapters/foobench/artefacts.toml +59 -0
  240. agentprov/adapters/foobench/dialect.py +146 -0
  241. agentprov/adapters/foobench/ext.schema.json +51 -0
  242. agentprov/adapters/foobench/family.schema.json +52 -0
  243. agentprov/adapters/foobench/mapper.py +1089 -0
  244. agentprov/adapters/foobench/profiles/foobench.profile.toml +93 -0
  245. agentprov/adapters/foobench/rules/foobench.rules.toml +246 -0
  246. agentprov/adapters/foobench/semantics/__init__.py +170 -0
  247. agentprov/adapters/foobench/semantics/foobench.toy-1/tables.toml +87 -0
  248. agentprov/adapters/geminicli/__init__.py +29 -0
  249. agentprov/adapters/geminicli/artefacts.toml +295 -0
  250. agentprov/adapters/geminicli/dialect.py +249 -0
  251. agentprov/adapters/geminicli/ext.schema.json +60 -0
  252. agentprov/adapters/geminicli/family.schema.json +40 -0
  253. agentprov/adapters/geminicli/mapper.py +880 -0
  254. agentprov/adapters/geminicli/profiles/archive/code-agent-misalignment-geminicli.profile.v1.toml +165 -0
  255. agentprov/adapters/geminicli/profiles/code-agent-misalignment-geminicli.profile.toml +186 -0
  256. agentprov/adapters/geminicli/rules/geminicli.rules.toml +612 -0
  257. agentprov/adapters/geminicli/semantics/__init__.py +21 -0
  258. agentprov/adapters/geminicli/semantics/geminicli.tools-1/profile.toml +31 -0
  259. agentprov/adapters/geminicli/semantics/geminicli.tools-1/tools.toml +77 -0
  260. agentprov/adapters/geminicli/semantics/tools.py +212 -0
  261. agentprov/adapters/inspect/__init__.py +10 -0
  262. agentprov/adapters/inspect/artefacts.toml +366 -0
  263. agentprov/adapters/inspect/dialect.py +298 -0
  264. agentprov/adapters/inspect/ext.schema.json +80 -0
  265. agentprov/adapters/inspect/family.schema.json +89 -0
  266. agentprov/adapters/inspect/mapper.py +2132 -0
  267. agentprov/adapters/inspect/profiles/agentharm-live.profile.toml +123 -0
  268. agentprov/adapters/inspect/profiles/archive/controlarena-persistent.profile.v2.toml +316 -0
  269. agentprov/adapters/inspect/profiles/archive/controlarena-persistent.profile.v3.toml +287 -0
  270. agentprov/adapters/inspect/profiles/archive/fragfuse-agentharm.profile.v1.toml +138 -0
  271. agentprov/adapters/inspect/profiles/archive/kexin-xu-01-agentharm.profile.v1.toml +125 -0
  272. agentprov/adapters/inspect/profiles/archive/survey-agentharm.profile.v1.toml +119 -0
  273. agentprov/adapters/inspect/profiles/archive/whistlebench.profile.v1.toml +111 -0
  274. agentprov/adapters/inspect/profiles/atia-benchmark.profile.toml +89 -0
  275. agentprov/adapters/inspect/profiles/controlarena-persistent.profile.toml +306 -0
  276. agentprov/adapters/inspect/profiles/fragfuse-agentharm.profile.toml +165 -0
  277. agentprov/adapters/inspect/profiles/kexin-xu-01-agentharm.profile.toml +155 -0
  278. agentprov/adapters/inspect/profiles/survey-agentharm.profile.toml +137 -0
  279. agentprov/adapters/inspect/profiles/whistlebench.profile.toml +152 -0
  280. agentprov/adapters/inspect/redact.py +271 -0
  281. agentprov/adapters/inspect/rules/archive/inspect.rules.v1.toml +397 -0
  282. agentprov/adapters/inspect/rules/inspect.rules.toml +770 -0
  283. agentprov/adapters/inspect/semantics/__init__.py +150 -0
  284. agentprov/adapters/inspect/semantics/atia.py +92 -0
  285. agentprov/adapters/inspect/semantics/inspect.agentharm-1/tables.toml +48 -0
  286. agentprov/adapters/inspect/semantics/inspect.agentharm-2/tables.toml +50 -0
  287. agentprov/adapters/inspect/semantics/inspect.atia-1/tables.toml +23 -0
  288. agentprov/adapters/inspect/semantics/inspect.whistlebench-1/tables.toml +25 -0
  289. agentprov/adapters/inspect/semantics/inspect.whistlebench-2/tables.toml +214 -0
  290. agentprov/adapters/inspect/semantics/whistlebench.py +170 -0
  291. agentprov/adapters/mcphunt/__init__.py +30 -0
  292. agentprov/adapters/mcphunt/artefacts.toml +137 -0
  293. agentprov/adapters/mcphunt/dialect.py +188 -0
  294. agentprov/adapters/mcphunt/ext.schema.json +37 -0
  295. agentprov/adapters/mcphunt/family.schema.json +29 -0
  296. agentprov/adapters/mcphunt/mapper.py +881 -0
  297. agentprov/adapters/mcphunt/profiles/archive/mcphunt.profile.v1.toml +336 -0
  298. agentprov/adapters/mcphunt/profiles/archive/mcphunt.profile.v2.toml +337 -0
  299. agentprov/adapters/mcphunt/profiles/mcphunt.profile.toml +341 -0
  300. agentprov/adapters/mcphunt/rules/archive/mcphunt.rules.v1.toml +571 -0
  301. agentprov/adapters/mcphunt/rules/mcphunt.rules.toml +598 -0
  302. agentprov/adapters/mcphunt/semantics/__init__.py +21 -0
  303. agentprov/adapters/mcphunt/semantics/mcphunt.tools-1/profile.toml +23 -0
  304. agentprov/adapters/mcphunt/semantics/mcphunt.tools-1/tools.toml +76 -0
  305. agentprov/adapters/mcphunt/semantics/mcphunt.tools-2/profile.toml +24 -0
  306. agentprov/adapters/mcphunt/semantics/mcphunt.tools-2/tools.toml +76 -0
  307. agentprov/adapters/mcphunt/semantics/tools.py +210 -0
  308. agentprov/adapters/openhands/__init__.py +35 -0
  309. agentprov/adapters/openhands/artefacts.toml +207 -0
  310. agentprov/adapters/openhands/citation.py +45 -0
  311. agentprov/adapters/openhands/dialect.py +251 -0
  312. agentprov/adapters/openhands/ext.schema.json +55 -0
  313. agentprov/adapters/openhands/family.schema.json +67 -0
  314. agentprov/adapters/openhands/mapper.py +1337 -0
  315. agentprov/adapters/openhands/profiles/archive/openagentsafety.profile.v1.toml +110 -0
  316. agentprov/adapters/openhands/profiles/openagentsafety.profile.toml +134 -0
  317. agentprov/adapters/openhands/profiles/redcode-exec-openhands.profile.toml +198 -0
  318. agentprov/adapters/openhands/redact.py +193 -0
  319. agentprov/adapters/openhands/rules/archive/openhands.rules.v1.toml +877 -0
  320. agentprov/adapters/openhands/rules/openhands.rules.toml +919 -0
  321. agentprov/adapters/openhands/semantics/__init__.py +21 -0
  322. agentprov/adapters/openhands/semantics/openhands.tools-1/profile.toml +32 -0
  323. agentprov/adapters/openhands/semantics/openhands.tools-1/tools.toml +67 -0
  324. agentprov/adapters/openhands/semantics/openhands.tools-2/profile.toml +33 -0
  325. agentprov/adapters/openhands/semantics/openhands.tools-2/tools.toml +67 -0
  326. agentprov/adapters/openhands/semantics/tools.py +273 -0
  327. agentprov/adapters/profiles.py +278 -0
  328. agentprov/adapters/projection.py +159 -0
  329. agentprov/adapters/protocols.py +93 -0
  330. agentprov/adapters/qwencode/__init__.py +30 -0
  331. agentprov/adapters/qwencode/artefacts.toml +211 -0
  332. agentprov/adapters/qwencode/dialect.py +398 -0
  333. agentprov/adapters/qwencode/ext.schema.json +62 -0
  334. agentprov/adapters/qwencode/family.schema.json +105 -0
  335. agentprov/adapters/qwencode/mapper.py +875 -0
  336. agentprov/adapters/qwencode/profiles/archive/redcode-exec-qwencode.profile.v1.toml +127 -0
  337. agentprov/adapters/qwencode/profiles/redcode-exec-qwencode.profile.toml +142 -0
  338. agentprov/adapters/qwencode/rules/archive/qwencode.rules.v1.toml +562 -0
  339. agentprov/adapters/qwencode/rules/qwencode.rules.toml +564 -0
  340. agentprov/adapters/qwencode/semantics/__init__.py +21 -0
  341. agentprov/adapters/qwencode/semantics/qwencode.tools-1/profile.toml +35 -0
  342. agentprov/adapters/qwencode/semantics/qwencode.tools-1/tools.toml +69 -0
  343. agentprov/adapters/qwencode/semantics/qwencode.tools-2/profile.toml +39 -0
  344. agentprov/adapters/qwencode/semantics/qwencode.tools-2/tools.toml +69 -0
  345. agentprov/adapters/qwencode/semantics/tools.py +246 -0
  346. agentprov/adapters/registry/__init__.py +2241 -0
  347. agentprov/adapters/registry/claims.py +535 -0
  348. agentprov/adapters/registry/render.py +100 -0
  349. agentprov/adapters/runner/__init__.py +1101 -0
  350. agentprov/adapters/runner/importer.py +3277 -0
  351. agentprov/adapters/runner/live.py +133 -0
  352. agentprov/adapters/runner/provjob.py +114 -0
  353. agentprov/adapters/runner/session.py +349 -0
  354. agentprov/adapters/semantics_profiles.py +96 -0
  355. agentprov/adapters/surrogates.py +130 -0
  356. agentprov/adapters/types.py +139 -0
  357. agentprov/adapters/wirelog/__init__.py +33 -0
  358. agentprov/adapters/wirelog/artefacts.toml +168 -0
  359. agentprov/adapters/wirelog/dialect.py +195 -0
  360. agentprov/adapters/wirelog/ext.schema.json +53 -0
  361. agentprov/adapters/wirelog/family.schema.json +64 -0
  362. agentprov/adapters/wirelog/mapper.py +1079 -0
  363. agentprov/adapters/wirelog/profiles/what-surrounds.profile.toml +149 -0
  364. agentprov/adapters/wirelog/rules/wirelog.rules.toml +785 -0
  365. agentprov/adapters/wirelog/semantics/__init__.py +21 -0
  366. agentprov/adapters/wirelog/semantics/tools.py +324 -0
  367. agentprov/adapters/wirelog/semantics/wirelog.tools-1/documents.toml +31 -0
  368. agentprov/adapters/wirelog/semantics/wirelog.tools-1/profile.toml +33 -0
  369. agentprov/adapters/wirelog/semantics/wirelog.tools-1/tools.toml +24 -0
  370. agentprov/adapters/wirelog/wire.py +281 -0
  371. agentprov/aer/__init__.py +42 -0
  372. agentprov/aer/_structure.py +1144 -0
  373. agentprov/aer/accounting.py +405 -0
  374. agentprov/aer/canon.py +347 -0
  375. agentprov/aer/evidence.py +145 -0
  376. agentprov/aer/ids.py +187 -0
  377. agentprov/aer/locators.py +282 -0
  378. agentprov/aer/reader.py +222 -0
  379. agentprov/aer/rules/aer.rules.toml +196 -0
  380. agentprov/aer/rules.py +408 -0
  381. agentprov/aer/types.py +430 -0
  382. agentprov/aer/validate.py +1240 -0
  383. agentprov/aer/writer.py +162 -0
  384. agentprov/api.py +363 -0
  385. agentprov/artefacts/__init__.py +64 -0
  386. agentprov/artefacts/catalogue.py +540 -0
  387. agentprov/artefacts/detectors.py +473 -0
  388. agentprov/artefacts/scan.py +250 -0
  389. agentprov/cli/__init__.py +0 -0
  390. agentprov/cli/assist.py +527 -0
  391. agentprov/cli/backends.py +431 -0
  392. agentprov/cli/batch.py +350 -0
  393. agentprov/cli/checks.py +535 -0
  394. agentprov/cli/common.py +799 -0
  395. agentprov/cli/control.py +221 -0
  396. agentprov/cli/deposit.py +181 -0
  397. agentprov/cli/derive.py +422 -0
  398. agentprov/cli/devrun.py +227 -0
  399. agentprov/cli/estimate.py +324 -0
  400. agentprov/cli/feedback.py +996 -0
  401. agentprov/cli/fetch.py +393 -0
  402. agentprov/cli/gitinfo.py +99 -0
  403. agentprov/cli/import_.py +997 -0
  404. agentprov/cli/info.py +363 -0
  405. agentprov/cli/inspect.py +725 -0
  406. agentprov/cli/jobs.py +379 -0
  407. agentprov/cli/keys.py +137 -0
  408. agentprov/cli/live/__init__.py +15 -0
  409. agentprov/cli/live/assistant.py +295 -0
  410. agentprov/cli/live/autodojo_cache.py +301 -0
  411. agentprov/cli/live/campaign.py +630 -0
  412. agentprov/cli/live/defences.py +392 -0
  413. agentprov/cli/live/egress.py +532 -0
  414. agentprov/cli/live/envs.py +908 -0
  415. agentprov/cli/live/inspect_catalogue.py +145 -0
  416. agentprov/cli/live/localmodels.py +1091 -0
  417. agentprov/cli/live/policy.py +305 -0
  418. agentprov/cli/live/providermodels.py +356 -0
  419. agentprov/cli/live/quality.py +263 -0
  420. agentprov/cli/live/sandbox.py +205 -0
  421. agentprov/cli/live/staging.py +306 -0
  422. agentprov/cli/live/tune.py +267 -0
  423. agentprov/cli/live/worker.py +318 -0
  424. agentprov/cli/main.py +346 -0
  425. agentprov/cli/migrate.py +235 -0
  426. agentprov/cli/models.py +405 -0
  427. agentprov/cli/package.py +326 -0
  428. agentprov/cli/prices.py +223 -0
  429. agentprov/cli/purge.py +209 -0
  430. agentprov/cli/render.py +334 -0
  431. agentprov/cli/run.py +3071 -0
  432. agentprov/cli/settings_cmd.py +86 -0
  433. agentprov/cli/stats.py +200 -0
  434. agentprov/cli/verify.py +279 -0
  435. agentprov/corpus/__init__.py +42 -0
  436. agentprov/corpus/archive.py +296 -0
  437. agentprov/corpus/authority.py +303 -0
  438. agentprov/corpus/buildstep.py +205 -0
  439. agentprov/corpus/conformance.py +32 -0
  440. agentprov/corpus/datasheet.py +616 -0
  441. agentprov/corpus/dedup.py +28 -0
  442. agentprov/corpus/derive.py +2290 -0
  443. agentprov/corpus/facets.py +554 -0
  444. agentprov/corpus/index.py +765 -0
  445. agentprov/corpus/integrity.py +396 -0
  446. agentprov/corpus/layout.py +568 -0
  447. agentprov/corpus/licences.py +35 -0
  448. agentprov/corpus/manifest.py +1594 -0
  449. agentprov/corpus/package.py +1522 -0
  450. agentprov/corpus/personas.py +344 -0
  451. agentprov/corpus/purge.py +522 -0
  452. agentprov/corpus/rawtree.py +556 -0
  453. agentprov/corpus/reader.py +482 -0
  454. agentprov/corpus/register.py +352 -0
  455. agentprov/corpus/rowvalues.py +36 -0
  456. agentprov/corpus/rules/corpus.rules.toml +95 -0
  457. agentprov/corpus/runstate.py +61 -0
  458. agentprov/corpus/scratch.py +43 -0
  459. agentprov/corpus/selection.py +59 -0
  460. agentprov/corpus/shapes.py +340 -0
  461. agentprov/corpus/spec.py +483 -0
  462. agentprov/corpus/stages.py +48 -0
  463. agentprov/corpus/validation.py +560 -0
  464. agentprov/corpus/validation_job.py +73 -0
  465. agentprov/corpus/verify.py +1488 -0
  466. agentprov/corpus/withheld.py +563 -0
  467. agentprov/corpus/withhold.py +1161 -0
  468. agentprov/corpus/withhold_scan.py +502 -0
  469. agentprov/corpus/writer.py +503 -0
  470. agentprov/corpus/zip_local.py +183 -0
  471. agentprov/devrun/__init__.py +8 -0
  472. agentprov/devrun/plan.py +235 -0
  473. agentprov/docs/user-guide/01-install.md +157 -0
  474. agentprov/docs/user-guide/02-concepts.md +244 -0
  475. agentprov/docs/user-guide/03-sources-and-import.md +326 -0
  476. agentprov/docs/user-guide/04-derive-recompute-validate-verify.md +301 -0
  477. agentprov/docs/user-guide/05-package-and-deposit.md +484 -0
  478. agentprov/docs/user-guide/06-stats-and-render.md +166 -0
  479. agentprov/docs/user-guide/07-live-runs.md +952 -0
  480. agentprov/docs/user-guide/08-desktop-app.md +605 -0
  481. agentprov/docs/user-guide/09-safety.md +158 -0
  482. agentprov/docs/user-guide/10-troubleshooting.md +285 -0
  483. agentprov/docs/user-guide/11-cli-reference.md +4367 -0
  484. agentprov/docs/user-guide/12-glossary.md +128 -0
  485. agentprov/docs/user-guide/13-namespace.md +138 -0
  486. agentprov/docs/user-guide/14-corpora.md +226 -0
  487. agentprov/docs/user-guide/15-corpus-artefacts.md +937 -0
  488. agentprov/docs/user-guide/README.md +65 -0
  489. agentprov/drain.py +40 -0
  490. agentprov/envinfo.py +124 -0
  491. agentprov/errors.py +256 -0
  492. agentprov/estimate/__init__.py +19 -0
  493. agentprov/estimate/cost.py +366 -0
  494. agentprov/estimate/data/estimate_priors.json +511 -0
  495. agentprov/estimate/data/prices.json +396 -0
  496. agentprov/estimate/data/stand-in-script.json +1 -0
  497. agentprov/estimate/plan.py +126 -0
  498. agentprov/estimate/prices.py +465 -0
  499. agentprov/estimate/priors.py +125 -0
  500. agentprov/estimate/usage.py +337 -0
  501. agentprov/formats.py +160 -0
  502. agentprov/host.py +928 -0
  503. agentprov/ingest/__init__.py +81 -0
  504. agentprov/ingest/archives.py +958 -0
  505. agentprov/ingest/jsonspan.py +179 -0
  506. agentprov/ingest/jsonstream.py +465 -0
  507. agentprov/ingest/limits.py +179 -0
  508. agentprov/ingest/loaders.py +396 -0
  509. agentprov/ingest/names.py +113 -0
  510. agentprov/ingest/parts.py +128 -0
  511. agentprov/ingest/paths.py +534 -0
  512. agentprov/ingest/profile_limits.py +60 -0
  513. agentprov/ingest/quote.py +175 -0
  514. agentprov/ingest/sse.py +99 -0
  515. agentprov/ingest/streams.py +313 -0
  516. agentprov/ingest/yamlsafe.py +110 -0
  517. agentprov/io/__init__.py +1 -0
  518. agentprov/io/atomic.py +424 -0
  519. agentprov/io/canonical.py +124 -0
  520. agentprov/io/jsonschema_subset.py +195 -0
  521. agentprov/io/locks.py +249 -0
  522. agentprov/io/remove.py +89 -0
  523. agentprov/io/replace_retry.py +44 -0
  524. agentprov/io/worker_testjobs.py +280 -0
  525. agentprov/io/workers.py +2096 -0
  526. agentprov/jobs/__init__.py +10 -0
  527. agentprov/jobs/batch.py +317 -0
  528. agentprov/jobs/follow.py +379 -0
  529. agentprov/jobs/manager.py +493 -0
  530. agentprov/jobs/record.py +285 -0
  531. agentprov/jobs/supervisor.py +92 -0
  532. agentprov/jobs/tiers.py +78 -0
  533. agentprov/keys/__init__.py +154 -0
  534. agentprov/keys/helper.py +159 -0
  535. agentprov/migration/__init__.py +11 -0
  536. agentprov/migration/c6.py +437 -0
  537. agentprov/migration/gate_c3.py +131 -0
  538. agentprov/migration/gate_d.py +579 -0
  539. agentprov/migration/gate_d_worker.py +524 -0
  540. agentprov/migration/gates.py +1089 -0
  541. agentprov/migration/lock.py +320 -0
  542. agentprov/migration/pipeline.py +578 -0
  543. agentprov/migration/reconcile.py +284 -0
  544. agentprov/migration/semdiff.py +914 -0
  545. agentprov/migration/xd.py +229 -0
  546. agentprov/presets/presets.toml +89 -0
  547. agentprov/presets.py +1017 -0
  548. agentprov/progress.py +112 -0
  549. agentprov/prov/__init__.py +27 -0
  550. agentprov/prov/_ir.py +94 -0
  551. agentprov/prov/catalogue/agentprov-prov-0.1.toml +510 -0
  552. agentprov/prov/catalogue/archive/agentprov-prov-0.1.v1.toml +476 -0
  553. agentprov/prov/catalogue/archive/agentprov-prov-0.1.v2.toml +485 -0
  554. agentprov/prov/compat/__init__.py +5 -0
  555. agentprov/prov/compat/adprov_v2_3/PORT_MANIFEST.json +332 -0
  556. agentprov/prov/compat/adprov_v2_3/__init__.py +71 -0
  557. agentprov/prov/compat/adprov_v2_3/adprov.ttl +158 -0
  558. agentprov/prov/compat/adprov_v2_3/build_prov.py +524 -0
  559. agentprov/prov/compat/adprov_v2_3/conformance.py +607 -0
  560. agentprov/prov/compat/adprov_v2_3/labeling.py +175 -0
  561. agentprov/prov/compat/adprov_v2_3/prov_emit.py +253 -0
  562. agentprov/prov/compat/adprov_v2_3/serialise.py +25 -0
  563. agentprov/prov/compat/adprov_v2_3/validate.py +453 -0
  564. agentprov/prov/compat/adprov_v2_3/yaml_shim.py +24 -0
  565. agentprov/prov/compat/semdiff-map.toml +815 -0
  566. agentprov/prov/diff.py +115 -0
  567. agentprov/prov/engine.py +1054 -0
  568. agentprov/prov/evidence.py +113 -0
  569. agentprov/prov/iri.py +115 -0
  570. agentprov/prov/rules/__init__.py +1 -0
  571. agentprov/prov/rules/assess.py +624 -0
  572. agentprov/prov/rules/edges.py +587 -0
  573. agentprov/prov/rules/nodes.py +585 -0
  574. agentprov/prov/rules/top.py +247 -0
  575. agentprov/prov/serialise/__init__.py +1 -0
  576. agentprov/prov/serialise/nquads.py +48 -0
  577. agentprov/prov/serialise/provjson.py +24 -0
  578. agentprov/prov/serialise/time.py +40 -0
  579. agentprov/prov/serialise/trig.py +187 -0
  580. agentprov/prov/specs.py +169 -0
  581. agentprov/prov/vocab.py +107 -0
  582. agentprov/raw/__init__.py +61 -0
  583. agentprov/raw/carve.py +211 -0
  584. agentprov/raw/fetch.py +1622 -0
  585. agentprov/raw/history.py +368 -0
  586. agentprov/raw/members.py +1280 -0
  587. agentprov/raw/origins.py +484 -0
  588. agentprov/raw/references.py +211 -0
  589. agentprov/raw/store.py +595 -0
  590. agentprov/raw/testjobs.py +35 -0
  591. agentprov/release/__init__.py +54 -0
  592. agentprov/release/builder.py +892 -0
  593. agentprov/release/index.py +767 -0
  594. agentprov/release/metadata.py +556 -0
  595. agentprov/release/verify.py +478 -0
  596. agentprov/render/__init__.py +37 -0
  597. agentprov/render/dot.py +254 -0
  598. agentprov/render/errors.py +73 -0
  599. agentprov/render/graph.py +314 -0
  600. agentprov/render/output.py +73 -0
  601. agentprov/render/source.py +129 -0
  602. agentprov/render/style.py +333 -0
  603. agentprov/schemas/aer-0.1.schema.json +4272 -0
  604. agentprov/schemas/aer-0.2.schema.json +4339 -0
  605. agentprov/schemas/capture-0.1.schema.json +1830 -0
  606. agentprov/schemas/corpus-0.1.schema.json +4750 -0
  607. agentprov/schemas/corpus-0.2.schema.json +5566 -0
  608. agentprov/schemas/withheld-0.1.schema.json +342 -0
  609. agentprov/schemas/withheld-0.2.schema.json +343 -0
  610. agentprov/schemas/withheld-0.3.schema.json +344 -0
  611. agentprov/schemas/withheld-0.4.schema.json +345 -0
  612. agentprov/schemas/withheld-0.5.schema.json +346 -0
  613. agentprov/sem/__init__.py +1 -0
  614. agentprov/sem/engine.py +136 -0
  615. agentprov/sem/profiles.py +59 -0
  616. agentprov/sem/reader.py +113 -0
  617. agentprov/sem/types.py +238 -0
  618. agentprov/sem/validate.py +717 -0
  619. agentprov/settings.py +374 -0
  620. agentprov/stage_definitions.py +142 -0
  621. agentprov/stage_scopes.py +320 -0
  622. agentprov/stats/__init__.py +129 -0
  623. agentprov/stats/datasheet.py +75 -0
  624. agentprov/stats/exclusions.py +136 -0
  625. agentprov/stats/field_groups.toml +278 -0
  626. agentprov/stats/fieldgroups.py +460 -0
  627. agentprov/stats/output.py +166 -0
  628. agentprov/stats/source.py +268 -0
  629. agentprov/stats/tables.py +566 -0
  630. agentprov/testing/__init__.py +18 -0
  631. agentprov/testing/fixture_caps.py +161 -0
  632. agentprov/testing/fs_guard.py +140 -0
  633. agentprov/testing/golden.py +630 -0
  634. agentprov/testing/local_server.py +145 -0
  635. agentprov/testing/projections.py +12 -0
  636. agentprov/testing/sem_v23.py +153 -0
  637. agentprov/validate/__init__.py +28 -0
  638. agentprov/validate/_provdoc.py +264 -0
  639. agentprov/validate/cache.py +449 -0
  640. agentprov/validate/constraints.py +399 -0
  641. agentprov/validate/linkage.py +727 -0
  642. agentprov/validate/profiles.py +745 -0
  643. agentprov/validate/prov.py +100 -0
  644. agentprov/validate/prov_structure.py +474 -0
  645. agentprov/validate/roundtrip.py +416 -0
  646. agentprov/validate/tiers.py +171 -0
  647. agentprov/versions.py +41 -0
  648. agentprov/views/__init__.py +11 -0
  649. agentprov/views/transcript_v1.py +680 -0
  650. agentprov/views/transcript_v1_fields.toml +313 -0
  651. agentprov/vocab/apv-0.2.ttl +2792 -0
  652. agentprov/vocab/apv-adprov-map-0.1.ttl +106 -0
  653. agentprov/worker.py +123 -0
  654. agentprov-0.1.1.dist-info/METADATA +99 -0
  655. agentprov-0.1.1.dist-info/RECORD +659 -0
  656. agentprov-0.1.1.dist-info/WHEEL +4 -0
  657. agentprov-0.1.1.dist-info/entry_points.txt +3 -0
  658. agentprov-0.1.1.dist-info/licenses/LICENSE +21 -0
  659. agentprov-0.1.1.dist-info/licenses/THIRD_PARTY_NOTICES.md +81 -0
agentprov/__init__.py ADDED
@@ -0,0 +1,14 @@
1
+ """AgentPROV: an execution-provenance framework for LLM-agent security research.
2
+
3
+ Pipeline (each stage after the raw store is a pure, versioned function)::
4
+
5
+ raw evidence (imported logs | live capture/0.1) -> AER (aer/0.2; aer/0.1 read) -> SEM (sem/0.1)
6
+ -> W3C PROV (agentprov-prov/0.1: core / inference / assessment bundles)
7
+ -> validation -> corpus (hash-chained manifest)
8
+
9
+ See ``docs/architecture/`` for the normative specification and ``AGENTS.md`` for project memory.
10
+ """
11
+
12
+ from agentprov.versions import VERSIONS, __version__
13
+
14
+ __all__ = ["VERSIONS", "__version__"]
agentprov/__main__.py ADDED
@@ -0,0 +1,8 @@
1
+ """``python -m agentprov``: the same entry point as the ``agentprov`` console script (MN M.1.2)."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from agentprov.cli.main import main
6
+
7
+ if __name__ == "__main__":
8
+ raise SystemExit(main())
@@ -0,0 +1,36 @@
1
+ """The adapter model (docs/architecture D.1-D.3; MN M.1.2): protocols, core types, profiles, the runner and the registry.
2
+
3
+ This package re-exports the protocols and core types only; it imports no adapter family (D.2.1). Families live in
4
+ sub-packages (``adprov``; ``agentdojo`` and ``inspect`` arrive with their importers) and are reached through the
5
+ registry's lazy factory strings.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from agentprov.adapters.protocols import AerRecord, Mapper, MappingContext, Reader, SourceTree
11
+ from agentprov.adapters.types import (
12
+ ArtefactRef,
13
+ CandidateArtefact,
14
+ ExecutionUnit,
15
+ Issue,
16
+ LocatedItem,
17
+ Locator,
18
+ Origin,
19
+ SniffResult,
20
+ )
21
+
22
+ __all__ = [
23
+ "AerRecord",
24
+ "ArtefactRef",
25
+ "CandidateArtefact",
26
+ "ExecutionUnit",
27
+ "Issue",
28
+ "LocatedItem",
29
+ "Locator",
30
+ "Mapper",
31
+ "MappingContext",
32
+ "Origin",
33
+ "Reader",
34
+ "SniffResult",
35
+ "SourceTree",
36
+ ]
@@ -0,0 +1,105 @@
1
+ """Account-path shapes in artefact labels (regeneration-batch item 108; the D-510 census safeguard, user-approved
2
+ 2026-10-14, fail closed).
3
+
4
+ A label (an origin path inside a pinned tree or archive) can name a workstation or cluster account in a directory:
5
+ slashed (``home/<x>/``, ``Users/<x>/``, ``scratch/<x>/``, ``mfs1/u/<x>/``) or munged into one segment
6
+ (``_home_<x>_``, ``_Users_<x>_``, ``_scratch_<x>_``, ``_ceph_…_students_<x>_``, as EnvironmentOptim's
7
+ ``_ceph_ssd_students_<x>_qwen3_5``). :func:`account_shapes` reports where, by shape and segment index only, never the
8
+ value. The importer holds a selected file whose label has such a shape unless a redaction rule of the profile covers
9
+ that segment (:func:`covered`); a profile exempts a verified false positive by glob (``[import] account_path_exempt``).
10
+ Pure, stdlib only.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import hashlib
16
+ import re
17
+ from collections.abc import Iterable, Mapping, Sequence
18
+ from dataclasses import dataclass, field
19
+ from typing import Final
20
+
21
+ __all__ = ["AccountShape", "RedactCover", "account_shapes", "covered", "redaction_patterns"]
22
+
23
+ #: Slashed forms: a parent directory name followed by an account segment (the segment after it is the account).
24
+ _SLASHED: Final = (("home", 1), ("Users", 1), ("scratch", 1), ("mfs1/u", 2))
25
+ #: Munged forms: one segment that spells a home-like parent and an account between underscores.
26
+ _MUNGED: Final = (
27
+ # a munged absolute path keeps the root's separator as a leading underscore: `/home/x/` becomes `_home_x_`
28
+ ("munged_home", re.compile(r"(?:^|[^A-Za-z0-9])_(?:home|Users|scratch)_(?P<name>[A-Za-z0-9.-]+)_")),
29
+ ("munged_cluster", re.compile(r"_ceph_(?:[a-z0-9]+_)*?(?:students|users|home)_(?P<name>[A-Za-z0-9.-]+)_")),
30
+ )
31
+ #: AgentDojo's fictional sandbox user (benchmark content); never an operator's account.
32
+ _FICTIONAL: Final = frozenset({"user"})
33
+
34
+
35
+ @dataclass(frozen=True, slots=True)
36
+ class AccountShape:
37
+ """One account-bearing place in a label: the shape and the index of the segment that holds the account. ``name`` is
38
+ the account token itself, kept in memory for :func:`covered` only: never in ``repr``, a report or a register row."""
39
+
40
+ shape: str
41
+ segment: int
42
+ name: str = field(default="", repr=False, compare=False)
43
+
44
+
45
+ @dataclass(frozen=True, slots=True)
46
+ class RedactCover:
47
+ """A declared redaction rule as the lint reads it: its pattern, and its ``labels`` allowlist when it has one (the
48
+ dtap family's D-607 grammar: a match whose ``{span12}`` label is not listed is left unredacted)."""
49
+
50
+ pattern: re.Pattern[str]
51
+ labels: frozenset[str] | None = None
52
+
53
+
54
+ def account_shapes(label: str) -> list[AccountShape]:
55
+ """The account-path shapes of ``label`` (``/``-separated), by shape and segment index."""
56
+ segs = label.split("/")
57
+ out: list[AccountShape] = []
58
+ for parent, width in _SLASHED:
59
+ parts = parent.split("/")
60
+ for i in range(len(segs) - width):
61
+ if segs[i : i + len(parts)] == parts and segs[i + width] not in _FICTIONAL:
62
+ out.append(AccountShape(f"slashed_{parts[0].lower()}", i + width, segs[i + width]))
63
+ for i, seg in enumerate(segs):
64
+ for name, pattern in _MUNGED:
65
+ found = pattern.search(seg)
66
+ if found:
67
+ out.append(AccountShape(name, i, found.group("name")))
68
+ break
69
+ return out
70
+
71
+
72
+ def _span_label(span: str, salt: str) -> str:
73
+ """D-476's ``{span12}``: SHA-256 over ``<salt> NUL <span>``, first 12 hex digits (the families' redaction labels)."""
74
+ return hashlib.sha256(f"{salt}\0{span}".encode("utf-8", "surrogatepass")).hexdigest()[:12]
75
+
76
+
77
+ def covered(label: str, shape: AccountShape, covers: Iterable[RedactCover | re.Pattern[str]], *, salt: str = "") -> bool:
78
+ """Whether a redaction rule of the profile redacts the account of ``shape`` in its segment of ``label``: one of the
79
+ rule's matches there includes the account token (its ``span`` group, else the whole match), and, for a rule with a
80
+ ``labels`` allowlist, that span's label (salted with ``salt``, the profile id) is listed (pre-round review #19: a
81
+ match elsewhere in the segment, or an unlisted token, redacts nothing)."""
82
+ seg = label.split("/")[shape.segment]
83
+ for cover in covers:
84
+ rule = cover if isinstance(cover, RedactCover) else RedactCover(cover)
85
+ for found in rule.pattern.finditer(seg):
86
+ span = found.group("span") if "span" in rule.pattern.groupindex else found.group(0)
87
+ if span is None or (shape.name and shape.name not in span):
88
+ continue
89
+ if rule.labels is None or _span_label(span, salt) in rule.labels:
90
+ return True
91
+ return False
92
+
93
+
94
+ def redaction_patterns(rules: Sequence[object]) -> list[RedactCover]:
95
+ """Every declared redaction rule (any family's ``[[family.<f>.redact]]`` table) as a :class:`RedactCover`."""
96
+ out = []
97
+ for rule in rules:
98
+ pattern = rule.get("pattern") if isinstance(rule, Mapping) else getattr(rule, "pattern", None)
99
+ raw = rule.get("labels") if isinstance(rule, Mapping) else getattr(rule, "labels", None)
100
+ labels = frozenset(str(x) for x in raw) if isinstance(raw, (list, tuple, set, frozenset)) else None
101
+ if isinstance(pattern, str):
102
+ out.append(RedactCover(re.compile(pattern), labels))
103
+ elif isinstance(pattern, re.Pattern):
104
+ out.append(RedactCover(pattern, labels))
105
+ return out
@@ -0,0 +1,9 @@
1
+ """The AgentDojo-PROV ``transcript/v1`` adapter family (docs/architecture D.7; MN M.1.2; layer L4).
2
+
3
+ * :mod:`~agentprov.adapters.adprov.dialect`: :class:`TranscriptV1Reader` (dialect ``adprov.transcript_v1``, variant
4
+ ``v1``, D.7.2 flags);
5
+ * :mod:`~agentprov.adapters.adprov.mapper`: :class:`TranscriptV1Mapper` (adapter ``adprov.transcript_v1``, D.7.3);
6
+ * ``profiles/adprov-v1.profile.toml`` and ``rules/adprov.rules.toml`` (data).
7
+
8
+ The inverse is the view :mod:`agentprov.views.transcript_v1`. This package imports no other adapter family (M.5.2(2)).
9
+ """
@@ -0,0 +1,431 @@
1
+ # Artefact catalogue `adprov` (docs/architecture D.15.2, D.15.6; DECISIONS D-12): the AgentDojo-PROV transcript/v1 trees.
2
+ #
3
+ # Data, not code: loaded by agentprov.artefacts through importlib.resources (this directory's catalogue is found without
4
+ # importing any adapter module). It covers both trees of profile `adprov-v1`: the generated tree (registry part
5
+ # `release`, the 13 classes A1-A13 of D.10.9, found in the manuscript's corpus of 17,664 traces) and the converted tree
6
+ # (part `converted-legacy`, the compat oracle; the baseline converter's artefacts). `adprov.art.reported_calls_exceed`
7
+ # was found on 2026-10-08 by the full-scope gate run; `adprov.art.payload_not_reaching_agent` (the SEM-reading detector
8
+ # of D.15.8 item 11) on 2026-10-29 by the stats run over the sealed round-1 corpus, where it was unclassified.
9
+ #
10
+ # Handling follows D.15.1: evidence is never edited. CR states the fact truthfully in the engine's model, NR counts a loss
11
+ # that was never recorded, FO flags what cannot be corrected. No entry uses DR or RJ: this family reads recorded
12
+ # transcripts and reconstructs nothing beyond the rules of its rule catalogue.
13
+ #
14
+ # `expected` counts are the manuscript and audit figures quoted by the specification. Each is `unverified` until the
15
+ # first full-snapshot import has confirmed it (D.15.6, phase 13); none is a gate, and a mismatch is reported, never hidden.
16
+ # Where the specification gives no count, no `expected` row is written: nothing here is estimated.
17
+ #
18
+ # An entry accounts for a safety-net finding (agentprov.artefacts) when its `detector.rule` is the generic detector, or is
19
+ # the mapper rule that the finding's field-scoped rule references cite, or the finding is one of its `claims`, or it carries
20
+ # one of the entry's `recorded_as.issues` codes. Anything else the net finds is reported as artefact.unclassified.*.
21
+ #
22
+ # Rules named here exist in the `adprov`, `agentdojo` and `aer` rule catalogues (tests/unit/artefacts checks it). Code and
23
+ # audit locations behind each entry are in `refs`; the baseline is nickjones39/agentdojo-prov @ 579a908.
24
+
25
+ version = 1
26
+ family = "adprov"
27
+ namespaces = ["adprov"]
28
+
29
+ # ============================================================================================ generated tree (release)
30
+
31
+ [[artefact]]
32
+ id = "adprov.art.rerun_passes_lost"
33
+ title = "Earlier passes of a silent re-run are lost (A1)"
34
+ description = "AgentDojo re-runs a pass up to three times when the final reply is empty and the transcript holds only the last pass. Where the harness call counter exceeds the held assistant turns, the earlier calls are emitted as lost model calls in a non-scored attempt; their content is unknown."
35
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
36
+ cause = "upstream_harness"
37
+ detector = { rule = "adprov.lost_calls_from_count@1", class = "D" }
38
+ handling = { class = "CR", rule = "adprov.lost_calls_from_count@1" }
39
+ expected = [
40
+ { snapshot = "adprov-v1/release@579a908", count = 153, basis = "traces whose usage.n_llm_calls exceeds the assistant turns held (I.1.2 C07; EF F.2 item 5)", unit = "traces", status = "unverified" },
41
+ ]
42
+ manuscript = true
43
+ refs = ["docs/architecture/D_adapters.md D.10.9 A1", "docs/architecture/C_data_model.md C.7.4", "audit/capture.md section 4.2.4"]
44
+
45
+ [[artefact]]
46
+ id = "adprov.art.single_attempt_inferred"
47
+ title = "A single attempt is inferred from the harness call counter"
48
+ description = "Where the harness call counter equals the assistant turns held, the transcript's turns are read as the only attempt (index 0): no earlier pass made calls. The reading rests on the counter's documented semantics, not on cited code, so it is cited through its I twin and the attempt is INFERRED (D-27 c6); a pass that made no call would not show in the counter."
49
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
50
+ cause = "upstream_harness"
51
+ detector = { rule = "adprov.single_attempt_from_call_count@1", class = "I" }
52
+ handling = { class = "CR", rule = "adprov.single_attempt_from_call_count_unverified@1" }
53
+ expected = [
54
+ { snapshot = "adprov-v1/release@579a908", count = 14567, basis = "phase-10 examination 2, R07: executions citing adprov.single_attempt_from_call_count@1 before item 3", unit = "traces", status = "unverified" },
55
+ ]
56
+ manuscript = false
57
+ refs = ["docs/architecture/D_adapters.md D.5.4", "docs/architecture/DECISIONS.md D-27 c6", "audit/capture.md section 4.2.4"]
58
+
59
+ [[artefact]]
60
+ id = "adprov.art.last_pass_only"
61
+ title = "A transcript holds only the final scored pass"
62
+ description = "The turns of a transcript/v1 file are the message list of the final, scored pipeline pass. Earlier passes are never recorded (discarded_attempts occurs 0 times in the released tree), so the scored attempt carries an unknown index."
63
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
64
+ cause = "upstream_harness"
65
+ detector = { rule = "adprov.turns_hold_last_pass@1", class = "D" }
66
+ recorded_as = { issues = ["earlier_attempts_unobservable"] }
67
+ handling = { class = "NR", rule = "adprov.turns_hold_last_pass@1" }
68
+ manuscript = false
69
+ refs = ["docs/architecture/D_adapters.md D.7", "audit/capture.md section 3"]
70
+
71
+ [[artefact]]
72
+ id = "adprov.art.times_not_recorded"
73
+ title = "transcript/v1 records no per-message or per-model-call time"
74
+ description = "The format holds the run start and end and, in the generated tree, tool timings. Messages, model calls and environment-state records have no time slot, so their times are unknown (not recorded). No time is derived from the run interval or from file dates."
75
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
76
+ cause = "capture"
77
+ detector = { rule = "adprov.run_interval_scope@1", class = "D" }
78
+ claims = ["artefact.generic.sentinel_time#unknown_not_recorded"]
79
+ handling = { class = "NR", rule = "adprov.run_interval_scope@1" }
80
+ manuscript = true
81
+ refs = ["docs/architecture/C_data_model.md C.7.1", "audit/legacy_replay.md section 4"]
82
+
83
+ [[artefact]]
84
+ id = "adprov.art.usage_absent"
85
+ title = "Model-call completeness is unverifiable without reported usage (A2)"
86
+ description = "Some providers return no usage and the transcript has no model_config, so the reported call count cannot be compared with the assistant turns. The calls are derived from the turns, and the accounting check agent_calls_vs_assistant is recorded as unverifiable."
87
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
88
+ cause = "provider"
89
+ detector = { rule = "aer.acc.agent_calls_vs_assistant@1", class = "D" }
90
+ recorded_as = { issues = ["accounting_unverifiable"] }
91
+ handling = { class = "FO", rule = "aer.acc.agent_calls_vs_assistant@1" }
92
+ expected = [
93
+ { snapshot = "adprov-v1/release@579a908", count = 2944, basis = "DeepSeek traces with no model_config (EF F.2 item 5; I.1.2 C07)", unit = "traces", status = "unverified" },
94
+ ]
95
+ manuscript = true
96
+ refs = ["docs/architecture/D_adapters.md D.10.9 A2", "docs/architecture/C_data_model.md C.12.2"]
97
+
98
+ [[artefact]]
99
+ id = "adprov.art.reported_calls_exceed"
100
+ title = "Reported call count exceeds the held assistant messages"
101
+ description = "In some traces the usage-reported call count is larger than the assistant messages held, and the finish-reason list or the lost-call rule cannot reconcile them. They are sealed accounting_inconsistent (reported_calls_differ). The cause (unrecorded calls or a counting defect) is unknown."
102
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
103
+ cause = "unknown"
104
+ detector = { rule = "aer.acc.reported_counts@1", class = "D" }
105
+ recorded_as = { issues = ["accounting_inconsistent"] }
106
+ handling = { class = "FO", rule = "aer.acc.reported_counts@1" }
107
+ expected = [
108
+ { snapshot = "adprov-v1/release@579a908", count = 32, basis = "qwen-2.5-72b-instruct 20 and gemini-2.5-flash 12, found by the full-scope gate run of 2026-10-08", unit = "traces", status = "unverified" },
109
+ ]
110
+ manuscript = true
111
+ refs = ["docs/architecture/D_adapters.md D.15.6", "docs/architecture/C_data_model.md C.7.4"]
112
+
113
+ [[artefact]]
114
+ id = "adprov.art.temperature_not_transmitted"
115
+ title = "A configured temperature was never transmitted (A3)"
116
+ description = "agentdojo 0.1.35 sends `temperature or NOT_GIVEN`, so a configured 0.0 is not sent. The transcript records the configured value; the transmitted value is unknown."
117
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
118
+ cause = "upstream_harness"
119
+ detector = { rule = "adprov.temperature_not_transmitted@1", class = "D" }
120
+ handling = { class = "FO", rule = "adprov.temperature_not_transmitted@1" }
121
+ manuscript = true
122
+ refs = ["docs/architecture/D_adapters.md D.10.9 A3", "audit/capture.md section 3"]
123
+
124
+ [[artefact]]
125
+ id = "adprov.art.text_tool_call"
126
+ title = "Tool calls written as text and never executed (A4)"
127
+ description = "Some models wrote a tool call into the reply text instead of a structured call. The call was not executed. Re-parsing it into a tool_call part is forbidden (D.15.1); it is flagged by the generic text-encoded-call detector, whose counts are heuristic."
128
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
129
+ cause = "provider"
130
+ detector = { rule = "artefact.generic.text_encoded_call", class = "I" }
131
+ handling = { class = "FO" }
132
+ expected = [
133
+ { snapshot = "adprov-v1/release@579a908", count = 470, basis = "traces, 469 of them Llama 3.3 70B (heuristic count)", unit = "traces", status = "unverified" },
134
+ ]
135
+ manuscript = true
136
+ refs = ["docs/architecture/D_adapters.md D.10.9 A4"]
137
+
138
+ [[artefact]]
139
+ id = "adprov.art.calls_pending_at_limit"
140
+ title = "Calls requested but not executed when max_iters stopped the loop (A5)"
141
+ description = "The last assistant message holds tool calls with no tool message because the iteration limit (max_iters = 15) ended the run. The requests exist and have no execution; the baseline dropped them."
142
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
143
+ cause = "upstream_harness"
144
+ detector = { rule = "agentdojo.unexecuted_trailing_calls@1", class = "D" }
145
+ recorded_as = { issues = ["unexecuted_tool_call", "missing_tool_result"] }
146
+ handling = { class = "CR", rule = "agentdojo.unexecuted_trailing_calls@1" }
147
+ expected = [
148
+ { snapshot = "adprov-v1/release@579a908", count = 47, basis = "traces cut with calls pending (A5)", unit = "traces", status = "unverified" },
149
+ ]
150
+ manuscript = true
151
+ refs = ["docs/architecture/D_adapters.md D.10.9 A5", "docs/architecture/C_data_model.md C.7.4"]
152
+
153
+ [[artefact]]
154
+ id = "adprov.art.abnormal_finish"
155
+ title = "Abnormal finish reasons (A6)"
156
+ description = "Replies that ended with a finish reason other than a normal stop or tool-call ending (for example a length cut). The baseline lost them to a broad except; the verbatim reasons are kept in the model calls."
157
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
158
+ cause = "provider"
159
+ detector = { rule = "artefact.generic.abnormal_finish", class = "O" }
160
+ handling = { class = "FO" }
161
+ expected = [
162
+ { snapshot = "adprov-v1/release@579a908", count = 184, basis = "traces with abnormal finish reasons (A6)", unit = "traces", status = "unverified" },
163
+ ]
164
+ manuscript = true
165
+ refs = ["docs/architecture/D_adapters.md D.10.9 A6"]
166
+
167
+ [[artefact]]
168
+ id = "adprov.art.failed_tool_empty_content"
169
+ title = "Failed tool calls recorded as an empty string (A7)"
170
+ description = "A failed tool call is stored with empty content although the model saw the error. The execution status is derived from the recorded error, so the failure is stated truthfully."
171
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
172
+ cause = "upstream_harness"
173
+ detector = { rule = "agentdojo.tool_status_from_error@1", class = "D" }
174
+ handling = { class = "CR", rule = "agentdojo.tool_status_from_error@1" }
175
+ manuscript = true
176
+ refs = ["docs/architecture/D_adapters.md D.10.9 A7"]
177
+
178
+ [[artefact]]
179
+ id = "adprov.art.provider_call_ids"
180
+ title = "Provider tool-call ids are absent, empty or repeated (A8)"
181
+ description = "Some providers return no tool-call id (Cohere), an empty string (Gemini) or a repeated id (GLM-4.6). Provider ids are attributes, never keys. The frozen compat builder falls back to ids of the form a_tc_step<n> for them (PRV-08), which the oracle keeps; AgentPROV uses its own occurrence ids."
182
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
183
+ cause = "provider"
184
+ detector = { rule = "adprov.call_id_unique_match@1", class = "D" }
185
+ claims = ["artefact.generic.provider_id_anomaly"]
186
+ recorded_as = { issues = ["adprov.tool_call_id_mismatch"] }
187
+ handling = { class = "CR", rule = "adprov.call_id_unique_match@1" }
188
+ manuscript = true
189
+ refs = ["docs/architecture/D_adapters.md D.10.9 A8", "docs/architecture/D_adapters.md D.15.5", "docs/architecture/B_audit.md PRV-08"]
190
+
191
+ [[artefact]]
192
+ id = "adprov.art.timing_overwritten_by_id"
193
+ title = "Tool timing keyed by a repeated call id"
194
+ description = "When a tool-call id repeats, the capture kept one timing pair per id, so only the last of the turns holds its own timing and the earlier ones are overwritten. Their times are unknown (overwritten)."
195
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
196
+ cause = "upstream_harness"
197
+ detector = { rule = "adprov.timing_keyed_by_call_id@1", class = "I" }
198
+ recorded_as = { issues = ["adprov.tool_timing_overwritten"] }
199
+ handling = { class = "NR", rule = "adprov.timing_keyed_by_call_id@1" }
200
+ manuscript = false
201
+ refs = ["docs/architecture/D_adapters.md D.10.9 A8"]
202
+
203
+ [[artefact]]
204
+ id = "adprov.art.harness_side_effects"
205
+ title = "Harness side effects of the AgentDojo-PROV capture (A9)"
206
+ description = "The capture's compatibility client rewrote the developer role, resampled malformed tool-call replies and retried provider failures. The transcript does not record them per call, and the capture-code version is not recorded, so they are imported as declared instrumentation (class I), not as per-call facts."
207
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
208
+ cause = "capture"
209
+ detector = { rule = "adprov.v1_capture_code_semantics@1", class = "I" }
210
+ handling = { class = "FO", rule = "adprov.v1_capture_code_semantics@1" }
211
+ manuscript = true
212
+ refs = ["docs/architecture/D_adapters.md D.10.9 A9", "docs/architecture/D_adapters.md D.7.3"]
213
+
214
+ [[artefact]]
215
+ id = "adprov.art.model_display_name"
216
+ title = "Title-cased model display name inside the attack payload (A10)"
217
+ description = "The harness synthesised the model name that the attack payload addresses from the model id. It is an attack parameter, declared as instrumentation."
218
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
219
+ cause = "upstream_harness"
220
+ detector = { rule = "adprov.model_display_name@1", class = "I" }
221
+ handling = { class = "FO", rule = "adprov.model_display_name@1" }
222
+ manuscript = true
223
+ refs = ["docs/architecture/D_adapters.md D.10.9 A10"]
224
+
225
+ [[artefact]]
226
+ id = "adprov.art.discarded_attempts_unrecorded"
227
+ title = "Aborted cells silently re-run and omitted (A11)"
228
+ description = "The baseline generator re-ran aborted cells and kept only the successful run, a selection effect. The released transcripts hold no discarded attempts, so the omission cannot be measured from them."
229
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
230
+ cause = "upstream_harness"
231
+ detector = { rule = "adprov.discarded_attempts_in_order@1", class = "D" }
232
+ handling = { class = "NR", rule = "adprov.discarded_attempts_in_order@1" }
233
+ manuscript = true
234
+ refs = ["docs/architecture/D_adapters.md D.10.9 A11", "audit/capture.md section 8 D5"]
235
+
236
+ [[artefact]]
237
+ id = "adprov.art.served_model_unrecorded"
238
+ title = "Served model, routing and reasoning not recorded (A12)"
239
+ description = "The per-call served model and the provider route were lost by aggregation in transcript/v1. They are declared not recorded; the requested model name stays a harness-synthesised label."
240
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
241
+ cause = "capture"
242
+ detector = { rule = "adprov.model_names_registration@1", class = "I" }
243
+ handling = { class = "NR", rule = "adprov.model_names_registration@1" }
244
+ manuscript = true
245
+ refs = ["docs/architecture/D_adapters.md D.10.9 A12", "audit/capture.md section 4.1 defect 3"]
246
+
247
+ [[artefact]]
248
+ id = "adprov.art.null_reply_as_empty"
249
+ title = "A null assistant reply is stored as an empty string"
250
+ description = "Before 2026-10-04 the generator stored a null reply as an empty string, so an empty text is ambiguous (null or empty). The importer states it as an ambiguous unknown and keeps the verbatim value."
251
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
252
+ cause = "upstream_harness"
253
+ detector = { rule = "adprov.release_null_as_empty@1", class = "D" }
254
+ handling = { class = "NR", rule = "adprov.release_null_as_empty@1" }
255
+ manuscript = false
256
+ refs = ["docs/architecture/C_data_model.md C.7.1", "audit/capture.md section 5.3"]
257
+
258
+ [[artefact]]
259
+ id = "adprov.art.benign_security_normalised"
260
+ title = "A released benign security of null is a normalisation of a constant"
261
+ description = "The generator passes security null for a benign cell, normalising AgentDojo's constant benign value. It is a harness default, not an observation, so no outcome claim is made for it."
262
+ scope = { profiles = ["adprov-v1"], parts = ["release"] }
263
+ cause = "upstream_harness"
264
+ detector = { rule = "adprov.benign_security_normalised@1", class = "D" }
265
+ handling = { class = "CR", rule = "adprov.benign_security_normalised@1" }
266
+ manuscript = false
267
+ refs = ["docs/architecture/D_adapters.md D.15.5 benign_security_constant"]
268
+
269
+ [[artefact]]
270
+ id = "adprov.art.additional_user_turn"
271
+ title = "A user turn after the first is attributed by role only"
272
+ description = "Defence elements (tool_filter, repeat_user_prompt) also write user-role turns, and the v1 importer cannot identify them. The additional turn is attributed to the simulated user by role, flagged as unattributed."
273
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
274
+ cause = "upstream_harness"
275
+ detector = { rule = "adprov.additional_user_turn_unattributed@1", class = "I" }
276
+ recorded_as = { issues = ["unattributed_additional_user_message"] }
277
+ handling = { class = "FO", rule = "adprov.additional_user_turn_unattributed@1" }
278
+ expected = [
279
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 1527, basis = "converted traces with more than one user turn (EF F.2 e_user_query)", unit = "traces", status = "unverified" },
280
+ ]
281
+ manuscript = false
282
+ refs = ["docs/architecture/EF_provenance.md F.2"]
283
+
284
+ [[artefact]]
285
+ id = "adprov.art.payload_not_reaching_agent"
286
+ title = "The injected payload never appears in what the agent read"
287
+ description = "Attacked runs in which no tool result carries the payload (no present injection marker in the SEM). AgentDojo places its injections in environment data, so a payload reaches the agent only through the output of a tool that reads that data. In the released tree no defence ran: the agent called no tool at all (variant no_marker: no tool result to compare), or none of its calls returned the injected data or they failed (variant absent: every comparison found nothing). No message of any role in these runs holds the payload. In the converted tree a defence that redacts tool output or filters tools also produces it. The run cannot show an attack effect; the finding is only as good as the SEM marker."
288
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
289
+ cause = "benchmark"
290
+ detector = { rule = "artefact.generic.payload_not_reaching_agent", class = "D" }
291
+ recorded_as = { sem = ["injection_marker"] }
292
+ handling = { class = "FO" }
293
+ expected = [
294
+ { snapshot = "adprov-v1/release@579a908", count = 3034, basis = "safety-net run (read-only, 2026-10-29) over the sealed corpus adprov-v1-release-rg2, 3,033 executions (absent 1,667, no_marker 1,366; none an attack success), and its withheld sibling, 1 (absent); 3,034 of 17,082 attacked, as phase-10 examination 2 section 10.1 row 6", unit = "executions", status = "unverified" },
295
+ ]
296
+ manuscript = true
297
+ refs = ["docs/architecture/D_adapters.md D.15.3", "docs/reports/analysis/phase10-examination-2.md section 10.1 row 6", "docs/reports/precheck/adprov-v1.md H16"]
298
+
299
+ # ======================================================================================== converted tree (compat oracle)
300
+
301
+ [[artefact]]
302
+ id = "adprov.art.timing_stub"
303
+ title = "Tool turns carry the baseline converter's timing stub"
304
+ description = "The converter wrote start and end \"0\" for every tool turn. The stub is kept verbatim in t.raw and the start and end are unknown (not recorded). Times are never derived from durations or commit dates."
305
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
306
+ cause = "baseline_converter"
307
+ detector = { rule = "adprov.timing_stub_is_unknown@1", class = "D" }
308
+ handling = { class = "CR", rule = "adprov.timing_stub_is_unknown@1" }
309
+ expected = [
310
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 68620, basis = "tool turns with start and end \"0\" (BASELINE section 5.1; D.15.5 timing_stub)", unit = "tool_turns", status = "unverified" },
311
+ ]
312
+ manuscript = true
313
+ refs = ["docs/architecture/D_adapters.md D.15.5", "audit/legacy_replay.md section 3.6 D4"]
314
+
315
+ [[artefact]]
316
+ id = "adprov.art.dos_polarity"
317
+ title = "Denial-of-service runs score security as the negation of utility"
318
+ description = "For the five DoS attack families the runner sets security = not utility. The judgement is a runner rule derived from the utility judgement, not a checker result, with the polarity explicit in the semantics layer."
319
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
320
+ cause = "upstream_harness"
321
+ detector = { rule = "agentdojo.dos_security_rule@1", class = "D" }
322
+ handling = { class = "CR", rule = "agentdojo.dos_security_rule@1" }
323
+ expected = [
324
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 485, basis = "DoS runs where security = not utility (D.15.5 dos_polarity)", unit = "runs", status = "unverified" },
325
+ ]
326
+ manuscript = true
327
+ refs = ["docs/architecture/D_adapters.md D.15.5"]
328
+
329
+ [[artefact]]
330
+ id = "adprov.art.benign_security_constant"
331
+ title = "Benign runs carry the constant security true"
332
+ description = "AgentDojo writes security true for every benign run. It is a harness default, not an observation, so no outcome claim is made for it."
333
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
334
+ cause = "upstream_harness"
335
+ detector = { rule = "agentdojo.benign_security_constant@1", class = "D" }
336
+ handling = { class = "CR", rule = "agentdojo.benign_security_constant@1" }
337
+ expected = [
338
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 2024, basis = "benign logs, all security true (D.15.5 benign_security_constant)", unit = "logs", status = "unverified" },
339
+ ]
340
+ manuscript = true
341
+ refs = ["docs/architecture/D_adapters.md D.15.5"]
342
+
343
+ [[artefact]]
344
+ id = "adprov.art.run_error_imposed"
345
+ title = "A run error imposes the outcome (False, True)"
346
+ description = "When a run ended in an error the runner wrote utility false and security true. No checker ran, so the judgements carry the harness-default origin and no outcome claim."
347
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
348
+ cause = "upstream_harness"
349
+ detector = { rule = "agentdojo.run_error_imposed_outcome@1", class = "D" }
350
+ recorded_as = { issues = ["outcome_imposed_by_runner"] }
351
+ handling = { class = "CR", rule = "agentdojo.run_error_imposed_outcome@1" }
352
+ expected = [
353
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 106, basis = "run-error logs, all utility false and security true (D.15.5 run_error_imposed)", unit = "logs", status = "unverified" },
354
+ ]
355
+ manuscript = true
356
+ refs = ["docs/architecture/D_adapters.md D.15.5"]
357
+
358
+ [[artefact]]
359
+ id = "adprov.art.injection_task_as_user_task"
360
+ title = "Injection tasks run as user tasks are labelled benign"
361
+ description = "The solvability pre-pass runs an injection task as the user task with no attack. The benign label exists only in the v1 view; the importer maps it to a null attack and never to a task kind."
362
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
363
+ cause = "upstream_harness"
364
+ detector = { rule = "agentdojo.injection_task_as_user_task@1", class = "D" }
365
+ handling = { class = "CR", rule = "agentdojo.injection_task_as_user_task@1" }
366
+ expected = [
367
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 432, basis = "injection-task-as-user-task logs labelled benign (D.15.5)", unit = "logs", status = "unverified" },
368
+ ]
369
+ manuscript = true
370
+ refs = ["docs/architecture/D_adapters.md D.15.5"]
371
+
372
+ [[artefact]]
373
+ id = "adprov.art.no_execution_observed"
374
+ title = "A log with no messages has no observed execution"
375
+ description = "An empty message list yields an outcome-only execution with the outcomes as logged. No empty trajectory is fabricated. The baseline excluded such logs; this tree should hold none."
376
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
377
+ cause = "unknown"
378
+ detector = { rule = "agentdojo.no_execution_observed@1", class = "D" }
379
+ recorded_as = { issues = ["no_execution_observed"] }
380
+ handling = { class = "CR", rule = "agentdojo.no_execution_observed@1" }
381
+ manuscript = false
382
+ refs = ["docs/architecture/D_adapters.md D.15.5 empty_log", "docs/architecture/C_data_model.md C.7.4"]
383
+
384
+ [[artefact]]
385
+ id = "adprov.art.context_taint_used"
386
+ title = "Context membership inferred from message order"
387
+ description = "The baseline builder asserted context-visibility used edges as PROV. The context of each call is inferred from the message prefix (class I), which is false for tool_filter, repeat_user_prompt and PI-detector pipelines, so it belongs in the inference bundle."
388
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
389
+ cause = "baseline_converter"
390
+ detector = { rule = "adprov.context_is_prefix@1", class = "I" }
391
+ handling = { class = "CR", rule = "adprov.context_is_prefix@1" }
392
+ manuscript = true
393
+ refs = ["docs/architecture/D_adapters.md D.15.5", "docs/architecture/C_data_model.md C.3.5"]
394
+
395
+ [[artefact]]
396
+ id = "adprov.art.pi_detector_overwritten"
397
+ title = "Tool output replaced by the prompt-injection detector sentinel"
398
+ description = "The transformers_pi_detector defence replaced tool output with a fixed sentinel before logging. The original text is unknown (overwritten); the sentinel stays as the recorded content."
399
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
400
+ cause = "upstream_harness"
401
+ detector = { rule = "agentdojo.pi_detector_sentinel@1", class = "I" }
402
+ handling = { class = "CR", rule = "agentdojo.pi_detector_sentinel@1" }
403
+ expected = [
404
+ { snapshot = "adprov-v1/converted-legacy@579a908", count = 2154, basis = "entities in 624 graphs (C.7.1 resolved note; D.15.5 context_taint_used)", unit = "entities", status = "unverified" },
405
+ ]
406
+ manuscript = true
407
+ refs = ["docs/architecture/C_data_model.md C.7.1", "docs/architecture/D_adapters.md D.15.5"]
408
+
409
+ [[artefact]]
410
+ id = "adprov.art.upstream_link_unresolved"
411
+ title = "A converted transcript cannot be linked to its upstream log"
412
+ description = "The upstream path is rebuilt from the meta fields the converter copied. When the rebuilt path is unusable the link to the pinned upstream log is unresolved, and the execution is not de-duplicated against the native import."
413
+ scope = { profiles = ["adprov-v1"], parts = ["converted-legacy"] }
414
+ cause = "baseline_converter"
415
+ detector = { rule = "adprov.converted_stem_to_upstream_path@1", class = "D" }
416
+ recorded_as = { issues = ["adprov.upstream_link_unresolved"] }
417
+ handling = { class = "FO", rule = "adprov.converted_stem_to_upstream_path@1" }
418
+ manuscript = false
419
+ refs = ["audit/legacy_replay.md section 3.2"]
420
+
421
+ [[artefact]]
422
+ id = "adprov.art.writer_layout_deviation"
423
+ title = "A transcript deviates from the AgentDojo-PROV writer layout"
424
+ description = "A member order the writer layout does not allow, an unknown member or a content digest that differs from the content. Such files were not written by the pinned writer; the deviation is a seal issue."
425
+ scope = { profiles = ["adprov-v1"], parts = ["release", "converted-legacy"] }
426
+ cause = "capture"
427
+ detector = { rule = "adprov.v1_writer_layout@1", class = "D" }
428
+ recorded_as = { issues = ["adprov.v1_layout_unexpected_order", "adprov.v1_layout_unknown_member", "adprov.content_hash_mismatch"] }
429
+ handling = { class = "FO", rule = "adprov.v1_writer_layout@1" }
430
+ manuscript = false
431
+ refs = ["docs/architecture/J_migration.md J.3.2"]