zidane 5.6.11 → 5.6.13

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 (64) hide show
  1. package/README.md +19 -2
  2. package/dist/{agent-C9AKTU_V.d.ts → agent-ClkpElCZ.d.ts} +540 -55
  3. package/dist/agent-ClkpElCZ.d.ts.map +1 -0
  4. package/dist/chat.d.ts +47 -17
  5. package/dist/chat.d.ts.map +1 -1
  6. package/dist/chat.js +3 -3
  7. package/dist/{index-6f4T7Gc0.d.ts → index-CTDMMdIy.d.ts} +348 -3
  8. package/dist/index-CTDMMdIy.d.ts.map +1 -0
  9. package/dist/{index-DPN7TcXK.d.ts → index-v3Tzobqr.d.ts} +2 -2
  10. package/dist/{index-DPN7TcXK.d.ts.map → index-v3Tzobqr.d.ts.map} +1 -1
  11. package/dist/index.d.ts +4 -4
  12. package/dist/index.js +169 -8
  13. package/dist/index.js.map +1 -1
  14. package/dist/{login-BindcfKi.js → login-DS3sf6b5.js} +4 -4
  15. package/dist/{login-BindcfKi.js.map → login-DS3sf6b5.js.map} +1 -1
  16. package/dist/{mcp-0jRkIV0g.js → mcp-DGeB7-3D.js} +13 -2
  17. package/dist/mcp-DGeB7-3D.js.map +1 -0
  18. package/dist/mcp.d.ts +1 -1
  19. package/dist/mcp.js +1 -1
  20. package/dist/{messages-BfmXLDT4.js → messages-Dym8S_YH.js} +303 -8
  21. package/dist/messages-Dym8S_YH.js.map +1 -0
  22. package/dist/{presets-CmzMeWg2.js → presets-CZXS_87d.js} +2 -2
  23. package/dist/{presets-CmzMeWg2.js.map → presets-CZXS_87d.js.map} +1 -1
  24. package/dist/presets.d.ts +2 -2
  25. package/dist/presets.js +1 -1
  26. package/dist/{providers-C_ahnRBS.js → providers-beXyD9W9.js} +137 -21
  27. package/dist/providers-beXyD9W9.js.map +1 -0
  28. package/dist/providers.d.ts +2 -2
  29. package/dist/providers.js +3 -3
  30. package/dist/restate.d.ts +1 -1
  31. package/dist/session/sqlite.d.ts +1 -1
  32. package/dist/{session-PUzXZlG6.js → session-BRIsmBSY.js} +5 -2
  33. package/dist/session-BRIsmBSY.js.map +1 -0
  34. package/dist/session.d.ts +2 -2
  35. package/dist/session.js +3 -3
  36. package/dist/skills.d.ts +2 -2
  37. package/dist/{tools-CxOfTt3R.js → tools-DE9pR_NG.js} +515 -116
  38. package/dist/tools-DE9pR_NG.js.map +1 -0
  39. package/dist/tools.d.ts +3 -3
  40. package/dist/tools.js +1 -1
  41. package/dist/{transcript-anchors-DDCHSDdX.d.ts → transcript-anchors-D0TR6djV.d.ts} +4 -4
  42. package/dist/transcript-anchors-D0TR6djV.d.ts.map +1 -0
  43. package/dist/tui.d.ts +2 -2
  44. package/dist/tui.d.ts.map +1 -1
  45. package/dist/tui.js +12 -8
  46. package/dist/tui.js.map +1 -1
  47. package/dist/{turn-operations-CxE8BBau.js → turn-operations-6Yls2HuG.js} +907 -42
  48. package/dist/turn-operations-6Yls2HuG.js.map +1 -0
  49. package/dist/types-oKPBdCmL.js.map +1 -1
  50. package/dist/types.d.ts +3 -3
  51. package/docs/ARCHITECTURE.md +101 -20
  52. package/docs/CHAT.md +27 -5
  53. package/docs/RESTATE.md +1 -1
  54. package/docs/SKILL.md +39 -3
  55. package/package.json +5 -2
  56. package/dist/agent-C9AKTU_V.d.ts.map +0 -1
  57. package/dist/index-6f4T7Gc0.d.ts.map +0 -1
  58. package/dist/mcp-0jRkIV0g.js.map +0 -1
  59. package/dist/messages-BfmXLDT4.js.map +0 -1
  60. package/dist/providers-C_ahnRBS.js.map +0 -1
  61. package/dist/session-PUzXZlG6.js.map +0 -1
  62. package/dist/tools-CxOfTt3R.js.map +0 -1
  63. package/dist/transcript-anchors-DDCHSDdX.d.ts.map +0 -1
  64. package/dist/turn-operations-CxE8BBau.js.map +0 -1
