@ouispec/agent-react 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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +13 -0
  3. package/dist/annotations/AnnotationRegistry.d.ts +20 -0
  4. package/dist/annotations/AnnotationRegistry.d.ts.map +1 -0
  5. package/dist/annotations/AnnotationRegistry.js +100 -0
  6. package/dist/annotations/AnnotationRegistry.js.map +1 -0
  7. package/dist/annotations/singleton.d.ts +7 -0
  8. package/dist/annotations/singleton.d.ts.map +1 -0
  9. package/dist/annotations/singleton.js +7 -0
  10. package/dist/annotations/singleton.js.map +1 -0
  11. package/dist/annotations/types.d.ts +22 -0
  12. package/dist/annotations/types.d.ts.map +1 -0
  13. package/dist/annotations/types.js +2 -0
  14. package/dist/annotations/types.js.map +1 -0
  15. package/dist/annotations/useViewAnnotation.d.ts +15 -0
  16. package/dist/annotations/useViewAnnotation.d.ts.map +1 -0
  17. package/dist/annotations/useViewAnnotation.js +42 -0
  18. package/dist/annotations/useViewAnnotation.js.map +1 -0
  19. package/dist/approvals/ApprovalCard.d.ts +54 -0
  20. package/dist/approvals/ApprovalCard.d.ts.map +1 -0
  21. package/dist/approvals/ApprovalCard.js +65 -0
  22. package/dist/approvals/ApprovalCard.js.map +1 -0
  23. package/dist/approvals/decision.d.ts +17 -0
  24. package/dist/approvals/decision.d.ts.map +1 -0
  25. package/dist/approvals/decision.js +25 -0
  26. package/dist/approvals/decision.js.map +1 -0
  27. package/dist/entity/AgentEntity.d.ts +58 -0
  28. package/dist/entity/AgentEntity.d.ts.map +1 -0
  29. package/dist/entity/AgentEntity.js +97 -0
  30. package/dist/entity/AgentEntity.js.map +1 -0
  31. package/dist/entity/AgentEntityComponent.d.ts +73 -0
  32. package/dist/entity/AgentEntityComponent.d.ts.map +1 -0
  33. package/dist/entity/AgentEntityComponent.js +134 -0
  34. package/dist/entity/AgentEntityComponent.js.map +1 -0
  35. package/dist/entity/asAgentEntity.d.ts +45 -0
  36. package/dist/entity/asAgentEntity.d.ts.map +1 -0
  37. package/dist/entity/asAgentEntity.js +51 -0
  38. package/dist/entity/asAgentEntity.js.map +1 -0
  39. package/dist/entity/defineAgentEntity.d.ts +54 -0
  40. package/dist/entity/defineAgentEntity.d.ts.map +1 -0
  41. package/dist/entity/defineAgentEntity.js +133 -0
  42. package/dist/entity/defineAgentEntity.js.map +1 -0
  43. package/dist/entity/index.d.ts +10 -0
  44. package/dist/entity/index.d.ts.map +1 -0
  45. package/dist/entity/index.js +6 -0
  46. package/dist/entity/index.js.map +1 -0
  47. package/dist/entity/useViewAnnotation.d.ts +64 -0
  48. package/dist/entity/useViewAnnotation.d.ts.map +1 -0
  49. package/dist/entity/useViewAnnotation.js +126 -0
  50. package/dist/entity/useViewAnnotation.js.map +1 -0
  51. package/dist/hooks/useFeedback.d.ts +7 -0
  52. package/dist/hooks/useFeedback.d.ts.map +1 -0
  53. package/dist/hooks/useFeedback.js +38 -0
  54. package/dist/hooks/useFeedback.js.map +1 -0
  55. package/dist/index.d.ts +12 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +11 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/provider/AgentProvider.d.ts +25 -0
  60. package/dist/provider/AgentProvider.d.ts.map +1 -0
  61. package/dist/provider/AgentProvider.js +800 -0
  62. package/dist/provider/AgentProvider.js.map +1 -0
  63. package/dist/provider/socketio.d.ts +8 -0
  64. package/dist/provider/socketio.d.ts.map +1 -0
  65. package/dist/provider/socketio.js +19 -0
  66. package/dist/provider/socketio.js.map +1 -0
  67. package/dist/provider/stored-messages.d.ts +16 -0
  68. package/dist/provider/stored-messages.d.ts.map +1 -0
  69. package/dist/provider/stored-messages.js +57 -0
  70. package/dist/provider/stored-messages.js.map +1 -0
  71. package/dist/provider/types.d.ts +158 -0
  72. package/dist/provider/types.d.ts.map +1 -0
  73. package/dist/provider/types.js +2 -0
  74. package/dist/provider/types.js.map +1 -0
  75. package/package.json +62 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAE3D,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AAChG,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAClF,YAAY,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACxF,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export { AgentEntityComponent } from './AgentEntityComponent.js';
