~ 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 · 3.1 KB Raw History
// node compose.ts > composition.json
import { composition } from "@publicdomainrelay/atlibs/compose/build.js";
import { irohUserData, marketStatus, meshAgent, policyBidPayload, policyRequesterTangledVouch, processMcp, requester, userData, vmMcp, vouches } from "./atlibs.modules.js";

const c = composition({
	name: "app.socialweb.computer",
	description:
		"socialweb.computer in a page: VMs (vm-mcp over the requester, its shell over WebRTC), atirc mesh agents on them (mesh-agent over process-mcp), your Tangled vouches, and bidders' market state.",
	limits: { depth: 4, calls: 100000 },
});

const bidders = c.param("bidders", {
	label: "Bidder DIDs",
	type: "array",
	description: "The bidders to ask, by DID.",
	values: { default: ["did:plc:7q5lnitxv4meizdon5fmhzrq", "did:plc:4vcig7s43z3nyqrnepmcfzqt", "did:plc:2l2wdry77c7jtucbslstagkj"] },
});
const pool = c.param("pool", { label: "Pool", description: "The record key of the VM list.", values: { default: "self" } });
const atirc_url = c.param("atirc_url", { label: "atirc binary", description: "A static linux/amd64 atirc with `atirc mesh` (atirc 2de8b6c: --local-listen, sub --others; kcp's build-cargosrc.sh recipe).", values: { default: "https://app.socialweb.computer/dl/atirc-x86_64" } });
const atirc_sha256 = c.param("atirc_sha256", { label: "its sha256", values: { default: "fecce97e7828ef4c21d35c4f7d446a5858978a46cbeb6f11d595f1e79d59b1c4" } });

const vm = c.instance("vm", vmMcp, { input: { bidders, via: "webrtc", pool, max_vms: 3, max_cpus: 4, max_mem: 8, max_hold_minutes: 240 } });
const machine = c.instance("machine", requester, { session: "requester", input: { kind: "vm", shell: true, tunnels: [{ tag: "atirc", port: 6680, transport: "webrtc" }], reason: "app.socialweb.computer" } });
const user_data = c.instance("user_data", userData);
const iroh_user_data = c.instance("iroh_user_data", irohUserData);
const vouch = c.instance("vouch", policyRequesterTangledVouch);
const payload = c.instance("payload", policyBidPayload);
const process_ = c.instance("process", processMcp);
const agent = c.instance("agent", meshAgent, { session: "mesh-agent", input: { atirc_url, atirc_sha256, listen_port: 6680 } });
c.instance("vouches", vouches, { session: "vouches" });
c.instance("status", marketStatus, { session: "market-status" });

c.route(vm, "computer.socialweb.vm.provision", machine, "vm_create rents the VM and keeps it");
c.route(vm, "computer.socialweb.vm.release", machine, "vm_release gives it back");
c.route(vm, "computer.socialweb.cicd.process.exec", process_, "vm_exec runs the command on the VM");
c.route(agent, "computer.socialweb.cicd.process.exec", process_, "launch installs and starts the agent on the VM");
c.route(machine, "com.publicdomainrelay.temp.market.evaluatePolicy", vouch, "you or your operator vouched for the bidder");
c.route(machine, "com.publicdomainrelay.temp.market.evaluatePolicy", payload, "only free bids");
c.route(machine, "computer.socialweb.vm.userData", user_data, "the VM's cloud-init: the guest agent's shell");
c.route(user_data, "computer.socialweb.vm.irohUserData", iroh_user_data, "unused here (no iroh, no webrtc_ssh): user-data's pinned default");

process.stdout.write(await c.json());