johnandersen777.bsky.social/atlibs-socialweb-computer-app
app.socialweb.computer: socialweb.computer in one page, one atlibs composition
0
0
Decisions
- One composition. Every feature is an instance of a published module; the page only wires views.
compose.tswritescomposition.json;scripts/stage.shrefuses a stale one and runsatlibs compose check. - New module repos for what was missing:
atlibs-vouches(vouches),atlibs-market-status(market-status),atlibs-mesh-agents(mesh-agent). - No listRecords on our collections. Bidders:
market.offering/self,market.heartbeat/self(and the offering it names),badgeBlueKeys/associationand the operator'smarket.association/bidder_associate-<did>orbadgeBlueKeys/bidder_associate-<did>. Indexes are one record atself:computer.socialweb.bidders(bidders you follow),computer.socialweb.agents(agents you run),computer.socialweb.vm.kept(vm-mcp). - Tangled vouches are the exception.
sh.tangled.graph.vouchis keyed by the subject's DID: a vouch is one getRecord, but the vouches you made are not computable, sovouches listis a listRecords. A vouch is written{kind: "vouch", subject, reason?, createdAt}at the subject's DID (Tangled'skind, kcp'ssubject). - Your bidders are those whose confirmed operator is you (or you, if your repo has an offering). Bidders of accounts you vouch for: the composition's bidders, yours followed, and each vouched account's followed, whose confirmed operator (or self) you vouch for.
- Agents are token-less mesh nodes (kcp acceptance 0004's model, without kcp): mesh-agent installs a pinned
atirc on a VM you keep (vm-mcp, shell over WebRTC), makes an iroh key there, and you write
computer.socialweb.peer/<nick>.<handle>(iroh: the bare endpoint id). The agent runsatirc mesh run --no-publish --no-webrtcin your channel (#<handle>) and its own (#<nick>_<handle>), andatirc agent runwith your model endpoint. The API key goes to the VM only (a 0600config.toml), never into a record. - Leased peer records (kcp 0004's shape):
market.association/requester_associate-<sha256(you)[:32 hex]>-<accept rkey>in your repo,{subject: you, service: requester_associate, contract: the VM's accept, expiresAt: the VM's end}; both peer records name it aslease. After the VM ends they no longer verify;stopdeletes all three. - Chat goes through your node on the agent's VM. A token-less agent cannot write the
computer.socialweb.ingress.answerrecords a browser mesh peer needs, so the page does not dial agents itself. Each agent VM also runs your node,you-<nick>.<handle>, withatirc mesh run --local-listen 127.0.0.1:6680; the page reaches it with atlibs-atirc over the contract'satircWebRTC tunnel (only the contract's requester can signal it): browser to VM over WebRTC, VM to agents over iroh, no atirc server. atlibs-atirc 0.1.0 is vendored (vendor/atlibs-atirc.js, its tag v0.1.0, sha256 pinned by the tests) until it is on npm. - atirc binary: the public
irc.fedfork.com/dlbuild has noatirc mesh, so the page serves atirc 2de8b6c (mesh run --local-listen), built static by kcp'sscripts/build-cargosrc.shrecipe, atdl/atirc-x86_64; mesh-agent checks its sha256 (a composition parameter). - Your page's tunnel: the requester's user-data takes
tunnels; the composition'smachineadds{tag: "atirc", port: 6680, transport: "webrtc"}, and your node on the VM listens there (--local-listen). - Model endpoint: custom (Anthropic API base URL, model, key), kept sealed in this browser; co/core is out of scope.
- Shell: one command at a time (vm-mcp
vm_exec) with quick buttons, phone-friendly; no PTY. - Tiles: the page is a web tiles mothership (
@dasl/tile-loader,load.webtil.es); the summary tile istile/, loaded locally (atlibs publish tile tile app-summarypublishes it). - Theme: exec.fedfork.com's stylesheet as is; the header, nav, menu and theme toggle are its markup.
- Sign-in: one OAuth client (
atlibs stage --name app) with every instance's session; each instance runs held to its own module's scope (policyCall).