feat: :dev runseal wrapper + cli/provider fixes - #1
Merged
Merged
Conversation
- santi-cli `session send` posted {"text":...}; the API expects
{"content":[{"type":"text",...}]}. Build the MessagePart body so send
returns 200 instead of 422.
- complete_turn hardcoded provider_state.provider = "openai"; thread the
real provider name from ProviderClient::metadata() (e.g. "siliconflow").
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
First runseal integration for santi (runseal.toml + .runseal/, Deno-native, zero remote deps). `runseal :dev start|stop|restart|logs|status` is a pm2-like lightweight process manager. The runtime stays untouched: the arg-stamp rides a Deno launcher process, not santi-api. The single source of truth is the stamp on the launcher's argv (--santi-stamp=v=1;a=santi-api;n=…;port=…), discovered via `ps`; the .tmp/dev/santi-api.json file is cache only, always reconciled against `ps`. stop SIGTERMs the launcher, which forwards to its santi-api child. Logs are pumped with writeSync (pipeTo to a FsFile buffers until close) and truncated per run. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
PerishCode
added a commit
that referenced
this pull request
Jun 30, 2026
Reshape ProviderClient's input around a convergent typed-item algebra (ProviderItem: Message / Reasoning / FunctionCall / FunctionCallOutput — the OpenAI Responses items ≈ Anthropic content blocks ≈ Gemini parts shape) and make chat_completions a downward compatibility adapter. This dissolves three threads at once: - Unification: the function_call_outputs side-channel is gone. The DB timeline is the single source of truth; assembly_input projects it to items and the turn loop re-derives input each round (in-flight calls are just the latest items). No tools_through_seq boundary. - #2 (previous_response_id): demoted to a dormant soft transport cache on the Responses adapter; both paths full-replay from the timeline for now. - #1 raw-item seam: tool_calls now persist the provider's raw item + item_id + response_id, so the Responses adapter can replay verbatim. Other changes: - DC4b: assistant output is stored per-round, interleaved with tool items in the soul_session replay timeline (append_soul_assistant_text); the session-visible reply stays one lumped message (DC6). - DC5 (verified live): GLM-5.2 accepts tool history with no reasoning_content, so the compat adapter drops Reasoning. Reasoning stays a first-class item (summary only) so the echo can return later. - Schema bumped to 10 (destructive migration; soul/session memory files survive — DC3). Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
PerishCode
pushed a commit
that referenced
this pull request
Aug 1, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
First runseal wrapper for santi plus two fixes found while standing up the first live turn.
:devrunseal wrapper (runseal :dev start|stop|restart|logs|status)runseal.toml([deno] config + permissions, no lock) and.runseal/(Deno-native, zero remote deps).santi-api.--santi-stamp=v=1;a=santi-api;n=…;port=…), discovered viaps..tmp/dev/santi-api.jsonis cache only, always reconciled againstps.stopSIGTERMs the launcher, which forwards to itssanti-apichild. Logs pumped viawriteSync(pipeTo to an FsFile buffers until close) and truncated per run.Fixes
santi-cli session sendposted{"text":...}; API expects{"content":[{"type":"text",...}]}→ was returning 422. Now builds theMessagePartbody.complete_turnhardcodedprovider_state.provider = "openai"; now threads the real provider name fromProviderClient::metadata()(e.g.siliconflow).Verification
cargo fmt --check,clippy -D warnings,cargo test --workspacegreen.deno check/fmt/lintgreen on.runseal/.:devlifecycle exercised (start → status → live logs → restart → clean stop, ps empty after) plus a real turn through the managed server against SiliconFlow GLM-5.2.🤖 Generated with Claude Code