wai/wai-ui becomes wai/wai-app, the library `wai_app`, with no binary and no `cli` feature: `wai`, built with its feature `app`, is its command line and its MCP server. Its served files are named wai-app-* (the WebAssembly package wai_app), the recordings wai-app-*.json. - export.rs gives the files of a starter project for a program and the facts its project file holds (title, summary, `wai dev`'s mode for the app's room, a watch room's file, a show's audience); `wai create --from app.oui` writes them, the project file and the licence. The export no longer writes app.json, room.toml, relay.toml, package.json, check.mjs or serve.mjs: wai.json names the room, `wai dev` runs it and `wai app check` checks the project. Its README and AGENTS.md say so, and the README its licence. - runtime.rs reads a Create runtime by its listing (create/wai-app-runtime.json), checking each file's SHA-256. - bridge.rs keeps the bridge on 127.0.0.1 a coding agent streams a program into the page through, with a stream helper; the stdio server, its tools and the binary's test go (`wai mcp --toolset app` serves them). - The page's Export hands over app.oui, the program in its canonical form, and the command that makes it a project; the ZIP writer and the page's export in WebAssembly go. The page names `wai mcp --toolset app` for the coding agent. - joule-ui/docs/create.md §4 and §5: the export as `wai create --from app.oui`, and the agent's tools app_guide, app_check, app_stream and app_export. Co-Authored-By: Claude Opus 5.5 <[email protected]>
23 lines
1.1 KiB
JavaScript
23 lines
1.1 KiB
JavaScript
// An app made with Create, as its exported page runs it: the program (app.oui) parsed by
|
|
// wai-app's WebAssembly build, rendered by the same widgets Create renders, its room on the
|
|
// room service behind this page's origin, every action sealed into the page's log.
|
|
import { openSession } from "./session.js";
|
|
import { Renderer } from "./renderer.js";
|
|
import { components, context } from "./components.js";
|
|
|
|
const main = document.getElementById("wai-app");
|
|
const session = await openSession();
|
|
const program = await (await fetch(main.dataset.program, { cache: "no-store" })).text();
|
|
session.push(program);
|
|
const snap = session.finish();
|
|
const ctx = context({ session, service: main.dataset.service, frame: main.dataset.frame });
|
|
const renderer = new Renderer(main, components, ctx);
|
|
renderer.render(snap);
|
|
const bad = snap.errors.filter((e) => !e.warning);
|
|
if (bad.length) {
|
|
const p = document.createElement("pre");
|
|
p.className = "wai-problems";
|
|
p.textContent = bad.map((e) => `app.oui line ${e.line}: ${e.message} (${e.code})`).join("\n");
|
|
main.after(p);
|
|
}
|
|
window.appTest = { session, ctx, renderer, snapshot: snap };
|