@zhin.js/client 1.1.4 → 1.1.6

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 (147) hide show
  1. package/README.md +94 -432
  2. package/client/agent-stream.ts +121 -0
  3. package/client/app.test.ts +37 -0
  4. package/client/app.ts +130 -138
  5. package/client/bootstrap/loadConsoleEntries.test.ts +23 -12
  6. package/client/bootstrap/loadConsoleEntries.ts +40 -27
  7. package/client/console-client-context.ts +24 -0
  8. package/client/console-client.test.ts +46 -0
  9. package/client/console-client.ts +70 -0
  10. package/client/console-events.ts +38 -0
  11. package/client/console-utils/remoteApi.test.ts +91 -0
  12. package/client/console-utils/remoteApi.ts +47 -9
  13. package/client/index.ts +92 -28
  14. package/client/mediaSrc.test.ts +49 -0
  15. package/client/mediaSrc.ts +84 -11
  16. package/client/message-content/MarkdownContent.tsx +128 -0
  17. package/client/message-content/markdown.test.ts +48 -0
  18. package/client/message-content/markdown.ts +247 -0
  19. package/client/persistence/idb-store.test.ts +121 -0
  20. package/client/persistence/idb-store.ts +40 -21
  21. package/client/segments.test.ts +16 -0
  22. package/client/segments.ts +39 -0
  23. package/client/transport/console-transport.test.ts +394 -0
  24. package/client/transport/console-transport.ts +676 -0
  25. package/client/transport/hooks.test.ts +21 -0
  26. package/client/transport/hooks.ts +535 -0
  27. package/client/transport/index.ts +23 -0
  28. package/client/{websocket → transport}/types.ts +16 -17
  29. package/client/types.ts +5 -8
  30. package/client/workroom/WorkroomRunsPage.tsx +355 -0
  31. package/client/workroom/registerWorkroomConsole.test.ts +25 -0
  32. package/client/workroom/registerWorkroomConsole.ts +17 -0
  33. package/dist/agent-stream.d.ts +17 -0
  34. package/dist/agent-stream.d.ts.map +1 -0
  35. package/dist/agent-stream.js +73 -0
  36. package/dist/agent-stream.js.map +1 -0
  37. package/dist/app.d.ts +17 -52
  38. package/dist/app.d.ts.map +1 -1
  39. package/dist/app.js +110 -95
  40. package/dist/app.js.map +1 -1
  41. package/dist/bootstrap/loadConsoleEntries.d.ts +10 -7
  42. package/dist/bootstrap/loadConsoleEntries.d.ts.map +1 -1
  43. package/dist/bootstrap/loadConsoleEntries.js +37 -11
  44. package/dist/bootstrap/loadConsoleEntries.js.map +1 -1
  45. package/dist/console-client-context.d.ts +9 -0
  46. package/dist/console-client-context.d.ts.map +1 -0
  47. package/dist/console-client-context.js +13 -0
  48. package/dist/console-client-context.js.map +1 -0
  49. package/dist/console-client.d.ts +25 -0
  50. package/dist/console-client.d.ts.map +1 -0
  51. package/dist/console-client.js +45 -0
  52. package/dist/console-client.js.map +1 -0
  53. package/dist/console-events.d.ts +8 -0
  54. package/dist/console-events.d.ts.map +1 -0
  55. package/dist/console-events.js +26 -0
  56. package/dist/console-events.js.map +1 -0
  57. package/dist/console-utils/remoteApi.d.ts +2 -1
  58. package/dist/console-utils/remoteApi.d.ts.map +1 -1
  59. package/dist/console-utils/remoteApi.js +46 -8
  60. package/dist/console-utils/remoteApi.js.map +1 -1
  61. package/dist/index.d.ts +14 -7
  62. package/dist/index.d.ts.map +1 -1
  63. package/dist/index.js +18 -8
  64. package/dist/index.js.map +1 -1
  65. package/dist/mediaSrc.d.ts +1 -1
  66. package/dist/mediaSrc.d.ts.map +1 -1
  67. package/dist/mediaSrc.js +91 -11
  68. package/dist/mediaSrc.js.map +1 -1
  69. package/dist/message-content/MarkdownContent.d.ts +11 -0
  70. package/dist/message-content/MarkdownContent.d.ts.map +1 -0
  71. package/dist/message-content/MarkdownContent.js +68 -0
  72. package/dist/message-content/MarkdownContent.js.map +1 -0
  73. package/dist/message-content/markdown.d.ts +47 -0
  74. package/dist/message-content/markdown.d.ts.map +1 -0
  75. package/dist/message-content/markdown.js +219 -0
  76. package/dist/message-content/markdown.js.map +1 -0
  77. package/dist/persistence/idb-store.d.ts +5 -2
  78. package/dist/persistence/idb-store.d.ts.map +1 -1
  79. package/dist/persistence/idb-store.js +29 -20
  80. package/dist/persistence/idb-store.js.map +1 -1
  81. package/dist/segments.d.ts +9 -0
  82. package/dist/segments.d.ts.map +1 -0
  83. package/dist/segments.js +35 -0
  84. package/dist/segments.js.map +1 -0
  85. package/dist/transport/console-transport.d.ts +217 -0
  86. package/dist/transport/console-transport.d.ts.map +1 -0
  87. package/dist/transport/console-transport.js +563 -0
  88. package/dist/transport/console-transport.js.map +1 -0
  89. package/dist/transport/hooks.d.ts +253 -0
  90. package/dist/transport/hooks.d.ts.map +1 -0
  91. package/dist/transport/hooks.js +483 -0
  92. package/dist/transport/hooks.js.map +1 -0
  93. package/dist/transport/index.d.ts +4 -0
  94. package/dist/transport/index.d.ts.map +1 -0
  95. package/dist/transport/index.js +4 -0
  96. package/dist/transport/index.js.map +1 -0
  97. package/dist/{websocket → transport}/types.d.ts +14 -13
  98. package/dist/transport/types.d.ts.map +1 -0
  99. package/dist/{websocket → transport}/types.js +4 -9
  100. package/dist/transport/types.js.map +1 -0
  101. package/dist/types.d.ts +4 -4
  102. package/dist/types.d.ts.map +1 -1
  103. package/dist/workroom/WorkroomRunsPage.d.ts +2 -0
  104. package/dist/workroom/WorkroomRunsPage.d.ts.map +1 -0
  105. package/dist/workroom/WorkroomRunsPage.js +111 -0
  106. package/dist/workroom/WorkroomRunsPage.js.map +1 -0
  107. package/dist/workroom/registerWorkroomConsole.d.ts +4 -0
  108. package/dist/workroom/registerWorkroomConsole.d.ts.map +1 -0
  109. package/dist/workroom/registerWorkroomConsole.js +16 -0
  110. package/dist/workroom/registerWorkroomConsole.js.map +1 -0
  111. package/package.json +18 -8
  112. package/client/runtime/index.ts +0 -12
  113. package/client/websocket/hooks.ts +0 -289
  114. package/client/websocket/index.ts +0 -6
  115. package/client/websocket/instance.ts +0 -24
  116. package/client/websocket/manager.ts +0 -426
  117. package/client/websocket/remote-settings.ts +0 -25
  118. package/dist/bootstrap/loadConsoleEntries.test.d.ts +0 -2
  119. package/dist/bootstrap/loadConsoleEntries.test.d.ts.map +0 -1
  120. package/dist/bootstrap/loadConsoleEntries.test.js +0 -27
  121. package/dist/bootstrap/loadConsoleEntries.test.js.map +0 -1
  122. package/dist/runtime/index.d.ts +0 -6
  123. package/dist/runtime/index.d.ts.map +0 -1
  124. package/dist/runtime/index.js +0 -10
  125. package/dist/runtime/index.js.map +0 -1
  126. package/dist/websocket/hooks.d.ts +0 -105
  127. package/dist/websocket/hooks.d.ts.map +0 -1
  128. package/dist/websocket/hooks.js +0 -247
  129. package/dist/websocket/hooks.js.map +0 -1
  130. package/dist/websocket/index.d.ts +0 -7
  131. package/dist/websocket/index.d.ts.map +0 -1
  132. package/dist/websocket/index.js +0 -7
  133. package/dist/websocket/index.js.map +0 -1
  134. package/dist/websocket/instance.d.ts +0 -5
  135. package/dist/websocket/instance.d.ts.map +0 -1
  136. package/dist/websocket/instance.js +0 -21
  137. package/dist/websocket/instance.js.map +0 -1
  138. package/dist/websocket/manager.d.ts +0 -113
  139. package/dist/websocket/manager.d.ts.map +0 -1
  140. package/dist/websocket/manager.js +0 -403
  141. package/dist/websocket/manager.js.map +0 -1
  142. package/dist/websocket/remote-settings.d.ts +0 -5
  143. package/dist/websocket/remote-settings.d.ts.map +0 -1
  144. package/dist/websocket/remote-settings.js +0 -23
  145. package/dist/websocket/remote-settings.js.map +0 -1
  146. package/dist/websocket/types.d.ts.map +0 -1
  147. package/dist/websocket/types.js.map +0 -1
