@zhin.js/core 1.3.0 → 1.3.2

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 (159) hide show
  1. package/README.md +60 -5
  2. package/lib/adapter.d.ts +19 -1
  3. package/lib/adapter.d.ts.map +1 -1
  4. package/lib/adapter.js +39 -5
  5. package/lib/adapter.js.map +1 -1
  6. package/lib/agent-prompt.d.ts +6 -2
  7. package/lib/agent-prompt.d.ts.map +1 -1
  8. package/lib/built/adapter-process.d.ts +11 -1
  9. package/lib/built/adapter-process.d.ts.map +1 -1
  10. package/lib/built/adapter-process.js +43 -1
  11. package/lib/built/adapter-process.js.map +1 -1
  12. package/lib/built/ai-trigger.d.ts +0 -2
  13. package/lib/built/ai-trigger.d.ts.map +1 -1
  14. package/lib/built/ai-trigger.js +0 -14
  15. package/lib/built/ai-trigger.js.map +1 -1
  16. package/lib/built/command.d.ts +2 -0
  17. package/lib/built/command.d.ts.map +1 -1
  18. package/lib/built/command.js +13 -1
  19. package/lib/built/command.js.map +1 -1
  20. package/lib/built/endpoint-commands.d.ts +4 -0
  21. package/lib/built/endpoint-commands.d.ts.map +1 -0
  22. package/lib/built/endpoint-commands.js +102 -0
  23. package/lib/built/endpoint-commands.js.map +1 -0
  24. package/lib/built/endpoint-lifecycle-service.d.ts +27 -0
  25. package/lib/built/endpoint-lifecycle-service.d.ts.map +1 -0
  26. package/lib/built/endpoint-lifecycle-service.js +219 -0
  27. package/lib/built/endpoint-lifecycle-service.js.map +1 -0
  28. package/lib/built/endpoint-manager.d.ts +35 -0
  29. package/lib/built/endpoint-manager.d.ts.map +1 -0
  30. package/lib/built/endpoint-manager.js +2 -0
  31. package/lib/built/endpoint-manager.js.map +1 -0
  32. package/lib/built/generated-qrcode.d.ts +25 -0
  33. package/lib/built/generated-qrcode.d.ts.map +1 -0
  34. package/lib/built/generated-qrcode.js +46 -0
  35. package/lib/built/generated-qrcode.js.map +1 -0
  36. package/lib/built/html-renderer-loader.d.ts +12 -0
  37. package/lib/built/html-renderer-loader.d.ts.map +1 -0
  38. package/lib/built/html-renderer-loader.js +29 -0
  39. package/lib/built/html-renderer-loader.js.map +1 -0
  40. package/lib/built/html-segment-fallback.d.ts +2 -1
  41. package/lib/built/html-segment-fallback.d.ts.map +1 -1
  42. package/lib/built/html-segment-fallback.js.map +1 -1
  43. package/lib/built/introspection-format.d.ts +11 -0
  44. package/lib/built/introspection-format.d.ts.map +1 -0
  45. package/lib/built/introspection-format.js +28 -0
  46. package/lib/built/introspection-format.js.map +1 -0
  47. package/lib/built/login-assist.d.ts +1 -1
  48. package/lib/built/login-assist.d.ts.map +1 -1
  49. package/lib/built/management-command-guard.d.ts +11 -0
  50. package/lib/built/management-command-guard.d.ts.map +1 -0
  51. package/lib/built/management-command-guard.js +21 -0
  52. package/lib/built/management-command-guard.js.map +1 -0
  53. package/lib/built/message-enrich.d.ts.map +1 -1
  54. package/lib/built/message-enrich.js +5 -7
  55. package/lib/built/message-enrich.js.map +1 -1
  56. package/lib/built/outbound-media-contract.d.ts +23 -0
  57. package/lib/built/outbound-media-contract.d.ts.map +1 -0
  58. package/lib/built/outbound-media-contract.js +11 -0
  59. package/lib/built/outbound-media-contract.js.map +1 -0
  60. package/lib/built/outbound-media-utils.d.ts +10 -0
  61. package/lib/built/outbound-media-utils.d.ts.map +1 -0
  62. package/lib/built/outbound-media-utils.js +63 -0
  63. package/lib/built/outbound-media-utils.js.map +1 -0
  64. package/lib/built/qrcode-segment.d.ts +19 -0
  65. package/lib/built/qrcode-segment.d.ts.map +1 -0
  66. package/lib/built/qrcode-segment.js +79 -0
  67. package/lib/built/qrcode-segment.js.map +1 -0
  68. package/lib/built/rich-segments/adapter-policies.d.ts +10 -0
  69. package/lib/built/rich-segments/adapter-policies.d.ts.map +1 -0
  70. package/lib/built/rich-segments/adapter-policies.js +28 -0
  71. package/lib/built/rich-segments/adapter-policies.js.map +1 -0
  72. package/lib/built/rich-segments/base.d.ts +12 -0
  73. package/lib/built/rich-segments/base.d.ts.map +1 -0
  74. package/lib/built/rich-segments/base.js +25 -0
  75. package/lib/built/rich-segments/base.js.map +1 -0
  76. package/lib/built/rich-segments/builtins.d.ts +5 -0
  77. package/lib/built/rich-segments/builtins.d.ts.map +1 -0
  78. package/lib/built/rich-segments/builtins.js +41 -0
  79. package/lib/built/rich-segments/builtins.js.map +1 -0
  80. package/lib/built/rich-segments/capabilities.d.ts +7 -0
  81. package/lib/built/rich-segments/capabilities.d.ts.map +1 -0
  82. package/lib/built/rich-segments/capabilities.js +40 -0
  83. package/lib/built/rich-segments/capabilities.js.map +1 -0
  84. package/lib/built/rich-segments/html-segment.d.ts +16 -0
  85. package/lib/built/rich-segments/html-segment.d.ts.map +1 -0
  86. package/lib/built/rich-segments/html-segment.js +66 -0
  87. package/lib/built/rich-segments/html-segment.js.map +1 -0
  88. package/lib/built/rich-segments/index.d.ts +14 -0
  89. package/lib/built/rich-segments/index.d.ts.map +1 -0
  90. package/lib/built/rich-segments/index.js +14 -0
  91. package/lib/built/rich-segments/index.js.map +1 -0
  92. package/lib/built/rich-segments/markdown-segment.d.ts +15 -0
  93. package/lib/built/rich-segments/markdown-segment.d.ts.map +1 -0
  94. package/lib/built/rich-segments/markdown-segment.js +62 -0
  95. package/lib/built/rich-segments/markdown-segment.js.map +1 -0
  96. package/lib/built/rich-segments/markdown-to-text.d.ts +4 -0
  97. package/lib/built/rich-segments/markdown-to-text.d.ts.map +1 -0
  98. package/lib/built/rich-segments/markdown-to-text.js +28 -0
  99. package/lib/built/rich-segments/markdown-to-text.js.map +1 -0
  100. package/lib/built/rich-segments/qrcode-segment.d.ts +19 -0
  101. package/lib/built/rich-segments/qrcode-segment.d.ts.map +1 -0
  102. package/lib/built/rich-segments/qrcode-segment.js +74 -0
  103. package/lib/built/rich-segments/qrcode-segment.js.map +1 -0
  104. package/lib/built/rich-segments/registry.d.ts +17 -0
  105. package/lib/built/rich-segments/registry.d.ts.map +1 -0
  106. package/lib/built/rich-segments/registry.js +53 -0
  107. package/lib/built/rich-segments/registry.js.map +1 -0
  108. package/lib/built/rich-segments/resolve.d.ts +6 -0
  109. package/lib/built/rich-segments/resolve.d.ts.map +1 -0
  110. package/lib/built/rich-segments/resolve.js +88 -0
  111. package/lib/built/rich-segments/resolve.js.map +1 -0
  112. package/lib/built/rich-segments/tts-segment.d.ts +14 -0
  113. package/lib/built/rich-segments/tts-segment.d.ts.map +1 -0
  114. package/lib/built/rich-segments/tts-segment.js +52 -0
  115. package/lib/built/rich-segments/tts-segment.js.map +1 -0
  116. package/lib/built/rich-segments/types.d.ts +85 -0
  117. package/lib/built/rich-segments/types.d.ts.map +1 -0
  118. package/lib/built/rich-segments/types.js +18 -0
  119. package/lib/built/rich-segments/types.js.map +1 -0
  120. package/lib/built/schema-endpoint-manager.d.ts +18 -0
  121. package/lib/built/schema-endpoint-manager.d.ts.map +1 -0
  122. package/lib/built/schema-endpoint-manager.js +74 -0
  123. package/lib/built/schema-endpoint-manager.js.map +1 -0
  124. package/lib/built/speech-loader.d.ts +13 -0
  125. package/lib/built/speech-loader.d.ts.map +1 -0
  126. package/lib/built/speech-loader.js +28 -0
  127. package/lib/built/speech-loader.js.map +1 -0
  128. package/lib/host-plugin-registry.d.ts +8 -0
  129. package/lib/host-plugin-registry.d.ts.map +1 -0
  130. package/lib/host-plugin-registry.js +8 -0
  131. package/lib/host-plugin-registry.js.map +1 -0
  132. package/lib/im-session-id.d.ts +26 -0
  133. package/lib/im-session-id.d.ts.map +1 -0
  134. package/lib/im-session-id.js +29 -0
  135. package/lib/im-session-id.js.map +1 -0
  136. package/lib/index.d.ts +36 -21
  137. package/lib/index.d.ts.map +1 -1
  138. package/lib/index.js +37 -28
  139. package/lib/index.js.map +1 -1
  140. package/lib/message.d.ts +8 -0
  141. package/lib/message.d.ts.map +1 -1
  142. package/lib/message.js.map +1 -1
  143. package/lib/plugin-context.d.ts +12 -1
  144. package/lib/plugin-context.d.ts.map +1 -1
  145. package/lib/plugin-context.js +12 -1
  146. package/lib/plugin-context.js.map +1 -1
  147. package/lib/plugin.d.ts +1 -0
  148. package/lib/plugin.d.ts.map +1 -1
  149. package/lib/plugin.js +8 -16
  150. package/lib/plugin.js.map +1 -1
  151. package/lib/prompt.js +1 -1
  152. package/lib/prompt.js.map +1 -1
  153. package/lib/types.d.ts +0 -10
  154. package/lib/types.d.ts.map +1 -1
  155. package/lib/utils.d.ts +21 -11
  156. package/lib/utils.d.ts.map +1 -1
  157. package/lib/utils.js +29 -2
  158. package/lib/utils.js.map +1 -1
  159. package/package.json +18 -7
