@ouispec/agent-worker 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 (191) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +175 -0
  3. package/dist/approvals/client.d.ts +29 -0
  4. package/dist/approvals/client.d.ts.map +1 -0
  5. package/dist/approvals/client.js +50 -0
  6. package/dist/approvals/client.js.map +1 -0
  7. package/dist/approvals/continuation.d.ts +28 -0
  8. package/dist/approvals/continuation.d.ts.map +1 -0
  9. package/dist/approvals/continuation.js +43 -0
  10. package/dist/approvals/continuation.js.map +1 -0
  11. package/dist/approvals/preview.d.ts +15 -0
  12. package/dist/approvals/preview.d.ts.map +1 -0
  13. package/dist/approvals/preview.js +33 -0
  14. package/dist/approvals/preview.js.map +1 -0
  15. package/dist/approvals/requirement.d.ts +15 -0
  16. package/dist/approvals/requirement.d.ts.map +1 -0
  17. package/dist/approvals/requirement.js +26 -0
  18. package/dist/approvals/requirement.js.map +1 -0
  19. package/dist/authz/tool-policy.d.ts +63 -0
  20. package/dist/authz/tool-policy.d.ts.map +1 -0
  21. package/dist/authz/tool-policy.js +23 -0
  22. package/dist/authz/tool-policy.js.map +1 -0
  23. package/dist/container/server.d.ts +24 -0
  24. package/dist/container/server.d.ts.map +1 -0
  25. package/dist/container/server.js +119 -0
  26. package/dist/container/server.js.map +1 -0
  27. package/dist/emit/http-adapter.d.ts +15 -0
  28. package/dist/emit/http-adapter.d.ts.map +1 -0
  29. package/dist/emit/http-adapter.js +35 -0
  30. package/dist/emit/http-adapter.js.map +1 -0
  31. package/dist/emit/types.d.ts +9 -0
  32. package/dist/emit/types.d.ts.map +1 -0
  33. package/dist/emit/types.js +7 -0
  34. package/dist/emit/types.js.map +1 -0
  35. package/dist/events/http-waiter.d.ts +19 -0
  36. package/dist/events/http-waiter.d.ts.map +1 -0
  37. package/dist/events/http-waiter.js +20 -0
  38. package/dist/events/http-waiter.js.map +1 -0
  39. package/dist/index.d.ts +60 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +45 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/lambda/handler.d.ts +38 -0
  44. package/dist/lambda/handler.d.ts.map +1 -0
  45. package/dist/lambda/handler.js +26 -0
  46. package/dist/lambda/handler.js.map +1 -0
  47. package/dist/model.d.ts +33 -0
  48. package/dist/model.d.ts.map +1 -0
  49. package/dist/model.js +15 -0
  50. package/dist/model.js.map +1 -0
  51. package/dist/openapi/document.d.ts +87 -0
  52. package/dist/openapi/document.d.ts.map +1 -0
  53. package/dist/openapi/document.js +117 -0
  54. package/dist/openapi/document.js.map +1 -0
  55. package/dist/openapi/executor.d.ts +51 -0
  56. package/dist/openapi/executor.d.ts.map +1 -0
  57. package/dist/openapi/executor.js +140 -0
  58. package/dist/openapi/executor.js.map +1 -0
  59. package/dist/openapi/index.d.ts +14 -0
  60. package/dist/openapi/index.d.ts.map +1 -0
  61. package/dist/openapi/index.js +9 -0
  62. package/dist/openapi/index.js.map +1 -0
  63. package/dist/openapi/loader.d.ts +81 -0
  64. package/dist/openapi/loader.d.ts.map +1 -0
  65. package/dist/openapi/loader.js +361 -0
  66. package/dist/openapi/loader.js.map +1 -0
  67. package/dist/openapi/x-agent.d.ts +34 -0
  68. package/dist/openapi/x-agent.d.ts.map +1 -0
  69. package/dist/openapi/x-agent.js +102 -0
  70. package/dist/openapi/x-agent.js.map +1 -0
  71. package/dist/orchestrator.d.ts +12 -0
  72. package/dist/orchestrator.d.ts.map +1 -0
  73. package/dist/orchestrator.js +1019 -0
  74. package/dist/orchestrator.js.map +1 -0
  75. package/dist/prompt/builder.d.ts +29 -0
  76. package/dist/prompt/builder.d.ts.map +1 -0
  77. package/dist/prompt/builder.js +129 -0
  78. package/dist/prompt/builder.js.map +1 -0
  79. package/dist/prompt/index.d.ts +15 -0
  80. package/dist/prompt/index.d.ts.map +1 -0
  81. package/dist/prompt/index.js +13 -0
  82. package/dist/prompt/index.js.map +1 -0
  83. package/dist/prompt/rules/base.d.ts +6 -0
  84. package/dist/prompt/rules/base.d.ts.map +1 -0
  85. package/dist/prompt/rules/base.js +38 -0
  86. package/dist/prompt/rules/base.js.map +1 -0
  87. package/dist/prompt/rules/communication.d.ts +7 -0
  88. package/dist/prompt/rules/communication.d.ts.map +1 -0
  89. package/dist/prompt/rules/communication.js +53 -0
  90. package/dist/prompt/rules/communication.js.map +1 -0
  91. package/dist/prompt/rules/tool-strategy.d.ts +6 -0
  92. package/dist/prompt/rules/tool-strategy.d.ts.map +1 -0
  93. package/dist/prompt/rules/tool-strategy.js +42 -0
  94. package/dist/prompt/rules/tool-strategy.js.map +1 -0
  95. package/dist/prompt/rules/ui-control.d.ts +10 -0
  96. package/dist/prompt/rules/ui-control.d.ts.map +1 -0
  97. package/dist/prompt/rules/ui-control.js +44 -0
  98. package/dist/prompt/rules/ui-control.js.map +1 -0
  99. package/dist/prompt/types.d.ts +85 -0
  100. package/dist/prompt/types.d.ts.map +1 -0
  101. package/dist/prompt/types.js +10 -0
  102. package/dist/prompt/types.js.map +1 -0
  103. package/dist/realtime/long-poll.d.ts +21 -0
  104. package/dist/realtime/long-poll.d.ts.map +1 -0
  105. package/dist/realtime/long-poll.js +36 -0
  106. package/dist/realtime/long-poll.js.map +1 -0
  107. package/dist/runtime/config.d.ts +4 -0
  108. package/dist/runtime/config.d.ts.map +1 -0
  109. package/dist/runtime/config.js +29 -0
  110. package/dist/runtime/config.js.map +1 -0
  111. package/dist/runtime/turn-runner.d.ts +32 -0
  112. package/dist/runtime/turn-runner.d.ts.map +1 -0
  113. package/dist/runtime/turn-runner.js +216 -0
  114. package/dist/runtime/turn-runner.js.map +1 -0
  115. package/dist/runtime/types.d.ts +244 -0
  116. package/dist/runtime/types.d.ts.map +1 -0
  117. package/dist/runtime/types.js +2 -0
  118. package/dist/runtime/types.js.map +1 -0
  119. package/dist/testing/desk-events.d.ts +12 -0
  120. package/dist/testing/desk-events.d.ts.map +1 -0
  121. package/dist/testing/desk-events.js +62 -0
  122. package/dist/testing/desk-events.js.map +1 -0
  123. package/dist/testing/index.d.ts +8 -0
  124. package/dist/testing/index.d.ts.map +1 -0
  125. package/dist/testing/index.js +7 -0
  126. package/dist/testing/index.js.map +1 -0
  127. package/dist/testing/openapi-fixture.d.ts +47 -0
  128. package/dist/testing/openapi-fixture.d.ts.map +1 -0
  129. package/dist/testing/openapi-fixture.js +370 -0
  130. package/dist/testing/openapi-fixture.js.map +1 -0
  131. package/dist/tools/async-binding.d.ts +71 -0
  132. package/dist/tools/async-binding.d.ts.map +1 -0
  133. package/dist/tools/async-binding.js +104 -0
  134. package/dist/tools/async-binding.js.map +1 -0
  135. package/dist/tools/builtin-tools.d.ts +20 -0
  136. package/dist/tools/builtin-tools.d.ts.map +1 -0
  137. package/dist/tools/builtin-tools.js +108 -0
  138. package/dist/tools/builtin-tools.js.map +1 -0
  139. package/dist/tools/entity-tools.d.ts +6 -0
  140. package/dist/tools/entity-tools.d.ts.map +1 -0
  141. package/dist/tools/entity-tools.js +227 -0
  142. package/dist/tools/entity-tools.js.map +1 -0
  143. package/dist/tools/input-validation.d.ts +16 -0
  144. package/dist/tools/input-validation.d.ts.map +1 -0
  145. package/dist/tools/input-validation.js +75 -0
  146. package/dist/tools/input-validation.js.map +1 -0
  147. package/dist/tools/load-all-tools.d.ts +12 -0
  148. package/dist/tools/load-all-tools.d.ts.map +1 -0
  149. package/dist/tools/load-all-tools.js +42 -0
  150. package/dist/tools/load-all-tools.js.map +1 -0
  151. package/dist/tools/schema-loader.d.ts +24 -0
  152. package/dist/tools/schema-loader.d.ts.map +1 -0
  153. package/dist/tools/schema-loader.js +267 -0
  154. package/dist/tools/schema-loader.js.map +1 -0
  155. package/dist/tools/types.d.ts +85 -0
  156. package/dist/tools/types.d.ts.map +1 -0
  157. package/dist/tools/types.js +22 -0
  158. package/dist/tools/types.js.map +1 -0
  159. package/dist/turn-policy.d.ts +68 -0
  160. package/dist/turn-policy.d.ts.map +1 -0
  161. package/dist/turn-policy.js +21 -0
  162. package/dist/turn-policy.js.map +1 -0
  163. package/dist/types.d.ts +151 -0
  164. package/dist/types.d.ts.map +1 -0
  165. package/dist/types.js +2 -0
  166. package/dist/types.js.map +1 -0
  167. package/dist/ui/channel.d.ts +64 -0
  168. package/dist/ui/channel.d.ts.map +1 -0
  169. package/dist/ui/channel.js +81 -0
  170. package/dist/ui/channel.js.map +1 -0
  171. package/dist/ui/knowledge.d.ts +30 -0
  172. package/dist/ui/knowledge.d.ts.map +1 -0
  173. package/dist/ui/knowledge.js +66 -0
  174. package/dist/ui/knowledge.js.map +1 -0
  175. package/dist/ui/observations.d.ts +41 -0
  176. package/dist/ui/observations.d.ts.map +1 -0
  177. package/dist/ui/observations.js +236 -0
  178. package/dist/ui/observations.js.map +1 -0
  179. package/dist/ui/snapshot.d.ts +33 -0
  180. package/dist/ui/snapshot.d.ts.map +1 -0
  181. package/dist/ui/snapshot.js +75 -0
  182. package/dist/ui/snapshot.js.map +1 -0
  183. package/dist/ui/ui-sequence.d.ts +75 -0
  184. package/dist/ui/ui-sequence.d.ts.map +1 -0
  185. package/dist/ui/ui-sequence.js +73 -0
  186. package/dist/ui/ui-sequence.js.map +1 -0
  187. package/dist/ui/ui-tools.d.ts +59 -0
  188. package/dist/ui/ui-tools.d.ts.map +1 -0
  189. package/dist/ui/ui-tools.js +244 -0
  190. package/dist/ui/ui-tools.js.map +1 -0
  191. package/package.json +78 -0
