@zhin.js/core 1.3.1 → 1.3.3

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 (358) hide show
  1. package/README.md +66 -11
  2. package/lib/adapter.d.ts +41 -3
  3. package/lib/adapter.js +110 -6
  4. package/lib/agent-prompt.d.ts +0 -1
  5. package/lib/agent-prompt.js +0 -1
  6. package/lib/built/adapter-process.d.ts +11 -2
  7. package/lib/built/adapter-process.js +43 -2
  8. package/lib/built/agent-preset.d.ts +0 -1
  9. package/lib/built/agent-preset.js +0 -1
  10. package/lib/built/ai-access.d.ts +36 -0
  11. package/lib/built/ai-access.js +46 -0
  12. package/lib/built/ai-outbound/adapter-access.d.ts +3 -0
  13. package/lib/built/ai-outbound/adapter-access.js +9 -0
  14. package/lib/built/ai-outbound/extensions/onebot-keyboard.d.ts +2 -0
  15. package/lib/built/ai-outbound/extensions/onebot-keyboard.js +67 -0
  16. package/lib/built/ai-outbound/extensions/qq-message.d.ts +3 -0
  17. package/lib/built/ai-outbound/extensions/qq-message.js +23 -0
  18. package/lib/built/ai-outbound/index.d.ts +9 -0
  19. package/lib/built/ai-outbound/index.js +9 -0
  20. package/lib/built/ai-outbound/parse.d.ts +13 -0
  21. package/lib/built/ai-outbound/parse.js +94 -0
  22. package/lib/built/ai-outbound/plain-mention-rewrite.d.ts +6 -0
  23. package/lib/built/ai-outbound/plain-mention-rewrite.js +37 -0
  24. package/lib/built/ai-outbound/prompt.d.ts +11 -0
  25. package/lib/built/ai-outbound/prompt.js +44 -0
  26. package/lib/built/ai-outbound/resolve.d.ts +4 -0
  27. package/lib/built/ai-outbound/resolve.js +64 -0
  28. package/lib/built/ai-outbound/structured-detect.d.ts +3 -0
  29. package/lib/built/ai-outbound/structured-detect.js +7 -0
  30. package/lib/built/ai-outbound/types.d.ts +60 -0
  31. package/lib/built/ai-outbound/types.js +5 -0
  32. package/lib/built/ai-trigger.d.ts +5 -1
  33. package/lib/built/ai-trigger.js +3 -7
  34. package/lib/built/authorization.d.ts +0 -1
  35. package/lib/built/authorization.js +0 -1
  36. package/lib/built/command.d.ts +2 -1
  37. package/lib/built/command.js +14 -4
  38. package/lib/built/common-adapter-tools.d.ts +25 -26
  39. package/lib/built/common-adapter-tools.js +48 -49
  40. package/lib/built/component.d.ts +0 -1
  41. package/lib/built/component.js +1 -3
  42. package/lib/built/config.d.ts +4 -1
  43. package/lib/built/config.js +26 -5
  44. package/lib/built/connect-endpoint-instance.d.ts +0 -1
  45. package/lib/built/connect-endpoint-instance.js +3 -2
  46. package/lib/built/database.d.ts +0 -1
  47. package/lib/built/database.js +1 -3
  48. package/lib/built/dispatcher.d.ts +6 -6
  49. package/lib/built/dispatcher.js +20 -8
  50. package/lib/built/endpoint-commands.d.ts +3 -0
  51. package/lib/built/endpoint-commands.js +99 -0
  52. package/lib/built/endpoint-lifecycle-service.d.ts +28 -0
  53. package/lib/built/endpoint-lifecycle-service.js +241 -0
  54. package/lib/built/endpoint-lifecycle.d.ts +0 -1
  55. package/lib/built/endpoint-lifecycle.js +0 -1
  56. package/lib/built/endpoint-manager.d.ts +34 -0
  57. package/lib/built/endpoint-manager.js +1 -0
  58. package/lib/built/generated-qrcode.d.ts +24 -0
  59. package/lib/built/generated-qrcode.js +45 -0
  60. package/lib/built/generic-segment-mapper.d.ts +6 -0
  61. package/lib/built/generic-segment-mapper.js +232 -0
  62. package/lib/built/html-renderer-loader.d.ts +13 -0
  63. package/lib/built/html-renderer-loader.js +33 -0
  64. package/lib/built/html-segment-fallback.d.ts +2 -2
  65. package/lib/built/html-segment-fallback.js +0 -1
  66. package/lib/built/html-to-text.d.ts +0 -1
  67. package/lib/built/html-to-text.js +0 -1
  68. package/lib/built/inbound-pipeline.d.ts +0 -1
  69. package/lib/built/inbound-pipeline.js +0 -1
  70. package/lib/built/inbound-runner.d.ts +0 -1
  71. package/lib/built/inbound-runner.js +0 -1
  72. package/lib/built/interactive-segment-contract.d.ts +6 -0
  73. package/lib/built/interactive-segment-contract.js +9 -0
  74. package/lib/built/interactive-segments/action.d.ts +17 -0
  75. package/lib/built/interactive-segments/action.js +54 -0
  76. package/lib/built/interactive-segments/button-spec.d.ts +10 -0
  77. package/lib/built/interactive-segments/button-spec.js +21 -0
  78. package/lib/built/interactive-segments/handlers.d.ts +9 -0
  79. package/lib/built/interactive-segments/handlers.js +58 -0
  80. package/lib/built/interactive-segments/index.d.ts +7 -0
  81. package/lib/built/interactive-segments/index.js +7 -0
  82. package/lib/built/interactive-segments/keyboard-segment.d.ts +12 -0
  83. package/lib/built/interactive-segments/keyboard-segment.js +13 -0
  84. package/lib/built/interactive-segments/onebot-keyboard.d.ts +10 -0
  85. package/lib/built/interactive-segments/onebot-keyboard.js +53 -0
  86. package/lib/built/interactive-segments/resolve.d.ts +9 -0
  87. package/lib/built/interactive-segments/resolve.js +84 -0
  88. package/lib/built/interactive-segments/types.d.ts +62 -0
  89. package/lib/built/interactive-segments/types.js +13 -0
  90. package/lib/built/introspection-format.d.ts +10 -0
  91. package/lib/built/introspection-format.js +28 -0
  92. package/lib/built/login-assist.d.ts +1 -2
  93. package/lib/built/login-assist.js +0 -1
  94. package/lib/built/management-command-guard.d.ts +15 -0
  95. package/lib/built/management-command-guard.js +25 -0
  96. package/lib/built/message-enrich.d.ts +0 -1
  97. package/lib/built/message-enrich.js +0 -1
  98. package/lib/built/message-filter.d.ts +0 -1
  99. package/lib/built/message-filter.js +1 -3
  100. package/lib/built/optional-peer-import.d.ts +3 -0
  101. package/lib/built/optional-peer-import.js +33 -0
  102. package/lib/built/outbound-media-contract.d.ts +22 -0
  103. package/lib/built/outbound-media-contract.js +10 -0
  104. package/lib/built/outbound-media-utils.d.ts +9 -0
  105. package/lib/built/outbound-media-utils.js +62 -0
  106. package/lib/built/permission.d.ts +0 -1
  107. package/lib/built/permission.js +1 -3
  108. package/lib/built/permit-check.d.ts +0 -1
  109. package/lib/built/permit-check.js +0 -1
  110. package/lib/built/permit-parse.d.ts +0 -1
  111. package/lib/built/permit-parse.js +0 -1
  112. package/lib/built/platform-permit.d.ts +5 -6
  113. package/lib/built/platform-permit.js +11 -12
  114. package/lib/built/prepend-quote-context.d.ts +0 -1
  115. package/lib/built/prepend-quote-context.js +0 -1
  116. package/lib/built/qrcode-segment.d.ts +18 -0
  117. package/lib/built/qrcode-segment.js +78 -0
  118. package/lib/built/queue-im-field-contract.d.ts +6 -1
  119. package/lib/built/queue-im-field-contract.js +10 -1
  120. package/lib/built/rich-segments/adapter-policies.d.ts +9 -0
  121. package/lib/built/rich-segments/adapter-policies.js +27 -0
  122. package/lib/built/rich-segments/base.d.ts +11 -0
  123. package/lib/built/rich-segments/base.js +24 -0
  124. package/lib/built/rich-segments/builtins.d.ts +4 -0
  125. package/lib/built/rich-segments/builtins.js +40 -0
  126. package/lib/built/rich-segments/capabilities.d.ts +6 -0
  127. package/lib/built/rich-segments/capabilities.js +39 -0
  128. package/lib/built/rich-segments/html-segment.d.ts +15 -0
  129. package/lib/built/rich-segments/html-segment.js +65 -0
  130. package/lib/built/rich-segments/index.d.ts +13 -0
  131. package/lib/built/rich-segments/index.js +13 -0
  132. package/lib/built/rich-segments/markdown-segment.d.ts +14 -0
  133. package/lib/built/rich-segments/markdown-segment.js +61 -0
  134. package/lib/built/rich-segments/markdown-to-text.d.ts +3 -0
  135. package/lib/built/rich-segments/markdown-to-text.js +27 -0
  136. package/lib/built/rich-segments/qrcode-segment.d.ts +18 -0
  137. package/lib/built/rich-segments/qrcode-segment.js +73 -0
  138. package/lib/built/rich-segments/registry.d.ts +16 -0
  139. package/lib/built/rich-segments/registry.js +52 -0
  140. package/lib/built/rich-segments/resolve.d.ts +5 -0
  141. package/lib/built/rich-segments/resolve.js +87 -0
  142. package/lib/built/rich-segments/tts-segment.d.ts +13 -0
  143. package/lib/built/rich-segments/tts-segment.js +51 -0
  144. package/lib/built/rich-segments/types.d.ts +84 -0
  145. package/lib/built/rich-segments/types.js +17 -0
  146. package/lib/built/roles.d.ts +0 -1
  147. package/lib/built/roles.js +0 -1
  148. package/lib/built/runtime-io.d.ts +0 -1
  149. package/lib/built/runtime-io.js +0 -1
  150. package/lib/built/schedule.d.ts +55 -0
  151. package/lib/built/schedule.js +112 -0
  152. package/lib/built/schema-endpoint-manager.d.ts +17 -0
  153. package/lib/built/schema-endpoint-manager.js +73 -0
  154. package/lib/built/schema-feature.d.ts +0 -1
  155. package/lib/built/schema-feature.js +1 -3
  156. package/lib/built/segment-contract/assert.d.ts +4 -0
  157. package/lib/built/segment-contract/assert.js +30 -0
  158. package/lib/built/segment-contract/delivery.d.ts +5 -0
  159. package/lib/built/segment-contract/delivery.js +40 -0
  160. package/lib/built/segment-contract/image.d.ts +5 -0
  161. package/lib/built/segment-contract/image.js +10 -0
  162. package/lib/built/segment-contract/index.d.ts +8 -0
  163. package/lib/built/segment-contract/index.js +7 -0
  164. package/lib/built/segment-contract/media.d.ts +8 -0
  165. package/lib/built/segment-contract/media.js +39 -0
  166. package/lib/built/segment-contract/mention.d.ts +10 -0
  167. package/lib/built/segment-contract/mention.js +26 -0
  168. package/lib/built/segment-contract/preview.d.ts +3 -0
  169. package/lib/built/segment-contract/preview.js +159 -0
  170. package/lib/built/segment-contract/types.d.ts +70 -0
  171. package/lib/built/segment-contract/types.js +5 -0
  172. package/lib/built/segment-contract/validate.d.ts +138 -0
  173. package/lib/built/segment-contract/validate.js +124 -0
  174. package/lib/built/skill.d.ts +0 -1
  175. package/lib/built/skill.js +0 -1
  176. package/lib/built/speech-loader.d.ts +14 -0
  177. package/lib/built/speech-loader.js +32 -0
  178. package/lib/built/tool.d.ts +0 -1
  179. package/lib/built/tool.js +1 -3
  180. package/lib/command.d.ts +12 -7
  181. package/lib/command.js +38 -16
  182. package/lib/component.d.ts +0 -1
  183. package/lib/component.js +0 -1
  184. package/lib/endpoint-capabilities.d.ts +3 -1
  185. package/lib/endpoint-capabilities.js +0 -1
  186. package/lib/endpoint.d.ts +0 -1
  187. package/lib/endpoint.js +0 -1
  188. package/lib/errors.d.ts +0 -1
  189. package/lib/errors.js +0 -1
  190. package/lib/host-plugin-registry.d.ts +0 -1
  191. package/lib/host-plugin-registry.js +0 -1
  192. package/lib/im-scene.d.ts +29 -0
  193. package/lib/im-scene.js +77 -0
  194. package/lib/im-session-id.d.ts +25 -12
  195. package/lib/im-session-id.js +35 -17
  196. package/lib/index.d.ts +25 -5
  197. package/lib/index.js +22 -4
  198. package/lib/jsx-dev-runtime.d.ts +0 -1
  199. package/lib/jsx-dev-runtime.js +0 -1
  200. package/lib/jsx-runtime.d.ts +0 -1
  201. package/lib/jsx-runtime.js +0 -1
  202. package/lib/jsx.d.ts +0 -1
  203. package/lib/jsx.js +0 -1
  204. package/lib/message-quote.d.ts +1 -2
  205. package/lib/message-quote.js +2 -3
  206. package/lib/message.d.ts +12 -2
  207. package/lib/message.js +16 -1
  208. package/lib/models/system-log.d.ts +0 -1
  209. package/lib/models/system-log.js +0 -1
  210. package/lib/models/user.d.ts +0 -1
  211. package/lib/models/user.js +0 -1
  212. package/lib/notice.d.ts +0 -1
  213. package/lib/notice.js +0 -1
  214. package/lib/plugin-context.d.ts +0 -1
  215. package/lib/plugin-context.js +0 -1
  216. package/lib/plugin.d.ts +11 -2
  217. package/lib/plugin.js +22 -23
  218. package/lib/prompt.d.ts +0 -1
  219. package/lib/prompt.js +1 -2
  220. package/lib/request.d.ts +0 -1
  221. package/lib/request.js +0 -1
  222. package/lib/tool-zod.d.ts +0 -1
  223. package/lib/tool-zod.js +0 -1
  224. package/lib/types-generator.d.ts +0 -1
  225. package/lib/types-generator.js +0 -1
  226. package/lib/types.d.ts +30 -11
  227. package/lib/types.js +0 -1
  228. package/lib/utils.d.ts +57 -12
  229. package/lib/utils.js +54 -19
  230. package/package.json +18 -9
  231. package/lib/adapter.d.ts.map +0 -1
  232. package/lib/adapter.js.map +0 -1
  233. package/lib/agent-prompt.d.ts.map +0 -1
  234. package/lib/agent-prompt.js.map +0 -1
  235. package/lib/built/adapter-process.d.ts.map +0 -1
  236. package/lib/built/adapter-process.js.map +0 -1
  237. package/lib/built/agent-preset.d.ts.map +0 -1
  238. package/lib/built/agent-preset.js.map +0 -1
  239. package/lib/built/ai-trigger.d.ts.map +0 -1
  240. package/lib/built/ai-trigger.js.map +0 -1
  241. package/lib/built/authorization.d.ts.map +0 -1
  242. package/lib/built/authorization.js.map +0 -1
  243. package/lib/built/command.d.ts.map +0 -1
  244. package/lib/built/command.js.map +0 -1
  245. package/lib/built/common-adapter-tools.d.ts.map +0 -1
  246. package/lib/built/common-adapter-tools.js.map +0 -1
  247. package/lib/built/component.d.ts.map +0 -1
  248. package/lib/built/component.js.map +0 -1
  249. package/lib/built/config.d.ts.map +0 -1
  250. package/lib/built/config.js.map +0 -1
  251. package/lib/built/connect-endpoint-instance.d.ts.map +0 -1
  252. package/lib/built/connect-endpoint-instance.js.map +0 -1
  253. package/lib/built/cron.d.ts +0 -75
  254. package/lib/built/cron.d.ts.map +0 -1
  255. package/lib/built/cron.js +0 -122
  256. package/lib/built/cron.js.map +0 -1
  257. package/lib/built/database.d.ts.map +0 -1
  258. package/lib/built/database.js.map +0 -1
  259. package/lib/built/dispatcher.d.ts.map +0 -1
  260. package/lib/built/dispatcher.js.map +0 -1
  261. package/lib/built/endpoint-lifecycle.d.ts.map +0 -1
  262. package/lib/built/endpoint-lifecycle.js.map +0 -1
  263. package/lib/built/html-segment-fallback.d.ts.map +0 -1
  264. package/lib/built/html-segment-fallback.js.map +0 -1
  265. package/lib/built/html-to-text.d.ts.map +0 -1
  266. package/lib/built/html-to-text.js.map +0 -1
  267. package/lib/built/inbound-pipeline.d.ts.map +0 -1
  268. package/lib/built/inbound-pipeline.js.map +0 -1
  269. package/lib/built/inbound-runner.d.ts.map +0 -1
  270. package/lib/built/inbound-runner.js.map +0 -1
  271. package/lib/built/login-assist.d.ts.map +0 -1
  272. package/lib/built/login-assist.js.map +0 -1
  273. package/lib/built/mcp-mesh-registrar.d.ts +0 -9
  274. package/lib/built/mcp-mesh-registrar.d.ts.map +0 -1
  275. package/lib/built/mcp-mesh-registrar.js +0 -17
  276. package/lib/built/mcp-mesh-registrar.js.map +0 -1
  277. package/lib/built/message-enrich.d.ts.map +0 -1
  278. package/lib/built/message-enrich.js.map +0 -1
  279. package/lib/built/message-filter.d.ts.map +0 -1
  280. package/lib/built/message-filter.js.map +0 -1
  281. package/lib/built/permission.d.ts.map +0 -1
  282. package/lib/built/permission.js.map +0 -1
  283. package/lib/built/permit-check.d.ts.map +0 -1
  284. package/lib/built/permit-check.js.map +0 -1
  285. package/lib/built/permit-parse.d.ts.map +0 -1
  286. package/lib/built/permit-parse.js.map +0 -1
  287. package/lib/built/platform-permit.d.ts.map +0 -1
  288. package/lib/built/platform-permit.js.map +0 -1
  289. package/lib/built/prepend-quote-context.d.ts.map +0 -1
  290. package/lib/built/prepend-quote-context.js.map +0 -1
  291. package/lib/built/queue-im-field-contract.d.ts.map +0 -1
  292. package/lib/built/queue-im-field-contract.js.map +0 -1
  293. package/lib/built/roles.d.ts.map +0 -1
  294. package/lib/built/roles.js.map +0 -1
  295. package/lib/built/runtime-io.d.ts.map +0 -1
  296. package/lib/built/runtime-io.js.map +0 -1
  297. package/lib/built/schema-feature.d.ts.map +0 -1
  298. package/lib/built/schema-feature.js.map +0 -1
  299. package/lib/built/skill.d.ts.map +0 -1
  300. package/lib/built/skill.js.map +0 -1
  301. package/lib/built/tool.d.ts.map +0 -1
  302. package/lib/built/tool.js.map +0 -1
  303. package/lib/command.d.ts.map +0 -1
  304. package/lib/command.js.map +0 -1
  305. package/lib/component.d.ts.map +0 -1
  306. package/lib/component.js.map +0 -1
  307. package/lib/endpoint-capabilities.d.ts.map +0 -1
  308. package/lib/endpoint-capabilities.js.map +0 -1
  309. package/lib/endpoint.d.ts.map +0 -1
  310. package/lib/endpoint.js.map +0 -1
  311. package/lib/errors.d.ts.map +0 -1
  312. package/lib/errors.js.map +0 -1
  313. package/lib/host-plugin-registry.d.ts.map +0 -1
  314. package/lib/host-plugin-registry.js.map +0 -1
  315. package/lib/im-session-id.d.ts.map +0 -1
  316. package/lib/im-session-id.js.map +0 -1
  317. package/lib/index.d.ts.map +0 -1
  318. package/lib/index.js.map +0 -1
  319. package/lib/jsx-dev-runtime.d.ts.map +0 -1
  320. package/lib/jsx-dev-runtime.js.map +0 -1
  321. package/lib/jsx-runtime.d.ts.map +0 -1
  322. package/lib/jsx-runtime.js.map +0 -1
  323. package/lib/jsx.d.ts.map +0 -1
  324. package/lib/jsx.js.map +0 -1
  325. package/lib/message-quote.d.ts.map +0 -1
  326. package/lib/message-quote.js.map +0 -1
  327. package/lib/message.d.ts.map +0 -1
  328. package/lib/message.js.map +0 -1
  329. package/lib/models/system-log.d.ts.map +0 -1
  330. package/lib/models/system-log.js.map +0 -1
  331. package/lib/models/user.d.ts.map +0 -1
  332. package/lib/models/user.js.map +0 -1
  333. package/lib/notice.d.ts.map +0 -1
  334. package/lib/notice.js.map +0 -1
  335. package/lib/plugin-context.d.ts.map +0 -1
  336. package/lib/plugin-context.js.map +0 -1
  337. package/lib/plugin.d.ts.map +0 -1
  338. package/lib/plugin.js.map +0 -1
  339. package/lib/prompt.d.ts.map +0 -1
  340. package/lib/prompt.js.map +0 -1
  341. package/lib/request.d.ts.map +0 -1
  342. package/lib/request.js.map +0 -1
  343. package/lib/scheduler/scheduler.d.ts +0 -49
  344. package/lib/scheduler/scheduler.d.ts.map +0 -1
  345. package/lib/scheduler/scheduler.js +0 -352
  346. package/lib/scheduler/scheduler.js.map +0 -1
  347. package/lib/scheduler/types.d.ts +0 -71
  348. package/lib/scheduler/types.d.ts.map +0 -1
  349. package/lib/scheduler/types.js +0 -8
  350. package/lib/scheduler/types.js.map +0 -1
  351. package/lib/tool-zod.d.ts.map +0 -1
  352. package/lib/tool-zod.js.map +0 -1
  353. package/lib/types-generator.d.ts.map +0 -1
  354. package/lib/types-generator.js.map +0 -1
  355. package/lib/types.d.ts.map +0 -1
  356. package/lib/types.js.map +0 -1
  357. package/lib/utils.d.ts.map +0 -1
  358. package/lib/utils.js.map +0 -1
