@btst/stack 4.1.1 → 4.3.0

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 (94) hide show
  1. package/README.md +2 -2
  2. package/dist/packages/stack/src/plugins/ai-chat/api/operations.cjs +15 -9
  3. package/dist/packages/stack/src/plugins/ai-chat/api/operations.mjs +16 -10
  4. package/dist/packages/stack/src/plugins/ai-chat/api/page-tools.cjs +28 -0
  5. package/dist/packages/stack/src/plugins/ai-chat/api/page-tools.mjs +29 -2
  6. package/dist/packages/stack/src/plugins/ai-chat/api/plugin.cjs +5 -0
  7. package/dist/packages/stack/src/plugins/ai-chat/api/plugin.mjs +5 -0
  8. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-interface.cjs +91 -8
  9. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-interface.mjs +91 -8
  10. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.cjs +242 -68
  11. package/dist/packages/stack/src/plugins/ai-chat/client/components/chat-layout.mjs +246 -72
  12. package/dist/packages/stack/src/plugins/ai-chat/client/components/tool-call-display.cjs +17 -0
  13. package/dist/packages/stack/src/plugins/ai-chat/client/components/tool-call-display.mjs +18 -1
  14. package/dist/packages/stack/src/plugins/ai-chat/client/context/chat-analytics.cjs +42 -0
  15. package/dist/packages/stack/src/plugins/ai-chat/client/context/chat-analytics.mjs +39 -0
  16. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.cjs +2 -1
  17. package/dist/packages/stack/src/plugins/ai-chat/client/plugin.mjs +2 -1
  18. package/dist/plugins/ai-chat/api/index.d.cts +2 -2
  19. package/dist/plugins/ai-chat/api/index.d.mts +2 -2
  20. package/dist/plugins/ai-chat/api/index.d.ts +2 -2
  21. package/dist/plugins/ai-chat/client/components/index.d.cts +2 -1
  22. package/dist/plugins/ai-chat/client/components/index.d.mts +2 -1
  23. package/dist/plugins/ai-chat/client/components/index.d.ts +2 -1
  24. package/dist/plugins/ai-chat/client/context/page-ai-context.cjs +4 -0
  25. package/dist/plugins/ai-chat/client/context/page-ai-context.d.cts +6 -2
  26. package/dist/plugins/ai-chat/client/context/page-ai-context.d.mts +6 -2
  27. package/dist/plugins/ai-chat/client/context/page-ai-context.d.ts +6 -2
  28. package/dist/plugins/ai-chat/client/context/page-ai-context.mjs +4 -1
  29. package/dist/plugins/ai-chat/client/hooks/index.d.cts +2 -2
  30. package/dist/plugins/ai-chat/client/hooks/index.d.mts +2 -2
  31. package/dist/plugins/ai-chat/client/hooks/index.d.ts +2 -2
  32. package/dist/plugins/ai-chat/client/index.d.cts +7 -3
  33. package/dist/plugins/ai-chat/client/index.d.mts +7 -3
  34. package/dist/plugins/ai-chat/client/index.d.ts +7 -3
  35. package/dist/plugins/ai-chat/query-keys.d.cts +1 -1
  36. package/dist/plugins/ai-chat/query-keys.d.mts +1 -1
  37. package/dist/plugins/ai-chat/query-keys.d.ts +1 -1
  38. package/dist/plugins/blog/api/index.d.cts +2 -2
  39. package/dist/plugins/blog/api/index.d.mts +2 -2
  40. package/dist/plugins/blog/api/index.d.ts +2 -2
  41. package/dist/plugins/blog/client/hooks/index.d.cts +2 -2
  42. package/dist/plugins/blog/client/hooks/index.d.mts +2 -2
  43. package/dist/plugins/blog/client/hooks/index.d.ts +2 -2
  44. package/dist/plugins/blog/client/index.d.cts +2 -2
  45. package/dist/plugins/blog/client/index.d.mts +2 -2
  46. package/dist/plugins/blog/client/index.d.ts +2 -2
  47. package/dist/plugins/blog/query-keys.d.cts +2 -2
  48. package/dist/plugins/blog/query-keys.d.mts +2 -2
  49. package/dist/plugins/blog/query-keys.d.ts +2 -2
  50. package/dist/plugins/form-builder/api/index.d.cts +1 -1
  51. package/dist/plugins/form-builder/api/index.d.mts +1 -1
  52. package/dist/plugins/form-builder/api/index.d.ts +1 -1
  53. package/dist/plugins/form-builder/client/hooks/index.d.cts +1 -1
  54. package/dist/plugins/form-builder/client/hooks/index.d.mts +1 -1
  55. package/dist/plugins/form-builder/client/hooks/index.d.ts +1 -1
  56. package/dist/plugins/form-builder/query-keys.d.cts +1 -1
  57. package/dist/plugins/form-builder/query-keys.d.mts +1 -1
  58. package/dist/plugins/form-builder/query-keys.d.ts +1 -1
  59. package/dist/shared/{stack.B5yPgHsp.d.mts → stack.B7Mj74BQ.d.mts} +18 -2
  60. package/dist/shared/{stack.rVF0f509.d.ts → stack.CHrtGKLz.d.mts} +66 -4
  61. package/dist/shared/{stack.BggTHKlo.d.mts → stack.CZ1h_T4k.d.mts} +90 -90
  62. package/dist/shared/{stack.DfrRYOIl.d.ts → stack.CnDMBj4z.d.ts} +5 -5
  63. package/dist/shared/{stack.94kN3pEK.d.mts → stack.D2y4gl03.d.mts} +5 -5
  64. package/dist/shared/{stack.3Sr6qRtT.d.ts → stack.DBH1Bjko.d.ts} +18 -2
  65. package/dist/shared/{stack.lPKwd_v0.d.ts → stack.DQpyA3Cq.d.ts} +90 -90
  66. package/dist/shared/{stack.C4oVW2qK.d.cts → stack.Dgt3MCtW.d.cts} +18 -2
  67. package/dist/shared/{stack.CtrnoQgH.d.cts → stack.DiYg7Jw1.d.cts} +90 -90
  68. package/dist/shared/{stack.rVF0f509.d.cts → stack.DzJgoNqJ.d.cts} +66 -4
  69. package/dist/shared/{stack.rVF0f509.d.mts → stack.qMp2VzNw.d.ts} +66 -4
  70. package/dist/shared/{stack.BTStHVTy.d.cts → stack.rmWRtSjs.d.cts} +5 -5
  71. package/package.json +2 -2
  72. package/src/plugins/ai-chat/__tests__/authorization.test.ts +106 -1
  73. package/src/plugins/ai-chat/__tests__/classnames-overrides.test.tsx +26 -3
  74. package/src/plugins/ai-chat/__tests__/page-content.test.ts +177 -0
  75. package/src/plugins/ai-chat/__tests__/page-widget.test.tsx +675 -0
  76. package/src/plugins/ai-chat/api/operations.ts +29 -13
  77. package/src/plugins/ai-chat/api/page-tools.ts +56 -2
  78. package/src/plugins/ai-chat/api/plugin.ts +13 -0
  79. package/src/plugins/ai-chat/client/analytics.ts +35 -0
  80. package/src/plugins/ai-chat/client/components/chat-interface.tsx +113 -10
  81. package/src/plugins/ai-chat/client/components/chat-layout.tsx +304 -68
  82. package/src/plugins/ai-chat/client/components/tool-call-display.tsx +29 -1
  83. package/src/plugins/ai-chat/client/context/chat-analytics.tsx +46 -0
  84. package/src/plugins/ai-chat/client/context/page-ai-context.tsx +9 -1
  85. package/src/plugins/ai-chat/client/index.ts +2 -0
  86. package/src/plugins/ai-chat/client/localization/index.ts +12 -0
  87. package/src/plugins/ai-chat/client/overrides.ts +5 -0
  88. package/src/plugins/ai-chat/client/plugin.tsx +3 -0
  89. package/dist/shared/{stack.BuxUQqL8.d.ts → stack.CGmh-Lpe.d.ts} +12 -12
  90. package/dist/shared/{stack.Egr3RWhA.d.mts → stack.Doy2_wgl.d.mts} +12 -12
  91. package/dist/shared/{stack.CKc_Bais.d.cts → stack.DtZgEX84.d.cts} +6 -6
  92. package/dist/shared/{stack.CKc_Bais.d.mts → stack.DtZgEX84.d.mts} +6 -6
  93. package/dist/shared/{stack.CKc_Bais.d.ts → stack.DtZgEX84.d.ts} +6 -6
  94. package/dist/shared/{stack.CX83YNuS.d.cts → stack.zch70Loj.d.cts} +12 -12
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
2
3
 
