pi-python-core 0.11.0__tar.gz → 0.12.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 (397) hide show
  1. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/.gitignore +1 -0
  2. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/NOTICE +5 -0
  3. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/PKG-INFO +7 -4
  4. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/README.md +6 -3
  5. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/README.zh-CN.md +6 -3
  6. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/COVERAGE.md +6 -0
  7. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-cases.json +4 -1
  8. pi_python_core-0.12.0/compat/provider-fixtures/followup-anthropic-crossmodel-thinking.json +101 -0
  9. pi_python_core-0.12.0/compat/provider-fixtures/followup-anthropic-error-images.json +126 -0
  10. pi_python_core-0.12.0/compat/provider-fixtures/followup-anthropic-remove-redefine.json +164 -0
  11. pi_python_core-0.12.0/compat/provider-fixtures/followup-blank-tool-output.json +132 -0
  12. pi_python_core-0.12.0/compat/provider-fixtures/followup-completions-mixed-delta.json +158 -0
  13. pi_python_core-0.12.0/compat/provider-fixtures/followup-openai-crossmodel-thinking.json +127 -0
  14. pi_python_core-0.12.0/compat/provider-fixtures/followup-openai-native-effort.json +187 -0
  15. pi_python_core-0.12.0/compat/provider-fixtures/followup-openai-removal-readd.json +213 -0
  16. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/recovery-cases.json +55 -0
  17. pi_python_core-0.12.0/compat/results/interface-audit.json +145 -0
  18. pi_python_core-0.12.0/compat/results/linux-3.11.json +54 -0
  19. pi_python_core-0.12.0/compat/results/linux-3.12.json +54 -0
  20. pi_python_core-0.12.0/compat/results/linux-3.13.json +54 -0
  21. pi_python_core-0.12.0/compat/results/linux-3.14.json +54 -0
  22. pi_python_core-0.12.0/compat/results/partial-json-baseline.json +39 -0
  23. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/plugins.upstream.json +14 -0
  24. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/provider-conformance.json +1959 -175
  25. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/recovery-conformance.upstream.json +56 -1
  26. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/verification.json +53 -30
  27. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/websocket-conformance.json +1 -1
  28. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/runner.py +9 -1
  29. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/API.md +19 -9
  30. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/CODING_AGENTS.md +2 -0
  31. pi_python_core-0.12.0/docs/CORE_AND_RESEARCH.md +62 -0
  32. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/PROVIDERS.md +22 -8
  33. pi_python_core-0.12.0/docs/UPSTREAM_FOLLOWUP.md +79 -0
  34. pi_python_core-0.12.0/docs/UPSTREAM_INTERFACES.md +48 -0
  35. pi_python_core-0.12.0/docs/releases/0.12.0.md +52 -0
  36. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/API.md +19 -9
  37. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/CODING_AGENTS.md +2 -0
  38. pi_python_core-0.12.0/docs/zh/CORE_AND_RESEARCH.md +60 -0
  39. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/PROVIDERS.md +22 -8
  40. pi_python_core-0.12.0/examples/core_and_research.py +53 -0
  41. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/pyproject.toml +1 -1
  42. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/__init__.py +5 -0
  43. pi_python_core-0.12.0/src/pi_python/_version.py +1 -0
  44. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/agent.py +31 -6
  45. pi_python_core-0.12.0/src/pi_python/core.py +538 -0
  46. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/data/models.json +146 -189
  47. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/estimate.py +3 -3
  48. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/events.py +2 -2
  49. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/features.py +4 -0
  50. pi_python_core-0.12.0/src/pi_python/identity.py +101 -0
  51. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/loop.py +39 -1
  52. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/lowlevel.py +27 -13
  53. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/messages.py +8 -2
  54. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/models.py +6 -0
  55. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/plugins/_resources.py +6 -2
  56. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/anthropic.py +85 -59
  57. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/common.py +73 -3
  58. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/completions.py +33 -22
  59. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/oauth.py +18 -8
  60. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/openai.py +102 -24
  61. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/transport.py +78 -17
  62. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/queues.py +2 -0
  63. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/recovery.py +20 -9
  64. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/run.py +16 -0
  65. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/stream.py +32 -2
  66. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/tools.py +10 -3
  67. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/transcript.py +18 -0
  68. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_application_compatibility.py +24 -4
  69. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_cache_sessions.py +17 -15
  70. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_contract_v3.py +6 -1
  71. pi_python_core-0.12.0/tests/test_core_contracts.py +393 -0
  72. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_examples.py +1 -0
  73. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_extended_core.py +1 -1
  74. pi_python_core-0.12.0/tests/test_lowlevel_stream.py +129 -0
  75. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_mcp_delta.py +5 -4
  76. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_mcp_host.py +8 -2
  77. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_messages.py +1 -1
  78. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_models.py +1 -1
  79. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_providers.py +91 -1
  80. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_recovery_helpers.py +1 -1
  81. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_session_changes.py +30 -13
  82. pi_python_core-0.12.0/tests/test_timing_identity.py +380 -0
  83. pi_python_core-0.12.0/tests/test_upstream_followup.py +238 -0
  84. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_websocket_continuation.py +6 -5
  85. pi_python_core-0.11.0/compat/results/linux-3.11.json +0 -54
  86. pi_python_core-0.11.0/compat/results/linux-3.12.json +0 -54
  87. pi_python_core-0.11.0/compat/results/linux-3.13.json +0 -54
  88. pi_python_core-0.11.0/compat/results/linux-3.14.json +0 -54
  89. pi_python_core-0.11.0/src/pi_python/_version.py +0 -1
  90. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/LICENSE +0 -0
  91. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/__init__.py +0 -0
  92. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/baseline.json +0 -0
  93. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/contracts/release-candidate.example.json +0 -0
  94. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/contracts/release-candidate.schema.json +0 -0
  95. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/contracts/upstream-baseline.json +0 -0
  96. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C01-text.json +0 -0
  97. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C02-tool.json +0 -0
  98. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C03-sequential.json +0 -0
  99. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C04-parallel.json +0 -0
  100. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C05-one-sequential.json +0 -0
  101. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C06-one-failure.json +0 -0
  102. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C07-unknown.json +0 -0
  103. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C08-prepare.json +0 -0
  104. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C09-before-error.json +0 -0
  105. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C09-block.json +0 -0
  106. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C09-replace.json +0 -0
  107. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C10-length.json +0 -0
  108. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C11-transform.json +0 -0
  109. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C12-system.json +0 -0
  110. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C13-steering.json +0 -0
  111. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C14-followup-all.json +0 -0
  112. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C14-followup-one.json +0 -0
  113. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C15-prepare.json +0 -0
  114. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C16-continue.json +0 -0
  115. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C16-end.json +0 -0
  116. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C16-mixed.json +0 -0
  117. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C16-terminate.json +0 -0
  118. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C19-abort-stream.json +0 -0
  119. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C19-abort-tools.json +0 -0
  120. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/fixtures/C24-provider-error.json +0 -0
  121. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/notes.txt +0 -0
  122. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/plan.md +0 -0
  123. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/review.md +0 -0
  124. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/sub/nested.md +0 -0
  125. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/summarize.md +0 -0
  126. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/.hidden/SKILL.md +0 -0
  127. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/alpha/SKILL.md +0 -0
  128. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/alpha/references/notes.md +0 -0
  129. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/beta/SKILL.md +0 -0
  130. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/broken/SKILL.md +0 -0
  131. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/delta/SKILL.md +0 -0
  132. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/gamma/SKILL.md +0 -0
  133. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/longdesc/SKILL.md +0 -0
  134. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/loose.md +0 -0
  135. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/nested/group/epsilon/SKILL.md +0 -0
  136. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/noname/SKILL.md +0 -0
  137. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/plain.md +0 -0
  138. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/zeta/SKILL.md +0 -0
  139. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/zeta/sub/eta/SKILL.md +0 -0
  140. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-oauth.json +0 -0
  141. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-cache-long.json +0 -0
  142. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-cache-none.json +0 -0
  143. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-replay.json +0 -0
  144. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-tools-image.json +0 -0
  145. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-text.json +0 -0
  146. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-thinking.json +0 -0
  147. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-tool.json +0 -0
  148. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/codex-request-tools-image.json +0 -0
  149. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/codex-text.json +0 -0
  150. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-compat-strict.json +0 -0
  151. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-deepseek.json +0 -0
  152. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-ant-ling.json +0 -0
  153. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-baseten.json +0 -0
  154. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-string-thinking.json +0 -0
  155. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-together.json +0 -0
  156. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-zai.json +0 -0
  157. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-midconvo-tools.json +0 -0
  158. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-moonshot-usage.json +0 -0
  159. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-openai-off.json +0 -0
  160. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-openrouter.json +0 -0
  161. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-qwen-length.json +0 -0
  162. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-reasoning-content.json +0 -0
  163. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-request-replay.json +0 -0
  164. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-text.json +0 -0
  165. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-tool-stream.json +0 -0
  166. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-incomplete.json +0 -0
  167. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-cache-long.json +0 -0
  168. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-cache-none.json +0 -0
  169. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-reasoning.json +0 -0
  170. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-replay.json +0 -0
  171. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-tools-image.json +0 -0
  172. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-text.json +0 -0
  173. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-thinking-backfill.json +0 -0
  174. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-thinking.json +0 -0
  175. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-tool.json +0 -0
  176. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/proxy-text.json +0 -0
  177. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/proxy-thinking-tool.json +0 -0
  178. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-collapse-budget.json +0 -0
  179. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-native-tools.json +0 -0
  180. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-oauth-effort.json +0 -0
  181. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-redefinition.json +0 -0
  182. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-server-fallback.json +0 -0
  183. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-thinking-off.json +0 -0
  184. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-codex-tool-search.json +0 -0
  185. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-additional-tools.json +0 -0
  186. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-collapse.json +0 -0
  187. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-explicit-cache-long.json +0 -0
  188. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-explicit-cache-none.json +0 -0
  189. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-removal.json +0 -0
  190. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/release.py +0 -0
  191. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C01-text.python.json +0 -0
  192. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C01-text.upstream.json +0 -0
  193. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C02-tool.python.json +0 -0
  194. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C02-tool.upstream.json +0 -0
  195. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C03-sequential.python.json +0 -0
  196. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C03-sequential.upstream.json +0 -0
  197. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C04-parallel.python.json +0 -0
  198. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C04-parallel.upstream.json +0 -0
  199. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C05-one-sequential.python.json +0 -0
  200. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C05-one-sequential.upstream.json +0 -0
  201. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C06-one-failure.python.json +0 -0
  202. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C06-one-failure.upstream.json +0 -0
  203. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C07-unknown.python.json +0 -0
  204. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C07-unknown.upstream.json +0 -0
  205. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C08-prepare.python.json +0 -0
  206. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C08-prepare.upstream.json +0 -0
  207. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-before-error.python.json +0 -0
  208. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-before-error.upstream.json +0 -0
  209. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-block.python.json +0 -0
  210. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-block.upstream.json +0 -0
  211. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-replace.python.json +0 -0
  212. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C09-replace.upstream.json +0 -0
  213. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C10-length.python.json +0 -0
  214. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C10-length.upstream.json +0 -0
  215. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C11-transform.python.json +0 -0
  216. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C11-transform.upstream.json +0 -0
  217. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C12-system.python.json +0 -0
  218. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C12-system.upstream.json +0 -0
  219. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C13-steering.python.json +0 -0
  220. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C13-steering.upstream.json +0 -0
  221. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C14-followup-all.python.json +0 -0
  222. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C14-followup-all.upstream.json +0 -0
  223. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C14-followup-one.python.json +0 -0
  224. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C14-followup-one.upstream.json +0 -0
  225. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C15-prepare.python.json +0 -0
  226. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C15-prepare.upstream.json +0 -0
  227. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-continue.python.json +0 -0
  228. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-continue.upstream.json +0 -0
  229. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-end.python.json +0 -0
  230. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-end.upstream.json +0 -0
  231. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-mixed.python.json +0 -0
  232. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-mixed.upstream.json +0 -0
  233. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-terminate.python.json +0 -0
  234. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C16-terminate.upstream.json +0 -0
  235. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C19-abort-stream.python.json +0 -0
  236. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C19-abort-stream.upstream.json +0 -0
  237. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C19-abort-tools.python.json +0 -0
  238. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C19-abort-tools.upstream.json +0 -0
  239. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C24-provider-error.python.json +0 -0
  240. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/C24-provider-error.upstream.json +0 -0
  241. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/artifacts.json +0 -0
  242. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/benchmark.json +0 -0
  243. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/bootstrap.json +0 -0
  244. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/candidate-live-noop.json +0 -0
  245. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/conformance.json +0 -0
  246. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/linux-install-hash-repair.json +0 -0
  247. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-0.5-regression.json +0 -0
  248. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-0.5-session-claude.json +0 -0
  249. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-0.5-session-codex.json +0 -0
  250. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-claude-reasoning-replay.json +0 -0
  251. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-final-matrix.json +0 -0
  252. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-initial.json +0 -0
  253. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-loop-initial.json +0 -0
  254. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-providers.json +0 -0
  255. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-reasoning-replay.json +0 -0
  256. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-refresh.json +0 -0
  257. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-regression-0.4-deepseek.json +0 -0
  258. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-regression-0.4-first-run.json +0 -0
  259. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-regression-0.4.json +0 -0
  260. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-session-claude.json +0 -0
  261. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-session-codex.json +0 -0
  262. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-websocket-cached-recheck.json +0 -0
  263. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-websocket-cached.json +0 -0
  264. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/live-websocket-final.json +0 -0
  265. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/runtime-dependencies.json +0 -0
  266. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/source-verification.json +0 -0
  267. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.1.0/artifacts.json +0 -0
  268. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.11.json +0 -0
  269. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.12.json +0 -0
  270. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.13.json +0 -0
  271. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.1.0/verification.json +0 -0
  272. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.2.0/artifacts.json +0 -0
  273. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.11.json +0 -0
  274. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.12.json +0 -0
  275. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.13.json +0 -0
  276. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.2.0/verification.json +0 -0
  277. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/against-0.4-fixtures.json +0 -0
  278. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/artifacts.json +0 -0
  279. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.11.json +0 -0
  280. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.12.json +0 -0
  281. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.13.json +0 -0
  282. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/provider-conformance.json +0 -0
  283. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.3.0/verification.json +0 -0
  284. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.4.0/artifacts.json +0 -0
  285. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.11.json +0 -0
  286. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.12.json +0 -0
  287. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.13.json +0 -0
  288. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.4.0/verification.json +0 -0
  289. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.5.0/artifacts.json +0 -0
  290. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.11.json +0 -0
  291. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.12.json +0 -0
  292. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.13.json +0 -0
  293. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.5.0/verification.json +0 -0
  294. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.6.0/artifacts.json +0 -0
  295. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.11.json +0 -0
  296. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.12.json +0 -0
  297. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.13.json +0 -0
  298. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.6.0/verification.json +0 -0
  299. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/artifacts.json +0 -0
  300. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.11.json +0 -0
  301. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.12.json +0 -0
  302. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.13.json +0 -0
  303. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.14.json +0 -0
  304. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.7.0/verification.json +0 -0
  305. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/artifacts.json +0 -0
  306. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.11.json +0 -0
  307. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.12.json +0 -0
  308. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.13.json +0 -0
  309. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.14.json +0 -0
  310. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/results/v0.8.0/verification.json +0 -0
  311. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/websocket-fixtures/codex-continuation-lost-state.json +0 -0
  312. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/compat/websocket-fixtures/codex-continuation-tool-loop.json +0 -0
  313. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/APPLICATION_TOOLS_IMPLEMENTATION.md +0 -0
  314. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/CONCEPTS.md +0 -0
  315. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/IMPLEMENTATION.md +0 -0
  316. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/MCP_INTERACTION.md +0 -0
  317. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/PLUGINS.md +0 -0
  318. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/PLUGIN_DEVELOPMENT.md +0 -0
  319. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.3.0.md +0 -0
  320. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.4.0.md +0 -0
  321. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.5.0.md +0 -0
  322. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.6.0.md +0 -0
  323. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.7.0.md +0 -0
  324. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.8.0.md +0 -0
  325. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/releases/0.10.2.md +0 -0
  326. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/releases/0.11.0.md +0 -0
  327. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/CONCEPTS.md +0 -0
  328. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/MCP_HOST_VERIFICATION.md +0 -0
  329. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/MCP_INTERACTION.md +0 -0
  330. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/PLUGINS.md +0 -0
  331. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/docs/zh/PLUGIN_DEVELOPMENT.md +0 -0
  332. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/capability_composition.py +0 -0
  333. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/in_memory.py +0 -0
  334. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/local_model.py +0 -0
  335. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/mcp_interactive.py +0 -0
  336. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/mcp_interactive_server.py +0 -0
  337. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/mcp_tools.py +0 -0
  338. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/memory_demo.py +0 -0
  339. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugin_demo.py +0 -0
  340. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/lab_tools/agents/reviewer.md +0 -0
  341. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/lab_tools/ops.py +0 -0
  342. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/lab_tools/plugin.py +0 -0
  343. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/lab_tools/prompts/dedup.md +0 -0
  344. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/lab_tools/skills/dedup-window/SKILL.md +0 -0
  345. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/plugins/memory/plugin.py +0 -0
  346. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/provider_chat.py +0 -0
  347. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/quickstart.py +0 -0
  348. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/recovery.py +0 -0
  349. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/save_restore.py +0 -0
  350. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/examples/subagent.py +0 -0
  351. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/_mcp_host.py +0 -0
  352. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/_mcp_interaction.py +0 -0
  353. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/_mcp_process.py +0 -0
  354. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/_mcp_sampling.py +0 -0
  355. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/cancellation.py +0 -0
  356. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/errors.py +0 -0
  357. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/function_tools.py +0 -0
  358. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/hooks.py +0 -0
  359. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/limits.py +0 -0
  360. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/mcp.py +0 -0
  361. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/plugins/__init__.py +0 -0
  362. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/plugins/_compose.py +0 -0
  363. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/plugins/_frontmatter.py +0 -0
  364. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/plugins/_subagents.py +0 -0
  365. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/provider.py +0 -0
  366. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/providers/__init__.py +0 -0
  367. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/proxy.py +0 -0
  368. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/py.typed +0 -0
  369. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/sync.py +0 -0
  370. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/tasks.py +0 -0
  371. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/src/pi_python/testing.py +0 -0
  372. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/servers/mcp_interactive_server.py +0 -0
  373. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/servers/mcp_process_server.py +0 -0
  374. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/servers/mcp_server.py +0 -0
  375. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_application_tools.py +0 -0
  376. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_capability_composition.py +0 -0
  377. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_completions.py +0 -0
  378. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_conformance.py +0 -0
  379. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_control.py +0 -0
  380. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_features.py +0 -0
  381. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_function_tools.py +0 -0
  382. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_lifecycle_contracts.py +0 -0
  383. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_loop.py +0 -0
  384. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_mcp.py +0 -0
  385. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_mcp_interaction.py +0 -0
  386. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_mcp_process.py +0 -0
  387. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_nested_agents.py +0 -0
  388. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_oauth.py +0 -0
  389. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_plugin_conformance.py +0 -0
  390. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_plugins.py +0 -0
  391. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_recovery.py +0 -0
  392. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_recovery_conformance.py +0 -0
  393. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_release.py +0 -0
  394. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_sync.py +0 -0
  395. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_tasks.py +0 -0
  396. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_tools.py +0 -0
  397. {pi_python_core-0.11.0 → pi_python_core-0.12.0}/tests/test_typeddict_annotations.py +0 -0
