@dudousxd/nestjs-agent-react 0.27.0 → 0.29.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/dist/genui.js CHANGED
@@ -1,8 +1,11 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/genui/generative-ui.tsx
5
- import { Component, createContext as createContext2, useCallback, useContext as useContext2, useMemo as useMemo2 } from "react";
2
+ import {
3
+ Component,
4
+ createContext as createContext2,
5
+ useCallback,
6
+ useContext as useContext2,
7
+ useMemo as useMemo2
8
+ } from "react";
6
9
 
7
10
  // src/components/ambient-ui.ts
8
11
  import { createContext, useContext } from "react";
@@ -15,7 +18,6 @@ function sharedContext(key) {
15
18
  holder[symbol] = created;
16
19
  return created;
17
20
  }
18
- __name(sharedContext, "sharedContext");
19
21
  var AmbientRenderUiContext = sharedContext("@dudousxd/nestjs-agent-react:ambient-render-ui");
20
22
 
21
23
  // src/genui/use-generative-ui.ts
@@ -28,7 +30,6 @@ var GENUI_TREE_COMPONENT = "genui:tree";
28
30
  function isRecord(value) {
29
31
  return typeof value === "object" && value !== null && !Array.isArray(value);
30
32
  }
31
- __name(isRecord, "isRecord");
32
33
  function toGenerativeUIItem(part) {
33
34
  if (!isRecord(part)) return null;
34
35
  const source = part.type === "data-ui" && isRecord(part.data) ? part.data : part;
@@ -43,7 +44,6 @@ function toGenerativeUIItem(part) {
43
44
  toolCallId: typeof source.toolCallId === "string" ? source.toolCallId : null
44
45
  };
45
46
  }
46
- __name(toGenerativeUIItem, "toGenerativeUIItem");
47
47
  var resolverCaches = /* @__PURE__ */ new WeakMap();
48
48
  function resolveCached(resolve, name, version) {
49
49
  let cache = resolverCaches.get(resolve);
@@ -58,49 +58,27 @@ function resolveCached(resolve, name, version) {
58
58
  try {
59
59
  const result = resolve(name, version);
60
60
  if (result instanceof Promise) {
61
- entry = {
62
- resolution: {
63
- status: "loading"
61
+ entry = { resolution: { status: "loading" }, settled: null };
62
+ entry.settled = result.then(
63
+ (Component2) => {
64
+ entry.resolution = Component2 ? { status: "ready", Component: Component2 } : { status: "unknown" };
64
65
  },
65
- settled: null
66
- };
67
- entry.settled = result.then((Component2) => {
68
- entry.resolution = Component2 ? {
69
- status: "ready",
70
- Component: Component2
71
- } : {
72
- status: "unknown"
73
- };
74
- }, (error) => {
75
- entry.resolution = {
76
- status: "error",
77
- error
78
- };
79
- });
66
+ (error) => {
67
+ entry.resolution = { status: "error", error };
68
+ }
69
+ );
80
70
  } else {
81
71
  entry = {
82
- resolution: result ? {
83
- status: "ready",
84
- Component: result
85
- } : {
86
- status: "unknown"
87
- },
72
+ resolution: result ? { status: "ready", Component: result } : { status: "unknown" },
88
73
  settled: null
89
74
  };
90
75
  }
91
76
  } catch (error) {
92
- entry = {
93
- resolution: {
94
- status: "error",
95
- error
96
- },
97
- settled: null
98
- };
77
+ entry = { resolution: { status: "error", error }, settled: null };
99
78
  }
100
79
  cache.set(key, entry);
101
80
  return entry;
102
81
  }
103
- __name(resolveCached, "resolveCached");
104
82
  function useResolvedComponent(name, version, registry, resolve, fallbackTree) {
105
83
  const [, setTick] = useState(0);
106
84
  const own = registry[name];
@@ -115,170 +93,101 @@ function useResolvedComponent(name, version, registry, resolve, fallbackTree) {
115
93
  return () => {
116
94
  live = false;
117
95
  };
118
- }, [
119
- pending
120
- ]);
121
- if (own !== void 0) return {
122
- status: "ready",
123
- Component: own
124
- };
96
+ }, [pending]);
97
+ if (own !== void 0) return { status: "ready", Component: own };
125
98
  if (entry !== null && entry.resolution.status !== "unknown") return entry.resolution;
126
99
  if (name === GENUI_TREE_COMPONENT && fallbackTree !== void 0) {
127
- return {
128
- status: "ready",
129
- Component: fallbackTree
130
- };
100
+ return { status: "ready", Component: fallbackTree };
131
101
  }
132
- return {
133
- status: "unknown"
134
- };
102
+ return { status: "unknown" };
135
103
  }
136
- __name(useResolvedComponent, "useResolvedComponent");
137
104
  function useValidatedProps(catalog, name, props) {
138
105
  const checked = catalog?.has(name) === true;
139
106
  const immediate = useMemo(() => {
140
- if (!checked || catalog === void 0) return {
141
- status: "ok",
142
- props
143
- };
107
+ if (!checked || catalog === void 0) return { status: "ok", props };
144
108
  const result = catalog.validateSync?.(name, props);
145
109
  if (result === void 0) return null;
146
- return result.ok ? {
147
- status: "ok",
148
- props: result.value
149
- } : {
150
- status: "invalid",
151
- issues: result.issues
152
- };
153
- }, [
154
- checked,
155
- catalog,
156
- name,
157
- props
158
- ]);
159
- const [late, setLate] = useState(null);
110
+ return result.ok ? { status: "ok", props: result.value } : { status: "invalid", issues: result.issues };
111
+ }, [checked, catalog, name, props]);
112
+ const [late, setLate] = useState(
113
+ null
114
+ );
160
115
  useEffect(() => {
161
116
  if (immediate !== null || catalog === void 0) return;
162
117
  let live = true;
163
- catalog.validate(name, props).then((result) => {
164
- if (!live) return;
165
- setLate({
166
- props,
167
- result: result.ok ? {
168
- status: "ok",
169
- props: result.value
170
- } : {
171
- status: "invalid",
172
- issues: result.issues
173
- }
174
- });
175
- }, (error) => {
176
- if (!live) return;
177
- setLate({
178
- props,
179
- result: {
180
- status: "invalid",
181
- issues: [
182
- {
183
- path: [],
184
- message: error instanceof Error ? error.message : String(error)
185
- }
186
- ]
187
- }
188
- });
189
- });
118
+ catalog.validate(name, props).then(
119
+ (result) => {
120
+ if (!live) return;
121
+ setLate({
122
+ props,
123
+ result: result.ok ? { status: "ok", props: result.value } : { status: "invalid", issues: result.issues }
124
+ });
125
+ },
126
+ (error) => {
127
+ if (!live) return;
128
+ setLate({
129
+ props,
130
+ result: {
131
+ status: "invalid",
132
+ issues: [{ path: [], message: error instanceof Error ? error.message : String(error) }]
133
+ }
134
+ });
135
+ }
136
+ );
190
137
  return () => {
191
138
  live = false;
192
139
  };
193
- }, [
194
- immediate,
195
- catalog,
196
- name,
197
- props
198
- ]);
140
+ }, [immediate, catalog, name, props]);
199
141
  if (immediate !== null) return immediate;
200
- return late !== null && late.props === props ? late.result : {
201
- status: "pending"
202
- };
142
+ return late !== null && late.props === props ? late.result : { status: "pending" };
203
143
  }
