@zhin.js/client 1.1.4 → 1.1.5
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/README.md +89 -433
- package/client/agent-stream.ts +121 -0
- package/client/bootstrap/loadConsoleEntries.test.ts +28 -2
- package/client/bootstrap/loadConsoleEntries.ts +40 -8
- package/client/console-events.ts +37 -0
- package/client/console-utils/remoteApi.test.ts +91 -0
- package/client/console-utils/remoteApi.ts +47 -2
- package/client/index.ts +75 -19
- package/client/mediaSrc.test.ts +49 -0
- package/client/mediaSrc.ts +84 -11
- package/client/message-content/MarkdownContent.tsx +128 -0
- package/client/message-content/markdown.test.ts +48 -0
- package/client/message-content/markdown.ts +247 -0
- package/client/persistence/idb-store.test.ts +139 -0
- package/client/persistence/idb-store.ts +43 -21
- package/client/runtime/index.ts +1 -1
- package/client/segments.test.ts +16 -0
- package/client/segments.ts +39 -0
- package/client/types.ts +5 -5
- package/client/websocket/hooks.test.ts +21 -0
- package/client/websocket/hooks.ts +56 -27
- package/client/websocket/index.ts +6 -1
- package/client/websocket/manager.test.ts +349 -0
- package/client/websocket/manager.ts +245 -54
- package/client/websocket/remote-settings.ts +25 -3
- package/client/websocket/types.ts +5 -0
- package/client/workroom/WorkroomRunsPage.tsx +355 -0
- package/client/workroom/registerWorkroomConsole.test.ts +26 -0
- package/client/workroom/registerWorkroomConsole.ts +17 -0
- package/dist/agent-stream.d.ts +17 -0
- package/dist/agent-stream.d.ts.map +1 -0
- package/dist/agent-stream.js +73 -0
- package/dist/agent-stream.js.map +1 -0
- package/dist/bootstrap/loadConsoleEntries.d.ts +10 -1
- package/dist/bootstrap/loadConsoleEntries.d.ts.map +1 -1
- package/dist/bootstrap/loadConsoleEntries.js +37 -2
- package/dist/bootstrap/loadConsoleEntries.js.map +1 -1
- package/dist/console-events.d.ts +7 -0
- package/dist/console-events.d.ts.map +1 -0
- package/dist/console-events.js +26 -0
- package/dist/console-events.js.map +1 -0
- package/dist/console-utils/remoteApi.d.ts +2 -0
- package/dist/console-utils/remoteApi.d.ts.map +1 -1
- package/dist/console-utils/remoteApi.js +46 -2
- package/dist/console-utils/remoteApi.js.map +1 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -3
- package/dist/index.js.map +1 -1
- package/dist/mediaSrc.d.ts +1 -1
- package/dist/mediaSrc.d.ts.map +1 -1
- package/dist/mediaSrc.js +91 -11
- package/dist/mediaSrc.js.map +1 -1
- package/dist/message-content/MarkdownContent.d.ts +11 -0
- package/dist/message-content/MarkdownContent.d.ts.map +1 -0
- package/dist/message-content/MarkdownContent.js +68 -0
- package/dist/message-content/MarkdownContent.js.map +1 -0
- package/dist/message-content/markdown.d.ts +47 -0
- package/dist/message-content/markdown.d.ts.map +1 -0
- package/dist/message-content/markdown.js +219 -0
- package/dist/message-content/markdown.js.map +1 -0
- package/dist/persistence/idb-store.d.ts +5 -2
- package/dist/persistence/idb-store.d.ts.map +1 -1
- package/dist/persistence/idb-store.js +31 -20
- package/dist/persistence/idb-store.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.d.ts.map +1 -1
- package/dist/segments.d.ts +9 -0
- package/dist/segments.d.ts.map +1 -0
- package/dist/segments.js +35 -0
- package/dist/segments.js.map +1 -0
- package/dist/types.d.ts +4 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/websocket/hooks.d.ts +9 -0
- package/dist/websocket/hooks.d.ts.map +1 -1
- package/dist/websocket/hooks.js +52 -31
- package/dist/websocket/hooks.js.map +1 -1
- package/dist/websocket/index.d.ts +1 -1
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +1 -1
- package/dist/websocket/index.js.map +1 -1
- package/dist/websocket/manager.d.ts +20 -2
- package/dist/websocket/manager.d.ts.map +1 -1
- package/dist/websocket/manager.js +222 -44
- package/dist/websocket/manager.js.map +1 -1
- package/dist/websocket/remote-settings.d.ts.map +1 -1
- package/dist/websocket/remote-settings.js +27 -3
- package/dist/websocket/remote-settings.js.map +1 -1
- package/dist/websocket/types.d.ts +4 -0
- package/dist/websocket/types.d.ts.map +1 -1
- package/dist/websocket/types.js.map +1 -1
- package/dist/workroom/WorkroomRunsPage.d.ts +2 -0
- package/dist/workroom/WorkroomRunsPage.d.ts.map +1 -0
- package/dist/workroom/WorkroomRunsPage.js +111 -0
- package/dist/workroom/WorkroomRunsPage.js.map +1 -0
- package/dist/workroom/registerWorkroomConsole.d.ts +4 -0
- package/dist/workroom/registerWorkroomConsole.d.ts.map +1 -0
- package/dist/workroom/registerWorkroomConsole.js +16 -0
- package/dist/workroom/registerWorkroomConsole.js.map +1 -0
- package/package.json +18 -8
- package/dist/bootstrap/loadConsoleEntries.test.d.ts +0 -2
- package/dist/bootstrap/loadConsoleEntries.test.d.ts.map +0 -1
- package/dist/bootstrap/loadConsoleEntries.test.js +0 -27
- package/dist/bootstrap/loadConsoleEntries.test.js.map +0 -1
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { getStoredToken, resolveApiUrl } from './websocket/remote-settings.js';
|
|
2
|
+
/** Read a typed page from the Host's bounded Console event journal. */
|
|
3
|
+
export async function fetchConsoleEventHistory(query = {}, options = {}) {
|
|
4
|
+
const params = new URLSearchParams();
|
|
5
|
+
if (query.runtimeId)
|
|
6
|
+
params.set('runtimeId', query.runtimeId);
|
|
7
|
+
if (query.after !== undefined)
|
|
8
|
+
params.set('after', String(query.after));
|
|
9
|
+
if (query.limit !== undefined)
|
|
10
|
+
params.set('limit', String(query.limit));
|
|
11
|
+
const token = getStoredToken();
|
|
12
|
+
const headers = { Accept: 'application/json' };
|
|
13
|
+
if (token)
|
|
14
|
+
headers.Authorization = `Bearer ${token}`;
|
|
15
|
+
const suffix = params.size ? `?${params}` : '';
|
|
16
|
+
const response = await fetch(resolveApiUrl(`/api/events/history${suffix}`), {
|
|
17
|
+
headers,
|
|
18
|
+
signal: options.signal,
|
|
19
|
+
});
|
|
20
|
+
const body = await response.json();
|
|
21
|
+
if (!response.ok || body.success !== true || !body.data) {
|
|
22
|
+
throw new Error(body.error ?? `Console event history failed: HTTP ${response.status}`);
|
|
23
|
+
}
|
|
24
|
+
return body.data;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=console-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"console-events.js","sourceRoot":"","sources":["../client/console-events.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAM/E,uEAAuE;AACvE,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,QAAkC,EAAE,EACpC,UAA2C,EAAE;IAE7C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,IAAI,KAAK,CAAC,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAC9D,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;QAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,MAAM,OAAO,GAA2B,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;IACvE,IAAI,KAAK;QAAE,OAAO,CAAC,aAAa,GAAG,UAAU,KAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,sBAAsB,MAAM,EAAE,CAAC,EAAE;QAC1E,OAAO;QACP,MAAM,EAAE,OAAO,CAAC,MAAM;KACvB,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAI/B,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,sCAAsC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC;AACnB,CAAC"}
|
|
@@ -4,4 +4,6 @@ export declare function resolveApiUrl(path: string): string;
|
|
|
4
4
|
export declare function resolveWebSocketUrl(path: string): string;
|
|
5
5
|
/** fetch with Bearer token; relative paths resolve against {@link getApiBase}. */
|
|
6
6
|
export declare function apiFetch(input: RequestInfo | URL, init?: RequestInit): Promise<Response>;
|
|
7
|
+
/** Typed POST adapter for the canonical Plugin Runtime Console RPC endpoint. */
|
|
8
|
+
export declare function consoleRpc<T>(type: string, data?: Readonly<Record<string, unknown>>): Promise<T>;
|
|
7
9
|
//# sourceMappingURL=remoteApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteApi.d.ts","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"remoteApi.d.ts","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,CAKnC;AAED,wBAAgB,QAAQ,IAAI,MAAM,GAAG,IAAI,CAYxC;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIlD;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKxD;AAED,kFAAkF;AAClF,wBAAsB,QAAQ,CAC5B,KAAK,EAAE,WAAW,GAAG,GAAG,EACxB,IAAI,CAAC,EAAE,WAAW,GACjB,OAAO,CAAC,QAAQ,CAAC,CAoBnB;AAED,gFAAgF;AAChF,wBAAsB,UAAU,CAAC,CAAC,EAChC,IAAI,EAAE,MAAM,EACZ,IAAI,GAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAM,GAC3C,OAAO,CAAC,CAAC,CAAC,CAUZ"}
|
|
@@ -3,13 +3,26 @@ const API_BASE_KEY = "zhin_api_base";
|
|
|
3
3
|
export function getApiBase() {
|
|
4
4
|
const stored = localStorage.getItem(API_BASE_KEY)?.trim();
|
|
5
5
|
if (stored)
|
|
6
|
-
return stored
|
|
6
|
+
return trimTrailingSlash(stored);
|
|
7
7
|
if (typeof window !== "undefined")
|
|
8
8
|
return window.location.origin;
|
|
9
9
|
return "";
|
|
10
10
|
}
|
|
11
11
|
export function getToken() {
|
|
12
|
-
|
|
12
|
+
const runtime = getRuntimeToken();
|
|
13
|
+
if (runtime)
|
|
14
|
+
return runtime;
|
|
15
|
+
if (typeof localStorage !== "undefined") {
|
|
16
|
+
const local = localStorage.getItem(TOKEN_KEY)?.trim();
|
|
17
|
+
if (local)
|
|
18
|
+
return local;
|
|
19
|
+
}
|
|
20
|
+
if (typeof sessionStorage !== "undefined") {
|
|
21
|
+
const session = sessionStorage.getItem(TOKEN_KEY)?.trim();
|
|
22
|
+
if (session)
|
|
23
|
+
return session;
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
13
26
|
}
|
|
14
27
|
export function resolveApiUrl(path) {
|
|
15
28
|
const base = getApiBase();
|
|
@@ -33,9 +46,40 @@ export async function apiFetch(input, init) {
|
|
|
33
46
|
: input;
|
|
34
47
|
const res = await fetch(url, { ...init, headers });
|
|
35
48
|
if (res.status === 401) {
|
|
49
|
+
// runtime token(Demo 预置)过期后也必须失效,否则 getToken() 永远优先命中它,
|
|
50
|
+
// local/sessionStorage 清理不掉,造成 401 死循环。
|
|
51
|
+
clearRuntimeToken();
|
|
52
|
+
sessionStorage.removeItem(TOKEN_KEY);
|
|
36
53
|
localStorage.removeItem(TOKEN_KEY);
|
|
37
54
|
window.dispatchEvent(new CustomEvent("zhin:auth-required"));
|
|
38
55
|
}
|
|
39
56
|
return res;
|
|
40
57
|
}
|
|
58
|
+
/** Typed POST adapter for the canonical Plugin Runtime Console RPC endpoint. */
|
|
59
|
+
export async function consoleRpc(type, data = {}) {
|
|
60
|
+
const requestId = Date.now();
|
|
61
|
+
const res = await apiFetch('/api/console/request', {
|
|
62
|
+
method: 'POST',
|
|
63
|
+
headers: { 'Content-Type': 'application/json' },
|
|
64
|
+
body: JSON.stringify({ type, requestId, ...data }),
|
|
65
|
+
});
|
|
66
|
+
const body = await res.json();
|
|
67
|
+
if (!res.ok || !body.success)
|
|
68
|
+
throw new Error(body.error ?? `HTTP ${res.status}`);
|
|
69
|
+
return body.data;
|
|
70
|
+
}
|
|
71
|
+
function trimTrailingSlash(value) {
|
|
72
|
+
return value.endsWith("/") ? value.slice(0, -1) : value;
|
|
73
|
+
}
|
|
74
|
+
function getRuntimeToken() {
|
|
75
|
+
if (typeof window === "undefined")
|
|
76
|
+
return null;
|
|
77
|
+
const token = window.__ZHIN_API_TOKEN;
|
|
78
|
+
return token?.trim() || null;
|
|
79
|
+
}
|
|
80
|
+
function clearRuntimeToken() {
|
|
81
|
+
if (typeof window === "undefined")
|
|
82
|
+
return;
|
|
83
|
+
delete window.__ZHIN_API_TOKEN;
|
|
84
|
+
}
|
|
41
85
|
//# sourceMappingURL=remoteApi.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remoteApi.js","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,gBAAgB,CAAC;AACnC,MAAM,YAAY,GAAG,eAAe,CAAC;AAErC,MAAM,UAAU,UAAU;IACxB,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IAC1D,IAAI,MAAM;QAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"remoteApi.js","sourceRoot":"","sources":["../../client/console-utils/remoteApi.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
export * from "./types";
|
|
2
|
+
export { ENDPOINT_RPC, CONSOLE_EVENT_RECOVERY_GAP_EVENT, ENDPOINT_MANAGEMENT_CAPABILITIES, INBOX_RPC, SIDE_EVENT_PUSH, SIDE_EVENT_RPC, normalizeConsolePushMessage, normalizeConsolePushType, parseConsoleInboxEvent, type ConsoleInboxEvent, type ConsoleInboxEventKind, type ConsoleInboxNoticeRow, type ConsoleInboxNoticesQuery, type ConsoleInboxNoticesResult, type ConsoleEndpointPhase, type ConsoleEndpointSummary, type ConsoleEventActor, type ConsoleEventChannel, type EndpointManagementCapability, parseConsoleSseFrame, type ConsoleEventDelivery, type ConsoleEventData, type ConsoleEndpointEventData, type ConsoleEventEnvelope, type ConsoleEventHistoryPage, type ConsoleEventHistoryQuery, type ConsoleEventPayloadMap, type ConsoleMessageEventData, type ConsoleNoticeEventData, type ConsoleRequestEventData, type KnownConsoleEventType, type KnownConsoleEventEnvelope, type ParsedConsoleSseFrame, } from "@zhin.js/console-protocol";
|
|
3
|
+
export { fetchConsoleEventHistory, type FetchConsoleEventHistoryOptions, } from './console-events.js';
|
|
2
4
|
export { resolveMediaSrc, pickMediaRawUrl, type MediaKind } from "./mediaSrc";
|
|
5
|
+
export { MarkdownContent, CodeBlock, type MarkdownContentProps, } from "./message-content/MarkdownContent.js";
|
|
6
|
+
export { parseMarkdown, parseMarkdownInline, highlightCodeLine, isSafeMarkdownHref, type MarkdownBlock, type MarkdownInline, type CodeToken, type CodeTokenKind, } from "./message-content/markdown.js";
|
|
7
|
+
export { segmentsForImDelivery, segmentsForAgentPanel } from "./segments.js";
|
|
3
8
|
export { app, type ConsoleApp, type AddRouteInput, type AddToolInput, type ConsoleRouteRecord, type RouteTreeNode, type ToolTreeNode, type ConsoleRouteRenderer, } from "./app";
|
|
4
9
|
export * from "./websocket";
|
|
5
|
-
export type { PluginRegisterHostApi, PluginAddRouteInput, PluginAddToolInput, ConsolePluginRegister, ConsoleClientEntry, ConsoleEntriesResponse, ConsoleEntry, ConsoleFileAddEntryInput, RuntimeEnv, } from "@zhin.js/console-types";
|
|
6
|
-
export { DEFAULT_CONSOLE_BASE_PATH, CONSOLE_HOST_REACT_NAMESPACE_KEY, } from "@zhin.js/console-types";
|
|
7
10
|
export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
|
|
8
11
|
export { createRegistryStore, useRegistry, type RegistryStore, } from "./store/createRegistryStore.js";
|
|
9
12
|
export { cn } from "./console-utils/cn.js";
|
|
10
13
|
export { apiFetch, getApiBase, getToken, resolveApiUrl, resolveWebSocketUrl, } from "./console-utils/remoteApi.js";
|
|
11
|
-
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, type CreatePluginRegisterHostApiOptions, type FetchConsoleEntriesOptions, type LoadConsoleEntriesOptions, } from "./bootstrap/loadConsoleEntries.js";
|
|
14
|
+
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, resolveEntryRegister, type CreatePluginRegisterHostApiOptions, type FetchConsoleEntriesOptions, type LoadConsoleEntriesOptions, } from "./bootstrap/loadConsoleEntries.js";
|
|
15
|
+
export { registerWorkroomConsole } from "./workroom/registerWorkroomConsole.js";
|
|
16
|
+
export { default as WorkroomRunsPage } from "./workroom/WorkroomRunsPage.js";
|
|
17
|
+
export { startAgentSession, continueAgentSession, subscribeAgentStream, iterateAgentStreamNdjson, foldAgentStreamNdjson, type AgentStreamClientOptions, type SubscribeAgentStreamOptions, } from "./agent-stream.js";
|
|
12
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,gCAAgC,EAChC,gCAAgC,EAChC,SAAS,EACT,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,oBAAoB,EACpB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAC5B,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,qBAAqB,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wBAAwB,EACxB,KAAK,+BAA+B,GACrC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,EACL,eAAe,EACf,SAAS,EACT,KAAK,oBAAoB,GAC1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,EAClB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,SAAS,EACd,KAAK,aAAa,GACnB,MAAM,+BAA+B,CAAC;AAGvC,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAG7E,OAAO,EACL,GAAG,EACH,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,oBAAoB,GAC1B,MAAM,OAAO,CAAC;AAGf,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,WAAW,EACX,KAAK,aAAa,GACnB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,EACpB,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,2BAA2B,GACjC,MAAM,mBAAmB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,24 @@
|
|
|
1
1
|
// Types
|
|
2
2
|
export * from "./types";
|
|
3
|
+
export { ENDPOINT_RPC, CONSOLE_EVENT_RECOVERY_GAP_EVENT, ENDPOINT_MANAGEMENT_CAPABILITIES, INBOX_RPC, SIDE_EVENT_PUSH, SIDE_EVENT_RPC, normalizeConsolePushMessage, normalizeConsolePushType, parseConsoleInboxEvent, parseConsoleSseFrame, } from "@zhin.js/console-protocol";
|
|
4
|
+
export { fetchConsoleEventHistory, } from './console-events.js';
|
|
3
5
|
// Media URL resolution
|
|
4
6
|
export { resolveMediaSrc, pickMediaRawUrl } from "./mediaSrc";
|
|
5
|
-
//
|
|
7
|
+
// Safe rich message rendering (Markdown + code blocks; no raw HTML execution)
|
|
8
|
+
export { MarkdownContent, CodeBlock, } from "./message-content/MarkdownContent.js";
|
|
9
|
+
export { parseMarkdown, parseMarkdownInline, highlightCodeLine, isSafeMarkdownHref, } from "./message-content/markdown.js";
|
|
10
|
+
// Segment IM visibility (inbox vs agent panel)
|
|
11
|
+
export { segmentsForImDelivery, segmentsForAgentPanel } from "./segments.js";
|
|
12
|
+
// Console app singleton (pagemanager / registry style)
|
|
6
13
|
export { app, } from "./app";
|
|
7
14
|
// WebSocket (business data only)
|
|
8
15
|
export * from "./websocket";
|
|
9
|
-
export { DEFAULT_CONSOLE_BASE_PATH, CONSOLE_HOST_REACT_NAMESPACE_KEY, } from "@zhin.js/console-types";
|
|
10
16
|
export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
|
|
11
17
|
export { createRegistryStore, useRegistry, } from "./store/createRegistryStore.js";
|
|
12
18
|
export { cn } from "./console-utils/cn.js";
|
|
13
19
|
export { apiFetch, getApiBase, getToken, resolveApiUrl, resolveWebSocketUrl, } from "./console-utils/remoteApi.js";
|
|
14
|
-
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, } from "./bootstrap/loadConsoleEntries.js";
|
|
20
|
+
export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, resolveEntryRegister, } from "./bootstrap/loadConsoleEntries.js";
|
|
21
|
+
export { registerWorkroomConsole } from "./workroom/registerWorkroomConsole.js";
|
|
22
|
+
export { default as WorkroomRunsPage } from "./workroom/WorkroomRunsPage.js";
|
|
23
|
+
export { startAgentSession, continueAgentSession, subscribeAgentStream, iterateAgentStreamNdjson, foldAgentStreamNdjson, } from "./agent-stream.js";
|
|
15
24
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,YAAY,EACZ,gCAAgC,EAChC,gCAAgC,EAChC,SAAS,EACT,eAAe,EACf,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EAWtB,oBAAoB,GAcrB,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,wBAAwB,GAEzB,MAAM,qBAAqB,CAAC;AAE7B,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE9E,8EAA8E;AAC9E,OAAO,EACL,eAAe,EACf,SAAS,GAEV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,kBAAkB,GAKnB,MAAM,+BAA+B,CAAC;AAEvC,+CAA+C;AAC/C,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAE7E,uDAAuD;AACvD,OAAO,EACL,GAAG,GAQJ,MAAM,OAAO,CAAC;AAEf,iCAAiC;AACjC,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErE,OAAO,EACL,mBAAmB,EACnB,WAAW,GAEZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,EAAE,EAAE,MAAM,uBAAuB,CAAC;AAE3C,OAAO,EACL,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,aAAa,EACb,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,2BAA2B,EAC3B,aAAa,EACb,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,GAIrB,MAAM,mCAAmC,CAAC;AAE3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,uCAAuC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAE7E,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,GAGtB,MAAM,mBAAmB,CAAC"}
|
package/dist/mediaSrc.d.ts
CHANGED
|
@@ -11,6 +11,6 @@ export type MediaKind = 'image' | 'video' | 'audio';
|
|
|
11
11
|
* 与群内日报、html-test 等插件生成的 `base64://${buffer.toString('base64')}` 一致。
|
|
12
12
|
*/
|
|
13
13
|
export declare function resolveMediaSrc(raw: string | undefined | null, kind?: MediaKind): string | undefined;
|
|
14
|
-
/** 从 segment.data
|
|
14
|
+
/** 从 segment.data 取常见媒体字段(优先 canonical MediaRef) */
|
|
15
15
|
export declare function pickMediaRawUrl(data: Record<string, unknown> | undefined): string | undefined;
|
|
16
16
|
//# sourceMappingURL=mediaSrc.d.ts.map
|
package/dist/mediaSrc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaSrc.d.ts","sourceRoot":"","sources":["../client/mediaSrc.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"mediaSrc.d.ts","sourceRoot":"","sources":["../client/mediaSrc.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AAsDnD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC9B,IAAI,GAAE,SAAmB,GACxB,MAAM,GAAG,SAAS,CA4BpB;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAwB7F"}
|
package/dist/mediaSrc.js
CHANGED
|
@@ -1,4 +1,58 @@
|
|
|
1
1
|
const BASE64_PROTO = 'base64://';
|
|
2
|
+
const SAFE_DATA_MIME = Object.freeze({
|
|
3
|
+
image: new Set(['image/avif', 'image/gif', 'image/jpeg', 'image/png', 'image/webp']),
|
|
4
|
+
video: new Set(['video/mp4', 'video/ogg', 'video/webm']),
|
|
5
|
+
audio: new Set(['audio/mpeg', 'audio/mp4', 'audio/ogg', 'audio/wav', 'audio/webm']),
|
|
6
|
+
});
|
|
7
|
+
function resolveSafeRemoteUrl(value) {
|
|
8
|
+
try {
|
|
9
|
+
const parsed = new URL(value);
|
|
10
|
+
if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:' && parsed.protocol !== 'blob:') {
|
|
11
|
+
return undefined;
|
|
12
|
+
}
|
|
13
|
+
if (parsed.username || parsed.password)
|
|
14
|
+
return undefined;
|
|
15
|
+
return parsed.href;
|
|
16
|
+
}
|
|
17
|
+
catch {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function resolveSafeDataUrl(value, kind) {
|
|
22
|
+
if (!value.startsWith('data:'))
|
|
23
|
+
return undefined;
|
|
24
|
+
const separator = value.indexOf(',');
|
|
25
|
+
if (separator < 0)
|
|
26
|
+
return undefined;
|
|
27
|
+
const header = value.slice('data:'.length, separator).toLowerCase();
|
|
28
|
+
if (!header.endsWith(';base64'))
|
|
29
|
+
return undefined;
|
|
30
|
+
const mime = header.slice(0, -';base64'.length);
|
|
31
|
+
if (!SAFE_DATA_MIME[kind].has(mime))
|
|
32
|
+
return undefined;
|
|
33
|
+
const payload = compactBase64(value.slice(separator + 1));
|
|
34
|
+
return payload ? `data:${mime};base64,${payload}` : undefined;
|
|
35
|
+
}
|
|
36
|
+
function compactBase64(value) {
|
|
37
|
+
let compact = '';
|
|
38
|
+
for (const character of value) {
|
|
39
|
+
if (character === ' ' || character === '\n' || character === '\r' || character === '\t')
|
|
40
|
+
continue;
|
|
41
|
+
const code = character.charCodeAt(0);
|
|
42
|
+
const allowed = (code >= 48 && code <= 57)
|
|
43
|
+
|| (code >= 65 && code <= 90)
|
|
44
|
+
|| (code >= 97 && code <= 122)
|
|
45
|
+
|| character === '+' || character === '/' || character === '=';
|
|
46
|
+
if (!allowed)
|
|
47
|
+
return undefined;
|
|
48
|
+
compact += character;
|
|
49
|
+
}
|
|
50
|
+
const padding = compact.indexOf('=');
|
|
51
|
+
if (padding >= 0 && (compact.length - padding > 2 || compact.slice(padding).replace(/=/g, '') !== '')) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return compact || undefined;
|
|
55
|
+
}
|
|
2
56
|
/**
|
|
3
57
|
* 将消息段中的 url/file 等转为浏览器可用的媒体地址。
|
|
4
58
|
*
|
|
@@ -15,28 +69,54 @@ export function resolveMediaSrc(raw, kind = 'image') {
|
|
|
15
69
|
const s = raw.trim();
|
|
16
70
|
if (!s)
|
|
17
71
|
return undefined;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
72
|
+
const dataUrl = resolveSafeDataUrl(s, kind);
|
|
73
|
+
if (dataUrl)
|
|
74
|
+
return dataUrl;
|
|
75
|
+
const remoteUrl = resolveSafeRemoteUrl(s);
|
|
76
|
+
if (remoteUrl)
|
|
77
|
+
return remoteUrl;
|
|
21
78
|
if (!s.startsWith(BASE64_PROTO)) {
|
|
22
|
-
return
|
|
79
|
+
return undefined;
|
|
23
80
|
}
|
|
24
|
-
const payload = s.slice(BASE64_PROTO.length).
|
|
81
|
+
const payload = s.slice(BASE64_PROTO.length).trimStart();
|
|
25
82
|
if (!payload)
|
|
26
83
|
return undefined;
|
|
27
84
|
// 已是 type/subtype;base64, 片段(不含 data: 前缀)
|
|
28
|
-
|
|
29
|
-
|
|
85
|
+
const declared = resolveSafeDataUrl(`data:${payload}`, kind);
|
|
86
|
+
if (declared) {
|
|
87
|
+
return declared;
|
|
30
88
|
}
|
|
31
89
|
const defaultMime = kind === 'image' ? 'image/png' : kind === 'video' ? 'video/mp4' : 'audio/mpeg';
|
|
32
|
-
const b64 = payload
|
|
33
|
-
return `data:${defaultMime};base64,${b64}
|
|
90
|
+
const b64 = compactBase64(payload);
|
|
91
|
+
return b64 ? `data:${defaultMime};base64,${b64}` : undefined;
|
|
34
92
|
}
|
|
35
|
-
/** 从 segment.data
|
|
93
|
+
/** 从 segment.data 取常见媒体字段(优先 canonical MediaRef) */
|
|
36
94
|
export function pickMediaRawUrl(data) {
|
|
37
95
|
if (!data)
|
|
38
96
|
return undefined;
|
|
97
|
+
const media = data.media;
|
|
98
|
+
if (media && typeof media === 'object' && media !== null) {
|
|
99
|
+
const value = media.value;
|
|
100
|
+
if (typeof value === 'string' && value.trim())
|
|
101
|
+
return value.trim();
|
|
102
|
+
}
|
|
39
103
|
const v = data.url ?? data.file ?? data.src ?? data.href;
|
|
40
|
-
|
|
104
|
+
if (typeof v === 'string' && v.trim())
|
|
105
|
+
return v.trim();
|
|
106
|
+
// agent 出站媒体段(media-publisher)直接携带纯 base64,无 url/file;
|
|
107
|
+
// 有 mime 时拼成 data: URL 透传,否则走 base64:// 让 resolveMediaSrc 按 kind 补默认 MIME
|
|
108
|
+
const b64 = data.base64;
|
|
109
|
+
if (typeof b64 === 'string' && b64.trim()) {
|
|
110
|
+
const payload = b64.trim();
|
|
111
|
+
if (payload.startsWith('data:') || payload.startsWith('base64://')
|
|
112
|
+
|| payload.startsWith('http://') || payload.startsWith('https://')) {
|
|
113
|
+
return payload;
|
|
114
|
+
}
|
|
115
|
+
const mime = typeof data.mime === 'string' && data.mime.trim() ? data.mime.trim() : '';
|
|
116
|
+
return mime
|
|
117
|
+
? `data:${mime};base64,${payload.replace(/\s/g, '')}`
|
|
118
|
+
: `base64://${payload}`;
|
|
119
|
+
}
|
|
120
|
+
return undefined;
|
|
41
121
|
}
|
|
42
122
|
//# sourceMappingURL=mediaSrc.js.map
|
package/dist/mediaSrc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediaSrc.js","sourceRoot":"","sources":["../client/mediaSrc.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,WAAW,CAAA;AAEhC
|
|
1
|
+
{"version":3,"file":"mediaSrc.js","sourceRoot":"","sources":["../client/mediaSrc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface MarkdownContentProps {
|
|
2
|
+
readonly text: string;
|
|
3
|
+
readonly className?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function CodeBlock({ code, language, closed }: {
|
|
6
|
+
readonly code: string;
|
|
7
|
+
readonly language?: string;
|
|
8
|
+
readonly closed?: boolean;
|
|
9
|
+
}): import("react").JSX.Element;
|
|
10
|
+
export declare function MarkdownContent({ text, className }: MarkdownContentProps): import("react").JSX.Element;
|
|
11
|
+
//# sourceMappingURL=MarkdownContent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownContent.d.ts","sourceRoot":"","sources":["../../client/message-content/MarkdownContent.tsx"],"names":[],"mappings":"AAOA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAwBD,wBAAgB,SAAS,CAAC,EAAE,IAAI,EAAE,QAAa,EAAE,MAAa,EAAE,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,+BAkDjJ;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,oBAAoB,+BAyCxE"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { Fragment, useMemo, useState } from 'react';
|
|
3
|
+
import { highlightCodeLine, parseMarkdown, } from './markdown.js';
|
|
4
|
+
function InlineContent({ content }) {
|
|
5
|
+
const nodes = [];
|
|
6
|
+
content.forEach((token, index) => {
|
|
7
|
+
const key = `${token.type}-${index}`;
|
|
8
|
+
const value = token.value.split('\n').map((line, lineIndex, lines) => (_jsxs(Fragment, { children: [line, lineIndex < lines.length - 1 ? _jsx("br", {}) : null] }, `${key}-line-${lineIndex}`)));
|
|
9
|
+
if (token.type === 'strong')
|
|
10
|
+
nodes.push(_jsx("strong", { children: value }, key));
|
|
11
|
+
else if (token.type === 'emphasis')
|
|
12
|
+
nodes.push(_jsx("em", { children: value }, key));
|
|
13
|
+
else if (token.type === 'strike')
|
|
14
|
+
nodes.push(_jsx("del", { children: value }, key));
|
|
15
|
+
else if (token.type === 'code')
|
|
16
|
+
nodes.push(_jsx("code", { className: "im-inline-code", children: token.value }, key));
|
|
17
|
+
else if (token.type === 'link')
|
|
18
|
+
nodes.push(_jsx("a", { href: token.href, target: token.href.startsWith('#') ? undefined : '_blank', rel: "noreferrer", className: "im-message-link", children: value }, key));
|
|
19
|
+
else
|
|
20
|
+
nodes.push(_jsx(Fragment, { children: value }, key));
|
|
21
|
+
});
|
|
22
|
+
return _jsx(_Fragment, { children: nodes });
|
|
23
|
+
}
|
|
24
|
+
export function CodeBlock({ code, language = '', closed = true }) {
|
|
25
|
+
const [copied, setCopied] = useState(false);
|
|
26
|
+
const [wrapped, setWrapped] = useState(false);
|
|
27
|
+
const [expanded, setExpanded] = useState(false);
|
|
28
|
+
const lines = useMemo(() => code.split('\n'), [code]);
|
|
29
|
+
const isLong = lines.length > 18 || code.length > 1800;
|
|
30
|
+
const visibleLines = isLong && !expanded ? lines.slice(0, 18) : lines;
|
|
31
|
+
const copy = async () => {
|
|
32
|
+
try {
|
|
33
|
+
await navigator.clipboard.writeText(code);
|
|
34
|
+
setCopied(true);
|
|
35
|
+
window.setTimeout(() => setCopied(false), 1600);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
setCopied(false);
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
return (_jsxs("figure", { className: "zhin-code-block", children: [_jsxs("figcaption", { className: "zhin-code-toolbar", children: [_jsx("span", { className: "zhin-code-language", children: language || 'plain text' }), !closed ? _jsx("span", { className: "zhin-code-streaming", children: "\u751F\u6210\u4E2D" }) : null, _jsxs("span", { className: "zhin-code-actions", children: [_jsx("button", { type: "button", onClick: () => setWrapped((value) => !value), "aria-pressed": wrapped, children: wrapped ? '不折行' : '折行' }), _jsx("button", { type: "button", onClick: () => void copy(), children: copied ? '已复制' : '复制' })] })] }), _jsx("pre", { className: wrapped ? 'zhin-code-pre zhin-code-pre--wrap' : 'zhin-code-pre', children: _jsx("code", { children: visibleLines.map((line, lineIndex) => (_jsxs("span", { className: "zhin-code-line", children: [_jsx("span", { className: "zhin-code-line-number", "aria-hidden": "true", children: lineIndex + 1 }), _jsxs("span", { className: "zhin-code-line-content", children: [highlightCodeLine(line, language).map((token, tokenIndex) => (_jsx("span", { className: `zhin-code-token zhin-code-token--${token.kind}`, children: token.value }, `${token.kind}-${tokenIndex}`))), '\n'] })] }, `${lineIndex}-${line}`))) }) }), isLong ? (_jsx("button", { type: "button", className: "zhin-code-expand", onClick: () => setExpanded((value) => !value), children: expanded ? '收起代码' : `展开其余 ${lines.length - visibleLines.length} 行` })) : null] }));
|
|
42
|
+
}
|
|
43
|
+
export function MarkdownContent({ text, className }) {
|
|
44
|
+
const blocks = useMemo(() => parseMarkdown(text), [text]);
|
|
45
|
+
return (_jsx("div", { className: ['im-markdown-body', 'zhin-markdown', className].filter(Boolean).join(' '), children: blocks.map((block, index) => {
|
|
46
|
+
if (block.type === 'heading') {
|
|
47
|
+
const Heading = `h${block.level}`;
|
|
48
|
+
return _jsx(Heading, { className: `im-markdown-heading im-markdown-heading-${block.level}`, children: _jsx(InlineContent, { content: block.content }) }, index);
|
|
49
|
+
}
|
|
50
|
+
if (block.type === 'paragraph')
|
|
51
|
+
return _jsx("p", { className: "im-markdown-paragraph", children: _jsx(InlineContent, { content: block.content }) }, index);
|
|
52
|
+
if (block.type === 'quote')
|
|
53
|
+
return _jsx("blockquote", { className: "im-markdown-quote", children: _jsx(InlineContent, { content: block.content }) }, index);
|
|
54
|
+
if (block.type === 'rule')
|
|
55
|
+
return _jsx("hr", { className: "zhin-markdown-rule" }, index);
|
|
56
|
+
if (block.type === 'code')
|
|
57
|
+
return _jsx(CodeBlock, { code: block.value, language: block.language, closed: block.closed }, index);
|
|
58
|
+
if (block.type === 'list') {
|
|
59
|
+
const List = block.ordered ? 'ol' : 'ul';
|
|
60
|
+
return (_jsx(List, { className: `im-markdown-list${block.ordered ? ' im-markdown-list-ordered' : ''}`, children: block.items.map((item, itemIndex) => (_jsxs("li", { className: item.checked === undefined ? undefined : 'zhin-markdown-task', children: [item.checked === undefined ? null : _jsx("input", { type: "checkbox", checked: item.checked, readOnly: true, "aria-label": item.checked ? '已完成' : '未完成' }), _jsx(InlineContent, { content: item.content })] }, itemIndex))) }, index));
|
|
61
|
+
}
|
|
62
|
+
if (block.type === 'table') {
|
|
63
|
+
return (_jsx("div", { className: "zhin-markdown-table-wrap", children: _jsxs("table", { className: "zhin-markdown-table", children: [_jsx("thead", { children: _jsx("tr", { children: block.header.map((cell, cellIndex) => _jsx("th", { children: _jsx(InlineContent, { content: cell }) }, cellIndex)) }) }), _jsx("tbody", { children: block.rows.map((row, rowIndex) => _jsx("tr", { children: row.map((cell, cellIndex) => _jsx("td", { children: _jsx(InlineContent, { content: cell }) }, cellIndex)) }, rowIndex)) })] }) }, index));
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}) }));
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=MarkdownContent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MarkdownContent.js","sourceRoot":"","sources":["../../client/message-content/MarkdownContent.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
export type MarkdownInline = {
|
|
2
|
+
readonly type: 'text';
|
|
3
|
+
readonly value: string;
|
|
4
|
+
} | {
|
|
5
|
+
readonly type: 'strong' | 'emphasis' | 'strike' | 'code';
|
|
6
|
+
readonly value: string;
|
|
7
|
+
} | {
|
|
8
|
+
readonly type: 'link';
|
|
9
|
+
readonly value: string;
|
|
10
|
+
readonly href: string;
|
|
11
|
+
};
|
|
12
|
+
export type MarkdownBlock = {
|
|
13
|
+
readonly type: 'heading';
|
|
14
|
+
readonly level: number;
|
|
15
|
+
readonly content: MarkdownInline[];
|
|
16
|
+
} | {
|
|
17
|
+
readonly type: 'paragraph' | 'quote';
|
|
18
|
+
readonly content: MarkdownInline[];
|
|
19
|
+
} | {
|
|
20
|
+
readonly type: 'list';
|
|
21
|
+
readonly ordered: boolean;
|
|
22
|
+
readonly items: ReadonlyArray<{
|
|
23
|
+
readonly content: MarkdownInline[];
|
|
24
|
+
readonly checked?: boolean;
|
|
25
|
+
}>;
|
|
26
|
+
} | {
|
|
27
|
+
readonly type: 'code';
|
|
28
|
+
readonly language: string;
|
|
29
|
+
readonly value: string;
|
|
30
|
+
readonly closed: boolean;
|
|
31
|
+
} | {
|
|
32
|
+
readonly type: 'table';
|
|
33
|
+
readonly header: ReadonlyArray<MarkdownInline[]>;
|
|
34
|
+
readonly rows: ReadonlyArray<ReadonlyArray<MarkdownInline[]>>;
|
|
35
|
+
} | {
|
|
36
|
+
readonly type: 'rule';
|
|
37
|
+
};
|
|
38
|
+
export type CodeTokenKind = 'plain' | 'comment' | 'string' | 'number' | 'keyword' | 'literal';
|
|
39
|
+
export interface CodeToken {
|
|
40
|
+
readonly kind: CodeTokenKind;
|
|
41
|
+
readonly value: string;
|
|
42
|
+
}
|
|
43
|
+
export declare function isSafeMarkdownHref(href: string): boolean;
|
|
44
|
+
export declare function parseMarkdownInline(value: string): MarkdownInline[];
|
|
45
|
+
export declare function parseMarkdown(value: string): MarkdownBlock[];
|
|
46
|
+
export declare function highlightCodeLine(line: string, language?: string): CodeToken[];
|
|
47
|
+
//# sourceMappingURL=markdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../client/message-content/markdown.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GACtB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpF;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE7E,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GACxF;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAA;CAAE,GAC5E;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;CAAE,GACvJ;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CAAE,GACtG;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC,CAAC,CAAA;CAAE,GAC3I;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9B,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE9F,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAOD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKxD;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,EAAE,CAyCnE;AAiBD,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,aAAa,EAAE,CA+F5D;AAgBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,SAAS,EAAE,CA6C1E"}
|