@aphrody/m3-ai

中文文档
1.4.7发布于 2026/10/23Apache-2.0 AND MITTypeScriptES Module近 30 天下载 1875

材质设计3代理交互组件(工具调用,平分,聊天作曲,工人,任务): SpaceUI (@spacedrive/ai) 在@aphody/m3-primitives上重建.

中文使用文档
文档目录6 节
  1. CSS 设置
  2. 使用量
  3. 构成部分
  4. 本地聊天
  5. 测试
  6. 贷项

@aphrody/m3-ai (英语)

材质设计 3 代理界面的回放组件(工具调用卡,打出标记,聊天泡和作曲,模型选择器,任务板)和OpenAI兼容聊天服务器的流媒体客户端,由SpaceUI重建 @spacedrive/ai。 。 。 .

bun add @aphrody/m3-ai @aphrody/m3-primitives @aphrody/m3-motion react react-dom tailwindcss
import { useState } from "react";
import { ChatComposer, MessageBubble } from "@aphrody/m3-ai";

export function Chat() {
  const [draft, setDraft] = useState("");
  return (
    <>
      <MessageBubble content="Hello" isUser />
      <ChatComposer
        draft={draft}
        onDraftChange={setDraft}
        onSend={() => setDraft("")}
      />
    </>
  );
}

许可证:Apache-2.0和麻省理工学院LICENSE, (中文(简体) ), LICENSE.spaceui) (中文(简体) ). 安装指南 : 文件/材料/立方米/INSTALL.md。 。 。 .

建造在 @aphrody/m3-primitives,M3颜色角色,打字尺,形状和运动,以及材料符号图标。 端点 : react 财务报告和审定财务报表 react-dom 18或19岁, tailwindcss 4.1+ (英语). @aphrody/m3-ai/ag-ui 持有AG-UI协议约束.

CSS 设置

使用 M3 公用事业的 Tailwind 级名称 @aphrody/m3-theme导入 然后让Tailwind扫描软件包的输出。 这个 全食谱在 空间-M3-未来.md, (中文(简体) ), 节"集成":

@import "tailwindcss";
@import "@aphrody/m3-tokens/m3-tokens.css";
@import "@aphrody/m3-theme/spaceui.css";
@import "@aphrody/m3-theme/tailwind.css";

@source "../node_modules/@aphrody/m3-primitives/dist";
@source "../node_modules/@aphrody/m3-ai/dist";

装入 材料符号字体一次: 导入 @aphrody/m3-fonts/fonts-symbols.css,或打电话 ensureMaterialSymbols() 从 @aphrody/material-web/icon/material-symbols.js。 。 。 .

使用量

import { ChatComposer, MessageBubble, ToolCall } from "@aphrody/m3-ai";
import type { ToolCallPair } from "@aphrody/m3-ai";

const pair: ToolCallPair = {
  id: "1",
  name: "file_read",
  argsRaw: '{"path":"README.md"}',
  args: { path: "README.md" },
  resultRaw: '{"text":"# Aphrody"}',
  result: { text: "# Aphrody" },
  status: "completed",
};

export function Conversation({ draft, setDraft, send }: Props) {
  return (
    <>
      <MessageBubble content="List the files" isUser />
      <ToolCall pair={pair} />
      <MessageBubble content="There is one file: `README.md`." isUser={false} />
      <ChatComposer draft={draft} onDraftChange={setDraft} onSend={send} />
    </>
  );
}

构成部分

构成部分M3 解剖学
ToolCall外观卡surface-container-low中形状):状态图标或圆形指示器, text-label-large 工具名、可扩展参数和结果块 font-code 打开 surface-container-highest错误结果 error-container。 。 。 .
MarkdownM3型号(标题/标题/正文)上的Prose, font-code 代码块, primary 链接, outline-variant 引用和表. size 选择体积; allowHtml 为可信任的内容启用原始 HTML .
MessageBubble用户转身为 secondary-container 气泡 (大形状),助手在表面以标准复制图标按钮为标记下转.
ChatComposer搜索栏解剖学 : surface-container-high超大的形状, text-body-large 输入,项目避孕药,模型芯片,标准mic图标按钮,填充后发送/停止图标按钮.
ModelSelector药丸触发器打开 M3 菜单(surface-container, 外小形状, 第 2 级 : 搜索字段, 提供者区域标题, 48 dp 项, 选择在 secondary-container,能力芯片. ModelOptionList 财务报告和审定财务报表 groupModelsByProvider 单挑名单.
InlineWorkerCard已填入的卡片( E)surface-container,中等形状), text-title-small 标题、状态芯片、在运行时循环指示器、可扩展记录 ToolCalls和马克下.
InlineBranchCard一个思维分支的填充卡:指标或分支图标,状态芯片,可扩展结论.
TaskStatusIcon每个状态的符号:已完成 success,正在进行并准备就绪 primary,待核准 warning积压 outline。 。 。 .
TaskPriorityIcon按优先事项分列的编号: error高级 warning中间 primary低调 outline。 。 。 .
TaskRowEnse M3列表项目(48 dp): text-body-large 头条, text-body-small 支撑柱,8%悬浮状态层, secondary-container 选择、 超时菜单.
TaskList按状态分组的任务:相撞 text-title-small 区域标题, outline-variant 分裂者.
TaskDetailM3 表面任务 : text-headline-small 标题、属性网格、子任务作为复选框列表、下标描述、填充和文本按钮.
TaskCreateForm标题和描述文本字段, 优先级选择, 填充 Create 文本 Cancel 按钮.