package/README.md CHANGED
@@ -220,7 +220,7 @@ openaiCompat({
220
220
  | `listFiles` | Directory listing. |
221
221
  | `spawn` | Sub-agent. |
222
222
 
223
- Opt-in (via `import from 'zidane'`): `glob` (Bun.Glob; shells out in docker/sandbox), `grep` (ripgrep + Bun.Glob fallback; full Claude Code Grep semantics), `createInteractionTool` (HITL factory).
223
+ Opt-in (via `import from 'zidane'`): `glob` (`node:fs/promises` glob; shells out in docker/sandbox), `grep` (ripgrep + `node:fs/promises` glob fallback; full Claude Code Grep semantics), `createInteractionTool` (HITL factory).
224
224
 
225
225
  `skills_use` / `skills_read` / `skills_run_script` auto-inject when the skills catalog is non-empty.
226
226
 
@@ -504,6 +504,8 @@ Storage backends — `createMemoryStore()` (in-memory), `createSqliteStore({ pat
504
504
 
505
505
  Restore via `await loadSession(store, id)`. Session hooks: `session:start`, `session:turns`, `session:end` (always fires, carries `turnRange`).
506
506
 
507
+ **Building provider requests outside `agent.run()`** — use `session.toMessages({ provider })` instead of `session.turns`. Raw turns can carry orphan `tool_use` / `tool_result` blocks from interrupted runs, partial-result writes, or compaction boundaries — feeding them to a provider hits `tool_result must be preceded by a tool_call with the same toolCallId`. `toMessages()` projects through the same defensive pairing repair the loop runs at wire-send time and (with `provider`) enforces the user-tail invariant for prefill-rejecting models. Pure, idempotent, never mutates `session.turns`; do not write the result back via `setTurns` / `appendTurns` (synthetic placeholders would contaminate history). Standalone variant `toWireMessages(turns, opts?)` for callers holding raw `SessionTurn[]` from `store.getTurns()`.
508
+
507
509
  ## MCP Servers
508
510
 
509
511
  Connect any MCP server. Tools are namespaced `mcp_{server}_{tool}`. Connections are lazy (first `run()`) and reused; all servers bootstrap in parallel.
@@ -693,7 +695,7 @@ type ToolResultContent =
693
695
 
694
696
  Image-producing tools (MCP browsers, screenshots) return `ToolResultContent[]` — routed natively on providers with `imageInToolResult: true`, via companion user message elsewhere. Flatten with `toolResultToText(output)`.
695
697
 
696
- External interop converters: `fromAnthropic`, `toAnthropic`, `fromOpenAI`, `toOpenAI`, `autoDetectAndConvert` (re-exported from `zidane`).
698
+ External interop converters: `fromAnthropic`, `toAnthropic`, `fromOpenAI`, `toOpenAI`, `autoDetectAndConvert` (re-exported from `zidane`). Wire-safety helpers: `toWireMessages(turns, opts?)`, `ensureToolResultPairing(messages, opts?)`, `ensureEndsWithUserMessage(messages, provider)` — apply when sending outside `agent.run()` to avoid orphan `tool_use` 400s; see [Sessions](#sessions).
697
699
 
698
700
  ## Typed Errors
699
701
 
@@ -719,6 +721,21 @@ catch (err) {
719
721
 
720
722
  Set `behavior.maxCostUsd` and/or `behavior.maxTotalTokens` to trip the budget circuit breaker (post-turn check, soft cap). See [docs/ARCHITECTURE.md](./docs/ARCHITECTURE.md) → run-level budget.
721
723
 
724
+ ### Retry-with-backoff (new default)
725
+
726
+ Transient provider failures (429, 5xx, Anthropic `overloaded_error` mid-stream, OpenAI-compat stream truncation, pi-ai rate-limit / unavailable messages) now retry with exponential backoff + jitter **by default**. Default policy: **3 attempts, 1s → 2s → 4s with full jitter, capped at 30s per delay**, `retry-after` / `retry-after-ms` headers honored. Worst-case run latency on terminal failure: ~2× `maxDelayMs` (so ~60s) before the error surfaces.
727
+
728
+ ```ts
729
+ await agent.run({
730
+ prompt: '...',
731
+ behavior: {
732
+ retry: { maxAttempts: 3, initialDelayMs: 1000, maxDelayMs: 30_000 },
733
+ },
734
+ })
735
+ ```
736
+
737
+ Set `behavior.retry.maxAttempts: 1` to restore the pre-v5.7 fail-fast behavior. Retry skips when any output has already streamed this turn (replaying over partial text would corrupt the transcript). Observe via the `stream:retry` hook (`{ attempt, nextAttempt, delayMs, err, statusCode?, requestId? }`); `stream:error` only fires on the terminal failure.
738
+
722
739
  ## Structured Output
723
740
 
724
741
  Force the final response to a JSON Schema via provider-level tool forcing. Lands on `stats.output` and fires the `output` hook (`ctx.output`, `ctx.schema`).