@@ -0,0 +1,77 @@
1
+ import { resolveIMSceneSessionId as resolveIMSceneSessionIdKernel, } from '@zhin.js/kernel';
2
+ function nonEmptyString(value) {
3
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
4
+ }
5
+ /** Normalize legacy parent.type channel → guild. */
6
+ export function normalizeIMSceneParentKind(value) {
7
+ if (value === 'group' || value === 'guild')
8
+ return value;
9
+ if (value === 'channel')
10
+ return 'guild';
11
+ return undefined;
12
+ }
13
+ export function sceneRefFromMessage(message) {
14
+ const platform = nonEmptyString(message.$adapter);
15
+ const endpointId = nonEmptyString(message.$endpoint);
16
+ const kind = message.$channel?.type;
17
+ if (!platform || !endpointId || !kind)
18
+ return undefined;
19
+ const senderId = nonEmptyString(message.$sender?.id);
20
+ const channelId = nonEmptyString(message.$channel?.id);
21
+ const sceneId = kind === 'private'
22
+ ? senderId ?? channelId
23
+ : channelId ?? senderId;
24
+ if (!sceneId)
25
+ return undefined;
26
+ const parentKind = message.$channel?.parent
27
+ ? normalizeIMSceneParentKind(message.$channel.parent.type)
28
+ : undefined;
29
+ const parent = parentKind && message.$channel?.parent
30
+ ? {
31
+ kind: parentKind,
32
+ sceneId: String(message.$channel.parent.id),
33
+ }
34
+ : undefined;
35
+ return {
36
+ platform,
37
+ endpointId,
38
+ sceneId,
39
+ kind,
40
+ ...(senderId ? { senderId } : {}),
41
+ ...(parent ? { parent } : {}),
42
+ };
43
+ }
44
+ export function sceneRefToSendOptions(target, content) {
45
+ const { scene } = target;
46
+ return {
47
+ context: scene.platform,
48
+ endpoint: scene.endpointId,
49
+ id: scene.sceneId,
50
+ type: scene.kind,
51
+ parent: scene.parent
52
+ ? { type: scene.parent.kind, id: scene.parent.sceneId }
53
+ : undefined,
54
+ content,
55
+ ...(target.quoteId ? { quoteId: target.quoteId } : {}),
56
+ ...(target.threadId ? { threadId: target.threadId } : {}),
57
+ };
58
+ }
59
+ export function resolveIMSceneSessionId(scene) {
60
+ return resolveIMSceneSessionIdKernel({
61
+ platform: scene.platform,
62
+ endpointId: scene.endpointId,
63
+ sceneId: scene.sceneId,
64
+ kind: scene.kind,
65
+ });
66
+ }
67
+ export function messageToIMDeliveryTarget(message) {
68
+ const scene = sceneRefFromMessage(message);
69
+ if (!scene)
70
+ return undefined;
71
+ const quoteId = nonEmptyString(message.$quote_id);
72
+ return {
73
+ channel: 'im',
74
+ scene,
75
+ ...(quoteId ? { quoteId } : {}),
76
+ };
77
+ }
@@ -1,26 +1,39 @@
1
1
  /**
2
- * IM 会话 ID 解析(无 AI 依赖)
2
+ * IM 会话 ID 解析(SSOT @zhin.js/kernel + im-scene)
3
3
  *
4
- * 格式:`platform:endpointId:scope:sceneId`
4
+ * 格式:`platform:endpointId:kind:sceneId`
5
5
  */
