@tutti-os/workspace-external-core 0.0.17 → 0.0.19

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.
@@ -40,4 +40,4 @@ export {
40
40
  tuttiExternalWorkspaceAgentProviders,
41
41
  tuttiExternalLogLevels
42
42
  };
43
- //# sourceMappingURL=chunk-J53NLKKO.js.map
43
+ //# sourceMappingURL=chunk-6YUXMH6C.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contracts/index.ts"],"sourcesContent":["import type { WorkspaceFileReference } from \"@tutti-os/workspace-file-reference/contracts\";\nimport type {\n WorkspaceUserProject,\n WorkspaceUserProjectDefaultSelection,\n WorkspaceUserProjectPathCheck,\n WorkspaceUserProjectSelectionPreparation,\n WorkspaceUserProjectSelectionPreparationInput,\n WorkspaceUserProjectServiceSnapshot\n} from \"@tutti-os/workspace-user-project/contracts\";\n\nexport const TUTTI_EXTERNAL_AT_PROVIDER_IDS = {\n agentGeneratedFile: \"agent-generated-file\",\n agentSession: \"agent-session\",\n file: \"file\",\n workspaceApp: \"workspace-app\",\n workspaceIssue: \"workspace-issue\"\n} as const;\n\nexport type TuttiExternalAtProviderId =\n (typeof TUTTI_EXTERNAL_AT_PROVIDER_IDS)[keyof typeof TUTTI_EXTERNAL_AT_PROVIDER_IDS];\n\nexport const tuttiExternalAtProviderIds = [\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.file,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.workspaceIssue,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.workspaceApp,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.agentSession,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.agentGeneratedFile\n] as const satisfies readonly TuttiExternalAtProviderId[];\n\nexport interface TuttiExternalAtQueryInput {\n keyword: string;\n maxResults?: number;\n providers?: readonly TuttiExternalAtProviderId[];\n}\n\nexport interface TuttiExternalAtQueryResult {\n providerId: TuttiExternalAtProviderId;\n itemId: string;\n label: string;\n subtitle?: string;\n thumbnailUrl?: string | null;\n insert: TuttiExternalAtInsertResult;\n}\n\nexport interface TuttiExternalAtMentionPresentation {\n agentProviderId?: string;\n agentIconUrl?: string;\n iconUrl?: string;\n thumbnailUrl?: string;\n subtitle?: string;\n description?: string;\n participant?: string;\n status?: string;\n statusDataStatus?: string;\n statusLabel?: string;\n statusPulse?: string;\n userAvatarPlaceholderUrl?: string;\n}\n\nexport type TuttiExternalAtInsertResult =\n | {\n kind: \"mention\";\n mention: {\n entityId: string;\n label: string;\n scope?: Record<string, string>;\n presentation?: TuttiExternalAtMentionPresentation;\n };\n }\n | {\n kind: \"markdown-link\";\n label: string;\n href: string;\n }\n | {\n kind: \"text\";\n text: string;\n };\n\nexport interface TuttiExternalFileSelectInput {\n multiple?: boolean;\n}\n\nexport type TuttiExternalFileSelectResult = WorkspaceFileReference[];\n\nexport interface TuttiExternalFileOpenInput {\n mode?: \"auto\" | \"preview\" | \"reveal\";\n mtimeMs?: number | null;\n name?: string;\n path: string;\n sizeBytes?: number | null;\n}\n\nexport const tuttiExternalManagedAiModelProviderIds = [\n \"agnes\",\n \"openai\",\n \"anthropic\"\n] as const;\n\nexport type TuttiExternalManagedAiModelProviderId =\n (typeof tuttiExternalManagedAiModelProviderIds)[number];\n\nexport interface TuttiExternalManagedAiModel {\n id: string;\n name?: string;\n provider: TuttiExternalManagedAiModelProviderId;\n}\n\nexport interface TuttiExternalPermissionRequestInput {\n permission: \"managed-ai-models\";\n nonce: string;\n providers?: readonly TuttiExternalManagedAiModelProviderId[];\n scopes: readonly string[];\n state: string;\n}\n\nexport interface TuttiExternalPermissionRequestResult {\n code: string;\n contextToken?: string;\n expiresAt?: string;\n models?: readonly TuttiExternalManagedAiModel[];\n providers?: readonly TuttiExternalManagedAiModelProviderId[];\n}\n\nexport interface TuttiExternalSettingsOpenInput {\n provider?: TuttiExternalManagedAiModelProviderId;\n tab?: \"models\";\n}\n\nexport type TuttiExternalWorkspaceFeature =\n | \"app-center\"\n | \"issue-manager\"\n | \"message-center\"\n | \"agent-connect\"\n | \"agent-chat\";\n\nexport const tuttiExternalWorkspaceAgentProviders = [\n \"claude-code\",\n \"codex\",\n \"nexight\",\n \"hermes\",\n \"gemini\",\n \"openclaw\"\n] as const;\n\nexport type TuttiExternalWorkspaceAgentProvider =\n (typeof tuttiExternalWorkspaceAgentProviders)[number];\n\nexport interface TuttiExternalWorkspaceOpenFeatureInput {\n autoSubmit?: boolean;\n draftPrompt?: string;\n feature: TuttiExternalWorkspaceFeature;\n provider?: TuttiExternalWorkspaceAgentProvider;\n}\n\nexport interface TuttiExternalReferenceOpenInput {\n href: string;\n}\n\nexport interface TuttiExternalUserProjectCreateInput {\n name: string;\n}\n\nexport interface TuttiExternalUserProjectPathInput {\n path: string;\n}\n\nexport interface TuttiExternalUserProjectRememberDefaultSelectionInput {\n path: string | null;\n}\n\nexport const tuttiExternalLogLevels = [\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n] as const;\n\nexport type TuttiExternalLogLevel = (typeof tuttiExternalLogLevels)[number];\n\nexport interface TuttiExternalLogInput {\n details?: Record<string, unknown>;\n event: string;\n level?: TuttiExternalLogLevel;\n}\n\nexport interface TuttiExternalPdfMargin {\n bottom?: string;\n left?: string;\n right?: string;\n top?: string;\n}\n\nexport type TuttiExternalPdfPageSize =\n | \"A4\"\n | \"Letter\"\n | {\n height: number;\n width: number;\n };\n\nexport interface TuttiExternalPdfPrintHtmlInput {\n baseUrl?: string;\n html: string;\n margin?: TuttiExternalPdfMargin;\n pageSize?: TuttiExternalPdfPageSize;\n preferCSSPageSize?: boolean;\n printBackground?: boolean;\n title?: string;\n}\n\nexport interface TuttiExternalPdfPrintHtmlResult {\n bytes: Uint8Array;\n}\n\nexport interface TuttiExternalBridge {\n app: {\n getContext(): Promise<unknown>;\n subscribe(listener: (context: unknown) => void): () => void;\n };\n at: {\n query(\n input: TuttiExternalAtQueryInput\n ): Promise<TuttiExternalAtQueryResult[]>;\n };\n files: {\n select(\n input?: TuttiExternalFileSelectInput\n ): Promise<TuttiExternalFileSelectResult>;\n open(input: TuttiExternalFileOpenInput): Promise<void>;\n };\n permissions: {\n request(\n input: TuttiExternalPermissionRequestInput\n ): Promise<TuttiExternalPermissionRequestResult>;\n };\n settings: {\n open(input?: TuttiExternalSettingsOpenInput): Promise<void>;\n };\n workspace: {\n openFeature(input: TuttiExternalWorkspaceOpenFeatureInput): Promise<void>;\n };\n references: {\n open(input: TuttiExternalReferenceOpenInput): Promise<void>;\n };\n pdf: {\n printHtmlToPdf(\n input: TuttiExternalPdfPrintHtmlInput\n ): Promise<TuttiExternalPdfPrintHtmlResult>;\n };\n userProjects: {\n checkPath(\n input: TuttiExternalUserProjectPathInput\n ): Promise<WorkspaceUserProjectPathCheck>;\n create(\n input: TuttiExternalUserProjectCreateInput\n ): Promise<WorkspaceUserProject>;\n getDefaultSelection(): Promise<WorkspaceUserProjectDefaultSelection | null>;\n getSnapshot(): Promise<WorkspaceUserProjectServiceSnapshot>;\n list(): Promise<{ projects: WorkspaceUserProject[] }>;\n prepareSelection(\n input: WorkspaceUserProjectSelectionPreparationInput\n ): Promise<WorkspaceUserProjectSelectionPreparation>;\n refresh(): Promise<WorkspaceUserProjectServiceSnapshot>;\n rememberDefaultSelection(\n input: TuttiExternalUserProjectRememberDefaultSelectionInput\n ): Promise<void>;\n selectDirectory(): Promise<{ path: string } | null>;\n /**\n * Subscribes to user-project snapshots. Implementations replay the latest\n * known snapshot after registration, then emit future snapshots.\n */\n subscribe(\n listener: (snapshot: WorkspaceUserProjectServiceSnapshot) => void\n ): () => void;\n use(\n input: TuttiExternalUserProjectPathInput\n ): Promise<WorkspaceUserProject>;\n };\n logs: {\n write(input: TuttiExternalLogInput): void;\n };\n}\n\nexport type TuttiExternalRendererRequest =\n | {\n appId: string;\n input: TuttiExternalAtQueryInput;\n operation: \"at.query\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalFileSelectInput;\n operation: \"files.select\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalFileOpenInput;\n operation: \"files.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalSettingsOpenInput;\n operation: \"settings.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalReferenceOpenInput;\n operation: \"references.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectPathInput;\n operation: \"userProjects.checkPath\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectCreateInput;\n operation: \"userProjects.create\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.getDefaultSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.getSnapshot\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.list\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: WorkspaceUserProjectSelectionPreparationInput;\n operation: \"userProjects.prepareSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.refresh\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectRememberDefaultSelectionInput;\n operation: \"userProjects.rememberDefaultSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.selectDirectory\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectPathInput;\n operation: \"userProjects.use\";\n requestId: string;\n workspaceId: string;\n };\n"],"mappings":";AAUO,IAAM,iCAAiC;AAAA,EAC5C,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,MAAM;AAAA,EACN,cAAc;AAAA,EACd,gBAAgB;AAClB;AAKO,IAAM,6BAA6B;AAAA,EACxC,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AACjC;AAkEO,IAAM,yCAAyC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF;AAuCO,IAAM,uCAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA4BO,IAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -2,7 +2,7 @@ import {
2
2
  tuttiExternalAtProviderIds,