3
4
  /**
4
5
  * A client-side tool handler — receives the AI's tool call args and returns a result.
@@ -21,7 +22,8 @@ interface PageAIContextConfig {
21
22
  /**
22
23
  * Human-readable description of the current page and its content.
23
24
  * Injected into the AI system prompt so it understands what the user is looking at.
24
- * Capped at 8,000 characters server-side.
25
+ * Limited to 16,000 characters server-side. For longer content, pass a page
26
+ * path and configure the backend pageContent resolver.
25
27
  */
26
28
  pageDescription: string;
27
29
  /**
@@ -39,6 +41,8 @@ interface PageAIContextConfig {
39
41
  */
40
42
  clientTools?: Record<string, PageAIClientTool>;
41
43
  }
44
+ /** Instance-local context used by ChatLayout; undefined inherits page registrations. */
45
+ declare const PageAIContextScope: React$1.Context<PageAIContextConfig | null | undefined>;
42
46
  /**
43
47
  * Provider that enables route-aware AI context across the app.
44
48
  *
@@ -80,5 +84,5 @@ declare function useRegisterPageAIContext(config: PageAIContextConfig | null): v
80
84
  */
81
85
  declare function usePageAIContext(): PageAIContextConfig | null;
82
86
 
83
- export { PageAIContextProvider, usePageAIContext, useRegisterPageAIContext };
87
+ export { PageAIContextProvider, PageAIContextScope, usePageAIContext, useRegisterPageAIContext };
84
88
  export type { PageAIClientTool, PageAIContextConfig };
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
2
3
 