6
- export type IMSessionScope = 'private' | 'group' | 'channel';
7
- export interface ResolveIMSessionIdInput {
8
- platform: string;
9
- endpointId: string;
10
- scope: IMSessionScope;
11
- sceneId: string;
12
- }
6
+ import { type ResolveIMSessionIdInput } from '@zhin.js/kernel';
7
+ import { type IMSceneKind, type IMSceneRef } from './im-scene.js';
8
+ export type { IMSceneKind, ResolveIMSessionIdInput };
13
9
  export declare function resolveIMSessionId(input: ResolveIMSessionIdInput): string;
14
- export declare function resolveIMSceneIdForSession(scope: IMSessionScope, sceneId?: string, senderId?: string): string;
10
+ export declare function resolveIMSessionIdFromScene(scene: IMSceneRef): string;
11
+ export declare function resolveIMSceneIdForSession(kind: IMSceneKind, sceneId?: string, senderId?: string): string;
15
12
  export declare function resolveIMSessionIdFromMessage(message: {
16
13
  $adapter?: string;
17
14
  $endpoint?: string;
18
15
  $channel?: {
19
- type?: IMSessionScope;
16
+ type?: IMSceneKind;
20
17
  id?: string;
21
18
  };
22
19
  $sender?: {
23
20
  id?: string;
24
21
  };
25
22
  }): string;