来自 types.ts数字 : pairTranscriptSteps, (中文(简体) ), tryParseJson, (中文(简体) ), isErrorResult, (中文(简体) ), TASK_STATUS_ORDER, (中文(简体) ), TASK_STATUS_LABEL, (中文(简体) ), TASK_PRIORITY_LABEL,以及记录、任务和 模型类型.

本地聊天

在 OpenAI 兼容服务器( lama- server, vLLM, Apprody 网关) 上聊天 ,没有可见的字符串硬码:

导出作用
ChatLabels, (中文(简体) ), chatLabelsFr 编号 : chatLabelsEn 编号 : chatLabelsJa, (中文(简体) ), resolveChatLabels, (中文(简体) ), formatLabel每个可见的字符串和 aria- label 都有一个词典 。 每个聊天组件都使用 labels?: Partial<ChatLabels>; 缺少的密钥会回到英语上.
streamChatCompletion, (中文(简体) ), createSseParser, (中文(简体) ), parseChatCompletionChunk, (中文(简体) ), chatReducer, (中文(简体) ), ChatStreamError纯流客户端 POST <baseUrl>/chat/completions (单位:千美元)stream: true:SSE 框架、内容 / reasoning_content /工具召唤三角洲, finish_reason顶级 citations 财务报告和审定财务报表 refusal网络故障和404/502/503/504 unavailable。 。 。 .
useOpenAIChat({ baseUrl, model, fetch?, headers?, initialMessages?, preamble?, body? })反应钩子 : { messages, send, stop, status, error, reset, setMessages }, (中文(简体) ), status 实值 idle, (中文(简体) ), streaming, (中文(简体) ), error 或者说 unavailable。 。 。 .
ConversationList导航-绘图列表:新对话,可选搜索,重命名/删除回调,空状态,本地化日期.
ModelUnavailable下载 / 装入 / 不可用状态 .
CitedMarkdown, (中文(简体) ), CitationChip, (中文(简体) ), CitationList, (中文(简体) ), RefusalNotice基础答案 : [n] 标记为芯片,编号来源,"来源中未建立的"通知. MessageBubble 带 citations 财务报告和审定财务报表 refusal 直接说.
MemoryPanel通过逐项删除和确认的"清除所有"来保存记忆(confirmClear 输入您自己的对话框 .
ChatIcon聊天图标作为内置材料符号SVG:聊天组件不需要图标字体.

Markdown (和 MessageBubble, (中文(简体) ), CitedMarkdown开放外部链接 target="_blank" rel="noopener noreferrer" 并带 onLinkClick(href, event) (电话) event.preventDefault() 从 Tauri 网页视图打开系统浏览器) 或 renderLink。 。 。 . ChatComposer 带 disabled (该模型没有可用性:输入、发送、语音和选择器为 相对于 isSending。 。 。 .

测试

bun test

test/preload.ts 决定 @aphrody/m3-primitives 因此,测试不需要一个 已建成 dist。 。 。 .

贷项

衍生自 SpaceUI @spacedrive/ai (麻省理工学院,见 LICENSE.spaceui),在材料设计3上重建. 新代码为Apache-2.0.

版本与发布记录

@aphrody/m3-ai 共发布 12 个版本,首次发布于 2026/09/25;过去 12 个月发布了 12 个版本。

版本发布日期距今
1.4.7latest2026/10/2316 天前
1.4.42026/10/1821 天前
3.3.112026/10/1029 天前
3.3.92026/10/1029 天前
3.3.82026/10/0930 天前
3.3.72026/10/071 个月前

关于 @aphrody/m3-ai 的常见问题

@aphrody/m3-ai 是什么?

材质设计3代理交互组件(工具调用,平分,聊天作曲,工人,任务): SpaceUI (@spacedrive/ai) 在@aphody/m3-primitives上重建.

如何安装 @aphrody/m3-ai?

在项目目录运行 npm install @aphrody/m3-ai,或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖:react(>=18.0.0)、react-dom(>=18.0.0)、tailwindcss(>=4.1.0)。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖,Yarn 需要手动安装。

@aphrody/m3-ai 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aphrody/m3-ai 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aphrody/m3-ai 可以商用吗?

@aphrody/m3-ai 使用 Apache-2.0 AND MIT 许可。声明的许可为 Apache-2.0 AND MIT,请阅读许可原文确认使用条件。以上为概括,不构成法律意见,请以许可原文为准。

@aphrody/m3-ai 的下载量有多少?

根据 npm 官方下载统计,@aphrody/m3-ai 在 2026/10/06 – 2026/11/04 这 30 天内被下载 1,875 次,日均约 63 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aphrody/m3-ai 还在维护吗?

最新版本 1.4.7 发布于 2026/10/23(16 天前);至今共发布 12 个版本,其中过去 12 个月发布了 12 个;首次发布于 2026/09/25。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。