@@ -0,0 +1 @@
1
+ {"version":3,"file":"introspection-format.js","sourceRoot":"","sources":["../../src/built/introspection-format.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,MAAM,UAAU,mBAAmB,CAAC,SAAwB;IAC1D,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,mBAAmB,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,kBAAkB,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,EAAE,CAAC,CAAC;IAChE,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;QAClH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,iBAAiB;QACjB,EAAE;QACF,kEAAkE;QAClE,qCAAqC;QACrC,mCAAmC;QACnC,oCAAoC;QACpC,mCAAmC;QACnC,2CAA2C;QAC3C,kBAAkB;QAClB,yCAAyC;KAC1C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC"}
@@ -9,7 +9,7 @@
9
9
  * endpoint.login.pending — 有新待办时触发,payload: PendingLoginTask
10
10
  */
11
11
  import type { Plugin } from '../plugin.js';
12
- export type LoginAssistType = 'qrcode' | 'sms' | 'slider' | 'device' | 'other';
12
+ export type LoginAssistType = 'qrcode' | 'sms' | 'slider' | 'device' | 'auth' | 'other';
13
13
  export interface PendingLoginTaskPayload {
14
14
  /** 说明文案(如「请扫码登录」) */
15
15
  message?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"login-assist.d.ts","sourceRoot":"","sources":["../../src/built/login-assist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE/E,MAAM,WAAW,uBAAuB;IACtC,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,KAAK,CAAK;gBAEN,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAiB5C;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAQpE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,SAAc,GAAG,OAAO;IAQjD;;OAEG;IACH,WAAW,IAAI,gBAAgB,EAAE;IAIjC,OAAO,IAAI,IAAI;CAMhB;AAMD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,WAAW,EAAE,WAAW,CAAC;SAC1B;KACF;CACF"}
1
+ {"version":3,"file":"login-assist.d.ts","sourceRoot":"","sources":["../../src/built/login-assist.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAM3C,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAExF,MAAM,WAAW,uBAAuB;IACtC,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8BAA8B;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa;IACb,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;IACtB,OAAO,EAAE,uBAAuB,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAmC;IAC3D,OAAO,CAAC,KAAK,CAAK;gBAEN,MAAM,EAAE,MAAM;IAI1B;;OAEG;IACH,YAAY,CACV,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,eAAe,EACrB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAiB5C;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO;IAQpE;;OAEG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,SAAc,GAAG,OAAO;IAQjD;;OAEG;IACH,WAAW,IAAI,gBAAgB,EAAE;IAIjC,OAAO,IAAI,IAAI;CAMhB;AAMD,OAAO,QAAQ,cAAc,CAAC;IAC5B,UAAU,MAAM,CAAC;QACf,UAAU,QAAQ;YAChB,WAAW,EAAE,WAAW,CAAC;SAC1B;KACF;CACF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * IM 运维 / Endpoint 管理斜杠命令:仅 master 或 trusted 可执行。
3
+ */
4
+ import { resolveSenderRoles, type AITriggerConfig } from './ai-trigger.js';
5
+ import type { Message } from '../message.js';
6
+ import type { Plugin } from '../plugin.js';
7
+ export declare const MANAGEMENT_COMMAND_DENIED = "\u26A0\uFE0F \u8BE5\u547D\u4EE4\u4EC5 Endpoint Owner\uFF08master\uFF09\u6216 trusted \u64CD\u4F5C\u5458\u53EF\u7528\u3002";
8
+ export declare function resolveManagementCommandRoles(message: Message, root: Plugin, triggerConfig?: AITriggerConfig): ReturnType<typeof resolveSenderRoles>['roles'];
9
+ /** 通过返回 null;拒绝返回用户可见提示文案 */
10
+ export declare function rejectUnlessManagementOperator(message: Message, root: Plugin, triggerConfig?: AITriggerConfig): string | null;
11
+ //# sourceMappingURL=management-command-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-command-guard.d.ts","sourceRoot":"","sources":["../../src/built/management-command-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAEL,kBAAkB,EAClB,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C,eAAO,MAAM,yBAAyB,8HACY,CAAC;AAEnD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,eAAe,GAC9B,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAOhD;AAED,6BAA6B;AAC7B,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,eAAe,GAC9B,MAAM,GAAG,IAAI,CAMf"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * IM 运维 / Endpoint 管理斜杠命令:仅 master 或 trusted 可执行。
3
+ */
4
+ import { mergeAITriggerConfig, resolveSenderRoles, } from './ai-trigger.js';
5
+ import { hasSenderRole } from './roles.js';
6
+ export const MANAGEMENT_COMMAND_DENIED = '⚠️ 该命令仅 Endpoint Owner(master)或 trusted 操作员可用。';
7
+ export function resolveManagementCommandRoles(message, root, triggerConfig) {
8
+ const cfg = mergeAITriggerConfig(triggerConfig ?? {});
9
+ const adapterInstance = root.inject(message.$adapter);
10
+ const endpointConfig = adapterInstance?.endpoints?.get(message.$endpoint)?.$config;
11
+ return resolveSenderRoles(message, cfg, endpointConfig).roles;
12
+ }
13
+ /** 通过返回 null;拒绝返回用户可见提示文案 */
14
+ export function rejectUnlessManagementOperator(message, root, triggerConfig) {
15
+ const roles = resolveManagementCommandRoles(message, root, triggerConfig);
16
+ if (hasSenderRole(roles, 'trusted')) {
17
+ return null;
18
+ }
19
+ return MANAGEMENT_COMMAND_DENIED;
20
+ }
21
+ //# sourceMappingURL=management-command-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management-command-guard.js","sourceRoot":"","sources":["../../src/built/management-command-guard.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EACL,oBAAoB,EACpB,kBAAkB,GAEnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAI3C,MAAM,CAAC,MAAM,yBAAyB,GACpC,gDAAgD,CAAC;AAEnD,MAAM,UAAU,6BAA6B,CAC3C,OAAgB,EAChB,IAAY,EACZ,aAA+B;IAE/B,MAAM,GAAG,GAAG,oBAAoB,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAEvC,CAAC;IACd,MAAM,cAAc,GAAG,eAAe,EAAE,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IACnF,OAAO,kBAAkB,CAAC,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,CAAC,KAAK,CAAC;AAChE,CAAC;AAED,6BAA6B;AAC7B,MAAM,UAAU,8BAA8B,CAC5C,OAAgB,EAChB,IAAY,EACZ,aAA+B;IAE/B,MAAM,KAAK,GAAG,6BAA6B,CAAC,OAAO,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IAC1E,IAAI,aAAa,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,yBAAyB,CAAC;AACnC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"message-enrich.d.ts","sourceRoot":"","sources":["../../src/built/message-enrich.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAW5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,UAAU,EAAE,CAWnF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAKzF;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAmBrF;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAMrG;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAsB7E"}
1
+ {"version":3,"file":"message-enrich.d.ts","sourceRoot":"","sources":["../../src/built/message-enrich.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,wCAAwC;AACxC,MAAM,MAAM,gBAAgB,GAAG,OAAO,CAAC;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,CAAC;AAW5E,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,UAAU,EAAE,CAUnF;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAKzF;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,QAAQ,GAAG,MAAM,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,SAAS,CAAC,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,cAAc,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,oDAAoD;AACpD,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,qBAAqB,GAAG,gBAAgB,CAmBrF;AAED,0DAA0D;AAC1D,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAMrG;AAED,uEAAuE;AACvE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAsB7E"}
@@ -1,7 +1,7 @@
1
1
  import { Message } from '../message.js';
2
2
  import { hasSenderRole } from './roles.js';
3
3
  import { resolveSubjectRoles } from './authorization.js';
4
- import { getPlugin } from '../plugin.js';
4
+ import { getHostRootPlugin } from '../host-plugin-registry.js';
5
5
  function frameworkRolesFromSenderFlags(sender) {
6
6
  if (sender.isMaster)
7
7
  return ['master'];
@@ -14,13 +14,11 @@ export function senderRolesFromMessage(message) {
14
14
  if (sender.isMaster !== undefined || sender.isTrusted !== undefined) {
15
15
  return frameworkRolesFromSenderFlags(sender);
16
16
  }
17
- try {
18
- const plugin = getPlugin().root ?? getPlugin();
19
- return resolveSubjectRoles(plugin, message).roles;
20
- }
21
- catch {
22
- return ['user'];
17
+ const root = getHostRootPlugin();
18
+ if (root) {
19
+ return resolveSubjectRoles(root, message).roles;
23
20
  }
21
+ return ['user'];
24
22
  }
25
23
  /**
26
24
  * 入站 enrich:写入 $sender.isMaster / isTrusted 快照(本 turn 只读)
@@ -1 +1 @@
1
- {"version":3,"file":"message-enrich.js","sourceRoot":"","sources":["../../src/built/message-enrich.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"message-enrich.js","sourceRoot":"","sources":["../../src/built/message-enrich.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { SendContent } from '../types.js';
2
+ /**
3
+ * 出站两阶段契约(Adapter 实现参考):
4
+ *
5
+ * 1. **resolveRichSegments**(Adapter.renderSendMessage 首步)
6
+ * 语义段(html / tts / qrcode / markdown)→ 标准 IM 段(image / audio / text)
7
+ *
8
+ * 2. **materializeOutboundMedia**(Endpoint.$sendMessage 前,各 adapter 可选)
9
+ * 标准段中的 base64 / 本地路径 → 平台 URL 或上传后的引用
10
+ */
11
+ export interface OutboundMediaUploadContext {
12
+ /** 上传二进制,返回平台可发送的 URL */
13
+ uploadBuffer?(buffer: Buffer, mimeHint?: string): Promise<string>;
14
+ /** 上传本地文件路径 */
15
+ uploadFile?(filePath: string): Promise<string>;
16
+ outboundDir?: string;
17
+ }
18
+ export type OutboundMediaMaterializer = (content: SendContent, ctx: OutboundMediaUploadContext) => Promise<SendContent>;
19
+ /** 契约测试:adapter 须声明 outboundRichSegmentPolicy */
20
+ export declare function assertAdapterDeclaresRichSegmentPolicy(adapterClass: {
21
+ outboundRichSegmentPolicy?: Record<string, string>;
22
+ }): void;
23
+ //# sourceMappingURL=outbound-media-contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-media-contract.d.ts","sourceRoot":"","sources":["../../src/built/outbound-media-contract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C;;;;;;;;GAQG;AAEH,MAAM,WAAW,0BAA0B;IACzC,yBAAyB;IACzB,YAAY,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClE,eAAe;IACf,UAAU,CAAC,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,yBAAyB,GAAG,CACtC,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,0BAA0B,KAC5B,OAAO,CAAC,WAAW,CAAC,CAAC;AAE1B,iDAAiD;AACjD,wBAAgB,sCAAsC,CACpD,YAAY,EAAE;IAAE,yBAAyB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACnE,IAAI,CAQN"}
@@ -0,0 +1,11 @@
1
+ /** 契约测试:adapter 须声明 outboundRichSegmentPolicy */
2
+ export function assertAdapterDeclaresRichSegmentPolicy(adapterClass) {
3
+ if (!adapterClass.outboundRichSegmentPolicy) {
4
+ throw new Error('Adapter must declare static outboundRichSegmentPolicy');
5
+ }
6
+ const policy = adapterClass.outboundRichSegmentPolicy;
7
+ if (typeof policy !== 'object' || Object.keys(policy).length === 0) {
8
+ throw new Error('outboundRichSegmentPolicy must be a non-empty object');
9
+ }
10
+ }
11
+ //# sourceMappingURL=outbound-media-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-media-contract.js","sourceRoot":"","sources":["../../src/built/outbound-media-contract.ts"],"names":[],"mappings":"AAyBA,iDAAiD;AACjD,MAAM,UAAU,sCAAsC,CACpD,YAAoE;IAEpE,IAAI,CAAC,YAAY,CAAC,yBAAyB,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,uDAAuD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,YAAY,CAAC,yBAAyB,CAAC;IACtD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { MessageElement, SendContent } from '../types.js';
2
+ export declare function isRemoteUrl(value: string): boolean;
3
+ /** 从 message 段 data 提取 base64 Buffer(data: URL / base64:// / raw base64) */
4
+ export declare function extractBase64Buffer(data: Record<string, unknown>): Buffer | undefined;
5
+ /** 解析本地文件路径(非 http(s) / base64) */
6
+ export declare function resolveLocalMediaPath(data: Record<string, unknown>): string | undefined;
7
+ export declare function asMessageElements(content: SendContent): MessageElement[];
8
+ export declare function isMediaSegmentType(type: string): boolean;
9
+ export declare function collectOutboundMediaKinds(content: SendContent | undefined): string[];
10
+ //# sourceMappingURL=outbound-media-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-media-utils.d.ts","sourceRoot":"","sources":["../../src/built/outbound-media-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAI/D,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,4EAA4E;AAC5E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAmBrF;AAED,mCAAmC;AACnC,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAUvF;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,WAAW,GAAG,cAAc,EAAE,CAUxE;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAExD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,EAAE,CAUpF"}
@@ -0,0 +1,63 @@
1
+ const MEDIA_SEGMENT_TYPES = new Set(['image', 'audio', 'video', 'file']);
2
+ export function isRemoteUrl(value) {
3
+ return /^https?:\/\//i.test(value);
4
+ }
5
+ /** 从 message 段 data 提取 base64 Buffer(data: URL / base64:// / raw base64) */
6
+ export function extractBase64Buffer(data) {
7
+ const url = typeof data.url === 'string' ? data.url : undefined;
8
+ const file = typeof data.file === 'string' ? data.file : undefined;
9
+ const base64 = typeof data.base64 === 'string' ? data.base64 : undefined;
10
+ if (url?.startsWith('base64://')) {
11
+ return Buffer.from(url.slice(9), 'base64');
12
+ }
13
+ if (url && /^data:[^/]+\/[^;]+;base64,/i.test(url)) {
14
+ return Buffer.from(url.replace(/^data:[^/]+\/[^;]+;base64,/, ''), 'base64');
15
+ }
16
+ if (file?.startsWith('base64://')) {
17
+ return Buffer.from(file.slice(9), 'base64');
18
+ }
19
+ if (base64) {
20
+ const raw = base64.startsWith('base64://') ? base64.slice(9) : base64;
21
+ return Buffer.from(raw, 'base64');
22
+ }
23
+ return undefined;
24
+ }
25
+ /** 解析本地文件路径(非 http(s) / base64) */
26
+ export function resolveLocalMediaPath(data) {
27
+ const url = typeof data.url === 'string' ? data.url : undefined;
28
+ const file = typeof data.file === 'string' ? data.file : undefined;
29
+ const candidate = file ?? url;
30
+ if (!candidate || isRemoteUrl(candidate))
31
+ return undefined;
32
+ if (candidate.startsWith('base64://') || /^data:/.test(candidate))
33
+ return undefined;
34
+ if (candidate.startsWith('file://') || candidate.startsWith('/') || !candidate.includes('://')) {
35
+ return candidate;
36
+ }
37
+ return undefined;
38
+ }
39
+ export function asMessageElements(content) {
40
+ if (typeof content === 'string') {
41
+ return [{ type: 'text', data: { text: content } }];
42
+ }
43
+ if (!Array.isArray(content)) {
44
+ return [content];
45
+ }
46
+ return content.map((item) => typeof item === 'string' ? { type: 'text', data: { text: item } } : item);
47
+ }
48
+ export function isMediaSegmentType(type) {
49
+ return MEDIA_SEGMENT_TYPES.has(type);
50
+ }
51
+ export function collectOutboundMediaKinds(content) {
52
+ if (content == null)
53
+ return [];
54
+ const kinds = new Set();
55
+ for (const item of asMessageElements(content)) {
56
+ const t = item?.type;
57
+ if (typeof t === 'string' && isMediaSegmentType(t)) {
58
+ kinds.add(t);
59
+ }
60
+ }
61
+ return [...kinds];
62
+ }
63
+ //# sourceMappingURL=outbound-media-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"outbound-media-utils.js","sourceRoot":"","sources":["../../src/built/outbound-media-utils.ts"],"names":[],"mappings":"AAEA,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;AAEzE,MAAM,UAAU,WAAW,CAAC,KAAa;IACvC,OAAO,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,mBAAmB,CAAC,IAA6B;IAC/D,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAEzE,IAAI,GAAG,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QACjC,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC7C,CAAC;IACD,IAAI,GAAG,IAAI,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,4BAA4B,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,IAAI,EAAE,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACtE,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,qBAAqB,CAAC,IAA6B;IACjE,MAAM,GAAG,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,IAAI,GAAG,CAAC;IAC9B,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3D,IAAI,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;QAAE,OAAO,SAAS,CAAC;IACpF,IAAI,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/F,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAAoB;IACpD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,OAAO,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAC1B,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CACzE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,OAAO,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAgC;IACxE,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,EAAE,CAAC;IAC/B,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,KAAK,MAAM,IAAI,IAAI,iBAAiB,CAAC,OAAO,CAAC,EAAE,CAAC;QAC9C,MAAM,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC;QACrB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;YACnD,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACf,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * 出站 `qrcode` 消息段(legacy 导出;新代码请用 rich-segments)。
3
+ * @deprecated 出站渲染由 Adapter.renderSendMessage → resolveRichSegments 统一处理
4
+ */
5
+ import type { SendContent } from '../types.js';
6
+ import { QrcodeSegment, readQrcodeSegmentData, type QrcodeSegmentData } from './rich-segments/qrcode-segment.js';
7
+ export type { QrcodeSegmentData };
8
+ export { QrcodeSegment, readQrcodeSegmentData };
9
+ export type QrcodeOutboundMode = 'image' | 'terminal' | 'text';
10
+ export declare function hasQrcodeSegment(content: SendContent | undefined): boolean;
11
+ /** 创建 qrcode 出站段 */
12
+ export declare function qrcodeSegment(text: string, options?: Omit<QrcodeSegmentData, 'text'>): QrcodeSegment;
13
+ /** IM 适配器:qrcode → image(data URL + base64) */
14
+ export declare function resolveQrcodeSegmentsToImages(content: SendContent | undefined): Promise<SendContent | undefined>;
15
+ /** process 适配器:终端 ASCII + 文本占位(legacy;process endpoint 现解释 origin qrcode) */
16
+ export declare function resolveQrcodeSegmentsToTerminal(content: SendContent | undefined): Promise<SendContent | undefined>;
17
+ /** 不支持图片的平台:仅输出链接文本 */
18
+ export declare function coerceQrcodeSegmentsToText(content: SendContent): SendContent;
19
+ //# sourceMappingURL=qrcode-segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode-segment.d.ts","sourceRoot":"","sources":["../../src/built/qrcode-segment.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAkB,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/D,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,KAAK,iBAAiB,EACvB,MAAM,mCAAmC,CAAC;AAE3C,YAAY,EAAE,iBAAiB,EAAE,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;AAY/D,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,GAAG,OAAO,CAG1E;AAED,oBAAoB;AACpB,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAM,GAC5C,aAAa,CAEf;AAQD,+CAA+C;AAC/C,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAIlC;AAED,6EAA6E;AAC7E,wBAAsB,+BAA+B,CACnD,OAAO,EAAE,WAAW,GAAG,SAAS,GAC/B,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC,CAwBlC;AAED,uBAAuB;AACvB,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAgB5E"}
@@ -0,0 +1,79 @@
1
+ import { segment } from '../utils.js';
2
+ import { GeneratedQrCode } from './generated-qrcode.js';
3
+ import { QrcodeSegment, readQrcodeSegmentData, } from './rich-segments/qrcode-segment.js';
4
+ export { QrcodeSegment, readQrcodeSegmentData };
5
+ function asArray(content) {
6
+ return Array.isArray(content) ? content : [content];
7
+ }
8
+ function packSegments(out) {
9
+ if (out.length === 0)
10
+ return segment.text('');
11
+ if (out.length === 1)
12
+ return out[0];
13
+ return out;
14
+ }
15
+ export function hasQrcodeSegment(content) {
16
+ if (content == null)
17
+ return false;
18
+ return asArray(content).some((item) => typeof item !== 'string' && item?.type === 'qrcode');
19
+ }
20
+ /** 创建 qrcode 出站段 */
21
+ export function qrcodeSegment(text, options = {}) {
22
+ return new QrcodeSegment({ text, ...options });
23
+ }
24
+ const LEGACY_QRCODE_ONLY_POLICY = {
25
+ qrcode: 'image',
26
+ html: 'origin',
27
+ markdown: 'origin',
28
+ };
29
+ /** IM 适配器:qrcode → image(data URL + base64) */
30
+ export async function resolveQrcodeSegmentsToImages(content) {
31
+ if (content == null)
32
+ return content;
33
+ const { resolveRichSegments } = await import('./rich-segments/index.js');
34
+ return resolveRichSegments(content, LEGACY_QRCODE_ONLY_POLICY);
35
+ }
36
+ /** process 适配器:终端 ASCII + 文本占位(legacy;process endpoint 现解释 origin qrcode) */
37
+ export async function resolveQrcodeSegmentsToTerminal(content) {
38
+ if (content == null)
39
+ return content;
40
+ if (!hasQrcodeSegment(content))
41
+ return content;
42
+ const items = asArray(content);
43
+ const out = [];
44
+ for (const item of items) {
45
+ if (typeof item === 'string') {
46
+ out.push(item);
47
+ continue;
48
+ }
49
+ if (item.type !== 'qrcode') {
50
+ out.push(item);
51
+ continue;
52
+ }
53
+ const payload = readQrcodeSegmentData(item.data ?? {});
54
+ const qr = await GeneratedQrCode.generate(payload.text, payload);
55
+ await qr.printToTerminal({ small: payload.small ?? true });
56
+ out.push(segment.text(`[二维码] ${payload.text}`));
57
+ }
58
+ return packSegments(out);
59
+ }
60
+ /** 不支持图片的平台:仅输出链接文本 */
61
+ export function coerceQrcodeSegmentsToText(content) {
62
+ const items = asArray(content);
63
+ const out = [];
64
+ for (const item of items) {
65
+ if (typeof item === 'string') {
66
+ out.push(item);
67
+ continue;
68
+ }
69
+ if (item?.type === 'qrcode') {
70
+ const text = typeof item.data?.text === 'string' ? item.data.text : '';
71
+ if (text)
72
+ out.push(segment.text(`[二维码] ${text}`));
73
+ continue;
74
+ }
75
+ out.push(item);
76
+ }
77
+ return packSegments(out);
78
+ }
79
+ //# sourceMappingURL=qrcode-segment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qrcode-segment.js","sourceRoot":"","sources":["../../src/built/qrcode-segment.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EACL,aAAa,EACb,qBAAqB,GAEtB,MAAM,mCAAmC,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,CAAC;AAIhD,SAAS,OAAO,CAAC,OAAoB;IACnC,OAAO,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,YAAY,CAAC,GAAgC;IACpD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC,CAAC,CAAE,CAAC;IACrC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,OAAgC;IAC/D,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAClC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC9F,CAAC;AAED,oBAAoB;AACpB,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,UAA2C,EAAE;IAE7C,OAAO,IAAI,aAAa,CAAC,EAAE,IAAI,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,yBAAyB,GAAG;IAChC,MAAM,EAAE,OAAgB;IACxB,IAAI,EAAE,QAAiB;IACvB,QAAQ,EAAE,QAAiB;CAC5B,CAAC;AAEF,+CAA+C;AAC/C,MAAM,CAAC,KAAK,UAAU,6BAA6B,CACjD,OAAgC;IAEhC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IACpC,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IACzE,OAAO,mBAAmB,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;AACjE,CAAC;AAED,6EAA6E;AAC7E,MAAM,CAAC,KAAK,UAAU,+BAA+B,CACnD,OAAgC;IAEhC,IAAI,OAAO,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC;IACpC,IAAI,CAAC,gBAAgB,CAAC,OAAO,CAAC;QAAE,OAAO,OAAO,CAAC;IAE/C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAgC,EAAE,CAAC;IAE5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QAED,MAAM,OAAO,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACjE,MAAM,EAAE,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,uBAAuB;AACvB,MAAM,UAAU,0BAA0B,CAAC,OAAoB;IAC7D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/B,MAAM,GAAG,GAAgC,EAAE,CAAC;IAC5C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,IAAI,IAAI,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,IAAI,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACvE,IAAI,IAAI;gBAAE,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC;YAClD,SAAS;QACX,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { OutboundRichSegmentPolicy } from './types.js';
2
+ /** 全功能 IM:html/markdown/qrcode→image,tts→audio */
3
+ export declare const OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL: OutboundRichSegmentPolicy;
4
+ /** 仅文本降级(无富媒体出站能力) */
5
+ export declare const OUTBOUND_RICH_SEGMENT_POLICY_TEXT_ONLY: OutboundRichSegmentPolicy;
6
+ /** 默认 registry 等价(html/markdown 文本,qrcode 图片,tts 音频) */
7
+ export declare const OUTBOUND_RICH_SEGMENT_POLICY_IM_DEFAULT: OutboundRichSegmentPolicy;
8
+ /** 无音频出站(tts 降级 text) */
9
+ export declare const OUTBOUND_RICH_SEGMENT_POLICY_NO_AUDIO: OutboundRichSegmentPolicy;
10
+ //# sourceMappingURL=adapter-policies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-policies.d.ts","sourceRoot":"","sources":["../../../src/built/rich-segments/adapter-policies.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAG5D,kDAAkD;AAClD,eAAO,MAAM,oCAAoC,EAAE,yBAKlD,CAAC;AAEF,sBAAsB;AACtB,eAAO,MAAM,sCAAsC,EAAE,yBAKpD,CAAC;AAEF,wDAAwD;AACxD,eAAO,MAAM,uCAAuC,EAAE,yBAKrD,CAAC;AAEF,yBAAyB;AACzB,eAAO,MAAM,qCAAqC,EAAE,yBAGnD,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { BUILTIN_RICH_SEGMENT_KINDS, RICH_SEGMENT_MODE } from './types.js';
2
+ /** 全功能 IM:html/markdown/qrcode→image,tts→audio */
3
+ export const OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL = {
4
+ [BUILTIN_RICH_SEGMENT_KINDS.QRCODE]: RICH_SEGMENT_MODE.IMAGE,
5
+ [BUILTIN_RICH_SEGMENT_KINDS.HTML]: RICH_SEGMENT_MODE.IMAGE,
6
+ [BUILTIN_RICH_SEGMENT_KINDS.MARKDOWN]: RICH_SEGMENT_MODE.IMAGE,
7
+ [BUILTIN_RICH_SEGMENT_KINDS.TTS]: RICH_SEGMENT_MODE.AUDIO,
8
+ };
9
+ /** 仅文本降级(无富媒体出站能力) */
10
+ export const OUTBOUND_RICH_SEGMENT_POLICY_TEXT_ONLY = {
11
+ [BUILTIN_RICH_SEGMENT_KINDS.QRCODE]: RICH_SEGMENT_MODE.TEXT,
12
+ [BUILTIN_RICH_SEGMENT_KINDS.HTML]: RICH_SEGMENT_MODE.TEXT,
13
+ [BUILTIN_RICH_SEGMENT_KINDS.MARKDOWN]: RICH_SEGMENT_MODE.TEXT,
14
+ [BUILTIN_RICH_SEGMENT_KINDS.TTS]: RICH_SEGMENT_MODE.TEXT,
15
+ };
16
+ /** 默认 registry 等价(html/markdown 文本,qrcode 图片,tts 音频) */
17
+ export const OUTBOUND_RICH_SEGMENT_POLICY_IM_DEFAULT = {
18
+ [BUILTIN_RICH_SEGMENT_KINDS.QRCODE]: RICH_SEGMENT_MODE.IMAGE,
19
+ [BUILTIN_RICH_SEGMENT_KINDS.HTML]: RICH_SEGMENT_MODE.TEXT,
20
+ [BUILTIN_RICH_SEGMENT_KINDS.MARKDOWN]: RICH_SEGMENT_MODE.TEXT,
21
+ [BUILTIN_RICH_SEGMENT_KINDS.TTS]: RICH_SEGMENT_MODE.AUDIO,
22
+ };
23
+ /** 无音频出站(tts 降级 text) */
24
+ export const OUTBOUND_RICH_SEGMENT_POLICY_NO_AUDIO = {
25
+ ...OUTBOUND_RICH_SEGMENT_POLICY_IM_FULL,
26
+ [BUILTIN_RICH_SEGMENT_KINDS.TTS]: RICH_SEGMENT_MODE.TEXT,
27
+ };
28
+ //# sourceMappingURL=adapter-policies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter-policies.js","sourceRoot":"","sources":["../../../src/built/rich-segments/adapter-policies.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE3E,kDAAkD;AAClD,MAAM,CAAC,MAAM,oCAAoC,GAA8B;IAC7E,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK;IAC5D,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,KAAK;IAC1D,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,KAAK;IAC9D,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,KAAK;CAC1D,CAAC;AAEF,sBAAsB;AACtB,MAAM,CAAC,MAAM,sCAAsC,GAA8B;IAC/E,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,IAAI;IAC3D,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,IAAI;IACzD,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,IAAI;IAC7D,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,IAAI;CACzD,CAAC;AAEF,wDAAwD;AACxD,MAAM,CAAC,MAAM,uCAAuC,GAA8B;IAChF,CAAC,0BAA0B,CAAC,MAAM,CAAC,EAAE,iBAAiB,CAAC,KAAK;IAC5D,CAAC,0BAA0B,CAAC,IAAI,CAAC,EAAE,iBAAiB,CAAC,IAAI;IACzD,CAAC,0BAA0B,CAAC,QAAQ,CAAC,EAAE,iBAAiB,CAAC,IAAI;IAC7D,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,KAAK;CAC1D,CAAC;AAEF,yBAAyB;AACzB,MAAM,CAAC,MAAM,qCAAqC,GAA8B;IAC9E,GAAG,oCAAoC;IACvC,CAAC,0BAA0B,CAAC,GAAG,CAAC,EAAE,iBAAiB,CAAC,IAAI;CACzD,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { MessageElement } from '../../types.js';
2
+ import type { RichSegmentRenderContext, RichSegmentRenderResult } from './types.js';
3
+ export declare abstract class RichSegment<TData> {
4
+ readonly data: TData;
5
+ abstract readonly segmentType: string;
6
+ constructor(data: TData);
7
+ abstract render(mode: string, ctx?: RichSegmentRenderContext): Promise<RichSegmentRenderResult>;
8
+ toJSON(): MessageElement;
9
+ }
10
+ export declare function isRichSegment(item: unknown): item is RichSegment<unknown>;
11
+ export declare function richSegmentKind(item: MessageElement | string): string | null;
12
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/built/rich-segments/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD,OAAO,KAAK,EACV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAEpB,8BAAsB,WAAW,CAAC,KAAK;IAGzB,QAAQ,CAAC,IAAI,EAAE,KAAK;IAFhC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;gBAEjB,IAAI,EAAE,KAAK;IAEhC,QAAQ,CAAC,MAAM,CACb,IAAI,EAAE,MAAM,EACZ,GAAG,CAAC,EAAE,wBAAwB,GAC7B,OAAO,CAAC,uBAAuB,CAAC;IAEnC,MAAM,IAAI,cAAc;CAGzB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,WAAW,CAAC,OAAO,CAAC,CAEzE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAQ5E"}
@@ -0,0 +1,25 @@
1
+ import { richSegmentRegistry } from './registry.js';
2
+ export class RichSegment {
3
+ data;
4
+ constructor(data) {
5
+ this.data = data;
6
+ }
7
+ toJSON() {
8
+ return { type: this.segmentType, data: this.data };
9
+ }
10
+ }
11
+ export function isRichSegment(item) {
12
+ return item instanceof RichSegment;
13
+ }
14
+ export function richSegmentKind(item) {
15
+ if (typeof item === 'string')
16
+ return null;
17
+ const type = item.type;
18
+ if (typeof type !== 'string')
19
+ return null;
20
+ if (richSegmentRegistry.has(type)) {
21
+ return type;
22
+ }
23
+ return null;
24
+ }
25
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/built/rich-segments/base.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAMpD,MAAM,OAAgB,WAAW;IAGV;IAArB,YAAqB,IAAW;QAAX,SAAI,GAAJ,IAAI,CAAO;IAAG,CAAC;IAOpC,MAAM;QACJ,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAA+B,EAAE,CAAC;IAChF,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,IAAI,YAAY,WAAW,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAA6B;IAC3D,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACvB,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** 内置 kind 的默认出站 policy(由 registry 生成,增 kind 时自动包含) */
2
+ export declare const DEFAULT_OUTBOUND_RICH_SEGMENT_POLICY: import("./types.js").OutboundRichSegmentPolicy;
3
+ /** 测试:清空 registry 后重新注册内置 kind */
4
+ export declare function resetBuiltinRichSegmentKindsForTests(): void;
5
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../../src/built/rich-segments/builtins.ts"],"names":[],"mappings":"AAuCA,uDAAuD;AACvD,eAAO,MAAM,oCAAoC,gDAA2C,CAAC;AAE7F,kCAAkC;AAClC,wBAAgB,oCAAoC,IAAI,IAAI,CAG3D"}
@@ -0,0 +1,41 @@
1
+ import { registerRichSegmentKind, richSegmentRegistry } from './registry.js';
2
+ import { wrapQrcodeSegment } from './qrcode-segment.js';
3
+ import { wrapHtmlSegment } from './html-segment.js';
4
+ import { wrapMarkdownSegment } from './markdown-segment.js';
5
+ import { wrapTtsSegment } from './tts-segment.js';
6
+ import { BUILTIN_RICH_SEGMENT_KINDS, RICH_SEGMENT_MODE } from './types.js';
7
+ function registerBuiltinRichSegmentKinds() {
8
+ registerRichSegmentKind({
9
+ kind: BUILTIN_RICH_SEGMENT_KINDS.QRCODE,
10
+ defaultMode: RICH_SEGMENT_MODE.IMAGE,
11
+ modes: [RICH_SEGMENT_MODE.IMAGE, RICH_SEGMENT_MODE.TEXT, RICH_SEGMENT_MODE.ORIGIN],
12
+ wrap: wrapQrcodeSegment,
13
+ });
14
+ registerRichSegmentKind({
15
+ kind: BUILTIN_RICH_SEGMENT_KINDS.HTML,
16
+ defaultMode: RICH_SEGMENT_MODE.TEXT,
17
+ modes: [RICH_SEGMENT_MODE.IMAGE, RICH_SEGMENT_MODE.TEXT, RICH_SEGMENT_MODE.ORIGIN],
18
+ wrap: wrapHtmlSegment,
19
+ });
20
+ registerRichSegmentKind({
21
+ kind: BUILTIN_RICH_SEGMENT_KINDS.MARKDOWN,
22
+ defaultMode: RICH_SEGMENT_MODE.TEXT,
23
+ modes: [RICH_SEGMENT_MODE.IMAGE, RICH_SEGMENT_MODE.TEXT, RICH_SEGMENT_MODE.ORIGIN],
24
+ wrap: wrapMarkdownSegment,
25
+ });
26
+ registerRichSegmentKind({
27
+ kind: BUILTIN_RICH_SEGMENT_KINDS.TTS,
28
+ defaultMode: RICH_SEGMENT_MODE.AUDIO,
29
+ modes: [RICH_SEGMENT_MODE.ORIGIN, RICH_SEGMENT_MODE.AUDIO, RICH_SEGMENT_MODE.TEXT],
30
+ wrap: wrapTtsSegment,
31
+ });
32
+ }
33
+ registerBuiltinRichSegmentKinds();
34
+ /** 内置 kind 的默认出站 policy(由 registry 生成,增 kind 时自动包含) */
35
+ export const DEFAULT_OUTBOUND_RICH_SEGMENT_POLICY = richSegmentRegistry.buildDefaultPolicy();
36
+ /** 测试:清空 registry 后重新注册内置 kind */
37
+ export function resetBuiltinRichSegmentKindsForTests() {
38
+ richSegmentRegistry.clearForTests();
39
+ registerBuiltinRichSegmentKinds();
40
+ }
41
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../../src/built/rich-segments/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE3E,SAAS,+BAA+B;IACtC,uBAAuB,CAAC;QACtB,IAAI,EAAE,0BAA0B,CAAC,MAAM;QACvC,WAAW,EAAE,iBAAiB,CAAC,KAAK;QACpC,KAAK,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;QAClF,IAAI,EAAE,iBAAiB;KACxB,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,IAAI,EAAE,0BAA0B,CAAC,IAAI;QACrC,WAAW,EAAE,iBAAiB,CAAC,IAAI;QACnC,KAAK,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;QAClF,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,IAAI,EAAE,0BAA0B,CAAC,QAAQ;QACzC,WAAW,EAAE,iBAAiB,CAAC,IAAI;QACnC,KAAK,EAAE,CAAC,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC;QAClF,IAAI,EAAE,mBAAmB;KAC1B,CAAC,CAAC;IAEH,uBAAuB,CAAC;QACtB,IAAI,EAAE,0BAA0B,CAAC,GAAG;QACpC,WAAW,EAAE,iBAAiB,CAAC,KAAK;QACpC,KAAK,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,CAAC,KAAK,EAAE,iBAAiB,CAAC,IAAI,CAAC;QAClF,IAAI,EAAE,cAAc;KACrB,CAAC,CAAC;AACL,CAAC;AAED,+BAA+B,EAAE,CAAC;AAElC,uDAAuD;AACvD,MAAM,CAAC,MAAM,oCAAoC,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,CAAC;AAE7F,kCAAkC;AAClC,MAAM,UAAU,oCAAoC;IAClD,mBAAmB,CAAC,aAAa,EAAE,CAAC;IACpC,+BAA+B,EAAE,CAAC;AACpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { RichSegmentCapabilityLoader, RichSegmentCapabilityLoaderOptions, RichSegmentRenderContext } from './types.js';
2
+ /** 注册 optional 包能力(如 html-renderer、未来 media-pipeline) */
3
+ export declare function registerRichSegmentCapabilityLoader(id: string, loader: RichSegmentCapabilityLoader): void;
4
+ /** 测试隔离 */
5
+ export declare function resetRichSegmentCapabilityLoadersForTests(): void;
6
+ export declare function createRichSegmentRenderContext(options?: RichSegmentCapabilityLoaderOptions): RichSegmentRenderContext;
7
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../src/built/rich-segments/capabilities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,2BAA2B,EAC3B,kCAAkC,EAClC,wBAAwB,EAEzB,MAAM,YAAY,CAAC;AAIpB,yDAAyD;AACzD,wBAAgB,mCAAmC,CACjD,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,2BAA2B,GAClC,IAAI,CAEN;AAED,WAAW;AACX,wBAAgB,yCAAyC,IAAI,IAAI,CAGhE;AAmBD,wBAAgB,8BAA8B,CAC5C,OAAO,GAAE,kCAAuC,GAC/C,wBAAwB,CAiB1B"}
@@ -0,0 +1,40 @@
1
+ import { loadHtmlRenderer } from '../html-renderer-loader.js';
2
+ import { loadSpeechPipeline } from '../speech-loader.js';
3
+ const capabilityLoaders = new Map();
4
+ /** 注册 optional 包能力(如 html-renderer、未来 media-pipeline) */
5
+ export function registerRichSegmentCapabilityLoader(id, loader) {
6
+ capabilityLoaders.set(id, loader);
7
+ }
8
+ /** 测试隔离 */
9
+ export function resetRichSegmentCapabilityLoadersForTests() {
10
+ capabilityLoaders.clear();
11
+ registerCoreRichSegmentCapabilityLoaders();
12
+ }
13
+ function registerCoreRichSegmentCapabilityLoaders() {
14
+ registerRichSegmentCapabilityLoader('html-renderer', async (options) => loadHtmlRenderer({
15
+ getConfig: options.getConfig,
16
+ warn: options.warn,
17
+ }));
18
+ registerRichSegmentCapabilityLoader('speech', async (options) => loadSpeechPipeline({
19
+ getConfig: options.getConfig,
20
+ warn: options.warn,
21
+ }));
22
+ }
23
+ registerCoreRichSegmentCapabilityLoaders();
24
+ export function createRichSegmentRenderContext(options = {}) {
25
+ const cache = new Map();
26
+ const resolveCapability = async (id) => {
27
+ if (!cache.has(id)) {
28
+ const loader = capabilityLoaders.get(id);
29
+ cache.set(id, loader ? loader(options) : Promise.resolve(undefined));
30
+ }
31
+ return cache.get(id);
32
+ };
33
+ return {
34
+ resolveCapability,
35
+ getHtmlRenderer: () => resolveCapability('html-renderer'),
36
+ warn: options.warn,
37
+ logContentChain: options.logContentChain,
38
+ };
39
+ }
40
+ //# sourceMappingURL=capabilities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../../../src/built/rich-segments/capabilities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AASzD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAuC,CAAC;AAEzE,yDAAyD;AACzD,MAAM,UAAU,mCAAmC,CACjD,EAAU,EACV,MAAmC;IAEnC,iBAAiB,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED,WAAW;AACX,MAAM,UAAU,yCAAyC;IACvD,iBAAiB,CAAC,KAAK,EAAE,CAAC;IAC1B,wCAAwC,EAAE,CAAC;AAC7C,CAAC;AAED,SAAS,wCAAwC;IAC/C,mCAAmC,CAAC,eAAe,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CACrE,gBAAgB,CAAC;QACf,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAoD,CACtD,CAAC;IACF,mCAAmC,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAC9D,kBAAkB,CAAC;QACjB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;KACnB,CAAsD,CACxD,CAAC;AACJ,CAAC;AAED,wCAAwC,EAAE,CAAC;AAE3C,MAAM,UAAU,8BAA8B,CAC5C,UAA8C,EAAE;IAEhD,MAAM,KAAK,GAAG,IAAI,GAAG,EAA4B,CAAC;IAElD,MAAM,iBAAiB,GAAG,KAAK,EAAK,EAAU,EAA0B,EAAE;QACxE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACzC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,KAAK,CAAC,GAAG,CAAC,EAAE,CAA2B,CAAC;IACjD,CAAC,CAAC;IAEF,OAAO;QACL,iBAAiB;QACjB,eAAe,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAA6B,eAAe,CAAC;QACrF,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,eAAe,EAAE,OAAO,CAAC,eAAe;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { RichSegment } from './base.js';
2
+ import type { RichSegmentRenderContext, RichSegmentRenderResult } from './types.js';
3
+ export interface HtmlSegmentData {
4
+ html: string;
5
+ text?: string;
6
+ width?: number;
7
+ backgroundColor?: string;
8
+ fileName?: string;
9
+ }
10
+ export declare class HtmlSegment extends RichSegment<HtmlSegmentData> {
11
+ readonly segmentType: "html";
12
+ readonly type: "html";
13
+ render(mode: string, ctx?: RichSegmentRenderContext): Promise<RichSegmentRenderResult>;
14
+ }
15
+ export declare function wrapHtmlSegment(data: Record<string, unknown>): HtmlSegment;
16
+ //# sourceMappingURL=html-segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"html-segment.d.ts","sourceRoot":"","sources":["../../../src/built/rich-segments/html-segment.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACxC,OAAO,KAAK,EAEV,wBAAwB,EACxB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AAGpB,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAYD,qBAAa,WAAY,SAAQ,WAAW,CAAC,eAAe,CAAC;IAC3D,QAAQ,CAAC,WAAW,EAAG,MAAM,CAAU;IACvC,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAE1B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC;CA8C7F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,WAAW,CAS1E"}