26
- //# sourceMappingURL=im-session-id.d.ts.map
23
+ /** Canonical scene fields for transcript / session persistence (ADR 0028 SSOT). */
24
+ export declare function resolveSceneFieldsFromMessage(message: {
25
+ $adapter?: string;
26
+ $endpoint?: string;
27
+ $channel?: {
28
+ type?: IMSceneKind;
29
+ id?: string;
30
+ };
31
+ $sender?: {
32
+ id?: string;
33
+ };
34
+ }): {
35
+ platform: string;
36
+ endpointId: string;
37
+ sceneId: string;
38
+ sceneType: IMSceneKind;
39
+ };
@@ -1,29 +1,47 @@
1
1
  /**
2
- * IM 会话 ID 解析(无 AI 依赖)
2
+ * IM 会话 ID 解析(SSOT @zhin.js/kernel + im-scene)
3
3
  *
4
- * 格式:`platform:endpointId:scope:sceneId`
4
+ * 格式:`platform:endpointId:kind:sceneId`
5
5
  */
6
+ import { resolveIMSceneIdForSession as resolveIMSceneIdForSessionKernel, resolveIMSessionId as resolveIMSessionIdKernel, } from '@zhin.js/kernel';
7
+ import { resolveIMSceneSessionId, sceneRefFromMessage, } from './im-scene.js';
6
8
  export function resolveIMSessionId(input) {
7
- const platform = String(input.platform || 'unknown');
8
- const endpointId = String(input.endpointId || 'default');
9
- const scope = input.scope || 'private';
10
- const sceneId = String(input.sceneId || 'unknown');
11
- return `${platform}:${endpointId}:${scope}:${sceneId}`;
9
+ return resolveIMSessionIdKernel(input);
12
10
  }
