world-model-optimizer 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. llm_waterfall/LICENSE +21 -0
  2. llm_waterfall/__init__.py +53 -0
  3. llm_waterfall/adapters/__init__.py +36 -0
  4. llm_waterfall/adapters/anthropic.py +105 -0
  5. llm_waterfall/adapters/aws_mantle.py +47 -0
  6. llm_waterfall/adapters/azure_openai.py +71 -0
  7. llm_waterfall/adapters/base.py +51 -0
  8. llm_waterfall/adapters/bedrock.py +309 -0
  9. llm_waterfall/adapters/openai.py +130 -0
  10. llm_waterfall/classify.py +184 -0
  11. llm_waterfall/pricing.py +110 -0
  12. llm_waterfall/py.typed +0 -0
  13. llm_waterfall/types.py +295 -0
  14. llm_waterfall/waterfall.py +255 -0
  15. wmo/__init__.py +38 -0
  16. wmo/agents/__init__.py +7 -0
  17. wmo/agents/default.py +29 -0
  18. wmo/agents/meta.py +55 -0
  19. wmo/agents/optimizer.py +55 -0
  20. wmo/agents/project.py +928 -0
  21. wmo/cli/__init__.py +5 -0
  22. wmo/cli/agent_session.py +1123 -0
  23. wmo/cli/app.py +2489 -0
  24. wmo/cli/e2b_cmds.py +212 -0
  25. wmo/cli/eval_closed_loop.py +207 -0
  26. wmo/cli/harness_app.py +1147 -0
  27. wmo/cli/harness_distill.py +659 -0
  28. wmo/cli/hosted_session.py +880 -0
  29. wmo/cli/ingest_cmd.py +165 -0
  30. wmo/cli/model_roles.py +82 -0
  31. wmo/cli/platform_cmds.py +372 -0
  32. wmo/cli/route_app.py +274 -0
  33. wmo/cli/session_state.py +243 -0
  34. wmo/cli/ui.py +1107 -0
  35. wmo/cli/workspace_sync.py +504 -0
  36. wmo/config/__init__.py +60 -0
  37. wmo/config/card.py +129 -0
  38. wmo/config/config.py +367 -0
  39. wmo/config/dotenv.py +67 -0
  40. wmo/config/settings.py +128 -0
  41. wmo/config/store.py +177 -0
  42. wmo/conftest.py +19 -0
  43. wmo/connect/__init__.py +88 -0
  44. wmo/connect/apps.py +78 -0
  45. wmo/connect/brave.py +284 -0
  46. wmo/connect/connector.py +79 -0
  47. wmo/connect/credentials.py +164 -0
  48. wmo/connect/github.py +321 -0
  49. wmo/connect/google.py +627 -0
  50. wmo/connect/notion.py +790 -0
  51. wmo/connect/oauth.py +461 -0
  52. wmo/connect/slack.py +555 -0
  53. wmo/connect/store.py +199 -0
  54. wmo/connect/types.py +156 -0
  55. wmo/core/__init__.py +21 -0
  56. wmo/core/parsing.py +281 -0
  57. wmo/core/render.py +271 -0
  58. wmo/core/text.py +40 -0
  59. wmo/core/types.py +116 -0
  60. wmo/distill/__init__.py +14 -0
  61. wmo/distill/agents.py +140 -0
  62. wmo/distill/config.py +1006 -0
  63. wmo/distill/cost.py +437 -0
  64. wmo/distill/data.py +921 -0
  65. wmo/distill/deadlines.py +254 -0
  66. wmo/distill/fake_tinker.py +734 -0
  67. wmo/distill/gate.py +122 -0
  68. wmo/distill/loop.py +3499 -0
  69. wmo/distill/renderers.py +399 -0
  70. wmo/distill/rendering.py +620 -0
  71. wmo/distill/rollouts.py +726 -0
  72. wmo/distill/samples.py +195 -0
  73. wmo/distill/store.py +829 -0
  74. wmo/distill/teacher.py +714 -0
  75. wmo/distill/tokens.py +535 -0
  76. wmo/distill/tracking.py +552 -0
  77. wmo/distill/tripwire.py +411 -0
  78. wmo/distill/xtoken/byte_offsets.py +152 -0
  79. wmo/distill/xtoken/chunks.py +457 -0
  80. wmo/distill/xtoken/prompt_logprobs.py +475 -0
  81. wmo/distill/xtoken/teacher_render.py +346 -0
  82. wmo/engine/__init__.py +28 -0
  83. wmo/engine/autoconfig.py +367 -0
  84. wmo/engine/build.py +346 -0
  85. wmo/engine/demo.py +77 -0
  86. wmo/engine/eval_suites.py +245 -0
  87. wmo/engine/grounding.py +491 -0
  88. wmo/engine/knowledge.py +291 -0
  89. wmo/engine/loader.py +36 -0
  90. wmo/engine/play.py +92 -0
  91. wmo/engine/prompts.py +99 -0
  92. wmo/engine/replay.py +443 -0
  93. wmo/engine/reporting.py +58 -0
  94. wmo/engine/workspace.py +468 -0
  95. wmo/engine/world_model.py +568 -0
  96. wmo/env/__init__.py +22 -0
  97. wmo/env/base.py +121 -0
  98. wmo/env/closed_loop.py +229 -0
  99. wmo/env/episode.py +107 -0
  100. wmo/env/llm_agent.py +93 -0
  101. wmo/env/scenarios.py +73 -0
  102. wmo/evals/__init__.py +52 -0
  103. wmo/evals/agreement.py +110 -0
  104. wmo/evals/base.py +45 -0
  105. wmo/evals/closed_loop.py +480 -0
  106. wmo/evals/failover.py +96 -0
  107. wmo/evals/gold.py +127 -0
  108. wmo/evals/grid.py +394 -0
  109. wmo/evals/grid_plot.py +205 -0
  110. wmo/evals/harbor/__init__.py +27 -0
  111. wmo/evals/harbor/agent.py +573 -0
  112. wmo/evals/harbor/ctrf.py +171 -0
  113. wmo/evals/harbor/e2b_environment.py +587 -0
  114. wmo/evals/harbor/e2b_template_policy.py +144 -0
  115. wmo/evals/harbor/scorer.py +875 -0
  116. wmo/evals/harbor/tasks.py +140 -0
  117. wmo/evals/open_loop.py +194 -0
  118. wmo/evals/tasks.py +53 -0
  119. wmo/harness/__init__.py +51 -0
  120. wmo/harness/code_runtime.py +288 -0
  121. wmo/harness/create.py +1191 -0
  122. wmo/harness/delta.py +220 -0
  123. wmo/harness/doc.py +556 -0
  124. wmo/harness/e2b_ledger.py +342 -0
  125. wmo/harness/e2b_reap.py +476 -0
  126. wmo/harness/e2b_sandbox.py +350 -0
  127. wmo/harness/environment.py +35 -0
  128. wmo/harness/live_session.py +543 -0
  129. wmo/harness/mutate.py +343 -0
  130. wmo/harness/pi_e2b.py +1710 -0
  131. wmo/harness/pi_entry/entry.ts +268 -0
  132. wmo/harness/pi_entry/runner_frames.ts +92 -0
  133. wmo/harness/pi_entry/runner_live.ts +587 -0
  134. wmo/harness/pi_entry/runner_service.ts +270 -0
  135. wmo/harness/pi_entry/runner_stdio.ts +374 -0
  136. wmo/harness/pi_entry/runner_termination.ts +142 -0
  137. wmo/harness/pi_local.py +262 -0
  138. wmo/harness/pi_runtime.py +495 -0
  139. wmo/harness/pi_vendor.py +65 -0
  140. wmo/harness/population.py +509 -0
  141. wmo/harness/project_proposer.py +569 -0
  142. wmo/harness/proposer.py +977 -0
  143. wmo/harness/runner_link.py +619 -0
  144. wmo/harness/runtime.py +389 -0
  145. wmo/harness/scoring.py +247 -0
  146. wmo/harness/skills.py +116 -0
  147. wmo/harness/source_tree.py +319 -0
  148. wmo/harness/store.py +176 -0
  149. wmo/harness/tools.py +105 -0
  150. wmo/harness/vendor/manifest.sha256 +58 -0
  151. wmo/harness/vendor/pi-agent/CHANGELOG.md +556 -0
  152. wmo/harness/vendor/pi-agent/LICENSE +21 -0
  153. wmo/harness/vendor/pi-agent/README.md +488 -0
  154. wmo/harness/vendor/pi-agent/VENDOR.md +39 -0
  155. wmo/harness/vendor/pi-agent/docs/agent-harness.md +486 -0
  156. wmo/harness/vendor/pi-agent/docs/durable-harness.md +212 -0
  157. wmo/harness/vendor/pi-agent/docs/hooks.md +445 -0
  158. wmo/harness/vendor/pi-agent/docs/models.md +966 -0
  159. wmo/harness/vendor/pi-agent/docs/observability.md +376 -0
  160. wmo/harness/vendor/pi-agent/package.json +60 -0
  161. wmo/harness/vendor/pi-agent/src/agent-loop.ts +748 -0
  162. wmo/harness/vendor/pi-agent/src/agent.ts +575 -0
  163. wmo/harness/vendor/pi-agent/src/harness/agent-harness.ts +1029 -0
  164. wmo/harness/vendor/pi-agent/src/harness/compaction/branch-summarization.ts +261 -0
  165. wmo/harness/vendor/pi-agent/src/harness/compaction/compaction.ts +747 -0
  166. wmo/harness/vendor/pi-agent/src/harness/compaction/utils.ts +144 -0
  167. wmo/harness/vendor/pi-agent/src/harness/env/nodejs.ts +550 -0
  168. wmo/harness/vendor/pi-agent/src/harness/messages.ts +164 -0
  169. wmo/harness/vendor/pi-agent/src/harness/prompt-templates.ts +267 -0
  170. wmo/harness/vendor/pi-agent/src/harness/session/jsonl-repo.ts +177 -0
  171. wmo/harness/vendor/pi-agent/src/harness/session/jsonl-storage.ts +293 -0
  172. wmo/harness/vendor/pi-agent/src/harness/session/memory-repo.ts +50 -0
  173. wmo/harness/vendor/pi-agent/src/harness/session/memory-storage.ts +131 -0
  174. wmo/harness/vendor/pi-agent/src/harness/session/repo-utils.ts +51 -0
  175. wmo/harness/vendor/pi-agent/src/harness/session/session.ts +267 -0
  176. wmo/harness/vendor/pi-agent/src/harness/session/uuid.ts +54 -0
  177. wmo/harness/vendor/pi-agent/src/harness/skills.ts +375 -0
  178. wmo/harness/vendor/pi-agent/src/harness/system-prompt.ts +34 -0
  179. wmo/harness/vendor/pi-agent/src/harness/types.ts +836 -0
  180. wmo/harness/vendor/pi-agent/src/harness/utils/shell-output.ts +135 -0
  181. wmo/harness/vendor/pi-agent/src/harness/utils/truncate.ts +344 -0
  182. wmo/harness/vendor/pi-agent/src/index.ts +44 -0
  183. wmo/harness/vendor/pi-agent/src/node.ts +2 -0
  184. wmo/harness/vendor/pi-agent/src/proxy.ts +367 -0
  185. wmo/harness/vendor/pi-agent/src/types.ts +428 -0
  186. wmo/harness/vendor/pi-agent/test/agent-loop.test.ts +1351 -0
  187. wmo/harness/vendor/pi-agent/test/agent.test.ts +699 -0
  188. wmo/harness/vendor/pi-agent/test/e2e.test.ts +404 -0
  189. wmo/harness/vendor/pi-agent/test/harness/agent-harness-stream.test.ts +213 -0
  190. wmo/harness/vendor/pi-agent/test/harness/agent-harness.test.ts +608 -0
  191. wmo/harness/vendor/pi-agent/test/harness/compaction.test.ts +655 -0
  192. wmo/harness/vendor/pi-agent/test/harness/nodejs-env.test.ts +321 -0
  193. wmo/harness/vendor/pi-agent/test/harness/prompt-templates.test.ts +90 -0
  194. wmo/harness/vendor/pi-agent/test/harness/repo.test.ts +68 -0
  195. wmo/harness/vendor/pi-agent/test/harness/resource-formatting.test.ts +24 -0
  196. wmo/harness/vendor/pi-agent/test/harness/session-test-utils.ts +55 -0
  197. wmo/harness/vendor/pi-agent/test/harness/session-uuid.test.ts +50 -0
  198. wmo/harness/vendor/pi-agent/test/harness/session.test.ts +156 -0
  199. wmo/harness/vendor/pi-agent/test/harness/skills.test.ts +116 -0
  200. wmo/harness/vendor/pi-agent/test/harness/storage.test.ts +299 -0
  201. wmo/harness/vendor/pi-agent/test/harness/system-prompt.test.ts +66 -0
  202. wmo/harness/vendor/pi-agent/test/harness/truncate.test.ts +169 -0
  203. wmo/harness/vendor/pi-agent/test/scratch/simple.ts +72 -0
  204. wmo/harness/vendor/pi-agent/test/utils/calculate.ts +32 -0
  205. wmo/harness/vendor/pi-agent/test/utils/get-current-time.ts +46 -0
  206. wmo/harness/vendor/pi-agent/tsconfig.build.json +13 -0
  207. wmo/harness/vendor/pi-agent/vitest.config.ts +19 -0
  208. wmo/harness/vendor/pi-agent/vitest.harness.config.ts +28 -0
  209. wmo/harness/vendor/vendor_pi.sh +59 -0
  210. wmo/harness/workspace_patch.py +270 -0
  211. wmo/ingest/__init__.py +47 -0
  212. wmo/ingest/adapter.py +72 -0
  213. wmo/ingest/base.py +114 -0
  214. wmo/ingest/braintrust.py +339 -0
  215. wmo/ingest/detect.py +126 -0
  216. wmo/ingest/langfuse.py +291 -0
  217. wmo/ingest/langsmith.py +444 -0
  218. wmo/ingest/mastra.py +330 -0
  219. wmo/ingest/messages.py +170 -0
  220. wmo/ingest/normalize.py +679 -0
  221. wmo/ingest/otel_genai.py +69 -0
  222. wmo/ingest/otel_writer.py +100 -0
  223. wmo/ingest/phoenix.py +150 -0
  224. wmo/ingest/postgres.py +246 -0
  225. wmo/ingest/posthog.py +320 -0
  226. wmo/ingest/quality.py +28 -0
  227. wmo/ingest/stream.py +209 -0
  228. wmo/ingest/testdata/sample_otlp.json +60 -0
  229. wmo/ingest/testdata/sample_spans.jsonl +3 -0
  230. wmo/optimize/__init__.py +25 -0
  231. wmo/optimize/base.py +143 -0
  232. wmo/optimize/gepa.py +806 -0
  233. wmo/optimize/judge.py +262 -0
  234. wmo/optimize/judge_quality.py +359 -0
  235. wmo/optimize/knn.py +468 -0
  236. wmo/optimize/numeric.py +152 -0
  237. wmo/optimize/outcomes.py +103 -0
  238. wmo/optimize/policy.py +669 -0
  239. wmo/optimize/report.py +231 -0
  240. wmo/optimize/reward.py +129 -0
  241. wmo/optimize/routing.py +373 -0
  242. wmo/platform/__init__.py +6 -0
  243. wmo/platform/auth.py +115 -0
  244. wmo/platform/client.py +551 -0
  245. wmo/platform/credentials.py +126 -0
  246. wmo/platform/transfer.py +158 -0
  247. wmo/providers/__init__.py +40 -0
  248. wmo/providers/_bedrock_chat.py +155 -0
  249. wmo/providers/_openai_common.py +182 -0
  250. wmo/providers/_responses_common.py +472 -0
  251. wmo/providers/anthropic.py +134 -0
  252. wmo/providers/azure_openai.py +296 -0
  253. wmo/providers/base.py +300 -0
  254. wmo/providers/bedrock.py +312 -0
  255. wmo/providers/models.py +205 -0
  256. wmo/providers/openai.py +143 -0
  257. wmo/providers/openai_responses.py +240 -0
  258. wmo/providers/pool.py +170 -0
  259. wmo/providers/registry.py +73 -0
  260. wmo/providers/retry.py +151 -0
  261. wmo/providers/tinker.py +936 -0
  262. wmo/providers/waterfall.py +336 -0
  263. wmo/research/__init__.py +81 -0
  264. wmo/research/ablation.py +133 -0
  265. wmo/research/concurrency_plot.py +523 -0
  266. wmo/research/concurrency_run.py +240 -0
  267. wmo/research/concurrency_scaling.py +270 -0
  268. wmo/research/gepa_scaling.py +274 -0
  269. wmo/research/pipeline.py +198 -0
  270. wmo/research/scaling_split.py +82 -0
  271. wmo/research/scenario_fidelity.py +198 -0
  272. wmo/research/scenario_recovery.py +92 -0
  273. wmo/research/seed_stability.py +90 -0
  274. wmo/research/trace_scaling.py +348 -0
  275. wmo/retrieval/__init__.py +6 -0
  276. wmo/retrieval/embedders.py +105 -0
  277. wmo/retrieval/leakfree.py +52 -0
  278. wmo/retrieval/retriever.py +173 -0
  279. wmo/scenarios/__init__.py +58 -0
  280. wmo/scenarios/builder.py +152 -0
  281. wmo/scenarios/mining/__init__.py +27 -0
  282. wmo/scenarios/mining/clustering.py +171 -0
  283. wmo/scenarios/mining/facets.py +226 -0
  284. wmo/scenarios/mining/selection.py +220 -0
  285. wmo/scenarios/synthesis/__init__.py +6 -0
  286. wmo/scenarios/synthesis/scenario_set.py +63 -0
  287. wmo/scenarios/synthesis/synthesizer.py +85 -0
  288. wmo/scenarios/verification/__init__.py +17 -0
  289. wmo/scenarios/verification/judge.py +97 -0
  290. wmo/scenarios/verification/verify.py +135 -0
  291. wmo/serving/__init__.py +5 -0
  292. wmo/serving/builds.py +451 -0
  293. wmo/serving/chat.py +878 -0
  294. wmo/serving/endpoint_config.py +64 -0
  295. wmo/serving/savings.py +250 -0
  296. wmo/serving/server.py +553 -0
  297. wmo/serving/traces_source.py +206 -0
  298. wmo/telemetry.py +213 -0
  299. wmo/tracking/__init__.py +36 -0
  300. wmo/tracking/clock.py +24 -0
  301. wmo/tracking/metered.py +125 -0
  302. wmo/tracking/pricing.py +99 -0
  303. wmo/tracking/store.py +31 -0
  304. wmo/tracking/tracker.py +149 -0
  305. world_model_optimizer-0.2.0.dist-info/METADATA +203 -0
  306. world_model_optimizer-0.2.0.dist-info/RECORD +308 -0
  307. world_model_optimizer-0.2.0.dist-info/WHEEL +4 -0
  308. world_model_optimizer-0.2.0.dist-info/entry_points.txt +2 -0
