@parlor/agent-ui 0.0.0-stage → 0.1.0
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/LICENSE +21 -0
- package/README.md +10 -2
- package/dist/client/agent-ui-client.d.ts +60 -0
- package/dist/client/agent-ui-client.d.ts.map +1 -0
- package/dist/client/agent-ui-client.js +407 -0
- package/dist/client/agent-ui-client.js.map +1 -0
- package/dist/client/confirmations.d.ts +34 -0
- package/dist/client/confirmations.d.ts.map +1 -0
- package/dist/client/confirmations.js +95 -0
- package/dist/client/confirmations.js.map +1 -0
- package/dist/client/environment.d.ts +37 -0
- package/dist/client/environment.d.ts.map +1 -0
- package/dist/client/environment.js +79 -0
- package/dist/client/environment.js.map +1 -0
- package/dist/client/highlight.d.ts +12 -0
- package/dist/client/highlight.d.ts.map +1 -0
- package/dist/client/highlight.js +98 -0
- package/dist/client/highlight.js.map +1 -0
- package/dist/client/index.d.ts +7 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +7 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/json-equal.d.ts +2 -0
- package/dist/client/json-equal.d.ts.map +1 -0
- package/dist/client/json-equal.js +20 -0
- package/dist/client/json-equal.js.map +1 -0
- package/dist/client/registry.d.ts +54 -0
- package/dist/client/registry.d.ts.map +1 -0
- package/dist/client/registry.js +280 -0
- package/dist/client/registry.js.map +1 -0
- package/dist/client/screen.d.ts +20 -0
- package/dist/client/screen.d.ts.map +1 -0
- package/dist/client/screen.js +196 -0
- package/dist/client/screen.js.map +1 -0
- package/dist/client/write.d.ts +13 -0
- package/dist/client/write.d.ts.map +1 -0
- package/dist/client/write.js +101 -0
- package/dist/client/write.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +44 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +23 -0
- package/dist/manifest.js.map +1 -0
- package/dist/protocol.d.ts +206 -0
- package/dist/protocol.d.ts.map +1 -0
- package/dist/protocol.js +152 -0
- package/dist/protocol.js.map +1 -0
- package/dist/server/agent-ui.d.ts +36 -0
- package/dist/server/agent-ui.d.ts.map +1 -0
- package/dist/server/agent-ui.js +89 -0
- package/dist/server/agent-ui.js.map +1 -0
- package/dist/server/audience.d.ts +9 -0
- package/dist/server/audience.d.ts.map +1 -0
- package/dist/server/audience.js +15 -0
- package/dist/server/audience.js.map +1 -0
- package/dist/server/broker.d.ts +29 -0
- package/dist/server/broker.d.ts.map +1 -0
- package/dist/server/broker.js +152 -0
- package/dist/server/broker.js.map +1 -0
- package/dist/server/confirmations.d.ts +40 -0
- package/dist/server/confirmations.d.ts.map +1 -0
- package/dist/server/confirmations.js +230 -0
- package/dist/server/confirmations.js.map +1 -0
- package/dist/server/directory.d.ts +41 -0
- package/dist/server/directory.d.ts.map +1 -0
- package/dist/server/directory.js +193 -0
- package/dist/server/directory.js.map +1 -0
- package/dist/server/index.d.ts +10 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +10 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/manifest-source.d.ts +10 -0
- package/dist/server/manifest-source.d.ts.map +1 -0
- package/dist/server/manifest-source.js +36 -0
- package/dist/server/manifest-source.js.map +1 -0
- package/dist/server/routes.d.ts +11 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +38 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/schemas.d.ts +69 -0
- package/dist/server/schemas.d.ts.map +1 -0
- package/dist/server/schemas.js +78 -0
- package/dist/server/schemas.js.map +1 -0
- package/dist/server/tools.d.ts +49 -0
- package/dist/server/tools.d.ts.map +1 -0
- package/dist/server/tools.js +312 -0
- package/dist/server/tools.js.map +1 -0
- package/dist/view.d.ts +54 -0
- package/dist/view.d.ts.map +1 -0
- package/dist/view.js +15 -0
- package/dist/view.js.map +1 -0
- package/dist/vite/index.d.ts +3 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +3 -0
- package/dist/vite/index.js.map +1 -0
- package/dist/vite/manifest.d.ts +5 -0
- package/dist/vite/manifest.d.ts.map +1 -0
- package/dist/vite/manifest.js +107 -0
- package/dist/vite/manifest.js.map +1 -0
- package/dist/vite/plugin.d.ts +10 -0
- package/dist/vite/plugin.d.ts.map +1 -0
- package/dist/vite/plugin.js +143 -0
- package/dist/vite/plugin.js.map +1 -0
- package/package.json +65 -3
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { isUiOp, LEGACY_UI_OPS, } from "../protocol.js";
|
|
2
|
+
import { audienceOf } from "./audience.js";
|
|
3
|
+
export class ClientDirectory {
|
|
4
|
+
#now;
|
|
5
|
+
#byId = new Map();
|
|
6
|
+
#byScope = new Map();
|
|
7
|
+
#unannounced = new Map();
|
|
8
|
+
#listeners = new Set();
|
|
9
|
+
constructor(now = Date.now) {
|
|
10
|
+
this.#now = now;
|
|
11
|
+
}
|
|
12
|
+
subscribe(listener) {
|
|
13
|
+
this.#listeners.add(listener);
|
|
14
|
+
return () => this.#listeners.delete(listener);
|
|
15
|
+
}
|
|
16
|
+
connect(stream) {
|
|
17
|
+
const { clientId } = stream;
|
|
18
|
+
if (clientId === undefined)
|
|
19
|
+
return () => { };
|
|
20
|
+
const connection = {
|
|
21
|
+
...stream,
|
|
22
|
+
scope: audienceOf(stream.scope, stream.principal),
|
|
23
|
+
};
|
|
24
|
+
this.#keepUnannounced(clientId, [
|
|
25
|
+
...(this.#unannounced.get(clientId) ?? []),
|
|
26
|
+
connection,
|
|
27
|
+
]);
|
|
28
|
+
return () => this.#disconnect(clientId, connection);
|
|
29
|
+
}
|
|
30
|
+
touch(clientId, scope) {
|
|
31
|
+
if (clientId === undefined)
|
|
32
|
+
return;
|
|
33
|
+
const entry = this.#byId.get(clientId);
|
|
34
|
+
if (!entry || entry.client.scope !== scope)
|
|
35
|
+
return;
|
|
36
|
+
entry.client = { ...entry.client, seenAt: this.#now() };
|
|
37
|
+
this.#notify(entry.client, "updated");
|
|
38
|
+
}
|
|
39
|
+
presence(clientId, scope, update) {
|
|
40
|
+
const announcing = this.#takeUnannounced(clientId, scope);
|
|
41
|
+
let entry = this.#byId.get(clientId);
|
|
42
|
+
if (entry && entry.client.scope !== scope) {
|
|
43
|
+
if (announcing.length === 0)
|
|
44
|
+
return "rejected";
|
|
45
|
+
this.#forget(entry);
|
|
46
|
+
entry = undefined;
|
|
47
|
+
}
|
|
48
|
+
if (!entry && announcing.length === 0)
|
|
49
|
+
return "rejected";
|
|
50
|
+
const client = {
|
|
51
|
+
id: clientId,
|
|
52
|
+
scope,
|
|
53
|
+
platform: update.platform,
|
|
54
|
+
buildId: update.buildId,
|
|
55
|
+
focused: update.focused,
|
|
56
|
+
visible: update.visible,
|
|
57
|
+
ops: update.ops ? update.ops.filter(isUiOp) : LEGACY_UI_OPS,
|
|
58
|
+
canConfirm: update.canConfirm ?? false,
|
|
59
|
+
watching: update.watching ?? [],
|
|
60
|
+
seenAt: this.#now(),
|
|
61
|
+
};
|
|
62
|
+
if (entry) {
|
|
63
|
+
entry.client = client;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
entry = { client, connections: [] };
|
|
67
|
+
this.#byId.set(clientId, entry);
|
|
68
|
+
this.#scopeSet(scope).add(entry);
|
|
69
|
+
}
|
|
70
|
+
entry.connections.push(...announcing);
|
|
71
|
+
const outcome = announcing.length > 0 ? "registered" : "updated";
|
|
72
|
+
this.#notify(client, outcome === "registered" ? "joined" : "updated");
|
|
73
|
+
return outcome;
|
|
74
|
+
}
|
|
75
|
+
leave(clientId, scope) {
|
|
76
|
+
const entry = this.#byId.get(clientId);
|
|
77
|
+
if (!entry || entry.client.scope !== scope)
|
|
78
|
+
return false;
|
|
79
|
+
const released = entry.connections.splice(0);
|
|
80
|
+
this.#forget(entry);
|
|
81
|
+
this.#keepUnannounced(clientId, [
|
|
82
|
+
...(this.#unannounced.get(clientId) ?? []),
|
|
83
|
+
...released,
|
|
84
|
+
]);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
connected(scope, clientId) {
|
|
88
|
+
return this.#byId.get(clientId)?.client.scope === scope;
|
|
89
|
+
}
|
|
90
|
+
targets(scope) {
|
|
91
|
+
return [...(this.#byScope.get(scope) ?? [])].map((entry) => this.#targetOf(entry));
|
|
92
|
+
}
|
|
93
|
+
target(clientId) {
|
|
94
|
+
const entry = this.#byId.get(clientId);
|
|
95
|
+
return entry && this.#targetOf(entry);
|
|
96
|
+
}
|
|
97
|
+
select(scope, clientId) {
|
|
98
|
+
const entries = [...(this.#byScope.get(scope) ?? [])];
|
|
99
|
+
if (entries.length === 0)
|
|
100
|
+
return undefined;
|
|
101
|
+
const explicit = clientId === undefined ? undefined : this.#byId.get(clientId);
|
|
102
|
+
if (explicit && explicit.client.scope === scope) {
|
|
103
|
+
return { target: this.#targetOf(explicit), tied: [] };
|
|
104
|
+
}
|
|
105
|
+
const focused = entries.filter((e) => e.client.focused);
|
|
106
|
+
if (focused.length > 0)
|
|
107
|
+
return this.#mostRecent(focused, () => true);
|
|
108
|
+
const visible = entries.filter((e) => e.client.visible);
|
|
109
|
+
const pool = visible.length > 0 ? visible : entries;
|
|
110
|
+
return this.#mostRecent(pool, (a, b) => a.client.seenAt === b.client.seenAt);
|
|
111
|
+
}
|
|
112
|
+
summaries(scope) {
|
|
113
|
+
return [...(this.#byScope.get(scope) ?? [])].map((entry) => this.summary(entry.client));
|
|
114
|
+
}
|
|
115
|
+
summary(client) {
|
|
116
|
+
return {
|
|
117
|
+
id: client.id,
|
|
118
|
+
platform: client.platform,
|
|
119
|
+
...(client.buildId === undefined ? {} : { buildId: client.buildId }),
|
|
120
|
+
focused: client.focused,
|
|
121
|
+
visible: client.visible,
|
|
122
|
+
seenAgoMs: Math.max(0, this.#now() - client.seenAt),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
#mostRecent(pool, ties) {
|
|
126
|
+
let best = pool[0];
|
|
127
|
+
for (const entry of pool)
|
|
128
|
+
if (entry.client.seenAt >= best.client.seenAt)
|
|
129
|
+
best = entry;
|
|
130
|
+
const tied = pool.filter((entry) => entry !== best && ties(entry, best));
|
|
131
|
+
return { target: this.#targetOf(best), tied: tied.map((entry) => entry.client) };
|
|
132
|
+
}
|
|
133
|
+
#targetOf(entry) {
|
|
134
|
+
return {
|
|
135
|
+
client: entry.client,
|
|
136
|
+
send: (data) => {
|
|
137
|
+
const connection = entry.connections.at(-1);
|
|
138
|
+
if (!connection)
|
|
139
|
+
return false;
|
|
140
|
+
connection.send(data);
|
|
141
|
+
return true;
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
#takeUnannounced(clientId, scope) {
|
|
146
|
+
const waiting = this.#unannounced.get(clientId) ?? [];
|
|
147
|
+
this.#keepUnannounced(clientId, waiting.filter((connection) => connection.scope !== scope));
|
|
148
|
+
return waiting.filter((connection) => connection.scope === scope);
|
|
149
|
+
}
|
|
150
|
+
#keepUnannounced(clientId, connections) {
|
|
151
|
+
if (connections.length > 0)
|
|
152
|
+
this.#unannounced.set(clientId, connections);
|
|
153
|
+
else
|
|
154
|
+
this.#unannounced.delete(clientId);
|
|
155
|
+
}
|
|
156
|
+
#disconnect(clientId, connection) {
|
|
157
|
+
const waiting = this.#unannounced.get(clientId);
|
|
158
|
+
if (waiting?.includes(connection)) {
|
|
159
|
+
this.#keepUnannounced(clientId, waiting.filter((candidate) => candidate !== connection));
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
const entry = this.#byId.get(clientId);
|
|
163
|
+
const index = entry?.connections.indexOf(connection) ?? -1;
|
|
164
|
+
if (!entry || index === -1)
|
|
165
|
+
return;
|
|
166
|
+
entry.connections.splice(index, 1);
|
|
167
|
+
if (entry.connections.length === 0)
|
|
168
|
+
this.#forget(entry);
|
|
169
|
+
}
|
|
170
|
+
#forget(entry) {
|
|
171
|
+
if (this.#byId.get(entry.client.id) !== entry)
|
|
172
|
+
return;
|
|
173
|
+
this.#byId.delete(entry.client.id);
|
|
174
|
+
const peers = this.#byScope.get(entry.client.scope);
|
|
175
|
+
peers?.delete(entry);
|
|
176
|
+
if (peers?.size === 0)
|
|
177
|
+
this.#byScope.delete(entry.client.scope);
|
|
178
|
+
this.#notify(entry.client, "left");
|
|
179
|
+
}
|
|
180
|
+
#notify(client, change) {
|
|
181
|
+
for (const listener of this.#listeners)
|
|
182
|
+
listener(client.scope, client.id, change);
|
|
183
|
+
}
|
|
184
|
+
#scopeSet(scope) {
|
|
185
|
+
let set = this.#byScope.get(scope);
|
|
186
|
+
if (!set) {
|
|
187
|
+
set = new Set();
|
|
188
|
+
this.#byScope.set(scope, set);
|
|
189
|
+
}
|
|
190
|
+
return set;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=directory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../../src/server/directory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { type AgentUi, type AgentUiDependencies, type AgentUiOptions, createAgentUi, DEFAULT_UI_TIMEOUT_MS, type ExternalUiPolicy, webOriginFromEnv, } from "./agent-ui.js";
|
|
2
|
+
export { audienceOf, userAudience } from "./audience.js";
|
|
3
|
+
export { type ConfirmationOutcome, type ConfirmationRequest, type ConfirmationThread, DEFAULT_CONFIRM_TIMEOUT_MS, } from "./confirmations.js";
|
|
4
|
+
export { fileManifestSource, type UiManifestInput, type UiManifestSource, } from "./manifest-source.js";
|
|
5
|
+
export { type BrokerOptions, UiBroker, UiFailure, type UiReceipt } from "./broker.js";
|
|
6
|
+
export { ClientDirectory, type ClientTarget, type ConnectedClient, type PresenceOutcome, type Selection, } from "./directory.js";
|
|
7
|
+
export { type AgentUiRouteOptions, MAX_CLIENT_MESSAGE_BYTES, registerAgentUiRoutes, } from "./routes.js";
|
|
8
|
+
export { parseClientMessage, uiOpInputs } from "./schemas.js";
|
|
9
|
+
export { type AgentTool, type AgentToolContext, type HighlightToolResult, type NavigateToolResult, type ScreenToolResult, type SetToolResult, UI_MANIFEST_RESOURCE, UI_TOOLS, type UiToolName, type UnreachableResult, } from "./tools.js";
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,mBAAmB,EACxB,KAAK,cAAc,EACnB,aAAa,EACb,qBAAqB,EACrB,KAAK,gBAAgB,EACrB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,KAAK,eAAe,EACpB,KAAK,gBAAgB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,KAAK,aAAa,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,aAAa,CAAC;AACtF,OAAO,EACL,eAAe,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,SAAS,GACf,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,mBAAmB,EACxB,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EACL,KAAK,SAAS,EACd,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,aAAa,EAClB,oBAAoB,EACpB,QAAQ,EACR,KAAK,UAAU,EACf,KAAK,iBAAiB,GACvB,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { createAgentUi, DEFAULT_UI_TIMEOUT_MS, webOriginFromEnv, } from "./agent-ui.js";
|
|
2
|
+
export { audienceOf, userAudience } from "./audience.js";
|
|
3
|
+
export { DEFAULT_CONFIRM_TIMEOUT_MS, } from "./confirmations.js";
|
|
4
|
+
export { fileManifestSource, } from "./manifest-source.js";
|
|
5
|
+
export { UiBroker, UiFailure } from "./broker.js";
|
|
6
|
+
export { ClientDirectory, } from "./directory.js";
|
|
7
|
+
export { MAX_CLIENT_MESSAGE_BYTES, registerAgentUiRoutes, } from "./routes.js";
|
|
8
|
+
export { parseClientMessage, uiOpInputs } from "./schemas.js";
|
|
9
|
+
export { UI_MANIFEST_RESOURCE, UI_TOOLS, } from "./tools.js";
|
|
10
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,aAAa,EACb,qBAAqB,EAErB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAIL,0BAA0B,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAsB,QAAQ,EAAE,SAAS,EAAkB,MAAM,aAAa,CAAC;AACtF,OAAO,EACL,eAAe,GAKhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAEL,wBAAwB,EACxB,qBAAqB,GACtB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAOL,oBAAoB,EACpB,QAAQ,GAGT,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UiManifest, ViewEntry } from "../manifest.js";
|
|
2
|
+
export type UiManifestInput = Omit<UiManifest, "views"> & {
|
|
3
|
+
readonly views: readonly (Omit<ViewEntry, "writable"> & {
|
|
4
|
+
readonly writable?: readonly string[] | undefined;
|
|
5
|
+
})[];
|
|
6
|
+
};
|
|
7
|
+
export type UiManifestSource = () => UiManifestInput | undefined;
|
|
8
|
+
export declare function normalizeManifest(manifest: UiManifestInput): UiManifest;
|
|
9
|
+
export declare function fileManifestSource(path: string): UiManifestSource;
|
|
10
|
+
//# sourceMappingURL=manifest-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-source.d.ts","sourceRoot":"","sources":["../../src/server/manifest-source.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,GAAG;IACxD,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,GAAG;QACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;KACnD,CAAC,EAAE,CAAC;CACN,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,MAAM,eAAe,GAAG,SAAS,CAAC;AAEjE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,GAAG,UAAU,CAKvE;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAqBjE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { readFileSync, statSync } from "node:fs";
|
|
2
|
+
export function normalizeManifest(manifest) {
|
|
3
|
+
return {
|
|
4
|
+
...manifest,
|
|
5
|
+
views: manifest.views.map((view) => ({ ...view, writable: view.writable ?? [] })),
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
function readManifest(path) {
|
|
9
|
+
return normalizeManifest(JSON.parse(readFileSync(path, "utf8")));
|
|
10
|
+
}
|
|
11
|
+
export function fileManifestSource(path) {
|
|
12
|
+
let mtimeMs;
|
|
13
|
+
let manifest;
|
|
14
|
+
return () => {
|
|
15
|
+
let stat;
|
|
16
|
+
try {
|
|
17
|
+
stat = statSync(path);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
mtimeMs = undefined;
|
|
21
|
+
manifest = undefined;
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
if (stat.mtimeMs === mtimeMs)
|
|
25
|
+
return manifest;
|
|
26
|
+
try {
|
|
27
|
+
manifest = readManifest(path);
|
|
28
|
+
mtimeMs = stat.mtimeMs;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
return manifest;
|
|
32
|
+
}
|
|
33
|
+
return manifest;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=manifest-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest-source.js","sourceRoot":"","sources":["../../src/server/manifest-source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYjD,MAAM,UAAU,iBAAiB,CAAC,QAAyB;IACzD,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;KAClF,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAoB,CAAC,CAAC;AACtF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,IAAI,OAA2B,CAAC;IAChC,IAAI,QAAgC,CAAC;IACrC,OAAO,GAAG,EAAE;QACV,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YACH,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,GAAG,SAAS,CAAC;YACpB,QAAQ,GAAG,SAAS,CAAC;YACrB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO,QAAQ,CAAC;QAC9C,IAAI,CAAC;YACH,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { H3 } from "h3";
|
|
2
|
+
import type { AgentUi } from "./agent-ui.js";
|
|
3
|
+
export declare const MAX_CLIENT_MESSAGE_BYTES: number;
|
|
4
|
+
export interface AgentUiRouteOptions {
|
|
5
|
+
readonly basePath: string;
|
|
6
|
+
readonly agentUi: AgentUi;
|
|
7
|
+
readonly audience: (request: Request) => string | Promise<string>;
|
|
8
|
+
readonly clientId: (request: Request) => string | undefined;
|
|
9
|
+
}
|
|
10
|
+
export declare function registerAgentUiRoutes(app: H3, options: AgentUiRouteOptions): void;
|
|
11
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,IAAI,CAAC;AAE7B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,eAAO,MAAM,wBAAwB,QAAa,CAAC;AAEnD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,GAAG,SAAS,CAAC;CAC7D;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,mBAAmB,GAAG,IAAI,CA6BjF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parseClientMessage } from "./schemas.js";
|
|
2
|
+
export const MAX_CLIENT_MESSAGE_BYTES = 256 * 1024;
|
|
3
|
+
const status = (code) => new Response(null, { status: code });
|
|
4
|
+
export function registerAgentUiRoutes(app, options) {
|
|
5
|
+
const { basePath, agentUi, audience, clientId } = options;
|
|
6
|
+
app.post(`${basePath}/ui`, async (event) => {
|
|
7
|
+
const request = event.req;
|
|
8
|
+
if (Number(request.headers.get("content-length") ?? 0) > MAX_CLIENT_MESSAGE_BYTES) {
|
|
9
|
+
return status(413);
|
|
10
|
+
}
|
|
11
|
+
const body = await request.text();
|
|
12
|
+
if (new TextEncoder().encode(body).byteLength > MAX_CLIENT_MESSAGE_BYTES) {
|
|
13
|
+
return status(413);
|
|
14
|
+
}
|
|
15
|
+
const id = clientId(request);
|
|
16
|
+
if (!id)
|
|
17
|
+
return status(400);
|
|
18
|
+
let json;
|
|
19
|
+
try {
|
|
20
|
+
json = JSON.parse(body);
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return status(400);
|
|
24
|
+
}
|
|
25
|
+
const message = parseClientMessage(json);
|
|
26
|
+
if (!message)
|
|
27
|
+
return status(400);
|
|
28
|
+
const receipt = agentUi.receive(id, await audience(request), message);
|
|
29
|
+
if (!receipt.accepted)
|
|
30
|
+
return status(404);
|
|
31
|
+
if (receipt.next === undefined)
|
|
32
|
+
return status(204);
|
|
33
|
+
return new Response(receipt.next, {
|
|
34
|
+
headers: { "content-type": "application/json" },
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=routes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,GAAG,IAAI,CAAC;AASnD,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;AAEtE,MAAM,UAAU,qBAAqB,CAAC,GAAO,EAAE,OAA4B;IACzE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAE1D,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC;QAC1B,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,wBAAwB,EAAE,CAAC;YAClF,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QAClC,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,wBAAwB,EAAE,CAAC;YACzE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;QAC7B,IAAI,CAAC,EAAE;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QACD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;QACnD,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE;YAChC,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;SAChD,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type ClientMessage } from "../protocol.js";
|
|
3
|
+
export declare const uiOpInputs: {
|
|
4
|
+
screen: z.ZodObject<{}, z.core.$strip>;
|
|
5
|
+
navigate: z.ZodObject<{
|
|
6
|
+
to: z.ZodString;
|
|
7
|
+
params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
|
|
8
|
+
search: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
9
|
+
replace: z.ZodOptional<z.ZodBoolean>;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
set: z.ZodObject<{
|
|
12
|
+
view: z.ZodString;
|
|
13
|
+
key: z.ZodOptional<z.ZodString>;
|
|
14
|
+
value: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
highlight: z.ZodObject<{
|
|
17
|
+
view: z.ZodString;
|
|
18
|
+
key: z.ZodOptional<z.ZodString>;
|
|
19
|
+
field: z.ZodOptional<z.ZodString>;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
};
|
|
22
|
+
export declare const clientMessageSchema: z.ZodUnion<readonly [z.ZodObject<{
|
|
23
|
+
type: z.ZodLiteral<"reply">;
|
|
24
|
+
id: z.ZodString;
|
|
25
|
+
ok: z.ZodLiteral<true>;
|
|
26
|
+
result: z.ZodUnknown;
|
|
27
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
28
|
+
type: z.ZodLiteral<"reply">;
|
|
29
|
+
id: z.ZodString;
|
|
30
|
+
ok: z.ZodLiteral<false>;
|
|
31
|
+
error: z.ZodObject<{
|
|
32
|
+
code: z.ZodEnum<{
|
|
33
|
+
ambiguous_client: "ambiguous_client";
|
|
34
|
+
busy: "busy";
|
|
35
|
+
internal: "internal";
|
|
36
|
+
invalid_value: "invalid_value";
|
|
37
|
+
not_mounted: "not_mounted";
|
|
38
|
+
not_writable: "not_writable";
|
|
39
|
+
outcome_unknown: "outcome_unknown";
|
|
40
|
+
timeout: "timeout";
|
|
41
|
+
unknown_client: "unknown_client";
|
|
42
|
+
unknown_route: "unknown_route";
|
|
43
|
+
unsupported_op: "unsupported_op";
|
|
44
|
+
user_editing: "user_editing";
|
|
45
|
+
}>;
|
|
46
|
+
message: z.ZodString;
|
|
47
|
+
issues: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
48
|
+
path: z.ZodString;
|
|
49
|
+
message: z.ZodString;
|
|
50
|
+
}, z.core.$strip>>>;
|
|
51
|
+
}, z.core.$strip>;
|
|
52
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
53
|
+
type: z.ZodLiteral<"presence">;
|
|
54
|
+
focused: z.ZodBoolean;
|
|
55
|
+
visible: z.ZodBoolean;
|
|
56
|
+
platform: z.ZodString;
|
|
57
|
+
buildId: z.ZodOptional<z.ZodString>;
|
|
58
|
+
ops: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
59
|
+
canConfirm: z.ZodOptional<z.ZodBoolean>;
|
|
60
|
+
watching: z.ZodCatch<z.ZodOptional<z.ZodPipe<z.ZodArray<z.ZodUnknown>, z.ZodTransform<string[], unknown[]>>>>;
|
|
61
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
62
|
+
type: z.ZodLiteral<"leave">;
|
|
63
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
64
|
+
type: z.ZodLiteral<"answer">;
|
|
65
|
+
id: z.ZodString;
|
|
66
|
+
approve: z.ZodBoolean;
|
|
67
|
+
}, z.core.$strip>]>;
|
|
68
|
+
export declare function parseClientMessage(body: unknown): ClientMessage | undefined;
|
|
69
|
+
//# sourceMappingURL=schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/server/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,KAAK,aAAa,EAAuC,MAAM,gBAAgB,CAAC;AAEzF,eAAO,MAAM,UAAU;IACrB,MAAM;IACN,QAAQ;;;;;;IAeR,GAAG;;;;;IAOH,SAAS;;;;;CAQV,CAAC;AAkBF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAyB9B,CAAC;AAEH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAG3E"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { MAX_WATCHED_THREADS, UI_ERROR_CODES } from "../protocol.js";
|
|
3
|
+
export const uiOpInputs = {
|
|
4
|
+
screen: z.object({}),
|
|
5
|
+
navigate: z.object({
|
|
6
|
+
to: z.string(),
|
|
7
|
+
params: z
|
|
8
|
+
.record(z.string(), z.string())
|
|
9
|
+
.optional()
|
|
10
|
+
.describe('Values for the $params in the path, e.g. { "taskId": "..." }.'),
|
|
11
|
+
search: z
|
|
12
|
+
.record(z.string(), z.unknown())
|
|
13
|
+
.optional()
|
|
14
|
+
.describe("Search params for the page, as its entry in the list names them."),
|
|
15
|
+
replace: z
|
|
16
|
+
.boolean()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe("Replace the current history entry instead of pushing one."),
|
|
19
|
+
}),
|
|
20
|
+
set: z.object({
|
|
21
|
+
view: z.string().describe("A writable view's name, as listed."),
|
|
22
|
+
key: z.string().optional().describe("The item's key, for a keyed view."),
|
|
23
|
+
value: z
|
|
24
|
+
.record(z.string(), z.unknown())
|
|
25
|
+
.describe("The fields to write; others keep their current value."),
|
|
26
|
+
}),
|
|
27
|
+
highlight: z.object({
|
|
28
|
+
view: z.string().describe("A view's name, as ui_screen reports it."),
|
|
29
|
+
key: z.string().optional().describe("The item's key, for a keyed view."),
|
|
30
|
+
field: z
|
|
31
|
+
.string()
|
|
32
|
+
.optional()
|
|
33
|
+
.describe("A field inside the view to focus, by its input name."),
|
|
34
|
+
}),
|
|
35
|
+
};
|
|
36
|
+
const errorSchema = z.object({
|
|
37
|
+
code: z.enum(UI_ERROR_CODES),
|
|
38
|
+
message: z.string(),
|
|
39
|
+
issues: z.array(z.object({ path: z.string(), message: z.string() })).optional(),
|
|
40
|
+
});
|
|
41
|
+
const watchingSchema = z
|
|
42
|
+
.array(z.unknown())
|
|
43
|
+
.transform((ids) => ids
|
|
44
|
+
.filter((id) => typeof id === "string" && id !== "")
|
|
45
|
+
.slice(0, MAX_WATCHED_THREADS))
|
|
46
|
+
.optional()
|
|
47
|
+
.catch(undefined);
|
|
48
|
+
export const clientMessageSchema = z.union([
|
|
49
|
+
z.object({
|
|
50
|
+
type: z.literal("reply"),
|
|
51
|
+
id: z.string().min(1),
|
|
52
|
+
ok: z.literal(true),
|
|
53
|
+
result: z.unknown(),
|
|
54
|
+
}),
|
|
55
|
+
z.object({
|
|
56
|
+
type: z.literal("reply"),
|
|
57
|
+
id: z.string().min(1),
|
|
58
|
+
ok: z.literal(false),
|
|
59
|
+
error: errorSchema,
|
|
60
|
+
}),
|
|
61
|
+
z.object({
|
|
62
|
+
type: z.literal("presence"),
|
|
63
|
+
focused: z.boolean(),
|
|
64
|
+
visible: z.boolean(),
|
|
65
|
+
platform: z.string(),
|
|
66
|
+
buildId: z.string().optional(),
|
|
67
|
+
ops: z.array(z.string()).optional(),
|
|
68
|
+
canConfirm: z.boolean().optional(),
|
|
69
|
+
watching: watchingSchema,
|
|
70
|
+
}),
|
|
71
|
+
z.object({ type: z.literal("leave") }),
|
|
72
|
+
z.object({ type: z.literal("answer"), id: z.string().min(1), approve: z.boolean() }),
|
|
73
|
+
]);
|
|
74
|
+
export function parseClientMessage(body) {
|
|
75
|
+
const parsed = clientMessageSchema.safeParse(body);
|
|
76
|
+
return parsed.success ? parsed.data : undefined;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/server/schemas.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { type UiManifest } from "../manifest.js";
|
|
3
|
+
import { type AgentOrigin, type ClientSummary, type ScreenSnapshot, type UiOp, type UiOpResults } from "../protocol.js";
|
|
4
|
+
import { type UiBroker } from "./broker.js";
|
|
5
|
+
import type { ClientDirectory } from "./directory.js";
|
|
6
|
+
export type UiToolName = `ui_${UiOp}`;
|
|
7
|
+
export declare const UI_TOOLS: readonly UiToolName[];
|
|
8
|
+
export declare const UI_MANIFEST_RESOURCE = "parlor://manifest";
|
|
9
|
+
export interface AgentToolContext {
|
|
10
|
+
readonly scope: string;
|
|
11
|
+
readonly clientId?: string | undefined;
|
|
12
|
+
readonly origin: AgentOrigin;
|
|
13
|
+
readonly signal?: AbortSignal | undefined;
|
|
14
|
+
readonly webOrigin?: string | undefined;
|
|
15
|
+
}
|
|
16
|
+
export interface AgentTool<I extends z.ZodObject = z.ZodObject> {
|
|
17
|
+
readonly name: UiToolName;
|
|
18
|
+
readonly description: string;
|
|
19
|
+
readonly input: I;
|
|
20
|
+
readonly readOnly: boolean;
|
|
21
|
+
run(input: z.output<I>, ctx: AgentToolContext): Promise<unknown>;
|
|
22
|
+
}
|
|
23
|
+
export interface ScreenToolResult extends ScreenSnapshot {
|
|
24
|
+
readonly client: ClientSummary;
|
|
25
|
+
readonly otherClients: readonly ClientSummary[];
|
|
26
|
+
readonly tiedWith?: readonly string[] | undefined;
|
|
27
|
+
}
|
|
28
|
+
export interface NavigateToolResult {
|
|
29
|
+
readonly client: ClientSummary;
|
|
30
|
+
readonly screen: ScreenSnapshot;
|
|
31
|
+
}
|
|
32
|
+
export type SetToolResult = UiOpResults["set"] & {
|
|
33
|
+
readonly client: ClientSummary;
|
|
34
|
+
};
|
|
35
|
+
export type HighlightToolResult = UiOpResults["highlight"] & {
|
|
36
|
+
readonly client: ClientSummary;
|
|
37
|
+
};
|
|
38
|
+
export interface UnreachableResult {
|
|
39
|
+
readonly reachable: false;
|
|
40
|
+
readonly reason: "no_client";
|
|
41
|
+
readonly href?: string | undefined;
|
|
42
|
+
}
|
|
43
|
+
export interface UiToolDeps {
|
|
44
|
+
readonly directory: ClientDirectory;
|
|
45
|
+
readonly broker: UiBroker;
|
|
46
|
+
}
|
|
47
|
+
export declare function createUiTools(deps: UiToolDeps): (manifest: UiManifest | undefined) => readonly AgentTool[];
|
|
48
|
+
export declare function uiInstructions(): string;
|
|
49
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/server/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAIL,KAAK,UAAU,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,cAAc,EAEnB,KAAK,IAAI,EACT,KAAK,WAAW,EAEjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,QAAQ,EAAa,MAAM,aAAa,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAa,MAAM,gBAAgB,CAAC;AAGjE,MAAM,MAAM,UAAU,GAAG,MAAM,IAAI,EAAE,CAAC;AAItC,eAAO,MAAM,QAAQ,EAAE,SAAS,UAAU,EAAyB,CAAC;AAEpE,eAAO,MAAM,oBAAoB,sBAAsB,CAAC;AAExD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,MAAM,WAAW,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;IAC5D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,gBAAiB,SAAQ,cAAc;IACtD,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,YAAY,EAAE,SAAS,aAAa,EAAE,CAAC;IAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;CACjC;AAED,MAAM,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC;AAEpF,MAAM,MAAM,mBAAmB,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG;IAC3D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC;CAChC,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;CAC3B;AA4JD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,GACf,CAAC,QAAQ,EAAE,UAAU,GAAG,SAAS,KAAK,SAAS,SAAS,EAAE,CAmM5D;AAED,wBAAgB,cAAc,IAAI,MAAM,CAavC"}
|