2
+ export { defineAgentEntity } from './defineAgentEntity.js';
3
+ export { AgentEntity } from './AgentEntity.js';
4
+ export { asAgentEntity } from './asAgentEntity.js';
5
+ export { useViewAnnotation } from './useViewAnnotation.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/entity/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,64 @@
1
+ import type { EntityCapabilities, EntityDisplayContext, AgentAction, AgentCommand, AgentCommandResponse, UserObservation, EntityExecuteOptions, IntentResult, Unsubscribe } from '@ouispec/agent-core';
2
+ /**
3
+ * Options for the useViewAnnotation hook.
4
+ */
5
+ export interface UseViewAnnotationOptions {
6
+ entity: {
7
+ type: string;
8
+ id: string;
9
+ };
10
+ intents?: string[];
11
+ displayContext: EntityDisplayContext;
12
+ capabilities?: EntityCapabilities;
13
+ metadata?: Record<string, unknown>;
14
+ onTargeted?: (action: AgentAction) => void;
15
+ onReleased?: () => void;
16
+ onExecuting?: (intentId: string, params: Record<string, unknown>) => void;
17
+ onExecutionComplete?: (intentId: string, result: IntentResult) => void;
18
+ onCommandReceived?: (command: AgentCommand) => AgentCommandResponse | Promise<AgentCommandResponse> | void;
19
+ onObserve?: (observation: UserObservation) => void;
20
+ }
21
+ /**
22
+ * Return value of useViewAnnotation — provides the ref callback and agent entity state/methods.
23
+ */
24
+ export interface UseViewAnnotationReturn {
25
+ ref: (element: HTMLElement | null) => void;
26
+ isTargeted: boolean;
27
+ isExecuting: boolean;
28
+ currentAction: AgentAction | null;
29
+ execute: (intentId: string, params?: Record<string, unknown>, options?: EntityExecuteOptions) => Promise<IntentResult>;
30
+ emit: (signal: string, data?: unknown) => void;
31
+ subscribe: (event: string, handler: (data: unknown) => void) => Unsubscribe;
32
+ }
33
+ /**
34
+ * useViewAnnotation — hook that registers a DOM element as an agent-addressable entity.
35
+ *
36
+ * This is the escape-hatch pattern for SVGs, portals, canvas overlays, or any case
37
+ * where class inheritance or wrapper components don't fit.
38
+ *
39
+ * Now delegates to the core AgentEntityBase for full lifecycle management.
40
+ *
41
+ * Example:
42
+ * ```tsx
43
+ * function CharacterCard({ character }) {
44
+ * const agent = useViewAnnotation({
45
+ * entity: { type: 'Character', id: character.id },
46
+ * intents: ['generate-clip', 'clone-voice'],
47
+ * displayContext: { label: character.name, image: character.thumbnailUrl },
48
+ * onTargeted: () => setHighlighted(true),
49
+ * onReleased: () => setHighlighted(false),
50
+ * });
51
+ *
52
+ * return (
53
+ * <div ref={agent.ref} className={agent.isTargeted ? 'targeted' : ''}>
54
+ * {character.name}
55
+ * <button onClick={() => agent.execute('generate-clip', { character: character.id })}>
56
+ * Generate
57
+ * </button>
58
+ * </div>
59
+ * );
60
+ * }
61
+ * ```
62
+ */
63
+ export declare function useViewAnnotation(options: UseViewAnnotationOptions): UseViewAnnotationReturn;
64
+ //# sourceMappingURL=useViewAnnotation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useViewAnnotation.d.ts","sourceRoot":"","sources":["../../src/entity/useViewAnnotation.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,cAAc,EAAE,oBAAoB,CAAC;IACrC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC1E,mBAAmB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACvE,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IAC3G,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,eAAe,KAAK,IAAI,CAAC;CACpD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,KAAK,IAAI,CAAC;IAC3C,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;IACrB,aAAa,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,OAAO,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACvH,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAC/C,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,KAAK,WAAW,CAAC;CAC7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,GAAG,uBAAuB,CAoF5F"}
@@ -0,0 +1,126 @@
1
+ import { useRef, useCallback, useEffect, useState } from 'react';
2
+ import { AgentEntityBase, EntityRegistry, } from '@ouispec/agent-core';
3
+ import { annotationRegistry } from '../annotations/singleton.js';
4
+ /**
5
+ * useViewAnnotation — hook that registers a DOM element as an agent-addressable entity.
6
+ *
7
+ * This is the escape-hatch pattern for SVGs, portals, canvas overlays, or any case
8
+ * where class inheritance or wrapper components don't fit.
9
+ *
10
+ * Now delegates to the core AgentEntityBase for full lifecycle management.
11
+ *
12
+ * Example:
13
+ * ```tsx
14
+ * function CharacterCard({ character }) {
15
+ * const agent = useViewAnnotation({
16
+ * entity: { type: 'Character', id: character.id },
17
+ * intents: ['generate-clip', 'clone-voice'],
18
+ * displayContext: { label: character.name, image: character.thumbnailUrl },
19
+ * onTargeted: () => setHighlighted(true),
20
+ * onReleased: () => setHighlighted(false),
21
+ * });
22
+ *
23
+ * return (
24
+ * <div ref={agent.ref} className={agent.isTargeted ? 'targeted' : ''}>
25
+ * {character.name}
26
+ * <button onClick={() => agent.execute('generate-clip', { character: character.id })}>
27
+ * Generate
28
+ * </button>
29
+ * </div>
30
+ * );
31
+ * }
32
+ * ```
33
+ */
34
+ export function useViewAnnotation(options) {
35
+ const [, forceUpdate] = useState(0);
36
+ const rerender = useCallback(() => forceUpdate(n => n + 1), []);
37
+ const bridgeRef = useRef(null);
38
+ const optionsRef = useRef(options);
39
+ optionsRef.current = options;
40
+ if (!bridgeRef.current) {
41
+ bridgeRef.current = new HookEntityBridge();
42
+ }
43
+ const bridge = bridgeRef.current;
44
+ bridge._sync(options.entity.type, options.entity.id, options.intents ?? [], options.displayContext, options.capabilities ?? {});
45
+ bridge._setCallbacks({
46
+ onTargeted: options.onTargeted,
47
+ onReleased: options.onReleased,
48
+ onExecuting: options.onExecuting,
49
+ onExecutionComplete: options.onExecutionComplete,
50
+ onCommandReceived: options.onCommandReceived,
51
+ onObserve: options.onObserve,
52
+ });
53
+ bridge._setRerender(rerender);
54
+ useEffect(() => {
55
+ bridge.register();
56
+ return () => bridge.unregister();
57
+ }, []);
58
+ // Register with annotation registry so collectContext() includes metadata
59
+ useEffect(() => {
60
+ const annotationId = `annotation-${options.entity.type}-${options.entity.id}`;
61
+ const unregister = annotationRegistry.register({
62
+ id: annotationId,
63
+ element: null,
64
+ options: {
65
+ entity: options.entity,
66
+ intents: options.intents,
67
+ displayContext: options.displayContext,
68
+ metadata: options.metadata,
69
+ },
70
+ visible: true,
71
+ });
72
+ return () => unregister();
73
+ }, [options.entity.type, options.entity.id, options.metadata]);
74
+ useEffect(() => {
75
+ const newKey = `${options.entity.type}::${options.entity.id}`;
76
+ if (bridge._prevKey && bridge._prevKey !== newKey) {
77
+ bridge.unregister();
78
+ bridge._sync(options.entity.type, options.entity.id, options.intents ?? [], options.displayContext, options.capabilities ?? {});
79
+ bridge.register();
80
+ }
81
+ bridge._prevKey = newKey;
82
+ }, [options.entity.type, options.entity.id]);
83
+ const refCallback = useCallback((element) => {
84
+ EntityRegistry.instance.updateElement(optionsRef.current.entity.type, optionsRef.current.entity.id, element);
85
+ }, []);
86
+ return {
87
+ ref: refCallback,
88
+ isTargeted: bridge.isTargeted,
89
+ isExecuting: bridge.isExecuting,
90
+ currentAction: bridge.currentAction,
91
+ execute: (intentId, params, opts) => bridge.execute(intentId, params, opts),
92
+ emit: (signal, data) => bridge.emit(signal, data),
93
+ subscribe: (event, handler) => bridge.subscribe(event, handler),
94
+ };
95
+ }
96
+ class HookEntityBridge extends AgentEntityBase {
97
+ _type = '';
98
+ _id = '';
99
+ _intents = [];
100
+ _display = { label: '' };
101
+ _caps = {};
102
+ _callbacks = {};
103
+ _rerender = null;
104
+ _prevKey = '';
105
+ get entityType() { return this._type; }
106
+ get entityId() { return this._id; }
107
+ get intents() { return this._intents; }
108
+ get displayContext() { return this._display; }
109
+ get capabilities() { return this._caps; }
110
+ _sync(type, id, intents, display, caps) {
111
+ this._type = type;
112
+ this._id = id;
113
+ this._intents = intents;
114
+ this._display = display;
115
+ this._caps = caps;
116
+ }
117
+ _setCallbacks(callbacks) { this._callbacks = callbacks; }
118
+ _setRerender(fn) { this._rerender = fn; }
119
+ onTargeted(action) { this._callbacks.onTargeted?.(action); this._rerender?.(); }
120
+ onReleased() { this._callbacks.onReleased?.(); this._rerender?.(); }
121
+ onExecuting(intentId, params) { this._callbacks.onExecuting?.(intentId, params); this._rerender?.(); }
122
+ onExecutionComplete(intentId, result) { this._callbacks.onExecutionComplete?.(intentId, result); this._rerender?.(); }
123
+ onCommandReceived(command) { return this._callbacks.onCommandReceived?.(command); }
124
+ onObserve(observation) { this._callbacks.onObserve?.(observation); }
125
+ }
126
+ //# sourceMappingURL=useViewAnnotation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useViewAnnotation.js","sourceRoot":"","sources":["../../src/entity/useViewAnnotation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface FeedbackActions {
2
+ thumbsUp: (turnId: string, detail?: string) => void;
3
+ thumbsDown: (turnId: string, detail?: string) => void;
4
+ recordImplicit: (turnId: string, signal: 'positive' | 'negative', detail?: string) => void;
5
+ }
6
+ export declare function useFeedback(): FeedbackActions;
7
+ //# sourceMappingURL=useFeedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFeedback.d.ts","sourceRoot":"","sources":["../../src/hooks/useFeedback.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACpD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;CAC5F;AAED,wBAAgB,WAAW,IAAI,eAAe,CAsC7C"}
@@ -0,0 +1,38 @@
1
+ import { useCallback } from 'react';
2
+ import { useAgent } from '../provider/AgentProvider.js';
3
+ export function useFeedback() {
4
+ useAgent(); // validate agent context is available
5
+ const thumbsUp = useCallback((turnId, detail) => {
6
+ const record = {
7
+ turnId,
8
+ type: 'explicit',
9
+ signal: 'positive',
10
+ detail,
11
+ timestamp: Date.now(),
12
+ };
13
+ // Emit to learning surface if available
14
+ window.dispatchEvent(new CustomEvent('agent:feedback', { detail: record }));
15
+ }, []);
16
+ const thumbsDown = useCallback((turnId, detail) => {
17
+ const record = {
18
+ turnId,
19
+ type: 'explicit',
20
+ signal: 'negative',
21
+ detail,
22
+ timestamp: Date.now(),
23
+ };
24
+ window.dispatchEvent(new CustomEvent('agent:feedback', { detail: record }));
25
+ }, []);
26
+ const recordImplicit = useCallback((turnId, signal, detail) => {
27
+ const record = {
28
+ turnId,
29
+ type: 'implicit',
30
+ signal,
31
+ detail,
32
+ timestamp: Date.now(),
33
+ };
34
+ window.dispatchEvent(new CustomEvent('agent:feedback', { detail: record }));
35
+ }, []);
36
+ return { thumbsUp, thumbsDown, recordImplicit };
37
+ }
38
+ //# sourceMappingURL=useFeedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFeedback.js","sourceRoot":"","sources":["../../src/hooks/useFeedback.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAQxD,MAAM,UAAU,WAAW;IACzB,QAAQ,EAAE,CAAC,CAAC,sCAAsC;IAElD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,MAAe,EAAE,EAAE;QAC/D,MAAM,MAAM,GAAmB;YAC7B,MAAM;YACN,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,wCAAwC;QACxC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,MAAe,EAAE,EAAE;QACjE,MAAM,MAAM,GAAmB;YAC7B,MAAM;YACN,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE,UAAU;YAClB,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,MAAc,EAAE,MAA+B,EAAE,MAAe,EAAE,EAAE;QACtG,MAAM,MAAM,GAAmB;YAC7B,MAAM;YACN,IAAI,EAAE,UAAU;YAChB,MAAM;YACN,MAAM;YACN,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,cAAc,EAAE,CAAC;AAClD,CAAC"}
@@ -0,0 +1,12 @@
1
+ export { AgentProvider, useAgent } from './provider/AgentProvider.js';
2
+ export { useFeedback } from './hooks/useFeedback.js';
3
+ export { storedToAgentMessages } from './provider/stored-messages.js';
4
+ export { ApprovalCard } from './approvals/ApprovalCard.js';
5
+ export type { ApprovalCardProps, ApprovalCardParts, ApprovalCardFrameProps, ApprovalCardButtonProps, ApprovalCardLabels, } from './approvals/ApprovalCard.js';
6
+ export type { AgentApprovalRequest, AgentClientConfig, AgentContextValue, AgentHistoryState, AgentMessage, AgentToolCallState, AgentDebugState, DebugLogEntry, DebugLogLevel, DebugLogNamespace, } from './provider/types.js';
7
+ export { AgentEntityComponent, defineAgentEntity, AgentEntity, asAgentEntity, useViewAnnotation, } from './entity/index.js';
8
+ export type { AgentEntityRenderContext, DefineAgentEntityConfig, AgentEntityProps, AgentEntityChildContext, AsAgentEntityConfig, InjectedAgentEntityProps, UseViewAnnotationOptions, UseViewAnnotationReturn, } from './entity/index.js';
9
+ export { AnnotationRegistry } from './annotations/AnnotationRegistry.js';
10
+ export type { ViewAnnotationOptions, AnnotationEntry } from './annotations/types.js';
11
+ export { annotationRegistry } from './annotations/singleton.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,YAAY,EACV,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EACV,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,aAAa,EACb,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EACV,wBAAwB,EACxB,uBAAuB,EACvB,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AACzE,YAAY,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,11 @@
1
+ export { AgentProvider, useAgent } from './provider/AgentProvider.js';
2
+ export { useFeedback } from './hooks/useFeedback.js';
3
+ export { storedToAgentMessages } from './provider/stored-messages.js';
4
+ // Approvals (ADR-0228): the card where the person approves an irreversible call.
5
+ export { ApprovalCard } from './approvals/ApprovalCard.js';
6
+ // Entity integration patterns
7
+ export { AgentEntityComponent, defineAgentEntity, AgentEntity, asAgentEntity, useViewAnnotation, } from './entity/index.js';
8
+ // Annotation registry for view annotations
9
+ export { AnnotationRegistry } from './annotations/AnnotationRegistry.js';
10
+ export { annotationRegistry } from './annotations/singleton.js';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAEtE,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,iFAAiF;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAsB3D,8BAA8B;AAC9B,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAa3B,2CAA2C;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAEzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import type { AgentClientConfig } from '@ouispec/agent-core';
3
+ import type { AgentContextValue } from './types.js';
4
+ /**
5
+ * AgentProvider — turnkey provider that handles the complete agent lifecycle.
6
+ *
7
+ * The platform provides:
8
+ * - createConversation() / sendMessage() — API callbacks
9
+ * - realtime: { url, getToken } — where and how to connect
10
+ *
11
+ * The SDK owns:
12
+ * - Socket.IO connection lifecycle (connect, reconnect, auth)
13
+ * - Room subscription tied to active turns, kept across reconnects
14
+ * - All event parsing (agent:* protocol)
15
+ * - Streaming state, message history, keyboard shortcuts
16
+ *
17
+ * UI actions are not dispatched here: the client's OUI surface runtime answers
18
+ * them on the same socket (ADR-0209).
19
+ */
20
+ export declare function AgentProvider({ config, children }: {
21
+ config: AgentClientConfig;
22
+ children: React.ReactNode;
23
+ }): React.FunctionComponentElement<React.ProviderProps<AgentContextValue | null>>;
24
+ export declare function useAgent(): AgentContextValue;
25
+ //# sourceMappingURL=AgentProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentProvider.d.ts","sourceRoot":"","sources":["../../src/provider/AgentProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAA8E,MAAM,OAAO,CAAC;AACnG,OAAO,KAAK,EACV,iBAAiB,EAKlB,MAAM,qBAAqB,CAAC;AAW7B,OAAO,KAAK,EAEV,iBAAiB,EAOlB,MAAM,YAAY,CAAC;AA0EpB;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IAAE,MAAM,EAAE,iBAAiB,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,iFA6uB3G;AAED,wBAAgB,QAAQ,IAAI,iBAAiB,CAI5C"}