13
- export function resolveIMSceneIdForSession(scope, sceneId, senderId) {
14
- if (scope === 'group' || scope === 'channel') {
15
- return sceneId || senderId || 'unknown';
16
- }
17
- return senderId || sceneId || 'unknown';
11
+ export function resolveIMSessionIdFromScene(scene) {
12
+ return resolveIMSceneSessionId(scene);
13
+ }
14
+ export function resolveIMSceneIdForSession(kind, sceneId, senderId) {
15
+ return resolveIMSceneIdForSessionKernel(kind, sceneId, senderId);
18
16
  }
19
17
  export function resolveIMSessionIdFromMessage(message) {
20
- const scope = (message.$channel?.type || 'private');
21
- const sceneId = resolveIMSceneIdForSession(scope, message.$channel?.id, message.$sender?.id);
18
+ const scene = sceneRefFromMessage(message);
19
+ if (scene)
20
+ return resolveIMSceneSessionId(scene);
21
+ const kind = (message.$channel?.type || 'private');
22
22
  return resolveIMSessionId({
23
23
  platform: String(message.$adapter || ''),
24
24
  endpointId: String(message.$endpoint || ''),
25
- scope,
26
- sceneId,
25
+ kind,
26
+ sceneId: resolveIMSceneIdForSession(kind, message.$channel?.id, message.$sender?.id),
27
27
  });
28
28
  }
29
- //# sourceMappingURL=im-session-id.js.map
29
+ /** Canonical scene fields for transcript / session persistence (ADR 0028 SSOT). */
30
+ export function resolveSceneFieldsFromMessage(message) {
31
+ const scene = sceneRefFromMessage(message);
32
+ if (scene) {
33
+ return {
34
+ platform: scene.platform,
35
+ endpointId: scene.endpointId,
36
+ sceneId: scene.sceneId,
37
+ sceneType: scene.kind,
38
+ };
39
+ }
40
+ const sceneType = (message.$channel?.type || 'private');
41
+ return {
42
+ platform: String(message.$adapter || ''),
43
+ endpointId: String(message.$endpoint || ''),
44
+ sceneType,
45
+ sceneId: resolveIMSceneIdForSession(sceneType, message.$channel?.id, message.$sender?.id),
46
+ };
47
+ }
package/lib/index.d.ts CHANGED
@@ -5,6 +5,7 @@ export * from './command.js';
5
5
  export * from './component.js';
6
6
  export * from './adapter.js';
7
7
  export * from './message.js';
8
+ export * from './im-scene.js';
8
9
  export * from './notice.js';
9
10
  export * from './request.js';
10
11
  export * from './prompt.js';
@@ -14,7 +15,8 @@ export * from './utils.js';
14
15
  export * from './errors.js';
15
16
  export * from './built/config.js';
16
17
  export * from './built/command.js';
17
- export * from './built/cron.js';
18
+ export * from './built/schedule.js';
19
+ export type { ScheduleDescriptor, ScheduleHandle, ScheduleContextExtensions } from './built/schedule.js';
18
20
  export * from './models/system-log.js';
19
21
  export * from './models/user.js';
20
22
  export * from './built/permission.js';
@@ -34,9 +36,22 @@ export * from './built/common-adapter-tools.js';
34
36
  export * from './built/roles.js';
35
37
  export * from './im-session-id.js';
36
38
  export * from './built/ai-trigger.js';
39
+ export * from './built/ai-access.js';
37
40
  export * from './built/dispatcher.js';
38
41
  export * from './built/schema-feature.js';
39
42
  export * from './built/login-assist.js';
43
+ export * from './built/generated-qrcode.js';
44
+ export * from './built/qrcode-segment.js';
45
+ export * from './built/rich-segments/index.js';
46
+ export * from './built/interactive-segments/index.js';
47
+ export * from './built/ai-outbound/index.js';
48
+ export { loadHtmlRenderer, seedHtmlRenderer, HTML_RENDERER_PACKAGE } from './built/html-renderer-loader.js';
49
+ export { loadSpeechPipeline, seedSpeechPipeline, SPEECH_PACKAGE } from './built/speech-loader.js';
50
+ export * from './built/outbound-media-utils.js';
51
+ export * from './built/outbound-media-contract.js';
52
+ export * from './built/interactive-segment-contract.js';
53
+ export * from './built/segment-contract/index.js';
54
+ export * from './built/generic-segment-mapper.js';
40
55
  export * from './built/adapter-process.js';
41
56
  export * from './built/component.js';
42
57
  export * from './built/inbound-runner.js';
@@ -45,15 +60,20 @@ export * from './built/connect-endpoint-instance.js';
45
60
  export type { ConnectEndpointInstanceOptions } from './built/connect-endpoint-instance.js';
46
61
  export * from './built/endpoint-lifecycle.js';
47
62
  export type { EndpointLifecycleKind, EndpointLifecyclePayload } from './built/endpoint-lifecycle.js';
63
+ export * from './built/endpoint-manager.js';
64
+ export type { EndpointConfigRecord, EndpointManager, ProvisionContext } from './built/endpoint-manager.js';
65
+ export * from './built/endpoint-lifecycle-service.js';
66
+ export * from './built/schema-endpoint-manager.js';
67
+ export * from './built/endpoint-commands.js';
68
+ export * from './built/introspection-format.js';
69
+ export * from './built/management-command-guard.js';
48
70
  export * from './built/html-to-text.js';
49
71
  export * from './built/html-segment-fallback.js';
50
- export * from './built/mcp-mesh-registrar.js';
51
72
  export * from './built/prepend-quote-context.js';
52
73
  export * from './message-quote.js';
53
74
  export * from '@zhin.js/database';
54
75
  export * from '@zhin.js/logger';
55
76
  export { Schema } from '@zhin.js/schema';
56
77
  export type { PluginLike } from '@zhin.js/kernel';
57
- export { Feature, Cron, Scheduler, getScheduler, setScheduler } from '@zhin.js/kernel';
58
- export type { FeatureJSON, FeatureListener, Schedule, JobPayload, JobState, ScheduledJob, JobStore, JobCallback, AddJobOptions, IScheduler, SchedulerOptions, } from '@zhin.js/kernel';
59
- //# sourceMappingURL=index.d.ts.map
78
+ export { Feature, ScheduleEngine, getScheduleEngine, setScheduleEngine, Scheduler, getScheduler, setScheduler, } from '@zhin.js/kernel';
79
+ export type { FeatureJSON, FeatureListener, Schedule, JobPayload, JobState, ScheduledJob, JobStore, JobCallback, AddJobOptions, IScheduler, SchedulerOptions, ScheduleFireCallback, MemoryScheduleRegistration, ScheduleEngineOptions, JobContext, ResolvedJob, ScheduleKind, } from '@zhin.js/kernel';
package/lib/index.js CHANGED
@@ -6,6 +6,7 @@ export * from './command.js';
6
6
  export * from './component.js';
7
7
  export * from './adapter.js';
8
8
  export * from './message.js';
9
+ export * from './im-scene.js';
9
10
  export * from './notice.js';
10
11
  export * from './request.js';
11
12
  export * from './prompt.js';
@@ -16,7 +17,7 @@ export * from './errors.js';
16
17
  // ── Built 模块 ──────────────────────────────────────────────────────
17
18
  export * from './built/config.js';
18
19
  export * from './built/command.js';
19
- export * from './built/cron.js';
20
+ export * from './built/schedule.js';
20
21
  // Models
21
22
  export * from './models/system-log.js';
22
23
  export * from './models/user.js';
@@ -36,22 +37,39 @@ export * from './built/common-adapter-tools.js';
36
37
  export * from './built/roles.js';
37
38
  export * from './im-session-id.js';
38
39
  export * from './built/ai-trigger.js';
40
+ export * from './built/ai-access.js';
39
41
  export * from './built/dispatcher.js';
40
42
  export * from './built/schema-feature.js';
41
43
  export * from './built/login-assist.js';
44
+ export * from './built/generated-qrcode.js';
45
+ export * from './built/qrcode-segment.js';
46
+ export * from './built/rich-segments/index.js';
47
+ export * from './built/interactive-segments/index.js';
48
+ export * from './built/ai-outbound/index.js';
49
+ export { loadHtmlRenderer, seedHtmlRenderer, HTML_RENDERER_PACKAGE } from './built/html-renderer-loader.js';
50
+ export { loadSpeechPipeline, seedSpeechPipeline, SPEECH_PACKAGE } from './built/speech-loader.js';
51
+ export * from './built/outbound-media-utils.js';
52
+ export * from './built/outbound-media-contract.js';
53
+ export * from './built/interactive-segment-contract.js';
54
+ export * from './built/segment-contract/index.js';
55
+ export * from './built/generic-segment-mapper.js';
42
56
  export * from './built/adapter-process.js';
43
57
  export * from './built/component.js';
44
58
  export * from './built/inbound-runner.js';
45
59
  export * from './built/connect-endpoint-instance.js';
46
60
  export * from './built/endpoint-lifecycle.js';
61
+ export * from './built/endpoint-manager.js';
62
+ export * from './built/endpoint-lifecycle-service.js';
63
+ export * from './built/schema-endpoint-manager.js';
64
+ export * from './built/endpoint-commands.js';
65
+ export * from './built/introspection-format.js';
66
+ export * from './built/management-command-guard.js';
47
67
  export * from './built/html-to-text.js';
48
68
  export * from './built/html-segment-fallback.js';
49
- export * from './built/mcp-mesh-registrar.js';
50
69
  export * from './built/prepend-quote-context.js';
51
70
  export * from './message-quote.js';
52
71
  // ── 外部库 re-export ──────────────────────────────────────────────────
53
72
  export * from '@zhin.js/database';
54
73
  export * from '@zhin.js/logger';
55
74
  export { Schema } from '@zhin.js/schema';
56
- export { Feature, Cron, Scheduler, getScheduler, setScheduler } from '@zhin.js/kernel';
57
- //# sourceMappingURL=index.js.map
75
+ export { Feature, ScheduleEngine, getScheduleEngine, setScheduleEngine, Scheduler, getScheduler, setScheduler, } from '@zhin.js/kernel';
@@ -1,3 +1,2 @@
1
1
  export * from './jsx-runtime.js';
2
2
  export { jsx as jsxDEV } from './jsx.js';
3
- //# sourceMappingURL=jsx-dev-runtime.d.ts.map
@@ -1,3 +1,2 @@
1
1
  export * from './jsx-runtime.js';
2
2
  export { jsx as jsxDEV } from './jsx.js';
3
- //# sourceMappingURL=jsx-dev-runtime.js.map
@@ -9,4 +9,3 @@ declare const _default: {
9
9
  renderJSX: typeof renderJSX;
10
10
  };
11
11
  export default _default;
12
- //# sourceMappingURL=jsx-runtime.d.ts.map
@@ -8,4 +8,3 @@ export default {
8
8
  Fragment,
9
9
  renderJSX
10
10
  };
11
- //# sourceMappingURL=jsx-runtime.js.map
package/lib/jsx.d.ts CHANGED
@@ -30,4 +30,3 @@ declare global {
30
30
  export declare function jsx(type: JSXElementType, data: JSXProps): MessageComponent<any>;
31
31
  export declare function jsxs(type: JSXElementType, props: JSXProps): MessageElement;
32
32
  export declare function renderJSX(element: MessageComponent<any>, context?: ComponentContext): Promise<SendContent>;
33
- //# sourceMappingURL=jsx.d.ts.map
package/lib/jsx.js CHANGED
@@ -91,4 +91,3 @@ async function renderChildren(children, context) {
91
91
  }
92
92
  return '';
93
93
  }
94
- //# sourceMappingURL=jsx.js.map
@@ -6,6 +6,5 @@ export declare function quoteIdFromContent(content: MessageElement[]): string |
6
6
  export declare function quoteIdFromRaw(raw: unknown): string | undefined;
7
7
  /** 无 $quote_id 时从 $content / $raw 回填 */
8
8
  export declare function syncQuoteId(message: Message<any>): void;
9
- /** 将 reply 段的 id / message_id 与 $quote_id 对齐 */
9
+ /** 将 reply 段与 $quote_id 对齐(canonical 仅保留 message_id */
10
10
  export declare function alignReplySegments(content: MessageElement[], quoteId?: string): void;
11
- //# sourceMappingURL=message-quote.d.ts.map
@@ -75,7 +75,7 @@ export function syncQuoteId(message) {
75
75
  if (id)
76
76
  message.$quote_id = id;
77
77
  }
78
- /** 将 reply 段的 id / message_id 与 $quote_id 对齐 */
78
+ /** 将 reply 段与 $quote_id 对齐(canonical 仅保留 message_id */
79
79
  export function alignReplySegments(content, quoteId) {
80
80
  const id = quoteId ?? quoteIdFromContent(content);
81
81
  if (!id)
@@ -84,8 +84,7 @@ export function alignReplySegments(content, quoteId) {
84
84
  if (seg.type !== 'reply' || !seg.data || typeof seg.data !== 'object')
85
85
  continue;
86
86
  const data = seg.data;
87
- data.id = id;
88
87
  data.message_id = id;
88
+ delete data.id;
89
89
  }
90
90
  }
91
- //# sourceMappingURL=message-quote.js.map
package/lib/message.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { MessageElement, MessageSender, SendContent } from "./types";
1
+ import { MessageElement, MessageSender, SendContent } from "./types.js";
2
2
  import { Component } from "./component.js";
3
3
  import { Adapters } from "./adapter.js";
4
4
  /**
@@ -16,6 +16,15 @@ export type MessageComponent<T extends object> = {
16
16
  export interface MessageChannel {
17
17
  id: string;
18
18
  type: MessageType;
19
+ /**
20
+ * 私聊/子频道消息的来源场景:
21
+ * - 群临时会话:type=private + parent.group
22
+ * - QQ 子频道:type=channel + parent.guild
23
+ */
24
+ parent?: {
25
+ type: 'group' | 'channel' | 'guild';
26
+ id: string;
27
+ };
19
28
  }