204
- __name(useValidatedProps, "useValidatedProps");
205
144
  function useGenerativeUIState(part, options, fallbackTree) {
206
- const item = useMemo(() => toGenerativeUIItem(part), [
207
- part
208
- ]);
145
+ const item = useMemo(() => toGenerativeUIItem(part), [part]);
209
146
  const name = item?.component ?? "";
210
- const resolution = useResolvedComponent(name, item?.version ?? null, options.registry, item === null ? void 0 : options.resolveComponent, fallbackTree);
147
+ const resolution = useResolvedComponent(
148
+ name,
149
+ item?.version ?? null,
150
+ options.registry,
151
+ item === null ? void 0 : options.resolveComponent,
152
+ fallbackTree
153
+ );
211
154
  const empty = useMemo(() => ({}), []);
212
- const validation = useValidatedProps(item === null || name === GENUI_TREE_COMPONENT ? void 0 : options.catalog, name, item?.props ?? empty);
155
+ const validation = useValidatedProps(
156
+ item === null || name === GENUI_TREE_COMPONENT ? void 0 : options.catalog,
157
+ name,
158
+ item?.props ?? empty
159
+ );
213
160
  if (item === null) return null;
214
- if (resolution.status === "loading") return {
215
- status: "loading",
216
- item
217
- };
218
- if (resolution.status === "unknown") return {
219
- status: "problem",
220
- reason: "unknown",
221
- item
222
- };
161
+ if (resolution.status === "loading") return { status: "loading", item };
162
+ if (resolution.status === "unknown") return { status: "problem", reason: "unknown", item };
223
163
  if (resolution.status === "error") {
224
- return {
225
- status: "problem",
226
- reason: "error",
227
- item,
228
- error: resolution.error
229
- };
164
+ return { status: "problem", reason: "error", item, error: resolution.error };
230
165
  }
231
- if (validation.status === "pending") return {
232
- status: "loading",
233
- item
234
- };
166
+ if (validation.status === "pending") return { status: "loading", item };
235
167
  if (validation.status === "invalid") {
236
- return {
237
- status: "problem",
238
- reason: "invalid",
239
- item,
240
- issues: validation.issues
241
- };
168
+ return { status: "problem", reason: "invalid", item, issues: validation.issues };
242
169
  }
243
- return {
244
- status: "ready",
245
- item,
246
- Component: resolution.Component,
247
- props: validation.props
248
- };
170
+ return { status: "ready", item, Component: resolution.Component, props: validation.props };
249
171
  }
250
- __name(useGenerativeUIState, "useGenerativeUIState");
251
172
 
252
173
  // src/genui/generative-ui.tsx
253
- var TreeScopeContext = /* @__PURE__ */ createContext2(null);
174
+ import { jsx } from "react/jsx-runtime";
175
+ var TreeScopeContext = createContext2(null);
254
176
  function renderFallback(fallback, problem) {
255
177
  if (typeof fallback === "function") return fallback(problem);
256
178
  return fallback ?? null;
257
179
  }
258
- __name(renderFallback, "renderFallback");
259
- var ItemBoundary = class ItemBoundary2 extends Component {
260
- static {
261
- __name(this, "ItemBoundary");
262
- }
263
- state = {
264
- error: void 0,
265
- failed: false
266
- };
180
+ var ItemBoundary = class extends Component {
181
+ state = { error: void 0, failed: false };
267
182
  static getDerivedStateFromError(error) {
268
- return {
269
- error,
270
- failed: true
271
- };
183
+ return { error, failed: true };
272
184
  }
273
185
  componentDidCatch(error, _info) {
274
186
  this.props.onError?.(error, this.props.item);
275
187
  }
276
188
  componentDidUpdate(previous) {
277
189
  if (this.state.failed && previous.item !== this.props.item) {
278
- this.setState({
279
- error: void 0,
280
- failed: false
281
- });
190
+ this.setState({ error: void 0, failed: false });
282
191
  }
283
192
  }
284
193
  render() {
@@ -293,143 +202,104 @@ var ItemBoundary = class ItemBoundary2 extends Component {
293
202
  }
294
203
  };
295
204
  function nodeItem(node, id) {
296
- return {
297
- id,
298
- component: node.type,
299
- props: node.props ?? {},
300
- version: null,
301
- toolCallId: null
302
- };
205
+ return { id, component: node.type, props: node.props ?? {}, version: null, toolCallId: null };
303
206
  }
304
- __name(nodeItem, "nodeItem");
305
207
  function TreeNode({ node, id }) {
306
208
  const scope = useContext2(TreeScopeContext);
307
- const item = useMemo2(() => nodeItem(node, id), [
308
- node,
309
- id
310
- ]);
311
- const resolution = useResolvedComponent(node.type, null, scope?.options.registry ?? {}, scope?.options.resolveComponent);
209
+ const item = useMemo2(() => nodeItem(node, id), [node, id]);
210
+ const resolution = useResolvedComponent(
211
+ node.type,
212
+ null,
213
+ scope?.options.registry ?? {},
214
+ scope?.options.resolveComponent
215
+ );
312
216
  const validation = useValidatedProps(scope?.options.catalog, node.type, item.props);
313
217
  if (scope === null) return null;
314
218
  if (resolution.status === "loading" || validation.status === "pending") return scope.loading;
315
219
  if (resolution.status === "unknown") {
316
- return renderFallback(scope.fallback, {
317
- reason: "unknown",
318
- item
319
- });
220
+ return renderFallback(scope.fallback, { reason: "unknown", item });
320
221
  }
321
222
  if (resolution.status === "error") {
322
- return renderFallback(scope.fallback, {
323
- reason: "error",
324
- item,
325
- error: resolution.error
326
- });
223
+ return renderFallback(scope.fallback, { reason: "error", item, error: resolution.error });
327
224
  }
328
225
  if (validation.status === "invalid") {
329
- return renderFallback(scope.fallback, {
330
- reason: "invalid",
331
- item,
332
- issues: validation.issues
333
- });
226
+ return renderFallback(scope.fallback, { reason: "invalid", item, issues: validation.issues });
334
227
  }
335
228
  const Renderer = resolution.Component;
336
229
  const children = Array.isArray(node.children) ? node.children : [];
337
- return /* @__PURE__ */ React.createElement(Renderer, validation.props, children.length > 0 ? children.map((child, index) => {
230
+ return /* @__PURE__ */ jsx(Renderer, { ...validation.props, children: children.length > 0 ? children.map((child, index) => {
338
231
  const childId = `${id}.${index}`;
339
- return /* @__PURE__ */ React.createElement(ItemBoundary, {
340
- key: childId,
341
- item: nodeItem(child, childId),
342
- fallback: scope.fallback,
343
- onError: scope.onError
344
- }, /* @__PURE__ */ React.createElement(TreeNode, {
345
- node: child,
346
- id: childId
347
- }));
348
- }) : void 0);
232
+ return /* @__PURE__ */ jsx(
233
+ ItemBoundary,
234
+ {
235
+ item: nodeItem(child, childId),
236
+ fallback: scope.fallback,
237
+ onError: scope.onError,
238
+ children: /* @__PURE__ */ jsx(TreeNode, { node: child, id: childId })
239
+ },
240
+ childId
241
+ );
242
+ }) : void 0 });
349
243
  }
350
- __name(TreeNode, "TreeNode");
351
244
  function GenuiTree({ root }) {
352
245
  if (root === void 0 || root === null || typeof root.type !== "string") return null;
353
- return /* @__PURE__ */ React.createElement(TreeNode, {
354
- node: root,
355
- id: "root"
356
- });
246
+ return /* @__PURE__ */ jsx(TreeNode, { node: root, id: "root" });
357
247
  }
358
- __name(GenuiTree, "GenuiTree");
359
- function GenerativeUIScope({ registry, catalog, resolveComponent, fallback, loading = null, onError, children }) {
360
- const scope = useMemo2(() => ({
361
- options: {
362
- registry,
363
- ...catalog !== void 0 ? {
364
- catalog
365
- } : {},
366
- ...resolveComponent !== void 0 ? {
367
- resolveComponent
368
- } : {}
369
- },
370
- fallback,
371
- loading,
372
- onError
373
- }), [
374
- registry,
375
- catalog,
376
- resolveComponent,
377
- fallback,
378
- loading,
379
- onError
380
- ]);
381
- return /* @__PURE__ */ React.createElement(TreeScopeContext.Provider, {
382
- value: scope
383
- }, children);
248
+ function GenerativeUIScope({
249
+ registry,
250
+ catalog,
251
+ resolveComponent,
252
+ fallback,
253
+ loading = null,
254
+ onError,
255
+ children
256
+ }) {
257
+ const scope = useMemo2(
258
+ () => ({
259
+ options: {
260
+ registry,
261
+ ...catalog !== void 0 ? { catalog } : {},
262
+ ...resolveComponent !== void 0 ? { resolveComponent } : {}
263
+ },
264
+ fallback,
265
+ loading,
266
+ onError
267
+ }),
268
+ [registry, catalog, resolveComponent, fallback, loading, onError]
269
+ );
270
+ return /* @__PURE__ */ jsx(TreeScopeContext.Provider, { value: scope, children });
384
271
  }
385
- __name(GenerativeUIScope, "GenerativeUIScope");
386
- var GenuiContext = sharedContext("@dudousxd/nestjs-agent-react:genui-provider");
272
+ var GenuiContext = sharedContext(
273
+ "@dudousxd/nestjs-agent-react:genui-provider"
274
+ );
387
275
  function useGenuiProvider() {
388
276
  return useContext2(GenuiContext);
389
277
  }
390
- __name(useGenuiProvider, "useGenuiProvider");
391
- function GenuiProvider({ registry, catalog, resolveComponent, treeRenderer, fallback, loading, onError, children }) {
392
- const value = useMemo2(() => ({
393
- ...registry !== void 0 ? {
394
- registry
395
- } : {},
396
- ...catalog !== void 0 ? {
397
- catalog
398
- } : {},
399
- ...resolveComponent !== void 0 ? {
400
- resolveComponent
401
- } : {},
402
- ...treeRenderer !== void 0 ? {
403
- treeRenderer
404
- } : {},
405
- ...fallback !== void 0 ? {
406
- fallback
407
- } : {},
408
- ...loading !== void 0 ? {
409
- loading
410
- } : {},
411
- ...onError !== void 0 ? {
412
- onError
413
- } : {}
414
- }), [
415
- registry,
416
- catalog,
417
- resolveComponent,
418
- treeRenderer,
419
- fallback,
420
- loading,
421
- onError
422
- ]);
423
- const renderUi = useCallback((block) => /* @__PURE__ */ React.createElement(GenerativeUI, {
424
- part: block
425
- }), []);
426
- return /* @__PURE__ */ React.createElement(GenuiContext.Provider, {
427
- value
428
- }, /* @__PURE__ */ React.createElement(AmbientRenderUiContext.Provider, {
429
- value: renderUi
430
- }, children));
278
+ function GenuiProvider({
279
+ registry,
280
+ catalog,
281
+ resolveComponent,
282
+ treeRenderer,
283
+ fallback,
284
+ loading,
285
+ onError,
286
+ children
287
+ }) {
288
+ const value = useMemo2(
289
+ () => ({
290
+ ...registry !== void 0 ? { registry } : {},
291
+ ...catalog !== void 0 ? { catalog } : {},
292
+ ...resolveComponent !== void 0 ? { resolveComponent } : {},
293
+ ...treeRenderer !== void 0 ? { treeRenderer } : {},
294
+ ...fallback !== void 0 ? { fallback } : {},
295
+ ...loading !== void 0 ? { loading } : {},
296
+ ...onError !== void 0 ? { onError } : {}
297
+ }),
298
+ [registry, catalog, resolveComponent, treeRenderer, fallback, loading, onError]
299
+ );
300
+ const renderUi = useCallback((block) => /* @__PURE__ */ jsx(GenerativeUI, { part: block }), []);
301
+ return /* @__PURE__ */ jsx(GenuiContext.Provider, { value, children: /* @__PURE__ */ jsx(AmbientRenderUiContext.Provider, { value: renderUi, children }) });
431
302
  }
432
- __name(GenuiProvider, "GenuiProvider");
433
303
  var NO_REGISTRY = {};
434
304
  function useMergedOptions(own) {
435
305
  const provided = useContext2(GenuiContext);
@@ -437,50 +307,45 @@ function useMergedOptions(own) {
437
307
  const catalog = own.catalog ?? provided?.catalog;
438
308
  const resolveComponent = own.resolveComponent ?? provided?.resolveComponent;
439
309
  const treeRenderer = own.treeRenderer ?? provided?.treeRenderer;
440
- return useMemo2(() => ({
441
- registry,
442
- ...catalog !== void 0 ? {
443
- catalog
444
- } : {},
445
- ...resolveComponent !== void 0 ? {
446
- resolveComponent
447
- } : {},
448
- ...treeRenderer !== void 0 ? {
449
- treeRenderer
450
- } : {}
451
- }), [
452
- registry,
453
- catalog,
454
- resolveComponent,
455
- treeRenderer
456
- ]);
310
+ return useMemo2(
311
+ () => ({
312
+ registry,
313
+ ...catalog !== void 0 ? { catalog } : {},
314
+ ...resolveComponent !== void 0 ? { resolveComponent } : {},
315
+ ...treeRenderer !== void 0 ? { treeRenderer } : {}
316
+ }),
317
+ [registry, catalog, resolveComponent, treeRenderer]
318
+ );
457
319
  }
458
- __name(useMergedOptions, "useMergedOptions");
459
320
  function useGenerativeUI(part, options = {}) {
460
321
  const merged = useMergedOptions(options);
461
322
  return useGenerativeUIState(part, merged, merged.treeRenderer ?? GenuiTree);
462
323
  }
463
- __name(useGenerativeUI, "useGenerativeUI");
464
- function GenerativeUI({ part, registry, catalog, resolveComponent, treeRenderer, fallback: ownFallback, loading: ownLoading, onError: ownOnError }) {
324
+ function GenerativeUI({
325
+ part,
326
+ registry,
327
+ catalog,
328
+ resolveComponent,
329
+ treeRenderer,
330
+ fallback: ownFallback,
331
+ loading: ownLoading,
332
+ onError: ownOnError
333
+ }) {
465
334
  const provided = useContext2(GenuiContext);
466
335
  const fallback = ownFallback ?? provided?.fallback;
467
336
  const loading = ownLoading ?? provided?.loading ?? null;
468
337
  const onError = ownOnError ?? provided?.onError;
469
338
  const options = useMergedOptions({
470
- ...registry !== void 0 ? {
471
- registry
472
- } : {},
473
- ...catalog !== void 0 ? {
474
- catalog
475
- } : {},
476
- ...resolveComponent !== void 0 ? {
477
- resolveComponent
478
- } : {},
479
- ...treeRenderer !== void 0 ? {
480
- treeRenderer
481
- } : {}
339
+ ...registry !== void 0 ? { registry } : {},
340
+ ...catalog !== void 0 ? { catalog } : {},
341
+ ...resolveComponent !== void 0 ? { resolveComponent } : {},
342
+ ...treeRenderer !== void 0 ? { treeRenderer } : {}
482
343
  });
483
- const state = useGenerativeUIState(part, options, options.treeRenderer ?? GenuiTree);
344
+ const state = useGenerativeUIState(
345
+ part,
346
+ options,
347
+ options.treeRenderer ?? GenuiTree
348
+ );
484
349
  if (state === null) return null;
485
350
  if (state.status === "loading") return loading;
486
351
  if (state.status === "problem") {
@@ -488,20 +353,17 @@ function GenerativeUI({ part, registry, catalog, resolveComponent, treeRenderer,
488
353
  return renderFallback(fallback, problem);
489
354
  }
490
355
  const Renderer = state.Component;
491
- return /* @__PURE__ */ React.createElement(GenerativeUIScope, {
492
- ...options,
493
- fallback,
494
- loading,
495
- ...onError !== void 0 ? {
496
- onError
497
- } : {}
498
- }, /* @__PURE__ */ React.createElement(ItemBoundary, {
499
- item: state.item,
500
- fallback,
501
- onError
502
- }, /* @__PURE__ */ React.createElement(Renderer, state.props)));
356
+ return /* @__PURE__ */ jsx(
357
+ GenerativeUIScope,
358
+ {
359
+ ...options,
360
+ fallback,
361
+ loading,
362
+ ...onError !== void 0 ? { onError } : {},
363
+ children: /* @__PURE__ */ jsx(ItemBoundary, { item: state.item, fallback, onError, children: /* @__PURE__ */ jsx(Renderer, { ...state.props }) })
364
+ }
365
+ );
503
366
  }
504
- __name(GenerativeUI, "GenerativeUI");
505
367
  export {
506
368
  GENUI_TREE_COMPONENT,
507
369
  GenerativeUI,