@bendyline/docblocks 2.7.4 → 2.7.6

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.
@@ -6,7 +6,7 @@ Run `npm run generate:notices` from the repository root.
6
6
  Resolved runtime and optional dependency closure declared by packages/core/package.json.
7
7
 
8
8
  Inventory source: package-lock.json.
9
- Components: 112.
9
+ Components: 113.
10
10
 
11
11
  This notice is included in the published npm tarball. Transitive packages installed by npm also retain their package-local license files.
12
12
 
@@ -14,7 +14,8 @@ This notice is included in the published npm tarball. Transitive packages instal
14
14
 
15
15
  | Package | Version | License | Source |
16
16
  | --- | --- | --- | --- |
17
- | @bendyline/squisq | 2.12.5 | MIT | https://github.com/bendyline/squisq |
17
+ | @bendyline/squisq | 2.13.0 | MIT | https://github.com/bendyline/squisq |
18
+ | @bendyline/squisq-graph | 2.13.0 | MIT | https://github.com/bendyline/squisq |
18
19
  | @types/debug | 4.1.12 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped |
19
20
  | @types/hast | 3.0.4 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped |
20
21
  | @types/katex | 0.16.8 | MIT | https://github.com/DefinitelyTyped/DefinitelyTyped |
@@ -132,8 +133,8 @@ This notice is included in the published npm tarball. Transitive packages instal
132
133
  Package-local license, copying, and notice files are reproduced below. Where a published package omits its repository license, the reviewed aggregate or README identified in `Source files` supplies the retained material.
133
134
 
134
135
  ==============================================================================
135
- Components: @bendyline/squisq@2.12.5
136
- Source files: node_modules/@bendyline/squisq/LICENSE
136
+ Components: @bendyline/squisq-graph@2.13.0, @bendyline/squisq@2.13.0
137
+ Source files: node_modules/@bendyline/squisq-graph/LICENSE, node_modules/@bendyline/squisq/LICENSE
137
138
  ==============================================================================
138
139
  MIT License
139
140
 
@@ -158,7 +159,37 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
158
159
  SOFTWARE.
159
160
 
160
161
  ==============================================================================
161
- Components: @bendyline/squisq@2.12.5
162
+ Components: @bendyline/squisq-graph@2.13.0
163
+ Source files: node_modules/@bendyline/squisq-graph/NOTICE.md
164
+ ==============================================================================
165
+ # Third-Party Notices for @bendyline/squisq-graph
166
+
167
+ This notice applies to the `@bendyline/squisq-graph` npm package.
168
+ Squisq-authored code is licensed under the MIT license in `LICENSE`.
169
+ Third-party components remain under their respective license terms.
170
+
171
+ ## Runtime dependencies
172
+
173
+ | Package | Version | License | Repository |
174
+ | ------- | ------- | ------- | ---------- |
175
+
176
+ This package has no third-party runtime dependencies. The layout engine and its
177
+ worker entry are Squisq-authored (MIT).
178
+
179
+ ==============================================================================
180
+ Components: @bendyline/squisq-graph@2.13.0
181
+ Source files: node_modules/@bendyline/squisq-graph/THIRD_PARTY_LICENSES.txt
182
+ ==============================================================================
183
+ THIRD-PARTY LICENSES FOR @bendyline/squisq-graph
184
+
185
+ Generated from the actual esbuild input graph. Package-local license, copying,
186
+ and notice files are reproduced verbatim. When an npm tarball omits its
187
+ repository license, the pinned upstream copy is vendored and identified below.
188
+
189
+ COMPONENTS
190
+
191
+ ==============================================================================
192
+ Components: @bendyline/squisq@2.13.0
162
193
  Source files: node_modules/@bendyline/squisq/NOTICE.md
163
194
  ==============================================================================
164
195
  # Third-Party Notices for @bendyline/squisq
@@ -189,7 +220,7 @@ third-party license texts for bundled code and data are shipped in
189
220
  THIRD_PARTY_LICENSES.txt.
190
221
 
191
222
  ==============================================================================
192
- Components: @bendyline/squisq@2.12.5
223
+ Components: @bendyline/squisq@2.13.0
193
224
  Source files: node_modules/@bendyline/squisq/THIRD_PARTY_LICENSES.txt
194
225
  ==============================================================================
195
226
  THIRD-PARTY LICENSES FOR @bendyline/squisq
@@ -195,6 +195,18 @@ interface AiChatMessage {
195
195
  * and flashcards, made in many small calls with explicit caps) never does.
196
196
  */
197
197
  type AiChatPurpose = 'write' | 'review' | 'illustrate' | 'study' | 'chat';
