kyle and Claude Opus 5.5
33994d0dc6
loopd, bxctl, inferproxy: read args_os instead of panicking
...
M3a review finding 7, for the other three roles. loopd keeps its config path
as a path; bxctl and inferproxy take text arguments and answer one that is
not UTF-8 with their usage.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 21:07:59 -07:00
kyle
2249f7fd91
Add the end-to-end test: loopd against the real brokerd binary
...
Implemented-By: Grok 4.6
2026-09-22 20:25:40 -07:00
kyle and Claude Opus 5.5
00a85c124d
loopd: read on a socket whose peer closed, instead of failing on macOS
...
macOS refuses every socket option with EINVAL once the peer has closed
(XNU sosetoptlock, bsd/kern/uipc_socket.c), even with unread data still
buffered. loopd set a read timeout before each read, so on macOS every
frame or response that arrived just before the peer closed was lost:
BrokerPort reported the broker unavailable with "os error 22", and the
llama client failed the same way. Twelve loopd test binaries failed on
macOS; Linux never refuses, so the gate on Talos did not see it.
Both places now go through socket::set_read_timeout, which on Apple
targets takes that one refusal as success: a socket shut in both
directions returns its data or the end at once and cannot block. A
zero timeout is still an error.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com >
2026-09-22 18:27:31 -07:00
kyle
469be2c0a1
Add BrokerPort: loopd asks brokerd for every tool call
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-20 19:40:35 -07:00
kyle
1ceaa36b9b
Give loopd's tool port approvals, its own clock and plain denials
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-20 17:43:05 -07:00
kyle
c060c80c7e
Fix four review findings: busy release, poison recovery, core.md errors, chat loop
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 21:06:58 -07:00
kyle
34951084cc
Extend on-device verification to the agent loop
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 20:38:56 -07:00
kyle
eb8fc5f920
Add the loopd serve command
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 19:50:32 -07:00
kyle
8bc835f623
Add the channel server on loop.sock
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 19:43:12 -07:00
kyle
9063cf958e
Add the turn loop with its limits
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 19:14:52 -07:00
kyle
9704a64507
Add the session store: baseline file and append-only log
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 18:42:00 -07:00
kyle
b152ba3cd3
Add the baseline and the log replay function
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 18:31:33 -07:00
kyle
fd7ade9689
Add the tool port, registry, dispatch and the fake tools
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 18:12:45 -07:00
kyle
ec5d887daa
Add the paths, channel, loop and baseline config tables
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 17:36:20 -07:00
kyle
0f5213a466
Return chunked body data as soon as it is available
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 16:15:22 -07:00
kyle
ad7bce88a4
Add on-device verification for the inference path
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 15:32:20 -07:00
kyle
f1d880568f
Add the startup self-test and the loopd selftest command
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 15:28:37 -07:00
kyle
59cf89e7ba
Add the per-slot gate and chat_with_retry
...
Implemented SlotGate (one request in flight per server slot, FIFO queue,
bounded) and chat_with_retry (retry only server-gone errors, jittered
backoff within a window and attempt budget). chat acquires the gate and
maps GateFull to Busy; Client gained a gate field.
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 14:45:45 -07:00
kyle
a07c341cbb
Add the thinking cap to Client::chat
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 14:06:11 -07:00
kyle
60557a0634
Add Client::chat with the first-byte wait, liveness and error mapping
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 13:37:01 -07:00
kyle
3663a1e4d5
Add props, slots, tokenize and the cache-loss check to the llama client
...
Implemented-By: OpenCode session (model recorded in docs/implementer-log.md)
2026-09-18 03:39:05 -07:00
kyle
3d876d4fa9
Add the assembler that folds streamed chunks into a completion
...
Implemented-By: GLM-5.3 (z.ai, default settings) via OpenCode
2026-09-18 02:56:31 -07:00
kyle
f48999306e
Add the llama client types and the chat request builder
...
Implemented-By: Laguna S 2.1 (OpenCode)
2026-09-18 02:40:35 -07:00
kyle
f58c29e707
Add a server-sent-events reader to loopd
...
Implemented-By: Laguna S 2.1 (OpenCode)
2026-09-18 02:31:49 -07:00
kyle
4460bb241a
M2a/04-loopd-http
...
Implemented-By: Laguna S 2.1 (OpenCode)
2026-09-18 02:11:25 -07:00
kyle
6e8e24794d
Add loopd configuration with every M2a limit
...
Implemented-By: Laguna S 2.1 (OpenCode)
2026-09-17 23:07:38 -07:00