@zhin.js/adapter-napcat 3.0.1 → 4.0.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.
Files changed (140) hide show
  1. package/CHANGELOG.md +58 -0
  2. package/README.md +43 -96
  3. package/adapters/napcat.ts +39 -0
  4. package/agent/tools/ai_tts.ts +21 -0
  5. package/agent/tools/del_group_notice.ts +22 -0
  6. package/agent/tools/delete_essence_msg.ts +21 -0
  7. package/agent/tools/delete_friend.ts +20 -0
  8. package/agent/tools/download_file.ts +19 -0
  9. package/agent/tools/forward_single_msg.ts +32 -0
  10. package/agent/tools/get_ai_characters.ts +19 -0
  11. package/agent/tools/get_essence_list.ts +19 -0
  12. package/agent/tools/get_friend_msg_history.ts +20 -0
  13. package/agent/tools/get_group_file_url.ts +21 -0
  14. package/agent/tools/get_group_info_ex.ts +19 -0
  15. package/agent/tools/get_group_msg_history.ts +21 -0
  16. package/agent/tools/get_group_notice.ts +19 -0
  17. package/agent/tools/get_group_root_files.ts +19 -0
  18. package/agent/tools/get_group_shut_list.ts +19 -0
  19. package/agent/tools/get_mini_app_ark.ts +22 -0
  20. package/agent/tools/get_user_status.ts +18 -0
  21. package/agent/tools/group_sign.ts +20 -0
  22. package/agent/tools/mark_msg_as_read.ts +19 -0
  23. package/agent/tools/ocr_image.ts +18 -0
  24. package/agent/tools/send_forward_msg.ts +31 -0
  25. package/agent/tools/send_group_notice.ts +23 -0
  26. package/agent/tools/send_like.ts +20 -0
  27. package/agent/tools/send_poke.ts +20 -0
  28. package/agent/tools/set_avatar.ts +19 -0
  29. package/agent/tools/set_emoji_reaction.ts +20 -0
  30. package/agent/tools/set_essence_msg.ts +21 -0
  31. package/agent/tools/set_group_portrait.ts +22 -0
  32. package/agent/tools/set_online_status.ts +20 -0
  33. package/agent/tools/set_profile.ts +23 -0
  34. package/agent/tools/set_signature.ts +19 -0
  35. package/agent/tools/set_title.ts +23 -0
  36. package/agent/tools/translate.ts +18 -0
  37. package/agent/tools/upload_group_file.ts +23 -0
  38. package/lib/http-endpoint.d.ts +26 -0
  39. package/lib/http-endpoint.js +147 -0
  40. package/lib/index.d.ts +11 -21
  41. package/lib/index.js +10 -59
  42. package/lib/napcat-agent-deps.d.ts +51 -0
  43. package/lib/napcat-agent-deps.js +33 -0
  44. package/lib/napcat-inbound.d.ts +12 -5
  45. package/lib/napcat-inbound.js +28 -13
  46. package/lib/onebot-get-msg.d.ts +13 -2
  47. package/lib/onebot-get-msg.js +0 -1
  48. package/lib/protocol.d.ts +151 -0
  49. package/lib/protocol.js +217 -0
  50. package/lib/webhook.d.ts +2 -0
  51. package/lib/webhook.js +14 -0
  52. package/lib/ws-endpoint.d.ts +61 -0
  53. package/lib/ws-endpoint.js +357 -0
  54. package/lib/ws-transport.d.ts +13 -0
  55. package/lib/ws-transport.js +75 -0
  56. package/lib/ws-types.d.ts +17 -0
  57. package/lib/ws-types.js +1 -0
  58. package/lib/wss-auth.d.ts +2 -0
  59. package/lib/wss-auth.js +16 -0
  60. package/lib/wss-endpoint.d.ts +25 -0
  61. package/lib/wss-endpoint.js +157 -0
  62. package/package.json +48 -32
  63. package/plugin.ts +13 -0
  64. package/schema.json +48 -0
  65. package/src/http-endpoint.ts +197 -0
  66. package/src/index.ts +66 -82
  67. package/src/napcat-agent-deps.ts +95 -0
  68. package/src/napcat-inbound.ts +34 -10
  69. package/src/onebot-get-msg.ts +8 -2
  70. package/src/protocol.ts +373 -0
  71. package/src/webhook.ts +16 -0
  72. package/src/ws-endpoint.ts +452 -0
  73. package/src/ws-transport.ts +105 -0
  74. package/src/ws-types.ts +20 -0
  75. package/src/wss-auth.ts +17 -0
  76. package/src/wss-endpoint.ts +205 -0
  77. package/client/NapCatManagement.tsx +0 -113
  78. package/client/index.tsx +0 -11
  79. package/client/tsconfig.json +0 -7
  80. package/client/utils/api.ts +0 -30
  81. package/dist/index.js +0 -27
  82. package/lib/adapter.d.ts +0 -36
  83. package/lib/adapter.d.ts.map +0 -1
  84. package/lib/adapter.js +0 -102
  85. package/lib/adapter.js.map +0 -1
  86. package/lib/agent-prompt.d.ts +0 -3
  87. package/lib/agent-prompt.d.ts.map +0 -1
  88. package/lib/agent-prompt.js +0 -106
  89. package/lib/agent-prompt.js.map +0 -1
  90. package/lib/endpoint-base.d.ts +0 -144
  91. package/lib/endpoint-base.d.ts.map +0 -1
  92. package/lib/endpoint-base.js +0 -341
  93. package/lib/endpoint-base.js.map +0 -1
  94. package/lib/endpoint-http.d.ts +0 -17
  95. package/lib/endpoint-http.d.ts.map +0 -1
  96. package/lib/endpoint-http.js +0 -106
  97. package/lib/endpoint-http.js.map +0 -1
  98. package/lib/endpoint-ws-client.d.ts +0 -20
  99. package/lib/endpoint-ws-client.d.ts.map +0 -1
  100. package/lib/endpoint-ws-client.js +0 -139
  101. package/lib/endpoint-ws-client.js.map +0 -1
  102. package/lib/endpoint-ws-server.d.ts +0 -20
  103. package/lib/endpoint-ws-server.d.ts.map +0 -1
  104. package/lib/endpoint-ws-server.js +0 -137
  105. package/lib/endpoint-ws-server.js.map +0 -1
  106. package/lib/index.d.ts.map +0 -1
  107. package/lib/index.js.map +0 -1
  108. package/lib/napcat-inbound.d.ts.map +0 -1
  109. package/lib/napcat-inbound.js.map +0 -1
  110. package/lib/onebot-get-msg.d.ts.map +0 -1
  111. package/lib/onebot-get-msg.js.map +0 -1
  112. package/lib/routes.d.ts +0 -4
  113. package/lib/routes.d.ts.map +0 -1
  114. package/lib/routes.js +0 -61
  115. package/lib/routes.js.map +0 -1
  116. package/lib/segment-mapper.d.ts +0 -2
  117. package/lib/segment-mapper.d.ts.map +0 -1
  118. package/lib/segment-mapper.js +0 -2
  119. package/lib/segment-mapper.js.map +0 -1
  120. package/lib/tools.d.ts +0 -8
  121. package/lib/tools.d.ts.map +0 -1
  122. package/lib/tools.js +0 -605
  123. package/lib/tools.js.map +0 -1
  124. package/lib/types.d.ts +0 -275
  125. package/lib/types.d.ts.map +0 -1
  126. package/lib/types.js +0 -6
  127. package/lib/types.js.map +0 -1
  128. package/plugin.yml +0 -3
  129. package/src/adapter.ts +0 -109
  130. package/src/agent-prompt.ts +0 -116
  131. package/src/endpoint-base.ts +0 -386
  132. package/src/endpoint-http.ts +0 -95
  133. package/src/endpoint-ws-client.ts +0 -137
  134. package/src/endpoint-ws-server.ts +0 -136
  135. package/src/routes.ts +0 -61
  136. package/src/segment-mapper.ts +0 -1
  137. package/src/tools.ts +0 -632
  138. package/src/types.ts +0 -266
  139. /package/{skills/napcat → agent}/PERMITS.md +0 -0
  140. /package/{skills/napcat/SKILL.md → agent/skills/napcat.md} +0 -0
