@sidleo3/dsh-chat-weixin 0.0.4
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/client/index.js +605 -0
- package/cordis.patch.yml +5 -0
- package/host/config-store.mjs +115 -0
- package/host/controller.mjs +434 -0
- package/host/ilink-client.mjs +623 -0
- package/host/index.mjs +59 -0
- package/host/media.mjs +408 -0
- package/host/runtime.mjs +577 -0
- package/host/state-store.mjs +146 -0
- package/lib/client.js +631 -0
- package/lib/index.js +1939 -0
- package/package.json +51 -0
package/lib/client.js
ADDED
|
@@ -0,0 +1,631 @@
|
|
|
1
|
+
window.__ModuleLoader__.load({
|
|
2
|
+
id: "@sidleo3/dsh-chat-weixin",
|
|
3
|
+
factory: (require) => {
|
|
4
|
+
var module = { exports: {} };
|
|
5
|
+
var exports = module.exports;
|
|
6
|
+
var __create = Object.create;
|
|
7
|
+
var __defProp = Object.defineProperty;
|
|
8
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
11
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
12
|
+
var __export = (target, all) => {
|
|
13
|
+
for (var name2 in all)
|
|
14
|
+
__defProp(target, name2, { get: all[name2], enumerable: true });
|
|
15
|
+
};
|
|
16
|
+
var __copyProps = (to, from, except, desc) => {
|
|
17
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
18
|
+
for (let key of __getOwnPropNames(from))
|
|
19
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
20
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
21
|
+
}
|
|
22
|
+
return to;
|
|
23
|
+
};
|
|
24
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
25
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
26
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
27
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
28
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
29
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
30
|
+
mod
|
|
31
|
+
));
|
|
32
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
33
|
+
|
|
34
|
+
// packages/dsh-chat-weixin/client/index.js
|
|
35
|
+
var index_exports = {};
|
|
36
|
+
__export(index_exports, {
|
|
37
|
+
AccountCard: () => AccountCard,
|
|
38
|
+
WeixinPage: () => WeixinPage,
|
|
39
|
+
apply: () => apply,
|
|
40
|
+
inject: () => inject,
|
|
41
|
+
name: () => name
|
|
42
|
+
});
|
|
43
|
+
module.exports = __toCommonJS(index_exports);
|
|
44
|
+
var React = __toESM(require("react"), 1);
|
|
45
|
+
var name = "dsh-chat-weixin-client";
|
|
46
|
+
var inject = ["slots", "locale", "connection", "chatChannels", "chatUi"];
|
|
47
|
+
var CHANNEL_ID = "weixin";
|
|
48
|
+
var PAGE_SLOT = "chat.channel.page";
|
|
49
|
+
var LOCALE_NAMESPACE = "dsh-chat-weixin";
|
|
50
|
+
var zh = {
|
|
51
|
+
"\u5173\u95ED": "\u5173\u95ED",
|
|
52
|
+
"\u5220\u9664": "\u5220\u9664",
|
|
53
|
+
"\u542F\u7528": "\u542F\u7528",
|
|
54
|
+
"\u586B\u5165\u793A\u4F8B": "\u586B\u5165\u793A\u4F8B",
|
|
55
|
+
"\u5907\u6CE8\u540D\uFF08\u53EF\u9009\uFF09": "\u5907\u6CE8\u540D\uFF08\u53EF\u9009\uFF09",
|
|
56
|
+
"\u5F20\u4E09": "\u5F20\u4E09",
|
|
57
|
+
"\u65B0\u589E": "\u65B0\u589E",
|
|
58
|
+
"\u6765\u6E90\u5B57\u6BB5": "\u6765\u6E90\u5B57\u6BB5",
|
|
59
|
+
"\u6E05\u7A7A": "\u6E05\u7A7A",
|
|
60
|
+
"\u8FD8\u6CA1\u6709\u6307\u5B9A\u8BBE\u7F6E\u3002": "\u8FD8\u6CA1\u6709\u6307\u5B9A\u8BBE\u7F6E\u3002",
|
|
61
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A": "\u4E0A\u4E0B\u6587\u589E\u5F3A",
|
|
62
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A\u8303\u56F4": "\u4E0A\u4E0B\u6587\u589E\u5F3A\u8303\u56F4",
|
|
63
|
+
"\u53E0\u52A0\u5168\u5C40\u63D0\u793A\u8BCD\uFF08\u4E0D\u52FE\u9009\u5219\u53EA\u4F7F\u7528\u4E0A\u9762\u7684\u4E13\u5C5E\u63D0\u793A\u8BCD\uFF09": "\u53E0\u52A0\u5168\u5C40\u63D0\u793A\u8BCD\uFF08\u4E0D\u52FE\u9009\u5219\u53EA\u4F7F\u7528\u4E0A\u9762\u7684\u4E13\u5C5E\u63D0\u793A\u8BCD\uFF09",
|
|
64
|
+
"\u544A\u8BC9\u6A21\u578B\u5982\u4F55\u4F7F\u7528\u6765\u6E90\u5B57\u6BB5\u3002\u53EA\u586B\u6B63\u6587\uFF0C\u63D2\u4EF6\u4F1A\u81EA\u52A8\u5305\u6210\u6765\u6E90\u589E\u5F3A\u5757\u3002": "\u544A\u8BC9\u6A21\u578B\u5982\u4F55\u4F7F\u7528\u6765\u6E90\u5B57\u6BB5\u3002\u53EA\u586B\u6B63\u6587\uFF0C\u63D2\u4EF6\u4F1A\u81EA\u52A8\u5305\u6210\u6765\u6E90\u589E\u5F3A\u5757\u3002",
|
|
65
|
+
"\u589E\u5F3A\u63D0\u793A\u8BCD": "\u589E\u5F3A\u63D0\u793A\u8BCD",
|
|
66
|
+
"\u6765\u6E90\u5B57\u6BB5\u53EA\u5728\u5F53\u524D\u6D88\u606F\u5DF2\u63D0\u4F9B\u65F6\u624D\u4F1A\u53D1\u9001\uFF0C\u4E0D\u4F1A\u989D\u5916\u67E5\u8BE2\u5E73\u53F0\u63A5\u53E3\u3002": "\u6765\u6E90\u5B57\u6BB5\u53EA\u5728\u5F53\u524D\u6D88\u606F\u5DF2\u63D0\u4F9B\u65F6\u624D\u4F1A\u53D1\u9001\uFF0C\u4E0D\u4F1A\u989D\u5916\u67E5\u8BE2\u5E73\u53F0\u63A5\u53E3\u3002",
|
|
67
|
+
"\u4ECE\u4F1A\u8BDD\u91CC\u9009\u2026": "\u4ECE\u4F1A\u8BDD\u91CC\u9009\u2026",
|
|
68
|
+
"Agent \u9884\u8BBE": "Agent \u9884\u8BBE",
|
|
69
|
+
"\u6A21\u578B": "\u6A21\u578B",
|
|
70
|
+
"\u9ED8\u8BA4\u6A21\u578B": "\u9ED8\u8BA4\u6A21\u578B",
|
|
71
|
+
"\u63A8\u7406\u7B49\u7EA7": "\u63A8\u7406\u7B49\u7EA7",
|
|
72
|
+
"\u8FD9\u4E2A\u6A21\u578B\u6CA1\u6709\u53EF\u9009\u7684\u63A8\u7406\u7B49\u7EA7\u3002": "\u8FD9\u4E2A\u6A21\u578B\u6CA1\u6709\u53EF\u9009\u7684\u63A8\u7406\u7B49\u7EA7\u3002",
|
|
73
|
+
"\u5148\u9009\u4E00\u4E2A\u6A21\u578B\u3002": "\u5148\u9009\u4E00\u4E2A\u6A21\u578B\u3002",
|
|
74
|
+
"\u6A21\u578B\u9ED8\u8BA4": "\u6A21\u578B\u9ED8\u8BA4",
|
|
75
|
+
"\u90E8\u5206 provider \u8BFB\u53D6\u5931\u8D25\uFF1A": "\u90E8\u5206 provider \u8BFB\u53D6\u5931\u8D25\uFF1A",
|
|
76
|
+
"\u5F53\u524D Host \u8BFB\u4E0D\u5230\u6A21\u578B\u76EE\u5F55\u3002": "\u5F53\u524D Host \u8BFB\u4E0D\u5230\u6A21\u578B\u76EE\u5F55\u3002",
|
|
77
|
+
"\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u65F6\u7528\u54EA\u4E2A\u6A21\u578B\uFF1A\u9009\u5B8C\u5BF9\u4E0B\u4E00\u6761\u6D88\u606F\u65B0\u5EFA\u7684\u4F1A\u8BDD\u751F\u6548\u3002\u4F1A\u8BDD\u5185\u8FD8\u80FD\u5355\u72EC\u6539\uFF08\u9762\u677F\u7684\u6A21\u578B\u4E0B\u62C9\uFF09\u3002": "\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u65F6\u7528\u54EA\u4E2A\u6A21\u578B\uFF1A\u9009\u5B8C\u5BF9\u4E0B\u4E00\u6761\u6D88\u606F\u65B0\u5EFA\u7684\u4F1A\u8BDD\u751F\u6548\u3002\u4F1A\u8BDD\u5185\u8FD8\u80FD\u5355\u72EC\u6539\uFF08\u9762\u677F\u7684\u6A21\u578B\u4E0B\u62C9\uFF09\u3002",
|
|
78
|
+
"\u4E0B\u62C9\u91CC\u662F\u8FD9\u53F0\u673A\u5668\u4EBA\u7528\u8FC7\u7684\u76EE\u5F55\u3002": "\u4E0B\u62C9\u91CC\u662F\u8FD9\u53F0\u673A\u5668\u4EBA\u7528\u8FC7\u7684\u76EE\u5F55\u3002",
|
|
79
|
+
"\u4EC5\u540D\u5355\u5185\u53EF\u7528": "\u4EC5\u540D\u5355\u5185\u53EF\u7528",
|
|
80
|
+
"\u4ECE\u4F1A\u8BDD\u91CC\u9009\u4E00\u4E2A\u4EBA\u8BBE\u4E3A\u5C5E\u4E3B": "\u4ECE\u4F1A\u8BDD\u91CC\u9009\u4E00\u4E2A\u4EBA\u8BBE\u4E3A\u5C5E\u4E3B",
|
|
81
|
+
"\u4EFB\u4F55\u4EBA\u53EF\u7528": "\u4EFB\u4F55\u4EBA\u53EF\u7528",
|
|
82
|
+
"\u5141\u8BB8\u6267\u884C\u547D\u4EE4": "\u5141\u8BB8\u6267\u884C\u547D\u4EE4",
|
|
83
|
+
"\u53EF\u6267\u884C\u547D\u4EE4": "\u53EF\u6267\u884C\u547D\u4EE4",
|
|
84
|
+
"\u540D\u5355\u4E3A\u7A7A\u65F6\u53EA\u6709\u5C5E\u4E3B\u53EF\u7528\u3002": "\u540D\u5355\u4E3A\u7A7A\u65F6\u53EA\u6709\u5C5E\u4E3B\u53EF\u7528\u3002",
|
|
85
|
+
"\u5BF9\u65B9\u7684\u5E73\u53F0 id\uFF0C\u56DE\u8F66\u6DFB\u52A0": "\u5BF9\u65B9\u7684\u5E73\u53F0 id\uFF0C\u56DE\u8F66\u6DFB\u52A0",
|
|
86
|
+
"\u5C5E\u4E3B": "\u5C5E\u4E3B",
|
|
87
|
+
"\u5C5E\u4E3B\u4E0D\u9700\u8981\u8FDB\u767D\u540D\u5355\uFF1A\u6D88\u606F\u4E0E\u547D\u4EE4\u90FD\u76F4\u63A5\u653E\u884C\u3002\u8FD9\u91CC\u6539\u5B8C\u4F1A\u91CD\u8FDE\u4E00\u6B21\uFF0C\u7ACB\u523B\u751F\u6548\u3002": "\u5C5E\u4E3B\u4E0D\u9700\u8981\u8FDB\u767D\u540D\u5355\uFF1A\u6D88\u606F\u4E0E\u547D\u4EE4\u90FD\u76F4\u63A5\u653E\u884C\u3002\u8FD9\u91CC\u6539\u5B8C\u4F1A\u91CD\u8FDE\u4E00\u6B21\uFF0C\u7ACB\u523B\u751F\u6548\u3002",
|
|
88
|
+
"\u5DE5\u4F5C\u533A": "\u5DE5\u4F5C\u533A",
|
|
89
|
+
"\u5F53\u524D Host \u8BFB\u4E0D\u5230 Agent Preset \u5217\u8868\u3002": "\u5F53\u524D Host \u8BFB\u4E0D\u5230 Agent Preset \u5217\u8868\u3002",
|
|
90
|
+
"\u5F53\u524D\u6CA1\u6709\u5C5E\u4E3B\uFF1A\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565\uFF0C\u8C01\u80FD\u7528\u5B8C\u5168\u7531\u4E0B\u9762\u7684\u300C\u8BBF\u95EE\u7B56\u7565\u300D\u51B3\u5B9A\u3002": "\u5F53\u524D\u6CA1\u6709\u5C5E\u4E3B\uFF1A\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565\uFF0C\u8C01\u80FD\u7528\u5B8C\u5168\u7531\u4E0B\u9762\u7684\u300C\u8BBF\u95EE\u7B56\u7565\u300D\u51B3\u5B9A\u3002",
|
|
91
|
+
"\u673A\u5668\u4EBA\u8DD1\u5728\u54EA\u4E2A\u76EE\u5F55\uFF1A\u80FD\u8BFB\u5199\u54EA\u4E9B\u6587\u4EF6\u3001\u7528\u54EA\u4EFD AGENTS.md\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002": "\u673A\u5668\u4EBA\u8DD1\u5728\u54EA\u4E2A\u76EE\u5F55\uFF1A\u80FD\u8BFB\u5199\u54EA\u4E9B\u6587\u4EF6\u3001\u7528\u54EA\u4EFD AGENTS.md\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002",
|
|
92
|
+
"\u6CA1\u6709\u53EF\u9009\u7684\u4F1A\u8BDD\uFF08\u5148\u548C\u673A\u5668\u4EBA\u804A\u4E00\u6B21\uFF09": "\u6CA1\u6709\u53EF\u9009\u7684\u4F1A\u8BDD\uFF08\u5148\u548C\u673A\u5668\u4EBA\u804A\u4E00\u6B21\uFF09",
|
|
93
|
+
"\u6DFB\u52A0": "\u6DFB\u52A0",
|
|
94
|
+
"\u6E05\u7A7A\u540E\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565": "\u6E05\u7A7A\u540E\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565",
|
|
95
|
+
"\u6E05\u7A7A\uFF08\u65E0\u5C5E\u4E3B\uFF09": "\u6E05\u7A7A\uFF08\u65E0\u5C5E\u4E3B\uFF09",
|
|
96
|
+
"\u76EE\u5F55": "\u76EE\u5F55",
|
|
97
|
+
"\u663E\u793A\u9879": "\u663E\u793A\u9879",
|
|
98
|
+
"\u63A7\u5236\u9762\u677F\u663E\u793A\u9879": "\u63A7\u5236\u9762\u677F\u663E\u793A\u9879",
|
|
99
|
+
"\u53EA\u5F71\u54CD /menu \u53D1\u51FA\u6765\u7684\u90A3\u5F20\u5361\u7247\uFF1A\u5173\u6389\u7684\u9879\u4E0D\u663E\u793A\uFF0C\u529F\u80FD\u7167\u65E7\uFF08\u79C1\u804A\u4E0E\u7FA4\u804A\u5206\u522B\u8BBE\u7F6E\uFF09\u3002": "\u53EA\u5F71\u54CD /menu \u53D1\u51FA\u6765\u7684\u90A3\u5F20\u5361\u7247\uFF1A\u5173\u6389\u7684\u9879\u4E0D\u663E\u793A\uFF0C\u529F\u80FD\u7167\u65E7\uFF08\u79C1\u804A\u4E0E\u7FA4\u804A\u5206\u522B\u8BBE\u7F6E\uFF09\u3002",
|
|
100
|
+
"\u6A21\u578B\u4E0E\u63A8\u7406\u7B49\u7EA7": "\u6A21\u578B\u4E0E\u63A8\u7406\u7B49\u7EA7",
|
|
101
|
+
"\u4F1A\u8BDD": "\u4F1A\u8BDD",
|
|
102
|
+
"Agent \u9884\u8BBE\u4E0E\u5DE5\u4F5C\u533A": "Agent \u9884\u8BBE\u4E0E\u5DE5\u4F5C\u533A",
|
|
103
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A\uFF08\u672C\u4F1A\u8BDD\uFF09": "\u4E0A\u4E0B\u6587\u589E\u5F3A\uFF08\u672C\u4F1A\u8BDD\uFF09",
|
|
104
|
+
"\u8BBF\u95EE\u7B56\u7565\uFF08\u672C\u4F1A\u8BDD\uFF09": "\u8BBF\u95EE\u7B56\u7565\uFF08\u672C\u4F1A\u8BDD\uFF09",
|
|
105
|
+
"\u6E20\u9053\u8BBE\u7F6E\uFF08\u4EFB\u52A1\u8FC7\u7A0B\u5C55\u793A\u7B49\uFF09": "\u6E20\u9053\u8BBE\u7F6E\uFF08\u4EFB\u52A1\u8FC7\u7A0B\u5C55\u793A\u7B49\uFF09",
|
|
106
|
+
"\u6E20\u9053\u52A8\u4F5C\u6309\u94AE\uFF08\u91CD\u8FDE\u7B49\uFF09": "\u6E20\u9053\u52A8\u4F5C\u6309\u94AE\uFF08\u91CD\u8FDE\u7B49\uFF09",
|
|
107
|
+
"\u547D\u4EE4\u6309\u94AE\uFF08\u65B0\u4F1A\u8BDD/\u72B6\u6001/\u8BCA\u65AD\u2026\uFF09": "\u547D\u4EE4\u6309\u94AE\uFF08\u65B0\u4F1A\u8BDD/\u72B6\u6001/\u8BCA\u65AD\u2026\uFF09",
|
|
108
|
+
"\u79C1\u804A": "\u79C1\u804A",
|
|
109
|
+
"\u79FB\u9664": "\u79FB\u9664",
|
|
110
|
+
"\u7FA4\u804A": "\u7FA4\u804A",
|
|
111
|
+
"\u8BBE\u4E3A\u5C5E\u4E3B": "\u8BBE\u4E3A\u5C5E\u4E3B",
|
|
112
|
+
"\u8BBF\u95EE\u6A21\u5F0F": "\u8BBF\u95EE\u6A21\u5F0F",
|
|
113
|
+
"\u8BBF\u95EE\u7B56\u7565": "\u8BBF\u95EE\u7B56\u7565",
|
|
114
|
+
"\u8C01\u80FD\u8DDF\u673A\u5668\u4EBA\u8BF4\u8BDD\u3001\u8C01\u80FD\u6267\u884C\u547D\u4EE4\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\uFF1B\u5C5E\u4E3B\u59CB\u7EC8\u53EF\u7528\u3002": "\u8C01\u80FD\u8DDF\u673A\u5668\u4EBA\u8BF4\u8BDD\u3001\u8C01\u80FD\u6267\u884C\u547D\u4EE4\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\uFF1B\u5C5E\u4E3B\u59CB\u7EC8\u53EF\u7528\u3002",
|
|
115
|
+
"\u8DDF\u968F Host \u9ED8\u8BA4": "\u8DDF\u968F Host \u9ED8\u8BA4",
|
|
116
|
+
"\u8FD9\u4E2A\u673A\u5668\u4EBA\u7528\u54EA\u5957 Agent \u9884\u8BBE\uFF08\u4EBA\u8BBE\u4E0E\u5DE5\u5177\u96C6\uFF09\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002": "\u8FD9\u4E2A\u673A\u5668\u4EBA\u7528\u54EA\u5957 Agent \u9884\u8BBE\uFF08\u4EBA\u8BBE\u4E0E\u5DE5\u5177\u96C6\uFF09\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002",
|
|
117
|
+
"\u5FAE\u4FE1": "\u5FAE\u4FE1",
|
|
118
|
+
"\u627E\u4E0D\u5230\u8FD9\u4E2A\u673A\u5668\u4EBA": "\u627E\u4E0D\u5230\u8FD9\u4E2A\u673A\u5668\u4EBA",
|
|
119
|
+
"\u5B83\u4E0D\u5728\u5F53\u524D\u6E20\u9053\u7684\u540D\u5355\u91CC\uFF08\u53EF\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u6216 Host \u4E0E\u9875\u9762\u7248\u672C\u4E0D\u4E00\u81F4\uFF09": "\u5B83\u4E0D\u5728\u5F53\u524D\u6E20\u9053\u7684\u540D\u5355\u91CC\uFF08\u53EF\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u6216 Host \u4E0E\u9875\u9762\u7248\u672C\u4E0D\u4E00\u81F4\uFF09",
|
|
120
|
+
"\u5FAE\u4FE1\u6E20\u9053": "\u5FAE\u4FE1\u6E20\u9053",
|
|
121
|
+
"\u5DF2\u7ED1\u5B9A\u7684\u8D26\u53F7": "\u5DF2\u7ED1\u5B9A\u7684\u8D26\u53F7",
|
|
122
|
+
"\u626B\u7801\u63A5\u5165": "\u626B\u7801\u63A5\u5165",
|
|
123
|
+
"\u91CD\u65B0\u8FDE\u63A5": "\u91CD\u65B0\u8FDE\u63A5",
|
|
124
|
+
"\u79FB\u9664\u63A5\u5165": "\u79FB\u9664\u63A5\u5165",
|
|
125
|
+
"\u786E\u8BA4\u79FB\u9664": "\u786E\u8BA4\u79FB\u9664",
|
|
126
|
+
"\u53D6\u6D88": "\u53D6\u6D88",
|
|
127
|
+
"\u8BFB\u53D6\u72B6\u6001": "\u8BFB\u53D6\u72B6\u6001",
|
|
128
|
+
"\u8BFB\u53D6\u4E2D\u2026": "\u8BFB\u53D6\u4E2D\u2026",
|
|
129
|
+
"\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026": "\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026",
|
|
130
|
+
"\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u5E76\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u3002": "\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u5E76\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u3002",
|
|
131
|
+
"\u4E8C\u7EF4\u7801\u7531\u817E\u8BAF\u5FAE\u4FE1 iLink \u670D\u52A1\u7B7E\u53D1\uFF1B\u8D26\u53F7\u51ED\u636E\u53EA\u5199\u5165\u672C\u673A Host\uFF0C\u6D4F\u89C8\u5668\u62FF\u4E0D\u5230 token\u3002": "\u4E8C\u7EF4\u7801\u7531\u817E\u8BAF\u5FAE\u4FE1 iLink \u670D\u52A1\u7B7E\u53D1\uFF1B\u8D26\u53F7\u51ED\u636E\u53EA\u5199\u5165\u672C\u673A Host\uFF0C\u6D4F\u89C8\u5668\u62FF\u4E0D\u5230 token\u3002",
|
|
132
|
+
"\u7B49\u5F85\u626B\u7801": "\u7B49\u5F85\u626B\u7801",
|
|
133
|
+
"\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u624B\u673A\u4E0A\u786E\u8BA4": "\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u624B\u673A\u4E0A\u786E\u8BA4",
|
|
134
|
+
"\u9700\u8981\u914D\u5BF9\u7801\uFF0C\u8BF7\u5728\u4E0B\u65B9\u8F93\u5165\u624B\u673A\u4E0A\u663E\u793A\u7684\u914D\u5BF9\u7801": "\u9700\u8981\u914D\u5BF9\u7801\uFF0C\u8BF7\u5728\u4E0B\u65B9\u8F93\u5165\u624B\u673A\u4E0A\u663E\u793A\u7684\u914D\u5BF9\u7801",
|
|
135
|
+
"\u63D0\u4EA4\u914D\u5BF9\u7801": "\u63D0\u4EA4\u914D\u5BF9\u7801",
|
|
136
|
+
"\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210": "\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210",
|
|
137
|
+
"\u8BE5\u5FAE\u4FE1\u8D26\u53F7\u5DF2\u5728\u522B\u5904\u7ED1\u5B9A": "\u8BE5\u5FAE\u4FE1\u8D26\u53F7\u5DF2\u5728\u522B\u5904\u7ED1\u5B9A",
|
|
138
|
+
"\u5DF2\u63A5\u5165\uFF0C\u6B63\u5728\u542F\u52A8\u957F\u8F6E\u8BE2\u2026": "\u5DF2\u63A5\u5165\uFF0C\u6B63\u5728\u542F\u52A8\u957F\u8F6E\u8BE2\u2026",
|
|
139
|
+
"\u91CD\u65B0\u751F\u6210\u4E8C\u7EF4\u7801": "\u91CD\u65B0\u751F\u6210\u4E8C\u7EF4\u7801",
|
|
140
|
+
"\u6CA1\u6709\u5DF2\u7ED1\u5B9A\u7684\u5FAE\u4FE1\u8D26\u53F7": "\u6CA1\u6709\u5DF2\u7ED1\u5B9A\u7684\u5FAE\u4FE1\u8D26\u53F7",
|
|
141
|
+
"\u672C\u673A\u8FD8\u6CA1\u6709\u5FAE\u4FE1\u8D26\u53F7\u3002\u70B9\u4E0A\u65B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u3002": "\u672C\u673A\u8FD8\u6CA1\u6709\u5FAE\u4FE1\u8D26\u53F7\u3002\u70B9\u4E0A\u65B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u3002",
|
|
142
|
+
"\u70B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u65B0\u8D26\u53F7\u3002": "\u70B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u65B0\u8D26\u53F7\u3002",
|
|
143
|
+
"\u5DF2\u5904\u7406\u6D88\u606F": "\u5DF2\u5904\u7406\u6D88\u606F",
|
|
144
|
+
"\u72B6\u6001": "\u72B6\u6001",
|
|
145
|
+
"\u542F\u52A8\u4E2D": "\u542F\u52A8\u4E2D",
|
|
146
|
+
"\u8FD0\u884C\u6B63\u5E38": "\u8FD0\u884C\u6B63\u5E38",
|
|
147
|
+
"\u91CD\u8FDE\u4E2D": "\u91CD\u8FDE\u4E2D",
|
|
148
|
+
"\u542F\u52A8\u5931\u8D25": "\u542F\u52A8\u5931\u8D25",
|
|
149
|
+
"\u5DF2\u505C\u6B62": "\u5DF2\u505C\u6B62",
|
|
150
|
+
"\u4EC5\u79C1\u804A": "\u4EC5\u79C1\u804A",
|
|
151
|
+
// hub 的共享组件(上下文增强编辑器)用本渠道的 t 取文案,因此这些键必须在渠道字典里。
|
|
152
|
+
"\u4FDD\u5B58": "\u4FDD\u5B58",
|
|
153
|
+
"\u4FDD\u5B58\u4E2D\u2026": "\u4FDD\u5B58\u4E2D\u2026",
|
|
154
|
+
"\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002": "\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002"
|
|
155
|
+
};
|
|
156
|
+
var en = {
|
|
157
|
+
"\u663E\u793A\u9879": "Section",
|
|
158
|
+
"\u63A7\u5236\u9762\u677F\u663E\u793A\u9879": "Control panel sections",
|
|
159
|
+
"\u53EA\u5F71\u54CD /menu \u53D1\u51FA\u6765\u7684\u90A3\u5F20\u5361\u7247\uFF1A\u5173\u6389\u7684\u9879\u4E0D\u663E\u793A\uFF0C\u529F\u80FD\u7167\u65E7\uFF08\u79C1\u804A\u4E0E\u7FA4\u804A\u5206\u522B\u8BBE\u7F6E\uFF09\u3002": "Only affects the card sent by /menu: hidden items are not drawn, everything keeps working (direct and group are configured separately).",
|
|
160
|
+
"\u6A21\u578B\u4E0E\u63A8\u7406\u7B49\u7EA7": "Model & reasoning",
|
|
161
|
+
"\u4F1A\u8BDD": "Session",
|
|
162
|
+
"Agent \u9884\u8BBE\u4E0E\u5DE5\u4F5C\u533A": "Agent preset & workspace",
|
|
163
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A\uFF08\u672C\u4F1A\u8BDD\uFF09": "Context enhancement (this chat)",
|
|
164
|
+
"\u8BBF\u95EE\u7B56\u7565\uFF08\u672C\u4F1A\u8BDD\uFF09": "Access policy (this chat)",
|
|
165
|
+
"\u6E20\u9053\u8BBE\u7F6E\uFF08\u4EFB\u52A1\u8FC7\u7A0B\u5C55\u793A\u7B49\uFF09": "Channel settings (step display etc.)",
|
|
166
|
+
"\u6E20\u9053\u52A8\u4F5C\u6309\u94AE\uFF08\u91CD\u8FDE\u7B49\uFF09": "Channel actions (reconnect etc.)",
|
|
167
|
+
"\u547D\u4EE4\u6309\u94AE\uFF08\u65B0\u4F1A\u8BDD/\u72B6\u6001/\u8BCA\u65AD\u2026\uFF09": "Command buttons (new session/status/diagnostics\u2026)",
|
|
168
|
+
"\u5173\u95ED": "Close",
|
|
169
|
+
"\u5220\u9664": "Delete",
|
|
170
|
+
"\u542F\u7528": "Enabled",
|
|
171
|
+
"\u586B\u5165\u793A\u4F8B": "Fill with example",
|
|
172
|
+
"\u5907\u6CE8\u540D\uFF08\u53EF\u9009\uFF09": "Display name (optional)",
|
|
173
|
+
"\u5F20\u4E09": "Alice",
|
|
174
|
+
"\u65B0\u589E": "Add",
|
|
175
|
+
"\u6765\u6E90\u5B57\u6BB5": "Source fields",
|
|
176
|
+
"\u6E05\u7A7A": "Clear",
|
|
177
|
+
"\u8FD8\u6CA1\u6709\u6307\u5B9A\u8BBE\u7F6E\u3002": "Nothing configured yet.",
|
|
178
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A": "Context enhancement",
|
|
179
|
+
"\u4E0A\u4E0B\u6587\u589E\u5F3A\u8303\u56F4": "Context enhancement scope",
|
|
180
|
+
"\u53E0\u52A0\u5168\u5C40\u63D0\u793A\u8BCD\uFF08\u4E0D\u52FE\u9009\u5219\u53EA\u4F7F\u7528\u4E0A\u9762\u7684\u4E13\u5C5E\u63D0\u793A\u8BCD\uFF09": "Also stack the global prompt (unchecked: use only the prompt above)",
|
|
181
|
+
"\u544A\u8BC9\u6A21\u578B\u5982\u4F55\u4F7F\u7528\u6765\u6E90\u5B57\u6BB5\u3002\u53EA\u586B\u6B63\u6587\uFF0C\u63D2\u4EF6\u4F1A\u81EA\u52A8\u5305\u6210\u6765\u6E90\u589E\u5F3A\u5757\u3002": "Tell the model how to use the source fields. Write the body only \u2014 the plugin wraps it into a source block.",
|
|
182
|
+
"\u589E\u5F3A\u63D0\u793A\u8BCD": "Prepended prompt",
|
|
183
|
+
"\u6765\u6E90\u5B57\u6BB5\u53EA\u5728\u5F53\u524D\u6D88\u606F\u5DF2\u63D0\u4F9B\u65F6\u624D\u4F1A\u53D1\u9001\uFF0C\u4E0D\u4F1A\u989D\u5916\u67E5\u8BE2\u5E73\u53F0\u63A5\u53E3\u3002": "Source fields are sent only when the incoming message already carries them; no extra platform calls are made.",
|
|
184
|
+
"\u4ECE\u4F1A\u8BDD\u91CC\u9009\u2026": "Pick a conversation\u2026",
|
|
185
|
+
"Agent \u9884\u8BBE": "Agent preset",
|
|
186
|
+
"\u6A21\u578B": "Model",
|
|
187
|
+
"\u9ED8\u8BA4\u6A21\u578B": "Default model",
|
|
188
|
+
"\u63A8\u7406\u7B49\u7EA7": "Reasoning effort",
|
|
189
|
+
"\u8FD9\u4E2A\u6A21\u578B\u6CA1\u6709\u53EF\u9009\u7684\u63A8\u7406\u7B49\u7EA7\u3002": "This model has no reasoning efforts to choose from.",
|
|
190
|
+
"\u5148\u9009\u4E00\u4E2A\u6A21\u578B\u3002": "Pick a model first.",
|
|
191
|
+
"\u6A21\u578B\u9ED8\u8BA4": "Model default",
|
|
192
|
+
"\u90E8\u5206 provider \u8BFB\u53D6\u5931\u8D25\uFF1A": "Some providers failed to load: ",
|
|
193
|
+
"\u5F53\u524D Host \u8BFB\u4E0D\u5230\u6A21\u578B\u76EE\u5F55\u3002": "The model catalog is unavailable right now.",
|
|
194
|
+
"\u8FD8\u6CA1\u6709\u4F1A\u8BDD\u65F6\u7528\u54EA\u4E2A\u6A21\u578B\uFF1A\u9009\u5B8C\u5BF9\u4E0B\u4E00\u6761\u6D88\u606F\u65B0\u5EFA\u7684\u4F1A\u8BDD\u751F\u6548\u3002\u4F1A\u8BDD\u5185\u8FD8\u80FD\u5355\u72EC\u6539\uFF08\u9762\u677F\u7684\u6A21\u578B\u4E0B\u62C9\uFF09\u3002": "Model used before a conversation exists; it applies to the session created by your next message. You can still change it per conversation from the panel.",
|
|
195
|
+
"\u4E0B\u62C9\u91CC\u662F\u8FD9\u53F0\u673A\u5668\u4EBA\u7528\u8FC7\u7684\u76EE\u5F55\u3002": "The suggestions are directories this bot has used before.",
|
|
196
|
+
"\u4EC5\u540D\u5355\u5185\u53EF\u7528": "Allowlist only",
|
|
197
|
+
"\u4ECE\u4F1A\u8BDD\u91CC\u9009\u4E00\u4E2A\u4EBA\u8BBE\u4E3A\u5C5E\u4E3B": "Pick a person from a conversation to make them the owner",
|
|
198
|
+
"\u4EFB\u4F55\u4EBA\u53EF\u7528": "Anyone",
|
|
199
|
+
"\u5141\u8BB8\u6267\u884C\u547D\u4EE4": "Allow commands",
|
|
200
|
+
"\u53EF\u6267\u884C\u547D\u4EE4": "Allow commands",
|
|
201
|
+
"\u540D\u5355\u4E3A\u7A7A\u65F6\u53EA\u6709\u5C5E\u4E3B\u53EF\u7528\u3002": "An empty allowlist means only the owner can use it.",
|
|
202
|
+
"\u5BF9\u65B9\u7684\u5E73\u53F0 id\uFF0C\u56DE\u8F66\u6DFB\u52A0": "Their platform id \u2014 press Enter to add",
|
|
203
|
+
"\u5C5E\u4E3B": "Owner",
|
|
204
|
+
"\u5C5E\u4E3B\u4E0D\u9700\u8981\u8FDB\u767D\u540D\u5355\uFF1A\u6D88\u606F\u4E0E\u547D\u4EE4\u90FD\u76F4\u63A5\u653E\u884C\u3002\u8FD9\u91CC\u6539\u5B8C\u4F1A\u91CD\u8FDE\u4E00\u6B21\uFF0C\u7ACB\u523B\u751F\u6548\u3002": "An owner does not need to be on the allowlist: their messages and commands always pass. Saving reconnects this bot once so the change takes effect immediately.",
|
|
205
|
+
"\u5DE5\u4F5C\u533A": "Workspace",
|
|
206
|
+
"\u5F53\u524D Host \u8BFB\u4E0D\u5230 Agent Preset \u5217\u8868\u3002": "This Host does not expose an agent preset list.",
|
|
207
|
+
"\u5F53\u524D\u6CA1\u6709\u5C5E\u4E3B\uFF1A\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565\uFF0C\u8C01\u80FD\u7528\u5B8C\u5168\u7531\u4E0B\u9762\u7684\u300C\u8BBF\u95EE\u7B56\u7565\u300D\u51B3\u5B9A\u3002": "No owner right now: nobody bypasses the access policy, so who may use this bot is decided entirely by the access policy below.",
|
|
208
|
+
"\u673A\u5668\u4EBA\u8DD1\u5728\u54EA\u4E2A\u76EE\u5F55\uFF1A\u80FD\u8BFB\u5199\u54EA\u4E9B\u6587\u4EF6\u3001\u7528\u54EA\u4EFD AGENTS.md\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002": "Which directory the bot runs in: which files it may read and write, and which AGENTS.mdapplies. Applies to new conversations only.",
|
|
209
|
+
"\u6CA1\u6709\u53EF\u9009\u7684\u4F1A\u8BDD\uFF08\u5148\u548C\u673A\u5668\u4EBA\u804A\u4E00\u6B21\uFF09": "No conversation to pick yet (talk to the bot once first)",
|
|
210
|
+
"\u6DFB\u52A0": "Add",
|
|
211
|
+
"\u6E05\u7A7A\u540E\u6CA1\u6709\u4EBA\u7ED5\u8FC7\u8BBF\u95EE\u7B56\u7565": "After clearing, nobody bypasses the access policy",
|
|
212
|
+
"\u6E05\u7A7A\uFF08\u65E0\u5C5E\u4E3B\uFF09": "Clear (no owner)",
|
|
213
|
+
"\u76EE\u5F55": "Directory",
|
|
214
|
+
"\u79C1\u804A": "Direct",
|
|
215
|
+
"\u79FB\u9664": "Remove",
|
|
216
|
+
"\u7FA4\u804A": "Group",
|
|
217
|
+
"\u8BBE\u4E3A\u5C5E\u4E3B": "Make owner",
|
|
218
|
+
"\u8BBF\u95EE\u6A21\u5F0F": "Access mode",
|
|
219
|
+
"\u8BBF\u95EE\u7B56\u7565": "Access policy",
|
|
220
|
+
"\u8C01\u80FD\u8DDF\u673A\u5668\u4EBA\u8BF4\u8BDD\u3001\u8C01\u80FD\u6267\u884C\u547D\u4EE4\u3002\u6539\u52A8\u7ACB\u5373\u751F\u6548\uFF1B\u5C5E\u4E3B\u59CB\u7EC8\u53EF\u7528\u3002": "Who may talk to the bot and who may run commands. Changes apply immediately;the owner always has access.",
|
|
221
|
+
"\u8DDF\u968F Host \u9ED8\u8BA4": "Follow the Host default",
|
|
222
|
+
"\u8FD9\u4E2A\u673A\u5668\u4EBA\u7528\u54EA\u5957 Agent \u9884\u8BBE\uFF08\u4EBA\u8BBE\u4E0E\u5DE5\u5177\u96C6\uFF09\u3002\u53EA\u5BF9\u65B0\u5EFA\u4F1A\u8BDD\u751F\u6548\u3002": "Which agent preset this bot uses (persona and tool set). Applies to new conversations only.",
|
|
223
|
+
"\u5FAE\u4FE1": "WeChat",
|
|
224
|
+
"\u627E\u4E0D\u5230\u8FD9\u4E2A\u673A\u5668\u4EBA": "Bot not found",
|
|
225
|
+
"\u5B83\u4E0D\u5728\u5F53\u524D\u6E20\u9053\u7684\u540D\u5355\u91CC\uFF08\u53EF\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u6216 Host \u4E0E\u9875\u9762\u7248\u672C\u4E0D\u4E00\u81F4\uFF09": "It is not in this channel's bot list (it may have been removed, or the Host and the page are on different versions)",
|
|
226
|
+
"\u5FAE\u4FE1\u6E20\u9053": "WeChat channel",
|
|
227
|
+
"\u5DF2\u7ED1\u5B9A\u7684\u8D26\u53F7": "Linked accounts",
|
|
228
|
+
"\u626B\u7801\u63A5\u5165": "Scan to link",
|
|
229
|
+
"\u91CD\u65B0\u8FDE\u63A5": "Reconnect",
|
|
230
|
+
"\u79FB\u9664\u63A5\u5165": "Remove",
|
|
231
|
+
"\u786E\u8BA4\u79FB\u9664": "Confirm removal",
|
|
232
|
+
"\u53D6\u6D88": "Cancel",
|
|
233
|
+
"\u8BFB\u53D6\u72B6\u6001": "Reload",
|
|
234
|
+
"\u8BFB\u53D6\u4E2D\u2026": "Loading\u2026",
|
|
235
|
+
"\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026": "Requesting a QR code\u2026",
|
|
236
|
+
"\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u5E76\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u3002": "Scan the QR code with WeChat on your phone and confirm there.",
|
|
237
|
+
"\u4E8C\u7EF4\u7801\u7531\u817E\u8BAF\u5FAE\u4FE1 iLink \u670D\u52A1\u7B7E\u53D1\uFF1B\u8D26\u53F7\u51ED\u636E\u53EA\u5199\u5165\u672C\u673A Host\uFF0C\u6D4F\u89C8\u5668\u62FF\u4E0D\u5230 token\u3002": "The QR code is issued by Tencent iLink; credentials are written on the Host only.",
|
|
238
|
+
"\u7B49\u5F85\u626B\u7801": "Waiting for a scan",
|
|
239
|
+
"\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u624B\u673A\u4E0A\u786E\u8BA4": "Scanned \u2014 confirm on your phone",
|
|
240
|
+
"\u9700\u8981\u914D\u5BF9\u7801\uFF0C\u8BF7\u5728\u4E0B\u65B9\u8F93\u5165\u624B\u673A\u4E0A\u663E\u793A\u7684\u914D\u5BF9\u7801": "A pairing code is required; enter the code shown on your phone",
|
|
241
|
+
"\u63D0\u4EA4\u914D\u5BF9\u7801": "Submit code",
|
|
242
|
+
"\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210": "The QR code expired; generate a new one",
|
|
243
|
+
"\u8BE5\u5FAE\u4FE1\u8D26\u53F7\u5DF2\u5728\u522B\u5904\u7ED1\u5B9A": "This WeChat account is already linked elsewhere",
|
|
244
|
+
"\u5DF2\u63A5\u5165\uFF0C\u6B63\u5728\u542F\u52A8\u957F\u8F6E\u8BE2\u2026": "Linked \u2014 starting the message connection\u2026",
|
|
245
|
+
"\u91CD\u65B0\u751F\u6210\u4E8C\u7EF4\u7801": "Generate a new QR code",
|
|
246
|
+
"\u6CA1\u6709\u5DF2\u7ED1\u5B9A\u7684\u5FAE\u4FE1\u8D26\u53F7": "No WeChat account linked",
|
|
247
|
+
"\u672C\u673A\u8FD8\u6CA1\u6709\u5FAE\u4FE1\u8D26\u53F7\u3002\u70B9\u4E0A\u65B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u3002": "No WeChat account on this Host yet. Use \u201CScan to link\u201D above.",
|
|
248
|
+
"\u70B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u65B0\u8D26\u53F7\u3002": "Use \u201CScan to link\u201D to bind a new account with WeChat.",
|
|
249
|
+
"\u5DF2\u5904\u7406\u6D88\u606F": "Messages handled",
|
|
250
|
+
"\u72B6\u6001": "State",
|
|
251
|
+
"\u542F\u52A8\u4E2D": "Starting",
|
|
252
|
+
"\u8FD0\u884C\u6B63\u5E38": "Connected",
|
|
253
|
+
"\u91CD\u8FDE\u4E2D": "Reconnecting",
|
|
254
|
+
"\u542F\u52A8\u5931\u8D25": "Failed",
|
|
255
|
+
"\u5DF2\u505C\u6B62": "Stopped",
|
|
256
|
+
"\u4EC5\u79C1\u804A": "Direct messages only",
|
|
257
|
+
"\u4FDD\u5B58": "Save",
|
|
258
|
+
"\u4FDD\u5B58\u4E2D\u2026": "Saving\u2026",
|
|
259
|
+
"\u4FDD\u5B58\u5931\u8D25\uFF0C\u8BF7\u91CD\u8BD5\u3002": "Could not save. Try again."
|
|
260
|
+
};
|
|
261
|
+
var h = React.createElement;
|
|
262
|
+
var STATE_TEXT = {
|
|
263
|
+
starting: "\u542F\u52A8\u4E2D",
|
|
264
|
+
running: "\u8FD0\u884C\u6B63\u5E38",
|
|
265
|
+
reconnecting: "\u91CD\u8FDE\u4E2D",
|
|
266
|
+
failed: "\u542F\u52A8\u5931\u8D25",
|
|
267
|
+
stopped: "\u5DF2\u505C\u6B62"
|
|
268
|
+
};
|
|
269
|
+
var STATUS_TEXT = {
|
|
270
|
+
wait: "\u7B49\u5F85\u626B\u7801",
|
|
271
|
+
scaned: "\u5DF2\u626B\u7801\uFF0C\u8BF7\u5728\u624B\u673A\u4E0A\u786E\u8BA4",
|
|
272
|
+
need_verifycode: "\u9700\u8981\u914D\u5BF9\u7801\uFF0C\u8BF7\u5728\u4E0B\u65B9\u8F93\u5165\u624B\u673A\u4E0A\u663E\u793A\u7684\u914D\u5BF9\u7801",
|
|
273
|
+
expired: "\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210",
|
|
274
|
+
verify_code_blocked: "\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210",
|
|
275
|
+
binded_redirect: "\u8BE5\u5FAE\u4FE1\u8D26\u53F7\u5DF2\u5728\u522B\u5904\u7ED1\u5B9A",
|
|
276
|
+
connected: "\u5DF2\u63A5\u5165\uFF0C\u6B63\u5728\u542F\u52A8\u957F\u8F6E\u8BE2\u2026"
|
|
277
|
+
};
|
|
278
|
+
function QrLogin({ chatUi, connection, translate, onDone }) {
|
|
279
|
+
const t = typeof translate === "function" ? translate : (key) => key;
|
|
280
|
+
const [state, setState] = React.useState({ phase: "idle" });
|
|
281
|
+
const [verifyCode, setVerifyCode] = React.useState("");
|
|
282
|
+
const aliveRef = React.useRef(true);
|
|
283
|
+
React.useEffect(() => () => {
|
|
284
|
+
aliveRef.current = false;
|
|
285
|
+
}, []);
|
|
286
|
+
const begin = React.useCallback(async () => {
|
|
287
|
+
setState({ phase: "starting" });
|
|
288
|
+
try {
|
|
289
|
+
const result = await chatUi.callChannelRpc(connection, CHANNEL_ID, "login.begin", {});
|
|
290
|
+
const value = chatUi.unwrapRpc(result);
|
|
291
|
+
if (!aliveRef.current) return;
|
|
292
|
+
setState({ phase: "waiting", attemptId: value.attemptId, qrcodeUrl: value.qrcodeUrl, status: "wait" });
|
|
293
|
+
} catch (error) {
|
|
294
|
+
if (aliveRef.current) setState({ phase: "error", error });
|
|
295
|
+
}
|
|
296
|
+
}, [chatUi, connection]);
|
|
297
|
+
React.useEffect(() => {
|
|
298
|
+
if (state.phase !== "waiting" || !state.attemptId) return void 0;
|
|
299
|
+
let stopped = false;
|
|
300
|
+
const tick = async () => {
|
|
301
|
+
try {
|
|
302
|
+
const result = await chatUi.callChannelRpc(connection, CHANNEL_ID, "login.poll", {
|
|
303
|
+
attemptId: state.attemptId,
|
|
304
|
+
...verifyCode ? { verifyCode } : {}
|
|
305
|
+
});
|
|
306
|
+
const value = chatUi.unwrapRpc(result);
|
|
307
|
+
if (stopped || !aliveRef.current) return;
|
|
308
|
+
if (value.status === "connected") {
|
|
309
|
+
setState({ phase: "done" });
|
|
310
|
+
onDone?.();
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
313
|
+
setState((current) => ({ ...current, status: value.status }));
|
|
314
|
+
if (value.status === "expired" || value.status === "verify_code_blocked") return;
|
|
315
|
+
} catch (error) {
|
|
316
|
+
if (!stopped && aliveRef.current) setState((current) => ({ ...current, error }));
|
|
317
|
+
return;
|
|
318
|
+
}
|
|
319
|
+
if (!stopped) timer = setTimeout(tick, 2e3);
|
|
320
|
+
};
|
|
321
|
+
let timer = setTimeout(tick, 500);
|
|
322
|
+
return () => {
|
|
323
|
+
stopped = true;
|
|
324
|
+
clearTimeout(timer);
|
|
325
|
+
};
|
|
326
|
+
}, [state.phase, state.attemptId, verifyCode, chatUi, connection, onDone]);
|
|
327
|
+
const { Panel } = chatUi.components;
|
|
328
|
+
if (state.phase === "idle") {
|
|
329
|
+
return h(Panel, {
|
|
330
|
+
title: t("\u626B\u7801\u63A5\u5165"),
|
|
331
|
+
description: t("\u4E8C\u7EF4\u7801\u7531\u817E\u8BAF\u5FAE\u4FE1 iLink \u670D\u52A1\u7B7E\u53D1\uFF1B\u8D26\u53F7\u51ED\u636E\u53EA\u5199\u5165\u672C\u673A Host\uFF0C\u6D4F\u89C8\u5668\u62FF\u4E0D\u5230 token\u3002"),
|
|
332
|
+
actions: h("button", {
|
|
333
|
+
type: "button",
|
|
334
|
+
className: "dchat-button dchat-buttonPrimary",
|
|
335
|
+
onClick: () => {
|
|
336
|
+
void begin();
|
|
337
|
+
}
|
|
338
|
+
}, t("\u626B\u7801\u63A5\u5165"))
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
if (state.phase === "starting") {
|
|
342
|
+
return h(Panel, { title: t("\u626B\u7801\u63A5\u5165"), description: t("\u6B63\u5728\u751F\u6210\u4E8C\u7EF4\u7801\u2026") });
|
|
343
|
+
}
|
|
344
|
+
if (state.phase === "done") {
|
|
345
|
+
return h(Panel, { title: t("\u626B\u7801\u63A5\u5165"), description: t("\u5DF2\u63A5\u5165\uFF0C\u6B63\u5728\u542F\u52A8\u957F\u8F6E\u8BE2\u2026") });
|
|
346
|
+
}
|
|
347
|
+
if (state.phase === "error") {
|
|
348
|
+
return h(Panel, {
|
|
349
|
+
title: t("\u626B\u7801\u63A5\u5165"),
|
|
350
|
+
actions: h("button", {
|
|
351
|
+
type: "button",
|
|
352
|
+
className: "dchat-button",
|
|
353
|
+
onClick: () => {
|
|
354
|
+
void begin();
|
|
355
|
+
}
|
|
356
|
+
}, t("\u91CD\u65B0\u751F\u6210\u4E8C\u7EF4\u7801"))
|
|
357
|
+
}, h("p", { className: "dchat-error", role: "alert" }, state.error?.message ?? "\u53D1\u8D77\u626B\u7801\u5931\u8D25\u3002"));
|
|
358
|
+
}
|
|
359
|
+
const expired = (status) => status === "expired" || status === "verify_code_blocked";
|
|
360
|
+
return h(
|
|
361
|
+
Panel,
|
|
362
|
+
{
|
|
363
|
+
title: t("\u626B\u7801\u63A5\u5165"),
|
|
364
|
+
description: t("\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u63CF\u4E8C\u7EF4\u7801\u5E76\u5728\u624B\u673A\u4E0A\u786E\u8BA4\u3002"),
|
|
365
|
+
actions: h("button", {
|
|
366
|
+
type: "button",
|
|
367
|
+
className: "dchat-button",
|
|
368
|
+
onClick: () => {
|
|
369
|
+
void begin();
|
|
370
|
+
}
|
|
371
|
+
}, t("\u91CD\u65B0\u751F\u6210\u4E8C\u7EF4\u7801"))
|
|
372
|
+
},
|
|
373
|
+
state.qrcodeUrl ? h("img", {
|
|
374
|
+
src: state.qrcodeUrl,
|
|
375
|
+
alt: t("\u626B\u7801\u63A5\u5165"),
|
|
376
|
+
style: { width: 200, height: 200, imageRendering: "pixelated" }
|
|
377
|
+
}) : null,
|
|
378
|
+
h("p", { className: "dchat-cardDescription" }, t(STATUS_TEXT[state.status] ?? "\u7B49\u5F85\u626B\u7801")),
|
|
379
|
+
state.status === "need_verifycode" ? h(
|
|
380
|
+
"div",
|
|
381
|
+
{ className: "dchat-actions" },
|
|
382
|
+
h("input", {
|
|
383
|
+
type: "text",
|
|
384
|
+
value: verifyCode,
|
|
385
|
+
placeholder: t("\u63D0\u4EA4\u914D\u5BF9\u7801"),
|
|
386
|
+
onChange: (event) => setVerifyCode(event.target.value)
|
|
387
|
+
})
|
|
388
|
+
) : null,
|
|
389
|
+
expired(state.status) ? h("p", { className: "dchat-error" }, t("\u4E8C\u7EF4\u7801\u5DF2\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u751F\u6210")) : null
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
function AccountCard({ account, chatUi, connection, translate, onChanged }) {
|
|
393
|
+
const t = typeof translate === "function" ? translate : (key) => key;
|
|
394
|
+
const {
|
|
395
|
+
Panel,
|
|
396
|
+
StatusPill,
|
|
397
|
+
ContextEnhancementEditor,
|
|
398
|
+
DeliveryTargetsEditor,
|
|
399
|
+
WorkspaceEditor,
|
|
400
|
+
PresetEditor,
|
|
401
|
+
ModelEditor,
|
|
402
|
+
AccessPolicyEditor,
|
|
403
|
+
PanelSectionsEditor
|
|
404
|
+
} = chatUi.components;
|
|
405
|
+
const settings = chatUi.hooks.useBotSettings({
|
|
406
|
+
connection,
|
|
407
|
+
channelId: CHANNEL_ID,
|
|
408
|
+
botId: account.botId
|
|
409
|
+
});
|
|
410
|
+
React.useEffect(() => {
|
|
411
|
+
void settings.loadOptions();
|
|
412
|
+
}, [settings.loadOptions]);
|
|
413
|
+
const sessions = chatUi.hooks.useConversations({
|
|
414
|
+
connection,
|
|
415
|
+
channelId: CHANNEL_ID,
|
|
416
|
+
botId: account.botId
|
|
417
|
+
}).conversations.map((item) => ({
|
|
418
|
+
id: item.kind === "group" ? item.route?.chatId : item.route?.userId,
|
|
419
|
+
name: item.name,
|
|
420
|
+
kind: item.kind
|
|
421
|
+
})).filter((item) => typeof item.id === "string" && item.id);
|
|
422
|
+
const shared = {
|
|
423
|
+
workspace: settings.record?.workspace ?? null,
|
|
424
|
+
agentPreset: settings.record?.agentPreset ?? null,
|
|
425
|
+
// 机器人默认模型(还没有会话时用它):与工作区/预设同一条口径,只对新建会话生效。
|
|
426
|
+
model: settings.record?.model ?? null,
|
|
427
|
+
accessPolicy: settings.record?.accessPolicy ?? null,
|
|
428
|
+
// 控制面板卡片的显示项(null = 全显示)。
|
|
429
|
+
panelSections: settings.record?.panelSections ?? null
|
|
430
|
+
};
|
|
431
|
+
const [busy, setBusy] = React.useState(false);
|
|
432
|
+
const [error, setError] = React.useState(null);
|
|
433
|
+
const [confirming, setConfirming] = React.useState(false);
|
|
434
|
+
const run = async (method, payload) => {
|
|
435
|
+
setBusy(true);
|
|
436
|
+
setError(null);
|
|
437
|
+
try {
|
|
438
|
+
const result = await chatUi.callChannelRpc(connection, CHANNEL_ID, method, payload);
|
|
439
|
+
return chatUi.unwrapRpc(result);
|
|
440
|
+
} catch (cause) {
|
|
441
|
+
setError(cause.message);
|
|
442
|
+
throw cause;
|
|
443
|
+
} finally {
|
|
444
|
+
setBusy(false);
|
|
445
|
+
}
|
|
446
|
+
};
|
|
447
|
+
return h(
|
|
448
|
+
Panel,
|
|
449
|
+
{
|
|
450
|
+
title: account.botName ?? account.accountIdMasked,
|
|
451
|
+
description: `${account.accountIdMasked} \xB7 ${t("\u4EC5\u79C1\u804A")}`,
|
|
452
|
+
actions: h(
|
|
453
|
+
"div",
|
|
454
|
+
{ className: "dchat-actions" },
|
|
455
|
+
h(StatusPill, { status: account.state, label: t(STATE_TEXT[account.state] ?? "\u72B6\u6001") }),
|
|
456
|
+
h("button", {
|
|
457
|
+
type: "button",
|
|
458
|
+
className: "dchat-button",
|
|
459
|
+
disabled: busy,
|
|
460
|
+
onClick: async () => {
|
|
461
|
+
try {
|
|
462
|
+
await run("account.reconnect", { botId: account.botId });
|
|
463
|
+
await onChanged?.();
|
|
464
|
+
} catch {
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
}, t("\u91CD\u65B0\u8FDE\u63A5")),
|
|
468
|
+
confirming ? h(
|
|
469
|
+
React.Fragment,
|
|
470
|
+
null,
|
|
471
|
+
h("button", {
|
|
472
|
+
type: "button",
|
|
473
|
+
className: "dchat-button dchat-buttonDangerSolid",
|
|
474
|
+
disabled: busy,
|
|
475
|
+
onClick: async () => {
|
|
476
|
+
try {
|
|
477
|
+
await run("account.delete", { botId: account.botId, confirm: true });
|
|
478
|
+
setConfirming(false);
|
|
479
|
+
await onChanged?.();
|
|
480
|
+
} catch {
|
|
481
|
+
}
|
|
482
|
+
}
|
|
483
|
+
}, t("\u786E\u8BA4\u79FB\u9664")),
|
|
484
|
+
h("button", {
|
|
485
|
+
type: "button",
|
|
486
|
+
className: "dchat-button",
|
|
487
|
+
disabled: busy,
|
|
488
|
+
onClick: () => setConfirming(false)
|
|
489
|
+
}, t("\u53D6\u6D88"))
|
|
490
|
+
) : h("button", {
|
|
491
|
+
type: "button",
|
|
492
|
+
className: "dchat-button dchat-buttonDanger",
|
|
493
|
+
disabled: busy,
|
|
494
|
+
onClick: () => setConfirming(true)
|
|
495
|
+
}, t("\u79FB\u9664\u63A5\u5165"))
|
|
496
|
+
)
|
|
497
|
+
},
|
|
498
|
+
account.errorMessage ? h("p", { className: "dchat-error", role: "alert" }, account.errorMessage) : null,
|
|
499
|
+
error ? h("p", { className: "dchat-error", role: "alert" }, error) : null,
|
|
500
|
+
h(
|
|
501
|
+
"div",
|
|
502
|
+
{ className: "dchat-list" },
|
|
503
|
+
h(
|
|
504
|
+
"div",
|
|
505
|
+
{ className: "dchat-listItem" },
|
|
506
|
+
h("span", null, t("\u5DF2\u5904\u7406\u6D88\u606F")),
|
|
507
|
+
h("span", null, String(account.handled ?? 0))
|
|
508
|
+
)
|
|
509
|
+
),
|
|
510
|
+
h(WorkspaceEditor, {
|
|
511
|
+
value: shared.workspace,
|
|
512
|
+
options: settings.options?.workspacePaths ?? [],
|
|
513
|
+
translate: t,
|
|
514
|
+
onSave: settings.saveWorkspace
|
|
515
|
+
}),
|
|
516
|
+
h(PresetEditor, {
|
|
517
|
+
value: shared.agentPreset,
|
|
518
|
+
options: settings.options?.presets ?? [],
|
|
519
|
+
translate: t,
|
|
520
|
+
onSave: settings.saveAgentPreset
|
|
521
|
+
}),
|
|
522
|
+
h(ModelEditor, {
|
|
523
|
+
value: shared.model ?? null,
|
|
524
|
+
options: settings.options?.models ?? [],
|
|
525
|
+
hostDefault: settings.options?.hostDefault ?? null,
|
|
526
|
+
failures: settings.options?.modelFailures ?? [],
|
|
527
|
+
translate: t,
|
|
528
|
+
onSave: settings.saveModel
|
|
529
|
+
}),
|
|
530
|
+
h(AccessPolicyEditor, {
|
|
531
|
+
value: shared.accessPolicy,
|
|
532
|
+
translate: t,
|
|
533
|
+
onSave: settings.saveAccessPolicy
|
|
534
|
+
}),
|
|
535
|
+
h(PanelSectionsEditor, {
|
|
536
|
+
value: shared.panelSections ?? null,
|
|
537
|
+
disabled: settings.phase !== "ready",
|
|
538
|
+
translate: t,
|
|
539
|
+
onSave: settings.savePanelSections
|
|
540
|
+
}),
|
|
541
|
+
h(ContextEnhancementEditor, {
|
|
542
|
+
config: settings.record?.contextEnhancement ?? null,
|
|
543
|
+
disabled: settings.phase !== "ready",
|
|
544
|
+
translate: t,
|
|
545
|
+
onSave: settings.saveContextEnhancement,
|
|
546
|
+
// 「指定用户」用平台 userId(route.userId),不是投递目标 id。
|
|
547
|
+
conversations: sessions
|
|
548
|
+
}),
|
|
549
|
+
// 渠道无关面板:目标清单与测试发送都由 hub 的共享组件负责。
|
|
550
|
+
h(DeliveryTargetsEditor, {
|
|
551
|
+
chatUi,
|
|
552
|
+
connection,
|
|
553
|
+
channelId: CHANNEL_ID,
|
|
554
|
+
botId: account.botId
|
|
555
|
+
})
|
|
556
|
+
);
|
|
557
|
+
}
|
|
558
|
+
function WeixinPage(props) {
|
|
559
|
+
const { chatUi, connection, translate, botId = null } = props;
|
|
560
|
+
const t = typeof translate === "function" ? translate : (key) => key;
|
|
561
|
+
const [state, setState] = React.useState({ phase: "idle", value: null, error: null });
|
|
562
|
+
const load = React.useCallback(async () => {
|
|
563
|
+
setState((current) => ({ ...current, phase: "loading" }));
|
|
564
|
+
try {
|
|
565
|
+
const result = await chatUi.callChannelRpc(connection, CHANNEL_ID, "connection.status", {});
|
|
566
|
+
setState({ phase: "ready", value: chatUi.unwrapRpc(result), error: null });
|
|
567
|
+
} catch (error) {
|
|
568
|
+
setState({ phase: "error", value: null, error });
|
|
569
|
+
}
|
|
570
|
+
}, [chatUi, connection]);
|
|
571
|
+
React.useEffect(() => {
|
|
572
|
+
void load();
|
|
573
|
+
}, [load]);
|
|
574
|
+
const { EmptyState } = chatUi.components;
|
|
575
|
+
const allAccounts = state.value?.accounts ?? state.value?.bots ?? [];
|
|
576
|
+
const scoped = Boolean(botId);
|
|
577
|
+
const accounts = scoped ? allAccounts.filter((account) => (account?.botId ?? account?.id ?? null) === botId) : [];
|
|
578
|
+
const missing = scoped && state.phase === "ready" && accounts.length === 0;
|
|
579
|
+
return h(
|
|
580
|
+
React.Fragment,
|
|
581
|
+
null,
|
|
582
|
+
// 读状态失败照旧要显示:这个页面上不能只留一行日志。
|
|
583
|
+
state.error ? h("p", { className: "dchat-error", role: "alert" }, state.error.message) : null,
|
|
584
|
+
scoped ? null : h(QrLogin, { chatUi, connection, translate: t, onDone: load }),
|
|
585
|
+
missing ? h(EmptyState, {
|
|
586
|
+
title: t("\u627E\u4E0D\u5230\u8FD9\u4E2A\u673A\u5668\u4EBA"),
|
|
587
|
+
description: `${t("\u5B83\u4E0D\u5728\u5F53\u524D\u6E20\u9053\u7684\u540D\u5355\u91CC\uFF08\u53EF\u80FD\u5DF2\u88AB\u79FB\u9664\uFF0C\u6216 Host \u4E0E\u9875\u9762\u7248\u672C\u4E0D\u4E00\u81F4\uFF09")}\uFF1A${botId}`
|
|
588
|
+
}) : null,
|
|
589
|
+
scoped ? accounts.map((account) => h(AccountCard, {
|
|
590
|
+
key: account.botId,
|
|
591
|
+
account,
|
|
592
|
+
chatUi,
|
|
593
|
+
connection,
|
|
594
|
+
translate: t,
|
|
595
|
+
onChanged: load
|
|
596
|
+
})) : null
|
|
597
|
+
);
|
|
598
|
+
}
|
|
599
|
+
function apply(ctx) {
|
|
600
|
+
ctx.effect(
|
|
601
|
+
() => ctx.locale.register(LOCALE_NAMESPACE, { zh, en }),
|
|
602
|
+
"dsh-chat-weixin: \u53CC\u8BED\u6587\u6848"
|
|
603
|
+
);
|
|
604
|
+
const t = typeof ctx.locale?.bind === "function" ? ctx.locale.bind(LOCALE_NAMESPACE) : (key) => zh[key] ?? key;
|
|
605
|
+
ctx.effect(() => ctx.chatChannels.register({
|
|
606
|
+
id: CHANNEL_ID,
|
|
607
|
+
order: 10,
|
|
608
|
+
label: () => t("\u5FAE\u4FE1"),
|
|
609
|
+
// 侧边栏会话行的渠道徽标(微信品牌绿)。
|
|
610
|
+
// 图标(SVG 字符串):左栏渠道卡片与侧边栏会话行徽标共用同一份,避免两处画风不一致。
|
|
611
|
+
// 出处见 THIRD_PARTY_NOTICES.md。
|
|
612
|
+
icon: { svg: '<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="16" height="16"><path fill="#07C160" d="M8.691 2.188C3.891 2.188 0 5.476 0 9.53c0 2.212 1.17 4.203 3.002 5.55a.59.59 0 0 1 .213.665l-.39 1.48c-.019.07-.048.141-.048.213 0 .163.13.295.29.295a.326.326 0 0 0 .167-.054l1.903-1.114a.864.864 0 0 1 .717-.098 10.16 10.16 0 0 0 2.837.403c.276 0 .543-.027.811-.05-.857-2.578.157-4.972 1.932-6.446 1.703-1.415 3.882-1.98 5.853-1.838-.576-3.583-4.196-6.348-8.596-6.348zM5.785 5.991c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178A1.17 1.17 0 0 1 4.623 7.17c0-.651.52-1.18 1.162-1.18zm5.813 0c.642 0 1.162.529 1.162 1.18a1.17 1.17 0 0 1-1.162 1.178 1.17 1.17 0 0 1-1.162-1.178c0-.651.52-1.18 1.162-1.18zm5.34 2.867c-1.797-.052-3.746.512-5.28 1.786-1.72 1.428-2.687 3.72-1.78 6.22.942 2.453 3.666 4.229 6.884 4.229.826 0 1.622-.12 2.361-.336a.722.722 0 0 1 .598.082l1.584.926a.272.272 0 0 0 .14.047c.134 0 .24-.111.24-.247 0-.06-.023-.12-.038-.177l-.327-1.233a.582.582 0 0 1-.023-.156.49.49 0 0 1 .201-.398C23.024 18.48 24 16.82 24 14.98c0-3.21-2.931-5.837-6.656-6.088V8.89c-.135-.01-.27-.027-.407-.03zm-2.53 3.274c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.97-.982zm4.844 0c.535 0 .969.44.969.982a.976.976 0 0 1-.969.983.976.976 0 0 1-.969-.983c0-.542.434-.982.969-.982z"/></svg>' },
|
|
613
|
+
sessionBadge: { text: "\u5FAE", color: "#07c160" },
|
|
614
|
+
capabilities: {
|
|
615
|
+
groups: false,
|
|
616
|
+
note: t("\u4EC5\u79C1\u804A"),
|
|
617
|
+
// 微信的渠道设置页就是「扫码接入」:入口名与空状态说明都由渠道给(hub 不认识这些语义)。
|
|
618
|
+
setup: { label: t("\u626B\u7801\u63A5\u5165"), hint: t("\u70B9\u300C\u626B\u7801\u63A5\u5165\u300D\u7528\u624B\u673A\u5FAE\u4FE1\u626B\u7801\u7ED1\u5B9A\u65B0\u8D26\u53F7\u3002") }
|
|
619
|
+
}
|
|
620
|
+
}), "dsh-chat-weixin: \u6E20\u9053\u5143\u6570\u636E");
|
|
621
|
+
ctx.effect(() => ctx.slots.inject(PAGE_SLOT, () => ctx.slots.register({
|
|
622
|
+
name: PAGE_SLOT,
|
|
623
|
+
key: CHANNEL_ID,
|
|
624
|
+
locale: LOCALE_NAMESPACE,
|
|
625
|
+
inject: () => ({ chatUi: ctx.chatUi, connection: ctx.connection, translate: t })
|
|
626
|
+
}, WeixinPage)), "dsh-chat-weixin: \u6E20\u9053\u8BBE\u7F6E\u9875");
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
return module.exports;
|
|
630
|
+
}
|
|
631
|
+
});
|