3
4
  /**
4
5
  * A client-side tool handler — receives the AI's tool call args and returns a result.
@@ -21,7 +22,8 @@ interface PageAIContextConfig {
21
22
  /**
22
23
  * Human-readable description of the current page and its content.
23
24
  * Injected into the AI system prompt so it understands what the user is looking at.
24
- * Capped at 8,000 characters server-side.
25
+ * Limited to 16,000 characters server-side. For longer content, pass a page
26
+ * path and configure the backend pageContent resolver.
25
27
  */
26
28
  pageDescription: string;
27
29
  /**
@@ -39,6 +41,8 @@ interface PageAIContextConfig {
39
41
  */
40
42
  clientTools?: Record<string, PageAIClientTool>;
41
43
  }
44
+ /** Instance-local context used by ChatLayout; undefined inherits page registrations. */
45
+ declare const PageAIContextScope: React$1.Context<PageAIContextConfig | null | undefined>;
42
46
  /**
43
47
  * Provider that enables route-aware AI context across the app.
44
48
  *
@@ -80,5 +84,5 @@ declare function useRegisterPageAIContext(config: PageAIContextConfig | null): v
80
84
  */
81
85
  declare function usePageAIContext(): PageAIContextConfig | null;
82
86
 
83
- export { PageAIContextProvider, usePageAIContext, useRegisterPageAIContext };
87
+ export { PageAIContextProvider, PageAIContextScope, usePageAIContext, useRegisterPageAIContext };
84
88
  export type { PageAIClientTool, PageAIContextConfig };
@@ -1,4 +1,5 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
2
3
 
3
4
  /**
4
5
  * A client-side tool handler — receives the AI's tool call args and returns a result.
@@ -21,7 +22,8 @@ interface PageAIContextConfig {
21
22
  /**
22
23
  * Human-readable description of the current page and its content.
23
24
  * Injected into the AI system prompt so it understands what the user is looking at.
24
- * Capped at 8,000 characters server-side.
25
+ * Limited to 16,000 characters server-side. For longer content, pass a page
26
+ * path and configure the backend pageContent resolver.
25
27
  */
26
28
  pageDescription: string;
27
29
  /**
@@ -39,6 +41,8 @@ interface PageAIContextConfig {
39
41
  */
40
42
  clientTools?: Record<string, PageAIClientTool>;
41
43
  }
44
+ /** Instance-local context used by ChatLayout; undefined inherits page registrations. */
45
+ declare const PageAIContextScope: React$1.Context<PageAIContextConfig | null | undefined>;
42
46
  /**
43
47
  * Provider that enables route-aware AI context across the app.
44
48
  *
@@ -80,5 +84,5 @@ declare function useRegisterPageAIContext(config: PageAIContextConfig | null): v
80
84
  */
81
85
  declare function usePageAIContext(): PageAIContextConfig | null;
82
86
 
83
- export { PageAIContextProvider, usePageAIContext, useRegisterPageAIContext };
87
+ export { PageAIContextProvider, PageAIContextScope, usePageAIContext, useRegisterPageAIContext };
84
88
  export type { PageAIClientTool, PageAIContextConfig };