3
3
  tuttiExternalManagedAiModelProviderIds,
4
4
  tuttiExternalWorkspaceAgentProviders
5
- } from "./chunk-J53NLKKO.js";
5
+ } from "./chunk-6YUXMH6C.js";
6
6
 
7
7
  // src/core/index.ts
8
8
  var tuttiExternalAtMaxResultsLimit = 50;
@@ -165,6 +165,7 @@ function normalizeTuttiExternalPdfPrintHtmlInput(input) {
165
165
  ...title ? { title } : {},
166
166
  ...input.printBackground === false ? { printBackground: false } : {},
167
167
  ...input.pageSize !== void 0 && input.pageSize !== null ? { pageSize: normalizePdfPageSize(input.pageSize) } : {},
168
+ ...input.preferCSSPageSize === true ? { preferCSSPageSize: true } : {},
168
169
  ...input.margin !== void 0 && input.margin !== null ? { margin: normalizePdfMargin(input.margin) } : {}
169
170
  };
170
171
  }
@@ -335,8 +336,21 @@ function normalizePdfPageSize(value) {
335
336
  if (value === "A4" || value === "Letter") {
336
337
  return value;
337
338
  }
339
+ if (isRecord(value)) {
340
+ const width = normalizePdfPageSizeSide(value.width, "width");
341
+ const height = normalizePdfPageSizeSide(value.height, "height");
342
+ return { width, height };
343
+ }
338
344
  throw new Error("pdf.printHtmlToPdf pageSize is unsupported.");
339
345
  }