@@ -8,6 +8,7 @@ __pycache__/
8
8
  build/
9
9
  dist/
10
10
  reference/pi/
11
+ reference/pi-followup/
11
12
  reference/node_modules/
12
13
  .wheelhouse/
13
14
  .pipilot/
@@ -6,3 +6,8 @@ The complete upstream source is fetched only for development under reference/pi.
6
6
  Provider request conversion (Claude Messages, OpenAI and Codex Responses), the cached
7
7
  WebSocket continuation, transcript replay helpers and the context estimate/shortHash in
8
8
  src/pi_python/estimate.py are adapted from packages/ai of the same commit.
9
+
10
+ Selected provider, identity, timing, template and estimate behavior follows Pi v1.4.0:
11
+ https://github.com/earendil-works/pi/tree/4a080252f06caf63a525d7873c5d94d3c23887e0
12
+ Selected later fixes and exact source hashes are documented in docs/UPSTREAM_FOLLOWUP.md
13
+ and reference/followup/. The original core-loop reference remains unchanged.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pi-python-core
3
- Version: 0.11.0
3
+ Version: 0.12.0
4
4
  Summary: An embeddable asyncio agent core with opt-in Claude and OpenAI providers
5
5
  License-Expression: MIT
6
6
  License-File: LICENSE
