@sophonsai/agent-embed-vue 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,16 +2,12 @@
2
2
 
3
3
  ## 应用接入
4
4
 
5
- 传入服务地址 `endpoint` 和 Agent 的应用接入 `token`;可选 `baseUrl` 默认是 `/e/v1/embed`。
6
- 最终 iframe 地址是 `endpoint + baseUrl + '/' + encodeURIComponent(token)`。
5
+ 传入 SAAP 服务地址 `endpoint` 和智能体的应用接入凭证 `token`。
7
6
 
8
7
  ```vue
9
8
  <AgentEmbed endpoint="https://agent.example.com" token="应用接入Token" style="height:600px" />
10
9
  ```
11
10
 
12
- 不再接收完整 `url`、旧 `initConfig`、Agent ID 或平台用户凭证。
13
- `threadId`、外观配置、实例命令和事件回调继续支持。
14
-
15
11
  ## 安装
16
12
 
17
13
  ```bash
@@ -99,7 +95,6 @@ const handleFontSizeChange = (fontSize: number) => {
99
95
  | ------------------- | ----------------------- | ---- | ------------------------------------- |
100
96
  | `endpoint` | `string` | 是 | 服务地址 |
101
97
  | `token` | `string` | 是 | Agent 应用接入凭证 |
102
- | `baseUrl` | `string` | 否 | 嵌入路径,默认 `/e/v1/embed` |
103
98
  | `threadId` | `string` | 否 | 初始会话 ID |
104
99
  | `runtime_variables` | `AgentRuntimeVariables` | 否 | 新会话绑定的运行时变量,值必须为 JSON |
105
100
  | `appearance` | `AgentAppearance` | 否 | 主题、字号和头部按钮配置 |
@@ -123,12 +118,11 @@ const handleFontSizeChange = (fontSize: number) => {
123
118
  <AgentEmbed
124
119
  endpoint="https://agent.example.com"
125
120
  token="应用接入Token"
126
- base-url="/e/v1/embed"
127
121
  thread-id="可选初始会话ID"
128
122
  />
129
123
  ```
130
124
 
131
- `baseUrl` 可以省略。接入配置只在挂载时读取;需要切换服务、token 或会话时,修改组件 `key` 重新挂载。
125
+ 接入配置只在挂载时读取;需要切换服务、token 或会话时,修改组件 `key` 重新挂载。
132
126
  `appearance` 会随外观配置更新。
133
127
 
134
128
  ## 外观与受控状态
@@ -145,7 +139,7 @@ const appearance = reactive<AgentAppearance>({
145
139
  })
