You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -17,6 +17,7 @@ GitHub Releases page; `0.8.0` is the new starting line.
17
17
18
18
-**Parallel streamed tool calls are now correlated safely.** Interleaved argument chunks stay attached to their indexed calls, malformed or truncated call streams stop before tool execution, and failed attempts are not retried after output has already been shown.
19
19
-**Provider compatibility and Z.AI routing are now explicit.** Immutable compatibility profiles keep request-format quirks behind the chat-provider boundary, while independent Z.AI Coding Plan and API login routes use separate credentials, endpoints, model identities, catalog refresh, logout, and usage/rate-limit state. Curated GLM requests now apply exact context/output limits, thinking controls, reasoning replay, and tool-stream support without activating for local or unknown models.
20
+
-**Tool execution is now supervised as a terminal batch.** A private execution engine preserves the Toolset registry and legacy per-call API while centralizing ordered results, deduplication, callbacks, and batch summaries; cancellation is bounded, late work stays owned, and new batches fail closed until timed-out cleanup drains.
The toolset is both a registry and an execution boundary. It hides tools from the LLM when needed, validates tool names, parses JSON arguments, triggers hooks, converts exceptions to `ToolRuntimeError`, and returns async `ToolResult` tasks to `pythinker_core.step`. The advertised tool list is filtered by the active execution profile, subagent/root role, plan-mode state, and hard permission profile before each model call; tool-specific execution guards still run even if a hidden tool is somehow called. MCP tools are registered as local wrappers. Wire external tools are sent to the active Wire client as `ToolCallRequest` messages and wait for a client-provided result.
220
+
The toolset is both a registry and an execution boundary. For Pythinker Soul, `pythinker_core.step`
221
+
passes the complete terminal call batch and immutable `ToolBatchContext` to
222
+
`PythinkerToolset.handle_batch`. Its non-exported `ToolExecutionEngine` validates tool names, parses
223
+
JSON arguments, applies duplicate/consecutive-call policy, schedules calls through the reader-writer
224
+
gate, triggers hooks, converts exceptions to `ToolRuntimeError`, and supervises ordered results and
225
+
bounded cancellation through a `ToolBatchHandle`. `StepResult.tool_results()` settles that owned
226
+
batch before Soul appends the assistant and tool messages to `Context`. Core's per-call
227
+
`Toolset.handle()` path remains only as the compatibility fallback for toolsets that do not
228
+
implement `BatchToolset`.
229
+
230
+
The advertised tool list is filtered by the active execution profile, subagent/root role,
231
+
plan-mode state, and hard permission profile before each model call; tool-specific execution guards
232
+
still run even if a hidden tool is somehow called. MCP tools are registered as local wrappers. Wire
233
+
external tools are sent to the active Wire client as `ToolCallRequest` messages and wait for a
|`packages/pythinker-host/`| OS abstraction for filesystem + shell across local and SSH backends via a context-var-dispatched `Host` protocol. |`Host`, `HostPath`, `LocalHost`, `HostProcess`, `get_current_host`/`set_current_host`|
304
307
|`packages/pythinker-review/`| Standalone review/security/debug engine and stateful Reviewflow; strict Pydantic schemas with fail-closed evidence validation. State in `.pythinker-review/` and `.pythinker-review-flow/`. See `packages/pythinker-review/AGENTS.md`. |`run_engine`, `ReviewLLM`, `Finding`, `RawFinding`, `ReviewerOutput`, Reviewflow `init`/`map`/`review`/`fix`|
305
308
|`packages/pythinker-code/`| Thin distribution package exposing the `pythinker-code` script. | — |
Copy file name to clipboardExpand all lines: docs/en/release-notes/changelog.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -19,6 +19,7 @@ GitHub Releases page; `0.8.0` is the new starting line.
19
19
20
20
-**Parallel streamed tool calls are now correlated safely.** Interleaved argument chunks stay attached to their indexed calls, malformed or truncated call streams stop before tool execution, and failed attempts are not retried after output has already been shown.
21
21
-**Provider compatibility and Z.AI routing are now explicit.** Immutable compatibility profiles keep request-format quirks behind the chat-provider boundary, while independent Z.AI Coding Plan and API login routes use separate credentials, endpoints, model identities, catalog refresh, logout, and usage/rate-limit state. Curated GLM requests now apply exact context/output limits, thinking controls, reasoning replay, and tool-stream support without activating for local or unknown models.
22
+
-**Tool execution is now supervised as a terminal batch.** A private execution engine preserves the Toolset registry and legacy per-call API while centralizing ordered results, deduplication, callbacks, and batch summaries; cancellation is bounded, late work stays owned, and new batches fail closed until timed-out cleanup drains.
0 commit comments