@tutti-os/workspace-external-core 0.0.15 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -0
- package/dist/{chunk-TXIBT45W.js → chunk-J53NLKKO.js} +1 -1
- package/dist/chunk-J53NLKKO.js.map +1 -0
- package/dist/{chunk-JKLKTSUO.js → chunk-LGELOEVW.js} +103 -2
- package/dist/chunk-LGELOEVW.js.map +1 -0
- package/dist/contracts/index.d.ts +107 -1
- package/dist/contracts/index.js +1 -1
- package/dist/core/index.d.ts +8 -2
- package/dist/core/index.js +12 -2
- package/dist/index.d.ts +3 -2
- package/dist/index.js +12 -2
- package/package.json +3 -2
- package/dist/chunk-JKLKTSUO.js.map +0 -1
- package/dist/chunk-TXIBT45W.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,6 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Contracts and host-agnostic helpers for the workspace app external bridge.
|
|
4
4
|
|
|
5
|
+
Workspace apps are trusted installed app packages. The external bridge is a
|
|
6
|
+
privileged host integration surface, not a web-style permission sandbox. User
|
|
7
|
+
activation gates disruptive host UI such as dialogs and navigation, while
|
|
8
|
+
trusted app APIs may read or update host workspace state directly.
|
|
9
|
+
|
|
5
10
|
`window.tuttiExternal` currently exposes:
|
|
6
11
|
|
|
7
12
|
- `app.getContext()` and `app.subscribe()` for host workspace/app context.
|
|
@@ -9,6 +14,10 @@ Contracts and host-agnostic helpers for the workspace app external bridge.
|
|
|
9
14
|
- `files.select()` for user-activated workspace file picking.
|
|
10
15
|
- `files.open()` for user-activated host opening/revealing of a known workspace file path.
|
|
11
16
|
- `permissions.request()` for user-activated host permission grants such as managed AI model access.
|
|
17
|
+
- `pdf.printHtmlToPdf()` for user-activated host PDF generation from print-ready HTML.
|
|
12
18
|
- `settings.open()` for user-activated host settings navigation, including the managed models tab.
|
|
19
|
+
- `userProjects.*` for trusted app access to local user project paths, default
|
|
20
|
+
project selection, project directory creation, and recently used project
|
|
21
|
+
state.
|
|
13
22
|
- `workspace.openFeature()` for user-activated host workspace navigation, such as opening the message center.
|
|
14
23
|
- `logs.write()` for fire-and-forget frontend diagnostics that append to the workspace app `web.log`.
|
|
@@ -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 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":[]}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
tuttiExternalAtProviderIds,
|
|
3
3
|
tuttiExternalManagedAiModelProviderIds,
|
|
4
4
|
tuttiExternalWorkspaceAgentProviders
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-J53NLKKO.js";
|
|
6
6
|
|
|
7
7
|
// src/core/index.ts
|
|
8
8
|
var tuttiExternalAtMaxResultsLimit = 50;
|
|
@@ -152,6 +152,60 @@ function normalizeTuttiExternalReferenceOpenInput(input) {
|
|
|
152
152
|
}
|
|
153
153
|
return { href };
|
|
154
154
|
}
|
|
155
|
+
function normalizeTuttiExternalPdfPrintHtmlInput(input) {
|
|
156
|
+
if (!isRecord(input)) {
|
|
157
|
+
throw new Error("pdf.printHtmlToPdf input must be an object.");
|
|
158
|
+
}
|
|
159
|
+
const html = normalizeRequiredString(input.html, "pdf.printHtmlToPdf html");
|
|
160
|
+
const title = typeof input.title === "string" && input.title.trim() !== "" ? input.title.trim().slice(0, 200) : void 0;
|
|
161
|
+
const baseUrl = typeof input.baseUrl === "string" && input.baseUrl.trim() !== "" ? normalizePdfBaseUrl(input.baseUrl) : void 0;
|
|
162
|
+
return {
|
|
163
|
+
html,
|
|
164
|
+
...baseUrl ? { baseUrl } : {},
|
|
165
|
+
...title ? { title } : {},
|
|
166
|
+
...input.printBackground === false ? { printBackground: false } : {},
|
|
167
|
+
...input.pageSize !== void 0 && input.pageSize !== null ? { pageSize: normalizePdfPageSize(input.pageSize) } : {},
|
|
168
|
+
...input.margin !== void 0 && input.margin !== null ? { margin: normalizePdfMargin(input.margin) } : {}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
function normalizeTuttiExternalUserProjectCreateInput(input) {
|
|
172
|
+
if (!isRecord(input)) {
|
|
173
|
+
throw new Error("userProjects.create input must be an object.");
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
name: normalizeRequiredString(input.name, "userProjects.create name")
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function normalizeTuttiExternalUserProjectPathInput(input, operation) {
|
|
180
|
+
if (!isRecord(input)) {
|
|
181
|
+
throw new Error(`userProjects.${operation} input must be an object.`);
|
|
182
|
+
}
|
|
183
|
+
return {
|
|
184
|
+
path: normalizeRequiredString(input.path, `userProjects.${operation} path`)
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
function normalizeTuttiExternalUserProjectRememberDefaultSelectionInput(input) {
|
|
188
|
+
if (!isRecord(input)) {
|
|
189
|
+
throw new Error(
|
|
190
|
+
"userProjects.rememberDefaultSelection input must be an object."
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
if (input.path === null || input.path === void 0) {
|
|
194
|
+
return { path: null };
|
|
195
|
+
}
|
|
196
|
+
const path = typeof input.path === "string" ? input.path.trim() : "";
|
|
197
|
+
return { path: path || null };
|
|
198
|
+
}
|
|
199
|
+
function normalizeTuttiExternalUserProjectSelectionPreparationInput(input) {
|
|
200
|
+
if (!isRecord(input)) {
|
|
201
|
+
throw new Error("userProjects.prepareSelection input must be an object.");
|
|
202
|
+
}
|
|
203
|
+
const selectedPath = typeof input.selectedPath === "string" ? input.selectedPath.trim() : "";
|
|
204
|
+
return {
|
|
205
|
+
projectLocked: input.projectLocked === true,
|
|
206
|
+
selectedPath: selectedPath || null
|
|
207
|
+
};
|
|
208
|
+
}
|
|
155
209
|
function isTuttiExternalAtProviderId(value) {
|
|
156
210
|
return typeof value === "string" && tuttiExternalAtProviderIds.includes(value);
|
|
157
211
|
}
|
|
@@ -265,6 +319,48 @@ function normalizeManagedAiModelProvider(value) {
|
|
|
265
319
|
}
|
|
266
320
|
return value;
|
|
267
321
|
}
|
|
322
|
+
function normalizePdfBaseUrl(value) {
|
|
323
|
+
let url;
|
|
324
|
+
try {
|
|
325
|
+
url = new URL(value.trim());
|
|
326
|
+
} catch {
|
|
327
|
+
throw new Error("pdf.printHtmlToPdf baseUrl must be a valid URL.");
|
|
328
|
+
}
|
|
329
|
+
if (url.protocol !== "http:" && url.protocol !== "https:") {
|
|
330
|
+
throw new Error("pdf.printHtmlToPdf baseUrl protocol is unsupported.");
|
|
331
|
+
}
|
|
332
|
+
return url.toString();
|
|
333
|
+
}
|
|
334
|
+
function normalizePdfPageSize(value) {
|
|
335
|
+
if (value === "A4" || value === "Letter") {
|
|
336
|
+
return value;
|
|
337
|
+
}
|
|
338
|
+
throw new Error("pdf.printHtmlToPdf pageSize is unsupported.");
|
|
339
|
+
}
|
|
340
|
+
function normalizePdfMargin(value) {
|
|
341
|
+
if (!isRecord(value)) {
|
|
342
|
+
throw new Error("pdf.printHtmlToPdf margin must be an object.");
|
|
343
|
+
}
|
|
344
|
+
return {
|
|
345
|
+
...normalizePdfMarginSide(value.top, "top"),
|
|
346
|
+
...normalizePdfMarginSide(value.right, "right"),
|
|
347
|
+
...normalizePdfMarginSide(value.bottom, "bottom"),
|
|
348
|
+
...normalizePdfMarginSide(value.left, "left")
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
function normalizePdfMarginSide(value, side) {
|
|
352
|
+
if (value === void 0 || value === null || value === "") {
|
|
353
|
+
return {};
|
|
354
|
+
}
|
|
355
|
+
if (typeof value !== "string" || value.trim() === "") {
|
|
356
|
+
throw new Error(`pdf.printHtmlToPdf margin ${side} must be a string.`);
|
|
357
|
+
}
|
|
358
|
+
const normalized = value.trim();
|
|
359
|
+
if (!/^\d+(?:\.\d+)?(?:px|in|cm|mm)$/u.test(normalized)) {
|
|
360
|
+
throw new Error(`pdf.printHtmlToPdf margin ${side} unit is unsupported.`);
|
|
361
|
+
}
|
|
362
|
+
return { [side]: normalized };
|
|
363
|
+
}
|
|
268
364
|
function normalizeFileOpenMode(value) {
|
|
269
365
|
if (value === void 0 || value === null || value === "") {
|
|
270
366
|
return void 0;
|
|
@@ -314,9 +410,14 @@ export {
|
|
|
314
410
|
normalizeTuttiExternalSettingsOpenInput,
|
|
315
411
|
normalizeTuttiExternalWorkspaceOpenFeatureInput,
|
|
316
412
|
normalizeTuttiExternalReferenceOpenInput,
|
|
413
|
+
normalizeTuttiExternalPdfPrintHtmlInput,
|
|
414
|
+
normalizeTuttiExternalUserProjectCreateInput,
|
|
415
|
+
normalizeTuttiExternalUserProjectPathInput,
|
|
416
|
+
normalizeTuttiExternalUserProjectRememberDefaultSelectionInput,
|
|
417
|
+
normalizeTuttiExternalUserProjectSelectionPreparationInput,
|
|
317
418
|
isTuttiExternalAtProviderId,
|
|
318
419
|
isTuttiExternalManagedAiModelProviderId,
|
|
319
420
|
isTuttiExternalWorkspaceFeature,
|
|
320
421
|
isTuttiExternalWorkspaceAgentProvider
|
|
321
422
|
};
|
|
322
|
-
//# sourceMappingURL=chunk-
|
|
423
|
+
//# sourceMappingURL=chunk-LGELOEVW.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.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":[]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { WorkspaceFileReference } from '@tutti-os/workspace-file-reference/contracts';
|
|
2
|
+
import { WorkspaceUserProjectPathCheck, WorkspaceUserProject, WorkspaceUserProjectDefaultSelection, WorkspaceUserProjectServiceSnapshot, WorkspaceUserProjectSelectionPreparationInput, WorkspaceUserProjectSelectionPreparation } from '@tutti-os/workspace-user-project/contracts';
|
|
2
3
|
|
|
3
4
|
declare const TUTTI_EXTERNAL_AT_PROVIDER_IDS: {
|
|
4
5
|
readonly agentGeneratedFile: "agent-generated-file";
|
|
@@ -99,6 +100,15 @@ interface TuttiExternalWorkspaceOpenFeatureInput {
|
|
|
99
100
|
interface TuttiExternalReferenceOpenInput {
|
|
100
101
|
href: string;
|
|
101
102
|
}
|
|
103
|
+
interface TuttiExternalUserProjectCreateInput {
|
|
104
|
+
name: string;
|
|
105
|
+
}
|
|
106
|
+
interface TuttiExternalUserProjectPathInput {
|
|
107
|
+
path: string;
|
|
108
|
+
}
|
|
109
|
+
interface TuttiExternalUserProjectRememberDefaultSelectionInput {
|
|
110
|
+
path: string | null;
|
|
111
|
+
}
|
|
102
112
|
declare const tuttiExternalLogLevels: readonly ["debug", "info", "warn", "error"];
|
|
103
113
|
type TuttiExternalLogLevel = (typeof tuttiExternalLogLevels)[number];
|
|
104
114
|
interface TuttiExternalLogInput {
|
|
@@ -106,6 +116,23 @@ interface TuttiExternalLogInput {
|
|
|
106
116
|
event: string;
|
|
107
117
|
level?: TuttiExternalLogLevel;
|
|
108
118
|
}
|
|
119
|
+
interface TuttiExternalPdfMargin {
|
|
120
|
+
bottom?: string;
|
|
121
|
+
left?: string;
|
|
122
|
+
right?: string;
|
|
123
|
+
top?: string;
|
|
124
|
+
}
|
|
125
|
+
interface TuttiExternalPdfPrintHtmlInput {
|
|
126
|
+
baseUrl?: string;
|
|
127
|
+
html: string;
|
|
128
|
+
margin?: TuttiExternalPdfMargin;
|
|
129
|
+
pageSize?: "A4" | "Letter";
|
|
130
|
+
printBackground?: boolean;
|
|
131
|
+
title?: string;
|
|
132
|
+
}
|
|
133
|
+
interface TuttiExternalPdfPrintHtmlResult {
|
|
134
|
+
bytes: Uint8Array;
|
|
135
|
+
}
|
|
109
136
|
interface TuttiExternalBridge {
|
|
110
137
|
app: {
|
|
111
138
|
getContext(): Promise<unknown>;
|
|
@@ -130,6 +157,30 @@ interface TuttiExternalBridge {
|
|
|
130
157
|
references: {
|
|
131
158
|
open(input: TuttiExternalReferenceOpenInput): Promise<void>;
|
|
132
159
|
};
|
|
160
|
+
pdf: {
|
|
161
|
+
printHtmlToPdf(input: TuttiExternalPdfPrintHtmlInput): Promise<TuttiExternalPdfPrintHtmlResult>;
|
|
162
|
+
};
|
|
163
|
+
userProjects: {
|
|
164
|
+
checkPath(input: TuttiExternalUserProjectPathInput): Promise<WorkspaceUserProjectPathCheck>;
|
|
165
|
+
create(input: TuttiExternalUserProjectCreateInput): Promise<WorkspaceUserProject>;
|
|
166
|
+
getDefaultSelection(): Promise<WorkspaceUserProjectDefaultSelection | null>;
|
|
167
|
+
getSnapshot(): Promise<WorkspaceUserProjectServiceSnapshot>;
|
|
168
|
+
list(): Promise<{
|
|
169
|
+
projects: WorkspaceUserProject[];
|
|
170
|
+
}>;
|
|
171
|
+
prepareSelection(input: WorkspaceUserProjectSelectionPreparationInput): Promise<WorkspaceUserProjectSelectionPreparation>;
|
|
172
|
+
refresh(): Promise<WorkspaceUserProjectServiceSnapshot>;
|
|
173
|
+
rememberDefaultSelection(input: TuttiExternalUserProjectRememberDefaultSelectionInput): Promise<void>;
|
|
174
|
+
selectDirectory(): Promise<{
|
|
175
|
+
path: string;
|
|
176
|
+
} | null>;
|
|
177
|
+
/**
|
|
178
|
+
* Subscribes to user-project snapshots. Implementations replay the latest
|
|
179
|
+
* known snapshot after registration, then emit future snapshots.
|
|
180
|
+
*/
|
|
181
|
+
subscribe(listener: (snapshot: WorkspaceUserProjectServiceSnapshot) => void): () => void;
|
|
182
|
+
use(input: TuttiExternalUserProjectPathInput): Promise<WorkspaceUserProject>;
|
|
183
|
+
};
|
|
133
184
|
logs: {
|
|
134
185
|
write(input: TuttiExternalLogInput): void;
|
|
135
186
|
};
|
|
@@ -164,6 +215,61 @@ type TuttiExternalRendererRequest = {
|
|
|
164
215
|
operation: "references.open";
|
|
165
216
|
requestId: string;
|
|
166
217
|
workspaceId: string;
|
|
218
|
+
} | {
|
|
219
|
+
appId: string;
|
|
220
|
+
input: TuttiExternalUserProjectPathInput;
|
|
221
|
+
operation: "userProjects.checkPath";
|
|
222
|
+
requestId: string;
|
|
223
|
+
workspaceId: string;
|
|
224
|
+
} | {
|
|
225
|
+
appId: string;
|
|
226
|
+
input: TuttiExternalUserProjectCreateInput;
|
|
227
|
+
operation: "userProjects.create";
|
|
228
|
+
requestId: string;
|
|
229
|
+
workspaceId: string;
|
|
230
|
+
} | {
|
|
231
|
+
appId: string;
|
|
232
|
+
operation: "userProjects.getDefaultSelection";
|
|
233
|
+
requestId: string;
|
|
234
|
+
workspaceId: string;
|
|
235
|
+
} | {
|
|
236
|
+
appId: string;
|
|
237
|
+
operation: "userProjects.getSnapshot";
|
|
238
|
+
requestId: string;
|
|
239
|
+
workspaceId: string;
|
|
240
|
+
} | {
|
|
241
|
+
appId: string;
|
|
242
|
+
operation: "userProjects.list";
|
|
243
|
+
requestId: string;
|
|
244
|
+
workspaceId: string;
|
|
245
|
+
} | {
|
|
246
|
+
appId: string;
|
|
247
|
+
input: WorkspaceUserProjectSelectionPreparationInput;
|
|
248
|
+
operation: "userProjects.prepareSelection";
|
|
249
|
+
requestId: string;
|
|
250
|
+
workspaceId: string;
|
|
251
|
+
} | {
|
|
252
|
+
appId: string;
|
|
253
|
+
operation: "userProjects.refresh";
|
|
254
|
+
requestId: string;
|
|
255
|
+
workspaceId: string;
|
|
256
|
+
} | {
|
|
257
|
+
appId: string;
|
|
258
|
+
input: TuttiExternalUserProjectRememberDefaultSelectionInput;
|
|
259
|
+
operation: "userProjects.rememberDefaultSelection";
|
|
260
|
+
requestId: string;
|
|
261
|
+
workspaceId: string;
|
|
262
|
+
} | {
|
|
263
|
+
appId: string;
|
|
264
|
+
operation: "userProjects.selectDirectory";
|
|
265
|
+
requestId: string;
|
|
266
|
+
workspaceId: string;
|
|
267
|
+
} | {
|
|
268
|
+
appId: string;
|
|
269
|
+
input: TuttiExternalUserProjectPathInput;
|
|
270
|
+
operation: "userProjects.use";
|
|
271
|
+
requestId: string;
|
|
272
|
+
workspaceId: string;
|
|
167
273
|
};
|
|
168
274
|
|
|
169
|
-
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 TuttiExternalPermissionRequestInput, type TuttiExternalPermissionRequestResult, type TuttiExternalReferenceOpenInput, type TuttiExternalRendererRequest, type TuttiExternalSettingsOpenInput, type TuttiExternalWorkspaceAgentProvider, type TuttiExternalWorkspaceFeature, type TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders };
|
|
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 };
|
package/dist/contracts/index.js
CHANGED
package/dist/core/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { TuttiExternalAtProviderId, TuttiExternalManagedAiModelProviderId, TuttiExternalWorkspaceAgentProvider, TuttiExternalWorkspaceFeature, TuttiExternalAtQueryInput, TuttiExternalFileOpenInput, TuttiExternalFileSelectInput, TuttiExternalLogInput, TuttiExternalPermissionRequestInput, TuttiExternalReferenceOpenInput, TuttiExternalSettingsOpenInput, TuttiExternalWorkspaceOpenFeatureInput } from '../contracts/index.js';
|
|
1
|
+
import { TuttiExternalAtProviderId, TuttiExternalManagedAiModelProviderId, TuttiExternalWorkspaceAgentProvider, TuttiExternalWorkspaceFeature, TuttiExternalAtQueryInput, TuttiExternalFileOpenInput, TuttiExternalFileSelectInput, TuttiExternalLogInput, TuttiExternalPdfPrintHtmlInput, TuttiExternalPermissionRequestInput, TuttiExternalReferenceOpenInput, TuttiExternalSettingsOpenInput, TuttiExternalUserProjectCreateInput, TuttiExternalUserProjectPathInput, TuttiExternalUserProjectRememberDefaultSelectionInput, TuttiExternalWorkspaceOpenFeatureInput } from '../contracts/index.js';
|
|
2
2
|
export { tuttiExternalAtProviderIds, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders } from '../contracts/index.js';
|
|
3
|
+
import { WorkspaceUserProjectSelectionPreparationInput } from '@tutti-os/workspace-user-project/contracts';
|
|
3
4
|
import '@tutti-os/workspace-file-reference/contracts';
|
|
4
5
|
|
|
5
6
|
declare const tuttiExternalAtMaxResultsLimit = 50;
|
|
@@ -15,9 +16,14 @@ declare function normalizeTuttiExternalPermissionRequestInput(input: unknown): T
|
|
|
15
16
|
declare function normalizeTuttiExternalSettingsOpenInput(input: unknown): TuttiExternalSettingsOpenInput;
|
|
16
17
|
declare function normalizeTuttiExternalWorkspaceOpenFeatureInput(input: unknown): TuttiExternalWorkspaceOpenFeatureInput;
|
|
17
18
|
declare function normalizeTuttiExternalReferenceOpenInput(input: unknown): TuttiExternalReferenceOpenInput;
|
|
19
|
+
declare function normalizeTuttiExternalPdfPrintHtmlInput(input: unknown): TuttiExternalPdfPrintHtmlInput;
|
|
20
|
+
declare function normalizeTuttiExternalUserProjectCreateInput(input: unknown): TuttiExternalUserProjectCreateInput;
|
|
21
|
+
declare function normalizeTuttiExternalUserProjectPathInput(input: unknown, operation: "checkPath" | "use"): TuttiExternalUserProjectPathInput;
|
|
22
|
+
declare function normalizeTuttiExternalUserProjectRememberDefaultSelectionInput(input: unknown): TuttiExternalUserProjectRememberDefaultSelectionInput;
|
|
23
|
+
declare function normalizeTuttiExternalUserProjectSelectionPreparationInput(input: unknown): WorkspaceUserProjectSelectionPreparationInput;
|
|
18
24
|
declare function isTuttiExternalAtProviderId(value: unknown): value is TuttiExternalAtProviderId;
|
|
19
25
|
declare function isTuttiExternalManagedAiModelProviderId(value: unknown): value is TuttiExternalManagedAiModelProviderId;
|
|
20
26
|
declare function isTuttiExternalWorkspaceFeature(value: unknown): value is TuttiExternalWorkspaceFeature;
|
|
21
27
|
declare function isTuttiExternalWorkspaceAgentProvider(value: unknown): value is TuttiExternalWorkspaceAgentProvider;
|
|
22
28
|
|
|
23
|
-
export { isTuttiExternalAtProviderId, isTuttiExternalManagedAiModelProviderId, isTuttiExternalWorkspaceAgentProvider, isTuttiExternalWorkspaceFeature, limitDiagnosticText, normalizeTuttiExternalAtQueryInput, normalizeTuttiExternalFileOpenInput, normalizeTuttiExternalFileSelectInput, normalizeTuttiExternalLogInput, normalizeTuttiExternalPermissionRequestInput, normalizeTuttiExternalReferenceOpenInput, normalizeTuttiExternalSettingsOpenInput, normalizeTuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtDefaultMaxResults, tuttiExternalAtMaxResultsLimit, tuttiExternalLogDiagnosticTextLimit, tuttiExternalWorkspaceFeatures };
|
|
29
|
+
export { isTuttiExternalAtProviderId, isTuttiExternalManagedAiModelProviderId, isTuttiExternalWorkspaceAgentProvider, isTuttiExternalWorkspaceFeature, limitDiagnosticText, normalizeTuttiExternalAtQueryInput, normalizeTuttiExternalFileOpenInput, normalizeTuttiExternalFileSelectInput, normalizeTuttiExternalLogInput, normalizeTuttiExternalPdfPrintHtmlInput, normalizeTuttiExternalPermissionRequestInput, normalizeTuttiExternalReferenceOpenInput, normalizeTuttiExternalSettingsOpenInput, normalizeTuttiExternalUserProjectCreateInput, normalizeTuttiExternalUserProjectPathInput, normalizeTuttiExternalUserProjectRememberDefaultSelectionInput, normalizeTuttiExternalUserProjectSelectionPreparationInput, normalizeTuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtDefaultMaxResults, tuttiExternalAtMaxResultsLimit, tuttiExternalLogDiagnosticTextLimit, tuttiExternalWorkspaceFeatures };
|
package/dist/core/index.js
CHANGED
|
@@ -8,20 +8,25 @@ import {
|
|
|
8
8
|
normalizeTuttiExternalFileOpenInput,
|
|
9
9
|
normalizeTuttiExternalFileSelectInput,
|
|
10
10
|
normalizeTuttiExternalLogInput,
|
|
11
|
+
normalizeTuttiExternalPdfPrintHtmlInput,
|
|
11
12
|
normalizeTuttiExternalPermissionRequestInput,
|
|
12
13
|
normalizeTuttiExternalReferenceOpenInput,
|
|
13
14
|
normalizeTuttiExternalSettingsOpenInput,
|
|
15
|
+
normalizeTuttiExternalUserProjectCreateInput,
|
|
16
|
+
normalizeTuttiExternalUserProjectPathInput,
|
|
17
|
+
normalizeTuttiExternalUserProjectRememberDefaultSelectionInput,
|
|
18
|
+
normalizeTuttiExternalUserProjectSelectionPreparationInput,
|
|
14
19
|
normalizeTuttiExternalWorkspaceOpenFeatureInput,
|
|
15
20
|
tuttiExternalAtDefaultMaxResults,
|
|
16
21
|
tuttiExternalAtMaxResultsLimit,
|
|
17
22
|
tuttiExternalLogDiagnosticTextLimit,
|
|
18
23
|
tuttiExternalWorkspaceFeatures
|
|
19
|
-
} from "../chunk-
|
|
24
|
+
} from "../chunk-LGELOEVW.js";
|
|
20
25
|
import {
|
|
21
26
|
tuttiExternalAtProviderIds,
|
|
22
27
|
tuttiExternalManagedAiModelProviderIds,
|
|
23
28
|
tuttiExternalWorkspaceAgentProviders
|
|
24
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-J53NLKKO.js";
|
|
25
30
|
export {
|
|
26
31
|
isTuttiExternalAtProviderId,
|
|
27
32
|
isTuttiExternalManagedAiModelProviderId,
|
|
@@ -32,9 +37,14 @@ export {
|
|
|
32
37
|
normalizeTuttiExternalFileOpenInput,
|
|
33
38
|
normalizeTuttiExternalFileSelectInput,
|
|
34
39
|
normalizeTuttiExternalLogInput,
|
|
40
|
+
normalizeTuttiExternalPdfPrintHtmlInput,
|
|
35
41
|
normalizeTuttiExternalPermissionRequestInput,
|
|
36
42
|
normalizeTuttiExternalReferenceOpenInput,
|
|
37
43
|
normalizeTuttiExternalSettingsOpenInput,
|
|
44
|
+
normalizeTuttiExternalUserProjectCreateInput,
|
|
45
|
+
normalizeTuttiExternalUserProjectPathInput,
|
|
46
|
+
normalizeTuttiExternalUserProjectRememberDefaultSelectionInput,
|
|
47
|
+
normalizeTuttiExternalUserProjectSelectionPreparationInput,
|
|
38
48
|
normalizeTuttiExternalWorkspaceOpenFeatureInput,
|
|
39
49
|
tuttiExternalAtDefaultMaxResults,
|
|
40
50
|
tuttiExternalAtMaxResultsLimit,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { TUTTI_EXTERNAL_AT_PROVIDER_IDS, TuttiExternalAtInsertResult, TuttiExternalAtMentionPresentation, TuttiExternalAtProviderId, TuttiExternalAtQueryInput, TuttiExternalAtQueryResult, TuttiExternalBridge, TuttiExternalFileOpenInput, TuttiExternalFileSelectInput, TuttiExternalFileSelectResult, TuttiExternalLogInput, TuttiExternalLogLevel, TuttiExternalManagedAiModel, TuttiExternalManagedAiModelProviderId, TuttiExternalPermissionRequestInput, TuttiExternalPermissionRequestResult, TuttiExternalReferenceOpenInput, TuttiExternalRendererRequest, TuttiExternalSettingsOpenInput, TuttiExternalWorkspaceAgentProvider, TuttiExternalWorkspaceFeature, TuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtProviderIds, tuttiExternalLogLevels, tuttiExternalManagedAiModelProviderIds, tuttiExternalWorkspaceAgentProviders } from './contracts/index.js';
|
|
2
|
-
export { isTuttiExternalAtProviderId, isTuttiExternalManagedAiModelProviderId, isTuttiExternalWorkspaceAgentProvider, isTuttiExternalWorkspaceFeature, limitDiagnosticText, normalizeTuttiExternalAtQueryInput, normalizeTuttiExternalFileOpenInput, normalizeTuttiExternalFileSelectInput, normalizeTuttiExternalLogInput, normalizeTuttiExternalPermissionRequestInput, normalizeTuttiExternalReferenceOpenInput, normalizeTuttiExternalSettingsOpenInput, normalizeTuttiExternalWorkspaceOpenFeatureInput, tuttiExternalAtDefaultMaxResults, tuttiExternalAtMaxResultsLimit, tuttiExternalLogDiagnosticTextLimit, tuttiExternalWorkspaceFeatures } from './core/index.js';
|
|
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';
|
|
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
|
+
import '@tutti-os/workspace-user-project/contracts';
|
package/dist/index.js
CHANGED
|
@@ -8,20 +8,25 @@ import {
|
|
|
8
8
|
normalizeTuttiExternalFileOpenInput,
|
|
9
9
|
normalizeTuttiExternalFileSelectInput,
|
|
10
10
|
normalizeTuttiExternalLogInput,
|
|
11
|
+
normalizeTuttiExternalPdfPrintHtmlInput,
|
|
11
12
|
normalizeTuttiExternalPermissionRequestInput,
|
|
12
13
|
normalizeTuttiExternalReferenceOpenInput,
|
|
13
14
|
normalizeTuttiExternalSettingsOpenInput,
|
|
15
|
+
normalizeTuttiExternalUserProjectCreateInput,
|
|
16
|
+
normalizeTuttiExternalUserProjectPathInput,
|
|
17
|
+
normalizeTuttiExternalUserProjectRememberDefaultSelectionInput,
|
|
18
|
+
normalizeTuttiExternalUserProjectSelectionPreparationInput,
|
|
14
19
|
normalizeTuttiExternalWorkspaceOpenFeatureInput,
|
|
15
20
|
tuttiExternalAtDefaultMaxResults,
|
|
16
21
|
tuttiExternalAtMaxResultsLimit,
|
|
17
22
|
tuttiExternalLogDiagnosticTextLimit,
|
|
18
23
|
tuttiExternalWorkspaceFeatures
|
|
19
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-LGELOEVW.js";
|
|
20
25
|
import {
|
|
21
26
|
tuttiExternalAtProviderIds,
|
|
22
27
|
tuttiExternalManagedAiModelProviderIds,
|
|
23
28
|
tuttiExternalWorkspaceAgentProviders
|
|
24
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-J53NLKKO.js";
|
|
25
30
|
export {
|
|
26
31
|
isTuttiExternalAtProviderId,
|
|
27
32
|
isTuttiExternalManagedAiModelProviderId,
|
|
@@ -32,9 +37,14 @@ export {
|
|
|
32
37
|
normalizeTuttiExternalFileOpenInput,
|
|
33
38
|
normalizeTuttiExternalFileSelectInput,
|
|
34
39
|
normalizeTuttiExternalLogInput,
|
|
40
|
+
normalizeTuttiExternalPdfPrintHtmlInput,
|
|
35
41
|
normalizeTuttiExternalPermissionRequestInput,
|
|
36
42
|
normalizeTuttiExternalReferenceOpenInput,
|
|
37
43
|
normalizeTuttiExternalSettingsOpenInput,
|
|
44
|
+
normalizeTuttiExternalUserProjectCreateInput,
|
|
45
|
+
normalizeTuttiExternalUserProjectPathInput,
|
|
46
|
+
normalizeTuttiExternalUserProjectRememberDefaultSelectionInput,
|
|
47
|
+
normalizeTuttiExternalUserProjectSelectionPreparationInput,
|
|
38
48
|
normalizeTuttiExternalWorkspaceOpenFeatureInput,
|
|
39
49
|
tuttiExternalAtDefaultMaxResults,
|
|
40
50
|
tuttiExternalAtMaxResultsLimit,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tutti-os/workspace-external-core",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.16",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -28,7 +28,8 @@
|
|
|
28
28
|
"directory": "packages/workspace/external-core"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@tutti-os/workspace-file-reference": "0.0.
|
|
31
|
+
"@tutti-os/workspace-file-reference": "0.0.16",
|
|
32
|
+
"@tutti-os/workspace-user-project": "0.0.16"
|
|
32
33
|
},
|
|
33
34
|
"devDependencies": {
|
|
34
35
|
"@types/node": "^24.0.1",
|
|
@@ -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 TuttiExternalReferenceOpenInput,\n type TuttiExternalSettingsOpenInput,\n type TuttiExternalWorkspaceAgentProvider,\n type TuttiExternalWorkspaceFeature,\n type TuttiExternalWorkspaceOpenFeatureInput\n} from \"../contracts/index.ts\";\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 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 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":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contracts/index.ts"],"sourcesContent":["import type { WorkspaceFileReference } from \"@tutti-os/workspace-file-reference/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 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 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 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"],"mappings":";AAEO,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;AAgBO,IAAM,yBAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;","names":[]}
|