146
140
  ```
147
141
 
148
- `header.themeSettingButton` 默认值为 `false`,只有显式设置为 `true` 时才显示主题设置按钮。
142
+ `header.themeSettingButton` 默认值为 `true`,显式设置为 `false` 时隐藏主题设置按钮。
149
143
 
150
144
  可用主题:
151
145
 
@@ -268,7 +262,7 @@ agent.value?.focusInput()
268
262
  | `@concurrent-send` | 无 | 回复生成期间再次发送消息 |
269
263
  | `@event` | `AgentServerEvent` | 接收原始服务端事件 |
270
264
  | `@session-context-ready` | `AgentSessionContext` | 会话上下文可用,包含 `threadId` 和 `turnId` |
271
- | `@tool-call-created` | `AgentToolCallCreatedEvent`, `AgentSessionEventContext` | 创建一个工具调用 |
265
+ | `@tool-call-created` | `AgentToolCallReadyEvent`, `AgentSessionEventContext` | 创建一个工具调用 |
272
266
  | `@tool-approval-requested` | `AgentToolApprovalRequestedEvent`, `AgentSessionEventContext` | 一组工具调用需要确认 |
273
267
  | `@tool-call-started` | `AgentToolCallStartedEvent`, `AgentSessionEventContext` | 工具调用开始 |
274
268
  | `@tool-call-progress-updated` | `AgentToolCallProgressUpdatedEvent`, `AgentSessionEventContext` | 工具调用进度更新 |
@@ -276,6 +270,7 @@ agent.value?.focusInput()
276
270
  | `@tool-call-succeeded` | `AgentToolCallSucceededEvent`, `AgentSessionEventContext` | 工具调用成功 |
277
271
  | `@tool-call-failed` | `AgentToolCallFailedEvent`, `AgentSessionEventContext` | 工具调用失败 |
278
272
  | `@tool-call-cancelled` | `AgentToolCallCancelledEvent`, `AgentSessionEventContext` | 工具调用取消 |
273
+ | `@client-tool-request` | `AgentToolCallStartedEvent`, `AgentSessionEventContext` | 客户端工具执行请求;可通过 `clientTools` prop 注册自动执行函数 |
279
274
  | `@client-action-request` | `AgentClientActionRequestEvent`, `AgentSessionEventContext` | 智能体请求宿主执行客户端动作 |
280
275
  | `@user-feedback-consumed` | `AgentUserFeedbackConsumedEvent`, `AgentSessionEventContext` | 用户反馈已被处理 |
281
276
  | `@user-steer-consumed` | `AgentUserSteerConsumedEvent`, `AgentSessionEventContext` | 用户 steer 指令已被处理 |
package/dist/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { PropType } from "vue";
2
- import { AgentAppearance, AgentEmbedInitError, AgentEmbedInstance, AgentEmbedTheme, AgentEvents, AgentRuntimeVariables } from "@sophonsai/agent-embed-sdk";
2
+ import { AgentAppearance, AgentClientToolHandler, AgentEmbedInitError, AgentEmbedInstance, AgentEmbedTheme, AgentEvents, AgentRuntimeVariables } from "@sophonsai/agent-embed-sdk";
3
3
  export * from "@sophonsai/agent-embed-sdk";
4
4
  //#region ../core/dist/index.d.mts
5
5
  interface AgentSessionContext {
@@ -25,8 +25,6 @@ interface AgentTextPayload {
25
25
  interface AgentSessionRunEventContext {
26
26
  runId: string;
27
27
  threadId: string | null;
28
- objectType: 'model' | 'agent' | 'knowledge_base' | 'database' | 'file';
29
- objectId: string;
30
28
  step: number;
31
29
  parentToolCallId: string | null;
32
30
  }
@@ -66,12 +64,17 @@ interface AgentToolCallCancelledEvent {
66
64
  }
67
65
  type AgentToolCall = AgentToolCallStartedEvent & ({
68
66
  kind: 'tool';
69
- executor: 'server';
67
+ executor: 'server' | 'client';
70
68
  } | {
71
69
  kind: 'action';
72
70
  executor: 'client';
73
71
  });
74
72
  interface AgentToolCallCreatedEvent {
73
+ toolCallId: string;
74
+ toolName: string;
75
+ icon?: string;
76
+ }
77
+ interface AgentToolCallReadyEvent {
75
78
  toolCall: AgentToolCall;
76
79
  dependsOn?: {
77
80
  toolCallId: string;
@@ -158,6 +161,7 @@ declare const AgentEmbed: import("vue").DefineComponent<import("vue").ExtractPro
158
161
  };
159
162
  threadId: StringConstructor;
160
163
  runtime_variables: PropType<AgentRuntimeVariables>;
164
+ clientTools: PropType<Record<string, AgentClientToolHandler>>;
161
165
  appearance: PropType<AgentAppearance>;
162
166
  }>, () => import("vue").VNode<import("vue").RendererNode, import("vue").RendererElement, {
163
167
  [key: string]: any;
@@ -181,6 +185,7 @@ declare const AgentEmbed: import("vue").DefineComponent<import("vue").ExtractPro
181
185
  };
182
186
  threadId: StringConstructor;
183
187
  runtime_variables: PropType<AgentRuntimeVariables>;
188
+ clientTools: PropType<Record<string, AgentClientToolHandler>>;
184
189
  appearance: PropType<AgentAppearance>;
185
190
  }>> & Readonly<{
186
191
  "onConcurrent-send"?: (() => any) | undefined;
@@ -188,6 +193,7 @@ declare const AgentEmbed: import("vue").DefineComponent<import("vue").ExtractPro
188
193
  onReady?: ((instance: AgentEmbedInstance) => any) | undefined;
189
194
  "onSession-context-ready"?: ((context: AgentSessionContext) => any) | undefined;
190
195
  "onTool-call-created"?: ((event: AgentToolCallCreatedEvent, context: AgentSessionEventContext) => any) | undefined;
196
+ "onTool-call-ready"?: ((event: AgentToolCallReadyEvent, context: AgentSessionEventContext) => any) | undefined;
191
197
  "onTool-approval-requested"?: ((event: AgentToolApprovalRequestedEvent, context: AgentSessionEventContext) => any) | undefined;
192
198
  "onTool-call-started"?: ((event: AgentToolCallStartedEvent, context: AgentSessionEventContext) => any) | undefined;
193
199
  "onTool-call-progress-updated"?: ((event: AgentToolCallProgressUpdatedEvent, context: AgentSessionEventContext) => any) | undefined;
@@ -196,6 +202,7 @@ declare const AgentEmbed: import("vue").DefineComponent<import("vue").ExtractPro
196
202
  "onTool-call-failed"?: ((event: AgentToolCallFailedEvent, context: AgentSessionEventContext) => any) | undefined;
197
203
  onCancelled?: ((result: AgentSessionCancelled) => any) | undefined;
198
204
  "onTool-call-cancelled"?: ((event: AgentToolCallCancelledEvent, context: AgentSessionEventContext) => any) | undefined;
205
+ "onClient-tool-request"?: ((event: AgentToolCallStartedEvent, context: AgentSessionEventContext) => any) | undefined;
199
206
  "onClient-action-request"?: ((event: AgentClientActionRequestEvent, context: AgentSessionEventContext) => any) | undefined;
200
207
  "onUser-feedback-consumed"?: ((event: AgentUserFeedbackConsumedEvent, context: AgentSessionEventContext) => any) | undefined;
201
208
  "onUser-steer-consumed"?: ((event: AgentUserSteerConsumedEvent, context: AgentSessionEventContext) => any) | undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../core/dist/index.d.mts","../src/index.ts"],"mappings":";;;;UAwBU;EACR;EACA;;UAEQ;EACR;EACA;EACA,YAAY;IACV;IACA;IACA;IACA;IACA;IACA;IACA;MACE;MACA;;;;UAII;EACR;EACA;EACA;EACA;EACA;EACA;;KAEG,2BAA2B,8BAA8B;UACpD;EACR;EACA;EACA;EACA;EACA,WAAW;;UAEH,oCAAoC;EAC5C;;UAEQ,0CAA0C;EAClD;EACA;IACE;IACA;IACA,MAAM;;;UAGA,iCAAiC;EACzC;;UAEQ;EACR;EACA;EACA;EACA;;UAEQ;EACR;EACA;EACA;EACA;;KAEG,gBAAgB;EACnB;EACA;;EAEA;EACA;;UAEQ;EACR,UAAU;EACV;IACE;IACA;;;UAGM;EACR;;UAEQ;EACR;EACA;EACA;EACA,WAAW;EACX;;UAEQ;EACR;EACA,UAAU;;UAEF;EACR;EACA;EACA,UAAU;;UAEF;EACR;;UAEQ;EACR;EACA,UAAU;;KAEP,+BAA+B;KAC/B,iCAAiC;KACjC,8BAA8B;KAC9B,4BAA4B;KAC5B,4BAA4B;UACvB;EACR;EACA;;UAEQ;EACR;;UAEQ;EACR;EACA;EACA;EACA;EACA;;UAEQ;EACR;EACA,SAAS;;UAED;EACR;EACA,SAAS;EACT;;UAEQ;EACR;EACA,SAAS;;KAEN,yBAAyB,sBAAsB,sBAAsB;KACrE,mBAAmB;;;KCzInB,UAAU,wBAAwB,uBAAuB,cAAc,SACxE,aAAa,aAAa,WACrB,UAAU,SAAS,UAAU,aAC7B,UAAU,UAAU,UAAU,UACnC;KACC,kBAAkB,uBAAuB,wBAAwB,cAAc,UAAU;KACzF,qBACF,cAAc,eAAe,kBAAkB,uBAC3C,MAAM,WAAW,YAAY,YAAY;cAyBnC,0BAAU,8BAAA;;;;;;;;;;;;;;EAOU,mBAAA,SAAS;EAChB,YAAA,SAAS;;;;EA7B1B,QAAC,UAAU;EACF,iBAAC,OAAO;EACJ,qBAAC;EACP,eAAC,OAAO;;;;;;;;;;;;;;;EAyBS,mBAAA,SAAS;EAChB,YAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCA6CjC"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../core/dist/index.d.mts","../src/index.ts"],"mappings":";;;;UAsBU;EACR;EACA;;UAEQ;EACR;EACA;EACA,YAAY;IACV;IACA;IACA;IACA;IACA;IACA;IACA;MACE;MACA;;;;UAII;EACR;EACA;EACA;EACA;;KAEG,2BAA2B,8BAA8B;UACpD;EACR;EACA;EACA;EACA;EACA,WAAW;;UAEH,oCAAoC;EAC5C;;UAEQ,0CAA0C;EAClD;EACA;IACE;IACA;IACA,MAAM;;;UAGA,iCAAiC;EACzC;;UAEQ;EACR;EACA;EACA;EACA;;UAEQ;EACR;EACA;EACA;EACA;;KAEG,gBAAgB;EACnB;EACA;;EAEA;EACA;;UAEQ;EACR;EACA;EACA;;UAEQ;EACR,UAAU;EACV;IACE;IACA;;;UAGM;EACR;;UAEQ;EACR;EACA;EACA;EACA,WAAW;EACX;;UAEQ;EACR;EACA,UAAU;;UAEF;EACR;EACA;EACA,UAAU;;UAEF;EACR;;UAEQ;EACR;EACA,UAAU;;KAEP,+BAA+B;KAC/B,iCAAiC;KACjC,8BAA8B;KAC9B,4BAA4B;KAC5B,4BAA4B;UACvB;EACR;EACA;;UAEQ;EACR;;UAEQ;EACR;EACA;EACA;EACA;EACA;;UAEQ;EACR;EACA,SAAS;;UAED;EACR;EACA,SAAS;EACT;;UAEQ;EACR;EACA,SAAS;;KAEN,yBAAyB,sBAAsB,sBAAsB;KACrE,mBAAmB;;;KCzInB,UAAU,wBAAwB,uBAAuB,cAAc,SACxE,aAAa,aAAa,WACrB,UAAU,SAAS,UAAU,aAC7B,UAAU,UAAU,UAAU,UACnC;KACC,kBAAkB,uBAAuB,wBAAwB,cAAc,UAAU;KACzF,qBACF,cAAc,eAAe,kBAAkB,uBAC3C,MAAM,WAAW,YAAY,YAAY;cAyBnC,0BAAU,8BAAA;;;;;;;;;;;;;;EAOU,mBAAA,SAAS;EACf,aAAA,SAAS,eAAe;EACzB,YAAA,SAAS;;;;EA9B1B,QAAC,UAAU;EACF,iBAAC,OAAO;EACJ,qBAAC;EACP,eAAC,OAAO;;;;;;;;;;;;;;;EAyBS,mBAAA,SAAS;EACf,aAAA,SAAS,eAAe;EACzB,YAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCA8CjC"}
package/dist/index.mjs CHANGED
@@ -29,6 +29,7 @@ const AgentEmbed = defineComponent({
29
29
  },
30
30
  threadId: String,
31
31
  runtime_variables: Object,
32
+ clientTools: Object,
32
33
  appearance: Object
33
34
  },
34
35
  emits: agentEmbedEmits,
@@ -41,6 +42,7 @@ const AgentEmbed = defineComponent({
41
42
  baseUrl: props.baseUrl,
42
43
  threadId: props.threadId,
43
44
  runtime_variables: props.runtime_variables,
45
+ clientTools: props.clientTools,
44
46
  appearance: props.appearance,
45
47
  ...createAgentEventForwarders(emit),
46
48
  onReady: (instance) => emit("ready", instance),
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineComponent, h, onBeforeUnmount, onMounted as onVueMounted, ref, watch, type PropType } from 'vue'\nimport {\n AGENT_EVENT_NAMES,\n createAgentEmbed,\n DEFAULT_AGENT_EMBED_BASE_URL,\n type AgentAppearance,\n type AgentRuntimeVariables,\n type AgentEvents,\n type AgentEmbedClient,\n type AgentEmbedInstance,\n type AgentEmbedInitError,\n type AgentEmbedTheme,\n} from '@sophonsai/agent-embed-sdk'\n\nexport * from '@sophonsai/agent-embed-sdk'\n\nconst callbackNameToEventName = (name: string) =>\n name\n .replace(/^on/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .toLowerCase()\nconst agentEventNames = AGENT_EVENT_NAMES.map(callbackNameToEventName)\ntype KebabCase<Value extends string> = Value extends `${infer First}${infer Rest}`\n ? Rest extends Uncapitalize<Rest>\n ? `${Lowercase<First>}${KebabCase<Rest>}`\n : `${Lowercase<First>}-${KebabCase<Rest>}`\n : Value\ntype CallbackEventName<Name extends string> = Name extends `on${infer EventName}` ? KebabCase<EventName> : never\ntype AgentEventEmits = {\n [Name in keyof AgentEvents as CallbackEventName<Name & string>]-?: (\n ...args: Parameters<NonNullable<AgentEvents[Name]>>\n ) => boolean\n}\ntype AgentEmbedEmits = AgentEventEmits & {\n ready: (instance: AgentEmbedInstance) => boolean\n 'theme-change': (theme: AgentEmbedTheme) => boolean\n 'font-size-change': (fontSize: number) => boolean\n 'init-error': (error: AgentEmbedInitError) => boolean\n}\nconst agentEmbedEmits = {\n ...Object.fromEntries(agentEventNames.map((name) => [name, () => true])),\n ready: (_instance: AgentEmbedInstance) => true,\n 'theme-change': (_theme: AgentEmbedTheme) => true,\n 'font-size-change': (_fontSize: number) => true,\n 'init-error': (_error: AgentEmbedInitError) => true,\n} as AgentEmbedEmits\ntype Emit = (event: string, ...args: unknown[]) => void\nconst createAgentEventForwarders = (emit: Emit): AgentEvents =>\n Object.fromEntries(\n AGENT_EVENT_NAMES.map((callbackName) => [\n callbackName,\n (...args: unknown[]) => emit(callbackNameToEventName(callbackName), ...args),\n ]),\n ) as AgentEvents\n\nexport const AgentEmbed = defineComponent({\n name: 'AgentEmbed',\n props: {\n endpoint: { type: String, required: true },\n token: { type: String, required: true },\n baseUrl: { type: String, default: DEFAULT_AGENT_EMBED_BASE_URL },\n threadId: String,\n runtime_variables: Object as PropType<AgentRuntimeVariables>,\n appearance: Object as PropType<AgentAppearance>,\n },\n emits: agentEmbedEmits,\n setup(props, { emit }) {\n const host = ref<HTMLElement>()\n let client: AgentEmbedClient | undefined\n const createOptions = () => ({\n endpoint: props.endpoint,\n token: props.token,\n baseUrl: props.baseUrl,\n threadId: props.threadId,\n runtime_variables: props.runtime_variables,\n appearance: props.appearance,\n ...createAgentEventForwarders(emit as Emit),\n onReady: (instance: AgentEmbedInstance) => emit('ready', instance),\n onThemeChange: (theme: AgentEmbedTheme) => emit('theme-change', theme),\n onFontSizeChange: (fontSize: number) => emit('font-size-change', fontSize),\n onInitError: (error: AgentEmbedInitError) => emit('init-error', error),\n })\n onVueMounted(() => {\n client = createAgentEmbed(createOptions())\n if (host.value) {\n void client.mount(host.value).catch(() => undefined)\n }\n })\n watch(\n () => props.appearance?.theme,\n (theme) => client?.updateTheme(theme),\n { deep: true },\n )\n watch(\n () => props.appearance?.fontSize,\n (fontSize) => client?.updateFontSize(fontSize),\n )\n watch(\n () => props.appearance?.header,\n (header) => client?.updateHeader(header),\n { deep: true },\n )\n onBeforeUnmount(() => {\n client?.destroy()\n client = undefined\n })\n return () => h('div', { ref: host, style: { width: '100%', height: '100%', minHeight: 0 } })\n },\n})\n\nexport default AgentEmbed\n"],"mappings":";;;;AAgBA,MAAM,2BAA2B,SAC/B,KACG,QAAQ,OAAO,EAAE,CAAC,CAClB,QAAQ,sBAAsB,OAAO,CAAC,CACtC,YAAY;AACjB,MAAM,kBAAkB,kBAAkB,IAAI,uBAAuB;AAkBrE,MAAM,kBAAkB;CACtB,GAAG,OAAO,YAAY,gBAAgB,KAAK,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;CACvE,QAAQ,cAAkC;CAC1C,iBAAiB,WAA4B;CAC7C,qBAAqB,cAAsB;CAC3C,eAAe,WAAgC;AACjD;AAEA,MAAM,8BAA8B,SAClC,OAAO,YACL,kBAAkB,KAAK,iBAAiB,CACtC,eACC,GAAG,SAAoB,KAAK,wBAAwB,YAAY,GAAG,GAAG,IAAI,CAC7E,CAAC,CACH;AAEF,MAAa,aAAa,gBAAgB;CACxC,MAAM;CACN,OAAO;EACL,UAAU;GAAE,MAAM;GAAQ,UAAU;EAAK;EACzC,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;EACtC,SAAS;GAAE,MAAM;GAAQ,SAAS;EAA6B;EAC/D,UAAU;EACV,mBAAmB;EACnB,YAAY;CACd;CACA,OAAO;CACP,MAAM,OAAO,EAAE,QAAQ;EACrB,MAAM,OAAO,IAAiB;EAC9B,IAAI;EACJ,MAAM,uBAAuB;GAC3B,UAAU,MAAM;GAChB,OAAO,MAAM;GACb,SAAS,MAAM;GACf,UAAU,MAAM;GAChB,mBAAmB,MAAM;GACzB,YAAY,MAAM;GAClB,GAAG,2BAA2B,IAAY;GAC1C,UAAU,aAAiC,KAAK,SAAS,QAAQ;GACjE,gBAAgB,UAA2B,KAAK,gBAAgB,KAAK;GACrE,mBAAmB,aAAqB,KAAK,oBAAoB,QAAQ;GACzE,cAAc,UAA+B,KAAK,cAAc,KAAK;EACvE;EACA,gBAAmB;GACjB,SAAS,iBAAiB,cAAc,CAAC;GACzC,IAAI,KAAK,OACP,OAAY,MAAM,KAAK,KAAK,CAAC,CAAC,YAAY,KAAA,CAAS;EAEvD,CAAC;EACD,YACQ,MAAM,YAAY,QACvB,UAAU,QAAQ,YAAY,KAAK,GACpC,EAAE,MAAM,KAAK,CACf;EACA,YACQ,MAAM,YAAY,WACvB,aAAa,QAAQ,eAAe,QAAQ,CAC/C;EACA,YACQ,MAAM,YAAY,SACvB,WAAW,QAAQ,aAAa,MAAM,GACvC,EAAE,MAAM,KAAK,CACf;EACA,sBAAsB;GACpB,QAAQ,QAAQ;GAChB,SAAS,KAAA;EACX,CAAC;EACD,aAAa,EAAE,OAAO;GAAE,KAAK;GAAM,OAAO;IAAE,OAAO;IAAQ,QAAQ;IAAQ,WAAW;GAAE;EAAE,CAAC;CAC7F;AACF,CAAC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/index.ts"],"sourcesContent":["import { defineComponent, h, onBeforeUnmount, onMounted as onVueMounted, ref, watch, type PropType } from 'vue'\nimport {\n AGENT_EVENT_NAMES,\n createAgentEmbed,\n DEFAULT_AGENT_EMBED_BASE_URL,\n type AgentAppearance,\n type AgentClientToolHandler,\n type AgentRuntimeVariables,\n type AgentEvents,\n type AgentEmbedClient,\n type AgentEmbedInstance,\n type AgentEmbedInitError,\n type AgentEmbedTheme,\n} from '@sophonsai/agent-embed-sdk'\n\nexport * from '@sophonsai/agent-embed-sdk'\n\nconst callbackNameToEventName = (name: string) =>\n name\n .replace(/^on/, '')\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .toLowerCase()\nconst agentEventNames = AGENT_EVENT_NAMES.map(callbackNameToEventName)\ntype KebabCase<Value extends string> = Value extends `${infer First}${infer Rest}`\n ? Rest extends Uncapitalize<Rest>\n ? `${Lowercase<First>}${KebabCase<Rest>}`\n : `${Lowercase<First>}-${KebabCase<Rest>}`\n : Value\ntype CallbackEventName<Name extends string> = Name extends `on${infer EventName}` ? KebabCase<EventName> : never\ntype AgentEventEmits = {\n [Name in keyof AgentEvents as CallbackEventName<Name & string>]-?: (\n ...args: Parameters<NonNullable<AgentEvents[Name]>>\n ) => boolean\n}\ntype AgentEmbedEmits = AgentEventEmits & {\n ready: (instance: AgentEmbedInstance) => boolean\n 'theme-change': (theme: AgentEmbedTheme) => boolean\n 'font-size-change': (fontSize: number) => boolean\n 'init-error': (error: AgentEmbedInitError) => boolean\n}\nconst agentEmbedEmits = {\n ...Object.fromEntries(agentEventNames.map((name) => [name, () => true])),\n ready: (_instance: AgentEmbedInstance) => true,\n 'theme-change': (_theme: AgentEmbedTheme) => true,\n 'font-size-change': (_fontSize: number) => true,\n 'init-error': (_error: AgentEmbedInitError) => true,\n} as AgentEmbedEmits\ntype Emit = (event: string, ...args: unknown[]) => void\nconst createAgentEventForwarders = (emit: Emit): AgentEvents =>\n Object.fromEntries(\n AGENT_EVENT_NAMES.map((callbackName) => [\n callbackName,\n (...args: unknown[]) => emit(callbackNameToEventName(callbackName), ...args),\n ]),\n ) as AgentEvents\n\nexport const AgentEmbed = defineComponent({\n name: 'AgentEmbed',\n props: {\n endpoint: { type: String, required: true },\n token: { type: String, required: true },\n baseUrl: { type: String, default: DEFAULT_AGENT_EMBED_BASE_URL },\n threadId: String,\n runtime_variables: Object as PropType<AgentRuntimeVariables>,\n clientTools: Object as PropType<Record<string, AgentClientToolHandler>>,\n appearance: Object as PropType<AgentAppearance>,\n },\n emits: agentEmbedEmits,\n setup(props, { emit }) {\n const host = ref<HTMLElement>()\n let client: AgentEmbedClient | undefined\n const createOptions = () => ({\n endpoint: props.endpoint,\n token: props.token,\n baseUrl: props.baseUrl,\n threadId: props.threadId,\n runtime_variables: props.runtime_variables,\n clientTools: props.clientTools,\n appearance: props.appearance,\n ...createAgentEventForwarders(emit as Emit),\n onReady: (instance: AgentEmbedInstance) => emit('ready', instance),\n onThemeChange: (theme: AgentEmbedTheme) => emit('theme-change', theme),\n onFontSizeChange: (fontSize: number) => emit('font-size-change', fontSize),\n onInitError: (error: AgentEmbedInitError) => emit('init-error', error),\n })\n onVueMounted(() => {\n client = createAgentEmbed(createOptions())\n if (host.value) {\n void client.mount(host.value).catch(() => undefined)\n }\n })\n watch(\n () => props.appearance?.theme,\n (theme) => client?.updateTheme(theme),\n { deep: true },\n )\n watch(\n () => props.appearance?.fontSize,\n (fontSize) => client?.updateFontSize(fontSize),\n )\n watch(\n () => props.appearance?.header,\n (header) => client?.updateHeader(header),\n { deep: true },\n )\n onBeforeUnmount(() => {\n client?.destroy()\n client = undefined\n })\n return () => h('div', { ref: host, style: { width: '100%', height: '100%', minHeight: 0 } })\n },\n})\n\nexport default AgentEmbed\n"],"mappings":";;;;AAiBA,MAAM,2BAA2B,SAC/B,KACG,QAAQ,OAAO,EAAE,CAAC,CAClB,QAAQ,sBAAsB,OAAO,CAAC,CACtC,YAAY;AACjB,MAAM,kBAAkB,kBAAkB,IAAI,uBAAuB;AAkBrE,MAAM,kBAAkB;CACtB,GAAG,OAAO,YAAY,gBAAgB,KAAK,SAAS,CAAC,YAAY,IAAI,CAAC,CAAC;CACvE,QAAQ,cAAkC;CAC1C,iBAAiB,WAA4B;CAC7C,qBAAqB,cAAsB;CAC3C,eAAe,WAAgC;AACjD;AAEA,MAAM,8BAA8B,SAClC,OAAO,YACL,kBAAkB,KAAK,iBAAiB,CACtC,eACC,GAAG,SAAoB,KAAK,wBAAwB,YAAY,GAAG,GAAG,IAAI,CAC7E,CAAC,CACH;AAEF,MAAa,aAAa,gBAAgB;CACxC,MAAM;CACN,OAAO;EACL,UAAU;GAAE,MAAM;GAAQ,UAAU;EAAK;EACzC,OAAO;GAAE,MAAM;GAAQ,UAAU;EAAK;EACtC,SAAS;GAAE,MAAM;GAAQ,SAAS;EAA6B;EAC/D,UAAU;EACV,mBAAmB;EACnB,aAAa;EACb,YAAY;CACd;CACA,OAAO;CACP,MAAM,OAAO,EAAE,QAAQ;EACrB,MAAM,OAAO,IAAiB;EAC9B,IAAI;EACJ,MAAM,uBAAuB;GAC3B,UAAU,MAAM;GAChB,OAAO,MAAM;GACb,SAAS,MAAM;GACf,UAAU,MAAM;GAChB,mBAAmB,MAAM;GACzB,aAAa,MAAM;GACnB,YAAY,MAAM;GAClB,GAAG,2BAA2B,IAAY;GAC1C,UAAU,aAAiC,KAAK,SAAS,QAAQ;GACjE,gBAAgB,UAA2B,KAAK,gBAAgB,KAAK;GACrE,mBAAmB,aAAqB,KAAK,oBAAoB,QAAQ;GACzE,cAAc,UAA+B,KAAK,cAAc,KAAK;EACvE;EACA,gBAAmB;GACjB,SAAS,iBAAiB,cAAc,CAAC;GACzC,IAAI,KAAK,OACP,OAAY,MAAM,KAAK,KAAK,CAAC,CAAC,YAAY,KAAA,CAAS;EAEvD,CAAC;EACD,YACQ,MAAM,YAAY,QACvB,UAAU,QAAQ,YAAY,KAAK,GACpC,EAAE,MAAM,KAAK,CACf;EACA,YACQ,MAAM,YAAY,WACvB,aAAa,QAAQ,eAAe,QAAQ,CAC/C;EACA,YACQ,MAAM,YAAY,SACvB,WAAW,QAAQ,aAAa,MAAM,GACvC,EAAE,MAAM,KAAK,CACf;EACA,sBAAsB;GACpB,QAAQ,QAAQ;GAChB,SAAS,KAAA;EACX,CAAC;EACD,aAAa,EAAE,OAAO;GAAE,KAAK;GAAM,OAAO;IAAE,OAAO;IAAQ,QAAQ;IAAQ,WAAW;GAAE;EAAE,CAAC;CAC7F;AACF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sophonsai/agent-embed-vue",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Vue 3 adapter for Sophon Agent Embed.",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -25,7 +25,7 @@
25
25
  "dist"
26
26
  ],
27
27
  "dependencies": {
28
- "@sophonsai/agent-embed-sdk": "0.1.0"
28
+ "@sophonsai/agent-embed-sdk": "0.2.0"
29
29
  },
30
30
  "peerDependencies": {
31
31
  "vue": ">=3.3"
@@ -40,7 +40,6 @@
40
40
  "build": "tsdown src/index.ts --format esm --dts",
41
41
  "typecheck": "tsc -p tsconfig.json --noEmit",
42
42
  "test": "vitest run --config vitest.config.ts",
43
- "example": "vite --config example/vite.config.ts",
44
- "example:legacy": "vite --config legacy-example/vite.config.ts"
43
+ "example": "vite --config example/vite.config.ts"
45
44
  }
46
45
  }