@@ -4,6 +4,7 @@ import { createContext, useRef, useState, useCallback, useMemo, useContext, useI
4
4
 
5
5
  const PageAIAPIContext = createContext(null);
6
6
  const PageAIVersionContext = createContext(0);
7
+ const PageAIContextScope = createContext(void 0);
7
8
  function PageAIContextProvider({
8
9
  children
9
10
  }) {
@@ -81,8 +82,10 @@ function useRegisterPageAIContext(config) {
81
82
  function usePageAIContext() {
82
83
  useContext(PageAIVersionContext);
83
84
  const ctx = useContext(PageAIAPIContext);
85
+ const scoped = useContext(PageAIContextScope);
86
+ if (scoped !== void 0) return scoped;
84
87
  if (!ctx) return null;
85
88
  return ctx.getActive();
86
89
  }
87
90
 
88
- export { PageAIContextProvider, usePageAIContext, useRegisterPageAIContext };
91
+ export { PageAIContextProvider, PageAIContextScope, usePageAIContext, useRegisterPageAIContext };
@@ -1,7 +1,7 @@
1
1
  import { UseMutationResult } from '@tanstack/react-query';
2
2
  import { ResourceFormResult } from '@btst/stack/plugins/client/hooks';
3
- import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.C4oVW2qK.cjs';
4
- export { a as SerializedMessage } from '../../../../shared/stack.C4oVW2qK.cjs';
3
+ import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.Dgt3MCtW.cjs';
4
+ export { a as SerializedMessage } from '../../../../shared/stack.Dgt3MCtW.cjs';
5
5
  import '@btst/stack/plugins/client';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '@btst/stack/authorization';
@@ -1,7 +1,7 @@
1
1
  import { UseMutationResult } from '@tanstack/react-query';
2
2
  import { ResourceFormResult } from '@btst/stack/plugins/client/hooks';
3
- import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.B5yPgHsp.mjs';
4
- export { a as SerializedMessage } from '../../../../shared/stack.B5yPgHsp.mjs';
3
+ import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.B7Mj74BQ.mjs';
4
+ export { a as SerializedMessage } from '../../../../shared/stack.B7Mj74BQ.mjs';
5
5
  import '@btst/stack/plugins/client';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '@btst/stack/authorization';
@@ -1,7 +1,7 @@
1
1
  import { UseMutationResult } from '@tanstack/react-query';
2
2
  import { ResourceFormResult } from '@btst/stack/plugins/client/hooks';
3
- import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.3Sr6qRtT.js';
4
- export { a as SerializedMessage } from '../../../../shared/stack.3Sr6qRtT.js';
3
+ import { A as AiChatIdentityPartition, S as SerializedConversation, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput } from '../../../../shared/stack.DBH1Bjko.js';
4
+ export { a as SerializedMessage } from '../../../../shared/stack.DBH1Bjko.js';
5
5
  import '@btst/stack/plugins/client';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '@btst/stack/authorization';
@@ -2,9 +2,9 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType } from 'react';
5
- import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.C4oVW2qK.cjs';
6
- import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.rVF0f509.cjs';
7
- export { b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.rVF0f509.cjs';
5
+ import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.Dgt3MCtW.cjs';
6
+ import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.DzJgoNqJ.cjs';
7
+ export { l as AiChatAnalyticsEvent, b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.DzJgoNqJ.cjs';
8
8
  export { UIMessage } from 'ai';
9
9
  import '@btst/stack/plugins/api';
10
10
  import '@btst/stack/authorization';
@@ -13,6 +13,7 @@ import '../permissions.cjs';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
15
15
  import '@btst/stack/context';
16
+ import './context/page-ai-context.cjs';
16
17
 
17
18
  /**
18
19
  * Context passed to route hooks
@@ -57,6 +58,8 @@ interface AiChatClientConfig {
57
58
  * @default 'authenticated'
58
59
  */
59
60
  mode?: AiChatMode;
61
+ /** Enable built-in readPage permission checks and compact status alongside backend pageContent. */
62
+ pageContent?: boolean;
60
63
  /** Optional SEO configuration for meta tags */
61
64
  seo?: {
62
65
  /** Site name for Open Graph tags */
@@ -152,6 +155,7 @@ declare const aiChatClientPlugin: (config?: AiChatClientConfig) => _btst_stack_p
152
155
  })[];
153
156
  }, _btst_yar.RouteMeta>;
154
157
  }, "aiChat", {
158
+ pageContent?: true | undefined;
155
159
  mode: AiChatMode;
156
160
  }, never>;
157
161
 
@@ -2,9 +2,9 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType } from 'react';
5
- import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.B5yPgHsp.mjs';
6
- import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.rVF0f509.mjs';
7
- export { b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.rVF0f509.mjs';
5
+ import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.B7Mj74BQ.mjs';
6
+ import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.CHrtGKLz.mjs';
7
+ export { l as AiChatAnalyticsEvent, b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.CHrtGKLz.mjs';
8
8
  export { UIMessage } from 'ai';
9
9
  import '@btst/stack/plugins/api';
10
10
  import '@btst/stack/authorization';
@@ -13,6 +13,7 @@ import '../permissions.mjs';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
15
15
  import '@btst/stack/context';
16
+ import './context/page-ai-context.mjs';
16
17
 
17
18
  /**
18
19
  * Context passed to route hooks
@@ -57,6 +58,8 @@ interface AiChatClientConfig {
57
58
  * @default 'authenticated'
58
59
  */
59
60
  mode?: AiChatMode;
61
+ /** Enable built-in readPage permission checks and compact status alongside backend pageContent. */
62
+ pageContent?: boolean;
60
63
  /** Optional SEO configuration for meta tags */
61
64
  seo?: {
62
65
  /** Site name for Open Graph tags */
@@ -152,6 +155,7 @@ declare const aiChatClientPlugin: (config?: AiChatClientConfig) => _btst_stack_p
152
155
  })[];
153
156
  }, _btst_yar.RouteMeta>;
154
157
  }, "aiChat", {
158
+ pageContent?: true | undefined;
155
159
  mode: AiChatMode;
156
160
  }, never>;
157
161
 
