@astro-minimax/ai 0.9.0 → 0.9.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 (251) hide show
  1. package/README.md +108 -18
  2. package/dist/cache/global-cache.d.ts +6 -2
  3. package/dist/cache/global-cache.d.ts.map +1 -1
  4. package/dist/cache/global-cache.js +24 -9
  5. package/dist/cache/index.d.ts +7 -6
  6. package/dist/cache/index.d.ts.map +1 -1
  7. package/dist/cache/index.js +12 -4
  8. package/dist/cache/injection-cache.d.ts +36 -0
  9. package/dist/cache/injection-cache.d.ts.map +1 -0
  10. package/dist/cache/injection-cache.js +90 -0
  11. package/dist/cache/kv-adapter.d.ts.map +1 -1
  12. package/dist/cache/kv-adapter.js +2 -1
  13. package/dist/cache/memory-adapter.d.ts.map +1 -1
  14. package/dist/cache/memory-adapter.js +2 -1
  15. package/dist/cache/response-cache.d.ts +10 -5
  16. package/dist/cache/response-cache.d.ts.map +1 -1
  17. package/dist/cache/response-cache.js +18 -6
  18. package/dist/components/AIChatContainer.d.ts +2 -2
  19. package/dist/components/AIChatContainer.d.ts.map +1 -1
  20. package/dist/components/AIChatContainer.js +8 -920
  21. package/dist/components/ChatInput.d.ts +15 -0
  22. package/dist/components/ChatInput.d.ts.map +1 -0
  23. package/dist/components/ChatInput.js +72 -0
  24. package/dist/components/ChatPanel.d.ts +1 -1
  25. package/dist/components/ChatPanel.d.ts.map +1 -1
  26. package/dist/components/ChatPanel.js +210 -672
  27. package/dist/components/CodeBlock.d.ts +31 -0
  28. package/dist/components/CodeBlock.d.ts.map +1 -0
  29. package/dist/components/CodeBlock.js +143 -0
  30. package/dist/components/MarkmapBlock.d.ts +4 -0
  31. package/dist/components/MarkmapBlock.d.ts.map +1 -0
  32. package/dist/components/MarkmapBlock.js +180 -0
  33. package/dist/components/MermaidBlock.d.ts +4 -0
  34. package/dist/components/MermaidBlock.d.ts.map +1 -0
  35. package/dist/components/MermaidBlock.js +193 -0
  36. package/dist/components/MessageBubble.d.ts +21 -0
  37. package/dist/components/MessageBubble.d.ts.map +1 -0
  38. package/dist/components/MessageBubble.js +233 -0
  39. package/dist/components/ReasoningBlock.d.ts +6 -0
  40. package/dist/components/ReasoningBlock.d.ts.map +1 -0
  41. package/dist/components/ReasoningBlock.js +11 -0
  42. package/dist/components/RichText.d.ts +41 -0
  43. package/dist/components/RichText.d.ts.map +1 -0
  44. package/dist/components/RichText.js +202 -0
  45. package/dist/components/VizShared.d.ts +57 -0
  46. package/dist/components/VizShared.d.ts.map +1 -0
  47. package/dist/components/VizShared.js +233 -0
  48. package/dist/components/tool-auto-continue.d.ts +5 -0
  49. package/dist/components/tool-auto-continue.d.ts.map +1 -0
  50. package/dist/components/tool-auto-continue.js +33 -0
  51. package/dist/constants.d.ts +61 -0
  52. package/dist/constants.d.ts.map +1 -0
  53. package/dist/constants.js +72 -0
  54. package/dist/data/index.d.ts +4 -3
  55. package/dist/data/index.d.ts.map +1 -1
  56. package/dist/data/index.js +4 -10
  57. package/dist/data/knowledge-types.d.ts +8 -0
  58. package/dist/data/knowledge-types.d.ts.map +1 -0
  59. package/dist/data/knowledge-types.js +14 -0
  60. package/dist/data/metadata-loader.d.ts +4 -28
  61. package/dist/data/metadata-loader.d.ts.map +1 -1
  62. package/dist/data/metadata-loader.js +11 -34
  63. package/dist/data/types.d.ts +17 -2
  64. package/dist/data/types.d.ts.map +1 -1
  65. package/dist/extensions/index.d.ts +5 -0
  66. package/dist/extensions/index.d.ts.map +1 -0
  67. package/dist/extensions/index.js +24 -0
  68. package/dist/extensions/injector.d.ts +14 -0
  69. package/dist/extensions/injector.d.ts.map +1 -0
  70. package/dist/extensions/injector.js +146 -0
  71. package/dist/extensions/loader.d.ts +5 -0
  72. package/dist/extensions/loader.d.ts.map +1 -0
  73. package/dist/extensions/loader.js +45 -0
  74. package/dist/extensions/registry.d.ts +4 -0
  75. package/dist/extensions/registry.d.ts.map +1 -0
  76. package/dist/extensions/registry.js +144 -0
  77. package/dist/extensions/types.d.ts +126 -0
  78. package/dist/extensions/types.d.ts.map +1 -0
  79. package/dist/extensions/types.js +0 -0
  80. package/dist/fact-registry/prompt-injector.d.ts +1 -1
  81. package/dist/fact-registry/prompt-injector.d.ts.map +1 -1
  82. package/dist/fact-registry/prompt-injector.js +2 -1
  83. package/dist/index.d.ts +3 -2
  84. package/dist/index.d.ts.map +1 -1
  85. package/dist/index.js +3 -2
  86. package/dist/intelligence/citation-guard.d.ts +2 -13
  87. package/dist/intelligence/citation-guard.d.ts.map +1 -1
  88. package/dist/intelligence/citation-guard.js +52 -23
  89. package/dist/intelligence/evidence-analysis.d.ts +24 -16
  90. package/dist/intelligence/evidence-analysis.d.ts.map +1 -1
  91. package/dist/intelligence/evidence-analysis.js +118 -20
  92. package/dist/intelligence/evidence-budget.d.ts +13 -0
  93. package/dist/intelligence/evidence-budget.d.ts.map +1 -0
  94. package/dist/intelligence/evidence-budget.js +49 -0
  95. package/dist/intelligence/index.d.ts +10 -4
  96. package/dist/intelligence/index.d.ts.map +1 -1
  97. package/dist/intelligence/index.js +27 -3
  98. package/dist/intelligence/keyword-extract.d.ts +1 -1
  99. package/dist/intelligence/keyword-extract.d.ts.map +1 -1
  100. package/dist/intelligence/keyword-extract.js +5 -9
  101. package/dist/intelligence/request-interpretation.d.ts +40 -0
  102. package/dist/intelligence/request-interpretation.d.ts.map +1 -0
  103. package/dist/intelligence/request-interpretation.js +71 -0
  104. package/dist/intelligence/response-templates.d.ts +1 -0
  105. package/dist/intelligence/response-templates.d.ts.map +1 -1
  106. package/dist/intelligence/response-templates.js +13 -0
  107. package/dist/prompt/dynamic-layer.d.ts +1 -5
  108. package/dist/prompt/dynamic-layer.d.ts.map +1 -1
  109. package/dist/prompt/dynamic-layer.js +145 -9
  110. package/dist/prompt/prompt-builder.d.ts +1 -1
  111. package/dist/prompt/prompt-builder.d.ts.map +1 -1
  112. package/dist/prompt/prompt-builder.js +5 -1
  113. package/dist/prompt/semi-static-layer.d.ts +1 -1
  114. package/dist/prompt/semi-static-layer.d.ts.map +1 -1
  115. package/dist/prompt/semi-static-layer.js +22 -12
  116. package/dist/prompt/static-layer.d.ts.map +1 -1
  117. package/dist/prompt/static-layer.js +37 -4
  118. package/dist/prompt/types.d.ts +9 -4
  119. package/dist/prompt/types.d.ts.map +1 -1
  120. package/dist/provider-manager/base.d.ts +5 -1
  121. package/dist/provider-manager/base.d.ts.map +1 -1
  122. package/dist/provider-manager/base.js +22 -2
  123. package/dist/provider-manager/config.d.ts.map +1 -1
  124. package/dist/provider-manager/config.js +3 -2
  125. package/dist/provider-manager/index.d.ts +1 -1
  126. package/dist/provider-manager/index.d.ts.map +1 -1
  127. package/dist/provider-manager/index.js +1 -2
  128. package/dist/provider-manager/manager.d.ts +10 -1
  129. package/dist/provider-manager/manager.d.ts.map +1 -1
  130. package/dist/provider-manager/manager.js +26 -10
  131. package/dist/provider-manager/openai.d.ts +2 -2
  132. package/dist/provider-manager/openai.d.ts.map +1 -1
  133. package/dist/provider-manager/openai.js +19 -4
  134. package/dist/provider-manager/types.d.ts +18 -38
  135. package/dist/provider-manager/types.d.ts.map +1 -1
  136. package/dist/provider-manager/workers.d.ts +2 -2
  137. package/dist/provider-manager/workers.d.ts.map +1 -1
  138. package/dist/provider-manager/workers.js +15 -4
  139. package/dist/query/followup.d.ts +7 -0
  140. package/dist/query/followup.d.ts.map +1 -0
  141. package/dist/query/followup.js +46 -0
  142. package/dist/query/intent.d.ts +6 -0
  143. package/dist/query/intent.d.ts.map +1 -0
  144. package/dist/query/intent.js +137 -0
  145. package/dist/query/types.d.ts +8 -0
  146. package/dist/query/types.d.ts.map +1 -0
  147. package/dist/query/types.js +0 -0
  148. package/dist/search/hybrid-search.d.ts +111 -0
  149. package/dist/search/hybrid-search.d.ts.map +1 -0
  150. package/dist/search/hybrid-search.js +326 -0
  151. package/dist/search/index.d.ts +11 -9
  152. package/dist/search/index.d.ts.map +1 -1
  153. package/dist/search/index.js +46 -10
  154. package/dist/search/scoring.d.ts +18 -0
  155. package/dist/search/scoring.d.ts.map +1 -0
  156. package/dist/search/{search-utils.js → scoring.js} +14 -27
  157. package/dist/search/search-api.d.ts +16 -1
  158. package/dist/search/search-api.d.ts.map +1 -1
  159. package/dist/search/search-api.js +118 -15
  160. package/dist/search/search-index.d.ts +2 -2
  161. package/dist/search/search-index.d.ts.map +1 -1
  162. package/dist/search/search-index.js +4 -2
  163. package/dist/search/session-cache.d.ts +4 -10
  164. package/dist/search/session-cache.d.ts.map +1 -1
  165. package/dist/search/session-cache.js +12 -45
  166. package/dist/search/types.d.ts +28 -0
  167. package/dist/search/types.d.ts.map +1 -1
  168. package/dist/search/vector-reranker.d.ts +3 -3
  169. package/dist/search/vector-reranker.d.ts.map +1 -1
  170. package/dist/search/vector-reranker.js +14 -2
  171. package/dist/server/chat-handler.d.ts +86 -1
  172. package/dist/server/chat-handler.d.ts.map +1 -1
  173. package/dist/server/chat-handler.js +835 -401
  174. package/dist/server/chat-message-utils.d.ts +6 -0
  175. package/dist/server/chat-message-utils.d.ts.map +1 -0
  176. package/dist/server/chat-message-utils.js +40 -0
  177. package/dist/server/chat-utils.d.ts +30 -0
  178. package/dist/server/chat-utils.d.ts.map +1 -0
  179. package/dist/server/chat-utils.js +88 -0
  180. package/dist/server/dev-server.js +238 -101
  181. package/dist/server/env-config.d.ts +22 -0
  182. package/dist/server/env-config.d.ts.map +1 -0
  183. package/dist/server/env-config.js +25 -0
  184. package/dist/server/errors.d.ts +1 -0
  185. package/dist/server/errors.d.ts.map +1 -1
  186. package/dist/server/errors.js +14 -7
  187. package/dist/server/index.d.ts +2 -4
  188. package/dist/server/index.d.ts.map +1 -1
  189. package/dist/server/index.js +4 -25
  190. package/dist/server/metadata-init.d.ts +10 -5
  191. package/dist/server/metadata-init.d.ts.map +1 -1
  192. package/dist/server/metadata-init.js +78 -34
  193. package/dist/server/notify.d.ts +12 -11
  194. package/dist/server/notify.d.ts.map +1 -1
  195. package/dist/server/notify.js +46 -48
  196. package/dist/server/prompt-runtime.d.ts +60 -0
  197. package/dist/server/prompt-runtime.d.ts.map +1 -0
  198. package/dist/server/prompt-runtime.js +284 -0
  199. package/dist/server/stream-helpers.d.ts +30 -16
  200. package/dist/server/stream-helpers.d.ts.map +1 -1
  201. package/dist/server/stream-helpers.js +152 -15
  202. package/dist/server/types.d.ts +47 -12
  203. package/dist/server/types.d.ts.map +1 -1
  204. package/dist/structured-output/generator.d.ts +6 -0
  205. package/dist/structured-output/generator.d.ts.map +1 -0
  206. package/dist/structured-output/generator.js +164 -0
  207. package/dist/structured-output/index.d.ts +4 -0
  208. package/dist/structured-output/index.d.ts.map +1 -0
  209. package/dist/structured-output/index.js +6 -0
  210. package/dist/structured-output/schemas/evidence.d.ts +88 -0
  211. package/dist/structured-output/schemas/evidence.d.ts.map +1 -0
  212. package/dist/structured-output/schemas/evidence.js +65 -0
  213. package/dist/structured-output/types.d.ts +69 -0
  214. package/dist/structured-output/types.d.ts.map +1 -0
  215. package/dist/structured-output/types.js +0 -0
  216. package/dist/tools/action-tools.d.ts +63 -0
  217. package/dist/tools/action-tools.d.ts.map +1 -0
  218. package/dist/tools/action-tools.js +158 -0
  219. package/dist/tools/index.d.ts +2 -0
  220. package/dist/tools/index.d.ts.map +1 -0
  221. package/dist/tools/index.js +30 -0
  222. package/dist/utils/i18n.d.ts +1 -1
  223. package/dist/utils/i18n.d.ts.map +1 -1
  224. package/dist/utils/i18n.js +1 -1
  225. package/dist/utils/logger.d.ts +11 -0
  226. package/dist/utils/logger.d.ts.map +1 -0
  227. package/dist/utils/logger.js +36 -0
  228. package/dist/utils/text.d.ts +11 -0
  229. package/dist/utils/text.d.ts.map +1 -0
  230. package/dist/utils/text.js +87 -0
  231. package/dist/utils/url.d.ts +19 -0
  232. package/dist/utils/url.d.ts.map +1 -0
  233. package/dist/utils/url.js +13 -0
  234. package/package.json +46 -12
  235. package/dist/intelligence/intent-detect.d.ts +0 -40
  236. package/dist/intelligence/intent-detect.d.ts.map +0 -1
  237. package/dist/intelligence/intent-detect.js +0 -93
  238. package/dist/providers/index.d.ts +0 -2
  239. package/dist/providers/index.d.ts.map +0 -1
  240. package/dist/providers/index.js +0 -5
  241. package/dist/search/search-utils.d.ts +0 -47
  242. package/dist/search/search-utils.d.ts.map +0 -1
  243. package/dist/stream/index.d.ts +0 -3
  244. package/dist/stream/index.d.ts.map +0 -1
  245. package/dist/stream/index.js +0 -8
  246. package/dist/stream/mock-stream.d.ts +0 -12
  247. package/dist/stream/mock-stream.d.ts.map +0 -1
  248. package/dist/stream/mock-stream.js +0 -26
  249. package/dist/stream/response.d.ts +0 -10
  250. package/dist/stream/response.d.ts.map +0 -1
  251. package/dist/stream/response.js +0 -21
