~ knotless Search/
↑↓ move↵ open⇧↵ all results

johnandersen777.bsky.social/atlibs-socialweb-computer-app

app.socialweb.computer: socialweb.computer in one page, one atlibs composition

0
0
main
42 lines · 4.0 KB Raw History

Decisions

  • One composition. Every feature is an instance of a published module; the page only wires views. compose.ts writes composition.json; scripts/stage.sh refuses a stale one and runs atlibs 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/association and the operator's market.association/bidder_associate-<did> or badgeBlueKeys/bidder_associate-<did>. Indexes are one record at self: 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.vouch is keyed by the subject's DID: a vouch is one getRecord, but the vouches you made are not computable, so vouches list is a listRecords. A vouch is written {kind: "vouch", subject, reason?, createdAt} at the subject's DID (Tangled's kind, kcp's subject).
  • 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 runs atirc mesh run --no-publish --no-webrtc in your channel (#<handle>) and its own (#<nick>_<handle>), and atirc agent run with your model endpoint. The API key goes to the VM only (a 0600 config.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 as lease. After the VM ends they no longer verify; stop deletes all three.
  • Chat goes through your node on the agent's VM. A token-less agent cannot write the computer.socialweb.ingress.answer records a browser mesh peer needs, so the page does not dial agents itself. Each agent VM also runs your node, you-<nick>.<handle>, with atirc mesh run --local-listen 127.0.0.1:6680; the page reaches it with atlibs-atirc over the contract's atirc WebRTC 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/dl build has no atirc mesh, so the page serves atirc 2de8b6c (mesh run --local-listen), built static by kcp's scripts/build-cargosrc.sh recipe, at dl/atirc-x86_64; mesh-agent checks its sha256 (a composition parameter).
  • Your page's tunnel: the requester's user-data takes tunnels; the composition's machine adds {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 is tile/, loaded locally (atlibs publish tile tile app-summary publishes 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).