bunnyquery 1.11.0 → 1.12.1
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/README.md +5 -0
- package/bunnyquery.css +59 -0
- package/bunnyquery.js +260 -6
- package/dist/engine.cjs +243 -5
- package/dist/engine.cjs.map +1 -1
- package/dist/engine.d.mts +79 -1
- package/dist/engine.d.ts +79 -1
- package/dist/engine.mjs +243 -6
- package/dist/engine.mjs.map +1 -1
- package/package.json +1 -1
- package/src/engine/budget.ts +13 -3
- package/src/engine/errors.ts +15 -0
- package/src/engine/history.ts +5 -1
- package/src/engine/host.ts +4 -0
- package/src/engine/index.ts +1 -0
- package/src/engine/indexing_groups.ts +24 -3
- package/src/engine/session.ts +239 -3
- package/styles/chat.css +59 -0
package/dist/engine.d.mts
CHANGED
|
@@ -896,6 +896,16 @@ declare function isCsrStatusEnvelope(res: any): boolean;
|
|
|
896
896
|
*/
|
|
897
897
|
declare function csrEnvelopeError(input: any): any;
|
|
898
898
|
declare function getErrorMessage(input: any): string;
|
|
899
|
+
/**
|
|
900
|
+
* True when the worker has already sent this pass's window again. Its stored
|
|
901
|
+
* error then carries `retried` (the worker's _mark_pass_retried writes it only
|
|
902
|
+
* AFTER the replacement pass was queued, so the flag never promises a retry that
|
|
903
|
+
* does not exist). The failure is real but it is not the file's outcome: the
|
|
904
|
+
* replacement pass is. The file's row must not go red over it, and the bubble is
|
|
905
|
+
* drawn muted rather than as a dead end. Same one-level unwrap as every reader
|
|
906
|
+
* here, so a streamed turn's failure answers the same way as a buffered one.
|
|
907
|
+
*/
|
|
908
|
+
declare function isRetriedFailure(input: any): boolean;
|
|
899
909
|
declare function isErrorResponseBody(response: any): boolean;
|
|
900
910
|
declare function isNonRetryableRequestError(input: any): boolean;
|
|
901
911
|
declare function isAuthExpiredError(input: any): boolean;
|
|
@@ -2325,6 +2335,10 @@ interface ChatMessage {
|
|
|
2325
2335
|
_dimSending?: boolean;
|
|
2326
2336
|
isCancelled?: boolean;
|
|
2327
2337
|
isError?: boolean;
|
|
2338
|
+
/** With isError: the worker has already sent this pass's window again, so the
|
|
2339
|
+
* failure is not the file's outcome. Set from the row's error payload
|
|
2340
|
+
* (`retried`, see errors.ts isRetriedFailure); never set locally. */
|
|
2341
|
+
isRetried?: boolean;
|
|
2328
2342
|
isBackgroundTask?: boolean;
|
|
2329
2343
|
/** Set on background-indexing REQUEST bubbles only (see IndexingFileRef). */
|
|
2330
2344
|
_indexFile?: IndexingFileRef;
|
|
@@ -4372,6 +4386,70 @@ declare class ChatSession {
|
|
|
4372
4386
|
onQueuedSendResponse(_composed: string, response: any, platform: string, serverId?: string, ownerKey?: string): void;
|
|
4373
4387
|
onQueuedSendError(_composed: string, err: any, serverId?: string, ownerKey?: string): void;
|
|
4374
4388
|
cancelQueuedMessage(msg: ChatMessage, idx: number): void;
|
|
4389
|
+
/**
|
|
4390
|
+
* Stop waiting for the reply to the chat turn that is running now, and move on.
|
|
4391
|
+
*
|
|
4392
|
+
* `msg` is the turn's pending ASSISTANT bubble (the dot-trail "Thinking"
|
|
4393
|
+
* placeholder), which is where both views draw the control. A turn's two bubbles
|
|
4394
|
+
* carry the same _serverItemId, so it is also how the request is found.
|
|
4395
|
+
* cancelQueuedMessage is the sibling for a turn still waiting in the queue and
|
|
4396
|
+
* takes the USER bubble; the two differ in what they are handed and in what has
|
|
4397
|
+
* to be unwound afterwards, not in what the server is asked.
|
|
4398
|
+
*
|
|
4399
|
+
* What ends the wait:
|
|
4400
|
+
* 1. csr-cancel marks the running row cancelled. The worker stops relaying and
|
|
4401
|
+
* never stores an answer for it, so the reply cannot turn up later on this
|
|
4402
|
+
* device or another, and history replays the turn as cancelled;
|
|
4403
|
+
* 2. the poll on it is stopped, which settles whichever chain was awaiting it
|
|
4404
|
+
* with a stopped result: dispatchAgentRequest's for an immediate send, the
|
|
4405
|
+
* queued chain for a promoted turn, the history poll after a reload. Each
|
|
4406
|
+
* reads a stopped or cancelled result as "no reply" and releases what it
|
|
4407
|
+
* holds (state.sending, pendingAgentRequests, historyItemPolls), which is
|
|
4408
|
+
* what lets the next send go out immediately instead of queueing;
|
|
4409
|
+
* 3. the bubbles settle at once, without waiting for that chain: the user
|
|
4410
|
+
* bubble takes its cancelled form, the placeholder goes, and the next queued
|
|
4411
|
+
* turn, if there is one, is promoted so its own "Thinking" appears.
|
|
4412
|
+
*
|
|
4413
|
+
* What it does NOT do: the provider call already in flight on the worker runs
|
|
4414
|
+
* to its end (a streamed one stops within about a second). A message sent
|
|
4415
|
+
* behind it on the same queue starts once the worker acks the cancelled row.
|
|
4416
|
+
*
|
|
4417
|
+
* Refused without a server id (the ack has not come back yet; the views disable
|
|
4418
|
+
* the control until it has) and while a cancel is already out. Indexing passes
|
|
4419
|
+
* are not this method's business: their Stop is cancelIndexingGroup, which ends
|
|
4420
|
+
* the file's whole chain.
|
|
4421
|
+
*/
|
|
4422
|
+
cancelPendingReply(msg: ChatMessage, idx: number): void;
|
|
4423
|
+
/** The cancelled form of a request bubble, with everything that keeps it in
|
|
4424
|
+
* place carried over: the file markers that hold an indexing pass in its
|
|
4425
|
+
* collapsed row, the chat it belongs to, its send time and its render key. */
|
|
4426
|
+
private _cancelledCopyOf;
|
|
4427
|
+
/**
|
|
4428
|
+
* Settle a turn as cancelled wherever it lives, and let the queue move on.
|
|
4429
|
+
*
|
|
4430
|
+
* On the chat on screen: every pending placeholder carrying the id goes (a
|
|
4431
|
+
* history refetch can have re-mapped the running turn into a second one), the
|
|
4432
|
+
* request bubble takes its cancelled form, and the next queued turn is promoted
|
|
4433
|
+
* so the conversation does not sit on an "(In queue)" bubble with nothing
|
|
4434
|
+
* running. For a chat that is NOT on screen (the user moved on while the turn
|
|
4435
|
+
* ran, and it was cancelled from elsewhere) the same edit is made in that chat's
|
|
4436
|
+
* history cache, which is what the next visit renders.
|
|
4437
|
+
*
|
|
4438
|
+
* Idempotent on purpose: a cancel this client made settles the bubbles at once,
|
|
4439
|
+
* and the chain that was awaiting the poll settles again a moment later when the
|
|
4440
|
+
* stop resolves it. The second pass finds nothing to do. Deliberately NOT
|
|
4441
|
+
* _removeStrayPendingAssistants: by then the placeholder on screen is the freshly
|
|
4442
|
+
* promoted turn's, whose user bubble is pending, and the sweep would take it.
|
|
4443
|
+
*/
|
|
4444
|
+
private _settleCancelledTurn;
|
|
4445
|
+
/**
|
|
4446
|
+
* _settleCancelledTurn for a chat that is not on screen: the same edit, made in
|
|
4447
|
+
* its history cache. Matched by id where the cached bubbles carry one; an
|
|
4448
|
+
* off-chat send caches its pair before the ack (see dispatchComposedMessage), so
|
|
4449
|
+
* the fallback is positional, exactly as _applyReplyToCache's is: the trailing
|
|
4450
|
+
* pending placeholder, and the last request bubble still marked in flight.
|
|
4451
|
+
*/
|
|
4452
|
+
private _applyCancelToCache;
|
|
4375
4453
|
/**
|
|
4376
4454
|
* Stop indexing a file, from its collapsed row — every pass at once, not just
|
|
4377
4455
|
* the bubble the user happens to see.
|
|
@@ -4783,4 +4861,4 @@ declare function patchProjectSettings(service: string, patch: ProjectSettingsDat
|
|
|
4783
4861
|
*/
|
|
4784
4862
|
declare function clearProjectSettings(service?: string): void;
|
|
4785
4863
|
|
|
4786
|
-
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, CHAT_GREETING_MAX_LENGTH, 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 ChatStreamWiring, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, 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, INDEXING_MAX_OUTPUT_TOKENS, 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, type LiveStreamUpdate, 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, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, type ProjectAccessSetting, type ProjectSettingsData, type ProjectSettingsReader, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, STREAM_POLL_INTERVAL, type ScrollAnchor, type ScrollAnchorOptions, type SseChunk, type SseParser, type SseProvider, type SseSnapshot, type SseToolCall, type StreamDispatchContext, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, type UploadAccessGroup, type VisionProfile, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
|
4864
|
+
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, CHAT_GREETING_MAX_LENGTH, 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 ChatStreamWiring, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, 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, INDEXING_MAX_OUTPUT_TOKENS, 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, type LiveStreamUpdate, 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, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, type ProjectAccessSetting, type ProjectSettingsData, type ProjectSettingsReader, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, STREAM_POLL_INTERVAL, type ScrollAnchor, type ScrollAnchorOptions, type SseChunk, type SseParser, type SseProvider, type SseSnapshot, type SseToolCall, type StreamDispatchContext, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, type UploadAccessGroup, type VisionProfile, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isRetriedFailure, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
package/dist/engine.d.ts
CHANGED
|
@@ -896,6 +896,16 @@ declare function isCsrStatusEnvelope(res: any): boolean;
|
|
|
896
896
|
*/
|
|
897
897
|
declare function csrEnvelopeError(input: any): any;
|
|
898
898
|
declare function getErrorMessage(input: any): string;
|
|
899
|
+
/**
|
|
900
|
+
* True when the worker has already sent this pass's window again. Its stored
|
|
901
|
+
* error then carries `retried` (the worker's _mark_pass_retried writes it only
|
|
902
|
+
* AFTER the replacement pass was queued, so the flag never promises a retry that
|
|
903
|
+
* does not exist). The failure is real but it is not the file's outcome: the
|
|
904
|
+
* replacement pass is. The file's row must not go red over it, and the bubble is
|
|
905
|
+
* drawn muted rather than as a dead end. Same one-level unwrap as every reader
|
|
906
|
+
* here, so a streamed turn's failure answers the same way as a buffered one.
|
|
907
|
+
*/
|
|
908
|
+
declare function isRetriedFailure(input: any): boolean;
|
|
899
909
|
declare function isErrorResponseBody(response: any): boolean;
|
|
900
910
|
declare function isNonRetryableRequestError(input: any): boolean;
|
|
901
911
|
declare function isAuthExpiredError(input: any): boolean;
|
|
@@ -2325,6 +2335,10 @@ interface ChatMessage {
|
|
|
2325
2335
|
_dimSending?: boolean;
|
|
2326
2336
|
isCancelled?: boolean;
|
|
2327
2337
|
isError?: boolean;
|
|
2338
|
+
/** With isError: the worker has already sent this pass's window again, so the
|
|
2339
|
+
* failure is not the file's outcome. Set from the row's error payload
|
|
2340
|
+
* (`retried`, see errors.ts isRetriedFailure); never set locally. */
|
|
2341
|
+
isRetried?: boolean;
|
|
2328
2342
|
isBackgroundTask?: boolean;
|
|
2329
2343
|
/** Set on background-indexing REQUEST bubbles only (see IndexingFileRef). */
|
|
2330
2344
|
_indexFile?: IndexingFileRef;
|
|
@@ -4372,6 +4386,70 @@ declare class ChatSession {
|
|
|
4372
4386
|
onQueuedSendResponse(_composed: string, response: any, platform: string, serverId?: string, ownerKey?: string): void;
|
|
4373
4387
|
onQueuedSendError(_composed: string, err: any, serverId?: string, ownerKey?: string): void;
|
|
4374
4388
|
cancelQueuedMessage(msg: ChatMessage, idx: number): void;
|
|
4389
|
+
/**
|
|
4390
|
+
* Stop waiting for the reply to the chat turn that is running now, and move on.
|
|
4391
|
+
*
|
|
4392
|
+
* `msg` is the turn's pending ASSISTANT bubble (the dot-trail "Thinking"
|
|
4393
|
+
* placeholder), which is where both views draw the control. A turn's two bubbles
|
|
4394
|
+
* carry the same _serverItemId, so it is also how the request is found.
|
|
4395
|
+
* cancelQueuedMessage is the sibling for a turn still waiting in the queue and
|
|
4396
|
+
* takes the USER bubble; the two differ in what they are handed and in what has
|
|
4397
|
+
* to be unwound afterwards, not in what the server is asked.
|
|
4398
|
+
*
|
|
4399
|
+
* What ends the wait:
|
|
4400
|
+
* 1. csr-cancel marks the running row cancelled. The worker stops relaying and
|
|
4401
|
+
* never stores an answer for it, so the reply cannot turn up later on this
|
|
4402
|
+
* device or another, and history replays the turn as cancelled;
|
|
4403
|
+
* 2. the poll on it is stopped, which settles whichever chain was awaiting it
|
|
4404
|
+
* with a stopped result: dispatchAgentRequest's for an immediate send, the
|
|
4405
|
+
* queued chain for a promoted turn, the history poll after a reload. Each
|
|
4406
|
+
* reads a stopped or cancelled result as "no reply" and releases what it
|
|
4407
|
+
* holds (state.sending, pendingAgentRequests, historyItemPolls), which is
|
|
4408
|
+
* what lets the next send go out immediately instead of queueing;
|
|
4409
|
+
* 3. the bubbles settle at once, without waiting for that chain: the user
|
|
4410
|
+
* bubble takes its cancelled form, the placeholder goes, and the next queued
|
|
4411
|
+
* turn, if there is one, is promoted so its own "Thinking" appears.
|
|
4412
|
+
*
|
|
4413
|
+
* What it does NOT do: the provider call already in flight on the worker runs
|
|
4414
|
+
* to its end (a streamed one stops within about a second). A message sent
|
|
4415
|
+
* behind it on the same queue starts once the worker acks the cancelled row.
|
|
4416
|
+
*
|
|
4417
|
+
* Refused without a server id (the ack has not come back yet; the views disable
|
|
4418
|
+
* the control until it has) and while a cancel is already out. Indexing passes
|
|
4419
|
+
* are not this method's business: their Stop is cancelIndexingGroup, which ends
|
|
4420
|
+
* the file's whole chain.
|
|
4421
|
+
*/
|
|
4422
|
+
cancelPendingReply(msg: ChatMessage, idx: number): void;
|
|
4423
|
+
/** The cancelled form of a request bubble, with everything that keeps it in
|
|
4424
|
+
* place carried over: the file markers that hold an indexing pass in its
|
|
4425
|
+
* collapsed row, the chat it belongs to, its send time and its render key. */
|
|
4426
|
+
private _cancelledCopyOf;
|
|
4427
|
+
/**
|
|
4428
|
+
* Settle a turn as cancelled wherever it lives, and let the queue move on.
|
|
4429
|
+
*
|
|
4430
|
+
* On the chat on screen: every pending placeholder carrying the id goes (a
|
|
4431
|
+
* history refetch can have re-mapped the running turn into a second one), the
|
|
4432
|
+
* request bubble takes its cancelled form, and the next queued turn is promoted
|
|
4433
|
+
* so the conversation does not sit on an "(In queue)" bubble with nothing
|
|
4434
|
+
* running. For a chat that is NOT on screen (the user moved on while the turn
|
|
4435
|
+
* ran, and it was cancelled from elsewhere) the same edit is made in that chat's
|
|
4436
|
+
* history cache, which is what the next visit renders.
|
|
4437
|
+
*
|
|
4438
|
+
* Idempotent on purpose: a cancel this client made settles the bubbles at once,
|
|
4439
|
+
* and the chain that was awaiting the poll settles again a moment later when the
|
|
4440
|
+
* stop resolves it. The second pass finds nothing to do. Deliberately NOT
|
|
4441
|
+
* _removeStrayPendingAssistants: by then the placeholder on screen is the freshly
|
|
4442
|
+
* promoted turn's, whose user bubble is pending, and the sweep would take it.
|
|
4443
|
+
*/
|
|
4444
|
+
private _settleCancelledTurn;
|
|
4445
|
+
/**
|
|
4446
|
+
* _settleCancelledTurn for a chat that is not on screen: the same edit, made in
|
|
4447
|
+
* its history cache. Matched by id where the cached bubbles carry one; an
|
|
4448
|
+
* off-chat send caches its pair before the ack (see dispatchComposedMessage), so
|
|
4449
|
+
* the fallback is positional, exactly as _applyReplyToCache's is: the trailing
|
|
4450
|
+
* pending placeholder, and the last request bubble still marked in flight.
|
|
4451
|
+
*/
|
|
4452
|
+
private _applyCancelToCache;
|
|
4375
4453
|
/**
|
|
4376
4454
|
* Stop indexing a file, from its collapsed row — every pass at once, not just
|
|
4377
4455
|
* the bubble the user happens to see.
|
|
@@ -4783,4 +4861,4 @@ declare function patchProjectSettings(service: string, patch: ProjectSettingsDat
|
|
|
4783
4861
|
*/
|
|
4784
4862
|
declare function clearProjectSettings(service?: string): void;
|
|
4785
4863
|
|
|
4786
|
-
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, CHAT_GREETING_MAX_LENGTH, 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 ChatStreamWiring, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, 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, INDEXING_MAX_OUTPUT_TOKENS, 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, type LiveStreamUpdate, 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, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, type ProjectAccessSetting, type ProjectSettingsData, type ProjectSettingsReader, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, STREAM_POLL_INTERVAL, type ScrollAnchor, type ScrollAnchorOptions, type SseChunk, type SseParser, type SseProvider, type SseSnapshot, type SseToolCall, type StreamDispatchContext, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, type UploadAccessGroup, type VisionProfile, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
|
4864
|
+
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, CHAT_GREETING_MAX_LENGTH, 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 ChatStreamWiring, type ChatSystemPromptParams, type ClaudeMcpServerRequest, type ClaudeMcpToolConfig, type ClaudeMessage, type ClaudeRole, type ComposedUserMessage, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, 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, INDEXING_MAX_OUTPUT_TOKENS, 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, type LiveStreamUpdate, 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, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, type ParsedAiAgent, type PinnedDispatchContext, type PreviewImageEl, type ProjectAccessSetting, type ProjectSettingsData, type ProjectSettingsReader, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, type RenderableInlineLink, type RescueDecisionContext, type RowAnchor, type RunStubInfo, STREAM_POLL_INTERVAL, type ScrollAnchor, type ScrollAnchorOptions, type SseChunk, type SseParser, type SseProvider, type SseSnapshot, type SseToolCall, type StreamDispatchContext, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, type UploadAccessGroup, type VisionProfile, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isRetriedFailure, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
package/dist/engine.mjs
CHANGED
|
@@ -625,6 +625,11 @@ function getErrorMessage(input) {
|
|
|
625
625
|
}
|
|
626
626
|
return "Something went wrong.";
|
|
627
627
|
}
|
|
628
|
+
function isRetriedFailure(input) {
|
|
629
|
+
var envErr = csrEnvelopeError(input);
|
|
630
|
+
if (envErr !== void 0) input = envErr;
|
|
631
|
+
return !!input && typeof input === "object" && input.retried === true;
|
|
632
|
+
}
|
|
628
633
|
function isErrorResponseBody(response) {
|
|
629
634
|
var envErr = csrEnvelopeError(response);
|
|
630
635
|
if (envErr !== void 0) response = envErr;
|
|
@@ -1068,6 +1073,9 @@ function truncateLabelForDisplay(label) {
|
|
|
1068
1073
|
var CONTEXT_WINDOW_DEFAULT = { claude: 2e5, openai: 128e3 };
|
|
1069
1074
|
var CONTEXT_WINDOW_BY_MODEL = {
|
|
1070
1075
|
// claude, exact ids
|
|
1076
|
+
"claude-fable-5-1": 1e6,
|
|
1077
|
+
"claude-opus-5-5": 1e6,
|
|
1078
|
+
"claude-sonnet-5-5": 1e6,
|
|
1071
1079
|
"claude-fable-5": 1e6,
|
|
1072
1080
|
"claude-opus-5": 1e6,
|
|
1073
1081
|
"claude-opus-4-8": 1e6,
|
|
@@ -1081,6 +1089,9 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1081
1089
|
"claude-haiku-4-5": 2e5,
|
|
1082
1090
|
"claude-3-5-sonnet": 2e5,
|
|
1083
1091
|
// openai, exact ids
|
|
1092
|
+
"gpt-6-astra": 105e4,
|
|
1093
|
+
"gpt-6-sol": 105e4,
|
|
1094
|
+
"gpt-6-luna": 105e4,
|
|
1084
1095
|
"gpt-5.6-sol": 105e4,
|
|
1085
1096
|
"gpt-5.6-terra": 105e4,
|
|
1086
1097
|
"gpt-5.6-luna": 105e4,
|
|
@@ -1097,11 +1108,15 @@ var CONTEXT_WINDOW_BY_MODEL = {
|
|
|
1097
1108
|
"claude-opus": 1e6,
|
|
1098
1109
|
"claude-sonnet": 1e6,
|
|
1099
1110
|
"claude-haiku": 2e5,
|
|
1111
|
+
"gpt-6": 105e4,
|
|
1100
1112
|
"gpt-5.6": 105e4,
|
|
1101
1113
|
"gpt-5": 128e3
|
|
1102
1114
|
};
|
|
1103
1115
|
var MAX_OUTPUT_BY_MODEL = {
|
|
1104
1116
|
// claude
|
|
1117
|
+
"claude-fable-5-1": 128e3,
|
|
1118
|
+
"claude-opus-5-5": 128e3,
|
|
1119
|
+
"claude-sonnet-5-5": 128e3,
|
|
1105
1120
|
"claude-fable-5": 128e3,
|
|
1106
1121
|
"claude-opus-5": 128e3,
|
|
1107
1122
|
"claude-opus-4-8": 128e3,
|
|
@@ -1110,6 +1125,9 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1110
1125
|
"claude-haiku-4-5": 64e3,
|
|
1111
1126
|
"claude-3-5-sonnet": 8e3,
|
|
1112
1127
|
// openai
|
|
1128
|
+
"gpt-6-astra": 128e3,
|
|
1129
|
+
"gpt-6-sol": 128e3,
|
|
1130
|
+
"gpt-6-luna": 128e3,
|
|
1113
1131
|
"gpt-5.6-sol": 128e3,
|
|
1114
1132
|
"gpt-5.6-terra": 128e3,
|
|
1115
1133
|
"gpt-5.6-luna": 128e3,
|
|
@@ -1126,6 +1144,7 @@ var MAX_OUTPUT_BY_MODEL = {
|
|
|
1126
1144
|
"claude-opus": 128e3,
|
|
1127
1145
|
"claude-sonnet": 64e3,
|
|
1128
1146
|
"claude-haiku": 64e3,
|
|
1147
|
+
"gpt-6": 128e3,
|
|
1129
1148
|
"gpt-5.6": 128e3,
|
|
1130
1149
|
"gpt-5": 128e3
|
|
1131
1150
|
};
|
|
@@ -3282,6 +3301,7 @@ function mapHistoryListToMessages(list, platform, opts) {
|
|
|
3282
3301
|
mapped.push(ph);
|
|
3283
3302
|
} else if (isQueued) ; else if (isErrorResponse) {
|
|
3284
3303
|
var em = { role: "assistant", content: getErrorMessage(response), isError: true };
|
|
3304
|
+
if (isRetriedFailure(response)) em.isRetried = true;
|
|
3285
3305
|
if (item._fromBgChain) em._fromBgChain = true;
|
|
3286
3306
|
if (item._isBgTask) em.isBackgroundTask = true;
|
|
3287
3307
|
if (serverItemId !== void 0) em._serverItemId = serverItemId;
|
|
@@ -4310,7 +4330,9 @@ var ChatSession = class {
|
|
|
4310
4330
|
timers = [];
|
|
4311
4331
|
};
|
|
4312
4332
|
var stopBase = base && typeof base.stop === "function" ? base.stop.bind(base) : null;
|
|
4333
|
+
var resolveRaced = null;
|
|
4313
4334
|
var raced = new Promise(function(resolve, reject) {
|
|
4335
|
+
resolveRaced = resolve;
|
|
4314
4336
|
base.then(function(res) {
|
|
4315
4337
|
if (settled) return;
|
|
4316
4338
|
settled = true;
|
|
@@ -4351,9 +4373,16 @@ var ChatSession = class {
|
|
|
4351
4373
|
});
|
|
4352
4374
|
});
|
|
4353
4375
|
raced.stop = function() {
|
|
4376
|
+
if (settled) return;
|
|
4354
4377
|
settled = true;
|
|
4355
4378
|
clearProbes();
|
|
4356
|
-
if (stopBase)
|
|
4379
|
+
if (stopBase) {
|
|
4380
|
+
try {
|
|
4381
|
+
stopBase();
|
|
4382
|
+
} catch (e) {
|
|
4383
|
+
}
|
|
4384
|
+
}
|
|
4385
|
+
if (resolveRaced) resolveRaced({ id: itemId, status: "stopped" });
|
|
4357
4386
|
};
|
|
4358
4387
|
return raced;
|
|
4359
4388
|
}
|
|
@@ -5366,6 +5395,7 @@ var ChatSession = class {
|
|
|
5366
5395
|
}
|
|
5367
5396
|
return response;
|
|
5368
5397
|
}).then(function(response) {
|
|
5398
|
+
if (isPollStopped(response) || self._isCancelledPollResult(response)) return { content: "", isError: false, cancelled: true };
|
|
5369
5399
|
if (isErrorResponseBody(response)) return { content: getErrorMessage(response), isError: true };
|
|
5370
5400
|
var answer = params.aiPlatform === "openai" ? extractOpenAIText(response) : extractClaudeText(response);
|
|
5371
5401
|
answer = (answer || "").trim();
|
|
@@ -5375,6 +5405,10 @@ var ChatSession = class {
|
|
|
5375
5405
|
}).then(function(result) {
|
|
5376
5406
|
delete self.pendingAgentRequests[params.key];
|
|
5377
5407
|
if (dispatchItemId) self.historyItemPolls.delete(dispatchItemId);
|
|
5408
|
+
if (result.cancelled) {
|
|
5409
|
+
if (dispatchItemId) self._settleCancelledTurn(dispatchItemId, params.key);
|
|
5410
|
+
return result;
|
|
5411
|
+
}
|
|
5378
5412
|
var reply = { role: "assistant", content: result.content, isError: result.isError };
|
|
5379
5413
|
if (dispatchItemId) reply._serverItemId = dispatchItemId;
|
|
5380
5414
|
self._applyReplyToCache(params.key, reply, dispatchItemId);
|
|
@@ -5853,8 +5887,9 @@ var ChatSession = class {
|
|
|
5853
5887
|
}
|
|
5854
5888
|
});
|
|
5855
5889
|
Promise.resolve(run).catch(function() {
|
|
5856
|
-
}).then(function() {
|
|
5890
|
+
}).then(function(result) {
|
|
5857
5891
|
self.state.sending = false;
|
|
5892
|
+
if (result && result.cancelled) return;
|
|
5858
5893
|
if (!(self.host.isViewMounted() && self.getHistoryCacheKey() === key)) return;
|
|
5859
5894
|
return Promise.resolve(self.typewriteLatestReply(key)).then(function() {
|
|
5860
5895
|
self.host.scrollToBottomIfSticky(true);
|
|
@@ -6033,6 +6068,10 @@ var ChatSession = class {
|
|
|
6033
6068
|
}
|
|
6034
6069
|
onQueuedSendResponse(_composed, response, platform, serverId, ownerKey) {
|
|
6035
6070
|
if (serverId) this.historyItemPolls.delete(serverId);
|
|
6071
|
+
if (this._isCancelledPollResult(response)) {
|
|
6072
|
+
if (serverId) this._settleCancelledTurn(serverId, ownerKey);
|
|
6073
|
+
return;
|
|
6074
|
+
}
|
|
6036
6075
|
if (ownerKey && this.getHistoryCacheKey() !== ownerKey) {
|
|
6037
6076
|
var offReply = isErrorResponseBody(response) ? { role: "assistant", content: getErrorMessage(response), isError: true } : { role: "assistant", content: ((platform === "openai" ? extractOpenAIText(response) : extractClaudeText(response)) || "").trim() || "No text response received from AI provider." };
|
|
6038
6077
|
this._applyReplyToCache(ownerKey, offReply, serverId);
|
|
@@ -6232,6 +6271,191 @@ var ChatSession = class {
|
|
|
6232
6271
|
}
|
|
6233
6272
|
});
|
|
6234
6273
|
}
|
|
6274
|
+
/**
|
|
6275
|
+
* Stop waiting for the reply to the chat turn that is running now, and move on.
|
|
6276
|
+
*
|
|
6277
|
+
* `msg` is the turn's pending ASSISTANT bubble (the dot-trail "Thinking"
|
|
6278
|
+
* placeholder), which is where both views draw the control. A turn's two bubbles
|
|
6279
|
+
* carry the same _serverItemId, so it is also how the request is found.
|
|
6280
|
+
* cancelQueuedMessage is the sibling for a turn still waiting in the queue and
|
|
6281
|
+
* takes the USER bubble; the two differ in what they are handed and in what has
|
|
6282
|
+
* to be unwound afterwards, not in what the server is asked.
|
|
6283
|
+
*
|
|
6284
|
+
* What ends the wait:
|
|
6285
|
+
* 1. csr-cancel marks the running row cancelled. The worker stops relaying and
|
|
6286
|
+
* never stores an answer for it, so the reply cannot turn up later on this
|
|
6287
|
+
* device or another, and history replays the turn as cancelled;
|
|
6288
|
+
* 2. the poll on it is stopped, which settles whichever chain was awaiting it
|
|
6289
|
+
* with a stopped result: dispatchAgentRequest's for an immediate send, the
|
|
6290
|
+
* queued chain for a promoted turn, the history poll after a reload. Each
|
|
6291
|
+
* reads a stopped or cancelled result as "no reply" and releases what it
|
|
6292
|
+
* holds (state.sending, pendingAgentRequests, historyItemPolls), which is
|
|
6293
|
+
* what lets the next send go out immediately instead of queueing;
|
|
6294
|
+
* 3. the bubbles settle at once, without waiting for that chain: the user
|
|
6295
|
+
* bubble takes its cancelled form, the placeholder goes, and the next queued
|
|
6296
|
+
* turn, if there is one, is promoted so its own "Thinking" appears.
|
|
6297
|
+
*
|
|
6298
|
+
* What it does NOT do: the provider call already in flight on the worker runs
|
|
6299
|
+
* to its end (a streamed one stops within about a second). A message sent
|
|
6300
|
+
* behind it on the same queue starts once the worker acks the cancelled row.
|
|
6301
|
+
*
|
|
6302
|
+
* Refused without a server id (the ack has not come back yet; the views disable
|
|
6303
|
+
* the control until it has) and while a cancel is already out. Indexing passes
|
|
6304
|
+
* are not this method's business: their Stop is cancelIndexingGroup, which ends
|
|
6305
|
+
* the file's whole chain.
|
|
6306
|
+
*/
|
|
6307
|
+
cancelPendingReply(msg, idx) {
|
|
6308
|
+
var self = this;
|
|
6309
|
+
var id = this.host.getIdentity();
|
|
6310
|
+
var serverId = msg._serverItemId;
|
|
6311
|
+
if (!serverId || msg._cancelling) return;
|
|
6312
|
+
if (msg.role !== "assistant" || !msg.isPending || msg.isBackgroundTask) return;
|
|
6313
|
+
var platform = id.platform;
|
|
6314
|
+
if (platform !== "claude" && platform !== "openai") return;
|
|
6315
|
+
var url = platform === "claude" ? ANTHROPIC_MESSAGES_API_URL : OPENAI_RESPONSES_API_URL;
|
|
6316
|
+
var queueBase = id.userId || id.projectId;
|
|
6317
|
+
var queue = msg._useBgQueue ? bgIndexingQueueName(queueBase) : queueBase;
|
|
6318
|
+
var findPlaceholder = function() {
|
|
6319
|
+
return self.state.messages.findIndex(function(m) {
|
|
6320
|
+
return m._serverItemId === serverId && m.role === "assistant" && !!m.isPending;
|
|
6321
|
+
});
|
|
6322
|
+
};
|
|
6323
|
+
var at = this.state.messages[idx] && this.state.messages[idx]._serverItemId === serverId && this.state.messages[idx].role === "assistant" ? idx : findPlaceholder();
|
|
6324
|
+
if (at !== -1) {
|
|
6325
|
+
this.state.messages[at] = Object.assign({}, this.state.messages[at], { _cancelling: true, _cancelError: void 0 });
|
|
6326
|
+
}
|
|
6327
|
+
this.host.notify();
|
|
6328
|
+
var unmark = function(errMsg) {
|
|
6329
|
+
var ci = findPlaceholder();
|
|
6330
|
+
if (ci === -1) return;
|
|
6331
|
+
self.state.messages[ci] = Object.assign({}, self.state.messages[ci], { _cancelling: false, _cancelError: errMsg });
|
|
6332
|
+
self.host.notify();
|
|
6333
|
+
};
|
|
6334
|
+
Promise.resolve(this.host.cancelRequest({
|
|
6335
|
+
url,
|
|
6336
|
+
method: "POST",
|
|
6337
|
+
id: serverId,
|
|
6338
|
+
queue,
|
|
6339
|
+
service: id.projectId,
|
|
6340
|
+
owner: id.owner
|
|
6341
|
+
})).then(function(result) {
|
|
6342
|
+
if (result && result.removed) {
|
|
6343
|
+
self._stopPoll(serverId);
|
|
6344
|
+
self._settleCancelledTurn(serverId);
|
|
6345
|
+
return;
|
|
6346
|
+
}
|
|
6347
|
+
unmark(void 0);
|
|
6348
|
+
}).catch(function(err) {
|
|
6349
|
+
unmark(err && typeof err.message === "string" && err.message ? err.message : "Could not stop this request.");
|
|
6350
|
+
});
|
|
6351
|
+
}
|
|
6352
|
+
/** The cancelled form of a request bubble, with everything that keeps it in
|
|
6353
|
+
* place carried over: the file markers that hold an indexing pass in its
|
|
6354
|
+
* collapsed row, the chat it belongs to, its send time and its render key. */
|
|
6355
|
+
_cancelledCopyOf(m, itemId) {
|
|
6356
|
+
var cancelled = { role: "user", content: m.content, isCancelled: true };
|
|
6357
|
+
if (itemId !== void 0) cancelled._serverItemId = itemId;
|
|
6358
|
+
else if (m._serverItemId !== void 0) cancelled._serverItemId = m._serverItemId;
|
|
6359
|
+
if (m.isBackgroundTask) cancelled.isBackgroundTask = true;
|
|
6360
|
+
if (m._indexFile) cancelled._indexFile = m._indexFile;
|
|
6361
|
+
if (m._useBgQueue) cancelled._useBgQueue = true;
|
|
6362
|
+
if (m._ownerKey !== void 0) cancelled._ownerKey = m._ownerKey;
|
|
6363
|
+
if (m._ts !== void 0) cancelled._ts = m._ts;
|
|
6364
|
+
if (m._localId !== void 0) cancelled._localId = m._localId;
|
|
6365
|
+
return cancelled;
|
|
6366
|
+
}
|
|
6367
|
+
/**
|
|
6368
|
+
* Settle a turn as cancelled wherever it lives, and let the queue move on.
|
|
6369
|
+
*
|
|
6370
|
+
* On the chat on screen: every pending placeholder carrying the id goes (a
|
|
6371
|
+
* history refetch can have re-mapped the running turn into a second one), the
|
|
6372
|
+
* request bubble takes its cancelled form, and the next queued turn is promoted
|
|
6373
|
+
* so the conversation does not sit on an "(In queue)" bubble with nothing
|
|
6374
|
+
* running. For a chat that is NOT on screen (the user moved on while the turn
|
|
6375
|
+
* ran, and it was cancelled from elsewhere) the same edit is made in that chat's
|
|
6376
|
+
* history cache, which is what the next visit renders.
|
|
6377
|
+
*
|
|
6378
|
+
* Idempotent on purpose: a cancel this client made settles the bubbles at once,
|
|
6379
|
+
* and the chain that was awaiting the poll settles again a moment later when the
|
|
6380
|
+
* stop resolves it. The second pass finds nothing to do. Deliberately NOT
|
|
6381
|
+
* _removeStrayPendingAssistants: by then the placeholder on screen is the freshly
|
|
6382
|
+
* promoted turn's, whose user bubble is pending, and the sweep would take it.
|
|
6383
|
+
*/
|
|
6384
|
+
_settleCancelledTurn(itemId, ownerKey) {
|
|
6385
|
+
if (!itemId) return;
|
|
6386
|
+
if (ownerKey && this.getHistoryCacheKey() !== ownerKey) {
|
|
6387
|
+
this._applyCancelToCache(ownerKey, itemId);
|
|
6388
|
+
return;
|
|
6389
|
+
}
|
|
6390
|
+
var changed = false, wasBg = false;
|
|
6391
|
+
for (var i = this.state.messages.length - 1; i >= 0; i--) {
|
|
6392
|
+
var m = this.state.messages[i];
|
|
6393
|
+
if (!m || m._serverItemId !== itemId) continue;
|
|
6394
|
+
if (m.role === "assistant" && m.isPending) {
|
|
6395
|
+
this.state.messages.splice(i, 1);
|
|
6396
|
+
changed = true;
|
|
6397
|
+
continue;
|
|
6398
|
+
}
|
|
6399
|
+
if (m.role === "user" && !m.isCancelled) {
|
|
6400
|
+
if (m.isBackgroundTask) wasBg = true;
|
|
6401
|
+
this.state.messages[i] = this._cancelledCopyOf(m, itemId);
|
|
6402
|
+
changed = true;
|
|
6403
|
+
}
|
|
6404
|
+
}
|
|
6405
|
+
this.cancelledServerIds.delete(itemId);
|
|
6406
|
+
if (!changed) return;
|
|
6407
|
+
if (wasBg) this.promoteNextBgQueuedToRunning();
|
|
6408
|
+
else this.promoteNextQueuedToRunning();
|
|
6409
|
+
this.updateHistoryCache();
|
|
6410
|
+
this.host.notify();
|
|
6411
|
+
}
|
|
6412
|
+
/**
|
|
6413
|
+
* _settleCancelledTurn for a chat that is not on screen: the same edit, made in
|
|
6414
|
+
* its history cache. Matched by id where the cached bubbles carry one; an
|
|
6415
|
+
* off-chat send caches its pair before the ack (see dispatchComposedMessage), so
|
|
6416
|
+
* the fallback is positional, exactly as _applyReplyToCache's is: the trailing
|
|
6417
|
+
* pending placeholder, and the last request bubble still marked in flight.
|
|
6418
|
+
*/
|
|
6419
|
+
_applyCancelToCache(key, itemId) {
|
|
6420
|
+
var existing = key ? this.aiChatHistoryCache[key] : void 0;
|
|
6421
|
+
if (!existing) return;
|
|
6422
|
+
var msgs = existing.messages.slice();
|
|
6423
|
+
var changed = false;
|
|
6424
|
+
var pIdx = -1, uIdx = -1;
|
|
6425
|
+
for (var i = msgs.length - 1; i >= 0; i--) {
|
|
6426
|
+
var m = msgs[i];
|
|
6427
|
+
if (!m || m._serverItemId !== itemId) continue;
|
|
6428
|
+
if (m.role === "assistant" && m.isPending) {
|
|
6429
|
+
msgs.splice(i, 1);
|
|
6430
|
+
changed = true;
|
|
6431
|
+
pIdx = i;
|
|
6432
|
+
} else if (m.role === "user" && !m.isCancelled && uIdx === -1) uIdx = i;
|
|
6433
|
+
}
|
|
6434
|
+
if (pIdx === -1) {
|
|
6435
|
+
for (var p = msgs.length - 1; p >= 0; p--) {
|
|
6436
|
+
var pm = msgs[p];
|
|
6437
|
+
if (!pm || !pm.isPending || pm.role !== "assistant" || pm.isBackgroundTask || pm._serverItemId !== void 0) continue;
|
|
6438
|
+
msgs.splice(p, 1);
|
|
6439
|
+
changed = true;
|
|
6440
|
+
break;
|
|
6441
|
+
}
|
|
6442
|
+
}
|
|
6443
|
+
if (uIdx === -1) {
|
|
6444
|
+
for (var u = msgs.length - 1; u >= 0; u--) {
|
|
6445
|
+
var um = msgs[u];
|
|
6446
|
+
if (!um || um.role !== "user" || um.isBackgroundTask || um._serverItemId !== void 0 || um._stageId) continue;
|
|
6447
|
+
if (!(um.isPendingQueued || um.isPendingInProcess || um.isSendingToServer)) continue;
|
|
6448
|
+
uIdx = u;
|
|
6449
|
+
break;
|
|
6450
|
+
}
|
|
6451
|
+
}
|
|
6452
|
+
if (uIdx !== -1) {
|
|
6453
|
+
msgs[uIdx] = this._cancelledCopyOf(msgs[uIdx], itemId);
|
|
6454
|
+
changed = true;
|
|
6455
|
+
}
|
|
6456
|
+
if (!changed) return;
|
|
6457
|
+
this.aiChatHistoryCache[key] = { messages: msgs, endOfList: existing.endOfList, startKeyHistory: existing.startKeyHistory };
|
|
6458
|
+
}
|
|
6235
6459
|
/**
|
|
6236
6460
|
* Stop indexing a file, from its collapsed row — every pass at once, not just
|
|
6237
6461
|
* the bubble the user happens to see.
|
|
@@ -6298,6 +6522,7 @@ var ChatSession = class {
|
|
|
6298
6522
|
}
|
|
6299
6523
|
}
|
|
6300
6524
|
this._adoptWorkerIndexingPasses(0);
|
|
6525
|
+
this._sweepCancelledIndexing();
|
|
6301
6526
|
var ids = group.cancellableIds || [];
|
|
6302
6527
|
if (!ids.length) {
|
|
6303
6528
|
this.host.notify();
|
|
@@ -6580,9 +6805,10 @@ var ChatSession = class {
|
|
|
6580
6805
|
this.state.sending = true;
|
|
6581
6806
|
this.host.scrollToBottomIfSticky(true);
|
|
6582
6807
|
return Promise.resolve(pending).catch(function() {
|
|
6583
|
-
}).then(function() {
|
|
6808
|
+
}).then(function(result) {
|
|
6584
6809
|
if (token !== self.state.gateRefreshToken) return;
|
|
6585
6810
|
self.state.sending = false;
|
|
6811
|
+
if (result && result.cancelled) return;
|
|
6586
6812
|
return Promise.resolve(self.typewriteLatestReply(key)).then(function() {
|
|
6587
6813
|
self.host.scrollToBottomIfSticky(true);
|
|
6588
6814
|
});
|
|
@@ -8211,8 +8437,19 @@ function buildChatDisplayList(messages, opts) {
|
|
|
8211
8437
|
} else if (stopped) {
|
|
8212
8438
|
grp.status = "cancelled";
|
|
8213
8439
|
} else {
|
|
8214
|
-
var
|
|
8215
|
-
|
|
8440
|
+
var retriedIds = {};
|
|
8441
|
+
for (var ri = 0; ri < grp.members.length; ri++) {
|
|
8442
|
+
var rm = grp.members[ri].msg;
|
|
8443
|
+
if (rm.isRetried && rm._serverItemId) retriedIds[rm._serverItemId] = true;
|
|
8444
|
+
}
|
|
8445
|
+
var li = grp.members.length - 1;
|
|
8446
|
+
while (li >= 0 && (grp.members[li].msg.isRetried || grp.members[li].msg._serverItemId && retriedIds[grp.members[li].msg._serverItemId])) li--;
|
|
8447
|
+
if (li < 0) {
|
|
8448
|
+
grp.status = "active";
|
|
8449
|
+
} else {
|
|
8450
|
+
var last = grp.members[li].msg;
|
|
8451
|
+
grp.status = last.isError ? "error" : "done";
|
|
8452
|
+
}
|
|
8216
8453
|
}
|
|
8217
8454
|
var sawFirstPass = false;
|
|
8218
8455
|
for (var pi = 0; pi < grp.members.length; pi++) {
|
|
@@ -8525,6 +8762,6 @@ function clearProjectSettings(service) {
|
|
|
8525
8762
|
else cache.clear();
|
|
8526
8763
|
}
|
|
8527
8764
|
|
|
8528
|
-
export { BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, CHAT_GREETING_MAX_LENGTH, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, ChatSession, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INDEXING_MAX_OUTPUT_TOKENS, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, 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, OUTPUT_TOKEN_RESERVE, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, STREAM_POLL_INTERVAL, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
|
8765
|
+
export { BG_INDEXING_QUEUE_SUFFIX, BOM, BOM_EXTS, CHAT_GREETING_MAX_LENGTH, CLAUDE_INPUT_CAP_RATIO, CLAUDE_PER_REQUEST_INPUT_CAP, CONTEXT_WINDOW_BY_MODEL, CONTEXT_WINDOW_DEFAULT, ChatSession, DEFAULT_CLAUDE_MODEL, DEFAULT_CONTEXT_WINDOW, DEFAULT_OPENAI_MODEL, DEFAULT_UPLOAD_ACCESS_GROUP, EMPTY_INDEXING_REPLY, EXPIRED_ATTACHMENT_URL_HOST, EXPIRED_ATTACHMENT_URL_ORIGIN, EXPIRED_LINK_REFRESH_EXPIRES_SECONDS, EXT_CONTENT_TYPES, HISTORY_BUDGET_RATIO, HISTORY_FILL_SLACK_PX, HISTORY_TOKEN_BUDGET, HTML_EXTS, HTML_HEAD_WINDOW, IMAGE_PREVIEWS_PER_MESSAGE, INDEXING_COMPLETE_MARKER, INDEXING_MAX_OUTPUT_TOKENS, INLINE_LINK_GLYPH, INLINE_LINK_UNAVAILABLE_GLYPH, INLINE_LINK_UNAVAILABLE_SUFFIX, INPUT_CAP_RATIO, 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, OUTPUT_TOKEN_RESERVE, POLL_INTERVAL, PRESIGN_SAFETY_MARGIN_MS, PREVIEWABLE_IMAGE_CONTENT_TYPES, PREVIEW_BROWSER_CACHE_SECONDS, PREVIEW_LAYOUT_BOX_SELECTOR, PREVIEW_URL_EXPIRES_SECONDS, PROJECT_SETTINGS_ACCESS_GROUP, PROJECT_SETTINGS_TABLE, PROJECT_SETTINGS_UNIQUE_ID, RENDER_FROM_TOKEN, RTF_EXTS, RUN_RECORD_WORKING_STALE_MS, STREAM_POLL_INTERVAL, TOOL_AND_RESPONSE_BUFFER, UPLOAD_ACCESS_GROUPS, UPLOAD_ACCESS_HINTS, UPLOAD_ACCESS_LABELS, UPLOAD_ACCESS_OPTIONS, XML_EXTS, __resetSplitHistoryState, accessSettingFrom, adoptLocalAnswerIntoPage, applyEncodingDeclaration, asksUploadAccessFrom, bgIndexingQueueName, buildAiAgentValue, buildBoundedChatMessages, buildChatDisplayList, buildChatGreeting, buildChatSystemPrompt, buildDisplayExpiredAttachmentHref, buildHistoryItemFullId, buildIndexingContinueMessage, buildIndexingRenderContinueTemplate, buildIndexingRenderMessage, buildIndexingSystemPrompt, buildIndexingUserMessage, buildIndexingWindowMessage, cachedProjectSettings, callClaudeWithMcp, callClaudeWithPublicMcp, callOpenAIWithPublicMcp, canonicalizePathForm, chatCacheKey, chatEngineConfig, chatGreetingFrom, chatStreamWiring, classifyInlineLink, clearAttachmentParsers, clearImagePreviewCache, clearProjectSettings, composeUserMessage, configureChatEngine, configureProjectSettings, contentTypeForExt, createHistoryFiller, createInlineLinkRegex, createScrollAnchor, createSseParser, csrEnvelopeError, encodePathSegments, encodingClassForExt, ensureHtmlCharset, ensureXmlEncoding, escapeInlineHtml, escapeRtfNonAscii, estimateMessageTokens, estimateTextTokens, extOf, extractClaudeText, extractLastUserTextFromRequest, extractOpenAIText, extractRemotePathFromAttachmentHref, fetchLiveIndexingKeys, fillHistoryViewport, filterListByClearHorizon, findAttachmentParser, formatChatTimestamp, formatDuration, getAttachmentParsers, getChatHistory, getContextWindow, getErrorMessage, getExpiredAttachmentVisiblePath, getInputTokenBudget, getMaxOutputTokens, getModelContextWindow, getProjectContextWindow, getSplitChatHistory, getVisionProfile, groupAttachmentFailures, hasBom, hydrateImagePreviews, indexDoneUniqueId, indexScopeKey, indexingAccessGroup, isAuthExpiredError, isBgIndexingQueue, isCsrStatusEnvelope, isErrorResponseBody, isHttpUrlLike, isImageVisionFile, isIndexingRequestText, isLinkUnavailable, isNonRetryableRequestError, isOfficeFile, isPagedReadFile, isPreviewableImagePath, isProviderApiKeyError, isRetriedFailure, isServerExtractable, isServiceDbAttachmentHref, isWindowedReadFile, linkUnavailableKeyForHref, linkUnavailableKeyForPath, linkUnavailableKeysForPath, listClaudeModels, listOpenAIModels, liveSafePrefix, loadProjectSettings, looksLikeRtf, makeExtractPlaceholder, mapHistoryListToMessages, markImagePreviewStale, mayKeepStreamedAnswer, mintCacheBustStamp, needsBomForExt, normalizeAttachmentPathCandidate, normalizeChatGreeting, normalizeExt, normalizeProjectAccessSetting, normalizeTextContent, normalizeTrailingInlineToken, normalizeUploadAccessGroup, notifyAgentSaveAttachment, parseAiAgentValue, parseAttachmentContent, parseIndexingLabel, parseIndexingRequestText, patchProjectSettings, peekImagePreviewUrl, prepareDownloadText, presignExpiryEpochMs, previewImageContentType, previewLayoutBox, previewMintCacheToken, previewableExtOf, primeProjectSettings, projectAccessSetting, projectAsksUploadAccess, projectChatGreeting, projectSettingsSettled, projectUploadAccessGroup, readExpiredAttachmentHref, readyProjectSettings, registerAttachmentParser, registerModelContextWindows, renderInlineLinkHtml, repairUrlEntities, repairUrlWhitespace, resolveImagePreviewUrl, runIndexUniqueId, safeDecodeURIComponent, sanitizeAttachmentLinksForHistory, setProjectContextWindow, setProjectSettings, shouldRescueInFlightMessage, skapiSupportsStreaming, streamRecoveryEnabled, streamRecoveryLabels, streamRecoveryPhase, stripFileBlocksFromHistory, transformContentWithImages, transformContentWithOpenAIImages, truncateLabelForDisplay, typewriterResumeIndex, uploadAccessGroupFrom, upsertIndexRunRecordSafe, wallClockNow };
|
|
8529
8766
|
//# sourceMappingURL=engine.mjs.map
|
|
8530
8767
|
//# sourceMappingURL=engine.mjs.map
|