@@ -2,9 +2,9 @@ import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import * as _btst_yar from '@btst/yar';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType } from 'react';
5
- import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.3Sr6qRtT.js';
6
- import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.rVF0f509.js';
7
- export { b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.rVF0f509.js';
5
+ import { S as SerializedConversation, a as SerializedMessage, A as AiChatIdentityPartition } from '../../../shared/stack.DBH1Bjko.js';
6
+ import { A as AiChatMode, a as AiChatPluginOverrides } from '../../../shared/stack.qMp2VzNw.js';
7
+ export { l as AiChatAnalyticsEvent, b as AiChatProviderConfig, c as AllowedFileType, j as ChatInput, C as ChatInterface, f as ChatLayout, g as ChatLayoutProps, i as ChatMessage, h as ChatSidebar, D as DEFAULT_ALLOWED_FILE_TYPES, k as ToolCallDisplay, T as ToolCallProps, e as ToolCallRenderer, d as ToolCallState } from '../../../shared/stack.qMp2VzNw.js';
8
8
  export { UIMessage } from 'ai';
9
9
  import '@btst/stack/plugins/api';
10
10
  import '@btst/stack/authorization';
@@ -13,6 +13,7 @@ import '../permissions.js';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
15
15
  import '@btst/stack/context';
16
+ import './context/page-ai-context.js';
16
17
 
17
18
  /**
18
19
  * Context passed to route hooks
@@ -57,6 +58,8 @@ interface AiChatClientConfig {
57
58
  * @default 'authenticated'
58
59
  */
59
60
  mode?: AiChatMode;
61
+ /** Enable built-in readPage permission checks and compact status alongside backend pageContent. */
62
+ pageContent?: boolean;
60
63
  /** Optional SEO configuration for meta tags */
61
64
  seo?: {
62
65
  /** Site name for Open Graph tags */
@@ -152,6 +155,7 @@ declare const aiChatClientPlugin: (config?: AiChatClientConfig) => _btst_stack_p
152
155
  })[];
153
156
  }, _btst_yar.RouteMeta>;
154
157
  }, "aiChat", {
158
+ pageContent?: true | undefined;
155
159
  mode: AiChatMode;
156
160
  }, never>;
157
161
 
@@ -1,5 +1,5 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.C4oVW2qK.cjs';
2
+ export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.Dgt3MCtW.cjs';
3
3
  import '@btst/stack/context';
4
4
  import '@btst/stack/plugins/api';
5
5
  import '@btst/stack/authorization';
@@ -1,5 +1,5 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.B5yPgHsp.mjs';
2
+ export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.B7Mj74BQ.mjs';
3
3
  import '@btst/stack/context';
4
4
  import '@btst/stack/plugins/api';
5
5
  import '@btst/stack/authorization';
@@ -1,5 +1,5 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.3Sr6qRtT.js';
2
+ export { A as AiChatIdentityPartition, g as AiChatQueryKeys, C as ConversationWithMessages, b as CreateConversationInput, R as RenameConversationInput, d as aiChatIdentityKey, e as aiChatResources, f as createAiChatQueryKeys } from '../../shared/stack.DBH1Bjko.js';
3
3
  import '@btst/stack/context';
4
4
  import '@btst/stack/plugins/api';
5
5
  import '@btst/stack/authorization';
@@ -1,10 +1,10 @@
1
- export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.CtrnoQgH.cjs';
1
+ export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.DiYg7Jw1.cjs';
2
2
  import { DBAdapter } from '@btst/db';
3
3
  import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Dsatjh0B.cjs';
4
4
  export { blogPermissions } from '../permissions.cjs';
5
5
  import '@btst/stack/plugins/client';
6
6
  import 'zod';
7
- import '../../../shared/stack.CKc_Bais.cjs';
7
+ import '../../../shared/stack.DtZgEX84.cjs';
8
8
  import '@btst/stack/plugins/api';
9
9
  import '../../../authorization/index.cjs';
10
10
  import 'zod/v4/core';
@@ -1,10 +1,10 @@
1
- export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.BggTHKlo.mjs';
1
+ export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.CZ1h_T4k.mjs';
2
2
  import { DBAdapter } from '@btst/db';
3
3
  import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Dsatjh0B.mjs';
4
4
  export { blogPermissions } from '../permissions.mjs';
5
5
  import '@btst/stack/plugins/client';
6
6
  import 'zod';
7
- import '../../../shared/stack.CKc_Bais.mjs';
7
+ import '../../../shared/stack.DtZgEX84.mjs';
8
8
  import '@btst/stack/plugins/api';
9
9
  import '../../../authorization/index.mjs';
10
10
  import 'zod/v4/core';
