@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.
Files changed (107) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +10 -2
  3. package/dist/client/agent-ui-client.d.ts +60 -0
  4. package/dist/client/agent-ui-client.d.ts.map +1 -0
  5. package/dist/client/agent-ui-client.js +407 -0
  6. package/dist/client/agent-ui-client.js.map +1 -0
  7. package/dist/client/confirmations.d.ts +34 -0
  8. package/dist/client/confirmations.d.ts.map +1 -0
  9. package/dist/client/confirmations.js +95 -0
  10. package/dist/client/confirmations.js.map +1 -0
  11. package/dist/client/environment.d.ts +37 -0
  12. package/dist/client/environment.d.ts.map +1 -0
  13. package/dist/client/environment.js +79 -0
  14. package/dist/client/environment.js.map +1 -0
  15. package/dist/client/highlight.d.ts +12 -0
  16. package/dist/client/highlight.d.ts.map +1 -0
  17. package/dist/client/highlight.js +98 -0
  18. package/dist/client/highlight.js.map +1 -0
  19. package/dist/client/index.d.ts +7 -0
  20. package/dist/client/index.d.ts.map +1 -0
  21. package/dist/client/index.js +7 -0
  22. package/dist/client/index.js.map +1 -0
  23. package/dist/client/json-equal.d.ts +2 -0
  24. package/dist/client/json-equal.d.ts.map +1 -0
  25. package/dist/client/json-equal.js +20 -0
  26. package/dist/client/json-equal.js.map +1 -0
  27. package/dist/client/registry.d.ts +54 -0
  28. package/dist/client/registry.d.ts.map +1 -0
  29. package/dist/client/registry.js +280 -0
  30. package/dist/client/registry.js.map +1 -0
  31. package/dist/client/screen.d.ts +20 -0
  32. package/dist/client/screen.d.ts.map +1 -0
  33. package/dist/client/screen.js +196 -0
  34. package/dist/client/screen.js.map +1 -0
  35. package/dist/client/write.d.ts +13 -0
  36. package/dist/client/write.d.ts.map +1 -0
  37. package/dist/client/write.js +101 -0
  38. package/dist/client/write.js.map +1 -0
  39. package/dist/index.d.ts +4 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +4 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/manifest.d.ts +44 -0
  44. package/dist/manifest.d.ts.map +1 -0
  45. package/dist/manifest.js +23 -0
  46. package/dist/manifest.js.map +1 -0
  47. package/dist/protocol.d.ts +206 -0
  48. package/dist/protocol.d.ts.map +1 -0
  49. package/dist/protocol.js +152 -0
  50. package/dist/protocol.js.map +1 -0
  51. package/dist/server/agent-ui.d.ts +36 -0
  52. package/dist/server/agent-ui.d.ts.map +1 -0
  53. package/dist/server/agent-ui.js +89 -0
  54. package/dist/server/agent-ui.js.map +1 -0
  55. package/dist/server/audience.d.ts +9 -0
  56. package/dist/server/audience.d.ts.map +1 -0
  57. package/dist/server/audience.js +15 -0
  58. package/dist/server/audience.js.map +1 -0
  59. package/dist/server/broker.d.ts +29 -0
  60. package/dist/server/broker.d.ts.map +1 -0
  61. package/dist/server/broker.js +152 -0
  62. package/dist/server/broker.js.map +1 -0
  63. package/dist/server/confirmations.d.ts +40 -0
  64. package/dist/server/confirmations.d.ts.map +1 -0
  65. package/dist/server/confirmations.js +230 -0
  66. package/dist/server/confirmations.js.map +1 -0
  67. package/dist/server/directory.d.ts +41 -0
  68. package/dist/server/directory.d.ts.map +1 -0
  69. package/dist/server/directory.js +193 -0
  70. package/dist/server/directory.js.map +1 -0
  71. package/dist/server/index.d.ts +10 -0
  72. package/dist/server/index.d.ts.map +1 -0
  73. package/dist/server/index.js +10 -0
  74. package/dist/server/index.js.map +1 -0
  75. package/dist/server/manifest-source.d.ts +10 -0
  76. package/dist/server/manifest-source.d.ts.map +1 -0
  77. package/dist/server/manifest-source.js +36 -0
  78. package/dist/server/manifest-source.js.map +1 -0
  79. package/dist/server/routes.d.ts +11 -0
  80. package/dist/server/routes.d.ts.map +1 -0
  81. package/dist/server/routes.js +38 -0
  82. package/dist/server/routes.js.map +1 -0
  83. package/dist/server/schemas.d.ts +69 -0
  84. package/dist/server/schemas.d.ts.map +1 -0
  85. package/dist/server/schemas.js +78 -0
  86. package/dist/server/schemas.js.map +1 -0
  87. package/dist/server/tools.d.ts +49 -0
  88. package/dist/server/tools.d.ts.map +1 -0
  89. package/dist/server/tools.js +312 -0
  90. package/dist/server/tools.js.map +1 -0
  91. package/dist/view.d.ts +54 -0
  92. package/dist/view.d.ts.map +1 -0
  93. package/dist/view.js +15 -0
  94. package/dist/view.js.map +1 -0
  95. package/dist/vite/index.d.ts +3 -0
  96. package/dist/vite/index.d.ts.map +1 -0
  97. package/dist/vite/index.js +3 -0
  98. package/dist/vite/index.js.map +1 -0
  99. package/dist/vite/manifest.d.ts +5 -0
  100. package/dist/vite/manifest.d.ts.map +1 -0
  101. package/dist/vite/manifest.js +107 -0
  102. package/dist/vite/manifest.js.map +1 -0
  103. package/dist/vite/plugin.d.ts +10 -0
  104. package/dist/vite/plugin.d.ts.map +1 -0
  105. package/dist/vite/plugin.js +143 -0
  106. package/dist/vite/plugin.js.map +1 -0
  107. package/package.json +65 -3
