agent-comms 3.31.0 → 3.32.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/README.md +3 -1
- package/dist/bridges/user/web/dist/bundle.js +12 -12
- package/dist/bridges/user/web/dist/sw.js +1 -1
- package/dist/bridges/user/web/frontend/components/App.d.ts +3 -2
- package/dist/bridges/user/web/frontend/components/App.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/App.js +1 -1
- package/dist/bridges/user/web/frontend/components/App.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts +5 -4
- package/dist/bridges/user/web/frontend/components/MeshPanel.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshPanel.js +12 -20
- package/dist/bridges/user/web/frontend/components/MeshPanel.js.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshTraceView.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/components/MeshTraceView.js.map +1 -1
- package/dist/bridges/user/web/frontend/main.js +37 -44
- package/dist/bridges/user/web/frontend/main.js.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.d.ts +25 -1
- package/dist/bridges/user/web/frontend/mesh-client.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.js +20 -0
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -1
- package/dist/bridges/user/web/frontend/state.d.ts +1 -4
- package/dist/bridges/user/web/frontend/state.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/state.js +0 -5
- package/dist/bridges/user/web/frontend/state.js.map +1 -1
- package/dist/bridges/user/web/frontend/types.d.ts +8 -42
- package/dist/bridges/user/web/frontend/types.d.ts.map +1 -1
- package/dist/bridges/user/web/frontend/types.js +1 -2
- package/dist/bridges/user/web/frontend/types.js.map +1 -1
- package/package.json +3 -1
- package/dist/bridges/user/web/frontend/api.d.ts +0 -15
- package/dist/bridges/user/web/frontend/api.d.ts.map +0 -1
- package/dist/bridges/user/web/frontend/api.js +0 -113
- package/dist/bridges/user/web/frontend/api.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=`agent-comms-v1`,t=[{"revision":"25bade71585c5081ef25b89a3ad23265","url":"mesh-worker.js"},{"revision":"f1ee3afb8c9e8f0d7315fd93d6457316","url":"index.html"},{"revision":"
|
|
1
|
+
var e=`agent-comms-v1`,t=[{"revision":"25bade71585c5081ef25b89a3ad23265","url":"mesh-worker.js"},{"revision":"f1ee3afb8c9e8f0d7315fd93d6457316","url":"index.html"},{"revision":"49a006ce3b0a139a0f1b325e8c1b48d3","url":"bundle.js"}].map(e=>e.url);self.addEventListener(`install`,n=>{n.waitUntil(self.caches.open(e).then(async e=>e.addAll(t)).then(async()=>self.skipWaiting()))}),self.addEventListener(`activate`,t=>{t.waitUntil(self.caches.keys().then(async t=>Promise.all(t.filter(t=>t!==e).map(async e=>self.caches.delete(e)))))});var n=200,r=300;function i(e,t){return e.method===`GET`&&t.status>=n&&t.status<r}self.addEventListener(`fetch`,t=>{if(new URL(t.request.url).pathname.startsWith(`/api/`)){t.respondWith(fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n}).catch(async()=>self.caches.open(e).then(async e=>e.match(t.request)).then(e=>e??new Response(`Offline`,{status:503}))));return}t.respondWith(self.caches.open(e).then(async e=>e.match(t.request)).then(async n=>n||fetch(t.request).then(n=>{if(i(t.request,n)){let r=n.clone();self.caches.open(e).then(async e=>e.put(t.request,r))}return n})))}),self.addEventListener(`push`,e=>{let t=`Agent Comms`,n=`New message`;if(e.data)try{let r=e.data.json();typeof r.title==`string`&&(t=r.title),typeof r.body==`string`&&(n=r.body)}catch{let t=e.data.text();t&&(n=t)}e.waitUntil(self.registration.showNotification(t,{body:n,data:{url:self.location.origin}}))}),self.addEventListener(`notificationclick`,e=>{e.notification.close();let t=e.notification.data,n=typeof t==`object`&&t&&`url`in t&&typeof t.url==`string`?t.url:self.location.origin;e.waitUntil(self.clients.matchAll({type:`window`,includeUncontrolled:!0}).then(async e=>{for(let t of e)if(t.url===n&&`focus`in t)return t.focus();return self.clients.openWindow(n)}))});
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Renders sidebar + chat area inside an AppShell. Receives state and action callbacks from the imperative shell in main.tsx.
|
|
5
5
|
*/
|
|
6
|
-
import type { Agent, DisplayMessage,
|
|
6
|
+
import type { Agent, DisplayMessage, Room } from "../types.js";
|
|
7
|
+
import type { MeshClient } from "../mesh-client.js";
|
|
7
8
|
export interface AppProps {
|
|
8
9
|
rooms: readonly Room[];
|
|
9
10
|
agents: readonly Agent[];
|
|
@@ -11,7 +12,7 @@ export interface AppProps {
|
|
|
11
12
|
dmTarget: string | undefined;
|
|
12
13
|
messages: readonly DisplayMessage[];
|
|
13
14
|
connected: boolean;
|
|
14
|
-
|
|
15
|
+
queryUtils: MeshClient["queryUtils"];
|
|
15
16
|
onJoinRoom: (roomId: string) => void;
|
|
16
17
|
onSelectAgent: (agentId: string) => void;
|
|
17
18
|
onRenameAgent: (agentId: string, newName: string) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOpD,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC;IACrC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACzC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,QAAQ,EACrC,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,+BAuDlC"}
|
|
@@ -20,6 +20,6 @@ export function App(props) {
|
|
|
20
20
|
}, children: [_jsxs(AppShell.Navbar, { children: [_jsx(Sidebar, { rooms: props.rooms, agents: props.agents, currentRoom: props.currentRoom, onJoinRoom: props.onJoinRoom, onSelectAgent: props.onSelectAgent, onRenameAgent: props.onRenameAgent, onCreateRoom: props.onCreateRoom, onJoinRoomInput: props.onJoinRoomInput }), _jsx(SegmentedControl, { m: "xs", size: "xs", fullWidth: true, value: mainView, onChange: setMainView, data: [
|
|
21
21
|
{ label: "Chat", value: "chat" },
|
|
22
22
|
{ label: "Mesh", value: "mesh" },
|
|
23
|
-
] })] }), _jsx(AppShell.Main, { h: "100vh", children: mainView === "chat" ? (_jsx(ChatArea, { messages: props.messages, rooms: props.rooms, currentRoom: props.currentRoom, dmTarget: props.dmTarget, connected: props.connected, sidebarOpened: navOpened, onToggleSidebar: toggleNav, onSendAction: props.onSendAction, onLeaveRoom: props.onLeaveRoom, onConnectToMesh: props.onConnectToMesh })) : (_jsx(MeshPanel, {
|
|
23
|
+
] })] }), _jsx(AppShell.Main, { h: "100vh", children: mainView === "chat" ? (_jsx(ChatArea, { messages: props.messages, rooms: props.rooms, currentRoom: props.currentRoom, dmTarget: props.dmTarget, connected: props.connected, sidebarOpened: navOpened, onToggleSidebar: toggleNav, onSendAction: props.onSendAction, onLeaveRoom: props.onLeaveRoom, onConnectToMesh: props.onConnectToMesh })) : (_jsx(MeshPanel, { queryUtils: props.queryUtils })) })] }));
|
|
24
24
|
}
|
|
25
25
|
//# sourceMappingURL=App.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"App.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/App.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGjC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AA0BvC,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAC/D,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAW,MAAM,CAAC,CAAC;IAE3D,OAAO,CACL,MAAC,QAAQ,IACP,MAAM,EAAE;YACN,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,IAAI;YAChB,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,SAAS,EAAE;SACvD,aAED,MAAC,QAAQ,CAAC,MAAM,eACd,KAAC,OAAO,IACN,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,UAAU,EAAE,KAAK,CAAC,UAAU,EAC5B,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,aAAa,EAAE,KAAK,CAAC,aAAa,EAClC,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,eAAe,EAAE,KAAK,CAAC,eAAe,GACtC,EACF,KAAC,gBAAgB,IACf,CAAC,EAAC,IAAI,EACN,IAAI,EAAC,IAAI,EACT,SAAS,QACT,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,WAAW,EACrB,IAAI,EAAE;4BACJ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;4BAChC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE;yBACjC,GACD,IACc,EAClB,KAAC,QAAQ,CAAC,IAAI,IAAC,CAAC,EAAC,OAAO,YACrB,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,CACrB,KAAC,QAAQ,IACP,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,aAAa,EAAE,SAAS,EACxB,eAAe,EAAE,SAAS,EAC1B,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,eAAe,EAAE,KAAK,CAAC,eAAe,GACtC,CACH,CAAC,CAAC,CAAC,CACF,KAAC,SAAS,IAAC,UAAU,EAAE,KAAK,CAAC,UAAU,GAAI,CAC5C,GACa,IACP,CACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MeshPanel — the mesh view: connection graph plus path-trace (agent-comms#201).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Both the graph and the trace are genuine one-shot reads (agent-comms#206): the graph has no real-time channel of its own, and a trace is a single on-demand network round trip, not reactive state. useQuery/useMutation own their own loading/error/result lifecycles here, replacing what used to be three separate hand-rolled useState calls for the trace and a manually-refreshed prop for the graph.
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { MeshClient } from "../mesh-client.js";
|
|
7
7
|
interface MeshPanelProps {
|
|
8
|
-
|
|
8
|
+
/** Narrowed to just the two utils this component actually uses, the same Pick-based narrowing dispatch-action.ts's ActionDispatchClient already established for the same "component/function only needs a slice of the full client" shape. */
|
|
9
|
+
queryUtils: Pick<MeshClient["queryUtils"], "getMeshGraph" | "getMeshTrace">;
|
|
9
10
|
}
|
|
10
|
-
export declare function MeshPanel({
|
|
11
|
+
export declare function MeshPanel({ queryUtils }: MeshPanelProps): import("react").JSX.Element;
|
|
11
12
|
export {};
|
|
12
13
|
//# sourceMappingURL=MeshPanel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshPanel.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"MeshPanel.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshPanel.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpD,UAAU,cAAc;IACtB,8OAA8O;IAC9O,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,cAAc,GAAG,cAAc,CAAC,CAAC;CAC7E;AAED,wBAAgB,SAAS,CAAC,EAAE,UAAU,EAAE,EAAE,cAAc,+BAuDvD"}
|
|
@@ -2,38 +2,30 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
/**
|
|
3
3
|
* MeshPanel — the mesh view: connection graph plus path-trace (agent-comms#201).
|
|
4
4
|
*
|
|
5
|
-
*
|
|
5
|
+
* Both the graph and the trace are genuine one-shot reads (agent-comms#206): the graph has no real-time channel of its own, and a trace is a single on-demand network round trip, not reactive state. useQuery/useMutation own their own loading/error/result lifecycles here, replacing what used to be three separate hand-rolled useState calls for the trace and a manually-refreshed prop for the graph.
|
|
6
6
|
*/
|
|
7
7
|
import { Stack, Tabs, Text } from "@mantine/core";
|
|
8
|
+
import { useMutation, useQuery } from "@tanstack/react-query";
|
|
8
9
|
import { useState } from "react";
|
|
9
|
-
import { fetchMeshTrace } from "../api.js";
|
|
10
10
|
import { MeshGraphView } from "./MeshGraphView.js";
|
|
11
11
|
import { MeshTraceView } from "./MeshTraceView.js";
|
|
12
|
-
export function MeshPanel({
|
|
12
|
+
export function MeshPanel({ queryUtils }) {
|
|
13
13
|
const [selectedTarget, setSelectedTarget] = useState(undefined);
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const [result, setResult] = useState(undefined);
|
|
14
|
+
const graphQuery = useQuery(queryUtils.getMeshGraph.queryOptions());
|
|
15
|
+
const traceMutation = useMutation(queryUtils.getMeshTrace.mutationOptions());
|
|
17
16
|
function handleTrace() {
|
|
18
17
|
if (selectedTarget === undefined)
|
|
19
18
|
return;
|
|
20
|
-
|
|
21
|
-
setError(undefined);
|
|
22
|
-
setResult(undefined);
|
|
23
|
-
fetchMeshTrace(selectedTarget)
|
|
24
|
-
.then((traceResult) => {
|
|
25
|
-
setResult(traceResult);
|
|
26
|
-
})
|
|
27
|
-
.catch((err) => {
|
|
28
|
-
setError(err instanceof Error ? err.message : String(err));
|
|
29
|
-
})
|
|
30
|
-
.finally(() => {
|
|
31
|
-
setLoading(false);
|
|
32
|
-
});
|
|
19
|
+
traceMutation.mutate({ target: selectedTarget });
|
|
33
20
|
}
|
|
21
|
+
const graph = graphQuery.data;
|
|
34
22
|
if (graph === undefined) {
|
|
35
23
|
return (_jsx(Text, { c: "dimmed", p: "md", children: "Mesh graph is not available on this connection." }));
|
|
36
24
|
}
|
|
37
|
-
return (_jsxs(Tabs, { defaultValue: "graph", children: [_jsxs(Tabs.List, { children: [_jsx(Tabs.Tab, { value: "graph", children: "Graph" }), _jsx(Tabs.Tab, { value: "trace", children: "Trace" })] }), _jsx(Tabs.Panel, { value: "graph", children: _jsx(MeshGraphView, { graph: graph, selectedDevice: selectedTarget, onSelectDevice: setSelectedTarget }) }), _jsx(Tabs.Panel, { value: "trace", children: _jsx(Stack, { children: _jsx(MeshTraceView, { targets: graph.nodes, selectedTarget: selectedTarget, onSelectTarget: setSelectedTarget, onTrace: handleTrace, loading:
|
|
25
|
+
return (_jsxs(Tabs, { defaultValue: "graph", children: [_jsxs(Tabs.List, { children: [_jsx(Tabs.Tab, { value: "graph", children: "Graph" }), _jsx(Tabs.Tab, { value: "trace", children: "Trace" })] }), _jsx(Tabs.Panel, { value: "graph", children: _jsx(MeshGraphView, { graph: graph, selectedDevice: selectedTarget, onSelectDevice: setSelectedTarget }) }), _jsx(Tabs.Panel, { value: "trace", children: _jsx(Stack, { children: _jsx(MeshTraceView, { targets: graph.nodes, selectedTarget: selectedTarget, onSelectTarget: setSelectedTarget, onTrace: handleTrace, loading: traceMutation.isPending, error: traceMutation.error !== null
|
|
26
|
+
? traceMutation.error instanceof Error
|
|
27
|
+
? traceMutation.error.message
|
|
28
|
+
: "Unknown error"
|
|
29
|
+
: undefined, result: traceMutation.data }) }) })] }));
|
|
38
30
|
}
|
|
39
31
|
//# sourceMappingURL=MeshPanel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshPanel.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshPanel.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"MeshPanel.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshPanel.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAOnD,MAAM,UAAU,SAAS,CAAC,EAAE,UAAU,EAAkB;IACtD,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,SAAS,CACV,CAAC;IACF,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC;IACpE,MAAM,aAAa,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC,CAAC;IAE7E,SAAS,WAAW;QAClB,IAAI,cAAc,KAAK,SAAS;YAAE,OAAO;QACzC,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC;IAC9B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,CACL,KAAC,IAAI,IAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,IAAI,gEAEhB,CACR,CAAC;IACJ,CAAC;IAED,OAAO,CACL,MAAC,IAAI,IAAC,YAAY,EAAC,OAAO,aACxB,MAAC,IAAI,CAAC,IAAI,eACR,KAAC,IAAI,CAAC,GAAG,IAAC,KAAK,EAAC,OAAO,sBAAiB,EACxC,KAAC,IAAI,CAAC,GAAG,IAAC,KAAK,EAAC,OAAO,sBAAiB,IAC9B,EACZ,KAAC,IAAI,CAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YACvB,KAAC,aAAa,IACZ,KAAK,EAAE,KAAK,EACZ,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,iBAAiB,GACjC,GACS,EACb,KAAC,IAAI,CAAC,KAAK,IAAC,KAAK,EAAC,OAAO,YACvB,KAAC,KAAK,cACJ,KAAC,aAAa,IACZ,OAAO,EAAE,KAAK,CAAC,KAAK,EACpB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,iBAAiB,EACjC,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,aAAa,CAAC,SAAS,EAChC,KAAK,EACH,aAAa,CAAC,KAAK,KAAK,IAAI;4BAC1B,CAAC,CAAC,aAAa,CAAC,KAAK,YAAY,KAAK;gCACpC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,OAAO;gCAC7B,CAAC,CAAC,eAAe;4BACnB,CAAC,CAAC,SAAS,EAEf,MAAM,EAAE,aAAa,CAAC,IAAI,GAC1B,GACI,GACG,IACR,CACR,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshTraceView.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshTraceView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;CACrC;
|
|
1
|
+
{"version":3,"file":"MeshTraceView.d.ts","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshTraceView.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD,UAAU,kBAAkB;IAC1B,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,cAAc,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,MAAM,EAAE,eAAe,GAAG,SAAS,CAAC;CACrC;AAYD,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,cAAc,EACd,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,GACP,EAAE,kBAAkB,+BAqDpB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MeshTraceView.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshTraceView.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAa1E,mIAAmI;AACnI,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAS,YAAY,
|
|
1
|
+
{"version":3,"file":"MeshTraceView.js","sourceRoot":"","sources":["../../../../../../src/bridges/user/web/frontend/components/MeshTraceView.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAa1E,mIAAmI;AACnI,MAAM,gBAAgB,GAAG,CAAC,CAAC;AAE3B,SAAS,YAAY,CAAC,IAAwC;IAC5D,IAAI,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,QAAQ,CAAC;IACnC,OAAO,IAAI,CAAC,UAAU,KAAK,SAAS;QAClC,CAAC,CAAC,eAAe,IAAI,CAAC,UAAU,EAAE;QAClC,CAAC,CAAC,SAAS,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,EAC5B,OAAO,EACP,cAAc,EACd,cAAc,EACd,OAAO,EACP,OAAO,EACP,KAAK,EACL,MAAM,GACa;IACnB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC;KACrC,CAAC,CAAC,CAAC;IAEJ,OAAO,CACL,MAAC,KAAK,IAAC,CAAC,EAAC,IAAI,EAAC,GAAG,EAAC,IAAI,aACpB,MAAC,KAAK,IAAC,KAAK,EAAC,UAAU,EAAC,GAAG,EAAC,IAAI,aAC9B,KAAC,MAAM,IACL,KAAK,EAAC,eAAe,EACrB,WAAW,EAAC,iBAAiB,EAC7B,IAAI,EAAC,IAAI,EACT,IAAI,EAAE,OAAO,EACb,KAAK,EAAE,cAAc,IAAI,IAAI,EAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE;4BAClB,IAAI,KAAK,KAAK,IAAI;gCAAE,cAAc,CAAC,KAAK,CAAC,CAAC;wBAC5C,CAAC,GACD,EACF,KAAC,MAAM,IACL,IAAI,EAAC,IAAI,EACT,QAAQ,EAAE,cAAc,KAAK,SAAS,IAAI,OAAO,EACjD,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,OAAO,sBAGT,IACH,EAEP,KAAK,KAAK,SAAS,IAAI,KAAC,IAAI,IAAC,CAAC,EAAC,KAAK,YAAE,KAAK,GAAQ,EAEnD,MAAM,KAAK,SAAS,IAAI,CACvB,MAAC,KAAK,IAAC,GAAG,EAAE,CAAC,aACX,MAAC,KAAK,IAAC,GAAG,EAAC,IAAI,aACb,KAAC,KAAK,IAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,YAC3D,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI;oCAC7B,CAAC,CAAC,IAAI;oCACN,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAC9B,EACR,MAAC,IAAI,IAAC,IAAI,EAAC,IAAI,aAAE,MAAM,CAAC,KAAK,qBAAqB,IAC5C,EACR,MAAC,IAAI,IAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,wBAChB,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,IAC7B,EACN,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,CAC9B,MAAC,IAAI,IAAC,IAAI,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,yBACf,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,IAC/B,CACR,IACK,CACT,IACK,CACT,CAAC;AACJ,CAAC"}
|
|
@@ -7,9 +7,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
7
7
|
import mantineStyles from "@mantine/core/styles.css?inline";
|
|
8
8
|
import { createRoot } from "react-dom/client";
|
|
9
9
|
import { MantineProvider } from "@mantine/core";
|
|
10
|
+
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
|
|
10
11
|
import { useEffect } from "react";
|
|
11
12
|
import { App } from "./components/App.js";
|
|
12
|
-
import { fetchAgents, fetchMeshGraph, fetchRoomMessages, fetchRooms, } from "./api.js";
|
|
13
13
|
import { parseInput, routeAction } from "./input.js";
|
|
14
14
|
import { State } from "./state.js";
|
|
15
15
|
import { useClientState } from "./use-client-state.js";
|
|
@@ -34,13 +34,15 @@ if (rootEl === null) {
|
|
|
34
34
|
// State
|
|
35
35
|
// ---------------------------------------------------------------------------
|
|
36
36
|
const state = new State();
|
|
37
|
+
/** Backs the three structured one-shot reads (agent-comms#206) -- getRoomMessages/getMeshGraph/getMeshTrace, via meshClient.queryUtils. */
|
|
38
|
+
const queryClient = new QueryClient();
|
|
37
39
|
// ---------------------------------------------------------------------------
|
|
38
40
|
// Mesh client — real-time state via SharedWorker
|
|
39
41
|
// ---------------------------------------------------------------------------
|
|
40
42
|
const meshClient = new MeshClient();
|
|
41
43
|
let wasConnected = false;
|
|
42
44
|
meshClient.subscribe((meshState) => {
|
|
43
|
-
//
|
|
45
|
+
// agents/rooms are already fully real-time via subscribeEvents' state_sync/state_patch stream (agent-comms#206) -- no REST re-fetch needed on top of this.
|
|
44
46
|
if (meshState.agents.length > 0) {
|
|
45
47
|
state.setAgents(meshState.agents);
|
|
46
48
|
}
|
|
@@ -66,7 +68,7 @@ meshClient.onDelivery((event) => {
|
|
|
66
68
|
event.type === "member_left" ||
|
|
67
69
|
event.type === "member_status" ||
|
|
68
70
|
event.type === "name_changed") {
|
|
69
|
-
void
|
|
71
|
+
void invalidateMeshGraph();
|
|
70
72
|
}
|
|
71
73
|
});
|
|
72
74
|
// Don't auto-connect the MeshClient on first load. The user must explicitly connect to avoid Chrome's "access device" prompt appearing before the user understands the UI. meshClient.connect() is called from onConnectToMesh().
|
|
@@ -86,36 +88,25 @@ async function sendAction(action) {
|
|
|
86
88
|
text: result.isError ? `Error: ${result.content}` : result.content,
|
|
87
89
|
});
|
|
88
90
|
if (!result.isError) {
|
|
89
|
-
void
|
|
91
|
+
void invalidateMeshGraph();
|
|
90
92
|
}
|
|
91
93
|
}
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
state.setRooms(rooms);
|
|
98
|
-
await refreshMeshGraph();
|
|
99
|
-
}
|
|
100
|
-
/** Refreshes the mesh's connection graph on the same triggers refreshState already reacts to (agent-comms#201) -- a failure here (most commonly this bridge running on a FileStore rather than a real mesh transport, so mesh_graph simply isn't supported) leaves state.meshGraph as it was rather than breaking the agents/rooms refresh it rides alongside. */
|
|
101
|
-
async function refreshMeshGraph() {
|
|
102
|
-
try {
|
|
103
|
-
state.setMeshGraph(await fetchMeshGraph());
|
|
104
|
-
}
|
|
105
|
-
catch {
|
|
106
|
-
// Not mesh-backed, or the transport doesn't support mesh_graph -- leave meshGraph unset.
|
|
107
|
-
}
|
|
94
|
+
/** Invalidates the mesh graph query on the same triggers a REST refresh used to run on (agent-comms#201/#206) -- a failure here (most commonly this bridge running on a FileStore rather than a real mesh transport, so mesh_graph simply isn't supported) is left to whatever's already subscribed to the query to surface, the same way any other failed refetch would. */
|
|
95
|
+
async function invalidateMeshGraph() {
|
|
96
|
+
await queryClient.invalidateQueries({
|
|
97
|
+
queryKey: meshClient.queryUtils.getMeshGraph.key(),
|
|
98
|
+
});
|
|
108
99
|
}
|
|
109
100
|
async function onJoinRoom(roomId) {
|
|
110
101
|
state.setDmTarget(undefined);
|
|
111
102
|
state.setCurrentRoom(roomId);
|
|
112
103
|
state.clearMessages();
|
|
113
104
|
void sendAction({ action: "join_room", room: roomId });
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
105
|
+
// Room history now goes through the same tab-worker-server oRPC channel every other read does (agent-comms#206), so it works uniformly whether this is served from the local server or probing for one as a standalone PWA -- unlike the REST fetch it replaces, which only ever worked in the local-server case.
|
|
106
|
+
const messages = await queryClient.query(meshClient.queryUtils.getRoomMessages.queryOptions({
|
|
107
|
+
input: { room: roomId },
|
|
108
|
+
}));
|
|
109
|
+
state.setMessages(messages.map(roomMessageToDisplay));
|
|
119
110
|
addMessage({ type: "system", text: `Joined ${roomId}` });
|
|
120
111
|
}
|
|
121
112
|
function onSelectAgent(agentId) {
|
|
@@ -188,11 +179,11 @@ function Root() {
|
|
|
188
179
|
useEffect(() => {
|
|
189
180
|
syncUrl({ currentRoom: s.currentRoom, dmTarget: s.dmTarget });
|
|
190
181
|
}, [s.currentRoom, s.dmTarget]);
|
|
191
|
-
return (_jsx(App, { rooms: s.rooms, agents: s.agents, currentRoom: s.currentRoom, dmTarget: s.dmTarget, messages: s.messages, connected: s.connected,
|
|
182
|
+
return (_jsx(App, { rooms: s.rooms, agents: s.agents, currentRoom: s.currentRoom, dmTarget: s.dmTarget, messages: s.messages, connected: s.connected, queryUtils: meshClient.queryUtils, onJoinRoom: (roomId) => {
|
|
192
183
|
void onJoinRoom(roomId);
|
|
193
184
|
}, onSelectAgent: onSelectAgent, onRenameAgent: onRenameAgent, onLeaveRoom: onLeaveRoom, onSendAction: handleSendAction, onCreateRoom: onCreateRoom, onJoinRoomInput: onJoinRoomInput, onConnectToMesh: onConnectToMesh }));
|
|
194
185
|
}
|
|
195
|
-
createRoot(rootEl).render(_jsx(MantineProvider, { theme: theme, defaultColorScheme: "dark", children: _jsx(Root, {}) }));
|
|
186
|
+
createRoot(rootEl).render(_jsx(QueryClientProvider, { client: queryClient, children: _jsx(MantineProvider, { theme: theme, defaultColorScheme: "dark", children: _jsx(Root, {}) }) }));
|
|
196
187
|
// Capture the deep link from the URL BEFORE syncUrl's first run clears the query parameters via replaceState, which would make location.search empty by the time parseDeepLink runs.
|
|
197
188
|
const deepLink = parseDeepLink(location.search);
|
|
198
189
|
// Auto-connect when served from local server, or when the user has connected before. First-time visitors to the standalone PWA see a connect prompt instead of Chrome's unexpected "access device" permission prompt.
|
|
@@ -200,21 +191,23 @@ const previouslyConnected = hasConnectedBefore(localStorage);
|
|
|
200
191
|
if (isLocalServer || previouslyConnected) {
|
|
201
192
|
meshClient.connect();
|
|
202
193
|
}
|
|
203
|
-
//
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
}
|
|
194
|
+
// Resolve any deep link from the URL once the real-time room list first arrives (agent-comms#206 -- agents/rooms are already fully covered by the live subscribeEvents stream, so this no longer waits on a separate REST fetch the way it used to). A one-shot subscriber, unsubscribing itself the moment it has a non-empty room list to resolve against.
|
|
195
|
+
if (deepLink) {
|
|
196
|
+
const unsubscribeDeepLink = meshClient.subscribe((meshState) => {
|
|
197
|
+
if (meshState.rooms.length === 0)
|
|
198
|
+
return;
|
|
199
|
+
unsubscribeDeepLink();
|
|
200
|
+
const resolved = resolveDeepLink(deepLink, meshState.rooms);
|
|
201
|
+
if (!resolved)
|
|
202
|
+
return;
|
|
203
|
+
switch (resolved.kind) {
|
|
204
|
+
case "room":
|
|
205
|
+
void onJoinRoom(resolved.targetId);
|
|
206
|
+
break;
|
|
207
|
+
case "dm":
|
|
208
|
+
onSelectAgent(resolved.targetId);
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
220
213
|
//# sourceMappingURL=main.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":";AAAA;;;;GAIG;AAEH,OAAO,aAAa,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/main.tsx"],"names":[],"mappings":"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"}
|
|
@@ -9,9 +9,13 @@
|
|
|
9
9
|
*
|
|
10
10
|
* The public subscribe()/get()/disconnect()/sendAction()/connect() surface is unchanged from before the oRPC migration -- internally, agents/rooms are now driven by consuming the worker's own tab-contract.ts subscribeEvents() stream over a real oRPC message-port client, rather than parsing raw postMessage frames. The one signal the new stream doesn't yet carry as its own discrete event -- connected/disconnected, which describes the worker's own upstream socket state to the real server, not this class's own message-port channel to the worker -- is read from the legacy protocol's own "connected"/"disconnected" broadcasts, still fully live on the same port (mesh-worker.ts's own PR4 kept both protocols coexisting deliberately for exactly this kind of narrow reuse, rather than re-deriving an equivalent signal via a second, redundant mechanism).
|
|
11
11
|
*/
|
|
12
|
-
import type {
|
|
12
|
+
import type { RouterUtils } from "@orpc/tanstack-query";
|
|
13
|
+
import type { ContractRouterClient } from "@orpc/contract";
|
|
14
|
+
import type { Agent, ActionResult, DeliveryEvent, MeshGraph, MeshTraceResult, Room, RoomMessage } from "./types.js";
|
|
15
|
+
import type { TabContract } from "./tab-contract.js";
|
|
13
16
|
type AgentIdentity = Agent;
|
|
14
17
|
type RoomLike = Room;
|
|
18
|
+
type TabClient = ContractRouterClient<TabContract>;
|
|
15
19
|
export type MeshStateListener = (state: MeshClientState) => void;
|
|
16
20
|
export type MeshDeliveryListener = (event: DeliveryEvent) => void;
|
|
17
21
|
export interface MeshClientState {
|
|
@@ -19,6 +23,21 @@ export interface MeshClientState {
|
|
|
19
23
|
rooms: RoomLike[];
|
|
20
24
|
connected: boolean;
|
|
21
25
|
}
|
|
26
|
+
/**
|
|
27
|
+
* Builds the structural client createTanstackQueryUtils derives RouterUtils from -- one delegating async function per structured read, matching oRPC's own `Client<TClientContext, TInput, TOutput, TError>` callable-with-input shape. A factory function returning an inline-inferred object literal, rather than a separately named interface, because AnyNestedClient's own index-signature constraint only structurally matches a fresh object literal type, not a named interface with the identical shape -- a real TypeScript quirk confirmed directly against this exact code (a named `interface ReadsClient` here failed with "index signature for type 'string' is missing").
|
|
28
|
+
*/
|
|
29
|
+
declare function buildReadsClient(requireClient: () => TabClient): {
|
|
30
|
+
getRoomMessages: (input: Readonly<{
|
|
31
|
+
room: string;
|
|
32
|
+
since?: string;
|
|
33
|
+
}>) => Promise<RoomMessage[]>;
|
|
34
|
+
getMeshGraph: () => Promise<MeshGraph>;
|
|
35
|
+
getMeshTrace: (input: Readonly<{
|
|
36
|
+
target: string;
|
|
37
|
+
timeoutMs?: number;
|
|
38
|
+
}>) => Promise<MeshTraceResult>;
|
|
39
|
+
};
|
|
40
|
+
type ReadsClient = ReturnType<typeof buildReadsClient>;
|
|
22
41
|
export declare class MeshClient {
|
|
23
42
|
private worker;
|
|
24
43
|
private client;
|
|
@@ -26,7 +45,12 @@ export declare class MeshClient {
|
|
|
26
45
|
private readonly listeners;
|
|
27
46
|
private readonly deliveryListeners;
|
|
28
47
|
private eventPumpGeneration;
|
|
48
|
+
/** Delegates each structured read to `this.client` fresh on every call, throwing "Not connected" the same way a real network failure would if called before connect() -- a stable object createTanstackQueryUtils below can be built from once, since the real tab client doesn't exist until connect() is called but these utils need a stable reference for the lifetime of the app. */
|
|
49
|
+
private readonly readsClient;
|
|
50
|
+
/** TanStack Query utils for the three structured one-shot reads (agent-comms#206) -- getRoomMessages/getMeshGraph/getMeshTrace, genuinely request/response data with no real-time channel of their own, unlike agents/rooms (already fully covered by subscribeEvents' state_sync/state_patch, so deliberately not exposed here as queries at all). */
|
|
51
|
+
readonly queryUtils: RouterUtils<ReadsClient>;
|
|
29
52
|
constructor();
|
|
53
|
+
private requireClient;
|
|
30
54
|
/** Connect to the mesh SharedWorker. Idempotent. */
|
|
31
55
|
connect(): void;
|
|
32
56
|
/** Get the current mesh state (snapshot). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-client.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"mesh-client.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EACV,KAAK,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,eAAe,EACf,IAAI,EACJ,WAAW,EACZ,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAQrD,KAAK,aAAa,GAAG,KAAK,CAAC;AAC3B,KAAK,QAAQ,GAAG,IAAI,CAAC;AACrB,KAAK,SAAS,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;AACjE,MAAM,MAAM,oBAAoB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAwBlE,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;GAEG;AACH,iBAAS,gBAAgB,CAAC,aAAa,EAAE,MAAM,SAAS;6BAG3C,QAAQ,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,KAChD,OAAO,CAAC,WAAW,EAAE,CAAC;wBACD,OAAO,CAAC,SAAS,CAAC;0BAGjC,QAAQ,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,KACtD,OAAO,CAAC,eAAe,CAAC;EAE9B;AAED,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAWvD,qBAAa,UAAU;IACrB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,KAAK,CAIX;IACF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmC;IACrE,OAAO,CAAC,mBAAmB,CAAK;IAEhC,0XAA0X;IAC1X,OAAO,CAAC,QAAQ,CAAC,WAAW,CAE1B;IAEF,uVAAuV;IACvV,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,WAAW,CAAC,CAE3C;;IAWF,OAAO,CAAC,aAAa;IAKrB,oDAAoD;IACpD,OAAO,IAAI,IAAI;IAyCf,6CAA6C;IAC7C,GAAG,IAAI,QAAQ,CAAC,eAAe,CAAC;IAIhC,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,IAAI;IAOlD,wGAAwG;IACxG,UAAU,CAAC,QAAQ,EAAE,oBAAoB,GAAG,MAAM,IAAI;IAOtD,yEAAyE;IACnE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,YAAY,CAAC;IAQxE,+BAA+B;IAC/B,UAAU,IAAI,IAAI;IAsBlB;;OAEG;YACW,UAAU;IAwBxB,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,UAAU;IA0ClB,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;IAsBtB,OAAO,CAAC,MAAM;CAMf"}
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
*/
|
|
12
12
|
import { createORPCClient, getEventMeta } from "@orpc/client";
|
|
13
13
|
import { RPCLink } from "@orpc/client/message-port";
|
|
14
|
+
import { createTanstackQueryUtils } from "@orpc/tanstack-query";
|
|
14
15
|
import { dispatchAction } from "./dispatch-action.js";
|
|
15
16
|
/**
|
|
16
17
|
* The delivery-event "type" values the web UI actually knows how to display (messages.ts's own deliveryEventToMessage, a closed, exhaustively-checked switch over types.ts's own DeliveryEvent union). The wire event carries two mesh-internal variants beyond that union -- connection_request/capability_request, part of the CLI/TUI's own connection-approval flows, never meant for this UI -- so this is a genuine filter, not a duplicate of the wider type.
|
|
@@ -30,6 +31,16 @@ const DISPLAYABLE_DELIVERY_TYPES = new Set([
|
|
|
30
31
|
function isUiDeliveryEvent(event) {
|
|
31
32
|
return DISPLAYABLE_DELIVERY_TYPES.has(event.type);
|
|
32
33
|
}
|
|
34
|
+
/**
|
|
35
|
+
* Builds the structural client createTanstackQueryUtils derives RouterUtils from -- one delegating async function per structured read, matching oRPC's own `Client<TClientContext, TInput, TOutput, TError>` callable-with-input shape. A factory function returning an inline-inferred object literal, rather than a separately named interface, because AnyNestedClient's own index-signature constraint only structurally matches a fresh object literal type, not a named interface with the identical shape -- a real TypeScript quirk confirmed directly against this exact code (a named `interface ReadsClient` here failed with "index signature for type 'string' is missing").
|
|
36
|
+
*/
|
|
37
|
+
function buildReadsClient(requireClient) {
|
|
38
|
+
return {
|
|
39
|
+
getRoomMessages: async (input) => requireClient().getRoomMessages(input),
|
|
40
|
+
getMeshGraph: async () => requireClient().getMeshGraph({}),
|
|
41
|
+
getMeshTrace: async (input) => requireClient().getMeshTrace(input),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
33
44
|
/** The web server's default port when standalone (coordinator default 19876 + 1), the base port `probeLocalMesh` starts walking up from. */
|
|
34
45
|
const DEFAULT_WEB_SERVER_PORT = 19877;
|
|
35
46
|
/** How many ports above `DEFAULT_WEB_SERVER_PORT` to probe before giving up, matching the server's own port-discovery walk-up range. */
|
|
@@ -48,6 +59,10 @@ export class MeshClient {
|
|
|
48
59
|
listeners = new Set();
|
|
49
60
|
deliveryListeners = new Set();
|
|
50
61
|
eventPumpGeneration = 0;
|
|
62
|
+
/** Delegates each structured read to `this.client` fresh on every call, throwing "Not connected" the same way a real network failure would if called before connect() -- a stable object createTanstackQueryUtils below can be built from once, since the real tab client doesn't exist until connect() is called but these utils need a stable reference for the lifetime of the app. */
|
|
63
|
+
readsClient = buildReadsClient(() => this.requireClient());
|
|
64
|
+
/** TanStack Query utils for the three structured one-shot reads (agent-comms#206) -- getRoomMessages/getMeshGraph/getMeshTrace, genuinely request/response data with no real-time channel of their own, unlike agents/rooms (already fully covered by subscribeEvents' state_sync/state_patch, so deliberately not exposed here as queries at all). */
|
|
65
|
+
queryUtils = createTanstackQueryUtils(this.readsClient);
|
|
51
66
|
constructor() {
|
|
52
67
|
if (typeof window !== "undefined") {
|
|
53
68
|
// A browser MessagePort never fires its own "close" event, so nothing tells the worker a tab is gone unless the tab says so itself. pagehide (never beforeunload, which kills the bfcache and is unreliable on mobile) is the last reliable point at which this can still run.
|
|
@@ -56,6 +71,11 @@ export class MeshClient {
|
|
|
56
71
|
});
|
|
57
72
|
}
|
|
58
73
|
}
|
|
74
|
+
requireClient() {
|
|
75
|
+
if (!this.client)
|
|
76
|
+
throw new Error("Not connected to mesh yet");
|
|
77
|
+
return this.client;
|
|
78
|
+
}
|
|
59
79
|
/** Connect to the mesh SharedWorker. Idempotent. */
|
|
60
80
|
connect() {
|
|
61
81
|
if (this.worker)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh-client.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"mesh-client.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/mesh-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* No DOM dependency. Testable in isolation.
|
|
5
5
|
* Consumers subscribe to changes and re-render as needed.
|
|
6
6
|
*/
|
|
7
|
-
import type { Agent, DisplayMessage,
|
|
7
|
+
import type { Agent, DisplayMessage, Room } from "./types.js";
|
|
8
8
|
export type StateChangeListener = (state: Readonly<ClientState>) => void;
|
|
9
9
|
export interface ClientState {
|
|
10
10
|
currentRoom: string | undefined;
|
|
@@ -13,8 +13,6 @@ export interface ClientState {
|
|
|
13
13
|
rooms: readonly Room[];
|
|
14
14
|
messages: readonly DisplayMessage[];
|
|
15
15
|
connected: boolean;
|
|
16
|
-
/** The mesh's connection graph (agent-comms#199/#201), refreshed on the same WS-driven triggers as agents/rooms. Undefined until the first successful fetch, or when this bridge isn't mesh-backed. */
|
|
17
|
-
meshGraph: MeshGraph | undefined;
|
|
18
16
|
}
|
|
19
17
|
export declare class State {
|
|
20
18
|
private state;
|
|
@@ -28,7 +26,6 @@ export declare class State {
|
|
|
28
26
|
setAgents(agents: readonly Agent[]): void;
|
|
29
27
|
setRooms(rooms: readonly Room[]): void;
|
|
30
28
|
setConnected(connected: boolean): void;
|
|
31
|
-
setMeshGraph(meshGraph: MeshGraph): void;
|
|
32
29
|
/** Add a display message to the message list. */
|
|
33
30
|
addMessage(message: DisplayMessage): void;
|
|
34
31
|
/** Replace all messages (e.g. when loading history). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;AAEzE,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IACzB,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IACvB,QAAQ,EAAE,SAAS,cAAc,EAAE,CAAC;IACpC,SAAS,EAAE,OAAO,CAAC;CACpB;AAWD,qBAAa,KAAK;IAChB,OAAO,CAAC,KAAK,CAAqC;IAClD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkC;IAE5D,mEAAmE;IACnE,SAAS,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,IAAI;IAOpD,6CAA6C;IAC7C,GAAG,IAAI,QAAQ,CAAC,WAAW,CAAC;IAQ5B,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAKhD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAK9C,SAAS,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,IAAI;IAKzC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,GAAG,IAAI;IAKtC,YAAY,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI;IAKtC,iDAAiD;IACjD,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;IAKzC,wDAAwD;IACxD,WAAW,CAAC,QAAQ,EAAE,SAAS,cAAc,EAAE,GAAG,IAAI;IAKtD,0BAA0B;IAC1B,aAAa,IAAI,IAAI;IAKrB,8BAA8B;IAC9B,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,MAAM;CAMf"}
|
|
@@ -11,7 +11,6 @@ const INITIAL_STATE = {
|
|
|
11
11
|
rooms: [],
|
|
12
12
|
messages: [],
|
|
13
13
|
connected: false,
|
|
14
|
-
meshGraph: undefined,
|
|
15
14
|
};
|
|
16
15
|
export class State {
|
|
17
16
|
state = { ...INITIAL_STATE };
|
|
@@ -50,10 +49,6 @@ export class State {
|
|
|
50
49
|
this.state = { ...this.state, connected };
|
|
51
50
|
this.notify();
|
|
52
51
|
}
|
|
53
|
-
setMeshGraph(meshGraph) {
|
|
54
|
-
this.state = { ...this.state, meshGraph };
|
|
55
|
-
this.notify();
|
|
56
|
-
}
|
|
57
52
|
/** Add a display message to the message list. */
|
|
58
53
|
addMessage(message) {
|
|
59
54
|
this.state = { ...this.state, messages: [...this.state.messages, message] };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../../../../src/bridges/user/web/frontend/state.ts"],"names":[],"mappings":"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"}
|