@qfei-design/make-ai-assistant 0.3.0 → 0.3.1

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/dist/styles.css CHANGED
@@ -385,15 +385,15 @@
385
385
  .make-ai-assistant__task-list-icon {
386
386
  display: block;
387
387
  flex: 0 0 auto;
388
- height: 19px;
389
- width: 19px;
388
+ height: 14px;
389
+ width: 14px;
390
390
  }
391
391
 
392
392
  .make-ai-assistant__task-list-disclosure {
393
393
  display: block;
394
394
  flex: 0 0 auto;
395
- height: 15px;
396
- width: 15px;
395
+ height: 14px;
396
+ width: 14px;
397
397
  }
398
398
 
399
399
  .make-ai-assistant__header-title {
@@ -635,6 +635,7 @@
635
635
  display: grid;
636
636
  font-size: var(--make-ai-internal-font-size-markdown);
637
637
  gap: var(--make-ai-internal-assistant-block-gap);
638
+ grid-template-columns: minmax(0, 1fr);
638
639
  line-height: var(--make-ai-internal-line-height-body);
639
640
  max-width: 100%;
640
641
  white-space: normal;
@@ -644,8 +645,7 @@
644
645
  .make-ai-assistant__assistant-text p,
645
646
  .make-ai-assistant__assistant-text .make-ai-assistant__markdown-heading,
646
647
  .make-ai-assistant__assistant-text ul,
647
- .make-ai-assistant__assistant-text .make-ai-assistant__markdown-table-scroll,
648
- .make-ai-assistant__assistant-text pre {
648
+ .make-ai-assistant__assistant-text .make-ai-assistant__markdown-table-scroll {
649
649
  margin: 0;
650
650
  }
651
651
 
@@ -722,8 +722,11 @@
722
722
  color: var(--make-ai-internal-text-secondary);
723
723
  font-size: 1em;
724
724
  line-height: 1.55;
725
+ margin: 0;
725
726
  max-width: 100%;
726
- overflow: auto;
727
+ min-width: 0;
728
+ overflow-x: auto;
729
+ overscroll-behavior-inline: contain;
727
730
  padding: 9px 10px;
728
731
  }
729
732
 
@@ -732,8 +735,15 @@
732
735
  border: 0;
733
736
  color: inherit;
734
737
  display: block;
738
+ overflow-wrap: normal;
735
739
  padding: 0;
736
740
  white-space: pre;
741
+ word-break: normal;
742
+ }
743
+
744
+ .make-ai-assistant__assistant-text pre:focus-visible {
745
+ outline: 2px solid var(--make-ai-internal-accent);
746
+ outline-offset: 2px;
737
747
  }
738
748
 
739
749
  .make-ai-assistant__markdown-table-scroll {
@@ -933,8 +943,7 @@
933
943
  display: flex;
934
944
  gap: 10px;
935
945
  list-style: none;
936
- min-height: 48px;
937
- padding: 10px 12px;
946
+ padding: 8px 12px;
938
947
  }
939
948
 
940
949
  .make-ai-assistant__process summary:hover {
@@ -999,25 +1008,29 @@
999
1008
  }
1000
1009
 
1001
1010
  .make-ai-assistant__process-copy {
1002
- display: grid;
1003
- gap: 1px;
1011
+ align-items: center;
1012
+ display: flex;
1013
+ gap: 8px;
1004
1014
  min-width: 0;
1005
1015
  }
1006
1016
 
1007
1017
  .make-ai-assistant__process-title {
1008
1018
  color: var(--make-ai-internal-text);
1019
+ flex: 0 0 auto;
1009
1020
  font-size: var(--make-ai-internal-font-size-ui);
1010
1021
  font-weight: 700;
1011
- line-height: var(--make-ai-internal-line-height-ui);
1022
+ line-height: var(--make-ai-internal-line-height-caption);
1023
+ white-space: nowrap;
1012
1024
  }
1013
1025
 
1014
1026
  .make-ai-assistant__process .make-ai-assistant__process-latest {
1015
1027
  color: var(--make-ai-internal-text-secondary);
1016
1028
  display: block;
1017
- flex: 0 1 auto;
1029
+ flex: 1 1 auto;
1018
1030
  font-size: var(--make-ai-internal-font-size-meta);
1019
1031
  line-height: var(--make-ai-internal-line-height-meta);
1020
1032
  min-height: 0;
1033
+ min-width: 0;
1021
1034
  overflow: hidden;
1022
1035
  text-overflow: ellipsis;
1023
1036
  white-space: nowrap;
@@ -1042,7 +1055,11 @@
1042
1055
  gap: 8px;
1043
1056
  list-style: none;
1044
1057
  margin: 0;
1045
- padding: 11px 14px 13px;
1058
+ padding: 8px 12px;
1059
+ }
1060
+
1061
+ .make-ai-assistant__process > .make-ai-assistant__assistant-text {
1062
+ padding: 8px 12px;
1046
1063
  }