20
29
  /**
21
30
  * 消息类型枚举
@@ -50,5 +59,6 @@ export declare namespace Message {
50
59
  function quoteIdFromContent(content: MessageElement[]): string | undefined;
51
60
  function syncQuoteId(message: Message<any>): void;
52
61
  function alignReplySegments(content: MessageElement[], quoteId?: string): void;
62
+ function actionPayload(message: Message<any>): string | undefined;
63
+ function isAction(message: Message<any>): boolean;
53
64
  }
54
- //# sourceMappingURL=message.d.ts.map
package/lib/message.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { alignReplySegments as alignReplySegmentsImpl, quoteIdFromContent as quoteIdFromContentImpl, syncQuoteId as syncQuoteIdImpl, } from "./message-quote.js";
2
+ import { isActionMessage as isActionMessageImpl } from "./built/interactive-segments/action.js";
2
3
  export var Message;
3
4
  (function (Message) {
4
5
  /**
@@ -20,5 +21,19 @@ export var Message;
20
21
  alignReplySegmentsImpl(content, quoteId);
21
22
  }
22
23
  Message.alignReplySegments = alignReplySegments;
24
+ function actionPayload(message) {
25
+ for (const item of message.$content ?? []) {
26
+ if (typeof item === 'string')
27
+ continue;
28
+ if (item.type === 'action' && item.data?.payload) {
29
+ return String(item.data.payload);
30
+ }
31
+ }
32
+ return undefined;
33
+ }
34
+ Message.actionPayload = actionPayload;
35
+ function isAction(message) {
36
+ return isActionMessageImpl(message);
37
+ }
38
+ Message.isAction = isAction;
23
39
  })(Message || (Message = {}));
24
- //# sourceMappingURL=message.js.map
@@ -8,4 +8,3 @@ export interface SystemLog {
8
8
  timestamp: Date;
9
9
  }
10
10
  export declare const SystemLogDefinition: Definition<SystemLog>;
11
- //# sourceMappingURL=system-log.d.ts.map
@@ -6,4 +6,3 @@ export const SystemLogDefinition = {
6
6
  source: { type: 'text', nullable: false },
7
7
  timestamp: { type: 'date', nullable: false }
8
8
  };
9
- //# sourceMappingURL=system-log.js.map
@@ -7,4 +7,3 @@ export interface User {
7
7
  permissions?: string[];
8
8
  }
9
9
  export declare const UserDefinition: Definition<User>;
10
- //# sourceMappingURL=user.d.ts.map
@@ -5,4 +5,3 @@ export const UserDefinition = {
5
5
  third_part: { type: 'json', default: [] },
6
6
  permissions: { type: 'json', default: [] }
7
7
  };
8
- //# sourceMappingURL=user.js.map
package/lib/notice.d.ts CHANGED
@@ -79,4 +79,3 @@ export declare namespace Notice {
79
79
  */