346
+ function normalizePdfPageSizeSide(value, side) {
347
+ if (typeof value !== "number" || !Number.isFinite(value) || value <= 0) {
348
+ throw new Error(
349
+ `pdf.printHtmlToPdf pageSize ${side} must be a positive number.`
350
+ );
351
+ }
352
+ return value;
353
+ }
340
354
  function normalizePdfMargin(value) {
341
355
  if (!isRecord(value)) {
342
356
  throw new Error("pdf.printHtmlToPdf margin must be an object.");
@@ -420,4 +434,4 @@ export {
420
434
  isTuttiExternalWorkspaceFeature,
421
435
  isTuttiExternalWorkspaceAgentProvider
422
436
  };
423
- //# sourceMappingURL=chunk-LGELOEVW.js.map
437
+ //# sourceMappingURL=chunk-XSX77OLM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/index.ts"],"sourcesContent":["import {\n tuttiExternalManagedAiModelProviderIds,\n tuttiExternalAtProviderIds,\n tuttiExternalWorkspaceAgentProviders,\n type TuttiExternalAtProviderId,\n type TuttiExternalAtQueryInput,\n type TuttiExternalFileOpenInput,\n type TuttiExternalFileSelectInput,\n type TuttiExternalLogInput,\n type TuttiExternalLogLevel,\n type TuttiExternalManagedAiModelProviderId,\n type TuttiExternalPermissionRequestInput,\n type TuttiExternalPdfMargin,\n type TuttiExternalPdfPrintHtmlInput,\n type TuttiExternalReferenceOpenInput,\n type TuttiExternalSettingsOpenInput,\n type TuttiExternalUserProjectCreateInput,\n type TuttiExternalUserProjectPathInput,\n type TuttiExternalUserProjectRememberDefaultSelectionInput,\n type TuttiExternalWorkspaceAgentProvider,\n type TuttiExternalWorkspaceFeature,\n type TuttiExternalWorkspaceOpenFeatureInput\n} from \"../contracts/index.ts\";\nimport type { WorkspaceUserProjectSelectionPreparationInput } from \"@tutti-os/workspace-user-project/contracts\";\n\nexport {\n tuttiExternalAtProviderIds,\n tuttiExternalManagedAiModelProviderIds,\n tuttiExternalWorkspaceAgentProviders\n} from \"../contracts/index.ts\";\n\nexport const tuttiExternalAtMaxResultsLimit = 50;\nexport const tuttiExternalAtDefaultMaxResults = 20;\nexport const tuttiExternalLogDiagnosticTextLimit = 8_000;\nexport const tuttiExternalWorkspaceFeatures = [\n \"app-center\",\n \"issue-manager\",\n \"message-center\",\n \"agent-connect\",\n \"agent-chat\"\n] as const satisfies readonly TuttiExternalWorkspaceFeature[];\n\nexport function limitDiagnosticText(\n value: string | undefined\n): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n return trimmed.length > tuttiExternalLogDiagnosticTextLimit\n ? `${trimmed.slice(0, tuttiExternalLogDiagnosticTextLimit)}...`\n : trimmed;\n}\n\nexport function normalizeTuttiExternalLogInput(\n input: unknown\n): TuttiExternalLogInput {\n if (!isRecord(input)) {\n throw new Error(\"logs.write input must be an object.\");\n }\n\n const event = limitDiagnosticText(\n normalizeRequiredString(input.event, \"logs.write event\")\n );\n if (!event) {\n throw new Error(\"logs.write event is required.\");\n }\n\n return {\n event,\n ...(input.level !== undefined && input.level !== null\n ? { level: normalizeTuttiExternalLogLevel(input.level) }\n : {}),\n ...(input.details !== undefined && input.details !== null\n ? { details: normalizeTuttiExternalLogDetails(input.details) }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalAtQueryInput(\n input: unknown\n): TuttiExternalAtQueryInput {\n if (!isRecord(input)) {\n throw new Error(\"at.query input must be an object.\");\n }\n\n const keywordValue = input.keyword;\n if (typeof keywordValue !== \"string\") {\n throw new Error(\"at.query keyword is required.\");\n }\n\n return {\n keyword: keywordValue,\n maxResults: normalizeMaxResults(input.maxResults),\n providers: normalizeProviders(input.providers)\n };\n}\n\nexport function normalizeTuttiExternalFileSelectInput(\n input: unknown\n): TuttiExternalFileSelectInput {\n if (input === undefined || input === null) {\n return {};\n }\n if (!isRecord(input)) {\n throw new Error(\"files.select input must be an object.\");\n }\n return {\n multiple: input.multiple === true\n };\n}\n\nexport function normalizeTuttiExternalFileOpenInput(\n input: unknown\n): TuttiExternalFileOpenInput {\n if (!isRecord(input)) {\n throw new Error(\"files.open input must be an object.\");\n }\n if (typeof input.path !== \"string\" || input.path.trim() === \"\") {\n throw new Error(\"files.open path is required.\");\n }\n const mode = normalizeFileOpenMode(input.mode);\n return {\n ...(mode ? { mode } : {}),\n ...(typeof input.mtimeMs === \"number\" || input.mtimeMs === null\n ? { mtimeMs: input.mtimeMs }\n : {}),\n ...(typeof input.name === \"string\" && input.name.trim() !== \"\"\n ? { name: input.name.trim() }\n : {}),\n path: input.path.trim(),\n ...(typeof input.sizeBytes === \"number\" || input.sizeBytes === null\n ? { sizeBytes: input.sizeBytes }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalPermissionRequestInput(\n input: unknown\n): TuttiExternalPermissionRequestInput {\n if (!isRecord(input)) {\n throw new Error(\"permissions.request input must be an object.\");\n }\n if (input.permission !== \"managed-ai-models\") {\n throw new Error(\"permissions.request permission is unsupported.\");\n }\n const nonce = normalizeRequiredString(\n input.nonce,\n \"permissions.request nonce\"\n );\n const state = normalizeRequiredString(\n input.state,\n \"permissions.request state\"\n );\n const scopes = normalizeRequiredStringList(\n input.scopes,\n \"permissions.request scopes\"\n );\n if (scopes.length === 0) {\n throw new Error(\"permissions.request scopes must not be empty.\");\n }\n\n return {\n nonce,\n permission: \"managed-ai-models\",\n providers: normalizeManagedAiModelProviders(input.providers),\n scopes,\n state\n };\n}\n\nexport function normalizeTuttiExternalSettingsOpenInput(\n input: unknown\n): TuttiExternalSettingsOpenInput {\n if (input === undefined || input === null) {\n return {};\n }\n if (!isRecord(input)) {\n throw new Error(\"settings.open input must be an object.\");\n }\n if (\n input.tab !== undefined &&\n input.tab !== null &&\n input.tab !== \"\" &&\n input.tab !== \"models\"\n ) {\n throw new Error(\"settings.open tab is unsupported.\");\n }\n return {\n ...(input.provider !== undefined && input.provider !== null\n ? { provider: normalizeManagedAiModelProvider(input.provider) }\n : {}),\n ...(input.tab === \"models\" ? { tab: \"models\" as const } : {})\n };\n}\n\nexport function normalizeTuttiExternalWorkspaceOpenFeatureInput(\n input: unknown\n): TuttiExternalWorkspaceOpenFeatureInput {\n if (!isRecord(input)) {\n throw new Error(\"workspace.openFeature input must be an object.\");\n }\n const feature = input.feature;\n if (!isTuttiExternalWorkspaceFeature(feature)) {\n throw new Error(\"workspace.openFeature feature is unsupported.\");\n }\n const draftPrompt =\n typeof input.draftPrompt === \"string\" ? input.draftPrompt.trim() : \"\";\n return {\n feature,\n ...(draftPrompt ? { draftPrompt } : {}),\n ...(input.autoSubmit === true ? { autoSubmit: true } : {}),\n ...(typeof input.provider === \"string\" && input.provider.trim() !== \"\"\n ? {\n provider: normalizeTuttiExternalWorkspaceAgentProvider(input.provider)\n }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalReferenceOpenInput(\n input: unknown\n): TuttiExternalReferenceOpenInput {\n if (!isRecord(input)) {\n throw new Error(\"references.open input must be an object.\");\n }\n const href = normalizeRequiredString(input.href, \"references.open href\");\n if (!href.toLowerCase().startsWith(\"mention://\")) {\n throw new Error(\"references.open href must be a mention URL.\");\n }\n return { href };\n}\n\nexport function normalizeTuttiExternalPdfPrintHtmlInput(\n input: unknown\n): TuttiExternalPdfPrintHtmlInput {\n if (!isRecord(input)) {\n throw new Error(\"pdf.printHtmlToPdf input must be an object.\");\n }\n const html = normalizeRequiredString(input.html, \"pdf.printHtmlToPdf html\");\n const title =\n typeof input.title === \"string\" && input.title.trim() !== \"\"\n ? input.title.trim().slice(0, 200)\n : undefined;\n const baseUrl =\n typeof input.baseUrl === \"string\" && input.baseUrl.trim() !== \"\"\n ? normalizePdfBaseUrl(input.baseUrl)\n : undefined;\n return {\n html,\n ...(baseUrl ? { baseUrl } : {}),\n ...(title ? { title } : {}),\n ...(input.printBackground === false ? { printBackground: false } : {}),\n ...(input.pageSize !== undefined && input.pageSize !== null\n ? { pageSize: normalizePdfPageSize(input.pageSize) }\n : {}),\n ...(input.preferCSSPageSize === true ? { preferCSSPageSize: true } : {}),\n ...(input.margin !== undefined && input.margin !== null\n ? { margin: normalizePdfMargin(input.margin) }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalUserProjectCreateInput(\n input: unknown\n): TuttiExternalUserProjectCreateInput {\n if (!isRecord(input)) {\n throw new Error(\"userProjects.create input must be an object.\");\n }\n return {\n name: normalizeRequiredString(input.name, \"userProjects.create name\")\n };\n}\n\nexport function normalizeTuttiExternalUserProjectPathInput(\n input: unknown,\n operation: \"checkPath\" | \"use\"\n): TuttiExternalUserProjectPathInput {\n if (!isRecord(input)) {\n throw new Error(`userProjects.${operation} input must be an object.`);\n }\n return {\n path: normalizeRequiredString(input.path, `userProjects.${operation} path`)\n };\n}\n\nexport function normalizeTuttiExternalUserProjectRememberDefaultSelectionInput(\n input: unknown\n): TuttiExternalUserProjectRememberDefaultSelectionInput {\n if (!isRecord(input)) {\n throw new Error(\n \"userProjects.rememberDefaultSelection input must be an object.\"\n );\n }\n if (input.path === null || input.path === undefined) {\n return { path: null };\n }\n const path = typeof input.path === \"string\" ? input.path.trim() : \"\";\n return { path: path || null };\n}\n\nexport function normalizeTuttiExternalUserProjectSelectionPreparationInput(\n input: unknown\n): WorkspaceUserProjectSelectionPreparationInput {\n if (!isRecord(input)) {\n throw new Error(\"userProjects.prepareSelection input must be an object.\");\n }\n const selectedPath =\n typeof input.selectedPath === \"string\" ? input.selectedPath.trim() : \"\";\n return {\n projectLocked: input.projectLocked === true,\n selectedPath: selectedPath || null\n };\n}\n\nexport function isTuttiExternalAtProviderId(\n value: unknown\n): value is TuttiExternalAtProviderId {\n return (\n typeof value === \"string\" &&\n tuttiExternalAtProviderIds.includes(value as TuttiExternalAtProviderId)\n );\n}\n\nexport function isTuttiExternalManagedAiModelProviderId(\n value: unknown\n): value is TuttiExternalManagedAiModelProviderId {\n return (\n typeof value === \"string\" &&\n tuttiExternalManagedAiModelProviderIds.includes(\n value as TuttiExternalManagedAiModelProviderId\n )\n );\n}\n\nexport function isTuttiExternalWorkspaceFeature(\n value: unknown\n): value is TuttiExternalWorkspaceFeature {\n return (\n typeof value === \"string\" &&\n tuttiExternalWorkspaceFeatures.includes(\n value as TuttiExternalWorkspaceFeature\n )\n );\n}\n\nexport function isTuttiExternalWorkspaceAgentProvider(\n value: unknown\n): value is TuttiExternalWorkspaceAgentProvider {\n return (\n typeof value === \"string\" &&\n tuttiExternalWorkspaceAgentProviders.includes(\n value as TuttiExternalWorkspaceAgentProvider\n )\n );\n}\n\nfunction normalizeTuttiExternalWorkspaceAgentProvider(\n value: unknown\n): TuttiExternalWorkspaceAgentProvider {\n const provider = typeof value === \"string\" ? value.trim() : value;\n if (!isTuttiExternalWorkspaceAgentProvider(provider)) {\n throw new Error(\"workspace.openFeature provider is unsupported.\");\n }\n return provider;\n}\n\nfunction normalizeTuttiExternalLogLevel(value: unknown): TuttiExternalLogLevel {\n if (\n value === \"debug\" ||\n value === \"info\" ||\n value === \"warn\" ||\n value === \"error\"\n ) {\n return value;\n }\n throw new Error(\"logs.write level is unsupported.\");\n}\n\nfunction normalizeTuttiExternalLogDetails(\n value: unknown\n): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(\"logs.write details must be an object.\");\n }\n\n const details: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n details[key] = normalizeTuttiExternalLogDetailValue(entry);\n }\n return details;\n}\n\nfunction normalizeTuttiExternalLogDetailValue(value: unknown): unknown {\n if (typeof value === \"string\") {\n return limitDiagnosticText(value) ?? \"\";\n }\n if (value instanceof Error) {\n return {\n message: limitDiagnosticText(value.message) ?? \"\",\n name: value.name,\n stack: limitDiagnosticText(value.stack)\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTuttiExternalLogDetailValue(entry));\n }\n if (isRecord(value)) {\n return normalizeTuttiExternalLogDetails(value);\n }\n return value;\n}\n\nfunction normalizeMaxResults(value: unknown): number {\n if (value === undefined || value === null) {\n return tuttiExternalAtDefaultMaxResults;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(\"at.query maxResults must be a finite number.\");\n }\n const integer = Math.floor(value);\n if (integer < 0) {\n throw new Error(\"at.query maxResults must be greater than or equal to 0.\");\n }\n return Math.min(integer, tuttiExternalAtMaxResultsLimit);\n}\n\nfunction normalizeProviders(\n value: unknown\n): readonly TuttiExternalAtProviderId[] | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(\"at.query providers must be an array.\");\n }\n const providers: TuttiExternalAtProviderId[] = [];\n for (const provider of value) {\n if (!isTuttiExternalAtProviderId(provider)) {\n throw new Error(\"at.query providers contains an unsupported provider.\");\n }\n if (!providers.includes(provider)) {\n providers.push(provider);\n }\n }\n return providers;\n}\n\nfunction normalizeManagedAiModelProviders(\n value: unknown\n): readonly TuttiExternalManagedAiModelProviderId[] | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(\"permissions.request providers must be an array.\");\n }\n const providers: TuttiExternalManagedAiModelProviderId[] = [];\n for (const provider of value) {\n const normalizedProvider = normalizeManagedAiModelProvider(provider);\n if (!providers.includes(normalizedProvider)) {\n providers.push(normalizedProvider);\n }\n }\n return providers;\n}\n\nfunction normalizeManagedAiModelProvider(\n value: unknown\n): TuttiExternalManagedAiModelProviderId {\n if (!isTuttiExternalManagedAiModelProviderId(value)) {\n throw new Error(\"managed AI model provider is unsupported.\");\n }\n return value;\n}\n\nfunction normalizePdfBaseUrl(value: string): string {\n let url: URL;\n try {\n url = new URL(value.trim());\n } catch {\n throw new Error(\"pdf.printHtmlToPdf baseUrl must be a valid URL.\");\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"pdf.printHtmlToPdf baseUrl protocol is unsupported.\");\n }\n return url.toString();\n}\n\nfunction normalizePdfPageSize(\n value: unknown\n): TuttiExternalPdfPrintHtmlInput[\"pageSize\"] {\n if (value === \"A4\" || value === \"Letter\") {\n return value;\n }\n if (isRecord(value)) {\n const width = normalizePdfPageSizeSide(value.width, \"width\");\n const height = normalizePdfPageSizeSide(value.height, \"height\");\n return { width, height };\n }\n throw new Error(\"pdf.printHtmlToPdf pageSize is unsupported.\");\n}\n\nfunction normalizePdfPageSizeSide(\n value: unknown,\n side: \"height\" | \"width\"\n): number {\n if (typeof value !== \"number\" || !Number.isFinite(value) || value <= 0) {\n throw new Error(\n `pdf.printHtmlToPdf pageSize ${side} must be a positive number.`\n );\n }\n return value;\n}\n\nfunction normalizePdfMargin(value: unknown): TuttiExternalPdfMargin {\n if (!isRecord(value)) {\n throw new Error(\"pdf.printHtmlToPdf margin must be an object.\");\n }\n return {\n ...normalizePdfMarginSide(value.top, \"top\"),\n ...normalizePdfMarginSide(value.right, \"right\"),\n ...normalizePdfMarginSide(value.bottom, \"bottom\"),\n ...normalizePdfMarginSide(value.left, \"left\")\n };\n}\n\nfunction normalizePdfMarginSide(\n value: unknown,\n side: keyof TuttiExternalPdfMargin\n): TuttiExternalPdfMargin {\n if (value === undefined || value === null || value === \"\") {\n return {};\n }\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`pdf.printHtmlToPdf margin ${side} must be a string.`);\n }\n const normalized = value.trim();\n if (!/^\\d+(?:\\.\\d+)?(?:px|in|cm|mm)$/u.test(normalized)) {\n throw new Error(`pdf.printHtmlToPdf margin ${side} unit is unsupported.`);\n }\n return { [side]: normalized };\n}\n\nfunction normalizeFileOpenMode(\n value: unknown\n): TuttiExternalFileOpenInput[\"mode\"] | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (value === \"auto\" || value === \"preview\" || value === \"reveal\") {\n return value;\n }\n throw new Error(\"files.open mode is unsupported.\");\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`${field} is required.`);\n }\n return value.trim();\n}\n\nfunction normalizeRequiredStringList(value: unknown, field: string): string[] {\n if (!Array.isArray(value)) {\n throw new Error(`${field} must be an array.`);\n }\n const normalizedValues: string[] = [];\n for (const item of value) {\n if (typeof item !== \"string\" || item.trim() === \"\") {\n throw new Error(`${field} contains an invalid value.`);\n }\n const normalizedItem = item.trim();\n if (!normalizedValues.includes(normalizedItem)) {\n normalizedValues.push(normalizedItem);\n }\n }\n return normalizedValues;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":[]}
@@ -80,6 +80,7 @@ interface TuttiExternalPermissionRequestInput {
80
80
  }
81
81
  interface TuttiExternalPermissionRequestResult {
82
82
  code: string;
83
+ contextToken?: string;
83
84
  expiresAt?: string;
84
85
  models?: readonly TuttiExternalManagedAiModel[];
85
86
  providers?: readonly TuttiExternalManagedAiModelProviderId[];
@@ -122,11 +123,16 @@ interface TuttiExternalPdfMargin {
122
123
  right?: string;
123
124
  top?: string;
124
125
  }
126
+ type TuttiExternalPdfPageSize = "A4" | "Letter" | {
127
+ height: number;
128
+ width: number;
129
+ };
125
130
  interface TuttiExternalPdfPrintHtmlInput {
126
131
  baseUrl?: string;
127
132
  html: string;
128
133
  margin?: TuttiExternalPdfMargin;
129
- pageSize?: "A4" | "Letter";
134
+ pageSize?: TuttiExternalPdfPageSize;
135
+ preferCSSPageSize?: boolean;
130
136
  printBackground?: boolean;
131
137
  title?: string;
132
138
  }
@@ -272,4 +278,4 @@ type TuttiExternalRendererRequest = {
272
278
  workspaceId: string;
273
279
  };
274
280
 
275
- export { TUTTI_EXTERNAL_AT_PROVIDER_IDS, type TuttiExternalAtInsertResult, type TuttiExternalAtMentionPresentation, type TuttiExternalAtProviderId, type TuttiExternalAtQueryInput, type TuttiExternalAtQueryResult, type TuttiExternalBridge, type TuttiExternalFileOpenInput, type TuttiExternalFileSelectInput, type TuttiExternalFileSelectResult, type TuttiExternalLogInput, type TuttiExternalLogLevel, type TuttiExternalManagedAiModel, type TuttiExternalManagedAiModelProviderId, type TuttiExternalPdfMargin, type TuttiExternalPdfPrintHtmlInput, type TuttiExternalPdfPrintHtmlResult, type TuttiExternalPermissionRequestInput, type TuttiExternalPermissionRequestResult, type TuttiExternalReferenceOpenInput, type TuttiExternalRendererRequest, type TuttiExternalSettingsOpenInput, type TuttiExternalUserProjectCreateInput, type TuttiExternalUserProjectPathInput, type TuttiExternalUserProjectRememberDefaultSelectionInput, type TuttiExternalWorkspaceAgentProvider, type TuttiExternalWorkspaceFeature, type TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders };
281
+ export { TUTTI_EXTERNAL_AT_PROVIDER_IDS, type TuttiExternalAtInsertResult, type TuttiExternalAtMentionPresentation, type TuttiExternalAtProviderId, type TuttiExternalAtQueryInput, type TuttiExternalAtQueryResult, type TuttiExternalBridge, type TuttiExternalFileOpenInput, type TuttiExternalFileSelectInput, type TuttiExternalFileSelectResult, type TuttiExternalLogInput, type TuttiExternalLogLevel, type TuttiExternalManagedAiModel, type TuttiExternalManagedAiModelProviderId, type TuttiExternalPdfMargin, type TuttiExternalPdfPageSize, type TuttiExternalPdfPrintHtmlInput, type TuttiExternalPdfPrintHtmlResult, type TuttiExternalPermissionRequestInput, type TuttiExternalPermissionRequestResult, type TuttiExternalReferenceOpenInput, type TuttiExternalRendererRequest, type TuttiExternalSettingsOpenInput, type TuttiExternalUserProjectCreateInput, type TuttiExternalUserProjectPathInput, type TuttiExternalUserProjectRememberDefaultSelectionInput, type TuttiExternalWorkspaceAgentProvider, type TuttiExternalWorkspaceFeature, type TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders };
@@ -4,7 +4,7 @@ import {
4
4
  tuttiExternalLogLevels,
5
5
  tuttiExternalManagedAiModelProviderIds,
6
6
  tuttiExternalWorkspaceAgentProviders
7
- } from "../chunk-J53NLKKO.js";
7
+ } from "../chunk-6YUXMH6C.js";
8
8
  export {
9
9
  TUTTI_EXTERNAL_AT_PROVIDER_IDS,
10
10
  tuttiExternalAtProviderIds,
@@ -21,12 +21,12 @@ import {
21
21
  tuttiExternalAtMaxResultsLimit,
22
22
  tuttiExternalLogDiagnosticTextLimit,
23
23
  tuttiExternalWorkspaceFeatures
24
- } from "../chunk-LGELOEVW.js";
24
+ } from "../chunk-XSX77OLM.js";
25
25
  import {
26
26
  tuttiExternalAtProviderIds,
27
27
  tuttiExternalManagedAiModelProviderIds,
28
28
  tuttiExternalWorkspaceAgentProviders
29
- } from "../chunk-J53NLKKO.js";
29
+ } from "../chunk-6YUXMH6C.js";
30
30
  export {
31
31
  isTuttiExternalAtProviderId,
32
32
  isTuttiExternalManagedAiModelProviderId,
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { TUTTI_EXTERNAL_AT_PROVIDER_IDS, TuttiExternalAtInsertResult, TuttiExternalAtMentionPresentation, TuttiExternalAtProviderId, TuttiExternalAtQueryInput, TuttiExternalAtQueryResult, TuttiExternalBridge, TuttiExternalFileOpenInput, TuttiExternalFileSelectInput, TuttiExternalFileSelectResult, TuttiExternalLogInput, TuttiExternalLogLevel, TuttiExternalManagedAiModel, TuttiExternalManagedAiModelProviderId, TuttiExternalPdfMargin, TuttiExternalPdfPrintHtmlInput, TuttiExternalPdfPrintHtmlResult, TuttiExternalPermissionRequestInput, TuttiExternalPermissionRequestResult, TuttiExternalReferenceOpenInput, TuttiExternalRendererRequest, TuttiExternalSettingsOpenInput, TuttiExternalUserProjectCreateInput, TuttiExternalUserProjectPathInput, TuttiExternalUserProjectRememberDefaultSelectionInput, TuttiExternalWorkspaceAgentProvider, TuttiExternalWorkspaceFeature, TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders } from './contracts/index.js';
1
+ export { TUTTI_EXTERNAL_AT_PROVIDER_IDS, TuttiExternalAtInsertResult, TuttiExternalAtMentionPresentation, TuttiExternalAtProviderId, TuttiExternalAtQueryInput, TuttiExternalAtQueryResult, TuttiExternalBridge, TuttiExternalFileOpenInput, TuttiExternalFileSelectInput, TuttiExternalFileSelectResult, TuttiExternalLogInput, TuttiExternalLogLevel, TuttiExternalManagedAiModel, TuttiExternalManagedAiModelProviderId, TuttiExternalPdfMargin, TuttiExternalPdfPageSize, TuttiExternalPdfPrintHtmlInput, TuttiExternalPdfPrintHtmlResult, TuttiExternalPermissionRequestInput, TuttiExternalPermissionRequestResult, TuttiExternalReferenceOpenInput, TuttiExternalRendererRequest, TuttiExternalSettingsOpenInput, TuttiExternalUserProjectCreateInput, TuttiExternalUserProjectPathInput, TuttiExternalUserProjectRememberDefaultSelectionInput, TuttiExternalWorkspaceAgentProvider, TuttiExternalWorkspaceFeature, TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders } from './contracts/index.js';
2
2
  export { isTuttiExternalAtProviderId, isTuttiExternalManagedAiModelProviderId, isTuttiExternalWorkspaceAgentProvider, isTuttiExternalWorkspaceFeature, limitDiagnosticText, normalizeTuttiExternalAtQueryInput, normalizeTuttiExternalFileOpenInput, normalizeTuttiExternalFileSelectInput, normalizeTuttiExternalLogInput, normalizeTuttiExternalPdfPrintHtmlInput, normalizeTuttiExternalPermissionRequestInput, normalizeTuttiExternalReferenceOpenInput, normalizeTuttiExternalSettingsOpenInput, normalizeTuttiExternalUserProjectCreateInput, normalizeTuttiExternalUserProjectPathInput, normalizeTuttiExternalUserProjectRememberDefaultSelectionInput, normalizeTuttiExternalUserProjectSelectionPreparationInput, normalizeTuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtDefaultMaxResults, tuttiExternalAtMaxResultsLimit, tuttiExternalLogDiagnosticTextLimit, tuttiExternalWorkspaceFeatures } from './core/index.js';
3
3
  import '@tutti-os/workspace-file-reference/contracts';
4
4
  import '@tutti-os/workspace-user-project/contracts';
package/dist/index.js CHANGED
@@ -21,12 +21,12 @@ import {
21
21
  tuttiExternalAtMaxResultsLimit,
22
22
  tuttiExternalLogDiagnosticTextLimit,
23
23
  tuttiExternalWorkspaceFeatures
24
- } from "./chunk-LGELOEVW.js";
24
+ } from "./chunk-XSX77OLM.js";
25
25
  import {
26
26
  tuttiExternalAtProviderIds,
27
27
  tuttiExternalManagedAiModelProviderIds,
28
28
  tuttiExternalWorkspaceAgentProviders
29
- } from "./chunk-J53NLKKO.js";
29
+ } from "./chunk-6YUXMH6C.js";
30
30
  export {
31
31
  isTuttiExternalAtProviderId,
32
32
  isTuttiExternalManagedAiModelProviderId,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tutti-os/workspace-external-core",
3
- "version": "0.0.17",
3
+ "version": "0.0.19",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -28,8 +28,8 @@
28
28
  "directory": "packages/workspace/external-core"
29
29
  },
