@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,97 @@
1
+ import React, { useRef, useEffect, useCallback, useState } from 'react';
2
+ import { AgentEntityBase, EntityRegistry, } from '@ouispec/agent-core';
3
+ /**
4
+ * <AgentEntity> — wrapper component that grants agent capabilities to its children.
5
+ *
6
+ * Simplest integration pattern. Wrap any component to make it agent-addressable.
7
+ *
8
+ * Example:
9
+ * ```tsx
10
+ * <AgentEntity type="Character" id={char.id} displayContext={{ label: char.name }}>
11
+ * <CharacterCard character={char} />
12
+ * </AgentEntity>
13
+ *
14
+ * // Or with render prop:
15
+ * <AgentEntity type="Character" id={char.id} displayContext={{ label: char.name }}>
16
+ * {({ isTargeted, execute }) => (
17
+ * <div className={isTargeted ? 'highlighted' : ''}>
18
+ * <CharacterCard character={char} />
19
+ * <button onClick={() => execute('generate-clip', { character: char.id })}>
20
+ * Generate
21
+ * </button>
22
+ * </div>
23
+ * )}
24
+ * </AgentEntity>
25
+ * ```
26
+ */
27
+ export function AgentEntity(props) {
28
+ const { type, id, intents = [], displayContext, capabilities = {}, onTargeted, onReleased, onExecuting, onExecutionComplete, onCommandReceived, onObserve, children, as: Tag = 'div', className, style, } = props;
29
+ const [, forceUpdate] = useState(0);
30
+ const rerender = useCallback(() => forceUpdate(n => n + 1), []);
31
+ const elementRef = useRef(null);
32
+ const bridgeRef = useRef(null);
33
+ if (!bridgeRef.current) {
34
+ bridgeRef.current = new WrapperEntityBridge();
35
+ }
36
+ const bridge = bridgeRef.current;
37
+ bridge._sync(type, id, intents, displayContext, capabilities);
38
+ bridge._setCallbacks({ onTargeted, onReleased, onExecuting, onExecutionComplete, onCommandReceived, onObserve });
39
+ bridge._setRerender(rerender);
40
+ useEffect(() => {
41
+ bridge.register();
42
+ return () => bridge.unregister();
43
+ }, []);
44
+ useEffect(() => {
45
+ if (bridge._prevKey !== `${type}::${id}`) {
46
+ bridge.unregister();
47
+ bridge._sync(type, id, intents, displayContext, capabilities);
48
+ bridge.register();
49
+ bridge._prevKey = `${type}::${id}`;
50
+ }
51
+ }, [type, id]);
52
+ const refCallback = useCallback((el) => {
53
+ elementRef.current = el;
54
+ EntityRegistry.instance.updateElement(type, id, el);
55
+ }, [type, id]);
56
+ const childContext = {
57
+ isTargeted: bridge.isTargeted,
58
+ isExecuting: bridge.isExecuting,
59
+ currentAction: bridge.currentAction,
60
+ execute: (intentId, params, options) => bridge.execute(intentId, params, options),
61
+ emit: (signal, data) => bridge.emit(signal, data),
62
+ };
63
+ const content = typeof children === 'function' ? children(childContext) : children;
64
+ return React.createElement(Tag, { ref: refCallback, className, style, 'data-agent-entity': `${type}::${id}` }, content);
65
+ }
66
+ class WrapperEntityBridge extends AgentEntityBase {
67
+ _type = '';
68
+ _id = '';
69
+ _intents = [];
70
+ _display = { label: '' };
71
+ _caps = {};
72
+ _callbacks = {};
73
+ _rerender = null;
74
+ _prevKey = '';
75
+ get entityType() { return this._type; }
76
+ get entityId() { return this._id; }
77
+ get intents() { return this._intents; }
78
+ get displayContext() { return this._display; }
79
+ get capabilities() { return this._caps; }
80
+ _sync(type, id, intents, display, caps) {
81
+ this._type = type;
82
+ this._id = id;
83
+ this._intents = intents;
84
+ this._display = display;
85
+ this._caps = caps;
86
+ this._prevKey = `${type}::${id}`;
87
+ }
88
+ _setCallbacks(callbacks) { this._callbacks = callbacks; }
89
+ _setRerender(fn) { this._rerender = fn; }
90
+ onTargeted(action) { this._callbacks.onTargeted?.(action); this._rerender?.(); }
91
+ onReleased() { this._callbacks.onReleased?.(); this._rerender?.(); }
92
+ onExecuting(intentId, params) { this._callbacks.onExecuting?.(intentId, params); this._rerender?.(); }
93
+ onExecutionComplete(intentId, result) { this._callbacks.onExecutionComplete?.(intentId, result); this._rerender?.(); }
94
+ onCommandReceived(command) { return this._callbacks.onCommandReceived?.(command); }
95
+ onObserve(observation) { this._callbacks.onObserve?.(observation); }
96
+ }
97
+ //# sourceMappingURL=AgentEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEntity.js","sourceRoot":"","sources":["../../src/entity/AgentEntity.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import type { EntityCapabilities, EntityDisplayContext, AgentAction, AgentCommand, AgentCommandResponse, UserObservation, EntityExecuteOptions, Unsubscribe } from '@ouispec/agent-core';
3
+ import type { IntentResult } from '@ouispec/agent-core';
4
+ /**
5
+ * AgentEntityComponent — class-based React component that extends the core AgentEntityBase.
6
+ *
7
+ * This is the primary integration pattern for complex, stateful entity components.
8
+ * Subclass this and implement the abstract getters for your entity.
9
+ *
10
+ * Example:
11
+ * ```tsx
12
+ * class CharacterCard extends AgentEntityComponent<{ character: Character }> {
13
+ * get entityType() { return 'Character'; }
14
+ * get entityId() { return this.props.character.id; }
15
+ * get intents() { return ['generate-clip', 'clone-voice']; }
16
+ * get displayContext() {
17
+ * return { label: this.props.character.name, image: this.props.character.thumbnailUrl };
18
+ * }
19
+ *
20
+ * onTargeted(action) {
21
+ * this.setState({ highlighted: true });
22
+ * }
23
+ *
24
+ * onReleased() {
25
+ * this.setState({ highlighted: false });
26
+ * }
27
+ *
28
+ * render() {
29
+ * return <div ref={this.entityRef}>...</div>;
30
+ * }
31
+ * }
32
+ * ```
33
+ */
34
+ export declare abstract class AgentEntityComponent<P = Record<string, never>, S = Record<string, never>> extends React.Component<P, S> {
35
+ private _entityBridge;
36
+ private _entityRef;
37
+ abstract get entityType(): string;
38
+ abstract get entityId(): string;
39
+ abstract get intents(): string[];
40
+ abstract get displayContext(): EntityDisplayContext;
41
+ get capabilities(): EntityCapabilities;
42
+ constructor(props: P);
43
+ /**
44
+ * Ref to attach to the root DOM element.
45
+ * The registry uses this for visibility tracking (IntersectionObserver).
46
+ */
47
+ get entityRef(): React.RefObject<HTMLElement | null>;
48
+ get isTargeted(): boolean;
49
+ get isExecuting(): boolean;
50
+ /**
51
+ * Execute an intent through the SDK orchestrator.
52
+ */
53
+ execute(intentId: string, params?: Record<string, unknown>, options?: EntityExecuteOptions): Promise<IntentResult>;
54
+ /**
55
+ * Emit a signal to the agent (only when capabilities.observe is true).
56
+ */
57
+ emit(signal: string, data?: unknown): void;
58
+ /**
59
+ * Subscribe to events (only when capabilities.observe is true).
60
+ */
61
+ subscribe(event: string, handler: (data: unknown) => void): Unsubscribe;
62
+ onTargeted?(action: AgentAction): void;
63
+ onReleased?(): void;
64
+ onExecuting?(intentId: string, params: Record<string, unknown>): void;
65
+ onExecutionComplete?(intentId: string, result: IntentResult): void;
66
+ onCommandReceived?(command: AgentCommand): AgentCommandResponse | Promise<AgentCommandResponse> | void;
67
+ onObserve?(observation: UserObservation): void;
68
+ componentDidMount(): void;
69
+ componentDidUpdate(_prevProps: P): void;
70
+ componentWillUnmount(): void;
71
+ private _setupDomObservation;
72
+ }
73
+ //# sourceMappingURL=AgentEntityComponent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEntityComponent.d.ts","sourceRoot":"","sources":["../../src/entity/AgentEntityComponent.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAK1B,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,8BAAsB,oBAAoB,CACxC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EACzB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CACzB,SAAQ,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;IAC7B,OAAO,CAAC,aAAa,CAAqB;IAC1C,OAAO,CAAC,UAAU,CAAkC;IAEpD,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC;IAClC,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC;IAChC,QAAQ,KAAK,OAAO,IAAI,MAAM,EAAE,CAAC;IACjC,QAAQ,KAAK,cAAc,IAAI,oBAAoB,CAAC;IAEpD,IAAI,YAAY,IAAI,kBAAkB,CAErC;gBAEW,KAAK,EAAE,CAAC;IAKpB;;;OAGG;IACH,IAAI,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAEnD;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;OAEG;IACG,OAAO,CACX,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,CAAC;IAIxB;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI1C;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,WAAW;IAKvE,UAAU,CAAC,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI;IACtC,UAAU,CAAC,IAAI,IAAI;IACnB,WAAW,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IACrE,mBAAmB,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI;IAClE,iBAAiB,CAAC,CAAC,OAAO,EAAE,YAAY,GAAG,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IACtG,SAAS,CAAC,CAAC,WAAW,EAAE,eAAe,GAAG,IAAI;IAI9C,iBAAiB,IAAI,IAAI;IAMzB,kBAAkB,CAAC,UAAU,EAAE,CAAC,GAAG,IAAI;IAIvC,oBAAoB,IAAI,IAAI;IAI5B,OAAO,CAAC,oBAAoB;CAM7B"}
@@ -0,0 +1,134 @@
1
+ import React from 'react';
2
+ import { AgentEntityBase, EntityRegistry, } from '@ouispec/agent-core';
3
+ /**
4
+ * AgentEntityComponent — class-based React component that extends the core AgentEntityBase.
5
+ *
6
+ * This is the primary integration pattern for complex, stateful entity components.
7
+ * Subclass this and implement the abstract getters for your entity.
8
+ *
9
+ * Example:
10
+ * ```tsx
11
+ * class CharacterCard extends AgentEntityComponent<{ character: Character }> {
12
+ * get entityType() { return 'Character'; }
13
+ * get entityId() { return this.props.character.id; }
14
+ * get intents() { return ['generate-clip', 'clone-voice']; }
15
+ * get displayContext() {
16
+ * return { label: this.props.character.name, image: this.props.character.thumbnailUrl };
17
+ * }
18
+ *
19
+ * onTargeted(action) {
20
+ * this.setState({ highlighted: true });
21
+ * }
22
+ *
23
+ * onReleased() {
24
+ * this.setState({ highlighted: false });
25
+ * }
26
+ *
27
+ * render() {
28
+ * return <div ref={this.entityRef}>...</div>;
29
+ * }
30
+ * }
31
+ * ```
32
+ */
33
+ export class AgentEntityComponent extends React.Component {
34
+ _entityBridge;
35
+ _entityRef = React.createRef();
36
+ get capabilities() {
37
+ return {};
38
+ }
39
+ constructor(props) {
40
+ super(props);
41
+ this._entityBridge = new EntityBridge(this);
42
+ }
43
+ /**
44
+ * Ref to attach to the root DOM element.
45
+ * The registry uses this for visibility tracking (IntersectionObserver).
46
+ */
47
+ get entityRef() {
48
+ return this._entityRef;
49
+ }
50
+ get isTargeted() {
51
+ return this._entityBridge.isTargeted;
52
+ }
53
+ get isExecuting() {
54
+ return this._entityBridge.isExecuting;
55
+ }
56
+ /**
57
+ * Execute an intent through the SDK orchestrator.
58
+ */
59
+ async execute(intentId, params, options) {
60
+ return this._entityBridge.execute(intentId, params, options);
61
+ }
62
+ /**
63
+ * Emit a signal to the agent (only when capabilities.observe is true).
64
+ */
65
+ emit(signal, data) {
66
+ this._entityBridge.emit(signal, data);
67
+ }
68
+ /**
69
+ * Subscribe to events (only when capabilities.observe is true).
70
+ */
71
+ subscribe(event, handler) {
72
+ return this._entityBridge.subscribe(event, handler);
73
+ }
74
+ // --- React lifecycle ---
75
+ componentDidMount() {
76
+ this._entityBridge.syncProperties();
77
+ this._entityBridge.register();
78
+ this._setupDomObservation();
79
+ }
80
+ componentDidUpdate(_prevProps) {
81
+ this._entityBridge.syncProperties();
82
+ }
83
+ componentWillUnmount() {
84
+ this._entityBridge.unregister();
85
+ }
86
+ _setupDomObservation() {
87
+ const el = this._entityRef.current;
88
+ if (el) {
89
+ EntityRegistry.instance.updateElement(this.entityType, this.entityId, el);
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * Internal bridge between the React component and AgentEntityBase.
95
+ * Extends AgentEntityBase and delegates lifecycle hooks to the React component.
96
+ */
97
+ class EntityBridge extends AgentEntityBase {
98
+ component;
99
+ constructor(component) {
100
+ super();
101
+ this.component = component;
102
+ }
103
+ get entityType() { return this.component.entityType; }
104
+ get entityId() { return this.component.entityId; }
105
+ get intents() { return this.component.intents; }
106
+ get displayContext() { return this.component.displayContext; }
107
+ get capabilities() { return this.component.capabilities; }
108
+ syncProperties() {
109
+ // Properties are read dynamically from the component — no sync needed
110
+ }
111
+ onTargeted(action) {
112
+ this.component.onTargeted?.(action);
113
+ this.component.forceUpdate();
114
+ }
115
+ onReleased() {
116
+ this.component.onReleased?.();
117
+ this.component.forceUpdate();
118
+ }
119
+ onExecuting(intentId, params) {
120
+ this.component.onExecuting?.(intentId, params);
121
+ this.component.forceUpdate();
122
+ }
123
+ onExecutionComplete(intentId, result) {
124
+ this.component.onExecutionComplete?.(intentId, result);
125
+ this.component.forceUpdate();
126
+ }
127
+ onCommandReceived(command) {
128
+ return this.component.onCommandReceived?.(command);
129
+ }
130
+ onObserve(observation) {
131
+ this.component.onObserve?.(observation);
132
+ }
133
+ }
134
+ //# sourceMappingURL=AgentEntityComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AgentEntityComponent.js","sourceRoot":"","sources":["../../src/entity/AgentEntityComponent.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import React from 'react';
2
+ import type { AgentEntityChildContext } from './AgentEntity.js';
3
+ import type { EntityCapabilities, EntityDisplayContext, AgentAction, AgentCommand, AgentCommandResponse, UserObservation } from '@ouispec/agent-core';
4
+ /**
5
+ * Configuration for the asAgentEntity HOC.
6
+ */
7
+ export interface AsAgentEntityConfig<P> {
8
+ entityType: string | ((props: P) => string);
9
+ entityId: (props: P) => string;
10
+ intents?: string[] | ((props: P) => string[]);
11
+ displayContext: (props: P) => EntityDisplayContext;
12
+ capabilities?: EntityCapabilities;
13
+ onTargeted?: (props: P, action: AgentAction) => void;
14
+ onReleased?: (props: P) => void;
15
+ onCommandReceived?: (props: P, command: AgentCommand) => AgentCommandResponse | Promise<AgentCommandResponse> | void;
16
+ onObserve?: (props: P, observation: UserObservation) => void;
17
+ }
18
+ /**
19
+ * Props injected into the wrapped component by asAgentEntity.
20
+ */
21
+ export interface InjectedAgentEntityProps {
22
+ agentEntity: AgentEntityChildContext;
23
+ }
24
+ /**
25
+ * asAgentEntity — Higher-Order Component that wraps an existing component with agent entity capabilities.
26
+ *
27
+ * Best for wrapping third-party components or components you can't modify.
28
+ *
29
+ * Example:
30
+ * ```tsx
31
+ * import { ThirdPartyCard } from 'some-library';
32
+ *
33
+ * const AgentThirdPartyCard = asAgentEntity({
34
+ * entityType: 'Character',
35
+ * entityId: (props) => props.character.id,
36
+ * displayContext: (props) => ({ label: props.character.name }),
37
+ * intents: ['generate-clip', 'clone-voice'],
38
+ * })(ThirdPartyCard);
39
+ *
40
+ * // Usage:
41
+ * <AgentThirdPartyCard character={char} />
42
+ * ```
43
+ */
44
+ export declare function asAgentEntity<P extends Record<string, unknown>>(config: AsAgentEntityConfig<P>): (WrappedComponent: React.ComponentType<P & Partial<InjectedAgentEntityProps>>) => React.FC<P>;
45
+ //# sourceMappingURL=asAgentEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asAgentEntity.d.ts","sourceRoot":"","sources":["../../src/entity/asAgentEntity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,eAAe,EAChB,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,mBAAmB,CAAC,CAAC;IACpC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC9C,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,oBAAoB,CAAC;IACnD,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,KAAK,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IACrH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9D;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,uBAAuB,CAAC;CACtC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7D,MAAM,EAAE,mBAAmB,CAAC,CAAC,CAAC,IAG5B,kBAAkB,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAC,KAC3E,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAkCf"}
@@ -0,0 +1,51 @@
1
+ import React from 'react';
2
+ import { AgentEntity } from './AgentEntity.js';
3
+ /**
4
+ * asAgentEntity — Higher-Order Component that wraps an existing component with agent entity capabilities.
5
+ *
6
+ * Best for wrapping third-party components or components you can't modify.
7
+ *
8
+ * Example:
9
+ * ```tsx
10
+ * import { ThirdPartyCard } from 'some-library';
11
+ *
12
+ * const AgentThirdPartyCard = asAgentEntity({
13
+ * entityType: 'Character',
14
+ * entityId: (props) => props.character.id,
15
+ * displayContext: (props) => ({ label: props.character.name }),
16
+ * intents: ['generate-clip', 'clone-voice'],
17
+ * })(ThirdPartyCard);
18
+ *
19
+ * // Usage:
20
+ * <AgentThirdPartyCard character={char} />
21
+ * ```
22
+ */
23
+ export function asAgentEntity(config) {
24
+ return function wrap(WrappedComponent) {
25
+ const WithAgentEntity = (props) => {
26
+ const resolvedType = typeof config.entityType === 'function'
27
+ ? config.entityType(props)
28
+ : config.entityType;
29
+ const resolvedId = config.entityId(props);
30
+ const resolvedIntents = typeof config.intents === 'function'
31
+ ? config.intents(props)
32
+ : (config.intents ?? []);
33
+ const resolvedDisplay = config.displayContext(props);
34
+ return React.createElement(AgentEntity, {
35
+ type: resolvedType,
36
+ id: resolvedId,
37
+ intents: resolvedIntents,
38
+ displayContext: resolvedDisplay,
39
+ capabilities: config.capabilities,
40
+ onTargeted: config.onTargeted ? (action) => config.onTargeted(props, action) : undefined,
41
+ onReleased: config.onReleased ? () => config.onReleased(props) : undefined,
42
+ onCommandReceived: config.onCommandReceived ? (cmd) => config.onCommandReceived(props, cmd) : undefined,
43
+ onObserve: config.onObserve ? (obs) => config.onObserve(props, obs) : undefined,
44
+ children: (context) => React.createElement(WrappedComponent, { ...props, agentEntity: context }),
45
+ });
46
+ };
47
+ WithAgentEntity.displayName = `asAgentEntity(${WrappedComponent.displayName || WrappedComponent.name || 'Component'})`;
48
+ return WithAgentEntity;
49
+ };
50
+ }
51
+ //# sourceMappingURL=asAgentEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asAgentEntity.js","sourceRoot":"","sources":["../../src/entity/asAgentEntity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAiC/C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,aAAa,CAC3B,MAA8B;IAE9B,OAAO,SAAS,IAAI,CAClB,gBAA4E;QAE5E,MAAM,eAAe,GAAgB,CAAC,KAAK,EAAE,EAAE;YAC7C,MAAM,YAAY,GAAG,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU;gBAC1D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;gBAC1B,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;YACtB,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC1C,MAAM,eAAe,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,UAAU;gBAC1D,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;gBACvB,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;YAC3B,MAAM,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAErD,OAAO,KAAK,CAAC,aAAa,CACxB,WAAW,EACX;gBACE,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,UAAU;gBACd,OAAO,EAAE,eAAe;gBACxB,cAAc,EAAE,eAAe;gBAC/B,YAAY,EAAE,MAAM,CAAC,YAAY;gBACjC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAmB,EAAE,EAAE,CAAC,MAAM,CAAC,UAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtG,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,UAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;gBAC3E,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,GAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,iBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACtH,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAoB,EAAE,EAAE,CAAC,MAAM,CAAC,SAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS;gBACjG,QAAQ,EAAE,CAAC,OAAgC,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CACjE,gBAAgB,EAChB,EAAE,GAAG,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,CACnC;aACF,CACF,CAAC;QACJ,CAAC,CAAC;QAEF,eAAe,CAAC,WAAW,GAAG,iBAAiB,gBAAgB,CAAC,WAAW,IAAI,gBAAgB,CAAC,IAAI,IAAI,WAAW,GAAG,CAAC;QACvH,OAAO,eAAe,CAAC;IACzB,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ import React from 'react';
2
+ import type { EntityCapabilities, EntityDisplayContext, AgentAction, AgentCommand, AgentCommandResponse, UserObservation, EntityExecuteOptions, IntentResult } from '@ouispec/agent-core';
3
+ /**
4
+ * Agent context passed to the render function of a defined entity.
5
+ */
6
+ export interface AgentEntityRenderContext {
7
+ ref: React.RefCallback<HTMLElement>;
8
+ isTargeted: boolean;
9
+ isExecuting: boolean;
10
+ currentAction: AgentAction | null;
11
+ execute: (intentId: string, params?: Record<string, unknown>, options?: EntityExecuteOptions) => Promise<IntentResult>;
12
+ emit: (signal: string, data?: unknown) => void;
13
+ }
14
+ /**
15
+ * Configuration for defining an agent entity component.
16
+ */
17
+ export interface DefineAgentEntityConfig<P> {
18
+ entityType: string | ((props: P) => string);
19
+ entityId: (props: P) => string;
20
+ intents: string[] | ((props: P) => string[]);
21
+ displayContext: (props: P) => EntityDisplayContext;
22
+ capabilities?: EntityCapabilities | ((props: P) => EntityCapabilities);
23
+ onTargeted?: (props: P, action: AgentAction) => void;
24
+ onReleased?: (props: P) => void;
25
+ onExecuting?: (props: P, intentId: string, params: Record<string, unknown>) => void;
26
+ onExecutionComplete?: (props: P, intentId: string, result: IntentResult) => void;
27
+ onCommandReceived?: (props: P, command: AgentCommand) => AgentCommandResponse | Promise<AgentCommandResponse> | void;
28
+ onObserve?: (props: P, observation: UserObservation) => void;
29
+ }
30
+ /**
31
+ * defineAgentEntity — factory function that creates a React component with full
32
+ * AgentEntity capabilities baked in.
33
+ *
34
+ * Example:
35
+ * ```tsx
36
+ * const CharacterCard = defineAgentEntity({
37
+ * entityType: 'Character',
38
+ * entityId: (props) => props.character.id,
39
+ * intents: ['generate-clip', 'clone-voice'],
40
+ * displayContext: (props) => ({ label: props.character.name, image: props.character.thumbnailUrl }),
41
+ * }, (props, agent) => {
42
+ * return (
43
+ * <div ref={agent.ref} className={agent.isTargeted ? 'targeted' : ''}>
44
+ * <h3>{props.character.name}</h3>
45
+ * <button onClick={() => agent.execute('generate-clip', { character: props.character.id })}>
46
+ * Generate Clip
47
+ * </button>
48
+ * </div>
49
+ * );
50
+ * });
51
+ * ```
52
+ */
53
+ export declare function defineAgentEntity<P extends Record<string, unknown>>(config: DefineAgentEntityConfig<P>, render: (props: P, agent: AgentEntityRenderContext) => React.ReactElement | null): React.FC<P>;
54
+ //# sourceMappingURL=defineAgentEntity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineAgentEntity.d.ts","sourceRoot":"","sources":["../../src/entity/defineAgentEntity.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AAKjF,OAAO,KAAK,EACV,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,EACX,YAAY,EACZ,oBAAoB,EACpB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAE7B;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,GAAG,EAAE,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACpC,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;CAChD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB,CAAC,CAAC;IACxC,UAAU,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC,CAAC;IAC5C,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC,CAAC;IAC7C,cAAc,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,oBAAoB,CAAC;IACnD,YAAY,CAAC,EAAE,kBAAkB,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,KAAK,kBAAkB,CAAC,CAAC;IACvE,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,KAAK,IAAI,CAAC;IACrD,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;IAChC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpF,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI,CAAC;IACjF,iBAAiB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,YAAY,KAAK,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IACrH,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,eAAe,KAAK,IAAI,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjE,MAAM,EAAE,uBAAuB,CAAC,CAAC,CAAC,EAClC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,wBAAwB,KAAK,KAAK,CAAC,YAAY,GAAG,IAAI,GAC/E,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAiEb"}
@@ -0,0 +1,133 @@
1
+ import { useRef, useEffect, useMemo, useCallback, useState } from 'react';
2
+ import { AgentEntityBase, EntityRegistry, } from '@ouispec/agent-core';
3
+ /**
4
+ * defineAgentEntity — factory function that creates a React component with full
5
+ * AgentEntity capabilities baked in.
6
+ *
7
+ * Example:
8
+ * ```tsx
9
+ * const CharacterCard = defineAgentEntity({
10
+ * entityType: 'Character',
11
+ * entityId: (props) => props.character.id,
12
+ * intents: ['generate-clip', 'clone-voice'],
13
+ * displayContext: (props) => ({ label: props.character.name, image: props.character.thumbnailUrl }),
14
+ * }, (props, agent) => {
15
+ * return (
16
+ * <div ref={agent.ref} className={agent.isTargeted ? 'targeted' : ''}>
17
+ * <h3>{props.character.name}</h3>
18
+ * <button onClick={() => agent.execute('generate-clip', { character: props.character.id })}>
19
+ * Generate Clip
20
+ * </button>
21
+ * </div>
22
+ * );
23
+ * });
24
+ * ```
25
+ */
26
+ export function defineAgentEntity(config, render) {
27
+ const DefinedEntity = (props) => {
28
+ const [, forceUpdate] = useState(0);
29
+ const rerender = useCallback(() => forceUpdate(n => n + 1), []);
30
+ const resolvedType = typeof config.entityType === 'function' ? config.entityType(props) : config.entityType;
31
+ const resolvedId = config.entityId(props);
32
+ const resolvedIntents = typeof config.intents === 'function' ? config.intents(props) : config.intents;
33
+ const resolvedDisplay = config.displayContext(props);
34
+ const resolvedCapabilities = typeof config.capabilities === 'function'
35
+ ? config.capabilities(props)
36
+ : (config.capabilities ?? {});
37
+ const bridgeRef = useRef(null);
38
+ if (!bridgeRef.current) {
39
+ bridgeRef.current = new FunctionalEntityBridge();
40
+ }
41
+ const bridge = bridgeRef.current;
42
+ bridge._syncProps(resolvedType, resolvedId, resolvedIntents, resolvedDisplay, resolvedCapabilities);
43
+ bridge._setCallbacks({
44
+ onTargeted: config.onTargeted ? (action) => config.onTargeted(props, action) : undefined,
45
+ onReleased: config.onReleased ? () => config.onReleased(props) : undefined,
46
+ onExecuting: config.onExecuting ? (intentId, params) => config.onExecuting(props, intentId, params) : undefined,
47
+ onExecutionComplete: config.onExecutionComplete ? (intentId, result) => config.onExecutionComplete(props, intentId, result) : undefined,
48
+ onCommandReceived: config.onCommandReceived ? (cmd) => config.onCommandReceived(props, cmd) : undefined,
49
+ onObserve: config.onObserve ? (obs) => config.onObserve(props, obs) : undefined,
50
+ });
51
+ bridge._setRerender(rerender);
52
+ useEffect(() => {
53
+ bridge.register();
54
+ return () => bridge.unregister();
55
+ }, []);
56
+ useEffect(() => {
57
+ const prevKey = `${bridge._prevType}::${bridge._prevId}`;
58
+ const currKey = `${resolvedType}::${resolvedId}`;
59
+ if (prevKey !== currKey) {
60
+ bridge.unregister();
61
+ bridge.register();
62
+ }
63
+ bridge._prevType = resolvedType;
64
+ bridge._prevId = resolvedId;
65
+ }, [resolvedType, resolvedId]);
66
+ const refCallback = useCallback((element) => {
67
+ EntityRegistry.instance.updateElement(resolvedType, resolvedId, element);
68
+ }, [resolvedType, resolvedId]);
69
+ const agentContext = useMemo(() => ({
70
+ ref: refCallback,
71
+ isTargeted: bridge.isTargeted,
72
+ isExecuting: bridge.isExecuting,
73
+ currentAction: bridge.currentAction,
74
+ execute: (intentId, params, options) => bridge.execute(intentId, params, options),
75
+ emit: (signal, data) => bridge.emit(signal, data),
76
+ }), [bridge.isTargeted, bridge.isExecuting, bridge.currentAction, refCallback]);
77
+ return render(props, agentContext);
78
+ };
79
+ DefinedEntity.displayName = `AgentEntity(${typeof config.entityType === 'string' ? config.entityType : 'dynamic'})`;
80
+ return DefinedEntity;
81
+ }
82
+ class FunctionalEntityBridge extends AgentEntityBase {
83
+ _type = '';
84
+ _id = '';
85
+ _intents = [];
86
+ _display = { label: '' };
87
+ _caps = {};
88
+ _callbacks = {};
89
+ _rerender = null;
90
+ _prevType = '';
91
+ _prevId = '';
92
+ get entityType() { return this._type; }
93
+ get entityId() { return this._id; }
94
+ get intents() { return this._intents; }
95
+ get displayContext() { return this._display; }
96
+ get capabilities() { return this._caps; }
97
+ _syncProps(type, id, intents, display, caps) {
98
+ this._type = type;
99
+ this._id = id;
100
+ this._intents = intents;
101
+ this._display = display;
102
+ this._caps = caps;
103
+ }
104
+ _setCallbacks(callbacks) {
105
+ this._callbacks = callbacks;
106
+ }
107
+ _setRerender(fn) {
108
+ this._rerender = fn;
109
+ }
110
+ onTargeted(action) {
111
+ this._callbacks.onTargeted?.(action);
112
+ this._rerender?.();
113
+ }
114
+ onReleased() {
115
+ this._callbacks.onReleased?.();
116
+ this._rerender?.();
117
+ }
118
+ onExecuting(intentId, params) {
119
+ this._callbacks.onExecuting?.(intentId, params);
120
+ this._rerender?.();
121
+ }
122
+ onExecutionComplete(intentId, result) {
123
+ this._callbacks.onExecutionComplete?.(intentId, result);
124
+ this._rerender?.();
125
+ }
126
+ onCommandReceived(command) {
127
+ return this._callbacks.onCommandReceived?.(command);
128
+ }
129
+ onObserve(observation) {
130
+ this._callbacks.onObserve?.(observation);
131
+ }
132
+ }
133
+ //# sourceMappingURL=defineAgentEntity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defineAgentEntity.js","sourceRoot":"","sources":["../../src/entity/defineAgentEntity.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
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
+ export type { AgentEntityRenderContext, DefineAgentEntityConfig } from './defineAgentEntity.js';
7
+ export type { AgentEntityProps, AgentEntityChildContext } from './AgentEntity.js';
8
+ export type { AsAgentEntityConfig, InjectedAgentEntityProps } from './asAgentEntity.js';
9
+ export type { UseViewAnnotationOptions, UseViewAnnotationReturn } from './useViewAnnotation.js';
10
+ //# sourceMappingURL=index.d.ts.map