80
80
  function from<T extends object>(input: T, format: NoticeBase): Notice<T>;
81
81
  }
82
- //# sourceMappingURL=notice.d.ts.map
package/lib/notice.js CHANGED
@@ -8,4 +8,3 @@ export var Notice;
8
8
  }
9
9
  Notice.from = from;
10
10
  })(Notice || (Notice = {}));
11
- //# sourceMappingURL=notice.js.map
@@ -27,4 +27,3 @@ export declare function getCurrentFile(metaUrl?: string): string;
27
27
  * @see docs/guide/plugin-development.md#getplugin-与-useplugin
28
28
  */
29
29
  export declare function getPlugin(): Plugin;
30
- //# sourceMappingURL=plugin-context.d.ts.map
@@ -59,4 +59,3 @@ export function getPlugin() {
59
59
  }
60
60
  return plugin;
61
61
  }
62
- //# sourceMappingURL=plugin-context.js.map
package/lib/plugin.d.ts CHANGED
@@ -7,6 +7,7 @@
7
7
  * - 中间件系统、适配器管理、useContext 等
8
8
  */
9
9
  import type { PluginManifest } from "./types.js";
10
+ import type { InteractiveHandler } from "./built/interactive-segments/types.js";
10
11
  import { MessageMiddleware, RegisteredAdapter, MaybePromise, ArrayItem, SendOptions, MessageSendPayload } from "./types.js";
11
12
  import { Adapter, Adapters } from "./adapter.js";
12
13
  import { PluginBase, PluginBaseLifecycle } from "@zhin.js/kernel";