198
+ /**
199
+ * Structured output: the reply should be one JSON value matching `schema`, a
200
+ * JSON Schema object. Hosts that can enforce it do (llama.cpp with a grammar,
201
+ * Apple's on-device model with guided generation); others ignore it. Callers
202
+ * still validate the reply.
203
+ */
204
+ interface AiResponseFormat {
205
+ readonly type: 'json_schema';
206
+ /** A short identifier for the shape, such as `presentation_slide`. */
207
+ readonly name: string;
208
+ readonly schema: Readonly<Record<string, unknown>>;
209
+ }
198
210
  interface AiChatRequest {
199
211
  readonly messages: readonly AiChatMessage[];
200
212
  /** Opaque provider model id. Omitted means "the host's current choice". */
@@ -203,6 +215,7 @@ interface AiChatRequest {
203
215
  /** Optional caller cap. Writing without one uses the host/model's available capacity. */
204
216
  readonly maxTokens?: number;
205
217
  readonly purpose: AiChatPurpose;
218
+ readonly responseFormat?: AiResponseFormat;
206
219
  }
207
220
  interface AiChatCompletion {
208
221
  readonly text: string;
@@ -222,7 +235,37 @@ interface AiChatProgress {
222
235
  readonly outputTokens: number | null;
223
236
  readonly tokensPerSecond: number | null;
224
237
  }
238
+ /** One knowledge catalog that contributed reference passages to a request. */
239
+ interface AiChatKnowledgeSource {
240
+ readonly catalogId: string;
241
+ /** The catalog's display name, or its id when the provider did not name it. */
242
+ readonly name: string;
243
+ /** Distinct titles of the cited articles, best first. */
244
+ readonly titles: readonly string[];
245
+ }
246
+ /**
247
+ * What the person's enabled knowledge catalogs added to one request. A
248
+ * provider sends this at most once, before any text, and only when at least
249
+ * one catalog is enabled.
250
+ */
251
+ type AiChatKnowledge = {
252
+ readonly outcome: 'used';
253
+ readonly sources: readonly AiChatKnowledgeSource[];
254
+ /** The passage texts the model was given, so its output can be checked against them. */
255
+ readonly evidence: readonly string[];
256
+ }
257
+ /** The catalogs were searched and nothing relevant came back. */
258
+ | {
259
+ readonly outcome: 'none';
260
+ }
261
+ /** The catalogs could not be consulted: retrieval failed or the prompt left no room. */
262
+ | {
263
+ readonly outcome: 'skipped';
264
+ };
225
265
  type AiChatEvent = {
266
+ readonly kind: 'knowledge';
267
+ readonly knowledge: AiChatKnowledge;
268
+ } | {
226
269
  readonly kind: 'progress';
227
270
  readonly progress: AiChatProgress;
228
271
  } | {
@@ -235,6 +278,32 @@ type AiChatEvent = {
235
278
  readonly kind: 'error';
236
279
  readonly error: AiError;
237
280
  };
281
+ /** Check AI output for specific details that nothing the model was shown supports. */
282
+ interface AiFactCheckRequest {
283
+ /** The output, as Markdown. */
284
+ readonly text: string;
285
+ /** Reference passages the model was given. */
286
+ readonly evidence: readonly string[];
287
+ /** What the person supplied: their instructions and document. Details found here need no source. */
288
+ readonly given: string;
289
+ }
290
+ interface AiFactCheckSentence {
291
+ /** The sentence, possibly shortened. */
292
+ readonly text: string;
293
+ /** The names, dates, numbers or quotations no source shows. */
294
+ readonly missing: readonly string[];
295
+ /**
296
+ * A missing detail is a year, number, month or quotation. Names alone are a
297
+ * weaker signal: capitalized words are the noisiest part of the check.
298
+ */
299
+ readonly strong: boolean;
300
+ }
301
+ interface AiFactCheck {
302
+ /** Sentences that state something checkable. */
303
+ readonly checked: number;
304
+ /** Sentences stating details no source shows, strongest first. */
305
+ readonly unsourced: readonly AiFactCheckSentence[];
306
+ }
238
307
  interface AiChatHandle {
239
308
  readonly done: Promise<AiResult<AiChatCompletion>>;
240
309
  cancel(): void;
@@ -339,6 +408,11 @@ interface DocBlocksHostAiAPI {
339
408
  models(): Promise<AiResult<readonly AiModelInfo[]>>;
340
409
  /** Catalog models this host can download. Optional for older providers. */
341
410
  availableModels?(): Promise<AiResult<readonly AiModelDownloadInfo[]>>;
411
+ /**
412
+ * Find sentences whose names, dates, numbers or quotations appear in none of
413
+ * the evidence or the person's own text. Mechanical: no model call.
414
+ */
415
+ checkFacts?(request: AiFactCheckRequest): Promise<AiResult<AiFactCheck>>;
342
416
  /** Start a model download from an explicit user gesture. */
343
417
  installModel?(modelId: string, onProgress?: (progress: AiProgress) => void): AiModelInstallHandle;
344
418
  /**
@@ -874,7 +948,10 @@ interface DocBlocksHostShellAPI {
874
948
  revealInFolder?(workspaceId: string, workspacePath?: string): Promise<void>;
875
949
  /** Open a registered workspace root in Finder or the platform file manager. */
876
950
  openWorkspaceFolder?(workspaceId: string): Promise<void>;
877
- /** Open a URL in the default browser. */
951
+ /**
952
+ * Open an HTTP(S) URL in the default browser, or a `mailto:` URL to support
953
+ * in the default mail app. See `parseOpenExternalUrl`.
954
+ */
878
955
  openExternal(url: string): Promise<void>;
879
956
  }
880
957
  /** Native clipboard operations exposed through the trusted host boundary. */
@@ -1003,6 +1080,14 @@ interface DocBlocksHostMenuAPI {
1003
1080
  * previously published list; send an empty array to clear the shortcuts.
1004
1081
  */
1005
1082
  setPinnedDocuments(documents: readonly HostPinnedDocument[]): void;
1083
+ /**
1084
+ * Whether DocBlocks keeps an icon in the macOS menu bar, the Windows
1085
+ * notification area, or the Linux system tray. Off until the user turns it
1086
+ * on. Absent on a host without one.
1087
+ */
1088
+ getTrayEnabled?(): Promise<boolean>;
1089
+ /** Show or remove the tray icon, remembered across launches; resolves with the saved value. */
1090
+ setTrayEnabled?(enabled: boolean): Promise<boolean>;
1006
1091
  }
1007
1092
  /**
1008
1093
  * OS open-file / deep-link event resolved by the host.
@@ -1195,6 +1280,8 @@ interface HostCapabilities {
1195
1280
  readonly openRequests: boolean;
1196
1281
  readonly menuCommands: boolean;
1197
1282
  readonly pinnedDocumentMirror: boolean;
1283
+ /** An opt-in tray / menu bar icon the user can turn on and off. */
1284
+ readonly trayIcon: boolean;
1198
1285
  readonly guardedClose: boolean;
1199
1286
  readonly git: boolean;
1200
1287
  readonly updater: boolean;
@@ -1253,4 +1340,4 @@ declare function parseHostEnvironment(value: unknown): HostEnvironment | null;
1253
1340
  */
1254
1341
  declare function deriveHostCapabilities(host: unknown): HostCapabilities;
1255
1342
 
1256
- export { type GitBranchInfo as $, type AiChatCompletion as A, type AiReviewMode as B, type AiSearchHit as C, type AiSearchQuery as D, type AiSearchResult as E, type AiSpeechAudio as F, type AiStatus as G, type AiSynthesizeRequest as H, type AiTranscribeRequest as I, type AiTranscript as J, type AiUnavailableReason as K, type DocBlocksHostAPI as L, type DocBlocksHostAiAPI as M, type DocBlocksHostClipboardAPI as N, type DocBlocksHostExportAPI as O, type DocBlocksHostExternalAPI as P, type DocBlocksHostFfmpegAPI as Q, type DocBlocksHostFsAPI as R, type DocBlocksHostGitAPI as S, type DocBlocksHostLifecycleAPI as T, type DocBlocksHostMenuAPI as U, type DocBlocksHostShellAPI as V, type DocBlocksHostSpeechAPI as W, type DocBlocksHostUpdaterAPI as X, type DocBlocksHostWorkspacesAPI as Y, type ElectronWorkspaceInfo as Z, type ExternalBinaryCommitResult as _, type AiChatEvent as a, type GitCapabilities as a0, type GitCloneHandle as a1, type GitCloneProgress as a2, type GitError as a3, type GitErrorCode as a4, type GitFileAtRevision as a5, type GitFileChange as a6, type GitFileStatusCode as a7, type GitLogEntry as a8, type GitLogOptions as a9, type SpeechModelKind as aA, type SpeechPreferences as aB, type SpeechPreferencesPatch as aC, type SpeechProgress as aD, type SpeechReadiness as aE, type SpeechReadinessState as aF, type SpeechResult as aG, type SpeechSegment as aH, type SpeechStatus as aI, type SpeechSynthesisHandle as aJ, type SpeechSynthesisSummary as aK, type SpeechSynthesizeEvent as aL, type SpeechSynthesizeRequest as aM, type SpeechTranscribeRequest as aN, type SpeechTranscript as aO, type SpeechVoiceInfo as aP, type SpeechWordTiming as aQ, type UpdateCheckResult as aR, type UpdateInstallResult as aS, type UpdaterStatus as aT, deriveHostCapabilities as aU, parseAiKnowledgeAction as aV, parseAiKnowledgeState as aW, parseHostEnvironment as aX, type GitRemoteInfo as aa, type GitRepoDetection as ab, type GitResult as ac, type GitRevision as ad, type GitStatus as ae, HOST_PLATFORMS as af, HOST_SURFACE_KINDS as ag, type HostCapabilities as ah, type HostCloseReason as ai, type HostEnvironment as aj, type HostExportTargetGrant as ak, type HostPinnedDocument as al, type HostPlatform as am, type HostPrepareCloseRequest as an, type HostPrepareCloseResult as ao, type HostSurfaceKind as ap, type MenuCommand as aq, NO_HOST_CAPABILITIES as ar, type OpenRequest as as, type SpeechAudioChunk as at, type SpeechCatalog as au, type SpeechError as av, type SpeechErrorCode as aw, type SpeechInstallEvent as ax, type SpeechInstallHandle as ay, type SpeechModelInfo as az, type AiChatHandle as b, type AiChatMessage as c, type AiChatProgress as d, type AiChatPurpose as e, type AiChatRequest as f, type AiConnectionStep as g, type AiEnsureWorkspaceHandle as h, type AiError as i, type AiErrorCode as j, type AiImageRequest as k, type AiImageResult as l, type AiKnowledgeAPI as m, type AiKnowledgeAction as n, type AiKnowledgeCatalog as o, type AiKnowledgeState as p, type AiModelDownloadInfo as q, type AiModelFit as r, type AiModelInfo as s, type AiModelInstallEvent as t, type AiModelInstallHandle as u, type AiPreferences as v, type AiPreferencesPatch as w, type AiProgress as x, type AiProviderInfo as y, type AiResult as z };
1343
+ export { type DocBlocksHostShellAPI as $, type AiChatCompletion as A, type AiPreferences as B, type AiPreferencesPatch as C, type AiProgress as D, type AiProviderInfo as E, type AiResponseFormat as F, type AiResult as G, type AiReviewMode as H, type AiSearchHit as I, type AiSearchQuery as J, type AiSearchResult as K, type AiSpeechAudio as L, type AiStatus as M, type AiSynthesizeRequest as N, type AiTranscribeRequest as O, type AiTranscript as P, type AiUnavailableReason as Q, type DocBlocksHostAPI as R, type DocBlocksHostAiAPI as S, type DocBlocksHostClipboardAPI as T, type DocBlocksHostExportAPI as U, type DocBlocksHostExternalAPI as V, type DocBlocksHostFfmpegAPI as W, type DocBlocksHostFsAPI as X, type DocBlocksHostGitAPI as Y, type DocBlocksHostLifecycleAPI as Z, type DocBlocksHostMenuAPI as _, type AiChatEvent as a, parseAiKnowledgeAction as a$, type DocBlocksHostSpeechAPI as a0, type DocBlocksHostUpdaterAPI as a1, type DocBlocksHostWorkspacesAPI as a2, type ElectronWorkspaceInfo as a3, type ExternalBinaryCommitResult as a4, type GitBranchInfo as a5, type GitCapabilities as a6, type GitCloneHandle as a7, type GitCloneProgress as a8, type GitError as a9, type SpeechCatalog as aA, type SpeechError as aB, type SpeechErrorCode as aC, type SpeechInstallEvent as aD, type SpeechInstallHandle as aE, type SpeechModelInfo as aF, type SpeechModelKind as aG, type SpeechPreferences as aH, type SpeechPreferencesPatch as aI, type SpeechProgress as aJ, type SpeechReadiness as aK, type SpeechReadinessState as aL, type SpeechResult as aM, type SpeechSegment as aN, type SpeechStatus as aO, type SpeechSynthesisHandle as aP, type SpeechSynthesisSummary as aQ, type SpeechSynthesizeEvent as aR, type SpeechSynthesizeRequest as aS, type SpeechTranscribeRequest as aT, type SpeechTranscript as aU, type SpeechVoiceInfo as aV, type SpeechWordTiming as aW, type UpdateCheckResult as aX, type UpdateInstallResult as aY, type UpdaterStatus as aZ, deriveHostCapabilities as a_, type GitErrorCode as aa, type GitFileAtRevision as ab, type GitFileChange as ac, type GitFileStatusCode as ad, type GitLogEntry as ae, type GitLogOptions as af, type GitRemoteInfo as ag, type GitRepoDetection as ah, type GitResult as ai, type GitRevision as aj, type GitStatus as ak, HOST_PLATFORMS as al, HOST_SURFACE_KINDS as am, type HostCapabilities as an, type HostCloseReason as ao, type HostEnvironment as ap, type HostExportTargetGrant as aq, type HostPinnedDocument as ar, type HostPlatform as as, type HostPrepareCloseRequest as at, type HostPrepareCloseResult as au, type HostSurfaceKind as av, type MenuCommand as aw, NO_HOST_CAPABILITIES as ax, type OpenRequest as ay, type SpeechAudioChunk as az, type AiChatHandle as b, parseAiKnowledgeState as b0, parseHostEnvironment as b1, type AiChatKnowledge as c, type AiChatKnowledgeSource as d, type AiChatMessage as e, type AiChatProgress as f, type AiChatPurpose as g, type AiChatRequest as h, type AiConnectionStep as i, type AiEnsureWorkspaceHandle as j, type AiError as k, type AiErrorCode as l, type AiFactCheck as m, type AiFactCheckRequest as n, type AiFactCheckSentence as o, type AiImageRequest as p, type AiImageResult as q, type AiKnowledgeAPI as r, type AiKnowledgeAction as s, type AiKnowledgeCatalog as t, type AiKnowledgeState as u, type AiModelDownloadInfo as v, type AiModelFit as w, type AiModelInfo as x, type AiModelInstallEvent as y, type AiModelInstallHandle as z };
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  FILE_SYSTEM_TRANSFER_LIMITS,
3
3
  maybeGetDocBlocksHost
4
- } from "./chunk-KXQDMZFH.js";
4
+ } from "./chunk-P4VIU7MB.js";
5
5
  import {
6
6
  parseFileSystemCapabilities
7
7
  } from "./chunk-245W57QP.js";
@@ -9,7 +9,7 @@ import {
9
9
  HOST_WIRE_LIMITS,
10
10
  isBoundedBytePayload,
11
11
  isBoundedString
12
- } from "./chunk-46AGYHDY.js";
12
+ } from "./chunk-V5SWLUZY.js";
13
13
  import {
14
14
  isRecord
15
15
  } from "./chunk-73OOROXH.js";
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  HostFileSystemProviderV2
3
- } from "./chunk-7LPIGCBG.js";
3
+ } from "./chunk-45XD424D.js";
4
4
  import {
5
5
  ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,
6
6
  maybeGetDocBlocksHost
7
- } from "./chunk-KXQDMZFH.js";
7
+ } from "./chunk-P4VIU7MB.js";
8
8
 
