pi-python-core 0.10.2__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.10.2 → pi_python_core-0.12.0}/.gitignore +1 -0
  2. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/NOTICE +5 -0
  3. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/PKG-INFO +8 -5
  4. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/README.md +7 -4
  5. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/README.zh-CN.md +7 -4
  6. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/COVERAGE.md +16 -0
  7. {pi_python_core-0.10.2 → 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.10.2 → 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.10.2 → pi_python_core-0.12.0}/compat/results/plugins.upstream.json +14 -0
  24. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/provider-conformance.json +1959 -175
  25. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/recovery-conformance.upstream.json +56 -1
  26. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/verification.json +63 -27
  27. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/websocket-conformance.json +1 -1
  28. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/runner.py +9 -1
  29. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/API.md +21 -9
  30. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/CODING_AGENTS.md +4 -0
  31. pi_python_core-0.12.0/docs/CORE_AND_RESEARCH.md +62 -0
  32. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/PROVIDERS.md +59 -9
  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.11.0.md +40 -0
  36. pi_python_core-0.12.0/docs/releases/0.12.0.md +52 -0
  37. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/API.md +21 -9
  38. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/CODING_AGENTS.md +4 -0
  39. pi_python_core-0.12.0/docs/zh/CORE_AND_RESEARCH.md +60 -0
  40. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/PROVIDERS.md +59 -9
  41. pi_python_core-0.12.0/examples/core_and_research.py +53 -0
  42. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/pyproject.toml +1 -1
  43. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/__init__.py +5 -0
  44. pi_python_core-0.12.0/src/pi_python/_version.py +1 -0
  45. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/agent.py +66 -6
  46. pi_python_core-0.12.0/src/pi_python/core.py +538 -0
  47. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/data/models.json +146 -189
  48. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/estimate.py +3 -3
  49. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/events.py +2 -2
  50. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/features.py +5 -0
  51. pi_python_core-0.12.0/src/pi_python/identity.py +101 -0
  52. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/loop.py +47 -1
  53. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/lowlevel.py +27 -13
  54. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/messages.py +8 -2
  55. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/models.py +6 -0
  56. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/plugins/_resources.py +6 -2
  57. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/provider.py +18 -0
  58. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/anthropic.py +85 -59
  59. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/common.py +73 -3
  60. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/completions.py +33 -22
  61. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/oauth.py +18 -8
  62. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/openai.py +125 -35
  63. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/transport.py +78 -17
  64. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/queues.py +2 -0
  65. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/recovery.py +20 -9
  66. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/run.py +16 -0
  67. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/stream.py +32 -2
  68. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/tools.py +10 -3
  69. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/transcript.py +18 -0
  70. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_application_compatibility.py +24 -4
  71. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_application_tools.py +4 -1
  72. pi_python_core-0.12.0/tests/test_cache_sessions.py +312 -0
  73. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_contract_v3.py +6 -1
  74. pi_python_core-0.12.0/tests/test_core_contracts.py +393 -0
  75. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_examples.py +1 -0
  76. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_extended_core.py +1 -1
  77. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_features.py +1 -0
  78. pi_python_core-0.12.0/tests/test_lowlevel_stream.py +129 -0
  79. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_mcp_delta.py +5 -4
  80. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_mcp_host.py +8 -2
  81. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_messages.py +1 -1
  82. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_models.py +1 -1
  83. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_providers.py +91 -1
  84. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_recovery_helpers.py +1 -1
  85. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_session_changes.py +30 -13
  86. pi_python_core-0.12.0/tests/test_timing_identity.py +380 -0
  87. pi_python_core-0.12.0/tests/test_upstream_followup.py +238 -0
  88. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_websocket_continuation.py +52 -5
  89. pi_python_core-0.10.2/compat/results/linux-3.11.json +0 -54
  90. pi_python_core-0.10.2/compat/results/linux-3.12.json +0 -54
  91. pi_python_core-0.10.2/compat/results/linux-3.13.json +0 -54
  92. pi_python_core-0.10.2/compat/results/linux-3.14.json +0 -54
  93. pi_python_core-0.10.2/src/pi_python/_version.py +0 -1
  94. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/LICENSE +0 -0
  95. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/__init__.py +0 -0
  96. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/baseline.json +0 -0
  97. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/contracts/release-candidate.example.json +0 -0
  98. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/contracts/release-candidate.schema.json +0 -0
  99. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/contracts/upstream-baseline.json +0 -0
  100. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C01-text.json +0 -0
  101. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C02-tool.json +0 -0
  102. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C03-sequential.json +0 -0
  103. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C04-parallel.json +0 -0
  104. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C05-one-sequential.json +0 -0
  105. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C06-one-failure.json +0 -0
  106. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C07-unknown.json +0 -0
  107. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C08-prepare.json +0 -0
  108. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C09-before-error.json +0 -0
  109. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C09-block.json +0 -0
  110. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C09-replace.json +0 -0
  111. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C10-length.json +0 -0
  112. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C11-transform.json +0 -0
  113. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C12-system.json +0 -0
  114. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C13-steering.json +0 -0
  115. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C14-followup-all.json +0 -0
  116. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C14-followup-one.json +0 -0
  117. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C15-prepare.json +0 -0
  118. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C16-continue.json +0 -0
  119. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C16-end.json +0 -0
  120. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C16-mixed.json +0 -0
  121. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C16-terminate.json +0 -0
  122. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C19-abort-stream.json +0 -0
  123. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C19-abort-tools.json +0 -0
  124. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/fixtures/C24-provider-error.json +0 -0
  125. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/notes.txt +0 -0
  126. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/plan.md +0 -0
  127. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/review.md +0 -0
  128. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/sub/nested.md +0 -0
  129. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/prompts/summarize.md +0 -0
  130. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/.hidden/SKILL.md +0 -0
  131. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/alpha/SKILL.md +0 -0
  132. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/alpha/references/notes.md +0 -0
  133. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/beta/SKILL.md +0 -0
  134. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/broken/SKILL.md +0 -0
  135. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/delta/SKILL.md +0 -0
  136. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/gamma/SKILL.md +0 -0
  137. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/longdesc/SKILL.md +0 -0
  138. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/loose.md +0 -0
  139. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/nested/group/epsilon/SKILL.md +0 -0
  140. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/noname/SKILL.md +0 -0
  141. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/plain.md +0 -0
  142. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/zeta/SKILL.md +0 -0
  143. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/plugin-fixtures/skills/zeta/sub/eta/SKILL.md +0 -0
  144. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-oauth.json +0 -0
  145. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-cache-long.json +0 -0
  146. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-cache-none.json +0 -0
  147. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-replay.json +0 -0
  148. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-request-tools-image.json +0 -0
  149. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-text.json +0 -0
  150. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-thinking.json +0 -0
  151. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/anthropic-tool.json +0 -0
  152. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/codex-request-tools-image.json +0 -0
  153. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/codex-text.json +0 -0
  154. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-compat-strict.json +0 -0
  155. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-deepseek.json +0 -0
  156. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-ant-ling.json +0 -0
  157. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-baseten.json +0 -0
  158. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-string-thinking.json +0 -0
  159. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-together.json +0 -0
  160. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-format-zai.json +0 -0
  161. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-midconvo-tools.json +0 -0
  162. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-moonshot-usage.json +0 -0
  163. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-openai-off.json +0 -0
  164. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-openrouter.json +0 -0
  165. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-qwen-length.json +0 -0
  166. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-reasoning-content.json +0 -0
  167. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-request-replay.json +0 -0
  168. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-text.json +0 -0
  169. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/completions-tool-stream.json +0 -0
  170. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-incomplete.json +0 -0
  171. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-cache-long.json +0 -0
  172. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-cache-none.json +0 -0
  173. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-reasoning.json +0 -0
  174. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-replay.json +0 -0
  175. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-request-tools-image.json +0 -0
  176. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-text.json +0 -0
  177. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-thinking-backfill.json +0 -0
  178. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-thinking.json +0 -0
  179. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/openai-tool.json +0 -0
  180. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/proxy-text.json +0 -0
  181. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/proxy-thinking-tool.json +0 -0
  182. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-collapse-budget.json +0 -0
  183. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-native-tools.json +0 -0
  184. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-oauth-effort.json +0 -0
  185. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-redefinition.json +0 -0
  186. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-server-fallback.json +0 -0
  187. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-anthropic-thinking-off.json +0 -0
  188. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-codex-tool-search.json +0 -0
  189. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-additional-tools.json +0 -0
  190. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-collapse.json +0 -0
  191. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-explicit-cache-long.json +0 -0
  192. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-explicit-cache-none.json +0 -0
  193. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/provider-fixtures/session-openai-removal.json +0 -0
  194. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/release.py +0 -0
  195. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C01-text.python.json +0 -0
  196. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C01-text.upstream.json +0 -0
  197. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C02-tool.python.json +0 -0
  198. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C02-tool.upstream.json +0 -0
  199. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C03-sequential.python.json +0 -0
  200. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C03-sequential.upstream.json +0 -0
  201. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C04-parallel.python.json +0 -0
  202. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C04-parallel.upstream.json +0 -0
  203. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C05-one-sequential.python.json +0 -0
  204. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C05-one-sequential.upstream.json +0 -0
  205. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C06-one-failure.python.json +0 -0
  206. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C06-one-failure.upstream.json +0 -0
  207. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C07-unknown.python.json +0 -0
  208. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C07-unknown.upstream.json +0 -0
  209. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C08-prepare.python.json +0 -0
  210. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C08-prepare.upstream.json +0 -0
  211. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-before-error.python.json +0 -0
  212. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-before-error.upstream.json +0 -0
  213. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-block.python.json +0 -0
  214. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-block.upstream.json +0 -0
  215. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-replace.python.json +0 -0
  216. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C09-replace.upstream.json +0 -0
  217. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C10-length.python.json +0 -0
  218. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C10-length.upstream.json +0 -0
  219. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C11-transform.python.json +0 -0
  220. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C11-transform.upstream.json +0 -0
  221. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C12-system.python.json +0 -0
  222. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C12-system.upstream.json +0 -0
  223. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C13-steering.python.json +0 -0
  224. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C13-steering.upstream.json +0 -0
  225. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C14-followup-all.python.json +0 -0
  226. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C14-followup-all.upstream.json +0 -0
  227. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C14-followup-one.python.json +0 -0
  228. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C14-followup-one.upstream.json +0 -0
  229. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C15-prepare.python.json +0 -0
  230. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C15-prepare.upstream.json +0 -0
  231. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-continue.python.json +0 -0
  232. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-continue.upstream.json +0 -0
  233. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-end.python.json +0 -0
  234. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-end.upstream.json +0 -0
  235. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-mixed.python.json +0 -0
  236. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-mixed.upstream.json +0 -0
  237. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-terminate.python.json +0 -0
  238. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C16-terminate.upstream.json +0 -0
  239. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C19-abort-stream.python.json +0 -0
  240. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C19-abort-stream.upstream.json +0 -0
  241. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C19-abort-tools.python.json +0 -0
  242. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C19-abort-tools.upstream.json +0 -0
  243. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C24-provider-error.python.json +0 -0
  244. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/C24-provider-error.upstream.json +0 -0
  245. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/artifacts.json +0 -0
  246. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/benchmark.json +0 -0
  247. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/bootstrap.json +0 -0
  248. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/candidate-live-noop.json +0 -0
  249. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/conformance.json +0 -0
  250. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/linux-install-hash-repair.json +0 -0
  251. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-0.5-regression.json +0 -0
  252. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-0.5-session-claude.json +0 -0
  253. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-0.5-session-codex.json +0 -0
  254. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-claude-reasoning-replay.json +0 -0
  255. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-final-matrix.json +0 -0
  256. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-initial.json +0 -0
  257. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-loop-initial.json +0 -0
  258. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-providers.json +0 -0
  259. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-reasoning-replay.json +0 -0
  260. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-refresh.json +0 -0
  261. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-regression-0.4-deepseek.json +0 -0
  262. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-regression-0.4-first-run.json +0 -0
  263. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-regression-0.4.json +0 -0
  264. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-session-claude.json +0 -0
  265. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-session-codex.json +0 -0
  266. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-websocket-cached-recheck.json +0 -0
  267. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-websocket-cached.json +0 -0
  268. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/live-websocket-final.json +0 -0
  269. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/runtime-dependencies.json +0 -0
  270. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/source-verification.json +0 -0
  271. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.1.0/artifacts.json +0 -0
  272. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.11.json +0 -0
  273. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.12.json +0 -0
  274. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.1.0/linux-3.13.json +0 -0
  275. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.1.0/verification.json +0 -0
  276. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.2.0/artifacts.json +0 -0
  277. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.11.json +0 -0
  278. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.12.json +0 -0
  279. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.2.0/linux-3.13.json +0 -0
  280. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.2.0/verification.json +0 -0
  281. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/against-0.4-fixtures.json +0 -0
  282. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/artifacts.json +0 -0
  283. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.11.json +0 -0
  284. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.12.json +0 -0
  285. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/linux-3.13.json +0 -0
  286. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/provider-conformance.json +0 -0
  287. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.3.0/verification.json +0 -0
  288. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.4.0/artifacts.json +0 -0
  289. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.11.json +0 -0
  290. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.12.json +0 -0
  291. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.4.0/linux-3.13.json +0 -0
  292. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.4.0/verification.json +0 -0
  293. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.5.0/artifacts.json +0 -0
  294. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.11.json +0 -0
  295. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.12.json +0 -0
  296. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.5.0/linux-3.13.json +0 -0
  297. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.5.0/verification.json +0 -0
  298. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.6.0/artifacts.json +0 -0
  299. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.11.json +0 -0
  300. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.12.json +0 -0
  301. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.6.0/linux-3.13.json +0 -0
  302. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.6.0/verification.json +0 -0
  303. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/artifacts.json +0 -0
  304. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.11.json +0 -0
  305. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.12.json +0 -0
  306. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.13.json +0 -0
  307. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/linux-3.14.json +0 -0
  308. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.7.0/verification.json +0 -0
  309. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/artifacts.json +0 -0
  310. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.11.json +0 -0
  311. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.12.json +0 -0
  312. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.13.json +0 -0
  313. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/linux-3.14.json +0 -0
  314. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/results/v0.8.0/verification.json +0 -0
  315. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/websocket-fixtures/codex-continuation-lost-state.json +0 -0
  316. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/compat/websocket-fixtures/codex-continuation-tool-loop.json +0 -0
  317. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/APPLICATION_TOOLS_IMPLEMENTATION.md +0 -0
  318. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/CONCEPTS.md +0 -0
  319. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/IMPLEMENTATION.md +0 -0
  320. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/MCP_INTERACTION.md +0 -0
  321. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/PLUGINS.md +0 -0
  322. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/PLUGIN_DEVELOPMENT.md +0 -0
  323. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.3.0.md +0 -0
  324. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.4.0.md +0 -0
  325. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.5.0.md +0 -0
  326. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.6.0.md +0 -0
  327. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.7.0.md +0 -0
  328. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/history/IMPLEMENTATION-0.8.0.md +0 -0
  329. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/releases/0.10.2.md +0 -0
  330. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/CONCEPTS.md +0 -0
  331. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/MCP_HOST_VERIFICATION.md +0 -0
  332. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/MCP_INTERACTION.md +0 -0
  333. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/PLUGINS.md +0 -0
  334. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/docs/zh/PLUGIN_DEVELOPMENT.md +0 -0
  335. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/capability_composition.py +0 -0
  336. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/in_memory.py +0 -0
  337. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/local_model.py +0 -0
  338. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/mcp_interactive.py +0 -0
  339. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/mcp_interactive_server.py +0 -0
  340. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/mcp_tools.py +0 -0
  341. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/memory_demo.py +0 -0
  342. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugin_demo.py +0 -0
  343. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/lab_tools/agents/reviewer.md +0 -0
  344. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/lab_tools/ops.py +0 -0
  345. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/lab_tools/plugin.py +0 -0
  346. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/lab_tools/prompts/dedup.md +0 -0
  347. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/lab_tools/skills/dedup-window/SKILL.md +0 -0
  348. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/plugins/memory/plugin.py +0 -0
  349. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/provider_chat.py +0 -0
  350. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/quickstart.py +0 -0
  351. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/recovery.py +0 -0
  352. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/save_restore.py +0 -0
  353. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/examples/subagent.py +0 -0
  354. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/_mcp_host.py +0 -0
  355. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/_mcp_interaction.py +0 -0
  356. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/_mcp_process.py +0 -0
  357. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/_mcp_sampling.py +0 -0
  358. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/cancellation.py +0 -0
  359. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/errors.py +0 -0
  360. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/function_tools.py +0 -0
  361. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/hooks.py +0 -0
  362. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/limits.py +0 -0
  363. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/mcp.py +0 -0
  364. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/plugins/__init__.py +0 -0
  365. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/plugins/_compose.py +0 -0
  366. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/plugins/_frontmatter.py +0 -0
  367. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/plugins/_subagents.py +0 -0
  368. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/providers/__init__.py +0 -0
  369. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/proxy.py +0 -0
  370. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/py.typed +0 -0
  371. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/sync.py +0 -0
  372. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/tasks.py +0 -0
  373. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/src/pi_python/testing.py +0 -0
  374. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/servers/mcp_interactive_server.py +0 -0
  375. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/servers/mcp_process_server.py +0 -0
  376. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/servers/mcp_server.py +0 -0
  377. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_capability_composition.py +0 -0
  378. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_completions.py +0 -0
  379. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_conformance.py +0 -0
  380. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_control.py +0 -0
  381. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_function_tools.py +0 -0
  382. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_lifecycle_contracts.py +0 -0
  383. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_loop.py +0 -0
  384. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_mcp.py +0 -0
  385. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_mcp_interaction.py +0 -0
  386. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_mcp_process.py +0 -0
  387. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_nested_agents.py +0 -0
  388. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_oauth.py +0 -0
  389. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_plugin_conformance.py +0 -0
  390. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_plugins.py +0 -0
  391. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_recovery.py +0 -0
  392. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_recovery_conformance.py +0 -0
  393. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_release.py +0 -0
  394. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_sync.py +0 -0
  395. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_tasks.py +0 -0
  396. {pi_python_core-0.10.2 → pi_python_core-0.12.0}/tests/test_tools.py +0 -0
  397. {pi_python_core-0.10.2 → 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.10.2
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,9 +112,9 @@ 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
- 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. Plugins are the one 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.
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
 
116
119
  ## Documentation
117
120
 
@@ -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,9 +78,9 @@ 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
- 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. Plugins are the one 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.
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
 
82
85
  ## Documentation
83
86
 
@@ -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,9 +78,9 @@ 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
- 有几处是有意的差异,例如工具参数严格校验、不自动转换类型,返回给调用者的状态是副本;另一些是为 Python 用户加的,例如 `@tool`、同步调用、失败后直接 `continue_run()`。逐项记录见[验收映射](compat/COVERAGE.md)。Pi 放在应用层的功能(终端界面、会话文件格式、上下文压缩)不在本库核心里;压缩可以用钩子实现,示例里有完整做法。插件是从应用层取来的唯一一块:一个可选模块,读取 Pi 的 package 格式,再据此构造普通的 Agent。本项目使用自己的版本号,并非 Pi 官方发行版。
83
+ 有几处是有意的差异,例如工具参数严格校验、不自动转换类型,返回给调用者的状态是副本;另一些是为 Python 用户加的,例如 `@tool`、同步调用、失败后直接 `continue_run()`。逐项记录见[验收映射](compat/COVERAGE.md)。Pi 放在应用层的功能(终端界面、会话文件格式、上下文压缩)不在本库核心里;压缩可以用钩子实现,示例里有完整做法。Agent 还为 Codex 自动提供缓存专用会话标识,补齐上游 coding-agent 层承担的职责;见[缓存会话与关闭方式](docs/zh/PROVIDERS.md#codex-自动缓存会话)。插件也是从应用层取来的功能:一个可选模块,读取 Pi 的 package 格式,再据此构造普通的 Agent。本项目使用自己的版本号,并非 Pi 官方发行版。
81
84
 
82
85
  ## 文档
83
86
 
@@ -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,8 +47,20 @@
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
 
54
+ ## D10:Agent 管理 Codex 缓存会话标识
55
+
56
+ 0.11.0 在 Agent 入口补齐缓存会话生命周期。官方 Pi v1.0.0 的底层 Agent 只转发 `sessionId`,由 coding-agent 的 `createAgentSession()` 从 `SessionManager` 取值;这一分工在核查的 v1.3.0 中也相同。Python 没有对应的完整上层应用,因而默认在 Agent 提供此便利能力。它是经用户确认的有意差异,不是上游 core 行为完全一致的声明,也不升级固定参照。
57
+
58
+ core 只识别可选的 `supports_agent_cache_session=True` 能力,不绑定模型名或 Provider 类。内置 Codex Provider 使用 `request.cache_session_id` 作为缓存键与会话头的后备值;其他内置 Provider、自定义流和未声明支持的 Provider 不接收自动标识。`DefaultProvider` 转发实际接入的能力。
59
+
60
+ 自动值不写入 `options.session_id`,因此不能满足 `websocket-cached` 的显式配置要求,也不能启动连接复用或 `previous_response_id` 续接。原有显式值、钩子及配置更新的优先级保留;自动值尊重应用自定义请求头。`auto_session_id=False` 恢复旧默认,`cache_retention="none"` 抑制库生成的缓存字段。新增属性与构造参数支持保存、恢复后备标识;消息编解码、事件、结果和 ModelRequest 的 dataclass 字段不变。
61
+
62
+ 证据:`tests/test_cache_sessions.py` 捕获实际构造的 HTTP 请求,覆盖默认头、工具循环、重试、配置替换、跨 Agent/子 Agent 隔离、重置、恢复、显式优先、禁用、通道切换、自定义 Provider 能力及旧请求结构;`tests/test_websocket_continuation.py` 用本地服务器检查连接数、完整输入和续接字段。恢复的自动值也不触发连接复用;显式标识的原有增量行为单独验证。真实后端命中率、订阅配额节省与所有上层应用不在这些离线检查的证明范围内。
63
+
48
64
  ## 有意差异与范围外行为
49
65
 
50
66
  D1–D8 保持原设计的含义。D1 严格输入;D2 执行前钩子不能通过原地修改参数改变调用;D3 资源预算;D4 Python 取消及未知结果;D5 状态复制;D6 输出检查;D7 诊断、原始结果和完整流校验;D8 文本与工具子集。每项有独立 Python 断言,不以 skip 代替验收。
@@ -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
+ }