@@ -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,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC7C,IAAI,OAAO,MAAM,KAAK,WAAW;QAAE,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;IACjE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;IACnD,OAAO,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;AACvB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IAC7B,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IAC1D,OAAO,GAAG,CAAC,IAAI,CAAC;AAClB,CAAC;AAED,kFAAkF;AAClF,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,KAAwB,EACxB,IAAkB;IAElB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3C,IAAI,KAAK;QAAE,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,KAAK,EAAE,CAAC,CAAC;IAE3D,MAAM,GAAG,GACP,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;QAChD,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC;QACtB,CAAC,CAAC,KAAK,CAAC;IAEZ,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QACnC,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
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,19 @@
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, parseConsoleInboxEvent, type ConsoleInboxEvent, type ConsoleInboxEventKind, type ConsoleInboxMessageRow, type ConsoleInboxNoticeRow, type ConsoleInboxNoticesQuery, type ConsoleInboxNoticesResult, type ConsoleInboxRequestRow, type ConsoleEndpointPhase, type ConsoleEndpointSummary, type ConsoleEventActor, type ConsoleEventChannel, type ConsoleEventParent, 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";
3
- export { app, type ConsoleApp, type AddRouteInput, type AddToolInput, type ConsoleRouteRecord, type RouteTreeNode, type ToolTreeNode, type ConsoleRouteRenderer, } from "./app";
4
- 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
- export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
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";
8
+ export { ConsoleApp, createConsoleApp, type AddRouteInput, type AddToolInput, type ConsoleRouteRecord, type RouteTreeNode, type ToolTreeNode, type SidebarRenderer, type ToolbarRenderer, type ConsoleRouteRenderer, } from "./app.js";
9
+ export { ConsoleClient, createConsoleClient, type ConsoleClientOptions, } from './console-client.js';
10
+ export { ConsoleClientProvider, useConsoleClient, type ConsoleClientProviderProps, } from './console-client-context.js';
11
+ export * from "./transport/index.js";
8
12
  export { createRegistryStore, useRegistry, type RegistryStore, } from "./store/createRegistryStore.js";