9
9
  // src/filesystem/electron-provider-v2.ts
10
10
  var ElectronFileSystemProviderV2 = class extends HostFileSystemProviderV2 {
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  HOST_WIRE_LIMITS,
3
3
  isBoundedString
4
- } from "./chunk-46AGYHDY.js";
4
+ } from "./chunk-V5SWLUZY.js";
5
5
 
6
6
  // src/host/capabilities.ts
7
7
  var HOST_SURFACE_KINDS = Object.freeze([
@@ -32,6 +32,7 @@ var NO_CAPABILITIES = Object.freeze({
32
32
  openRequests: false,
33
33
  menuCommands: false,
34
34
  pinnedDocumentMirror: false,
35
+ trayIcon: false,
35
36
  guardedClose: false,
36
37
  git: false,
37
38
  updater: false,
@@ -109,6 +110,7 @@ function deriveHostCapabilities(host) {
109
110
  openRequests: hasMethod(host, "onOpenRequest"),
110
111
  menuCommands: hasMethod(host, "onMenuCommand"),
111
112
  pinnedDocumentMirror: hasMethod(host.menu, "setPinnedDocuments"),
113
+ trayIcon: hasMethod(host.menu, "getTrayEnabled") && hasMethod(host.menu, "setTrayEnabled"),
112
114
  guardedClose: hasMethod(host.lifecycle, "onPrepareClose"),
113
115
  git: hasMethod(host.git, "status"),
114
116
  updater: hasMethod(host.updater, "checkForUpdates"),
@@ -143,8 +145,28 @@ var AI_WIRE_LIMITS = Object.freeze({
143
145
  completionCharacters: HOST_WIRE_LIMITS.documentCharacters,
144
146
  maxTokensCeiling: 32768,
145
147
  temperatureCeiling: 2,
148
+ /** A response schema describes a reply's shape; it is not another prompt. */
149
+ responseSchemaCharacters: 16 * 1024,
146
150
  verificationCodeCharacters: 16,
147
151
  progressPhaseCharacters: 64,
152
+ /** Catalogs, and titles per catalog, one request can cite; Gezel sends at most 8 passages. */
153
+ knowledgeSources: 8,
154
+ knowledgeTitles: 8,
155
+ knowledgeTitleCharacters: 256,
156
+ /** Passage texts sent with a knowledge report; Gezel caps a retrieval at 24,000 characters. */
157
+ knowledgeEvidence: 8,
158
+ knowledgeEvidenceCharacters: 24 * 1024,
159
+ /**
160
+ * A fact check reads one draft against every passage its run was given. It
161
+ * runs synchronously in the host; at these bounds it takes tens of ms.
162
+ */
163
+ factCheckTextCharacters: 64 * 1024,
164
+ factCheckEvidence: 64,
165
+ factCheckEvidenceCharacters: 128 * 1024,
166
+ factCheckGivenCharacters: 128 * 1024,
167
+ factCheckSentences: 50,
168
+ factCheckSentenceCharacters: 1e3,
169
+ factCheckDetails: 16,
148
170
  modelEntries: 200,
149
171
  contextWindowCeiling: 8e6,
150
172
  downloadBytesCeiling: Number.MAX_SAFE_INTEGER
@@ -365,9 +387,33 @@ function parseAiChatMessage(value) {
365
387
  if (!isBoundedString(value.content, AI_WIRE_LIMITS.promptCharacters)) return null;
366
388
  return { role: value.role, content: value.content };
367
389
  }
390
+ var RESPONSE_FORMAT_NAME = /^[A-Za-z0-9_-]{1,64}$/u;
391
+ function parseAiResponseFormat(value) {
392
+ if (!isRecord2(value)) return null;
393
+ if (!hasExactKeys(value, ["type", "name", "schema"])) return null;
394
+ if (value.type !== "json_schema") return null;
395
+ if (typeof value.name !== "string" || !RESPONSE_FORMAT_NAME.test(value.name)) return null;
396
+ if (!isRecord2(value.schema)) return null;
397
+ let serialized;
398
+ try {
399
+ serialized = JSON.stringify(value.schema);
400
+ } catch {
401
+ return null;
402
+ }
403
+ if (serialized.length > AI_WIRE_LIMITS.responseSchemaCharacters) return null;
404
+ return {
405
+ type: "json_schema",
406
+ name: value.name,
407
+ schema: JSON.parse(serialized)
408
+ };
409
+ }
368
410
  function parseAiChatRequest(value) {
369
411
  if (!isRecord2(value)) return null;
370
- if (!hasKeysWithin(value, ["messages", "purpose"], ["model", "temperature", "maxTokens"])) {
412
+ if (!hasKeysWithin(
413
+ value,
414
+ ["messages", "purpose"],
415
+ ["model", "temperature", "maxTokens", "responseFormat"]
416
+ )) {
371
417
  return null;
372
418
  }
373
419
  if (typeof value.purpose !== "string" || !CHAT_PURPOSES.has(value.purpose)) return null;
@@ -392,12 +438,15 @@ function parseAiChatRequest(value) {
392
438
  if (value.maxTokens !== void 0 && !isNonNegativeInteger(value.maxTokens, AI_WIRE_LIMITS.maxTokensCeiling)) {
393
439
  return null;
394
440
  }
441
+ const responseFormat = value.responseFormat === void 0 ? void 0 : parseAiResponseFormat(value.responseFormat);
442
+ if (responseFormat === null) return null;
395
443
  return {
396
444
  messages,
397
445
  purpose: value.purpose,
398
446
  ...value.model === void 0 ? {} : { model: value.model },
399
447
  ...value.temperature === void 0 ? {} : { temperature: value.temperature },
400
- ...value.maxTokens === void 0 ? {} : { maxTokens: value.maxTokens }
448
+ ...value.maxTokens === void 0 ? {} : { maxTokens: value.maxTokens },
449
+ ...responseFormat === void 0 ? {} : { responseFormat }
401
450
  };
402
451
  }
403
452
  function parseAiChatProgress(value) {
@@ -418,8 +467,105 @@ function parseAiChatProgress(value) {
418
467
  tokensPerSecond: value.tokensPerSecond
419
468
  };
420
469
  }
470
+ function parseAiChatKnowledgeSource(value) {
471
+ if (!isRecord2(value) || !hasExactKeys(value, ["catalogId", "name", "titles"])) return null;
472
+ if (!isBoundedString(value.catalogId, HOST_WIRE_LIMITS.identifierCharacters, 1)) return null;
473
+ if (!isBoundedString(value.name, HOST_WIRE_LIMITS.labelCharacters, 1)) return null;
474
+ if (!Array.isArray(value.titles) || value.titles.length > AI_WIRE_LIMITS.knowledgeTitles) {
475
+ return null;
476
+ }
477
+ const titles = [];
478
+ for (const title of value.titles) {
479
+ if (!isBoundedString(title, AI_WIRE_LIMITS.knowledgeTitleCharacters, 1)) return null;
480
+ titles.push(title);
481
+ }
482
+ return { catalogId: value.catalogId, name: value.name, titles };
483
+ }
484
+ function parseAiChatKnowledge(value) {
485
+ if (!isRecord2(value)) return null;
486
+ if (value.outcome === "none" || value.outcome === "skipped") {
487
+ return hasExactKeys(value, ["outcome"]) ? { outcome: value.outcome } : null;
488
+ }
489
+ if (value.outcome !== "used" || !hasExactKeys(value, ["outcome", "sources", "evidence"])) {
490
+ return null;
491
+ }
492
+ const evidence = parseTextList(
493
+ value.evidence,
494
+ AI_WIRE_LIMITS.knowledgeEvidence,
495
+ AI_WIRE_LIMITS.knowledgeEvidenceCharacters
496
+ );
497
+ if (!evidence || evidence.length === 0) return null;
498
+ if (!Array.isArray(value.sources) || value.sources.length === 0 || value.sources.length > AI_WIRE_LIMITS.knowledgeSources) {
499
+ return null;
500
+ }
501
+ const sources = [];
502
+ const ids = /* @__PURE__ */ new Set();
503
+ for (const entry of value.sources) {
504
+ const source = parseAiChatKnowledgeSource(entry);
505
+ if (!source || ids.has(source.catalogId)) return null;
506
+ ids.add(source.catalogId);
507
+ sources.push(source);
508
+ }
509
+ return { outcome: "used", sources, evidence };
510
+ }
511
+ function parseTextList(value, entries, characters) {
512
+ if (!Array.isArray(value) || value.length > entries) return null;
513
+ let total = 0;
514
+ const texts = [];
515
+ for (const text of value) {
516
+ if (!isBoundedString(text, characters, 1)) return null;
517
+ total += text.length;
518
+ if (total > characters) return null;
519
+ texts.push(text);
520
+ }
521
+ return texts;
522
+ }
523
+ function parseAiFactCheckRequest(value) {
524
+ if (!isRecord2(value) || !hasExactKeys(value, ["text", "evidence", "given"])) return null;
525
+ if (!isBoundedString(value.text, AI_WIRE_LIMITS.factCheckTextCharacters)) return null;
526
+ if (!isBoundedString(value.given, AI_WIRE_LIMITS.factCheckGivenCharacters)) return null;
527
+ const evidence = parseTextList(
528
+ value.evidence,
529
+ AI_WIRE_LIMITS.factCheckEvidence,
530
+ AI_WIRE_LIMITS.factCheckEvidenceCharacters
531
+ );
532
+ return evidence ? { text: value.text, evidence, given: value.given } : null;
533
+ }
534
+ function parseAiFactCheckSentence(value) {
535
+ if (!isRecord2(value) || !hasExactKeys(value, ["text", "missing", "strong"])) return null;
536
+ if (!isBoundedString(value.text, AI_WIRE_LIMITS.factCheckSentenceCharacters, 1)) return null;
537
+ if (typeof value.strong !== "boolean") return null;
538
+ if (!Array.isArray(value.missing) || value.missing.length > AI_WIRE_LIMITS.factCheckDetails) {
539
+ return null;
540
+ }
541
+ const missing = [];
542
+ for (const detail of value.missing) {
543
+ if (!isBoundedString(detail, AI_WIRE_LIMITS.knowledgeTitleCharacters, 1)) return null;
544
+ missing.push(detail);
545
+ }
546
+ return { text: value.text, missing, strong: value.strong };
547
+ }
548
+ function parseAiFactCheck(value) {
549
+ if (!isRecord2(value) || !hasExactKeys(value, ["checked", "unsourced"])) return null;
550
+ if (!isNonNegativeInteger(value.checked, Number.MAX_SAFE_INTEGER)) return null;
551
+ if (!Array.isArray(value.unsourced) || value.unsourced.length > AI_WIRE_LIMITS.factCheckSentences) {
552
+ return null;
553
+ }
554
+ const unsourced = [];
555
+ for (const entry of value.unsourced) {
556
+ const sentence = parseAiFactCheckSentence(entry);
557
+ if (!sentence) return null;
558
+ unsourced.push(sentence);
559
+ }
560
+ return { checked: value.checked, unsourced };
561
+ }
421
562
  function parseAiChatEvent(value) {
422
563
  if (!isRecord2(value)) return null;
564
+ if (value.kind === "knowledge") {
565
+ if (!hasExactKeys(value, ["kind", "knowledge"])) return null;
566
+ const knowledge = parseAiChatKnowledge(value.knowledge);
567
+ return knowledge ? { kind: "knowledge", knowledge } : null;
568
+ }
423
569
  if (value.kind === "progress") {
424
570
  if (!hasExactKeys(value, ["kind", "progress"])) return null;
425
571
  const progress = parseAiChatProgress(value.progress);
@@ -1166,6 +1312,9 @@ export {
1166
1312
  parseAiModelInstallEvent,
1167
1313
  parseAiChatRequest,
1168
1314
  parseAiChatProgress,
1315
+ parseAiChatKnowledge,
1316
+ parseAiFactCheckRequest,
1317
+ parseAiFactCheck,
1169
1318
  parseAiChatEvent,
1170
1319
  parseAiStatus,
1171
1320
  parseAiPreferences,
@@ -80,6 +80,27 @@ function parseExternalHttpUrl(value) {
80
80
  return null;
81
81
  }
82
82
  }
83
+ var SUPPORT_EMAIL_ADDRESS = "support@bendyline.com";
84
+ var SUPPORT_EMAIL_FIELDS = /* @__PURE__ */ new Set(["subject", "body"]);
85
+ function parseSupportMailtoUrl(value) {
86
+ if (!isBoundedString(value, HOST_WIRE_LIMITS.urlCharacters, 1)) return null;
87
+ try {
88
+ const url = new URL(value);
89
+ if (url.protocol !== "mailto:" || url.pathname !== SUPPORT_EMAIL_ADDRESS || url.hash) {
90
+ return null;
91
+ }
92
+ const fields = [...url.searchParams.keys()];
93
+ if (fields.some((field) => !SUPPORT_EMAIL_FIELDS.has(field))) return null;
94
+ if (new Set(fields).size !== fields.length) return null;
95
+ const canonical = url.href;
96
+ return canonical.length <= HOST_WIRE_LIMITS.urlCharacters ? canonical : null;
97
+ } catch {
98
+ return null;
99
+ }
100
+ }
101
+ function parseOpenExternalUrl(value) {
102
+ return parseExternalHttpUrl(value) ?? parseSupportMailtoUrl(value);
103
+ }
83
104
  function isTrustedRendererUrl(value, developmentOrigin) {
84
105
  if (!isBoundedString(value, HOST_WIRE_LIMITS.urlCharacters, 1)) return false;
85
106
  try {
@@ -104,5 +125,8 @@ export {
104
125
  parseOpenRequest,
105
126
  parsePinnedMenuDocuments,
106
127
  parseExternalHttpUrl,
128
+ SUPPORT_EMAIL_ADDRESS,
129
+ parseSupportMailtoUrl,
130
+ parseOpenExternalUrl,
107
131
  isTrustedRendererUrl
108
132
  };
@@ -4,7 +4,7 @@ export { isElectronHost } from '../host/index.js';
4
4
  import '../v2-DwxWjFC0.js';
5
5
  import '../workspace-path-CWVrcuPL.js';
6
6
  import '../filesystem-v2-CXdAPR27.js';
7
- import '../capabilities-BJEkIsO1.js';
7
+ import '../capabilities-DJ7X9EOt.js';
8
8
 
9
9
  /** Compatibility entry point retaining the Electron backend's exact guarantees. */
10
10
  declare class ElectronFileSystemProviderV2 extends HostFileSystemProviderV2 {
@@ -1,13 +1,13 @@
1
1
  import {
2
2
  ElectronFileSystemProvider,
3
3
  ElectronFileSystemProviderV2
4
- } from "../chunk-PSGAZKWO.js";
5
- import "../chunk-7LPIGCBG.js";
4
+ } from "../chunk-56QRV45P.js";
5
+ import "../chunk-45XD424D.js";
6
6
  import {
7
7
  isElectronHost
8
- } from "../chunk-KXQDMZFH.js";
8
+ } from "../chunk-P4VIU7MB.js";
9
9
  import "../chunk-245W57QP.js";
10
- import "../chunk-46AGYHDY.js";
10
+ import "../chunk-V5SWLUZY.js";
11
11
  import "../chunk-73OOROXH.js";
12
12
  import "../chunk-HABG2JM3.js";
13
13
  import "../chunk-LPIJ6HKL.js";
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  HostFileSystemProviderV2
3
- } from "../chunk-7LPIGCBG.js";
3
+ } from "../chunk-45XD424D.js";
4
4
  import {
5
5
  ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,
6
6
  maybeGetDocBlocksHost
7
- } from "../chunk-KXQDMZFH.js";
7
+ } from "../chunk-P4VIU7MB.js";
8
8
  import "../chunk-245W57QP.js";
9
- import "../chunk-46AGYHDY.js";
9
+ import "../chunk-V5SWLUZY.js";
10
10
  import "../chunk-73OOROXH.js";
11
11
  import "../chunk-HABG2JM3.js";
12
12
  import "../chunk-LPIJ6HKL.js";
@@ -15,7 +15,7 @@ export { ElectronFileSystemProvider, ElectronFileSystemProviderV2 } from './elec
15
15
  export { isElectronHost } from '../host/index.js';
16
16
  import '../host-provider-v2-DEWMPiRD.js';
17
17
  import '../filesystem-v2-CXdAPR27.js';
18
- import '../capabilities-BJEkIsO1.js';
18
+ import '../capabilities-DJ7X9EOt.js';
19
19
 
20
20
  /** Immediate article/folder suggestions from an already bounded listing. */
21
21
  declare function suggestWikiArticles(files: readonly {
@@ -48,13 +48,13 @@ import "../chunk-3GSMJ4MQ.js";
48
48
  import {
49
49
  ElectronFileSystemProvider,
50
50
  ElectronFileSystemProviderV2
51
- } from "../chunk-PSGAZKWO.js";
52
- import "../chunk-7LPIGCBG.js";
51
+ } from "../chunk-56QRV45P.js";
52
+ import "../chunk-45XD424D.js";
53
53
  import {
54
54
  isElectronHost
55
- } from "../chunk-KXQDMZFH.js";
55
+ } from "../chunk-P4VIU7MB.js";
56
56
  import "../chunk-245W57QP.js";
57
- import "../chunk-46AGYHDY.js";
57
+ import "../chunk-V5SWLUZY.js";
58
58
  import "../chunk-73OOROXH.js";
59
59
  import "../chunk-HABG2JM3.js";
60
60
  import {
@@ -1,5 +1,5 @@
1
- import { a as AiChatEvent, d as AiChatProgress, f as AiChatRequest, i as AiError, q as AiModelDownloadInfo, s as AiModelInfo, t as AiModelInstallEvent, v as AiPreferences, w as AiPreferencesPatch, x as AiProgress, G as AiStatus, at as SpeechAudioChunk, au as SpeechCatalog, av as SpeechError, ax as SpeechInstallEvent, az as SpeechModelInfo, aA as SpeechModelKind, aG as SpeechResult, aB as SpeechPreferences, aC as SpeechPreferencesPatch, aD as SpeechProgress, aE as SpeechReadiness, aI as SpeechStatus, aK as SpeechSynthesisSummary, aL as SpeechSynthesizeEvent, aM as SpeechSynthesizeRequest, aN as SpeechTranscribeRequest, aO as SpeechTranscript, aP as SpeechVoiceInfo, as as OpenRequest, al as HostPinnedDocument, L as DocBlocksHostAPI, ah as HostCapabilities, aj as HostEnvironment } from '../capabilities-BJEkIsO1.js';
2
- export { A as AiChatCompletion, b as AiChatHandle, c as AiChatMessage, e as AiChatPurpose, g as AiConnectionStep, h as AiEnsureWorkspaceHandle, j as AiErrorCode, k as AiImageRequest, l as AiImageResult, m as AiKnowledgeAPI, n as AiKnowledgeAction, o as AiKnowledgeCatalog, p as AiKnowledgeState, r as AiModelFit, u as AiModelInstallHandle, y as AiProviderInfo, z as AiResult, B as AiReviewMode, C as AiSearchHit, D as AiSearchQuery, E as AiSearchResult, F as AiSpeechAudio, H as AiSynthesizeRequest, I as AiTranscribeRequest, J as AiTranscript, K as AiUnavailableReason, M as DocBlocksHostAiAPI, N as DocBlocksHostClipboardAPI, O as DocBlocksHostExportAPI, P as DocBlocksHostExternalAPI, Q as DocBlocksHostFfmpegAPI, R as DocBlocksHostFsAPI, S as DocBlocksHostGitAPI, T as DocBlocksHostLifecycleAPI, U as DocBlocksHostMenuAPI, V as DocBlocksHostShellAPI, W as DocBlocksHostSpeechAPI, X as DocBlocksHostUpdaterAPI, Y as DocBlocksHostWorkspacesAPI, Z as ElectronWorkspaceInfo, _ as ExternalBinaryCommitResult, $ as GitBranchInfo, a0 as GitCapabilities, a1 as GitCloneHandle, a2 as GitCloneProgress, a3 as GitError, a4 as GitErrorCode, a5 as GitFileAtRevision, a6 as GitFileChange, a7 as GitFileStatusCode, a8 as GitLogEntry, a9 as GitLogOptions, aa as GitRemoteInfo, ab as GitRepoDetection, ac as GitResult, ad as GitRevision, ae as GitStatus, af as HOST_PLATFORMS, ag as HOST_SURFACE_KINDS, ai as HostCloseReason, ak as HostExportTargetGrant, am as HostPlatform, an as HostPrepareCloseRequest, ao as HostPrepareCloseResult, ap as HostSurfaceKind, aq as MenuCommand, ar as NO_HOST_CAPABILITIES, aw as SpeechErrorCode, ay as SpeechInstallHandle, aF as SpeechReadinessState, aH as SpeechSegment, aJ as SpeechSynthesisHandle, aQ as SpeechWordTiming, aR as UpdateCheckResult, aS as UpdateInstallResult, aT as UpdaterStatus, aU as deriveHostCapabilities, aV as parseAiKnowledgeAction, aW as parseAiKnowledgeState, aX as parseHostEnvironment } from '../capabilities-BJEkIsO1.js';
1
+ import { a as AiChatEvent, c as AiChatKnowledge, f as AiChatProgress, h as AiChatRequest, k as AiError, m as AiFactCheck, n as AiFactCheckRequest, v as AiModelDownloadInfo, x as AiModelInfo, y as AiModelInstallEvent, B as AiPreferences, C as AiPreferencesPatch, D as AiProgress, M as AiStatus, az as SpeechAudioChunk, aA as SpeechCatalog, aB as SpeechError, aD as SpeechInstallEvent, aF as SpeechModelInfo, aG as SpeechModelKind, aM as SpeechResult, aH as SpeechPreferences, aI as SpeechPreferencesPatch, aJ as SpeechProgress, aK as SpeechReadiness, aO as SpeechStatus, aQ as SpeechSynthesisSummary, aR as SpeechSynthesizeEvent, aS as SpeechSynthesizeRequest, aT as SpeechTranscribeRequest, aU as SpeechTranscript, aV as SpeechVoiceInfo, ay as OpenRequest, ar as HostPinnedDocument, R as DocBlocksHostAPI, an as HostCapabilities, ap as HostEnvironment } from '../capabilities-DJ7X9EOt.js';
2
+ export { A as AiChatCompletion, b as AiChatHandle, d as AiChatKnowledgeSource, e as AiChatMessage, g as AiChatPurpose, i as AiConnectionStep, j as AiEnsureWorkspaceHandle, l as AiErrorCode, o as AiFactCheckSentence, p as AiImageRequest, q as AiImageResult, r as AiKnowledgeAPI, s as AiKnowledgeAction, t as AiKnowledgeCatalog, u as AiKnowledgeState, w as AiModelFit, z as AiModelInstallHandle, E as AiProviderInfo, F as AiResponseFormat, G as AiResult, H as AiReviewMode, I as AiSearchHit, J as AiSearchQuery, K as AiSearchResult, L as AiSpeechAudio, N as AiSynthesizeRequest, O as AiTranscribeRequest, P as AiTranscript, Q as AiUnavailableReason, S as DocBlocksHostAiAPI, T as DocBlocksHostClipboardAPI, U as DocBlocksHostExportAPI, V as DocBlocksHostExternalAPI, W as DocBlocksHostFfmpegAPI, X as DocBlocksHostFsAPI, Y as DocBlocksHostGitAPI, Z as DocBlocksHostLifecycleAPI, _ as DocBlocksHostMenuAPI, $ as DocBlocksHostShellAPI, a0 as DocBlocksHostSpeechAPI, a1 as DocBlocksHostUpdaterAPI, a2 as DocBlocksHostWorkspacesAPI, a3 as ElectronWorkspaceInfo, a4 as ExternalBinaryCommitResult, a5 as GitBranchInfo, a6 as GitCapabilities, a7 as GitCloneHandle, a8 as GitCloneProgress, a9 as GitError, aa as GitErrorCode, ab as GitFileAtRevision, ac as GitFileChange, ad as GitFileStatusCode, ae as GitLogEntry, af as GitLogOptions, ag as GitRemoteInfo, ah as GitRepoDetection, ai as GitResult, aj as GitRevision, ak as GitStatus, al as HOST_PLATFORMS, am as HOST_SURFACE_KINDS, ao as HostCloseReason, aq as HostExportTargetGrant, as as HostPlatform, at as HostPrepareCloseRequest, au as HostPrepareCloseResult, av as HostSurfaceKind, aw as MenuCommand, ax as NO_HOST_CAPABILITIES, aC as SpeechErrorCode, aE as SpeechInstallHandle, aL as SpeechReadinessState, aN as SpeechSegment, aP as SpeechSynthesisHandle, aW as SpeechWordTiming, aX as UpdateCheckResult, aY as UpdateInstallResult, aZ as UpdaterStatus, a_ as deriveHostCapabilities, a$ as parseAiKnowledgeAction, b0 as parseAiKnowledgeState, b1 as parseHostEnvironment } from '../capabilities-DJ7X9EOt.js';
3
3
  export { D as DocBlocksHostFsV2API, E as ELECTRON_FILE_SYSTEM_V2_CAPABILITIES, F as FILE_SYSTEM_TRANSFER_LIMITS, H as HostFileSystemReadTransfer, a as HostFileSystemV2OpenRequest, b as HostFileSystemV2Result, c as HostFileSystemV2WatchMessage } from '../filesystem-v2-CXdAPR27.js';
4
4
  import '../types-DLteNrK0.js';
5
5
  import '../v2-DwxWjFC0.js';
@@ -21,8 +21,28 @@ declare const AI_WIRE_LIMITS: Readonly<{
21
21
  completionCharacters: number;
22
22
  maxTokensCeiling: 32768;
23
23
  temperatureCeiling: 2;
24
+ /** A response schema describes a reply's shape; it is not another prompt. */
25
+ responseSchemaCharacters: number;
24
26
  verificationCodeCharacters: 16;
25
27
  progressPhaseCharacters: 64;
28
+ /** Catalogs, and titles per catalog, one request can cite; Gezel sends at most 8 passages. */
29
+ knowledgeSources: 8;
30
+ knowledgeTitles: 8;
31
+ knowledgeTitleCharacters: 256;
32
+ /** Passage texts sent with a knowledge report; Gezel caps a retrieval at 24,000 characters. */
33
+ knowledgeEvidence: 8;
34
+ knowledgeEvidenceCharacters: number;
35
+ /**
36
+ * A fact check reads one draft against every passage its run was given. It
37
+ * runs synchronously in the host; at these bounds it takes tens of ms.
38
+ */
39
+ factCheckTextCharacters: number;
40
+ factCheckEvidence: 64;
41
+ factCheckEvidenceCharacters: number;
42
+ factCheckGivenCharacters: number;
43
+ factCheckSentences: 50;
44
+ factCheckSentenceCharacters: 1000;
45
+ factCheckDetails: 16;
26
46
  modelEntries: 200;
27
47
  contextWindowCeiling: 8000000;
28
48
  downloadBytesCeiling: number;
@@ -43,6 +63,9 @@ declare function parseAiModelInstallEvent(value: unknown): AiModelInstallEvent |
43
63
  */
44
64
  declare function parseAiChatRequest(value: unknown): AiChatRequest | null;
45
65
  declare function parseAiChatProgress(value: unknown): AiChatProgress | null;
66
+ declare function parseAiChatKnowledge(value: unknown): AiChatKnowledge | null;
67
+ declare function parseAiFactCheckRequest(value: unknown): AiFactCheckRequest | null;
68
+ declare function parseAiFactCheck(value: unknown): AiFactCheck | null;
46
69
  declare function parseAiChatEvent(value: unknown): AiChatEvent | null;
47
70
  declare function parseAiStatus(value: unknown): AiStatus | null;
48
71
  declare function parseAiPreferences(value: unknown): AiPreferences | null;
@@ -136,6 +159,15 @@ declare function parseOpenRequest(value: unknown): OpenRequest | null;
136
159
  declare function parsePinnedMenuDocuments(value: unknown): HostPinnedDocument[];
137
160
  /** Return one canonical HTTP(S) URL, or null when external navigation is unsafe. */
138
161
  declare function parseExternalHttpUrl(value: unknown): string | null;
162
+ /** The one address a host will open an email to. */
163
+ declare const SUPPORT_EMAIL_ADDRESS = "support@bendyline.com";
164
+ /**
165
+ * Return one canonical `mailto:` URL to support, or null. Only a subject and
166
+ * body may be prefilled, so a renderer cannot add or redirect recipients.
167
+ */
168
+ declare function parseSupportMailtoUrl(value: unknown): string | null;
169
+ /** The `shell.openExternal` policy: a canonical HTTP(S) URL or an email to support. */
170
+ declare function parseOpenExternalUrl(value: unknown): string | null;
139
171
  /** True only for the packaged renderer origin or the exact configured dev origin. */
140
172
  declare function isTrustedRendererUrl(value: unknown, developmentOrigin?: string): boolean;
141
173
 
@@ -167,4 +199,4 @@ declare function getDocBlocksHost(): DocBlocksHostAPI;
167
199
  /** Return the host API, or null if not running under Electron. */
168
200
  declare function maybeGetDocBlocksHost(): DocBlocksHostAPI | null;
169
201
 
170
- export { AI_WIRE_LIMITS, AiChatEvent, AiChatProgress, AiChatRequest, AiError, AiModelDownloadInfo, AiModelInfo, AiModelInstallEvent, AiPreferences, AiPreferencesPatch, AiProgress, AiStatus, DocBlocksHostAPI, EXPORT_TRANSFER_LIMITS, HOST_WIRE_LIMITS, HostCapabilities, HostEnvironment, HostPinnedDocument, MAX_HOST_PINNED_DOCUMENTS, OpenRequest, SPEECH_WIRE_LIMITS, SpeechAudioChunk, SpeechCatalog, SpeechError, SpeechInstallEvent, SpeechModelInfo, SpeechModelKind, SpeechPreferences, SpeechPreferencesPatch, SpeechProgress, SpeechReadiness, SpeechResult, SpeechStatus, SpeechSynthesisSummary, SpeechSynthesizeEvent, SpeechSynthesizeRequest, SpeechTranscribeRequest, SpeechTranscript, SpeechVoiceInfo, getDocBlocksHost, getHostCapabilities, getHostEnvironment, hasDocBlocksHost, hostSupports, isBoundedBytePayload, isBoundedString, isElectronHost, isSpeechModelId, isTrustedRendererUrl, maybeGetDocBlocksHost, parseAiChatEvent, parseAiChatProgress, parseAiChatRequest, parseAiError, parseAiModelDownloadInfo, parseAiModelDownloadInfoList, parseAiModelInfo, parseAiModelInfoList, parseAiModelInstallEvent, parseAiPreferences, parseAiPreferencesPatch, parseAiProgress, parseAiStatus, parseExternalHttpUrl, parseOpenRequest, parsePinnedMenuDocuments, parseSpeechAudioChunk, parseSpeechCatalog, parseSpeechError, parseSpeechInstallEvent, parseSpeechModelInfo, parseSpeechModelKind, parseSpeechNullResult, parseSpeechPreferences, parseSpeechPreferencesPatch, parseSpeechProgress, parseSpeechReadiness, parseSpeechResult, parseSpeechStatus, parseSpeechSynthesisSummary, parseSpeechSynthesizeEvent, parseSpeechSynthesizeRequest, parseSpeechTranscribeRequest, parseSpeechTranscript, parseSpeechVoiceInfo };
202
+ export { AI_WIRE_LIMITS, AiChatEvent, AiChatKnowledge, AiChatProgress, AiChatRequest, AiError, AiFactCheck, AiFactCheckRequest, AiModelDownloadInfo, AiModelInfo, AiModelInstallEvent, AiPreferences, AiPreferencesPatch, AiProgress, AiStatus, DocBlocksHostAPI, EXPORT_TRANSFER_LIMITS, HOST_WIRE_LIMITS, HostCapabilities, HostEnvironment, HostPinnedDocument, MAX_HOST_PINNED_DOCUMENTS, OpenRequest, SPEECH_WIRE_LIMITS, SUPPORT_EMAIL_ADDRESS, SpeechAudioChunk, SpeechCatalog, SpeechError, SpeechInstallEvent, SpeechModelInfo, SpeechModelKind, SpeechPreferences, SpeechPreferencesPatch, SpeechProgress, SpeechReadiness, SpeechResult, SpeechStatus, SpeechSynthesisSummary, SpeechSynthesizeEvent, SpeechSynthesizeRequest, SpeechTranscribeRequest, SpeechTranscript, SpeechVoiceInfo, getDocBlocksHost, getHostCapabilities, getHostEnvironment, hasDocBlocksHost, hostSupports, isBoundedBytePayload, isBoundedString, isElectronHost, isSpeechModelId, isTrustedRendererUrl, maybeGetDocBlocksHost, parseAiChatEvent, parseAiChatKnowledge, parseAiChatProgress, parseAiChatRequest, parseAiError, parseAiFactCheck, parseAiFactCheckRequest, parseAiModelDownloadInfo, parseAiModelDownloadInfoList, parseAiModelInfo, parseAiModelInfoList, parseAiModelInstallEvent, parseAiPreferences, parseAiPreferencesPatch, parseAiProgress, parseAiStatus, parseExternalHttpUrl, parseOpenExternalUrl, parseOpenRequest, parsePinnedMenuDocuments, parseSpeechAudioChunk, parseSpeechCatalog, parseSpeechError, parseSpeechInstallEvent, parseSpeechModelInfo, parseSpeechModelKind, parseSpeechNullResult, parseSpeechPreferences, parseSpeechPreferencesPatch, parseSpeechProgress, parseSpeechReadiness, parseSpeechResult, parseSpeechStatus, parseSpeechSynthesisSummary, parseSpeechSynthesizeEvent, parseSpeechSynthesizeRequest, parseSpeechTranscribeRequest, parseSpeechTranscript, parseSpeechVoiceInfo, parseSupportMailtoUrl };
@@ -16,9 +16,12 @@ import {
16
16
  isSpeechModelId,
17
17
  maybeGetDocBlocksHost,
18
18
  parseAiChatEvent,
19
+ parseAiChatKnowledge,
19
20
  parseAiChatProgress,
20
21
  parseAiChatRequest,
21
22
  parseAiError,
23
+ parseAiFactCheck,
24
+ parseAiFactCheckRequest,
22
25
  parseAiKnowledgeAction,
23
26
  parseAiKnowledgeState,
24
27
  parseAiModelDownloadInfo,
@@ -50,18 +53,21 @@ import {
50
53
  parseSpeechTranscribeRequest,
51
54
  parseSpeechTranscript,
52
55
  parseSpeechVoiceInfo
53
- } from "../chunk-KXQDMZFH.js";
56
+ } from "../chunk-P4VIU7MB.js";
54
57
  import {
55
58
  EXPORT_TRANSFER_LIMITS,
56
59
  HOST_WIRE_LIMITS,
57
60
  MAX_HOST_PINNED_DOCUMENTS,
61
+ SUPPORT_EMAIL_ADDRESS,
58
62
  isBoundedBytePayload,
59
63
  isBoundedString,
60
64
  isTrustedRendererUrl,
61
65
  parseExternalHttpUrl,
66
+ parseOpenExternalUrl,
62
67
  parseOpenRequest,
63
- parsePinnedMenuDocuments
64
- } from "../chunk-46AGYHDY.js";
68
+ parsePinnedMenuDocuments,
69
+ parseSupportMailtoUrl
70
+ } from "../chunk-V5SWLUZY.js";
65
71
  export {
66
72
  AI_WIRE_LIMITS,
67
73
  ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,
@@ -73,6 +79,7 @@ export {
73
79
  MAX_HOST_PINNED_DOCUMENTS,
74
80
  NO_HOST_CAPABILITIES,
75
81
  SPEECH_WIRE_LIMITS,
82
+ SUPPORT_EMAIL_ADDRESS,
76
83
  deriveHostCapabilities,
77
84
  getDocBlocksHost,
78
85
  getHostCapabilities,
@@ -86,9 +93,12 @@ export {
86
93
  isTrustedRendererUrl,
87
94
  maybeGetDocBlocksHost,
88
95
  parseAiChatEvent,
96
+ parseAiChatKnowledge,
89
97
  parseAiChatProgress,
90
98
  parseAiChatRequest,
91
99
  parseAiError,
100
+ parseAiFactCheck,
101
+ parseAiFactCheckRequest,
92
102
  parseAiKnowledgeAction,
93
103
  parseAiKnowledgeState,
94
104
  parseAiModelDownloadInfo,
@@ -102,6 +112,7 @@ export {
102
112
  parseAiStatus,
103
113
  parseExternalHttpUrl,
104
114
  parseHostEnvironment,
115
+ parseOpenExternalUrl,
105
116
  parseOpenRequest,
106
117
  parsePinnedMenuDocuments,
107
118
  parseSpeechAudioChunk,
@@ -122,5 +133,6 @@ export {
122
133
  parseSpeechSynthesizeRequest,
123
134
  parseSpeechTranscribeRequest,
124
135
  parseSpeechTranscript,
125
- parseSpeechVoiceInfo
136
+ parseSpeechVoiceInfo,
137
+ parseSupportMailtoUrl
126
138
  };
package/dist/index.d.ts CHANGED
@@ -7,10 +7,10 @@ export { IndexedDBContentContainer, IndexedDBFileSystemProvider, IndexedDBFileSy
7
7
  export { NativeFileSystemMovePathState, NativeFileSystemMoveRecoveryError, NativeFileSystemMoveRecoveryState, NativeFileSystemProvider, NativeFileSystemProviderV2, isNativeFileSystemSupported, loadDirectoryHandle, openNativeFolder, removeDirectoryHandle, restoreNativeFolder, storeDirectoryHandle } from './filesystem/native.js';
8
8
  export { ElectronFileSystemProvider, ElectronFileSystemProviderV2 } from './filesystem/electron.js';
9
9
  export { DOCUMENT_RECOVERY_JOURNAL_SCHEMA_VERSION, DOCUMENT_RECOVERY_JOURNAL_STORAGE_KEY, DocumentCommitConflictError, DocumentCommitRequest, DocumentCommitResult, DocumentCommitTarget, DocumentConflictStrategy, DocumentExternalChangeResult, DocumentExternalSnapshot, DocumentExternalVersion, DocumentRecoveryAcknowledgement, DocumentRecoveryJournal, DocumentRecoveryJournalOptions, DocumentRecoveryRecord, DocumentRecoveryStorage, DocumentRecoveryWrite, DocumentRecoveryWriteFailure, DocumentRecoveryWriteResult, DocumentSaveReason, DocumentSession, DocumentSessionConflict, DocumentSessionConflictError, DocumentSessionEditScope, DocumentSessionLifecycle, DocumentSessionOptions, DocumentSessionSnapshot, DocumentSessionStatus, DocumentSessionTransition, FileSystemDocumentTargetOptions, createFileSystemDocumentTarget, getDefaultDocumentRecoveryStorage } from './document/index.js';
10
- export { D as DEFAULT_WORKSPACE_ID, E as ElectronWorkspaceReconciliation, T as TransientOrigin, W as WorkspaceDescriptor, e as ensureDefaultWorkspace, g as getTransientWorkspace, a as getWorkspace, l as listWorkspaces, p as parsePersistedWorkspaceList, r as reconcileElectronWorkspaceDescriptors, b as registerTransientWorkspace, c as removeWorkspace, s as saveWorkspace, t as touchWorkspace, u as unregisterTransientWorkspace } from './reconcile-electron-Bz-iAY_B.js';
11
- export { AI_WIRE_LIMITS, EXPORT_TRANSFER_LIMITS, HOST_WIRE_LIMITS, MAX_HOST_PINNED_DOCUMENTS, SPEECH_WIRE_LIMITS, getDocBlocksHost, getHostCapabilities, getHostEnvironment, hasDocBlocksHost, hostSupports, isBoundedBytePayload, isBoundedString, isElectronHost, isSpeechModelId, isTrustedRendererUrl, maybeGetDocBlocksHost, parseAiChatEvent, parseAiChatProgress, parseAiChatRequest, parseAiError, parseAiModelDownloadInfo, parseAiModelDownloadInfoList, parseAiModelInfo, parseAiModelInfoList, parseAiModelInstallEvent, parseAiPreferences, parseAiPreferencesPatch, parseAiProgress, parseAiStatus, parseExternalHttpUrl, parseOpenRequest, parsePinnedMenuDocuments, parseSpeechAudioChunk, parseSpeechCatalog, parseSpeechError, parseSpeechInstallEvent, parseSpeechModelInfo, parseSpeechModelKind, parseSpeechNullResult, parseSpeechPreferences, parseSpeechPreferencesPatch, parseSpeechProgress, parseSpeechReadiness, parseSpeechResult, parseSpeechStatus, parseSpeechSynthesisSummary, parseSpeechSynthesizeEvent, parseSpeechSynthesizeRequest, parseSpeechTranscribeRequest, parseSpeechTranscript, parseSpeechVoiceInfo } from './host/index.js';
10
+ export { D as DEFAULT_WORKSPACE_ID, E as ElectronWorkspaceReconciliation, T as TransientOrigin, W as WorkspaceDescriptor, e as ensureDefaultWorkspace, g as getTransientWorkspace, a as getWorkspace, l as listWorkspaces, p as parsePersistedWorkspaceList, r as reconcileElectronWorkspaceDescriptors, b as registerTransientWorkspace, c as removeWorkspace, s as saveWorkspace, t as touchWorkspace, u as unregisterTransientWorkspace } from './reconcile-electron-CwPGhW5-.js';
11
+ export { AI_WIRE_LIMITS, EXPORT_TRANSFER_LIMITS, HOST_WIRE_LIMITS, MAX_HOST_PINNED_DOCUMENTS, SPEECH_WIRE_LIMITS, SUPPORT_EMAIL_ADDRESS, getDocBlocksHost, getHostCapabilities, getHostEnvironment, hasDocBlocksHost, hostSupports, isBoundedBytePayload, isBoundedString, isElectronHost, isSpeechModelId, isTrustedRendererUrl, maybeGetDocBlocksHost, parseAiChatEvent, parseAiChatKnowledge, parseAiChatProgress, parseAiChatRequest, parseAiError, parseAiFactCheck, parseAiFactCheckRequest, parseAiModelDownloadInfo, parseAiModelDownloadInfoList, parseAiModelInfo, parseAiModelInfoList, parseAiModelInstallEvent, parseAiPreferences, parseAiPreferencesPatch, parseAiProgress, parseAiStatus, parseExternalHttpUrl, parseOpenExternalUrl, parseOpenRequest, parsePinnedMenuDocuments, parseSpeechAudioChunk, parseSpeechCatalog, parseSpeechError, parseSpeechInstallEvent, parseSpeechModelInfo, parseSpeechModelKind, parseSpeechNullResult, parseSpeechPreferences, parseSpeechPreferencesPatch, parseSpeechProgress, parseSpeechReadiness, parseSpeechResult, parseSpeechStatus, parseSpeechSynthesisSummary, parseSpeechSynthesizeEvent, parseSpeechSynthesizeRequest, parseSpeechTranscribeRequest, parseSpeechTranscript, parseSpeechVoiceInfo, parseSupportMailtoUrl } from './host/index.js';
12
12
  export { SHARED_DOCUMENT_LIMITS, SharedDocumentHashParseResult, SharedDocumentMode, SharedDocumentPayload, createSharedDocumentHash, createSharedDocumentUrl, parseSharedDocumentHash } from './share/index.js';
13
- export { A as AiChatCompletion, a as AiChatEvent, b as AiChatHandle, c as AiChatMessage, d as AiChatProgress, e as AiChatPurpose, f as AiChatRequest, g as AiConnectionStep, h as AiEnsureWorkspaceHandle, i as AiError, j as AiErrorCode, k as AiImageRequest, l as AiImageResult, m as AiKnowledgeAPI, n as AiKnowledgeAction, o as AiKnowledgeCatalog, p as AiKnowledgeState, q as AiModelDownloadInfo, r as AiModelFit, s as AiModelInfo, t as AiModelInstallEvent, u as AiModelInstallHandle, v as AiPreferences, w as AiPreferencesPatch, x as AiProgress, y as AiProviderInfo, z as AiResult, B as AiReviewMode, C as AiSearchHit, D as AiSearchQuery, E as AiSearchResult, F as AiSpeechAudio, G as AiStatus, H as AiSynthesizeRequest, I as AiTranscribeRequest, J as AiTranscript, K as AiUnavailableReason, L as DocBlocksHostAPI, M as DocBlocksHostAiAPI, N as DocBlocksHostClipboardAPI, O as DocBlocksHostExportAPI, P as DocBlocksHostExternalAPI, Q as DocBlocksHostFfmpegAPI, R as DocBlocksHostFsAPI, S as DocBlocksHostGitAPI, T as DocBlocksHostLifecycleAPI, U as DocBlocksHostMenuAPI, V as DocBlocksHostShellAPI, W as DocBlocksHostSpeechAPI, X as DocBlocksHostUpdaterAPI, Y as DocBlocksHostWorkspacesAPI, Z as ElectronWorkspaceInfo, _ as ExternalBinaryCommitResult, $ as GitBranchInfo, a0 as GitCapabilities, a1 as GitCloneHandle, a2 as GitCloneProgress, a3 as GitError, a4 as GitErrorCode, a5 as GitFileAtRevision, a6 as GitFileChange, a7 as GitFileStatusCode, a8 as GitLogEntry, a9 as GitLogOptions, aa as GitRemoteInfo, ab as GitRepoDetection, ac as GitResult, ad as GitRevision, ae as GitStatus, af as HOST_PLATFORMS, ag as HOST_SURFACE_KINDS, ah as HostCapabilities, ai as HostCloseReason, aj as HostEnvironment, ak as HostExportTargetGrant, al as HostPinnedDocument, am as HostPlatform, an as HostPrepareCloseRequest, ao as HostPrepareCloseResult, ap as HostSurfaceKind, aq as MenuCommand, ar as NO_HOST_CAPABILITIES, as as OpenRequest, at as SpeechAudioChunk, au as SpeechCatalog, av as SpeechError, aw as SpeechErrorCode, ax as SpeechInstallEvent, ay as SpeechInstallHandle, az as SpeechModelInfo, aA as SpeechModelKind, aB as SpeechPreferences, aC as SpeechPreferencesPatch, aD as SpeechProgress, aE as SpeechReadiness, aF as SpeechReadinessState, aG as SpeechResult, aH as SpeechSegment, aI as SpeechStatus, aJ as SpeechSynthesisHandle, aK as SpeechSynthesisSummary, aL as SpeechSynthesizeEvent, aM as SpeechSynthesizeRequest, aN as SpeechTranscribeRequest, aO as SpeechTranscript, aP as SpeechVoiceInfo, aQ as SpeechWordTiming, aR as UpdateCheckResult, aS as UpdateInstallResult, aT as UpdaterStatus, aU as deriveHostCapabilities, aV as parseAiKnowledgeAction, aW as parseAiKnowledgeState, aX as parseHostEnvironment } from './capabilities-BJEkIsO1.js';
13
+ export { A as AiChatCompletion, a as AiChatEvent, b as AiChatHandle, c as AiChatKnowledge, d as AiChatKnowledgeSource, e as AiChatMessage, f as AiChatProgress, g as AiChatPurpose, h as AiChatRequest, i as AiConnectionStep, j as AiEnsureWorkspaceHandle, k as AiError, l as AiErrorCode, m as AiFactCheck, n as AiFactCheckRequest, o as AiFactCheckSentence, p as AiImageRequest, q as AiImageResult, r as AiKnowledgeAPI, s as AiKnowledgeAction, t as AiKnowledgeCatalog, u as AiKnowledgeState, v as AiModelDownloadInfo, w as AiModelFit, x as AiModelInfo, y as AiModelInstallEvent, z as AiModelInstallHandle, B as AiPreferences, C as AiPreferencesPatch, D as AiProgress, E as AiProviderInfo, F as AiResponseFormat, G as AiResult, H as AiReviewMode, I as AiSearchHit, J as AiSearchQuery, K as AiSearchResult, L as AiSpeechAudio, M as AiStatus, N as AiSynthesizeRequest, O as AiTranscribeRequest, P as AiTranscript, Q as AiUnavailableReason, R as DocBlocksHostAPI, S as DocBlocksHostAiAPI, T as DocBlocksHostClipboardAPI, U as DocBlocksHostExportAPI, V as DocBlocksHostExternalAPI, W as DocBlocksHostFfmpegAPI, X as DocBlocksHostFsAPI, Y as DocBlocksHostGitAPI, Z as DocBlocksHostLifecycleAPI, _ as DocBlocksHostMenuAPI, $ as DocBlocksHostShellAPI, a0 as DocBlocksHostSpeechAPI, a1 as DocBlocksHostUpdaterAPI, a2 as DocBlocksHostWorkspacesAPI, a3 as ElectronWorkspaceInfo, a4 as ExternalBinaryCommitResult, a5 as GitBranchInfo, a6 as GitCapabilities, a7 as GitCloneHandle, a8 as GitCloneProgress, a9 as GitError, aa as GitErrorCode, ab as GitFileAtRevision, ac as GitFileChange, ad as GitFileStatusCode, ae as GitLogEntry, af as GitLogOptions, ag as GitRemoteInfo, ah as GitRepoDetection, ai as GitResult, aj as GitRevision, ak as GitStatus, al as HOST_PLATFORMS, am as HOST_SURFACE_KINDS, an as HostCapabilities, ao as HostCloseReason, ap as HostEnvironment, aq as HostExportTargetGrant, ar as HostPinnedDocument, as as HostPlatform, at as HostPrepareCloseRequest, au as HostPrepareCloseResult, av as HostSurfaceKind, aw as MenuCommand, ax as NO_HOST_CAPABILITIES, ay as OpenRequest, az as SpeechAudioChunk, aA as SpeechCatalog, aB as SpeechError, aC as SpeechErrorCode, aD as SpeechInstallEvent, aE as SpeechInstallHandle, aF as SpeechModelInfo, aG as SpeechModelKind, aH as SpeechPreferences, aI as SpeechPreferencesPatch, aJ as SpeechProgress, aK as SpeechReadiness, aL as SpeechReadinessState, aM as SpeechResult, aN as SpeechSegment, aO as SpeechStatus, aP as SpeechSynthesisHandle, aQ as SpeechSynthesisSummary, aR as SpeechSynthesizeEvent, aS as SpeechSynthesizeRequest, aT as SpeechTranscribeRequest, aU as SpeechTranscript, aV as SpeechVoiceInfo, aW as SpeechWordTiming, aX as UpdateCheckResult, aY as UpdateInstallResult, aZ as UpdaterStatus, a_ as deriveHostCapabilities, a$ as parseAiKnowledgeAction, b0 as parseAiKnowledgeState, b1 as parseHostEnvironment } from './capabilities-DJ7X9EOt.js';
14
14
  export { D as DocBlocksHostFsV2API, E as ELECTRON_FILE_SYSTEM_V2_CAPABILITIES, F as FILE_SYSTEM_TRANSFER_LIMITS, H as HostFileSystemReadTransfer, a as HostFileSystemV2OpenRequest, b as HostFileSystemV2Result, c as HostFileSystemV2WatchMessage } from './filesystem-v2-CXdAPR27.js';
15
15
  import '@bendyline/squisq/markdown';
16
16
  import '@bendyline/squisq/storage';
package/dist/index.js CHANGED
@@ -68,8 +68,8 @@ import "./chunk-3GSMJ4MQ.js";
68
68
  import {
69
69
  ElectronFileSystemProvider,
70
70
  ElectronFileSystemProviderV2
71
- } from "./chunk-PSGAZKWO.js";
72
- import "./chunk-7LPIGCBG.js";
71
+ } from "./chunk-56QRV45P.js";
72
+ import "./chunk-45XD424D.js";
73
73
  import {
74
74
  AI_WIRE_LIMITS,
75
75
  ELECTRON_FILE_SYSTEM_V2_CAPABILITIES,
@@ -88,9 +88,12 @@ import {
88
88
  isSpeechModelId,
89
89
  maybeGetDocBlocksHost,
90
90
  parseAiChatEvent,
91
+ parseAiChatKnowledge,
91
92
  parseAiChatProgress,
92
93
  parseAiChatRequest,
93
94
  parseAiError,
95
+ parseAiFactCheck,
96
+ parseAiFactCheckRequest,
94
97
  parseAiKnowledgeAction,
95
98
  parseAiKnowledgeState,
96
99
  parseAiModelDownloadInfo,
@@ -122,19 +125,22 @@ import {
122
125
  parseSpeechTranscribeRequest,
123
126
  parseSpeechTranscript,
124
127
  parseSpeechVoiceInfo
125
- } from "./chunk-KXQDMZFH.js";
128
+ } from "./chunk-P4VIU7MB.js";
126
129
  import "./chunk-245W57QP.js";
127
130
  import {
128
131
  EXPORT_TRANSFER_LIMITS,
129
132
  HOST_WIRE_LIMITS,
130
133
  MAX_HOST_PINNED_DOCUMENTS,
134
+ SUPPORT_EMAIL_ADDRESS,
131
135
  isBoundedBytePayload,
132
136
  isBoundedString,
133
137
  isTrustedRendererUrl,
134
138
  parseExternalHttpUrl,
139
+ parseOpenExternalUrl,
135
140
  parseOpenRequest,
136
- parsePinnedMenuDocuments
137
- } from "./chunk-46AGYHDY.js";
141
+ parsePinnedMenuDocuments,
142
+ parseSupportMailtoUrl
143
+ } from "./chunk-V5SWLUZY.js";
138
144
  import "./chunk-73OOROXH.js";
139
145
  import "./chunk-HABG2JM3.js";
140
146
  import {
@@ -221,6 +227,7 @@ export {
221
227
  SHARED_DOCUMENT_LIMITS,
222
228
  SPEECH_WIRE_LIMITS,
223
229
  SQUISQ_RUNTIME_DIRECTORY_NAME,
230
+ SUPPORT_EMAIL_ADDRESS,
224
231
  WORKSPACE_ROOT,
225
232
  createDbkWorkspaceSnapshot,
226
233
  createFileMediaProvider,
@@ -271,9 +278,12 @@ export {
271
278
  moveFileSystemEntry,
272
279
  openNativeFolder,
273
280
  parseAiChatEvent,
281
+ parseAiChatKnowledge,
274
282
  parseAiChatProgress,
275
283
  parseAiChatRequest,
276
284
  parseAiError,
285
+ parseAiFactCheck,
286
+ parseAiFactCheckRequest,
277
287
  parseAiKnowledgeAction,
278
288
  parseAiKnowledgeState,
279
289
  parseAiModelDownloadInfo,
@@ -288,6 +298,7 @@ export {
288
298
  parseExternalHttpUrl,
289
299
  parseFileSystemVersion,
290
300
  parseHostEnvironment,
301
+ parseOpenExternalUrl,
291
302
  parseOpenRequest,
292
303
  parsePersistedWorkspaceList,
293
304
  parsePinnedMenuDocuments,
@@ -311,6 +322,7 @@ export {
311
322
  parseSpeechTranscribeRequest,
312
323
  parseSpeechTranscript,
313
324
  parseSpeechVoiceInfo,
325
+ parseSupportMailtoUrl,
314
326
  parseWorkspacePath,
315
327
  reconcileElectronWorkspaceDescriptors,
316
328
  registerTransientWorkspace,
@@ -1,5 +1,5 @@
1
1
  import { d as FileSystemProvider } from './types-DLteNrK0.js';
2
- import { Z as ElectronWorkspaceInfo, aj as HostEnvironment } from './capabilities-BJEkIsO1.js';
2
+ import { a3 as ElectronWorkspaceInfo, ap as HostEnvironment } from './capabilities-DJ7X9EOt.js';
3
3
 
4
4
  /**
5
5
  * Origin of a transient workspace — records where its contents came from and
@@ -5,7 +5,7 @@ import {
5
5
  import {
6
6
  HOST_WIRE_LIMITS,
7
7
  isBoundedString
8
- } from "../chunk-46AGYHDY.js";
8
+ } from "../chunk-V5SWLUZY.js";
9
9
  import "../chunk-UTH3HYCZ.js";
10
10
 
11
11
  // src/vscode/messages.ts
@@ -1,9 +1,9 @@
1
- export { D as DEFAULT_WORKSPACE_ID, E as ElectronWorkspaceReconciliation, T as TransientOrigin, W as WorkspaceDescriptor, e as ensureDefaultWorkspace, g as getTransientWorkspace, a as getWorkspace, l as listWorkspaces, p as parsePersistedWorkspaceList, r as reconcileElectronWorkspaceDescriptors, b as registerTransientWorkspace, c as removeWorkspace, s as saveWorkspace, t as touchWorkspace, u as unregisterTransientWorkspace } from '../reconcile-electron-Bz-iAY_B.js';
1
+ export { D as DEFAULT_WORKSPACE_ID, E as ElectronWorkspaceReconciliation, T as TransientOrigin, W as WorkspaceDescriptor, e as ensureDefaultWorkspace, g as getTransientWorkspace, a as getWorkspace, l as listWorkspaces, p as parsePersistedWorkspaceList, r as reconcileElectronWorkspaceDescriptors, b as registerTransientWorkspace, c as removeWorkspace, s as saveWorkspace, t as touchWorkspace, u as unregisterTransientWorkspace } from '../reconcile-electron-CwPGhW5-.js';
2
2
  import { ContentContainer } from '@bendyline/squisq/storage';
3
3
  import { o as FileSystemProviderV2 } from '../v2-DwxWjFC0.js';
4
4
  import { a as WorkspacePath } from '../workspace-path-CWVrcuPL.js';
5
5
  import '../types-DLteNrK0.js';
6
- import '../capabilities-BJEkIsO1.js';
6
+ import '../capabilities-DJ7X9EOt.js';
7
7
  import '../filesystem-v2-CXdAPR27.js';
8
8
 
9
9
  declare const WORKSPACE_BACKUP_MANIFEST = "docblocks-backup.json";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/docblocks",
3
- "version": "2.7.4",
3
+ "version": "2.7.6",
4
4
  "description": "Core data structures and filesystem abstractions for DocBlocks",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",
@@ -126,7 +126,7 @@
126
126
  "typecheck": "tsc --noEmit"
127
127
  },
128
128
  "dependencies": {
129
- "@bendyline/squisq": "2.12.5",
129
+ "@bendyline/squisq": "2.13.0",
130
130
  "zod": "3.25.76"
131
131
  }
132
132
  }