代理视图前端
反应组件,支持代理MATs倡议的开发.
联合调查的目的是打击 AI代理服务 - 不只是当地的嘲弄
服务器。 主机从其服务来源(参见演示)来组成完整的端点URL.
AgentMonitorKanban 列出/创建这些 URL 的代理; AgentView 可挂载
并获取清单、资源和聊天。 两个都说
捆绑 AI 服务 SDK (单位:千美元)AgentServiceClient) (中文(简体) ). 演示船的预设
模拟,当地(localhost:8001)和中转后端
连接用户界面到AI服务。 。 。 .
设置
所需经费: 节点.js和雅恩.
yarn install
make demo-with-mock
打开 http://localhost:4174/ (英语)演示开始于 后端 模式并自动从本地模拟代理服务装入代理.
只运行演示用户界面( 没有后端- 使用) 调试选项 切换到 Moc 数据, Sparse, 或空 :
make demo
或者运行模拟服务器并在单独的终端中演示:
# Terminal 1
make mock-server
# Terminal 2
make demo
如果您更改了模拟服务器代码, 请重新启动它, 这样演示会提取 API 更改 .
使用 调试选项 在工具栏中切换后端 :
| 预设 | 服务 URL | 页:1 |
|---|---|---|
| 模拟服务器 | /api/ai-agent-service | 本地种子数据通过演示代理. 手持者证可选. |
| 当地人工智能服务 | http://localhost:8001 | 真正的AI代理服务 在你的机器。 需要手持证物. |
| 显示 AI 服务 | https://ai-agent-service.qa.arbor.engineering | QA环境. 需要手持证物. |
您也可以将任何服务来源粘贴到 服务 URL 字段(演示)
附录 /api/v1/… 当构建端点 URL 道具时.
您也可以不打开调试面板而配置演示:
# Via URL query params (token is stripped from the address bar after load)
http://localhost:4174/?serviceUrl=http://localhost:3001&token=your-bearer-token
# Via environment variables (or copy `demo/.env.example` → `demo/.env`)
AGENT_SERVICE_URL=https://ai-agent-service.qa.arbor.engineering \
AGENT_SERVICE_TOKEN=your-bearer-token \
make demo
| 变量 | 默认 | 目的 |
|---|---|---|
MOCK_SERVER_PORT | 3001 | 模拟代理服务的端口 |
AGENT_SERVICE_PROXY_TARGET | http://localhost:3001 | 演示代理 /api/ai-agent-service |
AGENT_SERVICE_URL | /api/ai-agent-service | 演示的初始服务 URL (在调试选项中可以覆盖) |
AGENT_SERVICE_TOKEN | (空虚) | 演示的初始无记名符号 |
PUSHER_REPOLL | 如果按键+ 组集设置自动 | true编号 :false - 初始状态 使用推手重投 调试切换 |
PUSHER_KEY | (空虚) | 公共 Pusher 应用密钥( 客户订阅) |
PUSHER_CLUSTER | (空虚) | Pusher集群(如:. eu(中文(简体) ) |
PUSHER_CHANNEL_PREFIX | arbor-agent- | 频道前缀; 完整频道为 {prefix}{agent.id} |
PUSHER_SECRET | (空虚) | 没有 被浏览器所曝光——仅在本地触发脚本中使用 |
PUSHER_APP_ID | (空虚) | 与以上相同;服务器侧 pusher 软件包脚本 |
复制 demo/.env.example 改为 demo/.env 并填写Pusher证书. 调试面板只显示一个 使用推手重投 切换,它覆盖 PUSHER_REPOLL 为当前会话; 密钥、 集群和频道前缀仅通过 env 配置并传递到 AgentMonitorKanban 作为 pusherKey 编号 : pusherCluster 编号 : pusherChannelPrefix。 。 。 . AgentView 当设置这些道具时, 拥有 Pusher 客户端( 主机仍可注入) subscribeToPusher )),用于再使用已存在的客户端. 从演示根装入 Vite 加载 env; 仅向客户端曝光允许上市的一组前缀(PUSHER_SECRET (不包括).
脚本
| 命令 | 它会做什么 |
|---|---|
yarn demo 编号 : make demo | 用热重装启动演示应用程序 |
yarn demo:with-mock 编号 : make demo-with-mock | 一起启动模拟服务器 + 演示 |
yarn mock-server 编号 : make mock-server | 启动本地 AI 代理服务模拟服务器 |
yarn dev 编号 : make dev | 别名 demo |
yarn build 编号 : make build | 图书馆的建设 dist/ |
yarn test 编号 : make test | 运行虚拟测试套件 |
yarn test:watch 编号 : make test-watch | 监视模式下的维特 |
yarn check-types 编号 : make typecheck | 类型脚本检查( 无发出) |
yarn lint 编号 : make lint | TS/TSX的ESLint检查 |
yarn lint:fix | 带有自动修正的 ESLint |
yarn style-lint 编号 : make style-lint | SCSS 的样式林特检查 |
make check | 类型检查 + lint + 测试 + 构建 |
make clean | 删除 dist 和 Vite 缓存 |
连接用户界面到AI服务
图书馆组件获取 全端点 URL (无) baseUrl (原始内容存档于2013-10-12). Prop. 宿主——比如说.
演示 - 解决服务源并构建每个 URL.
AgentMonitorKanban- 列出代理人/定义、卡片核对表、创建代理人.AgentView独立的工作空间;获取清单、资源和聊天本身. 重新命名打开的代理( 标题) 用途PATCH关于现有agentUrl—— 说 没有额外的 URL 道具 。 Kanban 卡片标题在下一个代理商列表中刷新再装入 .
在演示中 - 打开 调试选项选择后端,粘贴一个无记名标志
单击 重新装入棋盘。见 demo/App.tsx 为何 baseUrl + 键
/api/v1 成为 URL 道具.
在你的应用中:
import { AgentMonitorKanban, AgentView } from 'agent-view-frontend';
import 'agent-view-frontend/style.css';
import '@arbor-education/design-system.components/dist/index.css';
const api = 'https://ai-agent-service.qa.arbor.engineering/api/v1';
<AgentMonitorKanban
jwt={jwt}
headers={{ 'X-Arbor-Application': 'agent-view' }}
agentDefinitionsUrl={`${api}/agent-definitions`}
agentsUrl={`${api}/agents`}
agentUrl={`${api}/agents/:invocationId`}
agentChecklistUrl={`${api}/agents/:invocationId/checklist`}
agentResourcesUrl={`${api}/agents/:invocationId/resources`}
agentTimelineUrl={`${api}/agents/:invocationId/agent-timeline`}
agentChatUrl={`${api}/agents/:invocationId/chat`}
agentConversationUrl={`${api}/conversations/:invocationId`}
/>;
// Or mount the workspace alone:
<AgentView
agent={agent}
invocationId={agent.invocation_id}
open
onClose={onClose}
jwt={jwt}
agentUrl={`${api}/agents/:invocationId`}
agentChecklistUrl={`${api}/agents/:invocationId/checklist`}
agentResourcesUrl={`${api}/agents/:invocationId/resources`}
agentTimelineUrl={`${api}/agents/:invocationId/agent-timeline`}
agentChatUrl={`${api}/agents/:invocationId/chat`}
agentConversationUrl={`${api}/conversations/:invocationId`}
/>;
参数化路线取代 :invocationId 占位符 。 见
AI 服务 SDK 区域,用于基础客户端.
管理信息系统外的东道主(学校采取者)
代理服务解决学校从 X-Arbor-Application-Url,则
Referer,则 Origin. 不是管理信息系统网页(例如门户)的主机
有一个 Origin 所以董事会必须亲自送信头.
过 getMisInstances,一个加速器像 getToken,返回页
用户可以打开的学校 :
<AgentMonitorKanban
getToken={getToken}
getMisInstances={async ({pageNumber, pageSize}) => ({
items: [{name: 'Ash Grove Primary', url: 'https://ash-grove.uk.arbor.sc'}],
totalRecords: 1,
})}
{...endpointUrls}
/>;
pageNumber以 1 为基础。 董事会要求100页,直到totalRecords因此,一个不 pagnation 的主机可以忽略 args 并返回所有totalRecords: items.length。 。 。 .url是学校的套房目录homeUrl页:1X-Arbor-Application-Url每一个请求.- 一所学校:它被直接使用,没有显示下降.
- 几所学校:董事会头部显示学校降级,在选择代理服务之前不要求代理服务。 选择被保存在
localStorage每名用户都可以从同一下架中更改,该下架为新学校重新挂载了棋盘. - 没有学校,或
getMisInstances拒绝: 显示一个空或出错状态( 带有 Retry) , 没有代理服务请求 . - 奥米
getMisInstances(如管理信息系统所做的)针对现有行为。 如果headers已包含X-Arbor-Application-Url。 。 。 .
独立 NewAgentModal
NewAgentModal 通常作为儿童 AgentMonitorKanban (董事会)
用品 agentDefinitions 还有一个 onStart 处理者)。 也可以搭载在
自身——例如作为服务器的 new-agent-modal 部件——通过
端点 URL 代替 。 在此模式下, 模式加载其定义, 创建
,并浏览关闭/成功页.
import { NewAgentModal } from 'agent-view-frontend';
const api = 'https://ai-agent-service.qa.arbor.engineering/api/v1';
<NewAgentModal
open
authToken={jwt}
headers={{ 'X-Arbor-Application': 'agent-view' }}
agentDefinitionsUrl={`${api}/agent-definitions`}
agentsUrl={`${api}/agents`}
closeUrl="/dashboard"
viewAgentUrlPrefix="/?/agent-ui/index/agent-id"
preselectAgent="school_trip_agents"
/>;
在管理信息系统内托管时 ui:window (或已经提供
对话框,通过 embedded 因此,内容使内含而不是打开一个
第二套设计-系统 Modal(其门户网站为 document.body:
<NewAgentModal open embedded {...standaloneProps} />
| Prop | 属性 | 需求 | 目的 |
|---|---|---|---|
agentDefinitionsUrl | agent-definitions-url | 对 | 获取代理定义列表的完整 URL . |
agentsUrl | agents-url | 对 | POST 新代理的完整 URL . |
authToken | auth-token | 没有 | 每一个请求都附有持枪者标志. |
headers | headers | 没有 | 额外的信头合并到每个请求中. |
open | open | 没有 | 模式是否打开 . |
embedded | —— 说 | 没有 | 没有设计-系统 Modal 门户网站的 Render inline. |
closeUrl | close-url | 没有 | 页面导航到模式关闭时 . |
successUrl | success-url | 没有 | 页面导航到成功启动之后 viewAgentUrlPrefix 未设定. |
viewAgentUrlPrefix | view-agent-url-prefix | 没有 | 创建后, 导航到 {prefix}/{id} 使用新代理 id。 。 。 . |
preselectAgent | preselect-agent | 没有 | 预选定义. 临时 : 匹配定义 ref,从 API 绘制 name。切换到 API code 当后端加入. 匹配时, 选定步骤显示 Start the {display_name} 而不是掉下来. |
agentContext | —— 说 | 没有 | 公布的不透明对象不变 agent_context 打开 POST /agents。 。 。 . AgentMonitorKanban 接受相同的道具并转发. |
导航用途 window.location.assign。 。 。 . closeUrl编号 :successUrl编号 :viewAgentUrlPrefix 可选的——
省去它们(和通过) onClose编号 :onStart保持模式的充分控制.
onStart 接收 (payload, { id }) 在成功创造之后.
发布 alpha 版本
确保您登录到 npm (npm whoami),并且是下列组织的成员: @arbor-education npm 组织,然后运行:
npm run publish:alpha
这让预发版(0.4.x-alpha.0, (中文(简体) ), 0.4.x-alpha.1,并按 alpha dis. 必须是运行 npm run没有 yarn ——线条截取出版步骤,并会迅速获得线条证书取而代之.
版本凸起修改 package.json ——不承担这一改变. 在提升或合并您的公关前还原它 .
要在另一个工程中安装已公布的α :
yarn add @arbor-education/agent-view-frontend@alpha
国家预防机制的使用
安装软件包及其对等依赖 :
yarn add agent-view-frontend @arbor-education/design-system.components react react-dom
导入组件和样式 :
import { AgentMonitorKanban } from 'agent-view-frontend';
import 'agent-view-frontend/style.css';
import '@arbor-education/design-system.components/dist/index.css';
function Page() {
const api = '/api/ai-agent-service/api/v1';
return (
<AgentMonitorKanban
agentsUrl={`${api}/agents`}
agentDefinitionsUrl={`${api}/agent-definitions`}
agentUrl={`${api}/agents/:invocationId`}
agentChecklistUrl={`${api}/agents/:invocationId/checklist`}
agentResourcesUrl={`${api}/agents/:invocationId/resources`}
agentTimelineUrl={`${api}/agents/:invocationId/agent-timeline`}
agentChatUrl={`${api}/agents/:invocationId/chat`}
agentConversationUrl={`${api}/conversations/:invocationId`}
/>
);
}
AI 服务 SDK
该软件包为AI代理服务提供框架不可知客户端
/api/v1/agents/* 端点(针对本地模拟服务器或真实的AI服务的工作).
import {
AgentServiceClient,
createHttpChatConnectorFactory,
mapApiAgent,
mapApiChecklistResponse,
} from 'agent-view-frontend';
const client = new AgentServiceClient({
baseUrl: '/api/ai-agent-service', // or 'http://localhost:3001'
token: jwt, // Bearer token; "Bearer " prefix optional
});
// List / detail (mapped into the UI's Agent + checklist shapes)
const agents = (await client.listAgents()).map(mapApiAgent);
const detail = await client.getAgent(invocationId);
const checklist = mapApiChecklistResponse(invocationId, detail);
// Lifecycle
await client.createAgent('school_trip_agents');
await client.updateAgent(agentId, { invocationName: 'Year 6 trip' });
await client.pauseAgent(agentId);
await client.archiveAgent(agentId);
// Streaming chat (SSE)
const connectorFor = createHttpChatConnectorFactory(client);
const connector = connectorFor(agents[0]);
const reply = await connector.sendMessage('What have you done so far?');
AgentServiceClient 还接受 headers (合并为每项请求)
urls 覆盖——相同的选项 AgentMonitorKanban 从它的 headers 财务报告和审定财务报表
urls 道具来.
client.chat(agentId, request, { onEvent }) 解决最后的 SSE 事件
引用 onEvent 每个帧。 非-2xx回复和 event: error 边框
丢出一个 AgentServiceError 携带 status 和解析 detail。 。 。 .
演示线 雾, (中文(简体) ), 当地,以及 粘贴 后端通过这个 SDK —— 看
demo/backendApi.ts 财务报告和审定财务报表
连接用户界面到AI服务。 。 。 .