Tags: OffskyLab/Orrery-AIToolKit
Tags
Linux build fix, a real write-error fix, and the README catching up Fixes the actual defect blocking a Linux release: StdioTransport didn't import Glibc, so the package failed to build there at all. Adds a Linux CI job so that regresses loudly next time instead of shipping silently. PluginServer.serve now uses the throwing write instead of the one the file forbids, so a write failure surfaces instead of being swallowed. README catches up to what's actually shipped: documents that JSON-RPC request ids are Int, not the full spec's id space, and splits the "Direction: dispatch is a detail" section — the RPC transport, wire, and forwarding proxy it describes shipped in 0.0.1-dev.4, so the "not implemented" warning no longer applies to that part. The directory-decomposition capability keeps its own, still accurate, warning.
JSON-RPC layer: transport, client, plugin server, and a fake plugin Adds the process boundary's protocol without changing AITool or AIToolRegistry. A plugin author implements AITool and calls PluginServer.serve(tool:); the host drives a JSONRPCConnection over any Transport. The transport abstraction is what lets a spawned child become a socket later without touching the protocol, and what lets most of the suite run without spawning anything. AIToolKitTestPlugin doubles as a conformance suite: a third-party author can point the same tests at their own binary.
[FIX] refuse an id that is not a single safe path segment `register` already refused ids a host could not write down as a line. It did not refuse ids a host cannot write down as a *path* — and the path is this package's own doing: `AITool.configDirectoryName` defaults to ".\(id)", so every id is joined onto a host's home directory. So "a/b" became a nested path where one directory segment was expected, "./../evil" became "../../evil" and escaped the home directory it was joined onto, ".hidden" supplied a dot the default was about to add again, and a NUL passed validation intact and then truncated the path at the first POSIX call — creating a directory the id did not name. Three further rules, each with its own `Reason` so a rejected third party learns which one they broke: no path separator, no leading dot, no control character. Whitespace stays checked first, since tab and newline are control characters too and the whitespace reason is the more useful of the two for the ids hosts are actually handed.
0.0.1-dev.2 — register rejects ids a host cannot serialize
0.0.1-dev.1 — AITool becomes a protocol; registry is verified Sendable