Skip to content

feat: :dev runseal wrapper + cli/provider fixes - #1

Merged
PerishCode merged 2 commits into
mainfrom
feat/dev-runseal-wrapper
Jun 29, 2026
Merged

PerishCode merged 2 commits into
mainfrom
feat/dev-runseal-wrapper

Conversation

@PerishCode

Copy link
Copy Markdown
Owner

Summary

First runseal wrapper for santi plus two fixes found while standing up the first live turn.

:dev runseal wrapper (runseal :dev start|stop|restart|logs|status)

  • First runseal integration: runseal.toml ([deno] config + permissions, no lock) and .runseal/ (Deno-native, zero remote deps).
  • pm2-like lightweight process manager. Runtime stays untouched — the arg-stamp rides a Deno launcher process, not santi-api.
  • Single source of truth = the arg-stamp on the launcher's argv (--santi-stamp=v=1;a=santi-api;n=…;port=…), discovered via ps. .tmp/dev/santi-api.json is cache only, always reconciled against ps.
  • stop SIGTERMs the launcher, which forwards to its santi-api child. Logs pumped via writeSync (pipeTo to an FsFile buffers until close) and truncated per run.

Fixes

  • santi-cli session send posted {"text":...}; API expects {"content":[{"type":"text",...}]} → was returning 422. Now builds the MessagePart body.
  • complete_turn hardcoded provider_state.provider = "openai"; now threads the real provider name from ProviderClient::metadata() (e.g. siliconflow).

Verification

  • cargo fmt --check, clippy -D warnings, cargo test --workspace green.
  • deno check / fmt / lint green on .runseal/.
  • Full :dev lifecycle 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

PerishCode and others added 2 commits June 29, 2026 15:07
- 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
PerishCode merged commit 9e8b6c6 into main Jun 29, 2026
3 checks passed
@PerishCode
PerishCode deleted the feat/dev-runseal-wrapper branch June 29, 2026 07:10
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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant