@sophonsai/agent-embed-vue2

Vue 2.7 adapter for Sophon Agent Embed.
281
Install
npm install @sophonsai/agent-embed-vue2
Latest Version:0.1.0
Vue:2
Last Updated:Oct 9, 2026
Links: npm
Maintainer: 0x1461a0

@sophonsai/agent-embed-vue2

应用接入

传入服务地址 endpoint 和 Agent 的应用接入 token;可选 baseUrl 默认是 /e/v1/embed。 最终 iframe 地址是 endpoint + baseUrl + '/' + encodeURIComponent(token)。

<AgentEmbed endpoint="https://agent.example.com" token="应用接入Token" style="height:600px" />

不再接收完整 url、旧 initConfig、Agent ID 或平台用户凭证。 threadId、外观配置、实例命令和事件回调继续支持。

安装

# npm
npm install @sophonsai/agent-embed-vue2 vue@^2.7

# pnpm
pnpm add @sophonsai/agent-embed-vue2 vue@^2.7

# yarn
yarn add @sophonsai/agent-embed-vue2 vue@^2.7

# bun
bun add @sophonsai/agent-embed-vue2 vue@^2.7

快速开始

<template>
  <div class="page">
    <AgentEmbed
      class="agent-embed"
      :endpoint="endpoint"
      :token="token"
      :appearance="appearance"
      @theme-change="handleThemeChange"
      @font-size-change="handleFontSizeChange"
      @init-error="handleInitError"
      @settled="handleSettled"
      @ready="handleReady"
    />

    <button :disabled="!agent" @click="sendHello">发送消息</button>
  </div>
</template>

<script lang="ts">
import Vue from 'vue'
import {
  AgentEmbed,
  type AgentAppearance,
  type AgentEmbedInstance,
  type AgentEmbedTheme,
} from '@sophonsai/agent-embed-vue2'

export default Vue.extend({
  components: { AgentEmbed },
  data() {
    return {
      endpoint: 'https://agent.example.com',
      token: '应用接入Token',
      appearance: {
        theme: { preset: 'glacier-blue' },
        fontSize: 16,
        header: {
          historyButton: true,
          newConversationButton: true,
          themeSettingButton: false,
        },
      } as AgentAppearance,
      agent: null as AgentEmbedInstance | null,
    }
  },
  methods: {
    handleReady(instance: AgentEmbedInstance) {
      this.agent = instance
    },
    handleThemeChange(theme: AgentEmbedTheme) {
      this.appearance.theme = theme
    },
    handleFontSizeChange(fontSize: number) {
      this.appearance.fontSize = fontSize
    },
    handleInitError({ code, message }: { code: string; message: string }) {
      console.error('初始化失败', code, message)
    },
    handleSettled(result: unknown) {
      console.log('会话结束', result)
    },
    sendHello() {
      this.agent?.sendMessage({ text: '你好' })
    },
  },
})
</script>

<style scoped>
.page {
  height: 640px;
}

.agent-embed {
  min-height: 480px;
}
</style>

组件 Props

Prop 类型 必填 说明
endpoint string 是 服务地址
token string 是 Agent 应用接入凭证
baseUrl string 否 嵌入路径,默认 /e/v1/embed
threadId string 否 初始会话 ID
runtime_variables AgentRuntimeVariables 否 新会话绑定的运行时变量,值必须为 JSON
appearance AgentAppearance 否 主题、字号和头部按钮配置

组件事件

组件使用标准 Vue 事件,不接受 onXxx 回调 Props。

事件 参数 说明
@ready instance 面板初始化完成
@theme-change theme 面板内部主题变化
@font-size-change fontSize 面板内部字号变化
@init-error failure 初始化失败

全部运行事件见“会话事件”章节。

初始化配置

<AgentEmbed
  endpoint="https://agent.example.com"
  token="应用接入Token"
  base-url="/e/v1/embed"
  thread-id="可选初始会话ID"
