bunnyquery 1.9.0 → 1.9.4
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.
- package/bunnyquery.css +33 -0
- package/bunnyquery.js +353 -44
- package/dist/engine.cjs +127 -30
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.mts +96 -3
- package/dist/engine.d.ts +96 -3
- package/dist/engine.mjs +127 -31
- package/dist/engine.mjs.map +1 -1
- package/package.json +1 -1
- package/src/engine/host.ts +29 -0
- package/src/engine/indexing_groups.ts +88 -12
- package/src/engine/prompts/chat_system_prompt.ts +20 -1
- package/src/engine/prompts/index.ts +1 -0
- package/src/engine/prompts/indexing_system_prompt.ts +13 -1
- package/src/engine/prompts/indexing_user_message.ts +29 -2
- package/src/engine/requests.ts +57 -6
- package/src/engine/session.ts +36 -3
- package/src/widget.css +33 -0
package/dist/engine.d.mts
CHANGED
|
@@ -279,6 +279,18 @@ type ChatSystemPromptParams = {
|
|
|
279
279
|
* given when the caller says which one this is.
|
|
280
280
|
*/
|
|
281
281
|
client?: 'console' | 'widget';
|
|
282
|
+
/**
|
|
283
|
+
* The access group THIS project's indexer writes its records at, from the
|
|
284
|
+
* project's `default_access_group` setting.
|
|
285
|
+
*
|
|
286
|
+
* The MCP auto-fills an index/tag query that names a table but no group with
|
|
287
|
+
* "authorized", which used to be right because every BunnyQuery record was
|
|
288
|
+
* hardcoded to it. Now a project can index at "public" (so an anonymous
|
|
289
|
+
* visitor can read it) or "private", and on those projects the auto-fill
|
|
290
|
+
* silently searches a group the data is not in and answers "nothing found".
|
|
291
|
+
* Defaults to 'authorized', which is what an unset project still uses.
|
|
292
|
+
*/
|
|
293
|
+
indexAccessGroup?: string;
|
|
282
294
|
};
|
|
283
295
|
declare function buildChatSystemPrompt(params: ChatSystemPromptParams): string;
|
|
284
296
|
|
|
@@ -297,6 +309,13 @@ type IndexingSystemPromptParams = {
|
|
|
297
309
|
serviceName?: string;
|
|
298
310
|
/** Project description. When present, name + description are appended. */
|
|
299
311
|
serviceDescription?: string;
|
|
312
|
+
/**
|
|
313
|
+
* Access group every record written during this run must carry. Chosen by the
|
|
314
|
+
* uploader (project default, or a per-upload prompt) and already applied to
|
|
315
|
+
* the "src::" file record before indexing starts. Defaults to "authorized",
|
|
316
|
+
* which is what every record written before this setting existed used.
|
|
317
|
+
*/
|
|
318
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
300
319
|
};
|
|
301
320
|
declare function buildIndexingSystemPrompt(params: IndexingSystemPromptParams): string;
|
|
302
321
|
|
|
@@ -321,6 +340,18 @@ type IndexingAttachmentInfo = {
|
|
|
321
340
|
size?: number;
|
|
322
341
|
/** Temporary signed URL the agent/MCP fetches to read the file contents. */
|
|
323
342
|
url: string;
|
|
343
|
+
/**
|
|
344
|
+
* Access group every record extracted from this file must be written at.
|
|
345
|
+
*
|
|
346
|
+
* The uploader chooses it (project default, or a per-upload prompt), and the
|
|
347
|
+
* `src::` file record is already created at this group before indexing starts.
|
|
348
|
+
* The rows, chapters and summaries the agent writes have to MATCH it: skapi's
|
|
349
|
+
* access group is part of a record's table key, so a public file whose rows
|
|
350
|
+
* were saved as "authorized" is a file an anonymous visitor can see the name
|
|
351
|
+
* of and none of the contents of. Omitted means "authorized", which is what
|
|
352
|
+
* every record written before this setting existed used.
|
|
353
|
+
*/
|
|
354
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
324
355
|
};
|
|
325
356
|
type BuildIndexingUserMessageOptions = {
|
|
326
357
|
/**
|
|
@@ -343,6 +374,13 @@ type BuildIndexingUserMessageOptions = {
|
|
|
343
374
|
*/
|
|
344
375
|
pagedRead?: boolean;
|
|
345
376
|
};
|
|
377
|
+
/**
|
|
378
|
+
* The access group to write this file's records at. One place, so the user
|
|
379
|
+
* message, the continue message and the system prompt cannot disagree.
|
|
380
|
+
*/
|
|
381
|
+
declare function indexingAccessGroup(attachment: {
|
|
382
|
+
accessGroup?: string;
|
|
383
|
+
}): 'public' | 'authorized' | 'private';
|
|
346
384
|
declare function buildIndexingUserMessage(attachment: IndexingAttachmentInfo, options?: BuildIndexingUserMessageOptions): string;
|
|
347
385
|
/**
|
|
348
386
|
* Token the WORKER substitutes with the 1-based first page of the window it is about to
|
|
@@ -1248,8 +1286,14 @@ type CallClaudeWithMcpParams = {
|
|
|
1248
1286
|
declare const POLL_INTERVAL = 3000;
|
|
1249
1287
|
declare const MAX_CONCURRENT_BG_POLLS = 6;
|
|
1250
1288
|
declare function callClaudeWithMcp({ prompt, messages, service, owner, userId, model, maxTokens, system, mcpServer, extractContent, fileUrls, }: CallClaudeWithMcpParams): Promise<any>;
|
|
1251
|
-
declare function callClaudeWithPublicMcp(prompt: string, service: string, owner: string, messages?: ClaudeMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void
|
|
1252
|
-
|
|
1289
|
+
declare function callClaudeWithPublicMcp(prompt: string, service: string, owner: string, messages?: ClaudeMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void, mcpScope?: {
|
|
1290
|
+
anonymous?: boolean;
|
|
1291
|
+
publicProjectId?: string;
|
|
1292
|
+
}): Promise<any>;
|
|
1293
|
+
declare function callOpenAIWithPublicMcp(prompt: string, service: string, owner: string, messages?: OpenAIMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void, mcpScope?: {
|
|
1294
|
+
anonymous?: boolean;
|
|
1295
|
+
publicProjectId?: string;
|
|
1296
|
+
}): Promise<any>;
|
|
1253
1297
|
type AttachmentSaveInfo = {
|
|
1254
1298
|
platform: 'claude' | 'openai';
|
|
1255
1299
|
model?: string;
|
|
@@ -1276,6 +1320,13 @@ type AttachmentSaveInfo = {
|
|
|
1276
1320
|
mime?: string;
|
|
1277
1321
|
size?: number;
|
|
1278
1322
|
url: string;
|
|
1323
|
+
/**
|
|
1324
|
+
* Access group this file's records are written at (the uploader's choice,
|
|
1325
|
+
* already applied to the "src::" record). Threaded into the indexing
|
|
1326
|
+
* prompts so the agent's own records land in the same group; omitted
|
|
1327
|
+
* means "authorized", the group everything used before the setting existed.
|
|
1328
|
+
*/
|
|
1329
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
1279
1330
|
};
|
|
1280
1331
|
/**
|
|
1281
1332
|
* Content parsed CLIENT-SIDE by an attachment-parser plugin (e.g. an .hwp
|
|
@@ -1453,6 +1504,19 @@ interface ChatIdentity {
|
|
|
1453
1504
|
owner: string;
|
|
1454
1505
|
/** Per-user queue name (falls back to projectId). */
|
|
1455
1506
|
userId: string;
|
|
1507
|
+
/**
|
|
1508
|
+
* This chat is being used by a visitor with NO account, on a project whose
|
|
1509
|
+
* owner allows that.
|
|
1510
|
+
*
|
|
1511
|
+
* It changes where the MCP tools point. A signed-in turn goes to the MCP
|
|
1512
|
+
* server's root endpoint and authenticates with the caller's own token; an
|
|
1513
|
+
* anonymous turn has no token to send, and an EMPTY one is worse than none
|
|
1514
|
+
* (the server cannot identify a project from it, and an empty credential may
|
|
1515
|
+
* be rejected by the provider before the request is even made). So an
|
|
1516
|
+
* anonymous turn goes to the project-scoped endpoint instead, which is
|
|
1517
|
+
* read-only, restricted to public records, and needs no credential at all.
|
|
1518
|
+
*/
|
|
1519
|
+
anonymous?: boolean;
|
|
1456
1520
|
platform: 'claude' | 'openai' | 'none';
|
|
1457
1521
|
model?: string;
|
|
1458
1522
|
serviceName?: string;
|
|
@@ -1676,6 +1740,22 @@ interface ChatHost {
|
|
|
1676
1740
|
mime?: string;
|
|
1677
1741
|
size?: number;
|
|
1678
1742
|
}): Promise<any>;
|
|
1743
|
+
/**
|
|
1744
|
+
* The access group this file's records must be written at: the uploader's
|
|
1745
|
+
* choice, which is the project default or a per-upload answer.
|
|
1746
|
+
*
|
|
1747
|
+
* Asked PER FILE, and asked AFTER ensureFileIndexRecord has run, because the
|
|
1748
|
+
* host is what actually creates the "src::" record and it must report the
|
|
1749
|
+
* group it really used. The engine threads the answer into the indexing
|
|
1750
|
+
* prompts so the agent's own records land in the same group; a record saved
|
|
1751
|
+
* under a different group is in a different table and never comes back with
|
|
1752
|
+
* the rest of the file.
|
|
1753
|
+
*
|
|
1754
|
+
* Optional and may return a promise. A host without it (or one that returns
|
|
1755
|
+
* nothing) gets "authorized", which is what every record used before the
|
|
1756
|
+
* setting existed.
|
|
1757
|
+
*/
|
|
1758
|
+
uploadAccessGroup?(storagePath: string): 'public' | 'authorized' | 'private' | undefined | Promise<'public' | 'authorized' | 'private' | undefined>;
|
|
1679
1759
|
/** Map a relative path to the consumer's db storage key (e.g. uid-prefixed). */
|
|
1680
1760
|
storagePathFor(relPath: string): string;
|
|
1681
1761
|
getMimeType(name: string): string | null;
|
|
@@ -2714,6 +2794,19 @@ declare class ChatSession {
|
|
|
2714
2794
|
*/
|
|
2715
2795
|
resumePolling(reason: string): Promise<void>;
|
|
2716
2796
|
private _newLocalId;
|
|
2797
|
+
/**
|
|
2798
|
+
* The key every per-chat cache hangs off: the restored message cache, the
|
|
2799
|
+
* hydrated-body memo, the live-index key and the per-file storage-path key.
|
|
2800
|
+
*
|
|
2801
|
+
* It carries the IDENTITY as well as the project and platform. A single
|
|
2802
|
+
* browser can hold more than one conversation on one project without a
|
|
2803
|
+
* reload — an anonymous visitor who signs in, or a dashboard user who logs
|
|
2804
|
+
* out and back in as someone else — and with an identity-free key the
|
|
2805
|
+
* previous conversation stayed in the cache and was re-rendered, and written
|
|
2806
|
+
* back, as the new one's. `userId` is the same value the request queue is
|
|
2807
|
+
* named after, so two identities that share a queue share a cache, which is
|
|
2808
|
+
* exactly right.
|
|
2809
|
+
*/
|
|
2717
2810
|
getHistoryCacheKey(): string;
|
|
2718
2811
|
private _hydratedBodies;
|
|
2719
2812
|
private _hydratingItems;
|
|
@@ -3120,4 +3213,4 @@ declare class ChatSession {
|
|
|
3120
3213
|
bumpGate(): void;
|
|
3121
3214
|
}
|
|
3122
3215
|
|
|
3123
|
-
export { type AiAgentPlatform, type AnchorBoxEl, type AnchorRowEl, type AttachmentFailureGroup, type AttachmentParser, type AttachmentSaveInfo, BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, type BgTaskEntry, type BoundedChatOptions, type BuildDisplayListOptions, type BuildIndexingUserMessageOptions, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, type CallClaudeWithMcpParams, type ChatEngineConfig, type ChatGreetingParams, type ChatGreetingParts, type ChatHost, type ChatIdentity, type ChatMessage, ChatSession, type ChatState, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, type DisplayEntry, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, type EncodingClass, type ExtractDirective, type FillHistoryViewportOptions, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, type ImagePreviewContext, type IndexRunPatch, type IndexRunStatus, type IndexingAttachmentInfo, type IndexingFileRef, type IndexingGroup, type IndexingGroupStatus, type IndexingRequestRef, type IndexingSystemPromptParams, type InlineLinkContext, type InlineLinkMarkupOptions, type InlineLinkPart, LINK_LABEL_MAX_DISPLAY_CHARS, LINK_REFRESH_WINDOW_MS, MAX_CONCURRENT_BG_POLLS, MAX_HISTORY_FILL_PAGES, MAX_HISTORY_MESSAGES, MAX_OUTPUT_BY_MODEL, MAX_OUTPUT_TOKENS, MAX_PARSED_CONTENT_CHARS, MCP_NAME, MINT_CACHE_GENERATION, MIN_INPUT_TOKEN_BUDGET, MIN_PER_REQUEST_INPUT_CAP, type MapHistoryOptions, OUTPUT_TOKEN_RESERVE, type OpenAIMessage, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, type ScrollAnchor, type ScrollAnchorOptions, TOOL_AND_RESPONSE_BUFFER, type VisionProfile, XML_EXTS, __resetSplitHistoryState, applyEncodingDeclaration, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatEngineConfig, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, composeUserMessage, configureChatEngine, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, isAuthExpiredError, isBgIndexingQueue, isErrorResponseBody, isHttpUrlLike, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeExt, normalizeTextContent, normalizeTrailingInlineToken, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, readExpiredAttachmentHref, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, shouldRescueInFlightMessage, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, upsertIndexRunRecordSafe, wallClockNow };
|
|
3216
|
+
export { type AiAgentPlatform, type AnchorBoxEl, type AnchorRowEl, type AttachmentFailureGroup, type AttachmentParser, type AttachmentSaveInfo, BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, type BgTaskEntry, type BoundedChatOptions, type BuildDisplayListOptions, type BuildIndexingUserMessageOptions, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, type CallClaudeWithMcpParams, type ChatEngineConfig, type ChatGreetingParams, type ChatGreetingParts, type ChatHost, type ChatIdentity, type ChatMessage, ChatSession, type ChatState, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, type DisplayEntry, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, type EncodingClass, type ExtractDirective, type FillHistoryViewportOptions, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, type ImagePreviewContext, type IndexRunPatch, type IndexRunStatus, type IndexingAttachmentInfo, type IndexingFileRef, type IndexingGroup, type IndexingGroupStatus, type IndexingRequestRef, type IndexingSystemPromptParams, type InlineLinkContext, type InlineLinkMarkupOptions, type InlineLinkPart, LINK_LABEL_MAX_DISPLAY_CHARS, LINK_REFRESH_WINDOW_MS, MAX_CONCURRENT_BG_POLLS, MAX_HISTORY_FILL_PAGES, MAX_HISTORY_MESSAGES, MAX_OUTPUT_BY_MODEL, MAX_OUTPUT_TOKENS, MAX_PARSED_CONTENT_CHARS, MCP_NAME, MINT_CACHE_GENERATION, MIN_INPUT_TOKEN_BUDGET, MIN_PER_REQUEST_INPUT_CAP, type MapHistoryOptions, OUTPUT_TOKEN_RESERVE, type OpenAIMessage, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, type ScrollAnchor, type ScrollAnchorOptions, TOOL_AND_RESPONSE_BUFFER, type VisionProfile, XML_EXTS, __resetSplitHistoryState, applyEncodingDeclaration, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatEngineConfig, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, composeUserMessage, configureChatEngine, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isErrorResponseBody, isHttpUrlLike, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeExt, normalizeTextContent, normalizeTrailingInlineToken, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, readExpiredAttachmentHref, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, shouldRescueInFlightMessage, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, upsertIndexRunRecordSafe, wallClockNow };
|
package/dist/engine.d.ts
CHANGED
|
@@ -279,6 +279,18 @@ type ChatSystemPromptParams = {
|
|
|
279
279
|
* given when the caller says which one this is.
|
|
280
280
|
*/
|
|
281
281
|
client?: 'console' | 'widget';
|
|
282
|
+
/**
|
|
283
|
+
* The access group THIS project's indexer writes its records at, from the
|
|
284
|
+
* project's `default_access_group` setting.
|
|
285
|
+
*
|
|
286
|
+
* The MCP auto-fills an index/tag query that names a table but no group with
|
|
287
|
+
* "authorized", which used to be right because every BunnyQuery record was
|
|
288
|
+
* hardcoded to it. Now a project can index at "public" (so an anonymous
|
|
289
|
+
* visitor can read it) or "private", and on those projects the auto-fill
|
|
290
|
+
* silently searches a group the data is not in and answers "nothing found".
|
|
291
|
+
* Defaults to 'authorized', which is what an unset project still uses.
|
|
292
|
+
*/
|
|
293
|
+
indexAccessGroup?: string;
|
|
282
294
|
};
|
|
283
295
|
declare function buildChatSystemPrompt(params: ChatSystemPromptParams): string;
|
|
284
296
|
|
|
@@ -297,6 +309,13 @@ type IndexingSystemPromptParams = {
|
|
|
297
309
|
serviceName?: string;
|
|
298
310
|
/** Project description. When present, name + description are appended. */
|
|
299
311
|
serviceDescription?: string;
|
|
312
|
+
/**
|
|
313
|
+
* Access group every record written during this run must carry. Chosen by the
|
|
314
|
+
* uploader (project default, or a per-upload prompt) and already applied to
|
|
315
|
+
* the "src::" file record before indexing starts. Defaults to "authorized",
|
|
316
|
+
* which is what every record written before this setting existed used.
|
|
317
|
+
*/
|
|
318
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
300
319
|
};
|
|
301
320
|
declare function buildIndexingSystemPrompt(params: IndexingSystemPromptParams): string;
|
|
302
321
|
|
|
@@ -321,6 +340,18 @@ type IndexingAttachmentInfo = {
|
|
|
321
340
|
size?: number;
|
|
322
341
|
/** Temporary signed URL the agent/MCP fetches to read the file contents. */
|
|
323
342
|
url: string;
|
|
343
|
+
/**
|
|
344
|
+
* Access group every record extracted from this file must be written at.
|
|
345
|
+
*
|
|
346
|
+
* The uploader chooses it (project default, or a per-upload prompt), and the
|
|
347
|
+
* `src::` file record is already created at this group before indexing starts.
|
|
348
|
+
* The rows, chapters and summaries the agent writes have to MATCH it: skapi's
|
|
349
|
+
* access group is part of a record's table key, so a public file whose rows
|
|
350
|
+
* were saved as "authorized" is a file an anonymous visitor can see the name
|
|
351
|
+
* of and none of the contents of. Omitted means "authorized", which is what
|
|
352
|
+
* every record written before this setting existed used.
|
|
353
|
+
*/
|
|
354
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
324
355
|
};
|
|
325
356
|
type BuildIndexingUserMessageOptions = {
|
|
326
357
|
/**
|
|
@@ -343,6 +374,13 @@ type BuildIndexingUserMessageOptions = {
|
|
|
343
374
|
*/
|
|
344
375
|
pagedRead?: boolean;
|
|
345
376
|
};
|
|
377
|
+
/**
|
|
378
|
+
* The access group to write this file's records at. One place, so the user
|
|
379
|
+
* message, the continue message and the system prompt cannot disagree.
|
|
380
|
+
*/
|
|
381
|
+
declare function indexingAccessGroup(attachment: {
|
|
382
|
+
accessGroup?: string;
|
|
383
|
+
}): 'public' | 'authorized' | 'private';
|
|
346
384
|
declare function buildIndexingUserMessage(attachment: IndexingAttachmentInfo, options?: BuildIndexingUserMessageOptions): string;
|
|
347
385
|
/**
|
|
348
386
|
* Token the WORKER substitutes with the 1-based first page of the window it is about to
|
|
@@ -1248,8 +1286,14 @@ type CallClaudeWithMcpParams = {
|
|
|
1248
1286
|
declare const POLL_INTERVAL = 3000;
|
|
1249
1287
|
declare const MAX_CONCURRENT_BG_POLLS = 6;
|
|
1250
1288
|
declare function callClaudeWithMcp({ prompt, messages, service, owner, userId, model, maxTokens, system, mcpServer, extractContent, fileUrls, }: CallClaudeWithMcpParams): Promise<any>;
|
|
1251
|
-
declare function callClaudeWithPublicMcp(prompt: string, service: string, owner: string, messages?: ClaudeMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void
|
|
1252
|
-
|
|
1289
|
+
declare function callClaudeWithPublicMcp(prompt: string, service: string, owner: string, messages?: ClaudeMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void, mcpScope?: {
|
|
1290
|
+
anonymous?: boolean;
|
|
1291
|
+
publicProjectId?: string;
|
|
1292
|
+
}): Promise<any>;
|
|
1293
|
+
declare function callOpenAIWithPublicMcp(prompt: string, service: string, owner: string, messages?: OpenAIMessage[], system?: string, model?: string, userId?: string, extractContent?: ExtractDirective[], fileUrls?: FileUrlDirective[], onResponse?: (res: any) => void, onError?: (err: any) => void, mcpScope?: {
|
|
1294
|
+
anonymous?: boolean;
|
|
1295
|
+
publicProjectId?: string;
|
|
1296
|
+
}): Promise<any>;
|
|
1253
1297
|
type AttachmentSaveInfo = {
|
|
1254
1298
|
platform: 'claude' | 'openai';
|
|
1255
1299
|
model?: string;
|
|
@@ -1276,6 +1320,13 @@ type AttachmentSaveInfo = {
|
|
|
1276
1320
|
mime?: string;
|
|
1277
1321
|
size?: number;
|
|
1278
1322
|
url: string;
|
|
1323
|
+
/**
|
|
1324
|
+
* Access group this file's records are written at (the uploader's choice,
|
|
1325
|
+
* already applied to the "src::" record). Threaded into the indexing
|
|
1326
|
+
* prompts so the agent's own records land in the same group; omitted
|
|
1327
|
+
* means "authorized", the group everything used before the setting existed.
|
|
1328
|
+
*/
|
|
1329
|
+
accessGroup?: 'public' | 'authorized' | 'private';
|
|
1279
1330
|
};
|
|
1280
1331
|
/**
|
|
1281
1332
|
* Content parsed CLIENT-SIDE by an attachment-parser plugin (e.g. an .hwp
|
|
@@ -1453,6 +1504,19 @@ interface ChatIdentity {
|
|
|
1453
1504
|
owner: string;
|
|
1454
1505
|
/** Per-user queue name (falls back to projectId). */
|
|
1455
1506
|
userId: string;
|
|
1507
|
+
/**
|
|
1508
|
+
* This chat is being used by a visitor with NO account, on a project whose
|
|
1509
|
+
* owner allows that.
|
|
1510
|
+
*
|
|
1511
|
+
* It changes where the MCP tools point. A signed-in turn goes to the MCP
|
|
1512
|
+
* server's root endpoint and authenticates with the caller's own token; an
|
|
1513
|
+
* anonymous turn has no token to send, and an EMPTY one is worse than none
|
|
1514
|
+
* (the server cannot identify a project from it, and an empty credential may
|
|
1515
|
+
* be rejected by the provider before the request is even made). So an
|
|
1516
|
+
* anonymous turn goes to the project-scoped endpoint instead, which is
|
|
1517
|
+
* read-only, restricted to public records, and needs no credential at all.
|
|
1518
|
+
*/
|
|
1519
|
+
anonymous?: boolean;
|
|
1456
1520
|
platform: 'claude' | 'openai' | 'none';
|
|
1457
1521
|
model?: string;
|
|
1458
1522
|
serviceName?: string;
|
|
@@ -1676,6 +1740,22 @@ interface ChatHost {
|
|
|
1676
1740
|
mime?: string;
|
|
1677
1741
|
size?: number;
|
|
1678
1742
|
}): Promise<any>;
|
|
1743
|
+
/**
|
|
1744
|
+
* The access group this file's records must be written at: the uploader's
|
|
1745
|
+
* choice, which is the project default or a per-upload answer.
|
|
1746
|
+
*
|
|
1747
|
+
* Asked PER FILE, and asked AFTER ensureFileIndexRecord has run, because the
|
|
1748
|
+
* host is what actually creates the "src::" record and it must report the
|
|
1749
|
+
* group it really used. The engine threads the answer into the indexing
|
|
1750
|
+
* prompts so the agent's own records land in the same group; a record saved
|
|
1751
|
+
* under a different group is in a different table and never comes back with
|
|
1752
|
+
* the rest of the file.
|
|
1753
|
+
*
|
|
1754
|
+
* Optional and may return a promise. A host without it (or one that returns
|
|
1755
|
+
* nothing) gets "authorized", which is what every record used before the
|
|
1756
|
+
* setting existed.
|
|
1757
|
+
*/
|
|
1758
|
+
uploadAccessGroup?(storagePath: string): 'public' | 'authorized' | 'private' | undefined | Promise<'public' | 'authorized' | 'private' | undefined>;
|
|
1679
1759
|
/** Map a relative path to the consumer's db storage key (e.g. uid-prefixed). */
|
|
1680
1760
|
storagePathFor(relPath: string): string;
|
|
1681
1761
|
getMimeType(name: string): string | null;
|
|
@@ -2714,6 +2794,19 @@ declare class ChatSession {
|
|
|
2714
2794
|
*/
|
|
2715
2795
|
resumePolling(reason: string): Promise<void>;
|
|
2716
2796
|
private _newLocalId;
|
|
2797
|
+
/**
|
|
2798
|
+
* The key every per-chat cache hangs off: the restored message cache, the
|
|
2799
|
+
* hydrated-body memo, the live-index key and the per-file storage-path key.
|
|
2800
|
+
*
|
|
2801
|
+
* It carries the IDENTITY as well as the project and platform. A single
|
|
2802
|
+
* browser can hold more than one conversation on one project without a
|
|
2803
|
+
* reload — an anonymous visitor who signs in, or a dashboard user who logs
|
|
2804
|
+
* out and back in as someone else — and with an identity-free key the
|
|
2805
|
+
* previous conversation stayed in the cache and was re-rendered, and written
|
|
2806
|
+
* back, as the new one's. `userId` is the same value the request queue is
|
|
2807
|
+
* named after, so two identities that share a queue share a cache, which is
|
|
2808
|
+
* exactly right.
|
|
2809
|
+
*/
|
|
2717
2810
|
getHistoryCacheKey(): string;
|
|
2718
2811
|
private _hydratedBodies;
|
|
2719
2812
|
private _hydratingItems;
|
|
@@ -3120,4 +3213,4 @@ declare class ChatSession {
|
|
|
3120
3213
|
bumpGate(): void;
|
|
3121
3214
|
}
|
|
3122
3215
|
|
|
3123
|
-
export { type AiAgentPlatform, type AnchorBoxEl, type AnchorRowEl, type AttachmentFailureGroup, type AttachmentParser, type AttachmentSaveInfo, BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, type BgTaskEntry, type BoundedChatOptions, type BuildDisplayListOptions, type BuildIndexingUserMessageOptions, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, type CallClaudeWithMcpParams, type ChatEngineConfig, type ChatGreetingParams, type ChatGreetingParts, type ChatHost, type ChatIdentity, type ChatMessage, ChatSession, type ChatState, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, type DisplayEntry, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, type EncodingClass, type ExtractDirective, type FillHistoryViewportOptions, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, type ImagePreviewContext, type IndexRunPatch, type IndexRunStatus, type IndexingAttachmentInfo, type IndexingFileRef, type IndexingGroup, type IndexingGroupStatus, type IndexingRequestRef, type IndexingSystemPromptParams, type InlineLinkContext, type InlineLinkMarkupOptions, type InlineLinkPart, LINK_LABEL_MAX_DISPLAY_CHARS, LINK_REFRESH_WINDOW_MS, MAX_CONCURRENT_BG_POLLS, MAX_HISTORY_FILL_PAGES, MAX_HISTORY_MESSAGES, MAX_OUTPUT_BY_MODEL, MAX_OUTPUT_TOKENS, MAX_PARSED_CONTENT_CHARS, MCP_NAME, MINT_CACHE_GENERATION, MIN_INPUT_TOKEN_BUDGET, MIN_PER_REQUEST_INPUT_CAP, type MapHistoryOptions, OUTPUT_TOKEN_RESERVE, type OpenAIMessage, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, type ScrollAnchor, type ScrollAnchorOptions, TOOL_AND_RESPONSE_BUFFER, type VisionProfile, XML_EXTS, __resetSplitHistoryState, applyEncodingDeclaration, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatEngineConfig, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, composeUserMessage, configureChatEngine, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, isAuthExpiredError, isBgIndexingQueue, isErrorResponseBody, isHttpUrlLike, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeExt, normalizeTextContent, normalizeTrailingInlineToken, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, readExpiredAttachmentHref, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, shouldRescueInFlightMessage, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, upsertIndexRunRecordSafe, wallClockNow };
|
|
3216
|
+
export { type AiAgentPlatform, type AnchorBoxEl, type AnchorRowEl, type AttachmentFailureGroup, type AttachmentParser, type AttachmentSaveInfo, BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, type BgTaskEntry, type BoundedChatOptions, type BuildDisplayListOptions, type BuildIndexingUserMessageOptions, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, type CallClaudeWithMcpParams, type ChatEngineConfig, type ChatGreetingParams, type ChatGreetingParts, type ChatHost, type ChatIdentity, type ChatMessage, ChatSession, type ChatState, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, type DisplayEntry, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, type EncodingClass, type ExtractDirective, type FillHistoryViewportOptions, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, type ImagePreviewContext, type IndexRunPatch, type IndexRunStatus, type IndexingAttachmentInfo, type IndexingFileRef, type IndexingGroup, type IndexingGroupStatus, type IndexingRequestRef, type IndexingSystemPromptParams, type InlineLinkContext, type InlineLinkMarkupOptions, type InlineLinkPart, LINK_LABEL_MAX_DISPLAY_CHARS, LINK_REFRESH_WINDOW_MS, MAX_CONCURRENT_BG_POLLS, MAX_HISTORY_FILL_PAGES, MAX_HISTORY_MESSAGES, MAX_OUTPUT_BY_MODEL, MAX_OUTPUT_TOKENS, MAX_PARSED_CONTENT_CHARS, MCP_NAME, MINT_CACHE_GENERATION, MIN_INPUT_TOKEN_BUDGET, MIN_PER_REQUEST_INPUT_CAP, type MapHistoryOptions, OUTPUT_TOKEN_RESERVE, type OpenAIMessage, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, type ScrollAnchor, type ScrollAnchorOptions, TOOL_AND_RESPONSE_BUFFER, type VisionProfile, XML_EXTS, __resetSplitHistoryState, applyEncodingDeclaration, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatEngineConfig, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, composeUserMessage, configureChatEngine, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isErrorResponseBody, isHttpUrlLike, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeExt, normalizeTextContent, normalizeTrailingInlineToken, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, readExpiredAttachmentHref, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, shouldRescueInFlightMessage, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, upsertIndexRunRecordSafe, wallClockNow };
|