@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
@@ -0,0 +1,233 @@
1
+ import { useCallback, useEffect, useState } from "preact/hooks";
2
+ import { h } from 'preact';
3
+
4
+ const VIZ_MIN_SCALE = 0.3;
5
+ const VIZ_MAX_SCALE = 5;
6
+ const VIZ_SCALE_STEP = 0.2;
7
+ function clampVizScale(scale) {
8
+ return Math.min(VIZ_MAX_SCALE, Math.max(VIZ_MIN_SCALE, scale));
9
+ }
10
+ function useVizScaleControls(initialScale = 1) {
11
+ const [scale, setScale] = useState(initialScale);
12
+ const handleZoomIn = useCallback(() => {
13
+ setScale((current) => clampVizScale(current + VIZ_SCALE_STEP));
14
+ }, []);
15
+ const handleZoomOut = useCallback(() => {
16
+ setScale((current) => clampVizScale(current - VIZ_SCALE_STEP));
17
+ }, []);
18
+ const handleReset = useCallback(() => {
19
+ setScale(initialScale);
20
+ }, [initialScale]);
21
+ const zoomWithWheelDelta = useCallback((deltaY) => {
22
+ if (deltaY === 0) return;
23
+ setScale((current) => clampVizScale(current + (deltaY < 0 ? VIZ_SCALE_STEP : -VIZ_SCALE_STEP)));
24
+ }, []);
25
+ const handleWheelZoom = useCallback((event) => {
26
+ event.preventDefault();
27
+ zoomWithWheelDelta(event.deltaY);
28
+ }, [zoomWithWheelDelta]);
29
+ return {
30
+ scale,
31
+ setScale,
32
+ handleZoomIn,
33
+ handleZoomOut,
34
+ handleReset,
35
+ handleWheelZoom,
36
+ zoomWithWheelDelta
37
+ };
38
+ }
39
+ function measureElementSize(element) {
40
+ return {
41
+ width: Math.max(1, Math.ceil(element.scrollWidth || element.offsetWidth || element.clientWidth || 1)),
42
+ height: Math.max(1, Math.ceil(element.scrollHeight || element.offsetHeight || element.clientHeight || 1))
43
+ };
44
+ }
45
+ function getScaledCanvasStyles(baseSize, scale) {
46
+ return {
47
+ scaledStyle: {
48
+ width: `${Math.max(1, Math.ceil(baseSize.width * scale))}px`,
49
+ height: `${Math.max(1, Math.ceil(baseSize.height * scale))}px`
50
+ },
51
+ transformStyle: {
52
+ transform: `scale(${scale})`,
53
+ transformOrigin: "top left"
54
+ }
55
+ };
56
+ }
57
+ function useScaledCanvas(ref, scale, deps = []) {
58
+ const [baseSize, setBaseSize] = useState({ width: 1, height: 1 });
59
+ useEffect(() => {
60
+ const element = ref.current;
61
+ if (!element) return;
62
+ const updateSize = () => setBaseSize(measureElementSize(element));
63
+ updateSize();
64
+ const frame = requestAnimationFrame(updateSize);
65
+ const delayedFrame = requestAnimationFrame(() => requestAnimationFrame(updateSize));
66
+ const settleTimer = window.setTimeout(updateSize, 180);
67
+ const lateTimer = window.setTimeout(updateSize, 420);
68
+ const resizeObserver = typeof ResizeObserver !== "undefined" ? new ResizeObserver(updateSize) : null;
69
+ resizeObserver?.observe(element);
70
+ return () => {
71
+ cancelAnimationFrame(frame);
72
+ cancelAnimationFrame(delayedFrame);
73
+ window.clearTimeout(settleTimer);
74
+ window.clearTimeout(lateTimer);
75
+ resizeObserver?.disconnect();
76
+ };
77
+ }, deps);
78
+ return {
79
+ baseSize,
80
+ ...getScaledCanvasStyles(baseSize, scale)
81
+ };
82
+ }
83
+ function useDragPanScroll(ref, enabled, deps = []) {
84
+ useEffect(() => {
85
+ const element = ref.current;
86
+ if (!element || !enabled) return;
87
+ let pointerId = null;
88
+ let startX = 0;
89
+ let startY = 0;
90
+ let startScrollLeft = 0;
91
+ let startScrollTop = 0;
92
+ const setIdleCursor = () => {
93
+ element.style.cursor = "grab";
94
+ };
95
+ const clearDraggingState = () => {
96
+ pointerId = null;
97
+ element.style.cursor = "grab";
98
+ element.style.userSelect = "";
99
+ };
100
+ const handlePointerDown = (event) => {
101
+ if (event.button !== 0 || event.pointerType === "touch") return;
102
+ if (!(event.target instanceof Element)) return;
103
+ if (event.target.closest("button, a, input, textarea, select, summary")) return;
104
+ pointerId = event.pointerId;
105
+ startX = event.clientX;
106
+ startY = event.clientY;
107
+ startScrollLeft = element.scrollLeft;
108
+ startScrollTop = element.scrollTop;
109
+ element.style.cursor = "grabbing";
110
+ element.style.userSelect = "none";
111
+ element.setPointerCapture(event.pointerId);
112
+ event.preventDefault();
113
+ };
114
+ const handlePointerMove = (event) => {
115
+ if (pointerId !== event.pointerId) return;
116
+ const deltaX = event.clientX - startX;
117
+ const deltaY = event.clientY - startY;
118
+ element.scrollLeft = startScrollLeft - deltaX;
119
+ element.scrollTop = startScrollTop - deltaY;
120
+ };
121
+ const handlePointerUp = (event) => {
122
+ if (pointerId !== event.pointerId) return;
123
+ if (element.hasPointerCapture(event.pointerId)) {
124
+ element.releasePointerCapture(event.pointerId);
125
+ }
126
+ clearDraggingState();
127
+ };
128
+ const handlePointerCancel = (event) => {
129
+ if (pointerId !== event.pointerId) return;
130
+ clearDraggingState();
131
+ };
132
+ setIdleCursor();
133
+ element.addEventListener("pointerdown", handlePointerDown);
134
+ element.addEventListener("pointermove", handlePointerMove);
135
+ element.addEventListener("pointerup", handlePointerUp);
136
+ element.addEventListener("pointercancel", handlePointerCancel);
137
+ element.addEventListener("lostpointercapture", clearDraggingState);
138
+ return () => {
139
+ element.removeEventListener("pointerdown", handlePointerDown);
140
+ element.removeEventListener("pointermove", handlePointerMove);
141
+ element.removeEventListener("pointerup", handlePointerUp);
142
+ element.removeEventListener("pointercancel", handlePointerCancel);
143
+ element.removeEventListener("lostpointercapture", clearDraggingState);
144
+ element.style.cursor = "";
145
+ element.style.userSelect = "";
146
+ };
147
+ }, [enabled, ...deps]);
148
+ }
149
+ function VizToolbar({ onZoomIn, onZoomOut, onReset, onFullscreen, onShowSource, showSourceActive }) {
150
+ return /* @__PURE__ */ h("div", { class: "viz-toolbar absolute right-2 top-2 z-10 flex items-center gap-0.5 rounded-lg border border-[var(--viz-border)] bg-[var(--viz-btn-bg)] p-1 opacity-0 shadow-sm backdrop-blur-sm transition-opacity duration-200 group-hover:opacity-100 focus-within:opacity-100" }, /* @__PURE__ */ h(
151
+ "button",
152
+ {
153
+ type: "button",
154
+ onClick: onZoomIn,
155
+ class: "flex size-6 items-center justify-center rounded-md text-foreground-soft transition-colors hover:bg-[var(--viz-btn-hover)] hover:text-accent",
156
+ "aria-label": "Zoom in",
157
+ title: "Zoom in"
158
+ },
159
+ /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("line", { x1: "12", y1: "5", x2: "12", y2: "19" }), /* @__PURE__ */ h("line", { x1: "5", y1: "12", x2: "19", y2: "12" }))
160
+ ), /* @__PURE__ */ h(
161
+ "button",
162
+ {
163
+ type: "button",
164
+ onClick: onZoomOut,
165
+ class: "flex size-6 items-center justify-center rounded-md text-foreground-soft transition-colors hover:bg-[var(--viz-btn-hover)] hover:text-accent",
166
+ "aria-label": "Zoom out",
167
+ title: "Zoom out"
168
+ },
169
+ /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("line", { x1: "5", y1: "12", x2: "19", y2: "12" }))
170
+ ), /* @__PURE__ */ h(
171
+ "button",
172
+ {
173
+ type: "button",
174
+ onClick: onReset,
175
+ class: "flex size-6 items-center justify-center rounded-md text-foreground-soft transition-colors hover:bg-[var(--viz-btn-hover)] hover:text-accent",
176
+ "aria-label": "Reset view",
177
+ title: "Reset view"
178
+ },
179
+ /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("path", { d: "M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8" }), /* @__PURE__ */ h("path", { d: "M3 3v5h5" }))
180
+ ), /* @__PURE__ */ h("div", { class: "mx-0.5 h-3.5 w-px bg-[var(--viz-border)]" }), /* @__PURE__ */ h(
181
+ "button",
182
+ {
183
+ type: "button",
184
+ onClick: onFullscreen,
185
+ class: "flex size-6 items-center justify-center rounded-md text-foreground-soft transition-colors hover:bg-[var(--viz-btn-hover)] hover:text-accent",
186
+ "aria-label": "Toggle fullscreen",
187
+ title: "Toggle fullscreen"
188
+ },
189
+ /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("path", { d: "M8 3H5a2 2 0 0 0-2 2v3" }), /* @__PURE__ */ h("path", { d: "M21 8V5a2 2 0 0 0-2-2h-3" }), /* @__PURE__ */ h("path", { d: "M3 16v3a2 2 0 0 0 2 2h3" }), /* @__PURE__ */ h("path", { d: "M16 21h3a2 2 0 0 0 2-2v-3" }))
190
+ ), /* @__PURE__ */ h(
191
+ "button",
192
+ {
193
+ type: "button",
194
+ onClick: onShowSource,
195
+ class: `flex size-6 items-center justify-center rounded-md transition-colors ${showSourceActive ? "bg-accent/20 text-accent" : "text-foreground-soft hover:bg-[var(--viz-btn-hover)] hover:text-accent"}`,
196
+ "aria-label": "Toggle source code",
197
+ title: "Toggle source code"
198
+ },
199
+ /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("polyline", { points: "16 18 22 12 16 6" }), /* @__PURE__ */ h("polyline", { points: "8 6 2 12 8 18" }))
200
+ ));
201
+ }
202
+ function CopyButton({ code }) {
203
+ const [copied, setCopied] = useState(false);
204
+ const handleCopy = useCallback(async () => {
205
+ await navigator.clipboard.writeText(code);
206
+ setCopied(true);
207
+ setTimeout(() => setCopied(false), 2e3);
208
+ }, [code]);
209
+ return /* @__PURE__ */ h(
210
+ "button",
211
+ {
212
+ type: "button",
213
+ onClick: handleCopy,
214
+ class: "absolute right-2 top-2 z-10 flex size-6 items-center justify-center rounded-md border border-[var(--viz-border)] bg-[var(--viz-btn-bg)] text-foreground-soft opacity-0 shadow-sm backdrop-blur-sm transition-all duration-200 hover:bg-[var(--viz-btn-hover)] hover:text-accent group-hover:opacity-100 focus-within:opacity-100",
215
+ "aria-label": copied ? "Copied!" : "Copy code",
216
+ title: copied ? "Copied!" : "Copy code"
217
+ },
218
+ copied ? /* @__PURE__ */ h("svg", { class: "size-3.5 text-green-500", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("polyline", { points: "20 6 9 17 4 12" })) : /* @__PURE__ */ h("svg", { class: "size-3.5", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2", "stroke-linecap": "round", "stroke-linejoin": "round" }, /* @__PURE__ */ h("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), /* @__PURE__ */ h("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" }))
219
+ );
220
+ }
221
+ function SkeletonLoader({ height = "120px" }) {
222
+ return /* @__PURE__ */ h("div", { class: "flex items-center justify-center", style: { minHeight: height } }, /* @__PURE__ */ h("div", { class: "flex flex-col items-center gap-2" }, /* @__PURE__ */ h("svg", { class: "size-5 animate-spin text-foreground-soft/40", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", "stroke-width": "2" }, /* @__PURE__ */ h("path", { d: "M21 12a9 9 0 1 1-6.219-8.56" })), /* @__PURE__ */ h("div", { class: "flex gap-1" }, /* @__PURE__ */ h("span", { class: "size-1.5 animate-pulse rounded-full bg-foreground-soft/30" }), /* @__PURE__ */ h("span", { class: "size-1.5 animate-pulse rounded-full bg-foreground-soft/30 [animation-delay:150ms]" }), /* @__PURE__ */ h("span", { class: "size-1.5 animate-pulse rounded-full bg-foreground-soft/30 [animation-delay:300ms]" }))));
223
+ }
224
+ export {
225
+ CopyButton,
226
+ SkeletonLoader,
227
+ VizToolbar,
228
+ getScaledCanvasStyles,
229
+ measureElementSize,
230
+ useDragPanScroll,
231
+ useScaledCanvas,
232
+ useVizScaleControls
233
+ };
@@ -0,0 +1,5 @@
1
+ import type { UIMessage } from "ai";
2
+ export declare function shouldAutoContinueAfterToolCalls({ messages, }: {
3
+ messages: UIMessage[];
4
+ }): boolean;
5
+ //# sourceMappingURL=tool-auto-continue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-auto-continue.d.ts","sourceRoot":"","sources":["../../src/components/tool-auto-continue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AA4BpC,wBAAgB,gCAAgC,CAAC,EAC/C,QAAQ,GACT,EAAE;IACD,QAAQ,EAAE,SAAS,EAAE,CAAC;CACvB,GAAG,OAAO,CAeV"}
@@ -0,0 +1,33 @@
1
+ const AUTO_CONTINUE_TOOL_NAMES = /* @__PURE__ */ new Set(["searchArticles"]);
2
+ function isCompletedToolPart(part) {
3
+ if (typeof part !== "object" || part === null) {
4
+ return false;
5
+ }
6
+ const candidate = part;
7
+ return typeof candidate.type === "string" && candidate.type.startsWith("tool-") && candidate.state === "output-available";
8
+ }
9
+ function getToolName(part) {
10
+ if (typeof part.type !== "string" || !part.type.startsWith("tool-")) {
11
+ return null;
12
+ }
13
+ return part.type.slice("tool-".length) || null;
14
+ }
15
+ function shouldAutoContinueAfterToolCalls({
16
+ messages
17
+ }) {
18
+ const lastMessage = messages[messages.length - 1];
19
+ if (!lastMessage || lastMessage.role !== "assistant") {
20
+ return false;
21
+ }
22
+ const parts = Array.isArray(lastMessage.parts) ? lastMessage.parts : [];
23
+ return parts.some((part) => {
24
+ if (!isCompletedToolPart(part)) {
25
+ return false;
26
+ }
27
+ const toolName = getToolName(part);
28
+ return toolName ? AUTO_CONTINUE_TOOL_NAMES.has(toolName) : false;
29
+ });
30
+ }
31
+ export {
32
+ shouldAutoContinueAfterToolCalls
33
+ };
@@ -0,0 +1,61 @@
1
+ export declare const CHAT_HANDLER: {
2
+ readonly MAX_HISTORY_MESSAGES: 20;
3
+ readonly MAX_INPUT_LENGTH: 500;
4
+ readonly STREAMING_TEMPERATURE: 1;
5
+ readonly STREAMING_MAX_OUTPUT_TOKENS: 16000;
6
+ readonly CACHED_REPLAY_TEMPERATURE: 0.3;
7
+ readonly CACHED_REPLAY_MAX_OUTPUT_TOKENS: 2500;
8
+ };
9
+ export declare const TIMEOUTS: {
10
+ readonly REQUEST: 45000;
11
+ readonly KEYWORD_EXTRACTION: 5000;
12
+ readonly EVIDENCE_ANALYSIS: 8000;
13
+ readonly LLM_STREAMING: 30000;
14
+ readonly PROVIDER_DEFAULT: 30000;
15
+ readonly MOCK_CHAR_DELAY: 15;
16
+ };
17
+ export declare const HEALTH: {
18
+ readonly UNHEALTHY_THRESHOLD: 3;
19
+ readonly RECOVERY_TTL: 60000;
20
+ };
21
+ export declare const SEARCH: {
22
+ readonly ARTICLE_LIMIT: 10;
23
+ readonly ARTICLE_LIMIT_BROAD: 20;
24
+ readonly PROJECT_LIMIT: 5;
25
+ readonly DEEP_CONTENT_SCORE_THRESHOLD: 8;
26
+ readonly DEEP_CONTENT_MAX_LENGTH: 1500;
27
+ };
28
+ export declare const CACHE: {
29
+ readonly DEFAULT_TTL: 600;
30
+ readonly DEFAULT_MAX_ENTRIES: 400;
31
+ readonly PLAYBACK_DELAY: 20;
32
+ readonly CHUNK_SIZE: 15;
33
+ readonly THINKING_DELAY: 5;
34
+ readonly SESSION_TTL: 600;
35
+ readonly MIN_TTL: 60;
36
+ readonly GLOBAL_CLEANUP_INTERVAL: 300000;
37
+ };
38
+ export declare const NOTIFICATION: {
39
+ readonly MAX_REFERENCED_ARTICLES: 5;
40
+ };
41
+ export declare const RESPONSE: {
42
+ readonly SEARCH_PROGRESS: 40;
43
+ readonly GENERATING_PROGRESS: 60;
44
+ readonly FALLBACK_PROGRESS: 80;
45
+ readonly COMPLETE_PROGRESS: 100;
46
+ readonly MAX_SOURCE_ARTICLES: 3;
47
+ readonly MAX_CITATIONS: 5;
48
+ };
49
+ export declare const PROVIDER: {
50
+ readonly DEFAULT_WEIGHT: 100;
51
+ };
52
+ export declare const INTELLIGENCE: {
53
+ readonly EVIDENCE_ANALYSIS_MAX_TOKENS: 360;
54
+ readonly MAX_FOLLOW_UP_LENGTH: 48;
55
+ };
56
+ export declare const CHUNK_INJECTION: {
57
+ readonly MAX_TOKENS: 1500;
58
+ readonly MIN_CHUNK_SCORE: 0.2;
59
+ readonly MAX_CHUNKS_PER_ARTICLE: 2;
60
+ };
61
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;CAOf,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,eAAO,MAAM,MAAM;;;CAGT,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC;AAEX,eAAO,MAAM,KAAK;;;;;;;;;CASR,CAAC;AAEX,eAAO,MAAM,YAAY;;CAEf,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;CAOX,CAAC;AAEX,eAAO,MAAM,QAAQ;;CAEX,CAAC;AAEX,eAAO,MAAM,YAAY;;;CAGf,CAAC;AAEX,eAAO,MAAM,eAAe;;;;CAIlB,CAAC"}
@@ -0,0 +1,72 @@
1
+ const CHAT_HANDLER = {
2
+ MAX_HISTORY_MESSAGES: 20,
3
+ MAX_INPUT_LENGTH: 500,
4
+ STREAMING_TEMPERATURE: 1,
5
+ STREAMING_MAX_OUTPUT_TOKENS: 16e3,
6
+ CACHED_REPLAY_TEMPERATURE: 0.3,
7
+ CACHED_REPLAY_MAX_OUTPUT_TOKENS: 2500
8
+ };
9
+ const TIMEOUTS = {
10
+ REQUEST: 45e3,
11
+ KEYWORD_EXTRACTION: 5e3,
12
+ EVIDENCE_ANALYSIS: 8e3,
13
+ LLM_STREAMING: 3e4,
14
+ PROVIDER_DEFAULT: 3e4,
15
+ MOCK_CHAR_DELAY: 15
16
+ };
17
+ const HEALTH = {
18
+ UNHEALTHY_THRESHOLD: 3,
19
+ RECOVERY_TTL: 6e4
20
+ };
21
+ const SEARCH = {
22
+ ARTICLE_LIMIT: 10,
23
+ ARTICLE_LIMIT_BROAD: 20,
24
+ PROJECT_LIMIT: 5,
25
+ DEEP_CONTENT_SCORE_THRESHOLD: 8,
26
+ DEEP_CONTENT_MAX_LENGTH: 1500
27
+ };
28
+ const CACHE = {
29
+ DEFAULT_TTL: 600,
30
+ DEFAULT_MAX_ENTRIES: 400,
31
+ PLAYBACK_DELAY: 20,
32
+ CHUNK_SIZE: 15,
33
+ THINKING_DELAY: 5,
34
+ SESSION_TTL: 600,
35
+ MIN_TTL: 60,
36
+ GLOBAL_CLEANUP_INTERVAL: 3e5
37
+ };
38
+ const NOTIFICATION = {
39
+ MAX_REFERENCED_ARTICLES: 5
40
+ };
41
+ const RESPONSE = {
42
+ SEARCH_PROGRESS: 40,
43
+ GENERATING_PROGRESS: 60,
44
+ FALLBACK_PROGRESS: 80,
45
+ COMPLETE_PROGRESS: 100,
46
+ MAX_SOURCE_ARTICLES: 3,
47
+ MAX_CITATIONS: 5
48
+ };
49
+ const PROVIDER = {
50
+ DEFAULT_WEIGHT: 100
51
+ };
52
+ const INTELLIGENCE = {
53
+ EVIDENCE_ANALYSIS_MAX_TOKENS: 360,
54
+ MAX_FOLLOW_UP_LENGTH: 48
55
+ };
56
+ const CHUNK_INJECTION = {
57
+ MAX_TOKENS: 1500,
58
+ MIN_CHUNK_SCORE: 0.2,
59
+ MAX_CHUNKS_PER_ARTICLE: 2
60
+ };
61
+ export {
62
+ CACHE,
63
+ CHAT_HANDLER,
64
+ CHUNK_INJECTION,
65
+ HEALTH,
66
+ INTELLIGENCE,
67
+ NOTIFICATION,
68
+ PROVIDER,
69
+ RESPONSE,
70
+ SEARCH,
71
+ TIMEOUTS
72
+ };
@@ -1,4 +1,5 @@
1
- export { preloadMetadata, clearMetadataCache, getMetadata, getArticleSummary, getAllSummaries, getAuthorContext, getVoiceProfile, } from './metadata-loader.js';
2
- export type { AISummariesFile, AuthorContextFile, VoiceProfile, LoadedMetadata, ArticleSummaryData, AuthorPost, } from './types.js';
3
- export type { FactRegistryFile } from '../fact-registry/types.js';
1
+ export { preloadKnowledgeBundle, clearMetadataCache, getAuthorContext, getKnowledgeBundle, } from "./metadata-loader.js";
2
+ export type { AISummariesFile, AuthorContextFile, VoiceProfile, ArticleSummaryData, AuthorPost, } from "./types.js";
3
+ export type { AIKnowledgeBundleFile as KnowledgeBundleFile, KnowledgeCorpusFile, KnowledgePassagesFile, KnowledgeDocument, KnowledgePassage, } from "./knowledge-types.js";
4
+ export type { FactRegistryFile } from "../fact-registry/types.js";
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/data/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,YAAY,EACZ,kBAAkB,EAClB,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,qBAAqB,IAAI,mBAAmB,EAC5C,mBAAmB,EACnB,qBAAqB,EACrB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC"}
@@ -1,18 +1,12 @@
1
1
  import {
2
- preloadMetadata,
2
+ preloadKnowledgeBundle,
3
3
  clearMetadataCache,
4
- getMetadata,
5
- getArticleSummary,
6
- getAllSummaries,
7
4
  getAuthorContext,
8
- getVoiceProfile
5
+ getKnowledgeBundle
9
6
  } from "./metadata-loader.js";
10
7
  export {
11
8
  clearMetadataCache,
12
- getAllSummaries,
13
- getArticleSummary,
14
9
  getAuthorContext,
15
- getMetadata,
16
- getVoiceProfile,
17
- preloadMetadata
10
+ getKnowledgeBundle,
11
+ preloadKnowledgeBundle
18
12
  };
@@ -0,0 +1,8 @@
1
+ import type { FactRegistryFile } from "../fact-registry/types.js";
2
+ import type { VectorIndex } from "../search/vector-reranker.js";
3
+ import type { KnowledgeBundleFile as SharedKnowledgeBundleFile, KnowledgeBundleRuntime, KnowledgeCorpusFile, KnowledgeDocument, KnowledgePassage, KnowledgePassagesFile, KnowledgeSummariesFile } from "@astro-minimax/knowledge-model";
4
+ export { KNOWLEDGE_BUNDLE_SCHEMA, KNOWLEDGE_CORPUS_SCHEMA, KNOWLEDGE_PASSAGES_SCHEMA, KNOWLEDGE_SUMMARIES_SCHEMA, KNOWLEDGE_VECTORS_SCHEMA, } from "@astro-minimax/knowledge-model";
5
+ export type { KnowledgeBundleRuntime, KnowledgeCorpusFile, KnowledgeDocument, KnowledgePassage, KnowledgePassagesFile, KnowledgeSummariesFile, };
6
+ export type KnowledgeBundleFile<TSummaries = import("./types.js").AISummariesFile, TAuthorContext = import("./types.js").AuthorContextFile, TVoiceProfile = import("./types.js").VoiceProfile, TFactRegistry = FactRegistryFile, TVectorIndex = VectorIndex> = SharedKnowledgeBundleFile<TSummaries, TAuthorContext, TVoiceProfile, TFactRegistry, TVectorIndex>;
7
+ export type AIKnowledgeBundleFile = KnowledgeBundleFile<import("./types.js").AISummariesFile, import("./types.js").AuthorContextFile, import("./types.js").VoiceProfile, FactRegistryFile, VectorIndex>;
8
+ //# sourceMappingURL=knowledge-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-types.d.ts","sourceRoot":"","sources":["../../src/data/knowledge-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EACV,mBAAmB,IAAI,yBAAyB,EAChD,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,gCAAgC,CAAC;AAExC,YAAY,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,qBAAqB,EACrB,sBAAsB,GACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,CAC7B,UAAU,GAAG,OAAO,YAAY,EAAE,eAAe,EACjD,cAAc,GAAG,OAAO,YAAY,EAAE,iBAAiB,EACvD,aAAa,GAAG,OAAO,YAAY,EAAE,YAAY,EACjD,aAAa,GAAG,gBAAgB,EAChC,YAAY,GAAG,WAAW,IACxB,yBAAyB,CAC3B,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,YAAY,CACb,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,mBAAmB,CACrD,OAAO,YAAY,EAAE,eAAe,EACpC,OAAO,YAAY,EAAE,iBAAiB,EACtC,OAAO,YAAY,EAAE,YAAY,EACjC,gBAAgB,EAChB,WAAW,CACZ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import {
2
+ KNOWLEDGE_BUNDLE_SCHEMA,
3
+ KNOWLEDGE_CORPUS_SCHEMA,
4
+ KNOWLEDGE_PASSAGES_SCHEMA,
5
+ KNOWLEDGE_SUMMARIES_SCHEMA,
6
+ KNOWLEDGE_VECTORS_SCHEMA
7
+ } from "@astro-minimax/knowledge-model";
8
+ export {
9
+ KNOWLEDGE_BUNDLE_SCHEMA,
10
+ KNOWLEDGE_CORPUS_SCHEMA,
11
+ KNOWLEDGE_PASSAGES_SCHEMA,
12
+ KNOWLEDGE_SUMMARIES_SCHEMA,
13
+ KNOWLEDGE_VECTORS_SCHEMA
14
+ };
@@ -1,37 +1,13 @@
1
- import type { AuthorContextFile, VoiceProfile, LoadedMetadata, ArticleSummaryData } from './types.js';
2
- /**
3
- * Pre-loads metadata synchronously from imported JSON objects.
4
- * Use this at function initialization time in edge environments.
5
- *
6
- * Example (in functions/lib/ai.ts):
7
- * import summaries from '../../datas/ai-summaries.json' with { type: 'json' };
8
- * preloadMetadata({ summaries, authorContext, voiceProfile, factRegistry });
9
- */
10
- export declare function preloadMetadata(data: Partial<LoadedMetadata>): void;
1
+ import type { AuthorContextFile } from "./types.js";
2
+ import type { KnowledgeBundleFile } from "./knowledge-types.js";
3
+ export declare function preloadKnowledgeBundle(bundle: KnowledgeBundleFile): void;
11
4
  /**
12
5
  * Clears the metadata cache and all associated sub-caches (useful for testing).
13
6
  */
14
7
  export declare function clearMetadataCache(): void;
15
- /**
16
- * Returns the cached metadata. Must call preloadMetadata() first.
17
- */
18
- export declare function getMetadata(): LoadedMetadata;
19
- /**
20
- * Returns the AI-generated summary for an article by its slug.
21
- */
22
- export declare function getArticleSummary(slug: string): ArticleSummaryData | undefined;
23
- /**
24
- * Returns all article summaries as a flat array.
25
- */
26
- export declare function getAllSummaries(): Array<{
27
- slug: string;
28
- } & ArticleSummaryData>;
8
+ export declare function getKnowledgeBundle(): KnowledgeBundleFile | null;
29
9
  /**
30
10
  * Returns the author context (name, site URL, recent posts list).
31
11
  */
32
12
  export declare function getAuthorContext(): AuthorContextFile | null;
33
- /**
34
- * Returns the author's voice/style profile.
35
- */
36
- export declare function getVoiceProfile(): VoiceProfile | null;
37
13
  //# sourceMappingURL=metadata-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-loader.d.ts","sourceRoot":"","sources":["../../src/data/metadata-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAmB,iBAAiB,EAAE,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAQvH;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI,CAgBnE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,cAAc,CAE5C;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,GAAG,SAAS,CAE9E;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,kBAAkB,CAAC,CAG9E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,YAAY,GAAG,IAAI,CAErD"}
1
+ {"version":3,"file":"metadata-loader.d.ts","sourceRoot":"","sources":["../../src/data/metadata-loader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAMhE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAKxE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAIzC;AAED,wBAAgB,kBAAkB,IAAI,mBAAmB,GAAG,IAAI,CAE/D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,iBAAiB,GAAG,IAAI,CAE3D"}
@@ -1,48 +1,25 @@
1
1
  import { loadFactRegistry as loadFactRegistryCache } from "../fact-registry/registry.js";
2
2
  import { loadVectorIndex as loadVectorIndexCache } from "../search/vector-reranker.js";
3
- let cachedMetadata = null;
4
- function preloadMetadata(data) {
5
- cachedMetadata = {
6
- summaries: data.summaries ?? null,
7
- authorContext: data.authorContext ?? null,
8
- voiceProfile: data.voiceProfile ?? null,
9
- factRegistry: data.factRegistry ?? null,
10
- vectorIndex: data.vectorIndex ?? null
11
- };
12
- if (cachedMetadata.factRegistry) {
13
- loadFactRegistryCache(cachedMetadata.factRegistry);
14
- }
15
- if (cachedMetadata.vectorIndex) {
16
- loadVectorIndexCache(cachedMetadata.vectorIndex);
17
- }
3
+ let cachedKnowledgeBundle = null;
4
+ function preloadKnowledgeBundle(bundle) {
5
+ cachedKnowledgeBundle = bundle;
6
+ loadFactRegistryCache(bundle.runtime.factRegistry ?? null);
7
+ loadVectorIndexCache(bundle.runtime.vectorIndex ?? null);
18
8
  }
19
9
  function clearMetadataCache() {
20
- cachedMetadata = null;
10
+ cachedKnowledgeBundle = null;
21
11
  loadFactRegistryCache(null);
22
12
  loadVectorIndexCache(null);
23
13
  }
24
- function getMetadata() {
25
- return cachedMetadata ?? { summaries: null, authorContext: null, voiceProfile: null, factRegistry: null, vectorIndex: null };
26
- }
27
- function getArticleSummary(slug) {
28
- return cachedMetadata?.summaries?.articles[slug]?.data;
29
- }
30
- function getAllSummaries() {
31
- const articles = cachedMetadata?.summaries?.articles ?? {};
32
- return Object.entries(articles).map(([slug, entry]) => ({ slug, ...entry.data }));
14
+ function getKnowledgeBundle() {
15
+ return cachedKnowledgeBundle;
33
16
  }
34
17
  function getAuthorContext() {
35
- return cachedMetadata?.authorContext ?? null;
36
- }
37
- function getVoiceProfile() {
38
- return cachedMetadata?.voiceProfile ?? null;
18
+ return cachedKnowledgeBundle?.runtime.authorContext ?? null;
39
19
  }
40
20
  export {
41
21
  clearMetadataCache,
42
- getAllSummaries,
43
- getArticleSummary,
44
22
  getAuthorContext,
45
- getMetadata,
46
- getVoiceProfile,
47
- preloadMetadata
23
+ getKnowledgeBundle,
24
+ preloadKnowledgeBundle
48
25
  };
@@ -28,6 +28,15 @@ export interface AuthorPost {
28
28
  summary: string;
29
29
  keyPoints: string[];
30
30
  url: string;
31
+ chunks?: Array<{
32
+ id: string;
33
+ postId: string;
34
+ heading: string;
35
+ content: string;
36
+ position: number;
37
+ tokenCount: number;
38
+ headers: Record<string, string>;
39
+ }>;
31
40
  }
32
41
  export interface AuthorProfile {
33
42
  name: string;
@@ -35,8 +44,14 @@ export interface AuthorProfile {
35
44
  description: string;
36
45
  }
37
46
  export interface AuthorContextFile {
47
+ $schema?: string;
48
+ generatedAt?: string;
49
+ contextHash?: string;
38
50
  profile: AuthorProfile;
39
51
  posts: AuthorPost[];
52
+ stableFacts?: Record<string, unknown>;
53
+ timelineFacts?: Record<string, unknown>;
54
+ aiConfig?: Record<string, unknown> | null;
40
55
  }
41
56
  export interface VoiceProfile {
42
57
  tone?: string;
@@ -47,7 +62,7 @@ export interface LoadedMetadata {
47
62
  summaries: AISummariesFile | null;
48
63
  authorContext: AuthorContextFile | null;
49
64
  voiceProfile: VoiceProfile | null;
50
- factRegistry: import('../fact-registry/types.js').FactRegistryFile | null;
51
- vectorIndex: import('../search/vector-reranker.js').VectorIndex | null;
65
+ factRegistry: import("../fact-registry/types.js").FactRegistryFile | null;
66
+ vectorIndex: import("../search/vector-reranker.js").VectorIndex | null;
52
67
  }
53
68
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,OAAO,2BAA2B,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1E,WAAW,EAAE,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,CAAC;CACxE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/data/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,kBAAkB,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE;QACJ,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACjC,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,aAAa,CAAC;IACvB,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,eAAe,GAAG,IAAI,CAAC;IAClC,aAAa,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACxC,YAAY,EAAE,YAAY,GAAG,IAAI,CAAC;IAClC,YAAY,EAAE,OAAO,2BAA2B,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC1E,WAAW,EAAE,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,CAAC;CACxE"}
@@ -0,0 +1,5 @@
1
+ export * from './types.js';
2
+ export { getExtensionRegistry, resetExtensionRegistry } from './registry.js';
3
+ export { loadExtensions, loadExtensionsFromGlob, registerBuiltInExtensions } from './loader.js';
4
+ export { resolveVoiceStyleMode, buildVoiceStylePrompt, buildContextSections, getSemanticFallback, mergeSearchDocuments, mergeFacts, } from './injector.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extensions/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,oBAAoB,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EACL,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,oBAAoB,EACpB,UAAU,GACX,MAAM,eAAe,CAAC"}