/>

baseUrl 可以省略。接入配置只在挂载时读取;需要切换服务、token 或会话时,修改组件 key 重新挂载。 appearance 会随外观配置更新。

外观与受控状态

const appearance: AgentAppearance = {
  theme: { preset: 'studio-white' },
  fontSize: 16,
  header: {
    historyButton: true,
    newConversationButton: true,
    themeSettingButton: true,
  },
}

header.themeSettingButton 默认值为 false,只有显式设置为 true 时才显示主题设置按钮。

可用主题:

可以使用 AgentEmbedThemePreset 枚举式常量设置主题:

import { AgentEmbedThemePreset } from '@sophonsai/agent-embed-vue2'

const appearance = {
  theme: { preset: AgentEmbedThemePreset.GlacierBlue },
}
主题名 preset 类型
曜石紫 obsidian-violet 深色主题
石墨青 graphite-cyan 深色主题
午夜靛 midnight-indigo 深色主题
深海蓝 deep-ocean 深色主题
森野绿 forest-emerald 深色主题
影棚白 studio-white 浅色主题
珍珠紫 pearl-violet 浅色主题
冰川蓝 glacier-blue 浅色主题
暖杏色 warm-cream 浅色主题
薰衣草 lavender-mist 浅色主题

Vue 2 适配器会深度监听整个 appearance 对象。修改主题、字号或任意头部按钮后,会同步更新面板:

this.appearance.theme = { preset: 'warm-cream' }
this.appearance.fontSize = 18
this.appearance.header!.themeSettingButton = false

当主题或字号作为受控值传入时,应在 @theme-change / @font-size-change 中同步修改 appearance,否则宿主状态仍保留旧值。

将 theme、fontSize 或 header 改为 undefined 会撤销对应的宿主控制,让面板使用内部默认值。

获取和使用实例

面板初始化完成后,ready 事件会返回 AgentEmbedInstance。在此之前,获取不到 AgentEmbedInstance 实例对象,无法操作面板执行行为。

ready 事件返回的 AgentEmbedInstance 提供:

方法 说明
sendMessage({ text }) 立即提交消息;回复生成中调用会使用 steer 行为
addInputQuery({ text, context? }) 写入输入框和可选上下文,不立即提交
abortResponse() 终止当前回复
openHistoryPanel() 打开历史面板
openThemeSettingsPanel() 打开主题设置面板
newConversation() 新建会话
focusInput() 聚焦输入框
scrollToBottom() 滚动到底部
this.agent?.addInputQuery({
  text: '请分析选中内容',
  context: selectedText,
})
this.agent?.focusInput()

组件执行 beforeDestroy 后会销毁 client,已保存的 instance 也会失效。建议父组件同步清空 instance 引用。

错误处理

初始化失败码:

  • missing_token:缺少 token;
  • invalid_token:token 无效或过期;
  • forbidden:无访问权限;
  • request_failed:鉴权请求失败。

智能体加载失败码:

  • not_found:未找到智能体;
  • forbidden:无权访问智能体;
  • request_failed:智能体请求失败。

失败对象同时包含可读的 message。初始化失败不会触发 ready。

会话事件

<AgentEmbed
  :endpoint="endpoint"
  :token="token"
  @session-context-ready="({ threadId }) => console.log(threadId)"
  @tool-call-failed="handleToolFailed"
  @settled="handleSettled"
/>

全部运行事件如下:

事件 参数 说明
@concurrent-send 无 回复生成期间再次发送消息
@event AgentServerEvent 接收原始服务端事件
@session-context-ready AgentSessionContext 会话上下文可用,包含 threadId 和 turnId
@tool-call-created AgentToolCallCreatedEvent, AgentSessionEventContext 创建一个工具调用
@tool-approval-requested AgentToolApprovalRequestedEvent, AgentSessionEventContext 一组工具调用需要确认
@tool-call-started AgentToolCallStartedEvent, AgentSessionEventContext 工具调用开始
@tool-call-progress-updated AgentToolCallProgressUpdatedEvent, AgentSessionEventContext 工具调用进度更新
@tool-call-backgrounded AgentToolCallBackgroundedEvent, AgentSessionEventContext 工具调用转为后台执行
@tool-call-succeeded AgentToolCallSucceededEvent, AgentSessionEventContext 工具调用成功
@tool-call-failed AgentToolCallFailedEvent, AgentSessionEventContext 工具调用失败
@tool-call-cancelled AgentToolCallCancelledEvent, AgentSessionEventContext 工具调用取消
@client-action-request AgentClientActionRequestEvent, AgentSessionEventContext 智能体请求宿主执行客户端动作
@user-feedback-consumed AgentUserFeedbackConsumedEvent, AgentSessionEventContext 用户反馈已被处理
@user-steer-consumed AgentUserSteerConsumedEvent, AgentSessionEventContext 用户 steer 指令已被处理
@user-steer-cancelled AgentUserSteerCancelledEvent, AgentSessionRunEventContext 用户 steer 指令已取消
@user-input-submitted AgentUserInputSubmittedEvent, AgentSessionEventContext 用户输入已提交
@session-turn-started AgentSessionTurnStartedEvent, AgentSessionEventContext Turn 开始执行
@session-turn-succeeded AgentSessionTurnSucceededEvent, AgentSessionEventContext Turn 执行成功
@session-turn-failed AgentSessionTurnFailedEvent, AgentSessionEventContext Turn 执行失败
@session-turn-cancelled AgentSessionTurnCancelledEvent, AgentSessionEventContext Turn 已取消
@session-run-started AgentSessionRunStartedEvent, AgentSessionRunEventContext Run 已开始
@session-run-idled AgentSessionRunIdledEvent, AgentSessionRunEventContext Run 已空闲
@session-run-ended AgentSessionRunEndedEvent, AgentSessionRunEventContext Run 已结束
@system-message-consumed AgentSystemMessageConsumedEvent, AgentSessionEventContext 系统消息已被处理
@success AgentSessionSuccess 本轮会话成功结束
@error AgentSessionFailure 本轮会话失败
@cancelled AgentSessionCancelled 本轮会话取消
@settled AgentSessionSettlement 本轮会话以任意状态结束

事件 payload 和上下文类型均由本包重导出。

布局说明

组件根节点默认使用 width: 100%、height: 100% 和 min-height: 0。父级应设置明确高度:

.agent-embed-container {
  height: calc(100vh - 64px);
}

模板中的 class 和 style 会应用到组件根元素,可用于调整布局。

运行时变量

runtime_variables 是可选的 JSON 对象,名称须与智能体声明的运行时变量一致。仅创建新会话时发送,已有会话沿用已绑定的变量;同一面板新建会话时复用初始化值。参数在初始化时生成快照,改变值需要重建面板。数据通过 iframe 消息传递,不写入接入 URL。

<AgentEmbed :endpoint="endpoint" :token="token" :runtime_variables="{ customer_id: 'customer-1' }" />

初始化错误使用 onInitError(Vue: @init-error),包含 code 和 message,同次初始化只触发一次。失败时 whenReady() reject,聊天运行错误继续通过 onError(Vue: @error)报告。

Related Packages

@sophonsai/agent-embed-vue

Vue 3 adapter for Sophon Agent Embed.

286
@dullar/mercury

Advanced and highly reusable Mobile UI Components built on Vue2 & You can define...

8,553 6
@halobear/vue-upload

vue上传组件

460 1
@baoyog/agent-vue2

宝遥智能体 Vue2 通用插件 - 支持标准化表单助手且无第三方 UI 框架依赖

0
vite-plugin-vue2

Vite plugin for Vue2

1,474,659 618

Version History

Version Released Vue License
0.1.0 >=2.7 <3
Pre-releases (1)
Version Released License
0.0.0-stage