@@ -1,8 +1,8 @@
1
- import type { UIMessage } from 'ai';
2
- import type { ProviderManagerEnv } from '../provider-manager/types.js';
3
- import type { CacheEnv } from '../cache/types.js';
1
+ import type { UIMessage } from "ai";
2
+ import type { ProviderManagerEnv } from "../provider-manager/types.js";
3
+ import type { CacheEnv } from "../cache/types.js";
4
4
  export interface ChatContext {
5
- scope: 'global' | 'article';
5
+ scope: "global" | "article";
6
6
  article?: ArticleChatContext;
7
7
  }
8
8
  export interface ArticleChatContext {
@@ -20,9 +20,27 @@ export interface ChatRequestBody {
20
20
  messages: UIMessage[];
21
21
  lang?: string;
22
22
  }
23
- export interface ChatHandlerEnv extends ProviderManagerEnv, CacheEnv {
23
+ export interface AiCacheEnv {
24
+ AI_CACHE_ENABLED?: boolean | string;
25
+ AI_CACHE_TTL?: number | string;
26
+ AI_CACHE_PLAYBACK_DELAY?: number | string;
27
+ AI_CACHE_CHUNK_SIZE?: number | string;
28
+ AI_CACHE_THINKING_DELAY?: number | string;
29
+ }
30
+ export interface AiTimeoutEnv {
31
+ AI_TIMEOUT_REQUEST?: number | string;
32
+ AI_TIMEOUT_KEYWORD?: number | string;
33
+ AI_TIMEOUT_EVIDENCE?: number | string;
34
+ AI_TIMEOUT_LLM?: number | string;
35
+ }
36
+ export interface AiHealthEnv {
37
+ AI_HEALTH_THRESHOLD?: number | string;
38
+ AI_HEALTH_RECOVERY_TTL?: number | string;
39
+ }
40
+ export interface ChatHandlerEnv extends ProviderManagerEnv, CacheEnv, AiCacheEnv, AiTimeoutEnv, AiHealthEnv {
24
41
  SITE_AUTHOR?: string;
25
42
  SITE_URL?: string;
43
+ SITE_LANG?: string;
26
44
  [key: string]: unknown;
27
45
  }
28
46
  export interface ChatHandlerOptions {
@@ -30,7 +48,7 @@ export interface ChatHandlerOptions {
30
48
  request: Request;
31
49
  waitUntil?: (promise: Promise<unknown>) => void;
32
50
  }
33
- export type ChatStatusStage = 'search' | 'answer' | 'complete';
51
+ export type ChatStatusStage = "search" | "answer" | "complete";
34
52
  export interface ChatStatusData {
35
53
  stage: ChatStatusStage;
36
54
  message: string;
@@ -38,7 +56,7 @@ export interface ChatStatusData {
38
56
  done: boolean;
39
57
  at: number;
40
58
  }
41
- export declare function createChatStatusData(partial: Omit<ChatStatusData, 'done' | 'at'> & {
59
+ export declare function createChatStatusData(partial: Omit<ChatStatusData, "done" | "at"> & {
42
60
  done?: boolean;
43
61
  }): ChatStatusData;
44
62
  export declare function isChatStatusData(value: unknown): value is ChatStatusData;
@@ -49,11 +67,28 @@ export interface ChatErrorResponse {
49
67
  retryAfter?: number;
50
68
  }
51
69
  export interface MetadataConfig {
52
- summaries: unknown;
53
- authorContext: unknown;
54
- voiceProfile: unknown;
55
- factRegistry?: unknown;
56
- vectorIndex?: unknown;
70
+ knowledgeBundle: unknown;
57
71
  siteUrl?: string;
58
72
  }
73
+ export interface NotifyArticleRef {
74
+ title: string;
75
+ url?: string;
76
+ }
77
+ export interface NotifyModelInfo {
78
+ name: string;
79
+ provider?: string;
80
+ apiHost?: string;
81
+ }
82
+ export interface NotifyTokenUsage {
83
+ total: number;
84
+ input: number;
85
+ output: number;
86
+ }
87
+ export interface PhaseTiming {
88
+ total: number;
89
+ keywordExtraction?: number;
90
+ search?: number;
91
+ evidenceAnalysis?: number;
92
+ generation?: number;
93
+ }
59
94
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AACvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC5B,OAAO,CAAC,EAAE,kBAAkB,CAAC;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAID,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAe,SAAQ,kBAAkB,EAAE,QAAQ;IAClE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC;CACjD;AAID,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,eAAe,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;IACd,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAChE,cAAc,CAMhB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAIxE;AAID,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAID,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,OAAO,CAAC;IACvB,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/server/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @fileoverview Core generator for structured output with fallback support.
3
+ */
4
+ import type { StructuredOutputResult, GenerateStructuredOptions } from './types.js';
5
+ export declare function generateStructured<T>(options: GenerateStructuredOptions<T>): Promise<StructuredOutputResult<T>>;
6
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/structured-output/generator.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAEV,sBAAsB,EACtB,yBAAyB,EAG1B,MAAM,YAAY,CAAC;AA6CpB,wBAAsB,kBAAkB,CAAC,CAAC,EACxC,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAkIpC"}
@@ -0,0 +1,164 @@
1
+ import { TIMEOUTS } from "../constants.js";
2
+ const DEFAULT_TIMEOUT_MS = TIMEOUTS.EVIDENCE_ANALYSIS;
3
+ const DEFAULT_MAX_OUTPUT_TOKENS = 500;
4
+ const DEFAULT_TEMPERATURE = 0;
5
+ function toTokenStats(usage) {
6
+ if (!usage) return void 0;
7
+ return {
8
+ inputTokens: usage.inputTokens ?? 0,
9
+ outputTokens: usage.outputTokens ?? 0,
10
+ totalTokens: usage.totalTokens ?? (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0)
11
+ };
12
+ }
13
+ function extractJsonFromText(text) {
14
+ const trimmed = text.trim();
15
+ if (trimmed.startsWith("{") || trimmed.startsWith("[")) {
16
+ try {
17
+ return JSON.parse(trimmed);
18
+ } catch {
19
+ }
20
+ }
21
+ const codeBlockMatch = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/);
22
+ if (codeBlockMatch) {
23
+ try {
24
+ return JSON.parse(codeBlockMatch[1].trim());
25
+ } catch {
26
+ }
27
+ }
28
+ const jsonMatch = trimmed.match(/(\{[\s\S]*\}|\[[\s\S]*\])/);
29
+ if (jsonMatch) {
30
+ try {
31
+ return JSON.parse(jsonMatch[1]);
32
+ } catch {
33
+ }
34
+ }
35
+ return null;
36
+ }
37
+ function validateWithSchema(data, schema) {
38
+ const result = schema.safeParse(data);
39
+ if (result.success) {
40
+ return result.data;
41
+ }
42
+ return null;
43
+ }
44
+ async function generateStructured(options) {
45
+ const {
46
+ config,
47
+ provider,
48
+ systemPrompt,
49
+ userPrompt,
50
+ abortSignal
51
+ } = options;
52
+ const {
53
+ schema,
54
+ schemaName = "output",
55
+ schemaDescription,
56
+ fallbackParser,
57
+ repairStrategy = "lenient",
58
+ timeoutMs = DEFAULT_TIMEOUT_MS,
59
+ maxOutputTokens = DEFAULT_MAX_OUTPUT_TOKENS,
60
+ temperature = DEFAULT_TEMPERATURE
61
+ } = config;
62
+ const allowTextRepair = repairStrategy !== "none";
63
+ const allowFallbackParser = repairStrategy === "lenient";
64
+ const timeoutController = new AbortController();
65
+ const timeoutId = setTimeout(() => timeoutController.abort(), timeoutMs);
66
+ const abortHandler = () => timeoutController.abort();
67
+ if (abortSignal) {
68
+ if (abortSignal.aborted) {
69
+ clearTimeout(timeoutId);
70
+ return {
71
+ data: null,
72
+ success: false,
73
+ status: "timeout",
74
+ fallbackUsed: false,
75
+ error: "Request already aborted"
76
+ };
77
+ }
78
+ abortSignal.addEventListener("abort", abortHandler, { once: true });
79
+ }
80
+ let status = "request_error";
81
+ let rawText = "";
82
+ let usage;
83
+ try {
84
+ const result = await provider.generateObject({
85
+ schema,
86
+ schemaName,
87
+ schemaDescription,
88
+ systemPrompt,
89
+ userPrompt,
90
+ temperature,
91
+ maxOutputTokens,
92
+ abortSignal: timeoutController.signal
93
+ });
94
+ clearTimeout(timeoutId);
95
+ usage = toTokenStats(result.usage);
96
+ const validated = validateWithSchema(result.object, schema);
97
+ if (validated !== null) {
98
+ return {
99
+ data: validated,
100
+ success: true,
101
+ status: "success",
102
+ fallbackUsed: false,
103
+ rawText: JSON.stringify(result.object),
104
+ usage
105
+ };
106
+ }
107
+ status = "schema_error";
108
+ rawText = JSON.stringify(result.object);
109
+ } catch (error) {
110
+ clearTimeout(timeoutId);
111
+ if (timeoutController.signal.aborted || error instanceof Error && error.name === "AbortError") {
112
+ status = "timeout";
113
+ }
114
+ } finally {
115
+ if (abortSignal) {
116
+ abortSignal.removeEventListener("abort", abortHandler);
117
+ }
118
+ }
119
+ if (allowTextRepair) {
120
+ try {
121
+ const textResult = await provider.generateText({
122
+ systemPrompt,
123
+ userPrompt,
124
+ temperature,
125
+ maxOutputTokens,
126
+ abortSignal: timeoutController.signal
127
+ });
128
+ rawText = textResult.text;
129
+ usage = toTokenStats(textResult.usage);
130
+ const extracted = extractJsonFromText(rawText);
131
+ if (extracted) {
132
+ const validated = validateWithSchema(extracted, schema);
133
+ if (validated !== null) {
134
+ return { data: validated, success: true, status: "success_repaired", fallbackUsed: true, rawText, usage };
135
+ }
136
+ status = "schema_error";
137
+ } else {
138
+ status = "parse_error";
139
+ }
140
+ if (fallbackParser && allowFallbackParser) {
141
+ const fallbackData = fallbackParser(rawText);
142
+ if (fallbackData) {
143
+ const validated = validateWithSchema(fallbackData, schema);
144
+ if (validated !== null) {
145
+ return { data: validated, success: true, status: "success_repaired", fallbackUsed: true, rawText, usage };
146
+ }
147
+ }
148
+ }
149
+ } catch {
150
+ }
151
+ }
152
+ return {
153
+ data: null,
154
+ success: false,
155
+ status,
156
+ fallbackUsed: false,
157
+ rawText,
158
+ error: status === "timeout" ? "Request timed out" : `Failed to generate valid ${schemaName}`,
159
+ usage
160
+ };
161
+ }
162
+ export {
163
+ generateStructured
164
+ };
@@ -0,0 +1,4 @@
1
+ export * from './types.js';
2
+ export { generateStructured } from './generator.js';
3
+ export * from './schemas/evidence.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/structured-output/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,cAAc,uBAAuB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from "./types.js";
2
+ import { generateStructured } from "./generator.js";
3
+ export * from "./schemas/evidence.js";
4
+ export {
5
+ generateStructured
6
+ };
@@ -0,0 +1,88 @@
1
+ import { z } from 'zod';
2
+ export declare const QuestionTypeSchema: z.ZodEnum<{
3
+ unknown: "unknown";
4
+ count: "count";
5
+ fact: "fact";
6
+ list: "list";
7
+ opinion: "opinion";
8
+ recommendation: "recommendation";
9
+ timeline: "timeline";
10
+ mixed: "mixed";
11
+ }>;
12
+ export declare const ConfidenceLevelSchema: z.ZodEnum<{
13
+ high: "high";
14
+ medium: "medium";
15
+ low: "low";
16
+ }>;
17
+ export declare const CountModeSchema: z.ZodEnum<{
18
+ exact: "exact";
19
+ unknown: "unknown";
20
+ at_least: "at_least";
21
+ }>;
22
+ export declare const EvidenceEntitySchema: z.ZodObject<{
23
+ name: z.ZodString;
24
+ relation: z.ZodString;
25
+ status: z.ZodString;
26
+ count: z.ZodOptional<z.ZodNumber>;
27
+ countMode: z.ZodOptional<z.ZodEnum<{
28
+ exact: "exact";
29
+ unknown: "unknown";
30
+ at_least: "at_least";
31
+ }>>;
32
+ note: z.ZodOptional<z.ZodString>;
33
+ evidenceUrls: z.ZodArray<z.ZodString>;
34
+ }, z.core.$strip>;
35
+ export declare const EvidenceFindingSchema: z.ZodObject<{
36
+ claim: z.ZodString;
37
+ confidence: z.ZodEnum<{
38
+ high: "high";
39
+ medium: "medium";
40
+ low: "low";
41
+ }>;
42
+ evidenceUrls: z.ZodArray<z.ZodString>;
43
+ }, z.core.$strip>;
44
+ export declare const EvidenceAnalysisSchema: z.ZodObject<{
45
+ questionType: z.ZodEnum<{
46
+ unknown: "unknown";
47
+ count: "count";
48
+ fact: "fact";
49
+ list: "list";
50
+ opinion: "opinion";
51
+ recommendation: "recommendation";
52
+ timeline: "timeline";
53
+ mixed: "mixed";
54
+ }>;
55
+ directAnswer: z.ZodString;
56
+ entities: z.ZodArray<z.ZodObject<{
57
+ name: z.ZodString;
58
+ relation: z.ZodString;
59
+ status: z.ZodString;
60
+ count: z.ZodOptional<z.ZodNumber>;
61
+ countMode: z.ZodOptional<z.ZodEnum<{
62
+ exact: "exact";
63
+ unknown: "unknown";
64
+ at_least: "at_least";
65
+ }>>;
66
+ note: z.ZodOptional<z.ZodString>;
67
+ evidenceUrls: z.ZodArray<z.ZodString>;
68
+ }, z.core.$strip>>;
69
+ keyFindings: z.ZodArray<z.ZodObject<{
70
+ claim: z.ZodString;
71
+ confidence: z.ZodEnum<{
72
+ high: "high";
73
+ medium: "medium";
74
+ low: "low";
75
+ }>;
76
+ evidenceUrls: z.ZodArray<z.ZodString>;
77
+ }, z.core.$strip>>;
78
+ uncertainties: z.ZodArray<z.ZodString>;
79
+ recommendedUrls: z.ZodArray<z.ZodString>;
80
+ }, z.core.$strip>;
81
+ export type QuestionType = z.infer<typeof QuestionTypeSchema>;
82
+ export type ConfidenceLevel = z.infer<typeof ConfidenceLevelSchema>;
83
+ export type CountMode = z.infer<typeof CountModeSchema>;
84
+ export type EvidenceEntity = z.infer<typeof EvidenceEntitySchema>;
85
+ export type EvidenceFinding = z.infer<typeof EvidenceFindingSchema>;
86
+ export type EvidenceAnalysis = z.infer<typeof EvidenceAnalysisSchema>;
87
+ export declare const EVIDENCE_ANALYSIS_SYSTEM_PROMPT = "\u4F60\u662F\u68C0\u7D22\u8BC1\u636E\u5206\u6790\u5668\u3002\u628A evidence pack \u6574\u7406\u6210 JSON \u7ED3\u8BBA\uFF0C\u4E0D\u5199\u6700\u7EC8\u56DE\u7B54\u3002\n\n\u89C4\u5219\uFF1A\n- \u53EA\u7528 evidence pack \u4E2D\u7684\u4E8B\u5B9E\uFF0C\u7981\u6B62\u8865\u5145\n- \u53EA\u8F93\u51FA JSON\uFF0C\u4E0D\u8981 Markdown\n- evidenceUrls \u5FC5\u987B\u9010\u5B57\u7528 evidence pack \u7ED9\u51FA\u7684\u5B8C\u6574 URL\n- \u8BC1\u636E\u4E0D\u8DB3\u65F6\u7528 uncertainties \u8BF4\u660E\uFF0C\u4E0D\u8981\u786C\u731C\n- \u805A\u5408\u7C7B\u95EE\u9898\uFF08\u53BB\u8FC7/\u8BFB\u8FC7/\u8DD1\u8FC7\u51E0\u6B21\uFF09\uFF1A\u53BB\u91CD\u3001\u533A\u5206 visited/planned/mentioned\n- \u540C\u4E00\u4E8B\u4EF6\u591A\u7BC7\u6587\u7AE0\u4E0D\u7B49\u4E8E\u591A\u6B21\n- countMode \u4F18\u5148 at_least \u6216 unknown\uFF0C\u9664\u975E\u8BC1\u636E\u660E\u786E\u5199\u4E86\u603B\u6570\n- entities\u22646 note\u7B80\u77ED\uFF1BkeyFindings\u22644\uFF1BrecommendedUrls\u22643\n\n\u8F93\u51FAJSON\u683C\u5F0F\uFF1A\n{\n \"questionType\": \"fact|list|count|timeline|recommendation|opinion|mixed|unknown\",\n \"directAnswer\": \"\u4E00\u53E5\u8BDD\u7ED3\u8BBA\",\n \"entities\": [{\"name\":\"\",\"relation\":\"\",\"status\":\"\",\"count\":2,\"countMode\":\"exact|at_least|unknown\",\"note\":\"\",\"evidenceUrls\":[]}],\n \"keyFindings\": [{\"claim\":\"\",\"confidence\":\"high|medium|low\",\"evidenceUrls\":[]}],\n \"uncertainties\": [],\n \"recommendedUrls\": []\n}";
88
+ //# sourceMappingURL=evidence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"evidence.d.ts","sourceRoot":"","sources":["../../../src/structured-output/schemas/evidence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,kBAAkB;;;;;;;;;EAS7B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;EAAoC,CAAC;AAEvE,eAAO,MAAM,eAAe;;;;EAA2C,CAAC;AAExE,eAAO,MAAM,oBAAoB;;;;;;;;;;;;iBAQ/B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;;;;;iBAIhC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOjC,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,+BAA+B,s7CAoB1C,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { z } from "zod";
2
+ const QuestionTypeSchema = z.enum([
3
+ "fact",
4
+ "list",
5
+ "count",
6
+ "timeline",
7
+ "recommendation",
8
+ "opinion",
9
+ "mixed",
10
+ "unknown"
11
+ ]);
12
+ const ConfidenceLevelSchema = z.enum(["high", "medium", "low"]);
13
+ const CountModeSchema = z.enum(["exact", "at_least", "unknown"]);
14
+ const EvidenceEntitySchema = z.object({
15
+ name: z.string(),
16
+ relation: z.string(),
17
+ status: z.string(),
18
+ count: z.number().int().positive().optional(),
19
+ countMode: CountModeSchema.optional(),
20
+ note: z.string().optional(),
21
+ evidenceUrls: z.array(z.string())
22
+ });
23
+ const EvidenceFindingSchema = z.object({
24
+ claim: z.string(),
25
+ confidence: ConfidenceLevelSchema,
26
+ evidenceUrls: z.array(z.string())
27
+ });
28
+ const EvidenceAnalysisSchema = z.object({
29
+ questionType: QuestionTypeSchema,
30
+ directAnswer: z.string(),
31
+ entities: z.array(EvidenceEntitySchema).max(6),
32
+ keyFindings: z.array(EvidenceFindingSchema).max(4),
33
+ uncertainties: z.array(z.string()).max(6),
34
+ recommendedUrls: z.array(z.string()).max(3)
35
+ });
36
+ const EVIDENCE_ANALYSIS_SYSTEM_PROMPT = `\u4F60\u662F\u68C0\u7D22\u8BC1\u636E\u5206\u6790\u5668\u3002\u628A evidence pack \u6574\u7406\u6210 JSON \u7ED3\u8BBA\uFF0C\u4E0D\u5199\u6700\u7EC8\u56DE\u7B54\u3002
37
+
38
+ \u89C4\u5219\uFF1A
39
+ - \u53EA\u7528 evidence pack \u4E2D\u7684\u4E8B\u5B9E\uFF0C\u7981\u6B62\u8865\u5145
40
+ - \u53EA\u8F93\u51FA JSON\uFF0C\u4E0D\u8981 Markdown
41
+ - evidenceUrls \u5FC5\u987B\u9010\u5B57\u7528 evidence pack \u7ED9\u51FA\u7684\u5B8C\u6574 URL
42
+ - \u8BC1\u636E\u4E0D\u8DB3\u65F6\u7528 uncertainties \u8BF4\u660E\uFF0C\u4E0D\u8981\u786C\u731C
43
+ - \u805A\u5408\u7C7B\u95EE\u9898\uFF08\u53BB\u8FC7/\u8BFB\u8FC7/\u8DD1\u8FC7\u51E0\u6B21\uFF09\uFF1A\u53BB\u91CD\u3001\u533A\u5206 visited/planned/mentioned
44
+ - \u540C\u4E00\u4E8B\u4EF6\u591A\u7BC7\u6587\u7AE0\u4E0D\u7B49\u4E8E\u591A\u6B21
45
+ - countMode \u4F18\u5148 at_least \u6216 unknown\uFF0C\u9664\u975E\u8BC1\u636E\u660E\u786E\u5199\u4E86\u603B\u6570
46
+ - entities\u22646 note\u7B80\u77ED\uFF1BkeyFindings\u22644\uFF1BrecommendedUrls\u22643
47
+
48
+ \u8F93\u51FAJSON\u683C\u5F0F\uFF1A
49
+ {
50
+ "questionType": "fact|list|count|timeline|recommendation|opinion|mixed|unknown",
51
+ "directAnswer": "\u4E00\u53E5\u8BDD\u7ED3\u8BBA",
52
+ "entities": [{"name":"","relation":"","status":"","count":2,"countMode":"exact|at_least|unknown","note":"","evidenceUrls":[]}],
53
+ "keyFindings": [{"claim":"","confidence":"high|medium|low","evidenceUrls":[]}],
54
+ "uncertainties": [],
55
+ "recommendedUrls": []
56
+ }`;
57
+ export {
58
+ ConfidenceLevelSchema,
59
+ CountModeSchema,
60
+ EVIDENCE_ANALYSIS_SYSTEM_PROMPT,
61
+ EvidenceAnalysisSchema,
62
+ EvidenceEntitySchema,
63
+ EvidenceFindingSchema,
64
+ QuestionTypeSchema
65
+ };
@@ -0,0 +1,69 @@
1
+ import type { z } from 'zod';
2
+ import type { TokenUsageStats } from '../intelligence/types.js';
3
+ export type { TokenUsageStats } from '../intelligence/types.js';
4
+ export type StructuredOutputStatus = 'success' | 'success_repaired' | 'schema_error' | 'parse_error' | 'request_error' | 'timeout';
5
+ export interface StructuredOutputConfig<T> {
6
+ schema: z.ZodSchema<T>;
7
+ schemaName?: string;
8
+ schemaDescription?: string;
9
+ fallbackParser?: (rawText: string) => T | null;
10
+ repairStrategy?: 'strict' | 'lenient' | 'none';
11
+ timeoutMs?: number;
12
+ maxOutputTokens?: number;
13
+ temperature?: number;
14
+ }
15
+ export interface RepairResult<T> {
16
+ data: T | null;
17
+ success: boolean;
18
+ repairsApplied: string[];
19
+ }
20
+ export interface StructuredOutputResult<T> {
21
+ data: T | null;
22
+ success: boolean;
23
+ status: StructuredOutputStatus;
24
+ fallbackUsed: boolean;
25
+ rawText?: string;
26
+ error?: string;
27
+ usage?: TokenUsageStats;
28
+ }
29
+ export interface StructuredOutputProvider {
30
+ generateObject<T>(options: {
31
+ schema: z.ZodSchema<T>;
32
+ schemaName?: string;
33
+ schemaDescription?: string;
34
+ systemPrompt: string;
35
+ userPrompt: string;
36
+ temperature?: number;
37
+ maxOutputTokens?: number;
38
+ abortSignal?: AbortSignal;
39
+ }): Promise<{
40
+ object: T;
41
+ usage?: {
42
+ inputTokens?: number;
43
+ outputTokens?: number;
44
+ totalTokens?: number;
45
+ };
46
+ }>;
47
+ generateText(options: {
48
+ systemPrompt: string;
49
+ userPrompt: string;
50
+ temperature?: number;
51
+ maxOutputTokens?: number;
52
+ abortSignal?: AbortSignal;
53
+ }): Promise<{
54
+ text: string;
55
+ usage?: {
56
+ inputTokens?: number;
57
+ outputTokens?: number;
58
+ totalTokens?: number;
59
+ };
60
+ }>;
61
+ }
62
+ export interface GenerateStructuredOptions<T> {
63
+ config: StructuredOutputConfig<T>;
64
+ provider: StructuredOutputProvider;
65
+ systemPrompt: string;
66
+ userPrompt: string;
67
+ abortSignal?: AbortSignal;
68
+ }
69
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/structured-output/types.ts"],"names":[],"mappings":"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"}
File without changes
@@ -0,0 +1,63 @@
1
+ import { type Tool } from "ai";
2
+ export declare const toggleThemeTool: Tool<{
3
+ theme: "system" | "light" | "dark";
4
+ }, never>;
5
+ export declare const navigateToArticleTool: Tool<{
6
+ slug: string;
7
+ sectionId?: string | undefined;
8
+ lang?: "zh" | "en" | undefined;
9
+ }, never>;
10
+ export declare const scrollToSectionTool: Tool<{
11
+ sectionId: string;
12
+ highlight?: boolean | undefined;
13
+ behavior?: "smooth" | "instant" | undefined;
14
+ }, never>;
15
+ export declare const toggleReadingModeTool: Tool<{
16
+ enabled?: boolean | undefined;
17
+ fontSize?: "md" | "sm" | "lg" | "xl" | undefined;
18
+ fontFamily?: string | undefined;
19
+ }, never>;
20
+ export declare const highlightTextTool: Tool<{
21
+ text?: string | undefined;
22
+ selector?: string | undefined;
23
+ style?: "info" | "success" | "accent" | "warning" | undefined;
24
+ duration?: number | undefined;
25
+ scrollIntoView?: boolean | undefined;
26
+ }, never>;
27
+ export declare const setPreferenceTool: Tool<{
28
+ key: string;
29
+ value: unknown;
30
+ }, never>;
31
+ interface SearchResultItem {
32
+ title: string;
33
+ url: string;
34
+ excerpt: string;
35
+ categories: string[];
36
+ tags: string[];
37
+ keyPoints: string[];
38
+ dateTime: number;
39
+ lang: string;
40
+ score?: number;
41
+ }
42
+ export declare const searchArticlesTool: Tool<{
43
+ query: string;
44
+ limit: number;
45
+ includeProjects: boolean;
46
+ }, {
47
+ articles: SearchResultItem[];
48
+ projects: {
49
+ name: string;
50
+ url: string;
51
+ description: string;
52
+ }[];
53
+ }>;
54
+ type AnyTool = Tool;
55
+ export declare function registerTool(name: string, definition: AnyTool): void;
56
+ export declare function unregisterTool(name: string): void;
57
+ export declare function getAllTools(): Record<string, AnyTool>;
58
+ export declare const allTools: Record<string, AnyTool>;
59
+ export type ToolName = string;
60
+ export declare function getClientSideTools(): string[];
61
+ export declare function getServerSideTools(): string[];
62
+ export {};
63
+ //# sourceMappingURL=action-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-tools.d.ts","sourceRoot":"","sources":["../../src/tools/action-tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,KAAK,IAAI,EAAE,MAAM,IAAI,CAAC;AAIrC,eAAO,MAAM,eAAe;;SAU1B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;SAoBhC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;SAoB9B,CAAC;AAEH,eAAO,MAAM,qBAAqB;;;;SAgBhC,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;;;;SAwB5B,CAAC;AAEH,eAAO,MAAM,iBAAiB;;;SAS5B,CAAC;AAEH,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,eAAO,MAAM,kBAAkB;;;;;cAqBjB,gBAAgB,EAAE;cAClB;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE;EAwBhE,CAAC;AAYH,KAAK,OAAO,GAAG,IAAI,CAAC;AAGpB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,IAAI,CAEpE;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAEjD;AAED,wBAAgB,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAErD;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAgB,CAAC;AAE9D,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC;AAY9B,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAO7C"}