@nxisai/agent-harness 0.2.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 (126) hide show
  1. package/README.md +434 -0
  2. package/dist/a2ui/cards.d.ts +55 -0
  3. package/dist/a2ui/cards.d.ts.map +1 -0
  4. package/dist/a2ui/cards.js +133 -0
  5. package/dist/a2ui/cards.js.map +1 -0
  6. package/dist/a2ui/emit.d.ts +33 -0
  7. package/dist/a2ui/emit.d.ts.map +1 -0
  8. package/dist/a2ui/emit.js +116 -0
  9. package/dist/a2ui/emit.js.map +1 -0
  10. package/dist/a2ui/form.d.ts +20 -0
  11. package/dist/a2ui/form.d.ts.map +1 -0
  12. package/dist/a2ui/form.js +92 -0
  13. package/dist/a2ui/form.js.map +1 -0
  14. package/dist/a2ui/host.d.ts +34 -0
  15. package/dist/a2ui/host.d.ts.map +1 -0
  16. package/dist/a2ui/host.js +47 -0
  17. package/dist/a2ui/host.js.map +1 -0
  18. package/dist/a2ui/index.d.ts +23 -0
  19. package/dist/a2ui/index.d.ts.map +1 -0
  20. package/dist/a2ui/index.js +20 -0
  21. package/dist/a2ui/index.js.map +1 -0
  22. package/dist/a2ui/stepper.d.ts +26 -0
  23. package/dist/a2ui/stepper.d.ts.map +1 -0
  24. package/dist/a2ui/stepper.js +162 -0
  25. package/dist/a2ui/stepper.js.map +1 -0
  26. package/dist/a2ui/theme.d.ts +21 -0
  27. package/dist/a2ui/theme.d.ts.map +1 -0
  28. package/dist/a2ui/theme.js +134 -0
  29. package/dist/a2ui/theme.js.map +1 -0
  30. package/dist/a2ui/to-v09.d.ts +31 -0
  31. package/dist/a2ui/to-v09.d.ts.map +1 -0
  32. package/dist/a2ui/to-v09.js +104 -0
  33. package/dist/a2ui/to-v09.js.map +1 -0
  34. package/dist/engine.d.ts +209 -0
  35. package/dist/engine.d.ts.map +1 -0
  36. package/dist/engine.js +505 -0
  37. package/dist/engine.js.map +1 -0
  38. package/dist/harness/harness.d.ts +284 -0
  39. package/dist/harness/harness.d.ts.map +1 -0
  40. package/dist/harness/harness.js +568 -0
  41. package/dist/harness/harness.js.map +1 -0
  42. package/dist/harness/plan.d.ts +32 -0
  43. package/dist/harness/plan.d.ts.map +1 -0
  44. package/dist/harness/plan.js +68 -0
  45. package/dist/harness/plan.js.map +1 -0
  46. package/dist/harness/policy.d.ts +49 -0
  47. package/dist/harness/policy.d.ts.map +1 -0
  48. package/dist/harness/policy.js +34 -0
  49. package/dist/harness/policy.js.map +1 -0
  50. package/dist/harness/renderer.d.ts +163 -0
  51. package/dist/harness/renderer.d.ts.map +1 -0
  52. package/dist/harness/renderer.js +12 -0
  53. package/dist/harness/renderer.js.map +1 -0
  54. package/dist/harness/router/coordinator.d.ts +120 -0
  55. package/dist/harness/router/coordinator.d.ts.map +1 -0
  56. package/dist/harness/router/coordinator.js +145 -0
  57. package/dist/harness/router/coordinator.js.map +1 -0
  58. package/dist/harness/router/rules.d.ts +48 -0
  59. package/dist/harness/router/rules.d.ts.map +1 -0
  60. package/dist/harness/router/rules.js +38 -0
  61. package/dist/harness/router/rules.js.map +1 -0
  62. package/dist/harness/slots.d.ts +73 -0
  63. package/dist/harness/slots.d.ts.map +1 -0
  64. package/dist/harness/slots.js +68 -0
  65. package/dist/harness/slots.js.map +1 -0
  66. package/dist/harness/tools/bridge.d.ts +71 -0
  67. package/dist/harness/tools/bridge.d.ts.map +1 -0
  68. package/dist/harness/tools/bridge.js +271 -0
  69. package/dist/harness/tools/bridge.js.map +1 -0
  70. package/dist/harness/tools/client.d.ts +11 -0
  71. package/dist/harness/tools/client.d.ts.map +1 -0
  72. package/dist/harness/tools/client.js +21 -0
  73. package/dist/harness/tools/client.js.map +1 -0
  74. package/dist/harness/tools/discovery.d.ts +13 -0
  75. package/dist/harness/tools/discovery.d.ts.map +1 -0
  76. package/dist/harness/tools/discovery.js +43 -0
  77. package/dist/harness/tools/discovery.js.map +1 -0
  78. package/dist/harness/tools/local-context.d.ts +38 -0
  79. package/dist/harness/tools/local-context.d.ts.map +1 -0
  80. package/dist/harness/tools/local-context.js +55 -0
  81. package/dist/harness/tools/local-context.js.map +1 -0
  82. package/dist/harness/tools/schema.d.ts +52 -0
  83. package/dist/harness/tools/schema.d.ts.map +1 -0
  84. package/dist/harness/tools/schema.js +175 -0
  85. package/dist/harness/tools/schema.js.map +1 -0
  86. package/dist/harness/tools/source.d.ts +65 -0
  87. package/dist/harness/tools/source.d.ts.map +1 -0
  88. package/dist/harness/tools/source.js +89 -0
  89. package/dist/harness/tools/source.js.map +1 -0
  90. package/dist/harness/tools/webmcp.d.ts +50 -0
  91. package/dist/harness/tools/webmcp.d.ts.map +1 -0
  92. package/dist/harness/tools/webmcp.js +114 -0
  93. package/dist/harness/tools/webmcp.js.map +1 -0
  94. package/dist/index.d.ts +49 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +38 -0
  97. package/dist/index.js.map +1 -0
  98. package/dist/providers/types.d.ts +123 -0
  99. package/dist/providers/types.d.ts.map +1 -0
  100. package/dist/providers/types.js +2 -0
  101. package/dist/providers/types.js.map +1 -0
  102. package/dist/types.d.ts +223 -0
  103. package/dist/types.d.ts.map +1 -0
  104. package/dist/types.js +8 -0
  105. package/dist/types.js.map +1 -0
  106. package/dist/ui/agent-fullscreen.d.ts +41 -0
  107. package/dist/ui/agent-fullscreen.d.ts.map +1 -0
  108. package/dist/ui/agent-fullscreen.js +2821 -0
  109. package/dist/ui/agent-fullscreen.js.map +1 -0
  110. package/dist/ui/config.d.ts +88 -0
  111. package/dist/ui/config.d.ts.map +1 -0
  112. package/dist/ui/config.js +96 -0
  113. package/dist/ui/config.js.map +1 -0
  114. package/dist/ui/index.d.ts +22 -0
  115. package/dist/ui/index.d.ts.map +1 -0
  116. package/dist/ui/index.js +19 -0
  117. package/dist/ui/index.js.map +1 -0
  118. package/dist/ui/tailwind.generated.d.ts +2 -0
  119. package/dist/ui/tailwind.generated.d.ts.map +1 -0
  120. package/dist/ui/tailwind.generated.js +3 -0
  121. package/dist/ui/tailwind.generated.js.map +1 -0
  122. package/dist/webmcp-contract.d.ts +57 -0
  123. package/dist/webmcp-contract.d.ts.map +1 -0
  124. package/dist/webmcp-contract.js +11 -0
  125. package/dist/webmcp-contract.js.map +1 -0
  126. package/package.json +39 -0