@@ -36,13 +36,16 @@ Description-Content-Type: text/markdown
36
36
 
37
37
  **English** | [中文](README.zh-CN.md)
38
38
 
39
- An embeddable Python agent core, ported from [Pi](https://github.com/earendil-works/pi) (pinned to `v1.0.0`). It does one job: send the conversation to a model, run the tools the model asks for, hand the results back, and repeat until the model answers. Tools are plain Python functions; the model can be Claude, GPT, DeepSeek, or an open model running on your own machine or cluster.
39
+ An embeddable Python agent core, ported from [Pi](https://github.com/earendil-works/pi) (core baseline `v1.0.0`, selected provider/plugin updates through `v1.4.0`). It does one job: send the conversation to a model, run the tools the model asks for, hand the results back, and repeat until the model answers. Tools are plain Python functions; the model can be Claude, GPT, DeepSeek, or an open model running on your own machine or cluster.
40
40
 
41
- `pi-agent-core` on PyPI is a separate project that ports an older version from pi-mono (early 2026). This library follows the behavior of Pi v1.0.0, compared case by case with the upstream code's actual output, and ships its own connectors for Claude, OpenAI, DeepSeek and local models, with no model SDK required.
41
+ `pi-agent-core` on PyPI is a separate project that ports an older version from pi-mono (early 2026). This library compares its core loop with Pi v1.0.0 and selected provider/plugin behavior with v1.4.0, compared case by case with the upstream code's actual output, and ships its own connectors for Claude, OpenAI, DeepSeek and local models, with no model SDK required.
42
42
 
43
43
  **Using a coding agent?** Start with the [library integration guide](docs/CODING_AGENTS.md).
44
+ For research applications, keep using `pi_python.Agent` and `@tool`. The same package now provides `pi_python.core` for Pi-shaped hooks, events and low-level contracts; both share one engine. See [choosing an entry point and migrating](docs/CORE_AND_RESEARCH.md).
44
45
  To build an extension, follow the [plugin development workflow and complete example](docs/PLUGIN_DEVELOPMENT.md).
45
46
 
47
+ **Upgrading to 0.12.0?** Read the [release and migration notes](docs/releases/0.12.0.md): default timing fields, history schema versions and shared provider settings change. Existing research applications can keep the root `Agent` API. Exact upstream sources are listed in the [followup notes](docs/UPSTREAM_FOLLOWUP.md).
48
+
46
49
  ## Install
47
50
 
48
51
  Python 3.11–3.14 (including free-threaded 3.14t) and PyPy 3.11. No Node.js or model SDK needed.
@@ -109,7 +112,7 @@ Apart from `provider_chat`, which needs real credentials, every example runs off
109
112
 
110
113
  ## Relationship to Pi
111
114
 
112
- The run loop, event order, hooks, queues, and the handling of errors and cancellation all match Pi, and this is checked differentially: the same inputs go to the pinned upstream code and to this library, and the model requests, tool calls, events and final transcript are compared item by item. All cases currently agree: 25 for the core loop, 50 for model connectors, 2 for multi-turn WebSocket, and 44 error-classification samples. The plugin rules for skills, prompt templates and frontmatter are compared the same way against Pi's coding-agent code.
115
+ The covered run-loop, event-order, hook, queue, error and cancellation cases are checked differentially: the same inputs go to the pinned upstream code and to this library, and the model requests, tool calls, events and final transcript are compared item by item. All cases currently agree: 25 for the core loop, 58 for model connectors, 2 for multi-turn WebSocket, and 55 error-classification samples. The plugin rules for skills, prompt templates and frontmatter are compared the same way against Pi's coding-agent code.
113
116
 
114
117
  A few differences are deliberate, such as strict tool-argument validation without type coercion, and returning copies of state to callers. Others are additions for Python users, such as `@tool`, blocking calls, and calling `continue_run()` directly after a failure. Each one is recorded in the [coverage map](compat/COVERAGE.md) (Chinese). Features Pi keeps in its application layer (terminal UI, session file format, context compaction) are not in this core; compaction can be built with hooks, and an example shows the full approach. The Agent also supplies cache-only session IDs for Codex, a responsibility upstream assigns to its coding-agent layer; see [cache sessions and the opt-out](docs/PROVIDERS.md#automatic-codex-cache-sessions). Plugins are another piece taken from that layer: an optional module that reads Pi's package format and builds an ordinary Agent from it. This project uses its own version numbers and is not an official Pi release.
115
118
 
@@ -2,13 +2,16 @@
2
2
 
3
3
  **English** | [中文](README.zh-CN.md)
4
4
 
5
- An embeddable Python agent core, ported from [Pi](https://github.com/earendil-works/pi) (pinned to `v1.0.0`). It does one job: send the conversation to a model, run the tools the model asks for, hand the results back, and repeat until the model answers. Tools are plain Python functions; the model can be Claude, GPT, DeepSeek, or an open model running on your own machine or cluster.
5
+ An embeddable Python agent core, ported from [Pi](https://github.com/earendil-works/pi) (core baseline `v1.0.0`, selected provider/plugin updates through `v1.4.0`). It does one job: send the conversation to a model, run the tools the model asks for, hand the results back, and repeat until the model answers. Tools are plain Python functions; the model can be Claude, GPT, DeepSeek, or an open model running on your own machine or cluster.
6
6
 
7
- `pi-agent-core` on PyPI is a separate project that ports an older version from pi-mono (early 2026). This library follows the behavior of Pi v1.0.0, compared case by case with the upstream code's actual output, and ships its own connectors for Claude, OpenAI, DeepSeek and local models, with no model SDK required.
7
+ `pi-agent-core` on PyPI is a separate project that ports an older version from pi-mono (early 2026). This library compares its core loop with Pi v1.0.0 and selected provider/plugin behavior with v1.4.0, compared case by case with the upstream code's actual output, and ships its own connectors for Claude, OpenAI, DeepSeek and local models, with no model SDK required.
8
8
 
9
9
  **Using a coding agent?** Start with the [library integration guide](docs/CODING_AGENTS.md).
10
+ For research applications, keep using `pi_python.Agent` and `@tool`. The same package now provides `pi_python.core` for Pi-shaped hooks, events and low-level contracts; both share one engine. See [choosing an entry point and migrating](docs/CORE_AND_RESEARCH.md).
10
11
  To build an extension, follow the [plugin development workflow and complete example](docs/PLUGIN_DEVELOPMENT.md).
11
12
 
13
+ **Upgrading to 0.12.0?** Read the [release and migration notes](docs/releases/0.12.0.md): default timing fields, history schema versions and shared provider settings change. Existing research applications can keep the root `Agent` API. Exact upstream sources are listed in the [followup notes](docs/UPSTREAM_FOLLOWUP.md).
14
+
12
15
  ## Install
13
16
 
14
17
  Python 3.11–3.14 (including free-threaded 3.14t) and PyPy 3.11. No Node.js or model SDK needed.
@@ -75,7 +78,7 @@ Apart from `provider_chat`, which needs real credentials, every example runs off
75
78
 
76
79
  ## Relationship to Pi
77
80
 
78
- The run loop, event order, hooks, queues, and the handling of errors and cancellation all match Pi, and this is checked differentially: the same inputs go to the pinned upstream code and to this library, and the model requests, tool calls, events and final transcript are compared item by item. All cases currently agree: 25 for the core loop, 50 for model connectors, 2 for multi-turn WebSocket, and 44 error-classification samples. The plugin rules for skills, prompt templates and frontmatter are compared the same way against Pi's coding-agent code.
81
+ The covered run-loop, event-order, hook, queue, error and cancellation cases are checked differentially: the same inputs go to the pinned upstream code and to this library, and the model requests, tool calls, events and final transcript are compared item by item. All cases currently agree: 25 for the core loop, 58 for model connectors, 2 for multi-turn WebSocket, and 55 error-classification samples. The plugin rules for skills, prompt templates and frontmatter are compared the same way against Pi's coding-agent code.
79
82
 
80
83
  A few differences are deliberate, such as strict tool-argument validation without type coercion, and returning copies of state to callers. Others are additions for Python users, such as `@tool`, blocking calls, and calling `continue_run()` directly after a failure. Each one is recorded in the [coverage map](compat/COVERAGE.md) (Chinese). Features Pi keeps in its application layer (terminal UI, session file format, context compaction) are not in this core; compaction can be built with hooks, and an example shows the full approach. The Agent also supplies cache-only session IDs for Codex, a responsibility upstream assigns to its coding-agent layer; see [cache sessions and the opt-out](docs/PROVIDERS.md#automatic-codex-cache-sessions). Plugins are another piece taken from that layer: an optional module that reads Pi's package format and builds an ordinary Agent from it. This project uses its own version numbers and is not an official Pi release.
81
84
 
@@ -2,13 +2,16 @@
2
2
 
3
3
  [English](README.md) | **中文**
4
4
 
5
- 一个可嵌入的 Python agent 核心,移植自 [Pi](https://github.com/earendil-works/pi)(固定参照 `v1.0.0`)。它负责一件事:把对话发给模型,执行模型要求的工具,把结果交回模型,直到得到回答。工具就是普通的 Python 函数;模型可以是 Claude、GPT、DeepSeek,也可以是本机或集群上的开源模型。
5
+ 一个可嵌入的 Python agent 核心,移植自 [Pi](https://github.com/earendil-works/pi)(核心循环基线 `v1.0.0`,选择性跟进至 `v1.4.0` 的模型接入与插件行为)。它负责一件事:把对话发给模型,执行模型要求的工具,把结果交回模型,直到得到回答。工具就是普通的 Python 函数;模型可以是 Claude、GPT、DeepSeek,也可以是本机或集群上的开源模型。
6
6
 
7
- PyPI 上的 `pi-agent-core` 是另一个独立项目,移植的是 2026 年初 pi-mono 中的旧版本。本库对照 Pi v1.0.0 的行为,与上游的实际运行结果逐组比较;并自带 Claude、OpenAI、DeepSeek 和本地模型的接入,不需要安装任何模型 SDK。
7
+ PyPI 上的 `pi-agent-core` 是另一个独立项目,移植的是 2026 年初 pi-mono 中的旧版本。本库的核心循环对照 Pi v1.0.0,模型接入与插件规则选择性对照 v1.4.0,与上游的实际运行结果逐组比较;并自带 Claude、OpenAI、DeepSeek 和本地模型的接入,不需要安装任何模型 SDK。
8
8
 
9
9
  **使用 coding agent 开发?** 先读 [library 接入指南](docs/zh/CODING_AGENTS.md)。
10
+ 日常研究继续使用 `pi_python.Agent` 和 `@tool`。同一个包内新增 `pi_python.core`,用于跟随官方的钩子、事件及低层合同;两者共用引擎。见[入口选择与迁移](docs/zh/CORE_AND_RESEARCH.md)。
10
11
  需要扩展能力时,按 [插件开发流程与完整示例](docs/zh/PLUGIN_DEVELOPMENT.md) 实现、打包和验证。
11
12
 
13
+ **升级到 0.12.0 前**,请阅读[发布与迁移说明](docs/releases/0.12.0.md):默认耗时字段、历史 schema 和共用 Provider 配置有变化。现有研究应用可以继续使用原来的 `Agent` 入口。精确上游参照见[本轮跟进说明](docs/UPSTREAM_FOLLOWUP.md)。
14
+
12
15
  ## 安装
13
16
 
14
17
  支持 Python 3.11–3.14(包括无 GIL 的 3.14t)和 PyPy 3.11,不需要 Node 或任何模型 SDK。
@@ -75,7 +78,7 @@ agent = Agent(provider=llm, model=llm.model("qwen3:8b", context_window=40960), t
75
78
 
76
79
  ## 与 Pi 的关系
77
80
 
78
- 执行循环、事件顺序、钩子、队列、出错与取消的处理都与 Pi 一致,并用差分验证:同一组输入分别交给固定版本的上游代码和本库运行,逐项比较模型请求、工具调用、事件和最终记录。目前核心循环 25 组、模型接入 50 组、WebSocket 多轮 2 组、出错判断 44 条样例全部一致。插件里技能、提示模板和文件头元数据的规则,也用同样的方法和 Pi 的 coding-agent 代码对照。
81
+ 通过差分验证覆盖执行循环、事件顺序、钩子、队列、出错与取消的处理:同一组输入分别交给固定版本的上游代码和本库运行,逐项比较模型请求、工具调用、事件和最终记录。目前核心循环 25 组、模型接入 58 组、WebSocket 多轮 2 组、出错判断 55 条样例全部一致。插件里技能、提示模板和文件头元数据的规则,也用同样的方法和 Pi 的 coding-agent 代码对照。
79
82
 
80
83
  有几处是有意的差异,例如工具参数严格校验、不自动转换类型,返回给调用者的状态是副本;另一些是为 Python 用户加的,例如 `@tool`、同步调用、失败后直接 `continue_run()`。逐项记录见[验收映射](compat/COVERAGE.md)。Pi 放在应用层的功能(终端界面、会话文件格式、上下文压缩)不在本库核心里;压缩可以用钩子实现,示例里有完整做法。Agent 还为 Codex 自动提供缓存专用会话标识,补齐上游 coding-agent 层承担的职责;见[缓存会话与关闭方式](docs/zh/PROVIDERS.md#codex-自动缓存会话)。插件也是从应用层取来的功能:一个可选模块,读取 Pi 的 package 格式,再据此构造普通的 Agent。本项目使用自己的版本号,并非 Pi 官方发行版。
81
84
 
@@ -2,6 +2,10 @@
2
2
 
3
3
  首期测试证明的是本文列出的文本和工具行为,不是完整 Pi 或模型智能。C01–C29 是设计中的用例组,不是 29 个单独测试。具体测试总数与命令见 [验证记录](results/verification.json),逐 fixture 结果见 [差分记录](results/conformance.json)。
4
4
 
5
+ 2026-10-28 补充:[公开接口审查](../docs/UPSTREAM_INTERFACES.md) 已发现事件载荷、钩子、请求配置和低层入口的差异。现有 core 差分会归一化并省略部分字段,不能用其通过证明接口完全一致。七项新增定向探针记录在 [interface-audit.json](results/interface-audit.json),这是差异报告,不是验收通过报告。
6
+
7
+ 后续获批实施了 `pi_python.core` 合同入口,共用原有引擎;研究入口继续提供便利能力和迁移适配。接口探针现在要求 core 观测与固定上游一致,单独记录研究入口差异;完整字段和请求行为另有 `tests/test_core_contracts.py` 回归。选择性对齐不等于消除了下文所有有意差异。新增入口、共享配置优先级及迁移要求见 [双入口指南](../docs/zh/CORE_AND_RESEARCH.md)。
8
+
5
9
  | 用例组 | Python 行为证据 | 上游证据 / 分类 |
6
10
  |---|---|---|
7
11
  | C01 文本与增量 | test_C01_stream_and_end | C01-text,mapped;增量一致性另作 D7 合同 |
@@ -43,6 +47,8 @@
43
47
 
44
48
  兼容性修订:按用户要求,工具事件的 `origin/source` 改为显式 `Agent(include_tool_origin=True)` 才输出,默认不新增键;两种调用入口都遵守此选项。工具上下文和执行结果通过只读属性提供来源,不改变原有 dataclass 字段及 `asdict` 输出。应用批次历史仍保存来源。`tests/test_application_compatibility.py` 对照 v0.10.1 的字段集合,检查旧解析器、整数轮次及自定义消息转换器;新接口接入时可能的订阅失败和消息被过滤也有明确断言。这是对设计草案中“所有工具事件都携带来源”的兼容性调整,不是将缺失来源默认为已记录。
45
49
 
50
+ 上述“默认不新增键”和 `asdict` 保持不变只描述当时的来源字段调整。2026-10-28 未发布跟进已按用户批准默认增加耗时字段,写出消息 schema 4 / 事件 schema 2,不能继续把此段解释为完整结构不变的保证;参见 [迁移说明](../docs/UPSTREAM_FOLLOWUP.md)。
51
+
46
52
  本次沿用现行版本的默认无预算上限、已知取消与显式未知结果的区分,以及可选扩展能力,不把它们按早期草案回退。跨 run 预算、领域效果、科研判断内化和新的包加载器不在本次实现范围内。上述旧验证文件记录的是各自运行时的版本,不自动成为 D9 的验证证据。
47
53
 
48
54
  ## D10:Agent 管理 Codex 缓存会话标识
@@ -273,7 +273,10 @@
273
273
  "tab\tsep\nnewline",
274
274
  "a \"\" b",
275
275
  "日本語 'c d'",
276
- "--flag=\"x y\""
276
+ "--flag=\"x y\"",
277
+ "\"\" second",
278
+ "'' second",
279
+ "a \"\" c"
277
280
  ],
278
281
  "expand": [
279
282
  {
@@ -0,0 +1,101 @@
1
+ {
2
+ "provider": "anthropic",
3
+ "entry": "simple",
4
+ "events": [
5
+ {
6
+ "type": "message_start",
7
+ "message": {
8
+ "id": "msg_x",
9
+ "type": "message",
10
+ "role": "assistant",
11
+ "model": "test-model",
12
+ "content": [],
13
+ "usage": {
14
+ "input_tokens": 12,
15
+ "output_tokens": 1
16
+ },
17
+ "stop_reason": null
18
+ }
19
+ },
20
+ {
21
+ "type": "content_block_start",
22
+ "index": 0,
23
+ "content_block": {
24
+ "type": "text",
25
+ "text": ""
26
+ }
27
+ },
28
+ {
29
+ "type": "content_block_delta",
30
+ "index": 0,
31
+ "delta": {
32
+ "type": "text_delta",
33
+ "text": "你好"
34
+ }
35
+ },
36
+ {
37
+ "type": "content_block_stop",
38
+ "index": 0
39
+ },
40
+ {
41
+ "type": "message_delta",
42
+ "delta": {
43
+ "stop_reason": "end_turn",
44
+ "stop_sequence": null
45
+ },
46
+ "usage": {
47
+ "output_tokens": 8
48
+ }
49
+ },
50
+ {
51
+ "type": "message_stop"
52
+ }
53
+ ],
54
+ "context": {
55
+ "messages": [
56
+ {
57
+ "role": "user",
58
+ "content": "one",
59
+ "timestamp": 1
60
+ },
61
+ {
62
+ "role": "assistant",
63
+ "content": [
64
+ {
65
+ "type": "thinking",
66
+ "thinking": "foreign reasoning",
67
+ "thinkingSignature": "foreign"
68
+ },
69
+ {
70
+ "type": "text",
71
+ "text": "visible answer"
72
+ }
73
+ ],
74
+ "provider": "foreign",
75
+ "api": "foreign",
76
+ "model": "foreign",
77
+ "stopReason": "stop",
78
+ "timestamp": 2,
79
+ "usage": {
80
+ "input": 0,
81
+ "output": 0,
82
+ "cacheRead": 0,
83
+ "cacheWrite": 0,
84
+ "totalTokens": 0,
85
+ "cost": {
86
+ "input": 0,
87
+ "output": 0,
88
+ "cacheRead": 0,
89
+ "cacheWrite": 0,
90
+ "total": 0
91
+ }
92
+ }
93
+ },
94
+ {
95
+ "role": "user",
96
+ "content": "two",
97
+ "timestamp": 1
98
+ }
99
+ ]
100
+ }
101
+ }
@@ -0,0 +1,126 @@
1
+ {
2
+ "provider": "anthropic",
3
+ "entry": "simple",
4
+ "events": [
5
+ {
6
+ "type": "message_start",
7
+ "message": {
8
+ "id": "msg_x",
9
+ "type": "message",
10
+ "role": "assistant",
11
+ "model": "test-model",
12
+ "content": [],
13
+ "usage": {
14
+ "input_tokens": 12,
15
+ "output_tokens": 1
16
+ },
17
+ "stop_reason": null
18
+ }
19
+ },
20
+ {
21
+ "type": "content_block_start",
22
+ "index": 0,
23
+ "content_block": {
24
+ "type": "text",
25
+ "text": ""
26
+ }
27
+ },
28
+ {
29
+ "type": "content_block_delta",
30
+ "index": 0,
31
+ "delta": {
32
+ "type": "text_delta",
33
+ "text": "你好"
34
+ }
35
+ },
36
+ {
37
+ "type": "content_block_stop",
38
+ "index": 0
39
+ },
40
+ {
41
+ "type": "message_delta",
42
+ "delta": {
43
+ "stop_reason": "end_turn",
44
+ "stop_sequence": null
45
+ },
46
+ "usage": {
47
+ "output_tokens": 8
48
+ }
49
+ },
50
+ {
51
+ "type": "message_stop"
52
+ }
53
+ ],
54
+ "context": {
55
+ "messages": [
56
+ {
57
+ "role": "user",
58
+ "content": "go",
59
+ "timestamp": 1
60
+ },
61
+ {
62
+ "role": "assistant",
63
+ "content": [
64
+ {
65
+ "type": "toolCall",
66
+ "id": "a",
67
+ "name": "first",
68
+ "arguments": {}
69
+ },
70
+ {
71
+ "type": "toolCall",
72
+ "id": "b",
73
+ "name": "second",
74
+ "arguments": {}
75
+ }
76
+ ],
77
+ "provider": "anthropic",
78
+ "api": "anthropic-messages",
79
+ "model": "test-model",
80
+ "stopReason": "toolUse",
81
+ "timestamp": 2,
82
+ "usage": {
83
+ "input": 0,
84
+ "output": 0,
85
+ "cacheRead": 0,
86
+ "cacheWrite": 0,
87
+ "totalTokens": 0,
88
+ "cost": {
89
+ "input": 0,
90
+ "output": 0,
91
+ "cacheRead": 0,
92
+ "cacheWrite": 0,
93
+ "total": 0
94
+ }
95
+ }
96
+ },
97
+ {
98
+ "role": "toolResult",
99
+ "toolCallId": "a",
100
+ "toolName": "first",
101
+ "content": [
102
+ {
103
+ "type": "image",
104
+ "data": "AAAA",
105
+ "mimeType": "image/png"
106
+ }
107
+ ],
108
+ "isError": true,
109
+ "timestamp": 3
110
+ },
111
+ {
112
+ "role": "toolResult",
113
+ "toolCallId": "b",
114
+ "toolName": "second",
115
+ "content": [
116
+ {
117
+ "type": "text",
118
+ "text": "ok"
119
+ }
120
+ ],
121
+ "isError": false,
122
+ "timestamp": 4
123
+ }
124
+ ]
125
+ }
126
+ }
@@ -0,0 +1,164 @@
1
+ {
2
+ "provider": "anthropic",
3
+ "entry": "simple",
4
+ "model": {
5
+ "id": "claude-opus-4-8",
6
+ "name": "Claude Opus 4.8",
7
+ "api": "anthropic-messages",
8
+ "reasoning": true,
9
+ "input": [
10
+ "text",
11
+ "image"
12
+ ],
13
+ "maxTokens": 128000,
14
+ "contextWindow": 1000000,
15
+ "cost": {
16
+ "input": 5,
17
+ "output": 25,
18
+ "cacheRead": 0.5,
19
+ "cacheWrite": 6.25
20
+ },
21
+ "thinkingLevelMap": {
22
+ "xhigh": "xhigh",
23
+ "max": "max"
24
+ },
25
+ "compat": {
26
+ "supportsMidConvoSystemMessages": true,
27
+ "supportsMidConvoToolChanges": true,
28
+ "forceAdaptiveThinking": true,
29
+ "supportsTemperature": false,
30
+ "supportsStrictTools": true
31
+ }
32
+ },
33
+ "options": {
34
+ "reasoning": "high",
35
+ "cacheRetention": "none"
36
+ },
37
+ "context": {
38
+ "messages": [
39
+ {
40
+ "role": "system",
41
+ "content": "",
42
+ "timestamp": 0,
43
+ "toolsAdded": [
44
+ {
45
+ "name": "a",
46
+ "description": "a",
47
+ "parameters": {
48
+ "type": "object",
49
+ "properties": {}
50
+ }
51
+ }
52
+ ]
53
+ },
54
+ {
55
+ "role": "user",
56
+ "content": "one",
57
+ "timestamp": 1
58
+ },
59
+ {
60
+ "role": "assistant",
61
+ "content": [
62
+ {
63
+ "type": "text",
64
+ "text": "answer"
65
+ }
66
+ ],
67
+ "provider": "anthropic",
68
+ "api": "anthropic-messages",
69
+ "model": "claude-opus-4-8",
70
+ "stopReason": "stop",
71
+ "timestamp": 2,
72
+ "usage": {
73
+ "input": 0,
74
+ "output": 0,
75
+ "cacheRead": 0,
76
+ "cacheWrite": 0,
77
+ "totalTokens": 0,
78
+ "cost": {
79
+ "input": 0,
80
+ "output": 0,
81
+ "cacheRead": 0,
82
+ "cacheWrite": 0,
83
+ "total": 0
84
+ }
85
+ }
86
+ },
87
+ {
88
+ "role": "system",
89
+ "content": "",
90
+ "timestamp": 0,
91
+ "toolsRemoved": [
92
+ {
93
+ "name": "a"
94
+ }
95
+ ],
96
+ "toolsAdded": [
97
+ {
98
+ "name": "a",
99
+ "description": "replaced",
100
+ "parameters": {
101
+ "type": "object",
102
+ "properties": {}
103
+ }
104
+ }
105
+ ]
106
+ },
107
+ {
108
+ "role": "user",
109
+ "content": "two",
110
+ "timestamp": 1
111
+ }
112
+ ]
113
+ },
114
+ "events": [
115
+ {
116
+ "type": "message_start",
117
+ "message": {
118
+ "id": "msg_x",
119
+ "type": "message",
120
+ "role": "assistant",
121
+ "model": "test-model",
122
+ "content": [],
123
+ "usage": {
124
+ "input_tokens": 12,
125
+ "output_tokens": 1
126
+ },
127
+ "stop_reason": null
128
+ }
129
+ },
130
+ {
131
+ "type": "content_block_start",
132
+ "index": 0,
133
+ "content_block": {
134
+ "type": "text",
135
+ "text": ""
136
+ }
137
+ },
138
+ {
139
+ "type": "content_block_delta",
140
+ "index": 0,
141
+ "delta": {
142
+ "type": "text_delta",
143
+ "text": "你好"
144
+ }
145
+ },
146
+ {
147
+ "type": "content_block_stop",
148
+ "index": 0
149
+ },
150
+ {
151
+ "type": "message_delta",
152
+ "delta": {
153
+ "stop_reason": "end_turn",
154
+ "stop_sequence": null
155
+ },
156
+ "usage": {
157
+ "output_tokens": 8
158
+ }
159
+ },
160
+ {
161
+ "type": "message_stop"
162
+ }
163
+ ]
164
+ }