1047
1064
 
1048
1065
  .make-ai-assistant__process li {
@@ -11,16 +11,34 @@ const client = createMakeAgentClient({
11
11
  scope: { appKey, identityKey },
12
12
  transport: authenticatedTransport,
13
13
  });
14
+ // 先由宿主通过 client.agents.list() 读完分页,确定唯一的应用内 Agent。
14
15
  const assistantTransport = await createMakeAppAssistantTransport({ client, agentId });
15
16
  // 将 assistantTransport 传入 AssistantPanel / MakeAiAssistant。
16
17
  // App、用户或租户改变时,取消旧连接并 client.dispose(),重新创建实例。
17
18
  ```
18
19
 
20
+ ## 应用内 Agent
21
+
22
+ 一个应用只绑定一个应用内 Agent。宿主取得该 Agent 的 `agentId` 后,调用
23
+ `createMakeAppAssistantTransport({ client, agentId })`,并把返回的 `transport` 传给
24
+ `AssistantPanel` 或 `MakeAiAssistant`。包不提供 Agent 选择器,也不通过列表接口自行决定 Agent。
25
+ 如果宿主尚未取得 `agentId`,应先完成自己的加载或错误处理,再挂载对话组件;App、用户或租户
26
+ 变化时中止旧请求、释放旧 client 并创建新实例。`identityKey` 仅用于隔离客户端状态,不是授权凭据。
27
+ 模型选择与 Agent 绑定不同;当前组件尚无模型选择合同,不能用 Agent 列表代替模型列表。
28
+
29
+ 首次选取 Agent 必须由宿主调用 `client.agents.list()` 读取完整分页:
30
+ `createMakeAppAssistantTransport()` 创建时就要求 `agentId`,因此不能先创建 transport 再用
31
+ `transport.listAgents()` 做首次选取。两个列表方法都会保留可选的 `agentType`:已知值包括
32
+ `app_internal`、`channel`,未来新增的字符串值也会透传;旧响应未提供时该属性缺失。
33
+ SDK 不按类型筛选、不默认选中 Agent。需要应用内 Agent 的宿主应在读完分页后自行筛选
34
+ `agentType === "app_internal"`,对零个或多个匹配项分别给出未配置或配置冲突提示,不能用其他
35
+ 类型顶替。选定后再用该 `agentId` 创建 transport;其他宿主可采用自己的选择规则。
36
+
19
37
  `AuthenticatedTransport.request` 只执行一次已认证 I/O,返回 status、headers 和 AsyncIterable<Uint8Array>。`retryOwner: "sdk"` 由 SDK 按幂等语义做有限重试;`retryOwner: "transport"` 不叠加 SDK 重试。宿主沿正式 auth.api 处理登录、401/403 和 Cookie,SSE/二进制成功体不经过 JSON 或 text() 缓冲。SDK 不读取 Token、Cookie、LocalStorage 或 Provider key。
20
38
 
21
39
  普通操作分组为 capabilities、agents、chats、messages、responses、feedback、uploads 和 content。所有分页 cursor 都是不透明字符串;末页 nextCursor 为空串。不要把 Session 事件序号或 Redis ID 拼进公开 cursor。消息 messageId、Chat requestId、Feedback requestId 和 Upload fileId 来自用户的一次真实意图;重试使用同一个 ID 和字节,不重新生成。
22
40
 
23
- SDK 忽略新增响应元数据,但验证已知字段及归属。未知可选 SSE 事件产生 kind=unknown;未知输出 part 产生安全占位类型,不能用于输入或自动执行业务动作。已知字段损坏、跨 Response 帧和同一 cursor 已知语义字段冲突的重放均报 AI_PROTOCOL_ERROR。Response 的未知 status 按 terminal 决定是否结束;snapshotRevision 阻止旧快照覆盖新状态。
41
+ SDK 忽略其他新增响应元数据,但保留可选的 Agent `agentType`,并验证已知字段及归属。未知可选 SSE 事件产生 kind=unknown;未知输出 part 产生安全占位类型,不能用于输入或自动执行业务动作。已知字段损坏、跨 Response 帧和同一 cursor 已知语义字段冲突的重放均报 AI_PROTOCOL_ERROR。Response 的未知 status 按 terminal 决定是否结束;snapshotRevision 阻止旧快照覆盖新状态。
24
42
 
25
43
  Chat.titlePending 缺失按 false;已知待摘要会话每秒通过同一 client.chats.get 刷新,摘要完成即显示,与正文终态独立。取消只走 responses.cancel;关闭迭代器/组件只停止本地读取。
26
44
 
@@ -1,11 +1,29 @@
1
1
  # Make App 接入示例
2
2
 
3
- 本示例消费包的公开 `/react`、`/make-app` 和样式入口,展示 17 项语义回调如何连接宿主同源服务。所有 POC 复用包内会话、流式、反馈和上传状态,不复制其内部实现。
3
+ 本示例消费包公开的 `/client`、`/react`、`/make-app` 和样式入口,演示宿主如何为应用内唯一 Agent
4
+ 创建 transport 并挂载对话组件;不复制包内部的状态机。源代码按接入顺序阅读:
5
+
6
+ 1. [transport.ts](transport.ts):由宿主注入已认证的同源 HTTP 字节流请求,并用 `agentId` 创建 transport。
7
+ 2. [main.tsx](main.tsx):读取当前宿主配置并挂载 React 示例。
4
8
 
5
9
  先在仓库根目录执行 `corepack pnpm build`,再执行 `corepack pnpm make-app:build`。输出在本目录的 dist,仅供宿主服务托管或本地验收;本例不处理登录、不读取 Token,也不提供生产 BFF。
6
10
 
7
- 宿主提供同源 `GET /runtime-config`,响应为 `{appKey, appName, agentId, identityKey}`;identityKey 是用户/租户变化时同步变化的非凭据缓存隔离键。该配置不构成服务器授权。生产 POC 应将示例 request 换成已有认证客户端,并沿现有 Service/Make Gateway 转发公共接口。
11
+ 宿主提供同源 `GET /runtime-config`,响应包含以下内容:
12
+
13
+ ```json
14
+ {"appKey":"当前 App Key","appName":"当前 App 名称","agentId":"应用内 Agent ID","identityKey":"当前用户和租户的非凭据标识"}
15
+ ```
16
+
17
+ `identityKey` 在用户/租户变化时必须随之变化;它只隔离客户端状态,不是授权依据。示例
18
+ `transport.ts` 使用同源 `fetch` 展示请求形状,生产宿主应接入现有认证客户端及 Service/Make Gateway,
19
+ 沿正式登录与鉴权链路处理 401/403,并透传 `AbortSignal` 和响应字节流。不得将 Token 放入
20
+ `/runtime-config`、`scopeKey`、日志或包内部。
21
+
22
+ 一个应用只绑定一个应用内 Agent;宿主须在挂载对话组件前取得对应 `agentId`,而不是让包显示
23
+ Agent 选择器。App 或身份改变时应取消旧请求、释放旧 Client 并创建新实例,不能沿用旧会话。
24
+ 模型切换属于不同能力,当前示例不提供模型选择界面。
8
25
 
9
26
  当前 Make App 后端只支持文本模型输入;示例的 modelInputKinds 为 `["text"]`,但仍保留统一的“上传文件或图片”入口。服务端必须根据消息 parts 和实际模型能力校验媒体类型;不要以原件存储或读取能力判断模型已经支持输入。
10
27
 
11
- 详见 [接入说明](../../docs/make-app-integration.md)。正式发布仍由原仓库 GitLab CI 负责。
28
+ 完整属性、transport 功能门控见 [公共 API](../../PUBLIC_API.md#组件参数速查);更多协议与安全约束见
29
+ [接入说明](../../docs/make-app-integration.md)。正式发布仍由原仓库 GitLab CI 负责。
package/package.ai.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "packageName": "@qfei-design/make-ai-assistant",
3
- "minimumRuntimeVersion": "0.3.0",
3
+ "minimumRuntimeVersion": "0.3.1",
4
4
  "readOrder": [
5
5
  "package.ai.json",
6
6
  "README.md",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qfei-design/make-ai-assistant",
3
- "version": "0.3.0",
3
+ "version": "0.3.1",
4
4
  "description": "Platform-wide Make AI Assistant contracts, React shell, and context-aware artifact templates.",
5
5
  "type": "module",
6
6
  "sideEffects": [