@@ -0,0 +1,205 @@
1
+ /**
2
+ * NapCat reverse WSS endpoint — accepts inbound WebSocket from NapCat.
3
+ */
4
+ import { clearInterval } from 'node:timers';
5
+ import type { EndpointInstance } from '@zhin.js/adapter';
6
+ import type { MessageGateway } from '@zhin.js/core/runtime';
7
+ import type { HttpHost, WsConnection } from '@zhin.js/host-http';
8
+ import { formatCompact, getLogger } from '@zhin.js/logger';
9
+ import type { CapabilityId } from '@zhin.js/plugin-runtime';
10
+ import { registerNapcatAgentEndpoint } from './napcat-agent-deps.js';
11
+ import {
12
+ InboundMessageDeduper,
13
+ isNapCatBotMentioned,
14
+ isSelfMessage,
15
+ normalizeMessage,
16
+ } from './napcat-inbound.js';
17
+ import {
18
+ buildSendAction,
19
+ formatInboundContent,
20
+ formatInboundTarget,
21
+ formatOutboundSegments,
22
+ isMessageEvent,
23
+ senderNickname,
24
+ senderUserId,
25
+ type NapCatEvent,
26
+ type NapCatWssConfig,
27
+ } from './protocol.js';
28
+ import {
29
+ callNapCatWsAction,
30
+ handleNapCatWsMessage,
31
+ rejectAllPending,
32
+ startNapCatHeartbeat,
33
+ } from './ws-transport.js';
34
+ import { NapCatWsEndpoint } from './ws-endpoint.js';
35
+ import {
36
+ type NapCatPendingAction,
37
+ type NapCatWsSocket,
38
+ } from './ws-types.js';
39
+ import { verifyNapCatAccessToken } from './wss-auth.js';
40
+
41
+ const logger = getLogger('napcat');
42
+
43
+ export interface NapCatWssEndpointOptions {
44
+ readonly id: CapabilityId;
45
+ readonly gateway: MessageGateway;
46
+ readonly http: HttpHost;
47
+ readonly config: NapCatWssConfig;
48
+ }
49
+
50
+ export class NapCatWssEndpoint implements EndpointInstance {
51
+ readonly #options: NapCatWssEndpointOptions;
52
+ readonly #inboundDeduper = new InboundMessageDeduper();
53
+ #ws?: NapCatWsSocket;
54
+ #wsRelease?: () => void;
55
+ #heartbeatTimer?: NodeJS.Timeout;
56
+ #requestId = { value: 0 };
57
+ #pending = new Map<string, NapCatPendingAction>();
58
+ #open = false;
59
+ #started = false;
60
+ #unregisterAgent?: () => void;
61
+
62
+ constructor(options: NapCatWssEndpointOptions) {
63
+ this.#options = options;
64
+ }
65
+
66
+ async start(): Promise<void> {
67
+ if (this.#started) return;
68
+ this.#started = true;
69
+ this.#unregisterAgent = registerNapcatAgentEndpoint(
70
+ this.#options.config.name,
71
+ this as unknown as NapCatWsEndpoint,
72
+ );
73
+ const handle = this.#options.http.ws(this.#options.config.path);
74
+ this.#wsRelease = handle.onConnection((connection) => {
75
+ this.#acceptConnection(connection);
76
+ });
77
+ logger.info(formatCompact({
78
+ op: 'listen',
79
+ endpoint: this.#options.config.name,
80
+ mode: 'wss',
81
+ path: this.#options.config.path,
82
+ }));
83
+ }
84
+
85
+ open(): void {
86
+ this.#open = true;
87
+ }
88
+
89
+ close(): void {
90
+ this.#open = false;
91
+ }
92
+
93
+ async stop(): Promise<void> {
94
+ this.#open = false;
95
+ this.#unregisterAgent?.();
96
+ this.#unregisterAgent = undefined;
97
+ this.#wsRelease?.();
98
+ this.#wsRelease = undefined;
99
+ if (this.#heartbeatTimer) {
100
+ clearInterval(this.#heartbeatTimer);
101
+ this.#heartbeatTimer = undefined;
102
+ }
103
+ rejectAllPending(this.#pending);
104
+ this.#inboundDeduper.clear();
105
+ if (this.#ws) {
106
+ try {
107
+ this.#ws.close();
108
+ } catch {
109
+ /* ignore */
110
+ }
111
+ this.#ws = undefined;
112
+ }
113
+ this.#started = false;
114
+ }
115
+
116
+ async send({ target, payload }: { readonly target: string; readonly payload: unknown }): Promise<string> {
117
+ const message = formatOutboundSegments(payload);
118
+ const { action, params } = buildSendAction(target, message);
119
+ const data = await this.callApi(action, params) as { message_id?: number | string } | undefined;
120
+ return data?.message_id != null ? String(data.message_id) : '';
121
+ }
122
+
123
+ callApi(action: string, params: Record<string, unknown> = {}): Promise<unknown> {
124
+ return callNapCatWsAction(this.#ws, this.#pending, this.#requestId, action, params);
125
+ }
126
+
127
+ admit(ev: NapCatEvent): void {
128
+ if (!this.#open || !isMessageEvent(ev)) return;
129
+ if (isSelfMessage(ev)) return;
130
+ const msgId = String(ev.message_id);
131
+ if (!this.#inboundDeduper.shouldProcess(msgId)) return;
132
+ if (Array.isArray(ev.message) || typeof ev.message === 'string') {
133
+ ev = { ...ev, message: normalizeMessage(ev.message) };
134
+ }
135
+ const target = formatInboundTarget(ev);
136
+ const nickname = senderNickname(ev);
137
+ const mentioned = isNapCatBotMentioned(ev);
138
+ void this.#options.gateway.receive({
139
+ adapter: this.#options.id,
140
+ target,
141
+ content: formatInboundContent(ev),
142
+ sender: senderUserId(ev),
143
+ id: msgId,
144
+ metadata: Object.freeze({
145
+ message_type: ev.message_type,
146
+ user_id: ev.user_id != null ? String(ev.user_id) : undefined,
147
+ group_id: ev.group_id != null ? String(ev.group_id) : undefined,
148
+ endpoint: this.#options.config.name,
149
+ time: ev.time,
150
+ self_id: ev.self_id != null ? String(ev.self_id) : undefined,
151
+ role: ev.sender?.role,
152
+ ...(nickname ? { nickname } : {}),
153
+ ...(mentioned ? { mentioned: true } : {}),
154
+ }),
155
+ }).catch((err) => {
156
+ logger.warn(formatCompact({
157
+ op: 'napcat_gateway_receive_failed',
158
+ target,
159
+ error: err instanceof Error ? err.message : String(err),
160
+ }));
161
+ });
162
+ }
163
+
164
+ #acceptConnection(connection: WsConnection): void {
165
+ if (!verifyNapCatAccessToken(this.#options.config.access_token, connection.request)) {
166
+ connection.socket.close(4003, 'Unauthorized');
167
+ return;
168
+ }
169
+ const socket = connection.socket as unknown as NapCatWsSocket;
170
+ if (this.#ws) {
171
+ try {
172
+ this.#ws.close();
173
+ } catch {
174
+ /* ignore */
175
+ }
176
+ }
177
+ this.#ws = socket;
178
+ this.#heartbeatTimer = startNapCatHeartbeat(
179
+ this.#ws,
180
+ this.#options.config.heartbeat_interval,
181
+ this.#heartbeatTimer,
182
+ );
183
+ socket.on('message', (data) => {
184
+ handleNapCatWsMessage(data, {
185
+ endpointName: this.#options.config.name,
186
+ pending: this.#pending,
187
+ admit: (event) => this.admit(event),
188
+ });
189
+ });
190
+ socket.on('close', () => {
191
+ if (this.#ws === socket) {
192
+ this.#ws = undefined;
193
+ if (this.#heartbeatTimer) {
194
+ clearInterval(this.#heartbeatTimer);
195
+ this.#heartbeatTimer = undefined;
196
+ }
197
+ }
198
+ });
199
+ logger.debug(formatCompact({
200
+ endpoint: this.#options.config.name,
201
+ mode: 'wss',
202
+ peer: connection.request.socket.remoteAddress,
203
+ }));
204
+ }
205
+ }
@@ -1,113 +0,0 @@
1
- import { useCallback, useEffect, useState } from "react";
2
- import { Bot, Users, RefreshCw, Wifi, WifiOff, Loader2, Activity } from "lucide-react";
3
- import { apiFetch } from "./utils/api";
4
-
5
- interface EndpointRow {
6
- name: string;
7
- connected: boolean;
8
- connection: string;
9
- groupCount: number;
10
- friendCount: number;
11
- status: string;
12
- }
13
-
14
- export default function NapCatManagement() {
15
- const [endpoints, setEndpoints] = useState<EndpointRow[]>([]);
16
- const [loading, setLoading] = useState(true);
17
- const [err, setErr] = useState<string | null>(null);
18
-
19
- const loadBots = useCallback(async () => {
20
- setLoading(true);
21
- setErr(null);
22
- try {
23
- const res = await apiFetch("/api/napcat/endpoints");
24
- const json = (await res.json()) as { success?: boolean; data?: EndpointRow[]; message?: string };
25
- if (!res.ok || !json.success) throw new Error(json.message || "加载失败");
26
- setEndpoints(Array.isArray(json.data) ? json.data : []);
27
- } catch (e) {
28
- setErr((e as Error).message);
29
- setEndpoints([]);
30
- } finally {
31
- setLoading(false);
32
- }
33
- }, []);
34
-
35
- useEffect(() => {
36
- void loadBots();
37
- }, [loadBots]);
38
-
39
- const connectionLabel = (c: string) => {
40
- switch (c) {
41
- case 'ws': return '正向 WS';
42
- case 'wss': return '反向 WS';
43
- case 'http': return 'HTTP';
44
- default: return c;
45
- }
46
- };
47
-
48
- return (
49
- <div className="p-6 max-w-5xl mx-auto space-y-5">
50
- <div className="flex items-center justify-between">
51
- <div>
52
- <h1 className="text-2xl font-bold flex items-center gap-2">
53
- <Bot className="w-6 h-6" /> NapCat 管理
54
- </h1>
55
- <p className="text-sm text-muted-foreground mt-1">
56
- NapCatQQ 机器人概览(OneBot11 + go-cqhttp + NapCat 扩展)
57
- </p>
58
- </div>
59
- <button
60
- onClick={loadBots}
61
- disabled={loading}
62
- className="flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm"
63
- >
64
- <RefreshCw className={`w-4 h-4 ${loading ? "animate-spin" : ""}`} /> 刷新
65
- </button>
66
- </div>
67
-
68
- {err && (
69
- <div className="p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800">
70
- {err}
71
- </div>
72
- )}
73
- {loading ? (
74
- <div className="flex justify-center py-12">
75
- <Loader2 className="w-6 h-6 animate-spin text-blue-500" />
76
- </div>
77
- ) : endpoints.length === 0 ? (
78
- <div className="text-center text-muted-foreground py-12">
79
- 暂无 NapCat Endpoint 实例
80
- </div>
81
- ) : (
82
- <div className="grid gap-4 md:grid-cols-2">
83
- {endpoints.map((endpoint) => (
84
- <div key={endpoint.name} className="border rounded-lg p-4 bg-card shadow-sm">
85
- <div className="flex items-center justify-between mb-3">
86
- <span className="font-medium text-lg">{endpoint.name}</span>
87
- {endpoint.connected ? (
88
- <span className="flex items-center gap-1 text-green-600 text-sm">
89
- <Wifi className="w-4 h-4" /> 在线
90
- </span>
91
- ) : (
92
- <span className="flex items-center gap-1 text-gray-400 text-sm">
93
- <WifiOff className="w-4 h-4" /> 离线
94
- </span>
95
- )}
96
- </div>
97
- <div className="space-y-2 text-sm text-muted-foreground">
98
- <div className="flex items-center gap-1.5">
99
- <Users className="w-3.5 h-3.5" />
100
- 群 {endpoint.groupCount} · 好友 {endpoint.friendCount}
101
- </div>
102
- <div className="flex items-center gap-1.5">
103
- <Activity className="w-3.5 h-3.5" />
104
- 连接方式 {connectionLabel(endpoint.connection)} · {endpoint.status}
105
- </div>
106
- </div>
107
- </div>
108
- ))}
109
- </div>
110
- )}
111
- </div>
112
- );
113
- }
package/client/index.tsx DELETED
@@ -1,11 +0,0 @@
1
- import type { PluginRegisterHostApi } from '@zhin.js/contract';
2
- import NapCatManagement from './NapCatManagement';
3
-
4
- export function register(api: PluginRegisterHostApi) {
5
- api.addRoute({
6
- path: '/console/napcat',
7
- name: 'NapCat管理',
8
- element: api.React.createElement(NapCatManagement, { hostReact: api.React }),
9
- });
10
- api.addTool({ id: 'napcat', name: 'NapCat', path: '/console/napcat' });
11
- }
@@ -1,7 +0,0 @@
1
- {
2
- "extends": "../node_modules/@zhin.js/host-api/browser.tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../dist"
5
- },
6
- "include": ["./**/*"]
7
- }
@@ -1,30 +0,0 @@
1
- const TOKEN_KEY = "zhin_api_token";
2
- const API_BASE_KEY = "zhin_api_base";
3
-
4
- export function getApiBase(): string {
5
- const stored = localStorage.getItem(API_BASE_KEY)?.trim();
6
- if (stored) return stored.replace(/\/$/, "");
7
- if (typeof window !== "undefined") return window.location.origin;
8
- return "";
9
- }
10
-
11
- export function getToken(): string | null {
12
- return localStorage.getItem(TOKEN_KEY);
13
- }
14
-
15
- export async function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response> {
16
- const token = getToken();
17
- const headers = new Headers(init?.headers);
18
- if (token) headers.set("Authorization", `Bearer ${token}`);
19
-
20
- const base = getApiBase();
21
- const url =
22
- typeof input === "string" && input.startsWith("/") ? `${base}${input}` : input;
23
-
24
- const res = await fetch(url, { ...init, headers });
25
- if (res.status === 401) {
26
- localStorage.removeItem(TOKEN_KEY);
27
- window.dispatchEvent(new CustomEvent("zhin:auth-required"));
28
- }
29
- return res;
30
- }
package/dist/index.js DELETED
@@ -1,27 +0,0 @@
1
- import{useCallback as ta,useEffect as ua,useState as P}from"react";import{forwardRef as X,createElement as N}from"react";var S=(...a)=>a.filter((e,u,o)=>!!e&&e.trim()!==""&&o.indexOf(e)===u).join(" ").trim();var B=a=>a.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase();var M=a=>a.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,u,o)=>o?o.toUpperCase():u.toLowerCase());var k=a=>{let e=M(a);return e.charAt(0).toUpperCase()+e.slice(1)};import{forwardRef as z,createElement as R}from"react";var g={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};var D=a=>{for(let e in a)if(e.startsWith("aria-")||e==="role"||e==="title")return!0;return!1};import{createContext as W,useContext as E,useMemo as na,createElement as pa}from"react";var V=W({});var F=()=>E(V);var T=z(({color:a,size:e,strokeWidth:u,absoluteStrokeWidth:o,className:s="",children:r,iconNode:i,...h},t)=>{let{size:c=24,strokeWidth:A=2,absoluteStrokeWidth:b=!1,color:U="currentColor",className:O=""}=F()??{},v=o??b?Number(u??A)*24/Number(e??c):u??A;return R("svg",{ref:t,...g,width:e??c??g.width,height:e??c??g.height,stroke:a??U,strokeWidth:v,className:S("lucide",O,s),...!r&&!D(h)&&{"aria-hidden":"true"},...h},[...i.map(([H,G])=>R(H,G)),...Array.isArray(r)?r:[r]])});var d=(a,e)=>{let u=X(({className:o,...s},r)=>N(T,{ref:r,iconNode:e,className:S(`lucide-${B(k(a))}`,`lucide-${a}`,o),...s}));return u.displayName=k(a),u};var K=[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]],p=d("activity",K);var Z=[["path",{d:"M12 8V4H8",key:"hb8ula"}],["rect",{width:"16",height:"12",x:"4",y:"8",rx:"2",key:"enze0r"}],["path",{d:"M2 14h2",key:"vft8re"}],["path",{d:"M20 14h2",key:"4cs60a"}],["path",{d:"M15 13v2",key:"1xurst"}],["path",{d:"M9 13v2",key:"rq6x2g"}]],L=d("bot",Z);var Q=[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]],n=d("loader-circle",Q);var J=[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]],m=d("refresh-cw",J);var _=[["path",{d:"M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2",key:"1yyitq"}],["path",{d:"M16 3.128a4 4 0 0 1 0 7.744",key:"16gr8j"}],["path",{d:"M22 21v-2a4 4 0 0 0-3-3.87",key:"kshegd"}],["circle",{cx:"9",cy:"7",r:"4",key:"nufk8"}]],I=d("users",_);var j=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}],["path",{d:"M5 12.859a10 10 0 0 1 5.17-2.69",key:"1dl1wf"}],["path",{d:"M19 12.859a10 10 0 0 0-2.007-1.523",key:"4k23kn"}],["path",{d:"M2 8.82a15 15 0 0 1 4.177-2.643",key:"1grhjp"}],["path",{d:"M22 8.82a15 15 0 0 0-11.288-3.764",key:"z3jwby"}],["path",{d:"m2 2 20 20",key:"1ooewy"}]],x=d("wifi-off",j);var Y=[["path",{d:"M12 20h.01",key:"zekei9"}],["path",{d:"M2 8.82a15 15 0 0 1 20 0",key:"dnpr2z"}],["path",{d:"M5 12.859a10 10 0 0 1 14 0",key:"1x1e6c"}],["path",{d:"M8.5 16.429a5 5 0 0 1 7 0",key:"1bycff"}]],C=d("wifi",Y);var y="zhin_api_token",$="zhin_api_base";function aa(){let a=localStorage.getItem($)?.trim();return a?a.replace(/\/$/,""):typeof window<"u"?window.location.origin:""}function ea(){return localStorage.getItem(y)}async function q(a,e){let u=ea(),o=new Headers(e?.headers);u&&o.set("Authorization",`Bearer ${u}`);let s=aa(),r=typeof a=="string"&&a.startsWith("/")?`${s}${a}`:a,i=await fetch(r,{...e,headers:o});return i.status===401&&(localStorage.removeItem(y),window.dispatchEvent(new CustomEvent("zhin:auth-required"))),i}import{jsx as l,jsxs as f}from"react/jsx-runtime";function w(){let[a,e]=P([]),[u,o]=P(!0),[s,r]=P(null),i=ta(async()=>{o(!0),r(null);try{let t=await q("/api/napcat/endpoints"),c=await t.json();if(!t.ok||!c.success)throw new Error(c.message||"\u52A0\u8F7D\u5931\u8D25");e(Array.isArray(c.data)?c.data:[])}catch(t){r(t.message),e([])}finally{o(!1)}},[]);ua(()=>{i()},[i]);let h=t=>{switch(t){case"ws":return"\u6B63\u5411 WS";case"wss":return"\u53CD\u5411 WS";case"http":return"HTTP";default:return t}};return f("div",{className:"p-6 max-w-5xl mx-auto space-y-5",children:[f("div",{className:"flex items-center justify-between",children:[f("div",{children:[f("h1",{className:"text-2xl font-bold flex items-center gap-2",children:[l(L,{className:"w-6 h-6"})," NapCat \u7BA1\u7406"]}),l("p",{className:"text-sm text-muted-foreground mt-1",children:"NapCatQQ \u673A\u5668\u4EBA\u6982\u89C8\uFF08OneBot11 + go-cqhttp + NapCat \u6269\u5C55\uFF09"})]}),f("button",{onClick:i,disabled:u,className:"flex items-center gap-1 px-3 py-1.5 rounded bg-blue-500 text-white hover:bg-blue-600 disabled:opacity-50 text-sm",children:[l(m,{className:`w-4 h-4 ${u?"animate-spin":""}`})," \u5237\u65B0"]})]}),s&&l("div",{className:"p-3 bg-red-50 text-red-600 rounded border border-red-200 text-sm dark:bg-red-900/20 dark:text-red-400 dark:border-red-800",children:s}),u?l("div",{className:"flex justify-center py-12",children:l(n,{className:"w-6 h-6 animate-spin text-blue-500"})}):a.length===0?l("div",{className:"text-center text-muted-foreground py-12",children:"\u6682\u65E0 NapCat Endpoint \u5B9E\u4F8B"}):l("div",{className:"grid gap-4 md:grid-cols-2",children:a.map(t=>f("div",{className:"border rounded-lg p-4 bg-card shadow-sm",children:[f("div",{className:"flex items-center justify-between mb-3",children:[l("span",{className:"font-medium text-lg",children:t.name}),t.connected?f("span",{className:"flex items-center gap-1 text-green-600 text-sm",children:[l(C,{className:"w-4 h-4"})," \u5728\u7EBF"]}):f("span",{className:"flex items-center gap-1 text-gray-400 text-sm",children:[l(x,{className:"w-4 h-4"})," \u79BB\u7EBF"]})]}),f("div",{className:"space-y-2 text-sm text-muted-foreground",children:[f("div",{className:"flex items-center gap-1.5",children:[l(I,{className:"w-3.5 h-3.5"}),"\u7FA4 ",t.groupCount," \xB7 \u597D\u53CB ",t.friendCount]}),f("div",{className:"flex items-center gap-1.5",children:[l(p,{className:"w-3.5 h-3.5"}),"\u8FDE\u63A5\u65B9\u5F0F ",h(t.connection)," \xB7 ",t.status]})]})]},t.name))})]})}function te(a){a.addRoute({path:"/console/napcat",name:"NapCat\u7BA1\u7406",element:a.React.createElement(w,{hostReact:a.React})}),a.addTool({id:"napcat",name:"NapCat",path:"/console/napcat"})}export{te as register};
2
- /*! Bundled license information:
3
-
4
- lucide-react/dist/esm/shared/src/utils/mergeClasses.mjs:
5
- lucide-react/dist/esm/shared/src/utils/toKebabCase.mjs:
6
- lucide-react/dist/esm/shared/src/utils/toCamelCase.mjs:
7
- lucide-react/dist/esm/shared/src/utils/toPascalCase.mjs:
8
- lucide-react/dist/esm/defaultAttributes.mjs:
9
- lucide-react/dist/esm/shared/src/utils/hasA11yProp.mjs:
10
- lucide-react/dist/esm/context.mjs:
11
- lucide-react/dist/esm/Icon.mjs:
12
- lucide-react/dist/esm/createLucideIcon.mjs:
13
- lucide-react/dist/esm/icons/activity.mjs:
14
- lucide-react/dist/esm/icons/bot.mjs:
15
- lucide-react/dist/esm/icons/loader-circle.mjs:
16
- lucide-react/dist/esm/icons/refresh-cw.mjs:
17
- lucide-react/dist/esm/icons/users.mjs:
18
- lucide-react/dist/esm/icons/wifi-off.mjs:
19
- lucide-react/dist/esm/icons/wifi.mjs:
20
- lucide-react/dist/esm/lucide-react.mjs:
21
- (**
22
- * @license lucide-react v1.23.0 - ISC
23
- *
24
- * This source code is licensed under the ISC license.
25
- * See the LICENSE file in the root directory of this source tree.
26
- *)
27
- */
package/lib/adapter.d.ts DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * NapCat 适配器:支持正向 WS / 反向 WS / HTTP
3
- */
4
- import { Adapter, Plugin } from 'zhin.js';
5
- import { NapCatWsClient } from './endpoint-ws-client.js';
6
- import { NapCatWsServer } from './endpoint-ws-server.js';
7
- import { NapCatHttpEndpoint } from './endpoint-http.js';
8
- import type { NapCatEndpointConfig } from './types.js';
9
- export type NapCatEndpoint = NapCatWsClient | NapCatWsServer | NapCatHttpEndpoint;
10
- export declare class NapCatAdapter extends Adapter<NapCatEndpoint> {
11
- #private;
12
- static readonly capabilities: readonly ["inbound", "outbound"];
13
- static outboundRichSegmentPolicy: import("zhin.js").OutboundRichSegmentPolicy;
14
- static interactivePolicy: "text";
15
- static aiOutboundCapabilities: {
16
- mentions: boolean;
17
- richSegments: string[];
18
- interactive: "text";
19
- };
20
- static aiOutboundExtensions: import("zhin.js").AiOutboundExtensionDefinition[];
21
- constructor(plugin: Plugin);
22
- createEndpoint(config: NapCatEndpointConfig): NapCatEndpoint;
23
- removeMember(endpointId: string, sceneId: string, userId: string): Promise<boolean>;
24
- muteMember(endpointId: string, sceneId: string, userId: string, duration?: number): Promise<boolean>;
25
- setSceneMuted(endpointId: string, sceneId: string, enable?: boolean): Promise<boolean>;
26
- setModerator(endpointId: string, sceneId: string, userId: string, enable?: boolean): Promise<boolean>;
27
- setMemberNickname(endpointId: string, sceneId: string, userId: string, nickname: string): Promise<boolean>;
28
- renameScene(endpointId: string, sceneId: string, name: string): Promise<any>;
29
- listMembers(endpointId: string, sceneId: string): Promise<{
30
- members: any;
31
- count: any;
32
- }>;
33
- getSceneInfo(endpointId: string, sceneId: string): Promise<any>;
34
- start(): Promise<void>;
35
- }
36
- //# sourceMappingURL=adapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAiB,OAAO,EAAE,MAAM,EAA+E,MAAM,SAAS,CAAC;AAEtI,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,oBAAoB,EAAgE,MAAM,YAAY,CAAC;AAErH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,cAAc,GAAG,kBAAkB,CAAC;AAElF,qBAAa,aAAc,SAAQ,OAAO,CAAC,cAAc,CAAC;;IACxD,gBAAyB,YAAY,mCAAoC;IACzE,OAAgB,yBAAyB,8CAAwC;IACjF,OAAgB,iBAAiB,EAAG,MAAM,CAAU;IACpD,OAAgB,sBAAsB;;;;MAIpC;IACF,OAAgB,oBAAoB,oDAA2C;gBAInE,MAAM,EAAE,MAAM;IAI1B,cAAc,CAAC,MAAM,EAAE,oBAAoB,GAAG,cAAc;IAkBtD,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAMhE,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAM;IAM9E,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,UAAO;IAMhE,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAO;IAM/E,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAMvF,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAM7D,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;;;;IAY/C,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAMhD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B"}
package/lib/adapter.js DELETED
@@ -1,102 +0,0 @@
1
- /**
2
- * NapCat 适配器:支持正向 WS / 反向 WS / HTTP
3
- */
4
- import { Adapter, OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL, ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION } from 'zhin.js';
5
- import { NapCatWsClient } from './endpoint-ws-client.js';
6
- import { NapCatWsServer } from './endpoint-ws-server.js';
7
- import { NapCatHttpEndpoint } from './endpoint-http.js';
8
- export class NapCatAdapter extends Adapter {
9
- static capabilities = ['inbound', 'outbound'];
10
- static outboundRichSegmentPolicy = OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL;
11
- static interactivePolicy = 'text';
12
- static aiOutboundCapabilities = {
13
- mentions: true,
14
- richSegments: ['qrcode', 'html', 'markdown', 'tts'],
15
- interactive: 'text',
16
- };
17
- static aiOutboundExtensions = [ONEBOT_KEYBOARD_AI_OUTBOUND_EXTENSION];
18
- #router;
19
- constructor(plugin) {
20
- super(plugin, 'napcat', []);
21
- }
22
- createEndpoint(config) {
23
- const connection = config.connection ?? 'ws';
24
- switch (connection) {
25
- case 'ws':
26
- return new NapCatWsClient(this, config);
27
- case 'wss':
28
- if (!this.#router)
29
- throw new Error('NapCat connection: wss requires router. Enable @zhin.js/host-router first.');
30
- return new NapCatWsServer(this, this.#router, config);
31
- case 'http':
32
- if (!this.#router)
33
- throw new Error('NapCat connection: http requires router. Enable @zhin.js/host-router first.');
34
- return new NapCatHttpEndpoint(this, this.#router, config);
35
- default:
36
- throw new Error(`Unknown NapCat connection: ${connection}`);
37
- }
38
- }
39
- // ── 群管理接口(ISceneManagement 适配)──────────────────────────
40
- async removeMember(endpointId, sceneId, userId) {
41
- const endpoint = this.endpoints.get(endpointId);
42
- if (!endpoint)
43
- throw new Error(`Endpoint ${endpointId} not found`);
44
- return endpoint.kickMember(Number(sceneId), Number(userId));
45
- }
46
- async muteMember(endpointId, sceneId, userId, duration = 600) {
47
- const endpoint = this.endpoints.get(endpointId);
48
- if (!endpoint)
49
- throw new Error(`Endpoint ${endpointId} not found`);
50
- return endpoint.muteMember(Number(sceneId), Number(userId), duration);
51
- }
52
- async setSceneMuted(endpointId, sceneId, enable = true) {
53
- const endpoint = this.endpoints.get(endpointId);
54
- if (!endpoint)
55
- throw new Error(`Endpoint ${endpointId} not found`);
56
- return endpoint.muteAll(Number(sceneId), enable);
57
- }
58
- async setModerator(endpointId, sceneId, userId, enable = true) {
59
- const endpoint = this.endpoints.get(endpointId);
60
- if (!endpoint)
61
- throw new Error(`Endpoint ${endpointId} not found`);
62
- return endpoint.setAdmin(Number(sceneId), Number(userId), enable);
63
- }
64
- async setMemberNickname(endpointId, sceneId, userId, nickname) {
65
- const endpoint = this.endpoints.get(endpointId);
66
- if (!endpoint)
67
- throw new Error(`Endpoint ${endpointId} not found`);
68
- return endpoint.setCard(Number(sceneId), Number(userId), nickname);
69
- }
70
- async renameScene(endpointId, sceneId, name) {
71
- const endpoint = this.endpoints.get(endpointId);
72
- if (!endpoint)
73
- throw new Error(`Endpoint ${endpointId} not found`);
74
- return endpoint.setGroupName(Number(sceneId), name);
75
- }
76
- async listMembers(endpointId, sceneId) {
77
- const endpoint = this.endpoints.get(endpointId);
78
- if (!endpoint)
79
- throw new Error(`Endpoint ${endpointId} not found`);
80
- const members = await endpoint.getMemberList(Number(sceneId));
81
- return {
82
- members: members.map((m) => ({
83
- user_id: m.user_id, nickname: m.nickname, card: m.card, role: m.role, title: m.title,
84
- })),
85
- count: members.length,
86
- };
87
- }
88
- async getSceneInfo(endpointId, sceneId) {
89
- const endpoint = this.endpoints.get(endpointId);
90
- if (!endpoint)
91
- throw new Error(`Endpoint ${endpointId} not found`);
92
- return endpoint.getGroupInfo(Number(sceneId));
93
- }
94
- async start() {
95
- this.#router = this.plugin.inject('router');
96
- this.plugin.useContext('router', (router) => {
97
- this.#router = router;
98
- });
99
- await super.start();
100
- }
101
- }
102
- //# sourceMappingURL=adapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../src/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import type { AgentPromptContributor } from 'zhin.js';
2
- export declare function createNapCatAgentPromptContributor(): AgentPromptContributor;
3
- //# sourceMappingURL=agent-prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-prompt.d.ts","sourceRoot":"","sources":["../src/agent-prompt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,sBAAsB,EAGvB,MAAM,SAAS,CAAC;AAwEjB,wBAAgB,kCAAkC,IAAI,sBAAsB,CAsC3E"}