@@ -1,10 +1,10 @@
1
- export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.lPKwd_v0.js';
1
+ export { B as BLOG_QUERY_KEYS, i as BlogApiRouter, k as BlogBackendHooks, f as BlogBackendOptions, l as BlogCreateErrorContext, m as BlogCreateOperationContext, n as BlogCreateResultContext, o as BlogDeleteErrorContext, p as BlogDeleteOperationContext, q as BlogDeleteResultContext, r as BlogListErrorContext, s as BlogListOperationContext, t as BlogListResultContext, u as BlogNextPreviousErrorContext, v as BlogNextPreviousOperationContext, w as BlogNextPreviousResultContext, e as BlogRouteKey, x as BlogUpdateErrorContext, y as BlogUpdateOperationContext, z as BlogUpdateResultContext, C as CreatePostOperationInputSchema, N as NextPreviousPostsQuerySchema, P as PostListParams, j as PostListQuerySchema, c as PostListResult, S as SerializedNextPreviousPostsResult, A as SerializedPostListResult, U as UpdatePostOperationInputSchema, h as blogBackendPlugin, d as createBlogQueryKeys, g as getAllPosts, b as getAllTags, a as getPostBySlug } from '../../../shared/stack.DQpyA3Cq.js';
2
2
  import { DBAdapter } from '@btst/db';
3
3
  import { P as Post, T as Tag, S as SerializedPost, a as SerializedTag } from '../../../shared/stack.Dsatjh0B.js';
4
4
  export { blogPermissions } from '../permissions.js';
5
5
  import '@btst/stack/plugins/client';
6
6
  import 'zod';
7
- import '../../../shared/stack.CKc_Bais.js';
7
+ import '../../../shared/stack.DtZgEX84.js';
8
8
  import '@btst/stack/plugins/api';
9
9
  import '../../../authorization/index.js';
10
10
  import 'zod/v4/core';
@@ -1,9 +1,9 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.BTStHVTy.cjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.rmWRtSjs.cjs';
2
2
  export { useDebounce } from '@btst/stack/plugins/client/hooks';
3
3
  import '@tanstack/react-query';
4
4
  import 'zod';
5
5
  import '../../../../shared/stack.Dsatjh0B.cjs';
6
- import '../../../../shared/stack.CKc_Bais.cjs';
6
+ import '../../../../shared/stack.DtZgEX84.cjs';
7
7
 
8
8
  declare function useThrottle<T>(value: T, wait?: number): T;
9
9
 
@@ -1,9 +1,9 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.94kN3pEK.mjs';
1
+ export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.D2y4gl03.mjs';
2
2
  export { useDebounce } from '@btst/stack/plugins/client/hooks';
3
3
  import '@tanstack/react-query';
4
4
  import 'zod';
5
5
  import '../../../../shared/stack.Dsatjh0B.mjs';
6
- import '../../../../shared/stack.CKc_Bais.mjs';
6
+ import '../../../../shared/stack.DtZgEX84.mjs';
7
7
 
8
8
  declare function useThrottle<T>(value: T, wait?: number): T;
9
9
 
@@ -1,9 +1,9 @@
1
- export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.DfrRYOIl.js';
1
+ export { P as PostCreateInput, e as PostUpdateInput, p as UseNextPreviousPostsOptions, q as UseNextPreviousPostsResult, d as UsePostResult, b as UsePostSearchOptions, c as UsePostSearchResult, U as UsePostsOptions, a as UsePostsResult, s as UseRecentPostsOptions, t as UseRecentPostsResult, l as useCreatePost, n as useDeletePost, r as useNextPreviousPosts, g as usePost, k as usePostForm, o as usePostSearch, u as usePosts, v as useRecentPosts, h as useSuspensePost, f as useSuspensePosts, j as useSuspenseTags, i as useTags, m as useUpdatePost } from '../../../../shared/stack.CnDMBj4z.js';
2
2
  export { useDebounce } from '@btst/stack/plugins/client/hooks';
3
3
  import '@tanstack/react-query';
4
4
  import 'zod';
5
5
  import '../../../../shared/stack.Dsatjh0B.js';
6
- import '../../../../shared/stack.CKc_Bais.js';
6
+ import '../../../../shared/stack.DtZgEX84.js';
7
7
 
8
8
  declare function useThrottle<T>(value: T, wait?: number): T;
9
9
 
@@ -4,11 +4,11 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType, ReactNode } from 'react';
5
5
  import { S as SerializedPost, P as Post } from '../../../shared/stack.Dsatjh0B.cjs';
6
6
  import { N as NewPostPageComponent } from '../../../shared/stack.Bz-YPsuX.cjs';
7
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.BTStHVTy.cjs';
7
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.rmWRtSjs.cjs';
8
8
  import '@tanstack/react-query';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client/hooks';
11
- import '../../../shared/stack.CKc_Bais.cjs';
11
+ import '../../../shared/stack.DtZgEX84.cjs';
12
12
 
13
13
  declare const BLOG_LOCALIZATION: {
14
14
  BLOG_FORMS_TITLE_LABEL: string;
@@ -4,11 +4,11 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType, ReactNode } from 'react';
5
5
  import { S as SerializedPost, P as Post } from '../../../shared/stack.Dsatjh0B.mjs';
6
6
  import { N as NewPostPageComponent } from '../../../shared/stack.Bz-YPsuX.mjs';