@@ -0,0 +1,556 @@
1
+ # Changelog
2
+
3
+ ## [0.80.3] - 2026-06-30
4
+
5
+ ### Added
6
+
7
+ - Added `prepareNextTurnWithContext` for `Agent` users that need the next-turn loop context.
8
+
9
+ ### Fixed
10
+
11
+ - Fixed `Agent.prepareNextTurn` to keep receiving the run abort signal instead of the next-turn context.
12
+
13
+ ## [0.80.2] - 2026-06-23
14
+
15
+ ### Changed
16
+
17
+ - Renamed the public harness shell execution options type from `ExecutionEnvExecOptions` to `ShellExecOptions`.
18
+
19
+ ## [0.80.1] - 2026-06-23
20
+
21
+ ## [0.80.0] - 2026-06-23
22
+
23
+ ### Breaking Changes
24
+
25
+ - `AgentHarnessOptions.models` is required and is the only auth path: the harness streams turns, compaction, and branch summarization through the provided `Models` instance (`models.streamSimple()`/`completeSimple()`), resolving auth through the providers. `AgentHarnessOptions.getApiKeyAndHeaders` is removed — apps that resolved keys per request now express that as provider auth (`ApiKeyAuth`/`OAuthAuth`) on the providers in the `Models` collection. Build one with `createModels()` + provider factories (or `builtinModels()` from `@earendil-works/pi-ai/providers/all`); tests use `fauxProvider()`.
26
+ - `compact()`, `generateSummary()`, and `generateBranchSummary()` take a `Models` parameter and no longer accept explicit `apiKey`/`headers`.
27
+ - `StreamFn` is defined structurally (`(model, context, options?) => AssistantMessageEventStream | Promise<...>`); `Models.streamSimple` satisfies it.
28
+ - Removed the `@earendil-works/pi-agent-core/base` selective-provider entrypoint; use the root package with an explicit `Models` instance instead.
29
+
30
+ ### Fixed
31
+
32
+ - Fixed harness session names to normalize newline characters before storing labels ([#5999](https://github.com/earendil-works/pi/pull/5999) by [@haoqixu](https://github.com/haoqixu)).
33
+ - Fixed harness compaction estimates to ignore malformed all-zero assistant usage after truncated responses ([#5526](https://github.com/earendil-works/pi/pull/5526) by [@dmmulroy](https://github.com/dmmulroy)).
34
+
35
+ ## [0.79.10] - 2026-06-22
36
+
37
+ ## [0.79.9] - 2026-06-20
38
+
39
+ ### Fixed
40
+
41
+ - Fixed Node execution environment commands through legacy WSL `bash.exe` to pass scripts over stdin so shell variables expand in the target bash ([#5893](https://github.com/earendil-works/pi/issues/5893)).
42
+
43
+ ## [0.79.8] - 2026-06-19
44
+
45
+ ### Added
46
+
47
+ - Added `@earendil-works/pi-agent-core/base` for bundlers that want to pair the agent core with selective `@earendil-works/pi-ai/base` provider registration ([#5348](https://github.com/earendil-works/pi/pull/5348) by [@FredKSchott](https://github.com/FredKSchott)).
48
+
49
+ ## [0.79.7] - 2026-06-18
50
+
51
+ ## [0.79.6] - 2026-06-16
52
+
53
+ ## [0.79.5] - 2026-06-16
54
+
55
+ ## [0.79.4] - 2026-06-15
56
+
57
+ ## [0.79.3] - 2026-06-13
58
+
59
+ ## [0.79.2] - 2026-06-12
60
+
61
+ ### Fixed
62
+
63
+ - Fixed late tool progress callbacks after tool settlement to be ignored instead of emitting stale `tool_execution_update` events ([#5573](https://github.com/earendil-works/pi/issues/5573)).
64
+
65
+ ## [0.79.1] - 2026-06-09
66
+
67
+ ## [0.79.0] - 2026-06-08
68
+
69
+ ### Fixed
70
+
71
+ - Fixed the compaction summarization system prompt to use neutral AI assistant wording for non-coding agents ([#5401](https://github.com/earendil-works/pi/issues/5401)).
72
+
73
+ ## [0.78.1] - 2026-06-04
74
+
75
+ ## [0.78.0] - 2026-05-29
76
+
77
+ ## [0.77.0] - 2026-05-28
78
+
79
+ ### Breaking Changes
80
+
81
+ - Renamed agent harness `model_select` and `thinking_level_select` events to `model_update` and `thinking_level_update`.
82
+
83
+ ### Added
84
+
85
+ - Added agent harness tool registry APIs, `tools_update` events, branch-scoped active-tool persistence, and duplicate tool validation.
86
+
87
+ ## [0.76.0] - 2026-05-27
88
+
89
+ ### Fixed
90
+
91
+ - Fixed context token estimates to count user image attachments consistently with tool result images ([#4983](https://github.com/earendil-works/pi/issues/4983)).
92
+
93
+ ## [0.75.5] - 2026-05-23
94
+
95
+ ## [0.75.4] - 2026-05-20
96
+
97
+ ### Changed
98
+
99
+ - Changed source syntax to avoid TypeScript constructs that require JavaScript emit, keeping the package compatible with Node.js strip-only TypeScript checks.
100
+ - Removed the package-level development watch script now that the root TypeScript check validates strip-only-compatible sources.
101
+
102
+ ### Fixed
103
+
104
+ - Fixed tool-call preflight to stop preparing sibling tool calls after the run is aborted ([#4276](https://github.com/earendil-works/pi/issues/4276)).
105
+ - Fixed tail truncation for oversized single-line output that ends with a trailing newline ([#4715](https://github.com/earendil-works/pi/issues/4715)).
106
+ - Fixed Windows Node execution environment command spawns to hide helper console windows from background processes ([#4699](https://github.com/earendil-works/pi/issues/4699)).
107
+
108
+ ## [0.75.3] - 2026-05-18
109
+
110
+ ## [0.75.2] - 2026-05-18
111
+
112
+ ## [0.75.1] - 2026-05-18
113
+
114
+ ## [0.75.0] - 2026-05-17
115
+
116
+ ### Breaking Changes
117
+
118
+ - Raised the minimum supported Node.js version to 22.19.0.
119
+
120
+ ## [0.74.1] - 2026-05-16
121
+
122
+ ## [0.74.0] - 2026-05-07
123
+
124
+ ## [0.73.1] - 2026-05-07
125
+
126
+ ## [0.73.0] - 2026-05-04
127
+
128
+ ## [0.72.1] - 2026-05-02
129
+
130
+ ### Changed
131
+
132
+ - Changed the default agent transport to `auto` so providers can use their best available transport by default ([#4083](https://github.com/badlogic/pi-mono/issues/4083)).
133
+
134
+ ## [0.72.0] - 2026-05-01
135
+
136
+ ### Added
137
+
138
+ - Added `shouldStopAfterTurn` to the low-level agent loop config for gracefully exiting after a completed turn before polling queued messages or starting another LLM call.
139
+
140
+ ## [0.71.1] - 2026-05-01
141
+
142
+ ## [0.71.0] - 2026-04-30
143
+
144
+ ## [0.70.6] - 2026-04-28
145
+
146
+ ## [0.70.5] - 2026-04-27
147
+
148
+ ## [0.70.4] - 2026-04-27
149
+
150
+ ## [0.70.3] - 2026-04-27
151
+
152
+ ## [0.70.2] - 2026-04-24
153
+
154
+ ## [0.70.1] - 2026-04-24
155
+
156
+ ## [0.70.0] - 2026-04-23
157
+
158
+ ## [0.69.0] - 2026-04-22
159
+
160
+ ### Breaking Changes
161
+
162
+ - Migrated public TypeBox-facing types and examples from `@sinclair/typebox` 0.34.x to `typebox` 1.x. Install and import from `typebox` instead of relying on `@sinclair/typebox` transitively ([#3112](https://github.com/badlogic/pi-mono/issues/3112))
163
+
164
+ ### Added
165
+
166
+ - Added `terminate: true` tool-result hints to skip the automatic follow-up LLM call when every finalized tool result in the current batch opts into early termination ([#3525](https://github.com/badlogic/pi-mono/issues/3525))
167
+
168
+ ## [0.68.1] - 2026-04-22
169
+
170
+ ### Fixed
171
+
172
+ - Fixed `streamProxy()` to preserve the proxy-safe serializable subset of stream options, including session, transport, retry-delay, metadata, header, cache-retention, and thinking-budget settings ([#3512](https://github.com/badlogic/pi-mono/issues/3512))
173
+ - Fixed parallel tool execution to emit `tool_execution_end` as soon as each tool is finalized, while still emitting persisted tool-result messages in assistant source order ([#3503](https://github.com/badlogic/pi-mono/issues/3503))
174
+
175
+ ## [0.68.0] - 2026-04-20
176
+
177
+ ### Changed
178
+
179
+ - Clarified parallel tool execution ordering docs to specify that final tool lifecycle and tool-result artifacts are emitted in tool completion order.
180
+
181
+ ## [0.67.68] - 2026-04-17
182
+
183
+ ## [0.67.67] - 2026-04-17
184
+
185
+ ### Fixed
186
+
187
+ - Fixed parallel tool-call finalization to convert `afterToolCall` hook throws into error tool results instead of aborting the batch ([#3084](https://github.com/badlogic/pi-mono/issues/3084))
188
+
189
+ ## [0.67.6] - 2026-04-16
190
+
191
+ ## [0.67.5] - 2026-04-16
192
+
193
+ ## [0.67.4] - 2026-04-16
194
+
195
+ ## [0.67.3] - 2026-04-15
196
+
197
+ ## [0.67.2] - 2026-04-14
198
+
199
+ ## [0.67.1] - 2026-04-13
200
+
201
+ ## [0.67.0] - 2026-04-13
202
+
203
+ ## [0.66.1] - 2026-04-08
204
+
205
+ ## [0.66.0] - 2026-04-08
206
+
207
+ ## [0.65.2] - 2026-04-06
208
+
209
+ ## [0.65.1] - 2026-04-05
210
+
211
+ ## [0.65.0] - 2026-04-03
212
+
213
+ ### Breaking Changes
214
+
215
+ - `AgentState` has been reshaped:
216
+ - `streamMessage` was renamed to `streamingMessage`
217
+ - `error` was renamed to `errorMessage`
218
+ - `isStreaming`, `streamingMessage`, `pendingToolCalls`, and `errorMessage` are now readonly in the public API
219
+ - `pendingToolCalls` is now typed as `ReadonlySet<string>`
220
+ - `tools` and `messages` are now accessor properties, and assigning either field copies the provided top-level array instead of preserving array identity
221
+ - `AgentOptions.initialState` no longer accepts runtime-owned fields. Remove `isStreaming`, `streamingMessage`, `pendingToolCalls`, and `errorMessage` from `initialState` values.
222
+ - Removed `Agent` mutator methods in favor of direct property access:
223
+ - `agent.setSystemPrompt(value)` -> `agent.state.systemPrompt = value`
224
+ - `agent.setModel(model)` -> `agent.state.model = model`
225
+ - `agent.setThinkingLevel(level)` -> `agent.state.thinkingLevel = level`
226
+ - `agent.setTools(tools)` -> `agent.state.tools = tools`
227
+ - `agent.replaceMessages(messages)` -> `agent.state.messages = messages`
228
+ - `agent.appendMessage(message)` -> `agent.state.messages.push(message)`
229
+ - `agent.clearMessages()` -> `agent.state.messages = []`
230
+ - `agent.setToolExecution(mode)` -> `agent.toolExecution = mode`
231
+ - `agent.setBeforeToolCall(fn)` -> `agent.beforeToolCall = fn`
232
+ - `agent.setAfterToolCall(fn)` -> `agent.afterToolCall = fn`
233
+ - `agent.setTransport(transport)` -> `agent.transport = transport`
234
+ - Removed queue mode getter/setter methods in favor of properties:
235
+ - `agent.setSteeringMode(mode)` -> `agent.steeringMode = mode`
236
+ - `agent.getSteeringMode()` -> `agent.steeringMode`
237
+ - `agent.setFollowUpMode(mode)` -> `agent.followUpMode = mode`
238
+ - `agent.getFollowUpMode()` -> `agent.followUpMode`
239
+ - `Agent.subscribe()` listeners are now awaited and receive the active `AbortSignal`:
240
+ - `agent.subscribe((event) => { ... })` -> `agent.subscribe(async (event, signal) => { ... })`
241
+ - `agent_end` is now the final emitted event for a run, but not the idle boundary
242
+ - `agent.waitForIdle()`, `agent.prompt(...)`, and `agent.continue()` now settle only after awaited `agent_end` listeners finish
243
+ - `agent.state.isStreaming` remains `true` until that settlement completes
244
+
245
+ ## [0.64.0] - 2026-03-29
246
+
247
+ ### Added
248
+
249
+ - Added `AgentTool.prepareArguments` hook to prepare raw tool call arguments before schema validation, enabling compatibility shims for resumed sessions with outdated tool schemas
250
+
251
+ ## [0.63.2] - 2026-03-29
252
+
253
+ ### Added
254
+
255
+ - Added `Agent.signal` to expose the active abort signal for the current turn, allowing callers to forward cancellation into nested async work ([#2660](https://github.com/badlogic/pi-mono/issues/2660))
256
+
257
+ ## [0.63.1] - 2026-03-27
258
+
259
+ ## [0.63.0] - 2026-03-27
260
+
261
+ ## [0.62.0] - 2026-03-23
262
+
263
+ ## [0.61.1] - 2026-03-20
264
+
265
+ ## [0.61.0] - 2026-03-20
266
+
267
+ ## [0.60.0] - 2026-03-18
268
+
269
+ ## [0.59.0] - 2026-03-17
270
+
271
+ ## [0.58.4] - 2026-03-16
272
+
273
+ ### Fixed
274
+
275
+ - Fixed steering messages to wait until the current assistant message's tool-call batch fully finishes instead of skipping pending tool calls.
276
+
277
+ ## [0.58.3] - 2026-03-15
278
+
279
+ ## [0.58.2] - 2026-03-15
280
+
281
+ ## [0.58.1] - 2026-03-14
282
+
283
+ ## [0.58.0] - 2026-03-14
284
+
285
+ ### Added
286
+
287
+ - Added `beforeToolCall` and `afterToolCall` hooks to `AgentOptions` and `AgentLoopConfig` for preflight blocking and post-execution tool result mutation.
288
+
289
+ ### Changed
290
+
291
+ - Added configurable tool execution mode to `Agent` and `agentLoop` via `toolExecution: "parallel" | "sequential"`, with `parallel` as the default. Parallel mode preflights tool calls sequentially, executes allowed tools concurrently, and emits final tool results in assistant source order.
292
+
293
+ ## [0.57.1] - 2026-03-07
294
+
295
+ ## [0.57.0] - 2026-03-07
296
+
297
+ ## [0.56.3] - 2026-03-06
298
+
299
+ ## [0.56.2] - 2026-03-05
300
+
301
+ ## [0.56.1] - 2026-03-05
302
+
303
+ ## [0.56.0] - 2026-03-04
304
+
305
+ ## [0.55.4] - 2026-03-02
306
+
307
+ ## [0.55.3] - 2026-02-27
308
+
309
+ ## [0.55.2] - 2026-02-27
310
+
311
+ ## [0.55.1] - 2026-02-26
312
+
313
+ ## [0.55.0] - 2026-02-24
314
+
315
+ ## [0.54.2] - 2026-02-23
316
+
317
+ ## [0.54.1] - 2026-02-22
318
+
319
+ ## [0.54.0] - 2026-02-19
320
+
321
+ ## [0.53.1] - 2026-02-19
322
+
323
+ ## [0.53.0] - 2026-02-17
324
+
325
+ ## [0.52.12] - 2026-02-13
326
+
327
+ ### Added
328
+
329
+ - Added `transport` to `AgentOptions` and `AgentLoopConfig` forwarding, allowing stream transport preference (`"sse"`, `"websocket"`, `"auto"`) to flow into provider calls.
330
+
331
+ ## [0.52.11] - 2026-02-13
332
+
333
+ ## [0.52.10] - 2026-02-12
334
+
335
+ ## [0.52.9] - 2026-02-08
336
+
337
+ ## [0.52.8] - 2026-02-07
338
+
339
+ ## [0.52.7] - 2026-02-06
340
+
341
+ ### Fixed
342
+
343
+ - Fixed `continue()` to resume queued steering/follow-up messages when context currently ends in an assistant message, and preserved one-at-a-time steering ordering during assistant-tail resumes ([#1312](https://github.com/badlogic/pi-mono/pull/1312) by [@ferologics](https://github.com/ferologics))
344
+
345
+ ## [0.52.6] - 2026-02-05
346
+
347
+ ## [0.52.5] - 2026-02-05
348
+
349
+ ## [0.52.4] - 2026-02-05
350
+
351
+ ## [0.52.3] - 2026-02-05
352
+
353
+ ## [0.52.2] - 2026-02-05
354
+
355
+ ## [0.52.1] - 2026-02-05
356
+
357
+ ## [0.52.0] - 2026-02-05
358
+
359
+ ## [0.51.6] - 2026-02-04
360
+
361
+ ## [0.51.5] - 2026-02-04
362
+
363
+ ## [0.51.4] - 2026-02-03
364
+
365
+ ## [0.51.3] - 2026-02-03
366
+
367
+ ## [0.51.2] - 2026-02-03
368
+
369
+ ## [0.51.1] - 2026-02-02
370
+
371
+ ## [0.51.0] - 2026-02-01
372
+
373
+ ## [0.50.9] - 2026-02-01
374
+
375
+ ## [0.50.8] - 2026-02-01
376
+
377
+ ### Added
378
+
379
+ - Added `maxRetryDelayMs` option to `AgentOptions` to cap server-requested retry delays. Passed through to the underlying stream function. ([#1123](https://github.com/badlogic/pi-mono/issues/1123))
380
+
381
+ ## [0.50.7] - 2026-01-31
382
+
383
+ ## [0.50.6] - 2026-01-30
384
+
385
+ ## [0.50.5] - 2026-01-30
386
+
387
+ ## [0.50.3] - 2026-01-29
388
+
389
+ ## [0.50.2] - 2026-01-29
390
+
391
+ ## [0.50.1] - 2026-01-26
392
+
393
+ ## [0.50.0] - 2026-01-26
394
+
395
+ ## [0.49.3] - 2026-01-22
396
+
397
+ ## [0.49.2] - 2026-01-19
398
+
399
+ ## [0.49.1] - 2026-01-18
400
+
401
+ ## [0.49.0] - 2026-01-17
402
+
403
+ ## [0.48.0] - 2026-01-16
404
+
405
+ ## [0.47.0] - 2026-01-16
406
+
407
+ ## [0.46.0] - 2026-01-15
408
+
409
+ ## [0.45.7] - 2026-01-13
410
+
411
+ ## [0.45.6] - 2026-01-13
412
+
413
+ ## [0.45.5] - 2026-01-13
414
+
415
+ ## [0.45.4] - 2026-01-13
416
+
417
+ ## [0.45.3] - 2026-01-13
418
+
419
+ ## [0.45.2] - 2026-01-13
420
+
421
+ ## [0.45.1] - 2026-01-13
422
+
423
+ ## [0.45.0] - 2026-01-13
424
+
425
+ ## [0.44.0] - 2026-01-12
426
+
427
+ ## [0.43.0] - 2026-01-11
428
+
429
+ ## [0.42.5] - 2026-01-11
430
+
431
+ ## [0.42.4] - 2026-01-10
432
+
433
+ ## [0.42.3] - 2026-01-10
434
+
435
+ ## [0.42.2] - 2026-01-10
436
+
437
+ ## [0.42.1] - 2026-01-09
438
+
439
+ ## [0.42.0] - 2026-01-09
440
+
441
+ ## [0.41.0] - 2026-01-09
442
+
443
+ ## [0.40.1] - 2026-01-09
444
+
445
+ ## [0.40.0] - 2026-01-08
446
+
447
+ ## [0.39.1] - 2026-01-08
448
+
449
+ ## [0.39.0] - 2026-01-08
450
+
451
+ ## [0.38.0] - 2026-01-08
452
+
453
+ ### Added
454
+
455
+ - `thinkingBudgets` option on `Agent` and `AgentOptions` to customize token budgets per thinking level ([#529](https://github.com/badlogic/pi-mono/pull/529) by [@melihmucuk](https://github.com/melihmucuk))
456
+
457
+ ## [0.37.8] - 2026-01-07
458
+
459
+ ## [0.37.7] - 2026-01-07
460
+
461
+ ## [0.37.6] - 2026-01-06
462
+
463
+ ## [0.37.5] - 2026-01-06
464
+
465
+ ## [0.37.4] - 2026-01-06
466
+
467
+ ## [0.37.3] - 2026-01-06
468
+
469
+ ### Added
470
+
471
+ - `sessionId` option on `Agent` to forward session identifiers to LLM providers for session-based caching.
472
+
473
+ ## [0.37.2] - 2026-01-05
474
+
475
+ ## [0.37.1] - 2026-01-05
476
+
477
+ ## [0.37.0] - 2026-01-05
478
+
479
+ ### Fixed
480
+
481
+ - `minimal` thinking level now maps to `minimal` reasoning effort instead of being treated as `low`.
482
+
483
+ ## [0.36.0] - 2026-01-05
484
+
485
+ ## [0.35.0] - 2026-01-05
486
+
487
+ ## [0.34.2] - 2026-01-04
488
+
489
+ ## [0.34.1] - 2026-01-04
490
+
491
+ ## [0.34.0] - 2026-01-04
492
+
493
+ ## [0.33.0] - 2026-01-04
494
+
495
+ ## [0.32.3] - 2026-01-03
496
+
497
+ ## [0.32.2] - 2026-01-03
498
+
499
+ ## [0.32.1] - 2026-01-03
500
+
501
+ ## [0.32.0] - 2026-01-03
502
+
503
+ ### Breaking Changes
504
+
505
+ - **Queue API replaced with steer/followUp**: The `queueMessage()` method has been split into two methods with different delivery semantics ([#403](https://github.com/badlogic/pi-mono/issues/403)):
506
+ - `steer(msg)`: Interrupts the agent mid-run. Delivered after current tool execution, skips remaining tools.
507
+ - `followUp(msg)`: Waits until the agent finishes. Delivered only when there are no more tool calls or steering messages.
508
+ - **Queue mode renamed**: `queueMode` option renamed to `steeringMode`. Added new `followUpMode` option. Both control whether messages are delivered one-at-a-time or all at once.
509
+ - **AgentLoopConfig callbacks renamed**: `getQueuedMessages` split into `getSteeringMessages` and `getFollowUpMessages`.
510
+ - **Agent methods renamed**:
511
+ - `queueMessage()` → `steer()` and `followUp()`
512
+ - `clearMessageQueue()` → `clearSteeringQueue()`, `clearFollowUpQueue()`, `clearAllQueues()`
513
+ - `setQueueMode()`/`getQueueMode()` → `setSteeringMode()`/`getSteeringMode()` and `setFollowUpMode()`/`getFollowUpMode()`
514
+
515
+ ### Fixed
516
+
517
+ - `prompt()` and `continue()` now throw if called while the agent is already streaming, preventing race conditions and corrupted state. Use `steer()` or `followUp()` to queue messages during streaming, or `await` the previous call.
518
+
519
+ ## [0.31.1] - 2026-01-02
520
+
521
+ ## [0.31.0] - 2026-01-02
522
+
523
+ ### Breaking Changes
524
+
525
+ - **Transport abstraction removed**: `ProviderTransport`, `AppTransport`, and `AgentTransport` interface have been removed. Use the `streamFn` option directly for custom streaming implementations.
526
+
527
+ - **Agent options renamed**:
528
+ - `transport` → removed (use `streamFn` instead)
529
+ - `messageTransformer` → `convertToLlm`
530
+ - `preprocessor` → `transformContext`
531
+
532
+ - **`AppMessage` renamed to `AgentMessage`**: All references to `AppMessage` have been renamed to `AgentMessage` for consistency.
533
+
534
+ - **`CustomMessages` renamed to `CustomAgentMessages`**: The declaration merging interface has been renamed.
535
+
536
+ - **`UserMessageWithAttachments` and `Attachment` types removed**: Attachment handling is now the responsibility of the `convertToLlm` function.
537
+
538
+ - **Agent loop moved from `@mariozechner/pi-ai`**: The `agentLoop`, `agentLoopContinue`, and related types have moved to this package. Import from `@mariozechner/pi-agent-core` instead.
539
+
540
+ ### Added
541
+
542
+ - `streamFn` option on `Agent` for custom stream implementations. Default uses `streamSimple` from pi-ai.
543
+
544
+ - `streamProxy()` utility function for browser apps that need to proxy LLM calls through a backend server. Replaces the removed `AppTransport`.
545
+
546
+ - `getApiKey` option for dynamic API key resolution (useful for expiring OAuth tokens like GitHub Copilot).
547
+
548
+ - `agentLoop()` and `agentLoopContinue()` low-level functions for running the agent loop without the `Agent` class wrapper.
549
+
550
+ - New exported types: `AgentLoopConfig`, `AgentContext`, `AgentTool`, `AgentToolResult`, `AgentToolUpdateCallback`, `StreamFn`.
551
+
552
+ ### Changed
553
+
554
+ - `Agent` constructor now has all options optional (empty options use defaults).
555
+
556
+ - `queueMessage()` is now synchronous (no longer returns a Promise).
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mario Zechner
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.