@agentshouse/app-bridge
v0.1.0-alpha.1
Published
Renderer-side client of the agents.house App bridge: navigation, ceremonies and status, with an in-page test host.
Readme
@agentshouse/app-bridge
The renderer-side client of the agents.house App bridge. An App served by House receives one message port before its own scripts run; this package is that port's one listener. It carries three families:
- Navigation - the part of the shell's URL below the App's path, with its query and fragment. The shell delivers it when the App starts and whenever the User navigates; the App asks the shell to push or replace it.
- Ceremony - the App asks the shell to leave for one of House's own purpose-bound authenticated pages. The shell navigates only to a same-origin absolute path, carries its current address as the return target, and the page returns there when it completes. An App names an address House gave it in a reading and composes none.
- Status - sync state, credential state, release availability and observed failure.
The package carries no credential handling and no Runtime family. It surfaces the dedicated Runtime port the worker transfers over the bridge as a plain message port, which the App hands to the MD Runtime client entry.
Use
import { connectHouseBridge } from '@agentshouse/app-bridge';
import { connectMdRuntime } from '@agentshouse/mdruntime/client';
const bridge = connectHouseBridge();
const md = connectMdRuntime(await bridge.runtime);
bridge.onAddress((address) => render(address));
bridge.onStatus((status) => showSync(status.sync));
open('/rooms/atlas');
function open(address) {
bridge.push(address);
}
async function manageSecurity(securityPath) {
try {
await bridge.ceremony(securityPath);
} catch (refusal) {
report(refusal);
}
}bridge.runtime resolves with a structural HouseMessagePort. A consumer whose
Runtime client entry asks for the DOM MessagePort type passes it through
directly at run time and casts at the type level.
Test without a House
import { connectHouseBridge } from '@agentshouse/app-bridge';
import { createHouseBridgeTestHost } from '@agentshouse/app-bridge/test-host';
const host = createHouseBridgeTestHost({ address: '/rooms/atlas' });
const bridge = connectHouseBridge(host.port);
bridge.push('/rooms/atlas/members');
host.open('/rooms/atlas');The host plays the shell and the worker: it delivers the address the App starts at, records every push and replace and answers each with the address the shell would then show, records an admitted ceremony, refuses one that is not a same-origin absolute path, publishes a status, and attaches a Runtime port.