@@ -0,0 +1,312 @@
1
+ import { z } from "zod";
2
+ import { routeHref, } from "../manifest.js";
3
+ import { UI_OPS, uiOpReadOnly, } from "../protocol.js";
4
+ import { UiFailure } from "./broker.js";
5
+ import { uiOpInputs } from "./schemas.js";
6
+ const toolName = (op) => `ui_${op}`;
7
+ export const UI_TOOLS = UI_OPS.map(toolName);
8
+ export const UI_MANIFEST_RESOURCE = "parlor://manifest";
9
+ const clientIdInput = z
10
+ .string()
11
+ .optional()
12
+ .describe("Target a specific app client by id, as listed in client or otherClients of a ui_screen result. Omit to use the one the user is looking at.");
13
+ const UNREACHABLE = { reachable: false, reason: "no_client" };
14
+ function sentence(text) {
15
+ const trimmed = text.trim();
16
+ return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
17
+ }
18
+ function viewCatalog(manifest) {
19
+ if (!manifest || manifest.views.length === 0)
20
+ return "";
21
+ const lines = manifest.views.map((view) => `- ${view.name}${view.keyed ? " (keyed)" : ""}: ${sentence(view.description)}`);
22
+ return `\n\nViews this app can show:\n${lines.join("\n")}`;
23
+ }
24
+ function typeOf(schema) {
25
+ if (!schema)
26
+ return "value";
27
+ if (Array.isArray(schema.enum))
28
+ return schema.enum.map((value) => JSON.stringify(value)).join(" | ");
29
+ if ("const" in schema)
30
+ return JSON.stringify(schema.const);
31
+ const union = (schema.anyOf ?? schema.oneOf);
32
+ if (Array.isArray(union))
33
+ return union.map(typeOf).join(" | ");
34
+ if (schema.type === "array")
35
+ return `${typeOf(schema.items)}[]`;
36
+ return typeof schema.type === "string" ? schema.type : "value";
37
+ }
38
+ /** `filter?: "all" | "done", page?: number`: what a page's search params take. */
39
+ function searchOf(search) {
40
+ const properties = search?.properties;
41
+ if (!properties || Object.keys(properties).length === 0)
42
+ return undefined;
43
+ const required = new Set(Array.isArray(search?.required) ? search.required : []);
44
+ return Object.entries(properties)
45
+ .map(([name, schema]) => `${name}${required.has(name) ? "" : "?"}: ${typeOf(schema)}`)
46
+ .join(", ");
47
+ }
48
+ function routeCatalog(manifest) {
49
+ if (!manifest || manifest.routes.length === 0)
50
+ return "";
51
+ const lines = manifest.routes.map((route) => {
52
+ const parts = [`- ${route.path}`];
53
+ if (route.description)
54
+ parts.push(` - ${sentence(route.description)}`);
55
+ const search = searchOf(route.search);
56
+ if (search)
57
+ parts.push(` Search: ${search}.`);
58
+ if (route.views.length > 0)
59
+ parts.push(` Views: ${route.views.join(", ")}.`);
60
+ return parts.join("");
61
+ });
62
+ return `\n\nPages:\n${lines.join("\n")}`;
63
+ }
64
+ function screenDescription(manifest) {
65
+ return ([
66
+ "Read what the user currently sees in the app: the route, the actions feeding the screen (name and input, never data), the views on screen with their values, and attention.",
67
+ "route is the page the url matched, with notFound: false, its path pattern, params, search and url; when the url matches no page and the app shows its not-found screen, route is notFound: true with only the url.",
68
+ "attention holds focus (the focused element), selection (the text the user selected and the view holding it; null unless the selection lies inside one view), lastInteracted (the view the user last clicked or focused), lastEntered (the view the user last scrolled into view; null until the user scrolls, since items already on screen when the page renders never count), and focal (the view nearest the middle of the viewport).",
69
+ "Keyed views list only the items inside the viewport, in screen order, plus an offscreen count.",
70
+ "The result names the app client it came from and every other open client.",
71
+ "Returns reachable: false when the app is not open anywhere.",
72
+ ].join(" ") + viewCatalog(manifest));
73
+ }
74
+ function navigateDescription(manifest) {
75
+ return ([
76
+ "Take the user's app to a page, filling $params in the path from params.",
77
+ "Waits for the page's data to load (up to 1.5 s) and returns the new screen in ui_screen's shape, so its route shows the page the app landed on.",
78
+ "Returns reachable: false with an href to hand the user when the app is not open.",
79
+ ].join(" ") + routeCatalog(manifest));
80
+ }
81
+ function writableCatalog(manifest) {
82
+ const lines = (manifest?.views ?? [])
83
+ .filter((view) => view.writable.length > 0)
84
+ .map((view) => `- ${view.name}${view.keyed ? " (keyed)" : ""}: ${sentence(view.description)} Fields: ${view.writable.join(", ")}.`);
85
+ return lines.length === 0 ? "" : `\n\nForms you can fill:\n${lines.join("\n")}`;
86
+ }
87
+ function setDescription(manifest) {
88
+ return ([
89
+ "Fill fields of a form the user sees, as a proposal: the user reviews it and submits it themselves. Call the matching action instead only when the user explicitly asks you to submit.",
90
+ "value is merged into the view's current value field by field; fields you omit keep what the user typed.",
91
+ "Returns the view's value read back from the screen and agentFields, the fields that still hold what you wrote; a field missing from agentFields was changed by the user.",
92
+ "Refuses with not_mounted, not_writable, user_editing (the user is typing in that field: wait or ask), invalid_value (issues name the fields), or ambiguous_client.",
93
+ "Returns reachable: false when the app is not open.",
94
+ ].join(" ") + writableCatalog(manifest));
95
+ }
96
+ function highlightDescription() {
97
+ return [
98
+ "Point at something on the user's screen: scrolls a view (a keyed item by key) or one field inside it into the middle of the screen, focuses the field (not on a touch screen, where that opens the keyboard), and marks it for two seconds.",
99
+ "Use it to show the user what you mean or to ask which one they meant.",
100
+ "Returns shown, the visible fraction after scrolling, or not_mounted when it is not on screen, or reachable: false when the app is not open.",
101
+ "Refuses with user_editing when the user is typing in another field: wait or ask, and it moves nothing.",
102
+ ].join(" ");
103
+ }
104
+ function routeEnum(manifest) {
105
+ const paths = manifest?.routes.map((route) => route.path) ?? [];
106
+ const [first, ...rest] = paths;
107
+ return first === undefined ? z.string() : z.enum([first, ...rest]);
108
+ }
109
+ function defineTool(tool) {
110
+ return tool;
111
+ }
112
+ function withClients(directory, scope, selection, snapshot) {
113
+ const chosen = selection.target.client;
114
+ return {
115
+ client: directory.summary(chosen),
116
+ otherClients: directory.summaries(scope).filter((c) => c.id !== chosen.id),
117
+ ...(selection.tied.length > 0 ? { tiedWith: selection.tied.map((c) => c.id) } : {}),
118
+ ...snapshot,
119
+ };
120
+ }
121
+ function missingParams(route, params) {
122
+ const missing = route.params.filter((name) => !params?.[name]);
123
+ if (missing.length === 0)
124
+ return;
125
+ throw new UiFailure({
126
+ code: "unknown_route",
127
+ message: `${route.path} needs params: ${missing.join(", ")}.`,
128
+ issues: missing.map((name) => ({ path: `params.${name}`, message: "Required" })),
129
+ });
130
+ }
131
+ function hrefFor(href, webOrigin) {
132
+ return webOrigin ? new URL(href, webOrigin).href : href;
133
+ }
134
+ export function createUiTools(deps) {
135
+ const { directory, broker } = deps;
136
+ const refuseTie = (selection) => {
137
+ if (selection.tied.length === 0)
138
+ return;
139
+ const candidates = [selection.target.client, ...selection.tied];
140
+ throw new UiFailure({
141
+ code: "ambiguous_client",
142
+ message: "The user has several app clients open and none stands out. Ask which one, then retry with clientId.",
143
+ issues: candidates.map((client) => {
144
+ const summary = directory.summary(client);
145
+ return {
146
+ path: "clientId",
147
+ message: `${summary.id} (${summary.platform}, ${summary.focused ? "focused" : "not focused"}, ${summary.visible ? "visible" : "hidden"}, seen ${summary.seenAgoMs} ms ago)`,
148
+ };
149
+ }),
150
+ });
151
+ };
152
+ const requireOp = (selection, op) => {
153
+ const { client } = selection.target;
154
+ if (client.ops.includes(op))
155
+ return;
156
+ throw new UiFailure({
157
+ code: "unsupported_op",
158
+ message: `The app client ${client.id} (${client.platform}${client.buildId ? `, build ${client.buildId}` : ""}) is too old for ui_${op}. Ask the user to update the app; ui_screen and ui_navigate still work.`,
159
+ });
160
+ };
161
+ const select = (ctx, clientId) => {
162
+ if (ctx.clientId !== undefined)
163
+ return selectBound(ctx, ctx.clientId, clientId);
164
+ if (clientId !== undefined && !directory.connected(ctx.scope, clientId)) {
165
+ const connected = directory.summaries(ctx.scope).map((client) => client.id);
166
+ throw new UiFailure({
167
+ code: "unknown_client",
168
+ message: `No app client ${clientId} is connected. Connected clients: ${connected.join(", ") || "none"}.`,
169
+ issues: connected.map((id) => ({ path: "clientId", message: id })),
170
+ });
171
+ }
172
+ return directory.select(ctx.scope, clientId);
173
+ };
174
+ const selectBound = (ctx, bound, requested) => {
175
+ if (requested !== undefined && requested !== bound) {
176
+ throw new UiFailure({
177
+ code: "unknown_client",
178
+ message: `This chat acts on the app client its prompt came from, not on ${requested}.`,
179
+ });
180
+ }
181
+ if (!directory.connected(ctx.scope, bound)) {
182
+ throw new UiFailure({
183
+ code: "unknown_client",
184
+ message: "The app client this chat was sent from is no longer connected.",
185
+ });
186
+ }
187
+ return directory.select(ctx.scope, bound);
188
+ };
189
+ const build = (manifest) => {
190
+ const screen = defineTool({
191
+ name: "ui_screen",
192
+ description: screenDescription(manifest),
193
+ input: uiOpInputs.screen.extend({ clientId: clientIdInput }),
194
+ readOnly: uiOpReadOnly.screen,
195
+ async run({ clientId }, ctx) {
196
+ const selection = select(ctx, clientId);
197
+ if (!selection)
198
+ return UNREACHABLE;
199
+ const snapshot = await broker.request(selection.target, "screen", {}, ctx.origin, ctx.signal);
200
+ return withClients(directory, ctx.scope, selection, snapshot);
201
+ },
202
+ });
203
+ const navigate = defineTool({
204
+ name: "ui_navigate",
205
+ description: navigateDescription(manifest),
206
+ input: uiOpInputs.navigate.extend({
207
+ to: routeEnum(manifest).describe("The page's route path, exactly as listed."),
208
+ clientId: clientIdInput,
209
+ }),
210
+ readOnly: uiOpReadOnly.navigate,
211
+ async run({ to, params, search, replace, clientId }, ctx) {
212
+ const selection = select(ctx, clientId);
213
+ const route = manifest?.routes.find((entry) => entry.path === to);
214
+ if (manifest && manifest.routes.length > 0 && !route) {
215
+ throw new UiFailure({ code: "unknown_route", message: `No page at ${to}.` });
216
+ }
217
+ if (route)
218
+ missingParams(route, params);
219
+ if (!selection) {
220
+ const href = routeHref(route ?? { path: to, params: [], views: [] }, params, search);
221
+ return { ...UNREACHABLE, href: hrefFor(href, ctx.webOrigin) };
222
+ }
223
+ refuseTie(selection);
224
+ const input = {
225
+ to,
226
+ ...(params ? { params } : {}),
227
+ ...(search ? { search } : {}),
228
+ ...(replace === undefined ? {} : { replace }),
229
+ };
230
+ const result = await broker.request(selection.target, "navigate", input, ctx.origin, ctx.signal);
231
+ const navigated = {
232
+ client: directory.summary(selection.target.client),
233
+ screen: result.screen,
234
+ };
235
+ return navigated;
236
+ },
237
+ });
238
+ const set = defineTool({
239
+ name: toolName("set"),
240
+ description: setDescription(manifest),
241
+ input: uiOpInputs.set.extend({ clientId: clientIdInput }),
242
+ readOnly: uiOpReadOnly.set,
243
+ async run({ view, key, value, clientId }, ctx) {
244
+ const selection = select(ctx, clientId);
245
+ if (!selection)
246
+ return UNREACHABLE;
247
+ refuseTie(selection);
248
+ requireOp(selection, "set");
249
+ const result = await broker.request(selection.target, "set", { view, ...(key === undefined ? {} : { key }), value }, ctx.origin, ctx.signal);
250
+ const written = {
251
+ client: directory.summary(selection.target.client),
252
+ ...result,
253
+ };
254
+ return written;
255
+ },
256
+ });
257
+ const highlight = defineTool({
258
+ name: toolName("highlight"),
259
+ description: highlightDescription(),
260
+ input: uiOpInputs.highlight.extend({ clientId: clientIdInput }),
261
+ readOnly: uiOpReadOnly.highlight,
262
+ async run({ view, key, field, clientId }, ctx) {
263
+ const selection = select(ctx, clientId);
264
+ if (!selection)
265
+ return UNREACHABLE;
266
+ refuseTie(selection);
267
+ requireOp(selection, "highlight");
268
+ const result = await broker.request(selection.target, "highlight", {
269
+ view,
270
+ ...(key === undefined ? {} : { key }),
271
+ ...(field === undefined ? {} : { field }),
272
+ }, ctx.origin, ctx.signal);
273
+ const pointed = {
274
+ client: directory.summary(selection.target.client),
275
+ ...result,
276
+ };
277
+ return pointed;
278
+ },
279
+ });
280
+ const byOp = {
281
+ screen,
282
+ navigate,
283
+ set,
284
+ highlight,
285
+ };
286
+ return UI_OPS.map((op) => byOp[op]);
287
+ };
288
+ let cachedFor;
289
+ let cached = build(undefined);
290
+ return (manifest) => {
291
+ if (manifest !== cachedFor) {
292
+ cached = build(manifest);
293
+ cachedFor = manifest;
294
+ }
295
+ return cached;
296
+ };
297
+ }
298
+ export function uiInstructions() {
299
+ return [
300
+ "This app's screen is visible to you through the ui_ tools, next to the app's actions.",
301
+ 'Call ui_screen to see what the user is looking at before acting on words like "this", "that" or "here".',
302
+ "Resolve them from attention in this order: focus, selection, lastInteracted, focal.",
303
+ "A keyed view's key is the entity id that the app's actions take, so pass it straight to the action.",
304
+ "Do the work through actions; the screen updates by itself.",
305
+ "To show the user a page, call ui_navigate with a path from its list.",
306
+ "You fill forms and the user submits them: use ui_set to fill a form, and call the action that submits it only when the user explicitly asks you to.",
307
+ "Some actions ask the user to approve them in the app before they run: call them as usual and wait. If one fails with declined, do not retry unless the user asks again; if it fails with confirmation_unavailable, ask the user to do it in the app themselves.",
308
+ "Use ui_highlight to point at what you mean, or at candidates when you need the user to pick one.",
309
+ "If a ui_ tool returns reachable: false, the app is not open: tell the user, and for navigation hand them the href.",
310
+ ].join("\n");
311
+ }
312
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/server/tools.ts"],"names":[],"mappings":"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"}
package/dist/view.d.ts ADDED
@@ -0,0 +1,54 @@
1
+ import type { StandardSchemaV1 } from "@standard-schema/spec";
2
+ export type ViewSchema = StandardSchemaV1<unknown, Readonly<Record<string, unknown>>>;
3
+ export type ViewField<S extends ViewSchema> = keyof StandardSchemaV1.InferOutput<S> & string;
4
+ export type ViewWritable<S extends ViewSchema> = boolean | readonly ViewField<S>[];
5
+ export interface AgentViewConfig<N extends string, S extends ViewSchema, K extends boolean, W extends ViewWritable<S>> {
6
+ readonly name: N;
7
+ readonly description: string;
8
+ readonly schema: S;
9
+ readonly keyed?: K | undefined;
10
+ /** `true` opens every top-level field to `ui_set`, a list opens only those. Default `false`. */
11
+ readonly writable?: W | undefined;
12
+ }
13
+ declare const kView: unique symbol;
14
+ export interface AgentViewDefinition<N extends string = string, S extends ViewSchema = ViewSchema, K extends boolean = boolean, W extends boolean | readonly string[] = boolean | readonly string[]> {
15
+ readonly [kView]: true;
16
+ readonly name: N;
17
+ readonly description: string;
18
+ readonly schema: S;
19
+ readonly keyed: K;
20
+ readonly writable: W;
21
+ }
22
+ export type AnyAgentView = AgentViewDefinition<string, ViewSchema, boolean, boolean | readonly string[]>;
23
+ export declare function defineAgentView<const N extends string, S extends ViewSchema, const K extends boolean = false, const W extends ViewWritable<S> = false>(config: AgentViewConfig<N, S, K, W>): AgentViewDefinition<N, S, K, W>;
24
+ export declare function isAgentView(value: unknown): value is AnyAgentView;
25
+ export type ViewValue<D extends AnyAgentView> = StandardSchemaV1.InferOutput<D["schema"]>;
26
+ type FieldsOf<W, D extends AnyAgentView> = W extends true ? ViewField<D["schema"]> : W extends readonly (infer F)[] ? F : never;
27
+ export type WritableField<D extends AnyAgentView> = FieldsOf<D["writable"], D>;
28
+ export type IsWritable<D extends AnyAgentView> = [WritableField<D>] extends [never] ? false : true;
29
+ type KeyBinding<D extends AnyAgentView> = D["keyed"] extends true ? {
30
+ readonly key: string;
31
+ } : {
32
+ readonly key?: undefined;
33
+ };
34
+ /**
35
+ * Applies an agent's write. `next` is the whole value, already validated by the view's
36
+ * schema; `changed` lists the fields the agent sent. Contract: once `set` returns (or its
37
+ * promise resolves), `get()` reflects the write. `useAgentView` keeps it for React state by
38
+ * running `set` inside `flushSync`.
39
+ */
40
+ export type ViewSetter<D extends AnyAgentView> = (next: ViewValue<D>, changed: readonly WritableField<D>[]) => void | Promise<void>;
41
+ type SetBinding<D extends AnyAgentView> = IsWritable<D> extends true ? {
42
+ readonly set: ViewSetter<D>;
43
+ } : {
44
+ readonly set?: undefined;
45
+ };
46
+ export type AgentViewBinding<D extends AnyAgentView> = {
47
+ readonly get: () => ViewValue<D>;
48
+ } & KeyBinding<D> & SetBinding<D>;
49
+ export interface ViewRef {
50
+ readonly view: string;
51
+ readonly key?: string | undefined;
52
+ }
53
+ export {};
54
+ //# sourceMappingURL=view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"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"}
package/dist/view.js ADDED
@@ -0,0 +1,15 @@
1
+ const kView = Symbol.for("parlor.agentView");
2
+ export function defineAgentView(config) {
3
+ return {
4
+ name: config.name,
5
+ description: config.description,
6
+ schema: config.schema,
7
+ keyed: (config.keyed ?? false),
8
+ writable: (config.writable ?? false),
9
+ [kView]: true,
10
+ };
11
+ }
12
+ export function isAgentView(value) {
13
+ return typeof value === "object" && value !== null && kView in value;
14
+ }
15
+ //# sourceMappingURL=view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view.js","sourceRoot":"","sources":["../src/view.ts"],"names":[],"mappings":"AAuBA,MAAM,KAAK,GAAkB,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AAuB5D,MAAM,UAAU,eAAe,CAK7B,MAAmC;IACnC,OAAO;QACL,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAM;QACnC,QAAQ,EAAE,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,CAAM;QACzC,CAAC,KAAK,CAAC,EAAE,IAAI;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAc;IACxC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC;AACvE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { agentManifest, type AgentManifestOptions, DEFAULT_ROUTE_TREE, manifestFromModule, } from "./plugin.js";
2
+ export { buildUiManifest, describeView } from "./manifest.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,KAAK,oBAAoB,EACzB,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { agentManifest, DEFAULT_ROUTE_TREE, manifestFromModule, } from "./plugin.js";
2
+ export { buildUiManifest, describeView } from "./manifest.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vite/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ManifestBuild, UiAppInfo, ViewEntry } from "../manifest.js";
2
+ import { type AnyAgentView } from "../view.js";
3
+ export declare function describeView(view: AnyAgentView): ViewEntry;
4
+ export declare function buildUiManifest(app: UiAppInfo, routeTree: unknown): ManifestBuild;
5
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../src/vite/manifest.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,aAAa,EAEb,SAAS,EACT,SAAS,EACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,YAAY,EAAe,MAAM,YAAY,CAAC;AAwD5D,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,SAAS,CAS1D;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,GAAG,aAAa,CAwDjF"}
@@ -0,0 +1,107 @@
1
+ import { $ZodType, toJSONSchema } from "zod/v4/core";
2
+ import { isAgentView } from "../view.js";
3
+ function childrenOf(route) {
4
+ const { children } = route;
5
+ if (!children || typeof children !== "object")
6
+ return [];
7
+ return (Array.isArray(children) ? children : Object.values(children));
8
+ }
9
+ function joinPath(parent, path) {
10
+ const segments = [...parent.split("/"), ...(path ?? "").split("/")].filter(Boolean);
11
+ return `/${segments.join("/")}`;
12
+ }
13
+ function paramsOf(path) {
14
+ return path
15
+ .split("/")
16
+ .filter((segment) => segment.startsWith("$"))
17
+ .map((segment) => (segment === "$" ? "_splat" : segment.slice(1)));
18
+ }
19
+ function jsonSchemaOf(schema, io) {
20
+ if (schema instanceof $ZodType)
21
+ return toJSONSchema(schema, { io });
22
+ const converter = schema?.["~standard"]
23
+ ?.jsonSchema;
24
+ if (!converter)
25
+ return undefined;
26
+ try {
27
+ return converter[io]({ target: "draft-2020-12" });
28
+ }
29
+ catch {
30
+ return undefined;
31
+ }
32
+ }
33
+ function writableFields(view, schema) {
34
+ if (view.writable === true) {
35
+ const properties = schema?.properties;
36
+ return typeof properties === "object" && properties !== null
37
+ ? Object.keys(properties)
38
+ : [];
39
+ }
40
+ return view.writable === false ? [] : [...view.writable];
41
+ }
42
+ export function describeView(view) {
43
+ const schema = jsonSchemaOf(view.schema, "output");
44
+ return {
45
+ name: view.name,
46
+ description: view.description,
47
+ keyed: view.keyed,
48
+ ...(schema ? { schema } : {}),
49
+ writable: writableFields(view, schema),
50
+ };
51
+ }
52
+ export function buildUiManifest(app, routeTree) {
53
+ const warnings = [];
54
+ const routes = [];
55
+ const views = new Map();
56
+ const viewsOf = (route) => {
57
+ const listed = route.options?.staticData?.views;
58
+ if (!Array.isArray(listed))
59
+ return [];
60
+ const found = listed.filter(isAgentView);
61
+ for (const view of found) {
62
+ const known = views.get(view.name);
63
+ if (known && known !== view) {
64
+ throw new Error(`Two different agent views are named "${view.name}".`);
65
+ }
66
+ views.set(view.name, view);
67
+ }
68
+ return found;
69
+ };
70
+ const walk = (route, parentPath, inherited) => {
71
+ const names = [...new Set([...inherited, ...viewsOf(route).map((v) => v.name)])];
72
+ const path = route.isRoot ? "/" : joinPath(parentPath, route.options?.path);
73
+ const children = childrenOf(route);
74
+ if (children.length > 0 || route.isRoot) {
75
+ for (const child of children)
76
+ walk(child, path, names);
77
+ return;
78
+ }
79
+ if (routes.some((entry) => entry.path === path))
80
+ return;
81
+ const description = route.options?.staticData?.description;
82
+ if (typeof description !== "string" || description === "") {
83
+ warnings.push(`Route "${path}" has no staticData.description.`);
84
+ }
85
+ const search = jsonSchemaOf(route.options?.validateSearch, "input");
86
+ routes.push({
87
+ path,
88
+ ...(typeof description === "string" && description !== "" ? { description } : {}),
89
+ params: paramsOf(path),
90
+ ...(search ? { search } : {}),
91
+ views: names,
92
+ });
93
+ };
94
+ if (routeTree && typeof routeTree === "object")
95
+ walk(routeTree, "/", []);
96
+ const entries = [...views.values()].map(describeView);
97
+ for (const entry of entries) {
98
+ if (entry.schema)
99
+ continue;
100
+ warnings.push(`View "${entry.name}" has a schema that cannot be converted to JSON Schema, so the manifest lists it without one.`);
101
+ }
102
+ return {
103
+ manifest: { protocol: 1, app, routes, views: entries },
104
+ warnings,
105
+ };
106
+ }
107
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/vite/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { type Plugin } from "vite";
2
+ import { type ManifestBuild, type UiAppInfo } from "../manifest.js";
3
+ export declare const DEFAULT_ROUTE_TREE = "src/routeTree.gen.ts";
4
+ export interface AgentManifestOptions {
5
+ readonly app: UiAppInfo;
6
+ readonly routeTree?: string | undefined;
7
+ }
8
+ export declare function manifestFromModule(app: UiAppInfo, module: unknown): ManifestBuild;
9
+ export declare function agentManifest(options: AgentManifestOptions): Plugin;
10
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/vite/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAGL,KAAK,MAAM,EAGZ,MAAM,MAAM,CAAC;AAEd,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,SAAS,EAAoB,MAAM,gBAAgB,CAAC;AAGtF,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAIzD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACzC;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,GAAG,aAAa,CAEjF;AAyCD,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,MAAM,CAmHnE"}