9
13
  export { cn } from "./console-utils/cn.js";
10
- 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 { apiFetch, getApiBase, getToken, resolveApiUrl, } from "./console-utils/remoteApi.js";
15
+ export { fetchConsoleEntries, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, resolveEntryRegister, type FetchConsoleEntriesOptions, type LoadConsoleEntriesOptions, } from "./bootstrap/loadConsoleEntries.js";
16
+ export { registerWorkroomConsole } from "./workroom/registerWorkroomConsole.js";
17
+ export { default as WorkroomRunsPage } from "./workroom/WorkroomRunsPage.js";
18
+ export { startAgentSession, continueAgentSession, subscribeAgentStream, iterateAgentStreamNdjson, foldAgentStreamNdjson, type AgentStreamClientOptions, type SubscribeAgentStreamOptions, } from "./agent-stream.js";
12
19
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../client/index.ts"],"names":[],"mappings":"AACA,cAAc,SAAS,CAAC;AAGxB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAG9E,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;AAG5B,YAAY,EACV,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,YAAY,EACZ,wBAAwB,EACxB,UAAU,GACX,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,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,KAAK,kCAAkC,EACvC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,GAC/B,MAAM,mCAAmC,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,sBAAsB,EACtB,KAAK,iBAAiB,EACtB,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,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,UAAU,EACV,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,oBAAoB,GAC1B,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,aAAa,EACb,mBAAmB,EACnB,KAAK,oBAAoB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AAGrC,cAAc,sBAAsB,CAAC;AAErC,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,GACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,EACpB,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,25 @@
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, 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
- // Console app singleton (page-manager style)
6
- export { app, } from "./app";
7
- // WebSocket (business data only)
8
- export * from "./websocket";
9
- export { DEFAULT_CONSOLE_BASE_PATH, CONSOLE_HOST_REACT_NAMESPACE_KEY, } from "@zhin.js/console-types";
10
- export { configureConsole, getRuntimeEnv } from "./runtime/index.js";
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
+ // Owner-scoped Console client and application registry
13
+ export { ConsoleApp, createConsoleApp, } from "./app.js";
14
+ export { ConsoleClient, createConsoleClient, } from './console-client.js';
15
+ export { ConsoleClientProvider, useConsoleClient, } from './console-client-context.js';
16
+ // Owner-scoped REST/SSE transport
17
+ export * from "./transport/index.js";
11
18
  export { createRegistryStore, useRegistry, } from "./store/createRegistryStore.js";
