Implement vyzo-concurrency fixes: threaded JSON-RPC server, robust REPL sessions #3

Open
ober wants to merge 0 commits from ober/vyzo-concurrency-fixes into master AGit
Owner

Threaded MCP server (mcp/jsonrpc.ss):

  • Fast-path methods (ping/tools/list) answered inline, overtaking queued
    slow tool calls; per-request worker pool with bounded queues
  • request.received/request.start logging now includes redacted params
  • Clean startup banner; on-disconnect REPL session teardown

REPL sessions (repl.ss):

  • Dedicated reader thread per session pumping gxi output into a mutex+cv
    guarded FIFO line queue (two-list, amortized O(1)); evals pop with a
    fresh timeout per line so streaming output never hits the idle deadline
  • Per-session eval lock serializes dependent evals; bounded output buffer
  • proc-kill-all-children! clears the children registry

Build-ish tools (tools/*):

  • with-project-lock wrapping in make, run-tests, compile-check, and
    build-and-report (build.ss restore now exception-safe via try/finally)
  • check-syntax: compute parse-error line/column without touching the
    datum-parsing readenv (##vector-ref on it segfaults); emit EOF-position
    location for incomplete forms

Test client + suites (test/*):

  • mcp-client rewritten around the threaded server semantics
  • protocol-test: params redaction, fast-reply overtake, REPL eval
    serialization cases; env-derived tool paths
  • proc-test: children registry roundtrip and kill-all clearing
Threaded MCP server (mcp/jsonrpc.ss): - Fast-path methods (ping/tools/list) answered inline, overtaking queued slow tool calls; per-request worker pool with bounded queues - request.received/request.start logging now includes redacted params - Clean startup banner; on-disconnect REPL session teardown REPL sessions (repl.ss): - Dedicated reader thread per session pumping gxi output into a mutex+cv guarded FIFO line queue (two-list, amortized O(1)); evals pop with a fresh timeout per line so streaming output never hits the idle deadline - Per-session eval lock serializes dependent evals; bounded output buffer - proc-kill-all-children! clears the children registry Build-ish tools (tools/*): - with-project-lock wrapping in make, run-tests, compile-check, and build-and-report (build.ss restore now exception-safe via try/finally) - check-syntax: compute parse-error line/column without touching the datum-parsing readenv (##vector-ref on it segfaults); emit EOF-position location for incomplete forms Test client + suites (test/*): - mcp-client rewritten around the threaded server semantics - protocol-test: params redaction, fast-reply overtake, REPL eval serialization cases; env-derived tool paths - proc-test: children registry roundtrip and kill-all clearing
Threaded MCP server (mcp/jsonrpc.ss):
- Fast-path methods (ping/tools/list) answered inline, overtaking queued
  slow tool calls; per-request worker pool with bounded queues
- request.received/request.start logging now includes redacted params
- Clean startup banner; on-disconnect REPL session teardown

REPL sessions (repl.ss):
- Dedicated reader thread per session pumping gxi output into a mutex+cv
  guarded FIFO line queue (two-list, amortized O(1)); evals pop with a
  fresh timeout per line so streaming output never hits the idle deadline
- Per-session eval lock serializes dependent evals; bounded output buffer
- proc-kill-all-children! clears the children registry

Build-ish tools (tools/*):
- with-project-lock wrapping in make, run-tests, compile-check, and
  build-and-report (build.ss restore now exception-safe via try/finally)
- check-syntax: compute parse-error line/column without touching the
  datum-parsing readenv (##vector-ref on it segfaults); emit EOF-position
  location for incomplete forms

Test client + suites (test/*):
- mcp-client rewritten around the threaded server semantics
- protocol-test: params redaction, fast-reply overtake, REPL eval
  serialization cases; env-derived tool paths
- proc-test: children registry roundtrip and kill-all clearing
ober force-pushed ober/vyzo-concurrency-fixes from 0c8b1d94fe to ad344b217b 2026-09-20 23:57:58 +00:00 Compare
This branch is already included in the target branch. There is nothing to merge.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin +refs/pull/3/head:ober/vyzo-concurrency-fixes
git switch ober/vyzo-concurrency-fixes

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch master
git merge --no-ff ober/vyzo-concurrency-fixes
git switch ober/vyzo-concurrency-fixes
git rebase master
git switch master
git merge --ff-only ober/vyzo-concurrency-fixes
git switch ober/vyzo-concurrency-fixes
git rebase master
git switch master
git merge --no-ff ober/vyzo-concurrency-fixes
git switch master
git merge --squash ober/vyzo-concurrency-fixes
git switch master
git merge --ff-only ober/vyzo-concurrency-fixes
git switch master
git merge ober/vyzo-concurrency-fixes
git push origin master
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
ober/gerbil-mcp!3
No description provided.