@@ -0,0 +1,284 @@
1
+ /**
2
+ * The turn loop: discover tools, generate, parse the tool call, resolve what is
3
+ * still unknown, decide whether to ask or act, run the tool, report the result.
4
+ *
5
+ * The harness decides; a {@link HarnessRenderer} draws. What a turn does
6
+ * depends on the tool's own annotations and on how much the model supplied:
7
+ *
8
+ * | Tool | Missing values | Outcome |
9
+ * |---|---|---|
10
+ * | read | none | runs immediately, no UI |
11
+ * | read | some | asks for those, then runs |
12
+ * | write | none | read-only summary and one Submit |
13
+ * | write | several | a stepper, then a confirmation |
14
+ *
15
+ * @module
16
+ */
17
+ import { parseToolCall, type ChatMessage } from '../engine.js';
18
+ import type { ModelContextToolInfo, ModelContextToolResponse } from '../types.js';
19
+ import type { ModelProvider } from '../providers/types.js';
20
+ import { WebMcpTools } from './tools/webmcp.js';
21
+ import { type Decision } from './policy.js';
22
+ import type { HarnessRenderer } from './renderer.js';
23
+ /** Configuration for an {@link AgentHarness}. */
24
+ export interface HarnessOptions {
25
+ /**
26
+ * Where completions come from. Defaults to a {@link LocalGemmaProvider}.
27
+ *
28
+ * Several agents may share one provider, so a coordinator and its specialists
29
+ * need only one model between them.
30
+ */
31
+ provider?: ModelProvider;
32
+ /** Where tools come from. Defaults to the page's WebMCP registry. */
33
+ toolSource?: WebMcpTools;
34
+ /** The UI to drive. The only required option. */
35
+ renderer: HarnessRenderer;
36
+ /**
37
+ * This agent's instructions, asserted at the start of each of its turns.
38
+ *
39
+ * Agents sharing a provider can each hold a different prompt, since the
40
+ * prompt travels with the agent rather than with the model.
41
+ */
42
+ systemPrompt?: string;
43
+ /**
44
+ * Filter deciding which of the page's tools this agent may use.
45
+ *
46
+ * Tool definitions dominate what the model reads each turn, so narrowing them
47
+ * shortens the prompt and reduces the number of wrong tools available to be
48
+ * chosen. Defaults to every tool on the page.
49
+ *
50
+ * @param tool - A tool reported by the tool source.
51
+ * @returns True to expose it to this agent.
52
+ */
53
+ tools?(tool: ModelContextToolInfo): boolean;
54
+ /** This agent's name, used in warnings and the default unavailable message. */
55
+ name?: string;
56
+ /**
57
+ * What to say when none of this agent's tools are on the page.
58
+ *
59
+ * Worth setting per agent, so the message can name what cannot be done here
60
+ * and where it can be done instead.
61
+ */
62
+ unavailable?: string;
63
+ /**
64
+ * Standing values for a tool's schema, such as a saved name or email.
65
+ *
66
+ * @param schema - The tool's input schema.
67
+ * @returns Values keyed by schema property name.
68
+ */
69
+ profile?(schema: unknown): Record<string, unknown>;
70
+ /**
71
+ * Values the host page knows, such as the record currently being viewed.
72
+ *
73
+ * @param tool - The tool about to be called.
74
+ * @returns Values keyed by schema property name.
75
+ */
76
+ context?(tool: ModelContextToolInfo): Record<string, unknown>;
77
+ /**
78
+ * Whether related fields share a step when asking for missing values.
79
+ * Defaults to true. Pass false to ask one question at a time.
80
+ */
81
+ groupRelated?: boolean;
82
+ /** Called whenever the conversation changes, for hosts that persist it. */
83
+ onMessages?(messages: ChatMessage[]): void;
84
+ }
85
+ /** How a turn ended. */
86
+ export interface TurnResult {
87
+ /**
88
+ * The outcome:
89
+ *
90
+ * - a {@link Decision}, when a tool call was resolved;
91
+ * - `'none'`, when the model answered in prose;
92
+ * - `'handback'`, when the model named a tool this agent does not hold, with
93
+ * the name in {@link TurnResult.wanted};
94
+ * - `'unavailable'`, when none of this agent's tools are on the page;
95
+ * - `'stopped'`, when the user cancelled the turn.
96
+ */
97
+ decision: Decision | 'none' | 'handback' | 'unavailable' | 'stopped';
98
+ /** The tool that was called, when one was. */
99
+ tool?: ModelContextToolInfo;
100
+ /** The arguments it was called with. */
101
+ values?: Record<string, unknown>;
102
+ /**
103
+ * The tool the model asked for and this agent does not hold.
104
+ *
105
+ * Set only with `decision: 'handback'`, and used by
106
+ * {@link AgentCoordinator} to move the turn to the agent that holds it.
107
+ */
108
+ wanted?: string;
109
+ }
110
+ /**
111
+ * Whether an error represents a cancelled operation rather than a failure.
112
+ *
113
+ * @param err - The caught value.
114
+ * @returns True for a DOM `AbortError`, as thrown by an aborted `fetch`.
115
+ */
116
+ export declare function isAbort(err: unknown): boolean;
117
+ /**
118
+ * A sentence to show for a turn whose model output was only a tool call.
119
+ *
120
+ * Claims no more than the harness knows at that point: which tool was chosen,
121
+ * and whether it reads or writes.
122
+ *
123
+ * @param call - The parsed tool call, or null if there was none.
124
+ * @param tools - The tools available this turn, used to read the annotations.
125
+ * @returns A short line to display in place of the model's own words.
126
+ */
127
+ export declare function narrateCall(call: ReturnType<typeof parseToolCall>, tools: ModelContextToolInfo[]): string;
128
+ /**
129
+ * How many records a tool response contained.
130
+ *
131
+ * Best-effort: it feeds a summary line, so an unrecognised shape reports
132
+ * nothing rather than guessing.
133
+ *
134
+ * @param res - The tool response, whose `structuredContent` is preferred.
135
+ * @param text - The same response flattened to text, parsed as JSON if needed.
136
+ * @returns The record count, or undefined when the shape is not recognised.
137
+ */
138
+ export declare function countRecords(res: ModelContextToolResponse, text: string): number | undefined;
139
+ /**
140
+ * One agent: a provider, a set of tools, and the loop that runs a turn.
141
+ *
142
+ * Use it directly for a single-agent page, or several behind an
143
+ * {@link AgentCoordinator} to route between specialists.
144
+ *
145
+ * @example
146
+ * ```ts
147
+ * const harness = new AgentHarness({ renderer });
148
+ * const messages: ChatMessage[] = [];
149
+ * await harness.turn('what are your opening hours?', messages);
150
+ * ```
151
+ */
152
+ export declare class AgentHarness {
153
+ /** Where completions come from. May be shared between agents. */
154
+ readonly provider: ModelProvider;
155
+ /** Where tools come from. */
156
+ readonly toolSource: WebMcpTools;
157
+ private renderer;
158
+ private opts;
159
+ /** Values typed into a prompt that is still open, kept across turns. */
160
+ private entered;
161
+ private liveTool;
162
+ /** The in-flight turn's controller, so it can be cancelled. */
163
+ private abort;
164
+ /** The previous request's system prompt and tool names, for the cache hint. */
165
+ private lastPrompt;
166
+ private lastTools;
167
+ constructor(opts: HarnessOptions);
168
+ /**
169
+ * End a turn that the user stopped.
170
+ *
171
+ * Discards any partial answer and keeps the question, recording it if the
172
+ * stop arrived before the turn had done so, so the transcript matches what is
173
+ * on screen.
174
+ */
175
+ private stopTurn;
176
+ /** Report a finished turn and clear the stoppable state. */
177
+ private finished;
178
+ /** Whether the current turn has been stopped. */
179
+ private get stopped();
180
+ /**
181
+ * Abandon the turn in flight.
182
+ *
183
+ * Aborts tool discovery or generation, whichever is running. The turn
184
+ * resolves as `'stopped'` rather than rejecting, so a cancellation is not
185
+ * reported as a failure. Safe to call when nothing is running.
186
+ *
187
+ * A tool call already in progress is not interrupted, since it may have
188
+ * reached a server already.
189
+ */
190
+ stop(): void;
191
+ /**
192
+ * Render a completion for the transcript.
193
+ *
194
+ * The transcript must record the tool call, or the model repeats it on the
195
+ * next turn. Providers returning structured calls have no text form for one,
196
+ * so this writes it. Never displayed: the UI shows `completion.text`.
197
+ */
198
+ private transcribe;
199
+ /**
200
+ * Compare this request with the previous one to build a {@link CacheHint}.
201
+ *
202
+ * Must be called after `applySystemPrompt`, since a handoff between agents
203
+ * replaces both the system message and the tool slice.
204
+ */
205
+ private cacheHint;
206
+ /**
207
+ * Run one turn.
208
+ *
209
+ * The turn moves through phases the renderer is told about as they happen
210
+ * (loading the model, finding tools, generating, running the tool), each on a
211
+ * {@link HarnessRenderer.streaming} bubble with its own label. A renderer
212
+ * should expect the first bubble before any token exists.
213
+ *
214
+ * Starting a turn supersedes any turn still running.
215
+ *
216
+ * @param goal - The user's message.
217
+ * @param messages - The live conversation, appended to in place. The caller
218
+ * keeps ownership of persistence; see {@link HarnessOptions.onMessages}.
219
+ * @returns How the turn ended. A page with no tools, a tool that errors, and
220
+ * a cancellation all resolve normally; see {@link TurnResult.decision}.
221
+ * @throws If the model cannot be loaded (no WebGPU, unreachable weights) or a
222
+ * generation fails for a reason other than being aborted.
223
+ */
224
+ turn(goal: string, messages: ChatMessage[]): Promise<TurnResult>;
225
+ /**
226
+ * Narrow the page's tools to this agent's slice.
227
+ *
228
+ * @param registered - Every tool the tool source reported.
229
+ * @returns The tools matching {@link HarnessOptions.tools}, or all of them
230
+ * when no filter is set.
231
+ */
232
+ private visibleTools;
233
+ /**
234
+ * Whether this agent's filter accepts a tool, by name.
235
+ *
236
+ * Called by {@link AgentCoordinator} when another agent hands a turn back.
237
+ * The filter receives a tool with only its name set, so a filter that
238
+ * inspects annotations should reject a bare name and let the fallback take
239
+ * the turn.
240
+ *
241
+ * @param name - The tool name to test.
242
+ * @returns True when this agent would use that tool.
243
+ */
244
+ owns(name: string): boolean;
245
+ /**
246
+ * Place this agent's instructions at the head of the shared transcript,
247
+ * replacing another agent's if one is there.
248
+ */
249
+ private applySystemPrompt;
250
+ /**
251
+ * Generate once more, instructing the model to call a tool.
252
+ *
253
+ * The instruction is added as a user turn, which carries the most weight in a
254
+ * chat template mid-conversation, and is removed again afterwards so it never
255
+ * remains in the transcript as something the user said.
256
+ *
257
+ * @returns The tool call, or null if the model still did not produce one.
258
+ */
259
+ private retryForToolCall;
260
+ /**
261
+ * Resolve a proposed call's arguments, then run it, confirm it, or ask.
262
+ *
263
+ * @param tool - The tool the model chose.
264
+ * @param rawArgs - Its arguments, before reconciliation against the schema.
265
+ * @param messages - The live conversation.
266
+ * @returns The decision taken and the values it was taken with.
267
+ */
268
+ private act;
269
+ /**
270
+ * Reopen a confirmation as an editable form covering every field, not only
271
+ * the gaps. Reached through {@link ConfirmRequest.onEdit}.
272
+ */
273
+ private askAll;
274
+ /** Discard a live prompt and the values typed into it. */
275
+ private cancel;
276
+ /**
277
+ * Execute a fully resolved call and render its result.
278
+ *
279
+ * Read tools render as records, writes as a detail card. Either way the
280
+ * outcome is written into the transcript so the model can refer back to it.
281
+ */
282
+ private run;
283
+ }
284
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/harness/harness.ts"],"names":[],"mappings":"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"}