7
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.94kN3pEK.mjs';
7
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.D2y4gl03.mjs';
8
8
  import '@tanstack/react-query';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client/hooks';
11
- import '../../../shared/stack.CKc_Bais.mjs';
11
+ import '../../../shared/stack.DtZgEX84.mjs';
12
12
 
13
13
  declare const BLOG_LOCALIZATION: {
14
14
  BLOG_FORMS_TITLE_LABEL: string;
@@ -4,11 +4,11 @@ import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import { ComponentType, ReactNode } from 'react';
5
5
  import { S as SerializedPost, P as Post } from '../../../shared/stack.Dsatjh0B.js';
6
6
  import { N as NewPostPageComponent } from '../../../shared/stack.Bz-YPsuX.js';
7
- export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.DfrRYOIl.js';
7
+ export { U as UsePostsOptions, a as UsePostsResult } from '../../../shared/stack.CnDMBj4z.js';
8
8
  import '@tanstack/react-query';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client/hooks';
11
- import '../../../shared/stack.CKc_Bais.js';
11
+ import '../../../shared/stack.DtZgEX84.js';
12
12
 
13
13
  declare const BLOG_LOCALIZATION: {
14
14
  BLOG_FORMS_TITLE_LABEL: string;
@@ -1,7 +1,7 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.CtrnoQgH.cjs';
2
+ export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.DiYg7Jw1.cjs';
3
3
  import 'zod';
4
- import '../../shared/stack.CKc_Bais.cjs';
4
+ import '../../shared/stack.DtZgEX84.cjs';
5
5
  import '../../shared/stack.Dsatjh0B.cjs';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '../../authorization/index.cjs';
@@ -1,7 +1,7 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.BggTHKlo.mjs';
2
+ export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.CZ1h_T4k.mjs';
3
3
  import 'zod';
4
- import '../../shared/stack.CKc_Bais.mjs';
4
+ import '../../shared/stack.DtZgEX84.mjs';
5
5
  import '../../shared/stack.Dsatjh0B.mjs';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '../../authorization/index.mjs';
@@ -1,7 +1,7 @@
1
1
  import '@btst/stack/plugins/client';
2
- export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.lPKwd_v0.js';
2
+ export { D as blogResources, d as createBlogQueryKeys } from '../../shared/stack.DQpyA3Cq.js';
3
3
  import 'zod';
4
- import '../../shared/stack.CKc_Bais.js';
4
+ import '../../shared/stack.DtZgEX84.js';
5
5
  import '../../shared/stack.Dsatjh0B.js';
6
6
  import '@btst/stack/plugins/api';
7
7
  import '../../authorization/index.js';
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.CX83YNuS.cjs';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.zch70Loj.cjs';
2
2
  export { formBuilderPermissions } from '../permissions.cjs';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.v2O65JqF.cjs';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.v2O65JqF.cjs';
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.Egr3RWhA.mjs';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.Doy2_wgl.mjs';
2
2
  export { formBuilderPermissions } from '../permissions.mjs';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.OYT8WU4n.mjs';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.OYT8WU4n.mjs';
@@ -1,4 +1,4 @@
1
- export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.BuxUQqL8.js';
1
+ export { k as FORM_QUERY_KEYS, a as FormBuilderApiRouter, c as FormBuilderOperationError, e as FormBuilderOperations, b as FormBuilderRouteKey, g as FormListOperationResult, h as SubmissionDetailOperationResult, i as SubmissionListOperationResult, j as SubmitOperationResult, d as createFormBuilderOperations, f as formBuilderBackendPlugin } from '../../../shared/stack.CGmh-Lpe.js';
2
2
  export { formBuilderPermissions } from '../permissions.js';
3
3
  import { S as SerializedForm, d as SerializedFormSubmissionWithData, F as Form, f as FormSubmission, a as SerializedFormSubmission, c as SerializedFormSubmissionSummary, g as FormSubmissionWithForm } from '../../../shared/stack.C3bU9w6L.js';
4
4
  export { h as FormBuilderBackendConfig, i as FormBuilderBackendHooks, j as FormBuilderHookContext, k as FormBuilderOperationHookContext, l as FormCreateOperationContext, m as FormDeleteOperationContext, o as FormGetForUpdateOperationContext, n as FormGetOperationContext, p as FormListOperationContext, q as FormUpdateOperationContext, r as SubmissionCreateOperationContext, s as SubmissionDeleteOperationContext, t as SubmissionGetOperationContext, v as SubmissionHookContext, b as SubmissionListFormContext, u as SubmissionListOperationContext } from '../../../shared/stack.C3bU9w6L.js';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.cjs';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.CX83YNuS.cjs';
11
+ import '../../../../shared/stack.zch70Loj.cjs';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.mjs';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.Egr3RWhA.mjs';
11
+ import '../../../../shared/stack.Doy2_wgl.mjs';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -8,7 +8,7 @@ import '@btst/stack/context';
8
8
  import '../../permissions.js';
9
9
  import 'zod';
10
10
  import '@btst/stack/plugins/client';
11
- import '../../../../shared/stack.BuxUQqL8.js';
11
+ import '../../../../shared/stack.CGmh-Lpe.js';
12
12
  import '@btst/db';
13
13
  import 'zod/v4/core';
14
14
  import 'better-call';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.CX83YNuS.cjs';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.zch70Loj.cjs';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.v2O65JqF.cjs';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.Egr3RWhA.mjs';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.Doy2_wgl.mjs';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.OYT8WU4n.mjs';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
@@ -1,6 +1,6 @@
1
1
  import * as _btst_stack_plugins_client from '@btst/stack/plugins/client';
2
2
  import { createApiClient } from '@btst/stack/plugins/client';
3
- import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.BuxUQqL8.js';
3
+ import { F as FormsListDiscriminator, S as SubmissionsListDiscriminator, a as FormBuilderApiRouter } from '../../shared/stack.CGmh-Lpe.js';
4
4
  import { P as PaginatedForms, S as SerializedForm, a as SerializedFormSubmission, e as PaginatedFormSubmissions, d as SerializedFormSubmissionWithData } from '../../shared/stack.C3bU9w6L.js';
5
5
  import { StackIdentity } from '@btst/stack/context';
6
6
  import '@btst/stack/plugins/api';
@@ -41,6 +41,20 @@ type SerializedMessage = Omit<Message, "createdAt"> & {
41
41
  createdAt: string;
42
42
  };
43
43
 
44
+ /** Server-owned content loader for the standard readPage tool. */
45
+ interface AiChatPageContentConfig {
46
+ /** Allowed page paths. Validated before resolve; paths are also limited to 16,000 characters. */
47
+ pathSchema: z.ZodType<string, string>;
48
+ /**
49
+ * Load the complete page as JSON-serializable reference material. Enforce
50
+ * publication and access rules here using the request context. Return null
51
+ * when unavailable. BTST never fetches URLs or truncates the returned content.
52
+ */
53
+ resolve: (path: string, context: ChatApiContext<ChatOperationInput>) => unknown | Promise<unknown>;
54
+ /** Optional model-facing description of the supported page types. */
55
+ description?: string;
56
+ }
57
+
44
58
  type AiChatAccess = "authorized" | "public";
45
59
  /** Runtime input for one conversation operation. */
46
60
  declare const ConversationOperationInputSchema: z.ZodObject<{
@@ -208,6 +222,8 @@ interface AiChatBackendConfig {
208
222
  access?: AiChatAccess;
209
223
  systemPrompt?: string;
210
224
  tools?: Record<string, Tool>;
225
+ /** Enable the standard readPage server tool for full page content. Reserves the readPage tool name. */
226
+ pageContent?: AiChatPageContentConfig;
211
227
  enablePageTools?: boolean;
212
228
  clientToolSchemas?: Record<string, Tool>;
213
229
  hooks?: AiChatBackendHooks;
@@ -503,5 +519,5 @@ declare function createAiChatQueryKeys(client: ReturnType<typeof createApiClient
503
519
  }>;
504
520
  type AiChatQueryKeys = ReturnType<typeof createAiChatQueryKeys>;
505
521
 
506
- export { UpdateConversationOperationInputSchema as U, aiChatIdentityKey as d, aiChatResources as e, createAiChatQueryKeys as f, aiChatBackendPlugin as i, AI_CHAT_OPERATION_INVENTORY as n, AI_CHAT_RAW_ESCAPE_HATCH_INVENTORY as o, AiChatOperationError as p, ChatOperationInputSchema as q, ConversationOperationInputSchema as r };
507
- export type { AiChatIdentityPartition as A, ConversationWithMessages as C, Message as M, RenameConversationInput as R, SerializedConversation as S, SerializedMessage as a, CreateConversationInput as b, Conversation as c, AiChatQueryKeys as g, AiChatBackendConfig as h, AiChatApiRouter as j, AiChatAccess as k, AiChatBackendHooks as l, ChatApiContext as m };
522
+ export { UpdateConversationOperationInputSchema as U, aiChatIdentityKey as d, aiChatResources as e, createAiChatQueryKeys as f, aiChatBackendPlugin as i, AI_CHAT_OPERATION_INVENTORY as o, AI_CHAT_RAW_ESCAPE_HATCH_INVENTORY as p, AiChatOperationError as q, ChatOperationInputSchema as r, ConversationOperationInputSchema as s };
523
+ export type { AiChatIdentityPartition as A, ConversationWithMessages as C, Message as M, RenameConversationInput as R, SerializedConversation as S, SerializedMessage as a, CreateConversationInput as b, Conversation as c, AiChatQueryKeys as g, AiChatBackendConfig as h, AiChatApiRouter as j, AiChatPageContentConfig as k, AiChatAccess as l, AiChatBackendHooks as m, ChatApiContext as n };