@@ -0,0 +1,244 @@
1
+ import { boundObservations } from './observations.js';
2
+ import { createUISequence } from './ui-sequence.js';
3
+ const DEFAULT_MAX_OBSERVATION_CHARS = 6_000;
4
+ /**
5
+ * When to send a request again while no tab has received it (dispatchUntilAnswered):
6
+ * after 1 s, then 2, 4, and every 8 s.
7
+ */
8
+ export const FIRST_RESEND_AFTER_MS = 1_000;
9
+ export const MAX_RESEND_AFTER_MS = 8_000;
10
+ /**
11
+ * When to send a request a tab received again, if its answer has not come: by
12
+ * then longer than the tab waits before answering a repeat (oui-spec's
13
+ * `reanswerAfterMs`, 8 s), so the repeat recovers an answer that was lost.
14
+ */
15
+ export const RECEIVED_RESEND_AFTER_MS = 10_000;
16
+ /** How long to wait for an async action's outcome when it declares no limit of its own. */
17
+ export const DEFAULT_JOB_WAIT_MS = 5 * 60_000;
18
+ /** Build the UI tools for a set of surfaces. The first surface to declare an action id keeps it. */
19
+ export function buildUITools(surfaces, deps) {
20
+ const tools = [];
21
+ const owner = new Map();
22
+ const collisions = [];
23
+ const sequence = deps.sequence ?? createUISequence();
24
+ for (const surface of surfaces) {
25
+ for (const action of surface.actions) {
26
+ const kept = owner.get(action.id);
27
+ if (kept !== undefined) {
28
+ collisions.push({ actionId: action.id, keptSurface: kept, droppedSurface: surface.id });
29
+ continue;
30
+ }
31
+ owner.set(action.id, surface.id);
32
+ tools.push(uiTool(surface, action, deps, sequence));
33
+ }
34
+ }
35
+ return { tools, collisions };
36
+ }
37
+ function uiTool(surface, action, deps, sequence) {
38
+ return {
39
+ name: action.id,
40
+ kind: 'ui',
41
+ description: describe(surface, action),
42
+ inputSchema: (action.input ?? { type: 'object', properties: {} }),
43
+ // The approval card's words and whether a call needs approval come from
44
+ // the declaration (ADR-0228 §2.1–2.2). `confirm` marks a destructive
45
+ // action, or one that changes what the person works in: either asks.
46
+ ...(action.title ? { title: action.title } : { title: action.description }),
47
+ consequence: action.description,
48
+ ...(action.effect !== undefined ? { effect: action.effect } : {}),
49
+ ...(action.confirm ? { destructive: true } : {}),
50
+ execute(input, ctx) {
51
+ // In the place the orchestrator took when the model's call arrived, or,
52
+ // called directly, in a place taken now (ui-sequence.ts).
53
+ const slot = ctx.uiSlot ?? sequence.reserve();
54
+ return slot.run(() => runAction(surface, action, deps, sequence, input, ctx));
55
+ },
56
+ };
57
+ }
58
+ async function runAction(surface, action, deps, sequence, input, ctx) {
59
+ const requestId = ctx.toolCallId;
60
+ const room = ctx.socketRoom;
61
+ if (!requestId || !room) {
62
+ throw new Error(`[agent-sdk] UI tool ${action.id} needs the tool call id and the turn's room`);
63
+ }
64
+ // The page as the actions before this one left it.
65
+ const before = sequence.latestSurfaces() ?? deps.currentSurfaces();
66
+ // The surfaces the worker holds, so the answer repeats them only if they changed (oui-spec §7.3.4).
67
+ const knownSurfaces = sequence.knownHash();
68
+ const request = {
69
+ requestId,
70
+ surfaceId: surface.id,
71
+ actionId: action.id,
72
+ params: input,
73
+ timestamp: Date.now(),
74
+ ...(ctx.approval ? { approval: ctx.approval } : {}),
75
+ ...(knownSurfaces ? { knownSurfaces } : {}),
76
+ };
77
+ const answered = await dispatchUntilAnswered(deps, room, request, ctx);
78
+ if (!answered.result) {
79
+ const within = `within ${Math.round(deps.resultTimeoutMs / 1000)}s`;
80
+ const sent = `${answered.sends} time${answered.sends === 1 ? '' : 's'}`;
81
+ return {
82
+ success: false,
83
+ error: (answered.received
84
+ ? `The page received "${action.id}" but its answer did not arrive ${within} (the request was sent ${sent}). ` +
85
+ 'It may have run: check what the page shows before trying again.'
86
+ : answered.receipts
87
+ ? `No open page received "${action.id}" ${within} (sent ${sent}): the person's page may be closed or offline. ` +
88
+ 'It did not run there. Tell the user the page is not responding.'
89
+ : `The page did not answer "${action.id}" ${within}, though the request was sent to it ${sent}. ` +
90
+ 'It may or may not have run: check what the page shows before trying again, and tell the user if it is not responding.'),
91
+ };
92
+ }
93
+ const result = withSurfaces(answered.result, sequence);
94
+ deps.onResult(result);
95
+ // Work that outlives the call (a GPU job, an export) was only started: wait
96
+ // for its outcome, so the model tells the person it is done only once it is.
97
+ const final = result.success && result.interim ? await awaitOutcome(action, deps, requestId, ctx) : null;
98
+ const outcome = final && final !== 'running' ? withSurfaces(final, sequence) : final;
99
+ if (outcome && outcome !== 'running')
100
+ deps.onResult(outcome);
101
+ const answer = outcome && outcome !== 'running' ? outcome : result;
102
+ const data = {
103
+ ...forModel(answer, before, deps.maxObservationChars ?? DEFAULT_MAX_OBSERVATION_CHARS, surface.id),
104
+ ...(outcome === 'running' ? { status: 'running', note: stillRunningNote(action) } : {}),
105
+ };
106
+ return answer.success
107
+ ? { success: true, data }
108
+ : { success: false, data, error: answer.error?.message ?? `"${action.id}" failed` };
109
+ }
110
+ /**
111
+ * Send the request to the turn's room, and send it again only while it may not
112
+ * have reached the page (oui-spec §7.3.7).
113
+ *
114
+ * A room delivers only to the sockets in it when the event is sent. The tab
115
+ * joins the turn's room once it learns the room from the send-message answer,
116
+ * while the worker may already be running the turn: the turn after an
117
+ * approval runs its approved call at once, before any model round, and the
118
+ * first send can reach nobody. So while no tab has received the request it is
119
+ * sent again, backing off (1, 2, 4, then every 8 s).
120
+ *
121
+ * Once a tab has received it (the realtime service's receipts), its answer is
122
+ * waited for, not asked for again: on dev (2026-10-02 09:11Z) a fixed 2 s
123
+ * re-send made the tab answer every copy, the copies of a large answer queued
124
+ * on its one socket, and the next request's answer missed its window though
125
+ * its action had run. It is sent again only after RECEIVED_RESEND_AFTER_MS of
126
+ * silence, in case the answer was lost; the tab then answers the repeat once.
127
+ */
128
+ async function dispatchUntilAnswered(deps, room, request, ctx) {
129
+ const deadline = Date.now() + deps.resultTimeoutMs;
130
+ let sends = 0;
131
+ let received = false;
132
+ let receipts = false;
133
+ let backoff = FIRST_RESEND_AFTER_MS;
134
+ for (;;) {
135
+ const receipt = await deps.channel.dispatch(room, request);
136
+ sends++;
137
+ if (receipt) {
138
+ receipts = true;
139
+ if (receipt.accepted > 0)
140
+ received = true;
141
+ }
142
+ const left = deadline - Date.now();
143
+ const wait = received ? RECEIVED_RESEND_AFTER_MS : backoff;
144
+ const result = await deps.channel.awaitResult(request.requestId, {
145
+ userId: ctx.userId,
146
+ timeoutMs: Math.max(0, Math.min(wait, left)),
147
+ signal: ctx.abortSignal,
148
+ });
149
+ if (result || Date.now() >= deadline || ctx.abortSignal?.aborted)
150
+ return { result, sends, received, receipts };
151
+ if (!received)
152
+ backoff = Math.min(backoff * 2, MAX_RESEND_AFTER_MS);
153
+ }
154
+ }
155
+ /**
156
+ * An answer with the surfaces it stands for: those it carries, or those the
157
+ * worker holds under the hash it reports (an answer repeats surfaces only when
158
+ * they changed). Recorded as the page's surfaces from now on.
159
+ */
160
+ function withSurfaces(result, sequence) {
161
+ const surfaces = sequence.resolve(result);
162
+ sequence.record(surfaces, result.surfacesHash);
163
+ return surfaces && !result.surfaces ? { ...result, surfaces } : result;
164
+ }
165
+ /**
166
+ * The final answer to a started action: its outcome once the work is done or
167
+ * has failed, or `'running'` when it has not finished by its own limit (its
168
+ * polling's `maxDurationMs`) or by when the turn must stop waiting.
169
+ */
170
+ async function awaitOutcome(action, deps, requestId, ctx) {
171
+ const until = Math.min(Date.now() + (action.polling?.maxDurationMs ?? DEFAULT_JOB_WAIT_MS), deps.waitDeadline?.() ?? Infinity);
172
+ const timeoutMs = until - Date.now();
173
+ if (timeoutMs <= 0)
174
+ return 'running';
175
+ const final = await deps.channel.awaitResult(requestId, {
176
+ userId: ctx.userId,
177
+ timeoutMs,
178
+ signal: ctx.abortSignal,
179
+ final: true,
180
+ });
181
+ // No answer in time, or a relay that only keeps first answers handing back the acknowledgment.
182
+ if (!final || final.interim)
183
+ return 'running';
184
+ return final;
185
+ }
186
+ function stillRunningNote(action) {
187
+ return (`"${action.id}" started and has not finished yet, so it is not done: tell the person it is still running, ` +
188
+ 'never that it is done. Its status and result appear in the page state when it finishes.');
189
+ }
190
+ function describe(surface, action) {
191
+ let desc = `[UI · ${surface.name}] ${action.description}`;
192
+ if (action.usage)
193
+ desc += `\n\nWhen to use: ${action.usage}`;
194
+ if (action.preconditions)
195
+ desc += `\n\nPreconditions: ${action.preconditions}`;
196
+ if (action.async) {
197
+ desc +=
198
+ '\n\nAsync: waits for the work to finish and returns its outcome; if it is still running when the wait ends, ' +
199
+ 'it says so (status "running"), and the outcome appears in the page state when it finishes.';
200
+ if (action.estimatedDuration)
201
+ desc += ` Estimated duration: ${action.estimatedDuration}.`;
202
+ }
203
+ return desc;
204
+ }
205
+ /**
206
+ * What the model sees: the outcome, and what the page offers now. Tool changes
207
+ * are named so the model knows the page it is on, not just that something
208
+ * happened.
209
+ */
210
+ function forModel(result, before, maxObservationChars, actingSurfaceId) {
211
+ const after = result.surfaces ?? before;
212
+ const beforeActions = new Set(before.flatMap((s) => s.actions.map((a) => a.id)));
213
+ const afterActions = new Set(after.flatMap((s) => s.actions.map((a) => a.id)));
214
+ const added = [...afterActions].filter((id) => !beforeActions.has(id));
215
+ const removed = [...beforeActions].filter((id) => !afterActions.has(id));
216
+ return {
217
+ ...(result.data !== undefined ? { result: result.data } : {}),
218
+ ...(result.error ? { error: result.error } : {}),
219
+ ...(result.interim ? { status: 'started' } : {}),
220
+ ...(result.settled === false
221
+ ? { note: 'The page was still loading when this was reported; what it offers may still change.' }
222
+ : {}),
223
+ ...(result.delivery?.trimmed ? { delivery: deliveryNote(result.delivery) } : {}),
224
+ page: {
225
+ surfaces: after.map((s) => s.name),
226
+ ...(added.length ? { toolsAdded: added } : {}),
227
+ ...(removed.length ? { toolsRemoved: removed } : {}),
228
+ },
229
+ ...(result.observations && Object.keys(result.observations).length
230
+ ? { state: boundObservations(result.observations, maxObservationChars, actingSurfaceId) }
231
+ : {}),
232
+ };
233
+ }
234
+ /**
235
+ * What the model is told about an answer the tab had to trim to deliver
236
+ * (oui-spec §7.3.6): the outcome is what happened, and what it lacks.
237
+ */
238
+ function deliveryNote(delivery) {
239
+ const lacks = delivery.omitted.map((field) => (field === 'data' ? 'what the action returned' : `the page's ${field}`));
240
+ return (`The page ran this, and its outcome here is what happened, but its full answer was refused on the way ` +
241
+ `(${delivery.reason}), so it came without ${lacks.join(', ')}. ` +
242
+ "Don't assume what the page shows: read its state from the next action's answer before relying on it.");
243
+ }
244
+ //# sourceMappingURL=ui-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui-tools.js","sourceRoot":"","sources":["../../src/ui/ui-tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "@ouispec/agent-worker",
3
+ "version": "0.1.0",
4
+ "description": "The agent runtime — any `ai` model, UI actions answered by the client, streaming and tool loops; one core on Lambda + SQS or in a container",
5
+ "homepage": "https://github.com/wesreid/oui/tree/main/packages/agent-worker#readme",
6
+ "bugs": {
7
+ "url": "https://github.com/wesreid/oui/issues"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "git+https://github.com/wesreid/oui.git",
12
+ "directory": "packages/agent-worker"
13
+ },
14
+ "license": "MIT",
15
+ "type": "module",
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./lambda": {
24
+ "types": "./dist/lambda/handler.d.ts",
25
+ "import": "./dist/lambda/handler.js"
26
+ },
27
+ "./container": {
28
+ "types": "./dist/container/server.d.ts",
29
+ "import": "./dist/container/server.js"
30
+ },
31
+ "./openapi": {
32
+ "types": "./dist/openapi/index.d.ts",
33
+ "import": "./dist/openapi/index.js"
34
+ },
35
+ "./testing": {
36
+ "types": "./dist/testing/index.d.ts",
37
+ "import": "./dist/testing/index.js"
38
+ }
39
+ },
40
+ "files": [
41
+ "dist",
42
+ "README.md"
43
+ ],
44
+ "dependencies": {
45
+ "ai": "^7.0.58",
46
+ "ajv": "^8.17.0",
47
+ "ajv-formats": "^3.0.1",
48
+ "yaml": "^2.7.0",
49
+ "@ouispec/agent-core": "^0.1.0",
50
+ "@ouispec/agent-events": "^0.1.0",
51
+ "@ouispec/bindings": "^0.1.0",
52
+ "oui-spec": "^0.6.1"
53
+ },
54
+ "devDependencies": {
55
+ "@ai-sdk/amazon-bedrock": "^5.0.50",
56
+ "@ai-sdk/openai": "4.0.36",
57
+ "@types/aws-lambda": "^8.10.145",
58
+ "@types/node": "^22.0.0",
59
+ "aws-lambda": "^1.0.7",
60
+ "socket.io-client": "^4.7.0",
61
+ "typescript": "^5.8.0",
62
+ "vitest": "^3.2.0",
63
+ "zod": "^4.4.3",
64
+ "@ouispec/agent-realtime": "0.1.0"
65
+ },
66
+ "publishConfig": {
67
+ "access": "public",
68
+ "provenance": true
69
+ },
70
+ "scripts": {
71
+ "build": "tsc -p tsconfig.build.json",
72
+ "typecheck": "tsc --noEmit",
73
+ "test": "vitest run --passWithNoTests",
74
+ "clean": "rm -rf dist",
75
+ "eval:live": "vitest run --config vitest.live.config.ts",
76
+ "record:fixture-turn": "vitest run --config vitest.record.config.ts"
77
+ }
78
+ }