12
19
  export { cn } from "./console-utils/cn.js";
13
- export { apiFetch, getApiBase, getToken, resolveApiUrl, resolveWebSocketUrl, } from "./console-utils/remoteApi.js";
14
- export { fetchConsoleEntries, createPluginRegisterHostApi, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, } from "./bootstrap/loadConsoleEntries.js";
20
+ export { apiFetch, getApiBase, getToken, resolveApiUrl, } from "./console-utils/remoteApi.js";
21
+ export { fetchConsoleEntries, getRegisterFn, loadConsoleEntries, registerConsolePluginsFromEntries, resolveEntryRegister, } from "./bootstrap/loadConsoleEntries.js";
22
+ export { registerWorkroomConsole } from "./workroom/registerWorkroomConsole.js";
23
+ export { default as WorkroomRunsPage } from "./workroom/WorkroomRunsPage.js";
24
+ export { startAgentSession, continueAgentSession, subscribeAgentStream, iterateAgentStreamNdjson, foldAgentStreamNdjson, } from "./agent-stream.js";
15
25
  //# 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;AAExB,uBAAuB;AACvB,OAAO,EAAE,eAAe,EAAE,eAAe,EAAkB,MAAM,YAAY,CAAC;AAE9E,6CAA6C;AAC7C,OAAO,EACL,GAAG,GAQJ,MAAM,OAAO,CAAC;AAEf,iCAAiC;AACjC,cAAc,aAAa,CAAC;AAe5B,OAAO,EACL,yBAAyB,EACzB,gCAAgC,GACjC,MAAM,wBAAwB,CAAC;AAEhC,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,GAIlC,MAAM,mCAAmC,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,sBAAsB,EActB,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,UAAU,EACV,gBAAgB,GASjB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,aAAa,EACb,mBAAmB,GAEpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,qBAAqB,EACrB,gBAAgB,GAEjB,MAAM,6BAA6B,CAAC;AAErC,kCAAkC;AAClC,cAAc,sBAAsB,CAAC;AAErC,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,GACd,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,aAAa,EACb,kBAAkB,EAClB,iCAAiC,EACjC,oBAAoB,GAGrB,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"}
@@ -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
@@ -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;AAInD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAC9B,IAAI,GAAE,SAAmB,GACxB,MAAM,GAAG,SAAS,CAyBpB;AAED,6BAA6B;AAC7B,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAI7F"}
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
- if (s.startsWith('data:') || s.startsWith('blob:') || s.startsWith('http://') || s.startsWith('https://')) {
19
- return s;
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 s;
79
+ return undefined;
23
80
  }
24
- const payload = s.slice(BASE64_PROTO.length).replace(/^\s+/, '');
81
+ const payload = s.slice(BASE64_PROTO.length).trimStart();
25
82
  if (!payload)
26
83
  return undefined;
27
84
  // 已是 type/subtype;base64, 片段(不含 data: 前缀)
28
- if (/^[\w+.-]+\/[\w+.-]+;base64,/i.test(payload)) {
29
- return `data:${payload}`;
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.replace(/\s/g, '');
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
- return typeof v === 'string' && v.trim() ? v.trim() : undefined;
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
@@ -1 +1 @@
1
- {"version":3,"file":"mediaSrc.js","sourceRoot":"","sources":["../client/mediaSrc.ts"],"names":[],"mappings":"AAGA,MAAM,YAAY,GAAG,WAAW,CAAA;AAEhC;;;;;;;;;GASG;AACH,MAAM,UAAU,eAAe,CAC7B,GAA8B,EAC9B,OAAkB,OAAO;IAEzB,IAAI,GAAG,IAAI,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAA;IAC5D,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,SAAS,CAAA;IAExB,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1G,OAAO,CAAC,CAAA;IACV,CAAC;IAED,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAChE,IAAI,CAAC,OAAO;QAAE,OAAO,SAAS,CAAA;IAE9B,0CAA0C;IAC1C,IAAI,8BAA8B,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QACjD,OAAO,QAAQ,OAAO,EAAE,CAAA;IAC1B,CAAC;IAED,MAAM,WAAW,GACf,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,YAAY,CAAA;IAChF,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACtC,OAAO,QAAQ,WAAW,WAAW,GAAG,EAAE,CAAA;AAC5C,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,eAAe,CAAC,IAAyC;IACvE,IAAI,CAAC,IAAI;QAAE,OAAO,SAAS,CAAA;IAC3B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,IAAI,CAAA;IACxD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE,CAAC"}
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"}