@@ -64,6 +65,10 @@ export declare class Plugin extends PluginBase implements PluginLike {
64
65
  * 中间件用于处理消息流转
65
66
  */
66
67
  addMiddleware<T extends RegisteredAdapter>(middleware: MessageMiddleware<T>, name?: string): () => void;
68
+ /**
69
+ * 注册交互式 action 回调处理器(自动安装根中间件,优先于 Dispatcher)
70
+ */
71
+ registerInteractiveHandler(prefix: string, handler: InteractiveHandler): () => void;
67
72
  /**
68
73
  * 插件名称
69
74
  */
@@ -159,7 +164,7 @@ export declare namespace Plugin {
159
164
  interface Features {
160
165
  commands: string[];
161
166
  components: string[];
162
- crons: string[];
167
+ schedules: string[];
163
168
  middlewares: string[];
164
169
  }
165
170
  /**
@@ -193,6 +198,8 @@ export declare namespace Plugin {
193
198
  "ai.response": [Plugin.AIEventPayload];
194
199
  "ai.typing.start": [Plugin.AIEventPayload];
195
200
  "ai.typing.stop": [Plugin.AIEventPayload];
201
+ "ai.activity.queued.start": [Plugin.AIEventPayload];
202
+ "ai.activity.queued.clear": [Plugin.AIEventPayload];
196
203
  "ai.subagent.spawn": [Plugin.AIEventPayload];
197
204
  "ai.subagent.start": [Plugin.AIEventPayload];
198
205
  "ai.subagent.finish": [Plugin.AIEventPayload];
@@ -204,6 +211,9 @@ export declare namespace Plugin {
204
211
  "ai.session.new": [Plugin.AIEventPayload];
205
212
  "ai.session.compact": [Plugin.AIEventPayload];
206
213
  "ai.hook": [Plugin.AIEventPayload];
214
+ "schedule.start": [Plugin.AIEventPayload];
215
+ "schedule.finish": [Plugin.AIEventPayload];
216
+ "schedule.error": [Plugin.AIEventPayload];
207
217
  }
208
218
  interface AIEventPayload {
209
219
  sessionId: string;
@@ -257,4 +267,3 @@ export declare namespace Plugin {
257
267
  interface Extensions {
258
268
  }
259
269
  }
260
- //# sourceMappingURL=plugin.d.ts.map
package/lib/plugin.js CHANGED
@@ -11,6 +11,7 @@ import * as path from "node:path";
11
11
  import { pathToFileURL } from "node:url";
12
12
  import { formatCompact } from "@zhin.js/logger";
13
13
  import { compose, remove, resolveEntry } from "./utils.js";
14
+ import { ensureInteractiveMiddleware, registerInteractiveHandler as registerInteractiveHandlerCore, } from "./built/interactive-segments/handlers.js";
14
15
  import { Adapter } from "./adapter.js";
15
16
  import { Feature } from "@zhin.js/kernel";
16
17
  import { PluginBase, resolvePluginResolveDir as _resolvePluginResolveDir, pluginCreateRequire as _pluginCreateRequire, getFileHash, watchFile, registerExtension, unregisterExtensions, installExtensionProxy, } from "@zhin.js/kernel";
@@ -36,7 +37,9 @@ function pluginCreateRequire() {
36
37
  * 同一上下文中同一文件多次调用返回同一实例
37
38
  */
38
39
  export function usePlugin() {
39
- const callerFile = getCurrentFile();
40
+ // 必须传入 plugin.ts 的 import.meta.url:getCurrentFile 默认锚定在 plugin-context.ts,
41
+ // 否则会多跳一层 usePlugin 帧,把调用方误判为 plugin.ts(plugin.name === "plugin")。
42
+ const callerFile = getCurrentFile(import.meta.url);
40
43
  // 如果当前 store 已是同一文件创建的插件,直接返回
41
44
  const current = storage.getStore();
42
45
  if (current && current.filePath.replace(/\?t=\d+$/, '') === callerFile.replace(/\?t=\d+$/, '')) {
@@ -72,22 +75,9 @@ export class Plugin extends PluginBase {
72
75
  get root() {
73
76
  return super.root;
74
77
  }
75
- // 插件功能
76
- #messageMiddleware = async (message, next) => {
77
- const commandService = this.inject('command');
78
- if (!commandService)
79
- return await next();
80
- const result = await commandService.handle(message, this);
81
- if (result === undefined || result === null)
82
- return await next();
83
- const adapter = this.inject(message.$adapter);
84
- if (!adapter || !(adapter instanceof Adapter))
85
- return await next();
86
- if (!message.$reply) {
87
- this.logger.warn(`command result cannot be sent: endpoint ${message.$endpoint} has no outbound capability`);
88
- return;
89
- }
90
- await message.$reply(result);
78
+ // 默认中间件:将入站消息交给 compose 链末端的 MessageDispatcher(命令/AI 路由在 dispatcher 内完成)
79
+ #messageMiddleware = async (_message, next) => {
80
+ await next();
91
81
  };
92
82
  #middlewares = [this.#messageMiddleware];
93
83
  get middleware() {
@@ -116,6 +106,15 @@ export class Plugin extends PluginBase {
116
106
  this.onDispose(dispose);
117
107
  return dispose;
118
108
  }
109
+ /**
110
+ * 注册交互式 action 回调处理器(自动安装根中间件,优先于 Dispatcher)
111
+ */
112
+ registerInteractiveHandler(prefix, handler) {
113
+ ensureInteractiveMiddleware((mw) => this.root.addMiddleware(mw));
114
+ const dispose = registerInteractiveHandlerCore(prefix, handler);
115
+ this.onDispose(dispose);
116
+ return dispose;
117
+ }
119
118
  /**
120
119
  * 插件名称
121
120
  */
@@ -225,7 +224,8 @@ export class Plugin extends PluginBase {
225
224
  contextReadyCallback();
226
225
  }
227
226
  inject(name) {
228
- const context = this.root.contexts.get(name);
227
+ const resolved = name === 'cron' ? 'schedule' : name;
228
+ const context = this.root.contexts.get(resolved);
229
229
  return context?.value;
230
230
  }
231
231
  injectAdapter(name) {
@@ -304,11 +304,11 @@ export class Plugin extends PluginBase {
304
304
  get features() {
305
305
  const commandService = this.inject('command');
306
306
  const componentService = this.inject('component');
307
- const cronService = this.inject('cron');
307
+ const scheduleService = this.inject('schedule');
308
308
  return {
309
309
  commands: commandService ? commandService.items.map(c => c.pattern) : [],
310
310
  components: componentService ? componentService.getAllNames() : [],
311
- crons: cronService ? cronService.items.map(c => c.cronExpression) : [],
311
+ schedules: scheduleService ? scheduleService.items.map(s => s.id) : [],
312
312
  middlewares: this.#middlewares.map((m, i) => m.name || `middleware_${i}`),
313
313
  };
314
314
  }
@@ -323,8 +323,8 @@ export class Plugin extends PluginBase {
323
323
  result.push({ name: 'command', count: f.commands.length });
324
324
  if (f.components.length > 0)
325
325
  result.push({ name: 'component', count: f.components.length });
326
- if (f.crons.length > 0)
327
- result.push({ name: 'cron', count: f.crons.length });
326
+ if (f.schedules.length > 0)
327
+ result.push({ name: 'schedule', count: f.schedules.length });
328
328
  // #middlewares includes the default command middleware, only count user-added ones
329
329
  const userMiddlewareCount = this.#middlewares.length - 1; // subtract default #messageMiddleware
330
330
  if (userMiddlewareCount > 0)
@@ -586,4 +586,3 @@ export class Plugin extends PluginBase {
586
586
  export function defineContext(options) {
587
587
  return options;
588
588
  }
589
- //# sourceMappingURL=plugin.js.map
package/lib/prompt.d.ts CHANGED
@@ -115,4 +115,3 @@ export declare namespace Prompt {
115
115
  };
116
116
  export {};
117
117
  }
118
- //# sourceMappingURL=prompt.d.ts.map