30
30
  "dependencies": {
31
- "@tutti-os/workspace-file-reference": "0.0.17",
32
- "@tutti-os/workspace-user-project": "0.0.17"
31
+ "@tutti-os/workspace-file-reference": "0.0.19",
32
+ "@tutti-os/workspace-user-project": "0.0.19"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^24.0.1",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/contracts/index.ts"],"sourcesContent":["import type { WorkspaceFileReference } from \"@tutti-os/workspace-file-reference/contracts\";\nimport type {\n WorkspaceUserProject,\n WorkspaceUserProjectDefaultSelection,\n WorkspaceUserProjectPathCheck,\n WorkspaceUserProjectSelectionPreparation,\n WorkspaceUserProjectSelectionPreparationInput,\n WorkspaceUserProjectServiceSnapshot\n} from \"@tutti-os/workspace-user-project/contracts\";\n\nexport const TUTTI_EXTERNAL_AT_PROVIDER_IDS = {\n agentGeneratedFile: \"agent-generated-file\",\n agentSession: \"agent-session\",\n file: \"file\",\n workspaceApp: \"workspace-app\",\n workspaceIssue: \"workspace-issue\"\n} as const;\n\nexport type TuttiExternalAtProviderId =\n (typeof TUTTI_EXTERNAL_AT_PROVIDER_IDS)[keyof typeof TUTTI_EXTERNAL_AT_PROVIDER_IDS];\n\nexport const tuttiExternalAtProviderIds = [\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.file,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.workspaceIssue,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.workspaceApp,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.agentSession,\n TUTTI_EXTERNAL_AT_PROVIDER_IDS.agentGeneratedFile\n] as const satisfies readonly TuttiExternalAtProviderId[];\n\nexport interface TuttiExternalAtQueryInput {\n keyword: string;\n maxResults?: number;\n providers?: readonly TuttiExternalAtProviderId[];\n}\n\nexport interface TuttiExternalAtQueryResult {\n providerId: TuttiExternalAtProviderId;\n itemId: string;\n label: string;\n subtitle?: string;\n thumbnailUrl?: string | null;\n insert: TuttiExternalAtInsertResult;\n}\n\nexport interface TuttiExternalAtMentionPresentation {\n agentProviderId?: string;\n agentIconUrl?: string;\n iconUrl?: string;\n thumbnailUrl?: string;\n subtitle?: string;\n description?: string;\n participant?: string;\n status?: string;\n statusDataStatus?: string;\n statusLabel?: string;\n statusPulse?: string;\n userAvatarPlaceholderUrl?: string;\n}\n\nexport type TuttiExternalAtInsertResult =\n | {\n kind: \"mention\";\n mention: {\n entityId: string;\n label: string;\n scope?: Record<string, string>;\n presentation?: TuttiExternalAtMentionPresentation;\n };\n }\n | {\n kind: \"markdown-link\";\n label: string;\n href: string;\n }\n | {\n kind: \"text\";\n text: string;\n };\n\nexport interface TuttiExternalFileSelectInput {\n multiple?: boolean;\n}\n\nexport type TuttiExternalFileSelectResult = WorkspaceFileReference[];\n\nexport interface TuttiExternalFileOpenInput {\n mode?: \"auto\" | \"preview\" | \"reveal\";\n mtimeMs?: number | null;\n name?: string;\n path: string;\n sizeBytes?: number | null;\n}\n\nexport const tuttiExternalManagedAiModelProviderIds = [\n \"agnes\",\n \"openai\",\n \"anthropic\"\n] as const;\n\nexport type TuttiExternalManagedAiModelProviderId =\n (typeof tuttiExternalManagedAiModelProviderIds)[number];\n\nexport interface TuttiExternalManagedAiModel {\n id: string;\n name?: string;\n provider: TuttiExternalManagedAiModelProviderId;\n}\n\nexport interface TuttiExternalPermissionRequestInput {\n permission: \"managed-ai-models\";\n nonce: string;\n providers?: readonly TuttiExternalManagedAiModelProviderId[];\n scopes: readonly string[];\n state: string;\n}\n\nexport interface TuttiExternalPermissionRequestResult {\n code: string;\n expiresAt?: string;\n models?: readonly TuttiExternalManagedAiModel[];\n providers?: readonly TuttiExternalManagedAiModelProviderId[];\n}\n\nexport interface TuttiExternalSettingsOpenInput {\n provider?: TuttiExternalManagedAiModelProviderId;\n tab?: \"models\";\n}\n\nexport type TuttiExternalWorkspaceFeature =\n | \"app-center\"\n | \"issue-manager\"\n | \"message-center\"\n | \"agent-connect\"\n | \"agent-chat\";\n\nexport const tuttiExternalWorkspaceAgentProviders = [\n \"claude-code\",\n \"codex\",\n \"nexight\",\n \"hermes\",\n \"gemini\",\n \"openclaw\"\n] as const;\n\nexport type TuttiExternalWorkspaceAgentProvider =\n (typeof tuttiExternalWorkspaceAgentProviders)[number];\n\nexport interface TuttiExternalWorkspaceOpenFeatureInput {\n autoSubmit?: boolean;\n draftPrompt?: string;\n feature: TuttiExternalWorkspaceFeature;\n provider?: TuttiExternalWorkspaceAgentProvider;\n}\n\nexport interface TuttiExternalReferenceOpenInput {\n href: string;\n}\n\nexport interface TuttiExternalUserProjectCreateInput {\n name: string;\n}\n\nexport interface TuttiExternalUserProjectPathInput {\n path: string;\n}\n\nexport interface TuttiExternalUserProjectRememberDefaultSelectionInput {\n path: string | null;\n}\n\nexport const tuttiExternalLogLevels = [\n \"debug\",\n \"info\",\n \"warn\",\n \"error\"\n] as const;\n\nexport type TuttiExternalLogLevel = (typeof tuttiExternalLogLevels)[number];\n\nexport interface TuttiExternalLogInput {\n details?: Record<string, unknown>;\n event: string;\n level?: TuttiExternalLogLevel;\n}\n\nexport interface TuttiExternalPdfMargin {\n bottom?: string;\n left?: string;\n right?: string;\n top?: string;\n}\n\nexport interface TuttiExternalPdfPrintHtmlInput {\n baseUrl?: string;\n html: string;\n margin?: TuttiExternalPdfMargin;\n pageSize?: \"A4\" | \"Letter\";\n printBackground?: boolean;\n title?: string;\n}\n\nexport interface TuttiExternalPdfPrintHtmlResult {\n bytes: Uint8Array;\n}\n\nexport interface TuttiExternalBridge {\n app: {\n getContext(): Promise<unknown>;\n subscribe(listener: (context: unknown) => void): () => void;\n };\n at: {\n query(\n input: TuttiExternalAtQueryInput\n ): Promise<TuttiExternalAtQueryResult[]>;\n };\n files: {\n select(\n input?: TuttiExternalFileSelectInput\n ): Promise<TuttiExternalFileSelectResult>;\n open(input: TuttiExternalFileOpenInput): Promise<void>;\n };\n permissions: {\n request(\n input: TuttiExternalPermissionRequestInput\n ): Promise<TuttiExternalPermissionRequestResult>;\n };\n settings: {\n open(input?: TuttiExternalSettingsOpenInput): Promise<void>;\n };\n workspace: {\n openFeature(input: TuttiExternalWorkspaceOpenFeatureInput): Promise<void>;\n };\n references: {\n open(input: TuttiExternalReferenceOpenInput): Promise<void>;\n };\n pdf: {\n printHtmlToPdf(\n input: TuttiExternalPdfPrintHtmlInput\n ): Promise<TuttiExternalPdfPrintHtmlResult>;\n };\n userProjects: {\n checkPath(\n input: TuttiExternalUserProjectPathInput\n ): Promise<WorkspaceUserProjectPathCheck>;\n create(\n input: TuttiExternalUserProjectCreateInput\n ): Promise<WorkspaceUserProject>;\n getDefaultSelection(): Promise<WorkspaceUserProjectDefaultSelection | null>;\n getSnapshot(): Promise<WorkspaceUserProjectServiceSnapshot>;\n list(): Promise<{ projects: WorkspaceUserProject[] }>;\n prepareSelection(\n input: WorkspaceUserProjectSelectionPreparationInput\n ): Promise<WorkspaceUserProjectSelectionPreparation>;\n refresh(): Promise<WorkspaceUserProjectServiceSnapshot>;\n rememberDefaultSelection(\n input: TuttiExternalUserProjectRememberDefaultSelectionInput\n ): Promise<void>;\n selectDirectory(): Promise<{ path: string } | null>;\n /**\n * Subscribes to user-project snapshots. Implementations replay the latest\n * known snapshot after registration, then emit future snapshots.\n */\n subscribe(\n listener: (snapshot: WorkspaceUserProjectServiceSnapshot) => void\n ): () => void;\n use(\n input: TuttiExternalUserProjectPathInput\n ): Promise<WorkspaceUserProject>;\n };\n logs: {\n write(input: TuttiExternalLogInput): void;\n };\n}\n\nexport type TuttiExternalRendererRequest =\n | {\n appId: string;\n input: TuttiExternalAtQueryInput;\n operation: \"at.query\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalFileSelectInput;\n operation: \"files.select\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalFileOpenInput;\n operation: \"files.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalSettingsOpenInput;\n operation: \"settings.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalReferenceOpenInput;\n operation: \"references.open\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectPathInput;\n operation: \"userProjects.checkPath\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectCreateInput;\n operation: \"userProjects.create\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.getDefaultSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.getSnapshot\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.list\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: WorkspaceUserProjectSelectionPreparationInput;\n operation: \"userProjects.prepareSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.refresh\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectRememberDefaultSelectionInput;\n operation: \"userProjects.rememberDefaultSelection\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n operation: \"userProjects.selectDirectory\";\n requestId: string;\n workspaceId: string;\n }\n | {\n appId: string;\n input: TuttiExternalUserProjectPathInput;\n operation: \"userProjects.use\";\n requestId: string;\n workspaceId: string;\n };\n"],"mappings":";AAUO,IAAM,iCAAiC;AAAA,EAC5C,oBAAoB;AAAA,EACpB,cAAc;AAAA,EACd,MAAM;AAAA,EACN,cAAc;AAAA,EACd,gBAAgB;AAClB;AAKO,IAAM,6BAA6B;AAAA,EACxC,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AAAA,EAC/B,+BAA+B;AACjC;AAkEO,IAAM,yCAAyC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AACF;AAsCO,IAAM,uCAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AA4BO,IAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/core/index.ts"],"sourcesContent":["import {\n tuttiExternalManagedAiModelProviderIds,\n tuttiExternalAtProviderIds,\n tuttiExternalWorkspaceAgentProviders,\n type TuttiExternalAtProviderId,\n type TuttiExternalAtQueryInput,\n type TuttiExternalFileOpenInput,\n type TuttiExternalFileSelectInput,\n type TuttiExternalLogInput,\n type TuttiExternalLogLevel,\n type TuttiExternalManagedAiModelProviderId,\n type TuttiExternalPermissionRequestInput,\n type TuttiExternalPdfMargin,\n type TuttiExternalPdfPrintHtmlInput,\n type TuttiExternalReferenceOpenInput,\n type TuttiExternalSettingsOpenInput,\n type TuttiExternalUserProjectCreateInput,\n type TuttiExternalUserProjectPathInput,\n type TuttiExternalUserProjectRememberDefaultSelectionInput,\n type TuttiExternalWorkspaceAgentProvider,\n type TuttiExternalWorkspaceFeature,\n type TuttiExternalWorkspaceOpenFeatureInput\n} from \"../contracts/index.ts\";\nimport type { WorkspaceUserProjectSelectionPreparationInput } from \"@tutti-os/workspace-user-project/contracts\";\n\nexport {\n tuttiExternalAtProviderIds,\n tuttiExternalManagedAiModelProviderIds,\n tuttiExternalWorkspaceAgentProviders\n} from \"../contracts/index.ts\";\n\nexport const tuttiExternalAtMaxResultsLimit = 50;\nexport const tuttiExternalAtDefaultMaxResults = 20;\nexport const tuttiExternalLogDiagnosticTextLimit = 8_000;\nexport const tuttiExternalWorkspaceFeatures = [\n \"app-center\",\n \"issue-manager\",\n \"message-center\",\n \"agent-connect\",\n \"agent-chat\"\n] as const satisfies readonly TuttiExternalWorkspaceFeature[];\n\nexport function limitDiagnosticText(\n value: string | undefined\n): string | undefined {\n const trimmed = value?.trim();\n if (!trimmed) {\n return undefined;\n }\n return trimmed.length > tuttiExternalLogDiagnosticTextLimit\n ? `${trimmed.slice(0, tuttiExternalLogDiagnosticTextLimit)}...`\n : trimmed;\n}\n\nexport function normalizeTuttiExternalLogInput(\n input: unknown\n): TuttiExternalLogInput {\n if (!isRecord(input)) {\n throw new Error(\"logs.write input must be an object.\");\n }\n\n const event = limitDiagnosticText(\n normalizeRequiredString(input.event, \"logs.write event\")\n );\n if (!event) {\n throw new Error(\"logs.write event is required.\");\n }\n\n return {\n event,\n ...(input.level !== undefined && input.level !== null\n ? { level: normalizeTuttiExternalLogLevel(input.level) }\n : {}),\n ...(input.details !== undefined && input.details !== null\n ? { details: normalizeTuttiExternalLogDetails(input.details) }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalAtQueryInput(\n input: unknown\n): TuttiExternalAtQueryInput {\n if (!isRecord(input)) {\n throw new Error(\"at.query input must be an object.\");\n }\n\n const keywordValue = input.keyword;\n if (typeof keywordValue !== \"string\") {\n throw new Error(\"at.query keyword is required.\");\n }\n\n return {\n keyword: keywordValue,\n maxResults: normalizeMaxResults(input.maxResults),\n providers: normalizeProviders(input.providers)\n };\n}\n\nexport function normalizeTuttiExternalFileSelectInput(\n input: unknown\n): TuttiExternalFileSelectInput {\n if (input === undefined || input === null) {\n return {};\n }\n if (!isRecord(input)) {\n throw new Error(\"files.select input must be an object.\");\n }\n return {\n multiple: input.multiple === true\n };\n}\n\nexport function normalizeTuttiExternalFileOpenInput(\n input: unknown\n): TuttiExternalFileOpenInput {\n if (!isRecord(input)) {\n throw new Error(\"files.open input must be an object.\");\n }\n if (typeof input.path !== \"string\" || input.path.trim() === \"\") {\n throw new Error(\"files.open path is required.\");\n }\n const mode = normalizeFileOpenMode(input.mode);\n return {\n ...(mode ? { mode } : {}),\n ...(typeof input.mtimeMs === \"number\" || input.mtimeMs === null\n ? { mtimeMs: input.mtimeMs }\n : {}),\n ...(typeof input.name === \"string\" && input.name.trim() !== \"\"\n ? { name: input.name.trim() }\n : {}),\n path: input.path.trim(),\n ...(typeof input.sizeBytes === \"number\" || input.sizeBytes === null\n ? { sizeBytes: input.sizeBytes }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalPermissionRequestInput(\n input: unknown\n): TuttiExternalPermissionRequestInput {\n if (!isRecord(input)) {\n throw new Error(\"permissions.request input must be an object.\");\n }\n if (input.permission !== \"managed-ai-models\") {\n throw new Error(\"permissions.request permission is unsupported.\");\n }\n const nonce = normalizeRequiredString(\n input.nonce,\n \"permissions.request nonce\"\n );\n const state = normalizeRequiredString(\n input.state,\n \"permissions.request state\"\n );\n const scopes = normalizeRequiredStringList(\n input.scopes,\n \"permissions.request scopes\"\n );\n if (scopes.length === 0) {\n throw new Error(\"permissions.request scopes must not be empty.\");\n }\n\n return {\n nonce,\n permission: \"managed-ai-models\",\n providers: normalizeManagedAiModelProviders(input.providers),\n scopes,\n state\n };\n}\n\nexport function normalizeTuttiExternalSettingsOpenInput(\n input: unknown\n): TuttiExternalSettingsOpenInput {\n if (input === undefined || input === null) {\n return {};\n }\n if (!isRecord(input)) {\n throw new Error(\"settings.open input must be an object.\");\n }\n if (\n input.tab !== undefined &&\n input.tab !== null &&\n input.tab !== \"\" &&\n input.tab !== \"models\"\n ) {\n throw new Error(\"settings.open tab is unsupported.\");\n }\n return {\n ...(input.provider !== undefined && input.provider !== null\n ? { provider: normalizeManagedAiModelProvider(input.provider) }\n : {}),\n ...(input.tab === \"models\" ? { tab: \"models\" as const } : {})\n };\n}\n\nexport function normalizeTuttiExternalWorkspaceOpenFeatureInput(\n input: unknown\n): TuttiExternalWorkspaceOpenFeatureInput {\n if (!isRecord(input)) {\n throw new Error(\"workspace.openFeature input must be an object.\");\n }\n const feature = input.feature;\n if (!isTuttiExternalWorkspaceFeature(feature)) {\n throw new Error(\"workspace.openFeature feature is unsupported.\");\n }\n const draftPrompt =\n typeof input.draftPrompt === \"string\" ? input.draftPrompt.trim() : \"\";\n return {\n feature,\n ...(draftPrompt ? { draftPrompt } : {}),\n ...(input.autoSubmit === true ? { autoSubmit: true } : {}),\n ...(typeof input.provider === \"string\" && input.provider.trim() !== \"\"\n ? {\n provider: normalizeTuttiExternalWorkspaceAgentProvider(input.provider)\n }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalReferenceOpenInput(\n input: unknown\n): TuttiExternalReferenceOpenInput {\n if (!isRecord(input)) {\n throw new Error(\"references.open input must be an object.\");\n }\n const href = normalizeRequiredString(input.href, \"references.open href\");\n if (!href.toLowerCase().startsWith(\"mention://\")) {\n throw new Error(\"references.open href must be a mention URL.\");\n }\n return { href };\n}\n\nexport function normalizeTuttiExternalPdfPrintHtmlInput(\n input: unknown\n): TuttiExternalPdfPrintHtmlInput {\n if (!isRecord(input)) {\n throw new Error(\"pdf.printHtmlToPdf input must be an object.\");\n }\n const html = normalizeRequiredString(input.html, \"pdf.printHtmlToPdf html\");\n const title =\n typeof input.title === \"string\" && input.title.trim() !== \"\"\n ? input.title.trim().slice(0, 200)\n : undefined;\n const baseUrl =\n typeof input.baseUrl === \"string\" && input.baseUrl.trim() !== \"\"\n ? normalizePdfBaseUrl(input.baseUrl)\n : undefined;\n return {\n html,\n ...(baseUrl ? { baseUrl } : {}),\n ...(title ? { title } : {}),\n ...(input.printBackground === false ? { printBackground: false } : {}),\n ...(input.pageSize !== undefined && input.pageSize !== null\n ? { pageSize: normalizePdfPageSize(input.pageSize) }\n : {}),\n ...(input.margin !== undefined && input.margin !== null\n ? { margin: normalizePdfMargin(input.margin) }\n : {})\n };\n}\n\nexport function normalizeTuttiExternalUserProjectCreateInput(\n input: unknown\n): TuttiExternalUserProjectCreateInput {\n if (!isRecord(input)) {\n throw new Error(\"userProjects.create input must be an object.\");\n }\n return {\n name: normalizeRequiredString(input.name, \"userProjects.create name\")\n };\n}\n\nexport function normalizeTuttiExternalUserProjectPathInput(\n input: unknown,\n operation: \"checkPath\" | \"use\"\n): TuttiExternalUserProjectPathInput {\n if (!isRecord(input)) {\n throw new Error(`userProjects.${operation} input must be an object.`);\n }\n return {\n path: normalizeRequiredString(input.path, `userProjects.${operation} path`)\n };\n}\n\nexport function normalizeTuttiExternalUserProjectRememberDefaultSelectionInput(\n input: unknown\n): TuttiExternalUserProjectRememberDefaultSelectionInput {\n if (!isRecord(input)) {\n throw new Error(\n \"userProjects.rememberDefaultSelection input must be an object.\"\n );\n }\n if (input.path === null || input.path === undefined) {\n return { path: null };\n }\n const path = typeof input.path === \"string\" ? input.path.trim() : \"\";\n return { path: path || null };\n}\n\nexport function normalizeTuttiExternalUserProjectSelectionPreparationInput(\n input: unknown\n): WorkspaceUserProjectSelectionPreparationInput {\n if (!isRecord(input)) {\n throw new Error(\"userProjects.prepareSelection input must be an object.\");\n }\n const selectedPath =\n typeof input.selectedPath === \"string\" ? input.selectedPath.trim() : \"\";\n return {\n projectLocked: input.projectLocked === true,\n selectedPath: selectedPath || null\n };\n}\n\nexport function isTuttiExternalAtProviderId(\n value: unknown\n): value is TuttiExternalAtProviderId {\n return (\n typeof value === \"string\" &&\n tuttiExternalAtProviderIds.includes(value as TuttiExternalAtProviderId)\n );\n}\n\nexport function isTuttiExternalManagedAiModelProviderId(\n value: unknown\n): value is TuttiExternalManagedAiModelProviderId {\n return (\n typeof value === \"string\" &&\n tuttiExternalManagedAiModelProviderIds.includes(\n value as TuttiExternalManagedAiModelProviderId\n )\n );\n}\n\nexport function isTuttiExternalWorkspaceFeature(\n value: unknown\n): value is TuttiExternalWorkspaceFeature {\n return (\n typeof value === \"string\" &&\n tuttiExternalWorkspaceFeatures.includes(\n value as TuttiExternalWorkspaceFeature\n )\n );\n}\n\nexport function isTuttiExternalWorkspaceAgentProvider(\n value: unknown\n): value is TuttiExternalWorkspaceAgentProvider {\n return (\n typeof value === \"string\" &&\n tuttiExternalWorkspaceAgentProviders.includes(\n value as TuttiExternalWorkspaceAgentProvider\n )\n );\n}\n\nfunction normalizeTuttiExternalWorkspaceAgentProvider(\n value: unknown\n): TuttiExternalWorkspaceAgentProvider {\n const provider = typeof value === \"string\" ? value.trim() : value;\n if (!isTuttiExternalWorkspaceAgentProvider(provider)) {\n throw new Error(\"workspace.openFeature provider is unsupported.\");\n }\n return provider;\n}\n\nfunction normalizeTuttiExternalLogLevel(value: unknown): TuttiExternalLogLevel {\n if (\n value === \"debug\" ||\n value === \"info\" ||\n value === \"warn\" ||\n value === \"error\"\n ) {\n return value;\n }\n throw new Error(\"logs.write level is unsupported.\");\n}\n\nfunction normalizeTuttiExternalLogDetails(\n value: unknown\n): Record<string, unknown> {\n if (!isRecord(value)) {\n throw new Error(\"logs.write details must be an object.\");\n }\n\n const details: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n details[key] = normalizeTuttiExternalLogDetailValue(entry);\n }\n return details;\n}\n\nfunction normalizeTuttiExternalLogDetailValue(value: unknown): unknown {\n if (typeof value === \"string\") {\n return limitDiagnosticText(value) ?? \"\";\n }\n if (value instanceof Error) {\n return {\n message: limitDiagnosticText(value.message) ?? \"\",\n name: value.name,\n stack: limitDiagnosticText(value.stack)\n };\n }\n if (Array.isArray(value)) {\n return value.map((entry) => normalizeTuttiExternalLogDetailValue(entry));\n }\n if (isRecord(value)) {\n return normalizeTuttiExternalLogDetails(value);\n }\n return value;\n}\n\nfunction normalizeMaxResults(value: unknown): number {\n if (value === undefined || value === null) {\n return tuttiExternalAtDefaultMaxResults;\n }\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(\"at.query maxResults must be a finite number.\");\n }\n const integer = Math.floor(value);\n if (integer < 0) {\n throw new Error(\"at.query maxResults must be greater than or equal to 0.\");\n }\n return Math.min(integer, tuttiExternalAtMaxResultsLimit);\n}\n\nfunction normalizeProviders(\n value: unknown\n): readonly TuttiExternalAtProviderId[] | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(\"at.query providers must be an array.\");\n }\n const providers: TuttiExternalAtProviderId[] = [];\n for (const provider of value) {\n if (!isTuttiExternalAtProviderId(provider)) {\n throw new Error(\"at.query providers contains an unsupported provider.\");\n }\n if (!providers.includes(provider)) {\n providers.push(provider);\n }\n }\n return providers;\n}\n\nfunction normalizeManagedAiModelProviders(\n value: unknown\n): readonly TuttiExternalManagedAiModelProviderId[] | undefined {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (!Array.isArray(value)) {\n throw new Error(\"permissions.request providers must be an array.\");\n }\n const providers: TuttiExternalManagedAiModelProviderId[] = [];\n for (const provider of value) {\n const normalizedProvider = normalizeManagedAiModelProvider(provider);\n if (!providers.includes(normalizedProvider)) {\n providers.push(normalizedProvider);\n }\n }\n return providers;\n}\n\nfunction normalizeManagedAiModelProvider(\n value: unknown\n): TuttiExternalManagedAiModelProviderId {\n if (!isTuttiExternalManagedAiModelProviderId(value)) {\n throw new Error(\"managed AI model provider is unsupported.\");\n }\n return value;\n}\n\nfunction normalizePdfBaseUrl(value: string): string {\n let url: URL;\n try {\n url = new URL(value.trim());\n } catch {\n throw new Error(\"pdf.printHtmlToPdf baseUrl must be a valid URL.\");\n }\n if (url.protocol !== \"http:\" && url.protocol !== \"https:\") {\n throw new Error(\"pdf.printHtmlToPdf baseUrl protocol is unsupported.\");\n }\n return url.toString();\n}\n\nfunction normalizePdfPageSize(value: unknown): \"A4\" | \"Letter\" {\n if (value === \"A4\" || value === \"Letter\") {\n return value;\n }\n throw new Error(\"pdf.printHtmlToPdf pageSize is unsupported.\");\n}\n\nfunction normalizePdfMargin(value: unknown): TuttiExternalPdfMargin {\n if (!isRecord(value)) {\n throw new Error(\"pdf.printHtmlToPdf margin must be an object.\");\n }\n return {\n ...normalizePdfMarginSide(value.top, \"top\"),\n ...normalizePdfMarginSide(value.right, \"right\"),\n ...normalizePdfMarginSide(value.bottom, \"bottom\"),\n ...normalizePdfMarginSide(value.left, \"left\")\n };\n}\n\nfunction normalizePdfMarginSide(\n value: unknown,\n side: keyof TuttiExternalPdfMargin\n): TuttiExternalPdfMargin {\n if (value === undefined || value === null || value === \"\") {\n return {};\n }\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`pdf.printHtmlToPdf margin ${side} must be a string.`);\n }\n const normalized = value.trim();\n if (!/^\\d+(?:\\.\\d+)?(?:px|in|cm|mm)$/u.test(normalized)) {\n throw new Error(`pdf.printHtmlToPdf margin ${side} unit is unsupported.`);\n }\n return { [side]: normalized };\n}\n\nfunction normalizeFileOpenMode(\n value: unknown\n): TuttiExternalFileOpenInput[\"mode\"] | undefined {\n if (value === undefined || value === null || value === \"\") {\n return undefined;\n }\n if (value === \"auto\" || value === \"preview\" || value === \"reveal\") {\n return value;\n }\n throw new Error(\"files.open mode is unsupported.\");\n}\n\nfunction normalizeRequiredString(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.trim() === \"\") {\n throw new Error(`${field} is required.`);\n }\n return value.trim();\n}\n\nfunction normalizeRequiredStringList(value: unknown, field: string): string[] {\n if (!Array.isArray(value)) {\n throw new Error(`${field} must be an array.`);\n }\n const normalizedValues: string[] = [];\n for (const item of value) {\n if (typeof item !== \"string\" || item.trim() === \"\") {\n throw new Error(`${field} contains an invalid value.`);\n }\n const normalizedItem = item.trim();\n if (!normalizedValues.includes(normalizedItem)) {\n normalizedValues.push(normalizedItem);\n }\n }\n return normalizedValues;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n"],"mappings":"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","names":[]}