@agimon-ai/doompi-author 0.0.1-alpha.10
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/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/_virtual/_rolldown/runtime.cjs +1 -0
- package/dist/api-contracts.cjs +1 -0
- package/dist/api-contracts.d.cts +2 -0
- package/dist/api-contracts.d.mts +2 -0
- package/dist/api-contracts.mjs +1 -0
- package/dist/authorFacade.cjs +1 -0
- package/dist/authorFacade.d.cts +3 -0
- package/dist/authorFacade.d.mts +3 -0
- package/dist/authorFacade.mjs +1 -0
- package/dist/constants/author.cjs +4 -0
- package/dist/constants/author.cjs.map +1 -0
- package/dist/constants/author.mjs +4 -0
- package/dist/constants/author.mjs.map +1 -0
- package/dist/controllers/authorApi.cjs +2 -0
- package/dist/controllers/authorApi.cjs.map +1 -0
- package/dist/controllers/authorApi.mjs +2 -0
- package/dist/controllers/authorApi.mjs.map +1 -0
- package/dist/controllers/authorBridgeApi.cjs +2 -0
- package/dist/controllers/authorBridgeApi.cjs.map +1 -0
- package/dist/controllers/authorBridgeApi.mjs +2 -0
- package/dist/controllers/authorBridgeApi.mjs.map +1 -0
- package/dist/controllers/authorBridgeMethod.cjs +2 -0
- package/dist/controllers/authorBridgeMethod.cjs.map +1 -0
- package/dist/controllers/authorBridgeMethod.mjs +2 -0
- package/dist/controllers/authorBridgeMethod.mjs.map +1 -0
- package/dist/controllers/authorDocumentApi.cjs +2 -0
- package/dist/controllers/authorDocumentApi.cjs.map +1 -0
- package/dist/controllers/authorDocumentApi.mjs +2 -0
- package/dist/controllers/authorDocumentApi.mjs.map +1 -0
- package/dist/controllers/authorPiMode.cjs +2 -0
- package/dist/controllers/authorPiMode.cjs.map +1 -0
- package/dist/controllers/authorPiMode.mjs +2 -0
- package/dist/controllers/authorPiMode.mjs.map +1 -0
- package/dist/controllers/doomAuthorCommand.cjs +2 -0
- package/dist/controllers/doomAuthorCommand.cjs.map +1 -0
- package/dist/controllers/doomAuthorCommand.d.cts +5 -0
- package/dist/controllers/doomAuthorCommand.d.cts.map +1 -0
- package/dist/controllers/doomAuthorCommand.d.mts +5 -0
- package/dist/controllers/doomAuthorCommand.d.mts.map +1 -0
- package/dist/controllers/doomAuthorCommand.mjs +2 -0
- package/dist/controllers/doomAuthorCommand.mjs.map +1 -0
- package/dist/controllers/webAuthorChannel.cjs +2 -0
- package/dist/controllers/webAuthorChannel.cjs.map +1 -0
- package/dist/controllers/webAuthorChannel.mjs +2 -0
- package/dist/controllers/webAuthorChannel.mjs.map +1 -0
- package/dist/extensions/pi.cjs +2 -0
- package/dist/extensions/pi.cjs.map +1 -0
- package/dist/extensions/pi.d.cts +7 -0
- package/dist/extensions/pi.d.cts.map +1 -0
- package/dist/extensions/pi.d.mts +7 -0
- package/dist/extensions/pi.d.mts.map +1 -0
- package/dist/extensions/pi.mjs +2 -0
- package/dist/extensions/pi.mjs.map +1 -0
- package/dist/extensions/server.cjs +2 -0
- package/dist/extensions/server.cjs.map +1 -0
- package/dist/extensions/server.d.cts +5 -0
- package/dist/extensions/server.d.cts.map +1 -0
- package/dist/extensions/server.d.mts +5 -0
- package/dist/extensions/server.d.mts.map +1 -0
- package/dist/extensions/server.mjs +2 -0
- package/dist/extensions/server.mjs.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.cts +20 -0
- package/dist/index.d.mts +20 -0
- package/dist/index.mjs +1 -0
- package/dist/models/authorBridgeState.cjs +2 -0
- package/dist/models/authorBridgeState.cjs.map +1 -0
- package/dist/models/authorBridgeState.d.cts +31 -0
- package/dist/models/authorBridgeState.d.cts.map +1 -0
- package/dist/models/authorBridgeState.d.mts +31 -0
- package/dist/models/authorBridgeState.d.mts.map +1 -0
- package/dist/models/authorBridgeState.mjs +2 -0
- package/dist/models/authorBridgeState.mjs.map +1 -0
- package/dist/models/authorMode.cjs +2 -0
- package/dist/models/authorMode.cjs.map +1 -0
- package/dist/models/authorMode.d.cts +9 -0
- package/dist/models/authorMode.d.cts.map +1 -0
- package/dist/models/authorMode.d.mts +9 -0
- package/dist/models/authorMode.d.mts.map +1 -0
- package/dist/models/authorMode.mjs +2 -0
- package/dist/models/authorMode.mjs.map +1 -0
- package/dist/schemas/apiContracts.cjs +4 -0
- package/dist/schemas/apiContracts.cjs.map +1 -0
- package/dist/schemas/apiContracts.d.cts +53 -0
- package/dist/schemas/apiContracts.d.cts.map +1 -0
- package/dist/schemas/apiContracts.d.mts +53 -0
- package/dist/schemas/apiContracts.d.mts.map +1 -0
- package/dist/schemas/apiContracts.mjs +4 -0
- package/dist/schemas/apiContracts.mjs.map +1 -0
- package/dist/schemas/authorFacade.cjs +2 -0
- package/dist/schemas/authorFacade.cjs.map +1 -0
- package/dist/schemas/authorFacade.d.cts +112 -0
- package/dist/schemas/authorFacade.d.cts.map +1 -0
- package/dist/schemas/authorFacade.d.mts +112 -0
- package/dist/schemas/authorFacade.d.mts.map +1 -0
- package/dist/schemas/authorFacade.mjs +2 -0
- package/dist/schemas/authorFacade.mjs.map +1 -0
- package/dist/schemas/authorTools.cjs +2 -0
- package/dist/schemas/authorTools.cjs.map +1 -0
- package/dist/schemas/authorTools.d.cts +12 -0
- package/dist/schemas/authorTools.d.cts.map +1 -0
- package/dist/schemas/authorTools.d.mts +12 -0
- package/dist/schemas/authorTools.d.mts.map +1 -0
- package/dist/schemas/authorTools.mjs +2 -0
- package/dist/schemas/authorTools.mjs.map +1 -0
- package/dist/services/authorCatalog/index.cjs +2 -0
- package/dist/services/authorCatalog/index.cjs.map +1 -0
- package/dist/services/authorCatalog/index.d.cts +6 -0
- package/dist/services/authorCatalog/index.d.cts.map +1 -0
- package/dist/services/authorCatalog/index.d.mts +6 -0
- package/dist/services/authorCatalog/index.d.mts.map +1 -0
- package/dist/services/authorCatalog/index.mjs +2 -0
- package/dist/services/authorCatalog/index.mjs.map +1 -0
- package/dist/services/authorCatalog/monitor.cjs +2 -0
- package/dist/services/authorCatalog/monitor.cjs.map +1 -0
- package/dist/services/authorCatalog/monitor.d.cts +20 -0
- package/dist/services/authorCatalog/monitor.d.cts.map +1 -0
- package/dist/services/authorCatalog/monitor.d.mts +20 -0
- package/dist/services/authorCatalog/monitor.d.mts.map +1 -0
- package/dist/services/authorCatalog/monitor.mjs +2 -0
- package/dist/services/authorCatalog/monitor.mjs.map +1 -0
- package/dist/services/authorCatalog/type.d.cts +10 -0
- package/dist/services/authorCatalog/type.d.cts.map +1 -0
- package/dist/services/authorCatalog/type.d.mts +10 -0
- package/dist/services/authorCatalog/type.d.mts.map +1 -0
- package/dist/services/authorPrompt/index.cjs +2 -0
- package/dist/services/authorPrompt/index.cjs.map +1 -0
- package/dist/services/authorPrompt/index.mjs +2 -0
- package/dist/services/authorPrompt/index.mjs.map +1 -0
- package/dist/services/structuredDocuments/common.cjs +2 -0
- package/dist/services/structuredDocuments/common.cjs.map +1 -0
- package/dist/services/structuredDocuments/common.mjs +2 -0
- package/dist/services/structuredDocuments/common.mjs.map +1 -0
- package/dist/services/structuredDocuments/csv.cjs +7 -0
- package/dist/services/structuredDocuments/csv.cjs.map +1 -0
- package/dist/services/structuredDocuments/csv.d.cts +7 -0
- package/dist/services/structuredDocuments/csv.d.cts.map +1 -0
- package/dist/services/structuredDocuments/csv.d.mts +7 -0
- package/dist/services/structuredDocuments/csv.d.mts.map +1 -0
- package/dist/services/structuredDocuments/csv.mjs +7 -0
- package/dist/services/structuredDocuments/csv.mjs.map +1 -0
- package/dist/services/structuredDocuments/document.cjs +2 -0
- package/dist/services/structuredDocuments/document.cjs.map +1 -0
- package/dist/services/structuredDocuments/document.mjs +2 -0
- package/dist/services/structuredDocuments/document.mjs.map +1 -0
- package/dist/services/structuredDocuments/index.cjs +2 -0
- package/dist/services/structuredDocuments/index.cjs.map +1 -0
- package/dist/services/structuredDocuments/index.d.cts +13 -0
- package/dist/services/structuredDocuments/index.d.cts.map +1 -0
- package/dist/services/structuredDocuments/index.d.mts +13 -0
- package/dist/services/structuredDocuments/index.d.mts.map +1 -0
- package/dist/services/structuredDocuments/index.mjs +2 -0
- package/dist/services/structuredDocuments/index.mjs.map +1 -0
- package/dist/services/structuredDocuments/markdownSlides.cjs +6 -0
- package/dist/services/structuredDocuments/markdownSlides.cjs.map +1 -0
- package/dist/services/structuredDocuments/markdownSlides.d.cts +7 -0
- package/dist/services/structuredDocuments/markdownSlides.d.cts.map +1 -0
- package/dist/services/structuredDocuments/markdownSlides.d.mts +7 -0
- package/dist/services/structuredDocuments/markdownSlides.d.mts.map +1 -0
- package/dist/services/structuredDocuments/markdownSlides.mjs +6 -0
- package/dist/services/structuredDocuments/markdownSlides.mjs.map +1 -0
- package/dist/services/structuredDocuments/ooxmlArchive.cjs +2 -0
- package/dist/services/structuredDocuments/ooxmlArchive.cjs.map +1 -0
- package/dist/services/structuredDocuments/ooxmlArchive.d.cts +13 -0
- package/dist/services/structuredDocuments/ooxmlArchive.d.cts.map +1 -0
- package/dist/services/structuredDocuments/ooxmlArchive.d.mts +13 -0
- package/dist/services/structuredDocuments/ooxmlArchive.d.mts.map +1 -0
- package/dist/services/structuredDocuments/ooxmlArchive.mjs +2 -0
- package/dist/services/structuredDocuments/ooxmlArchive.mjs.map +1 -0
- package/dist/services/structuredDocuments/pptx.cjs +2 -0
- package/dist/services/structuredDocuments/pptx.cjs.map +1 -0
- package/dist/services/structuredDocuments/pptx.d.cts +7 -0
- package/dist/services/structuredDocuments/pptx.d.cts.map +1 -0
- package/dist/services/structuredDocuments/pptx.d.mts +7 -0
- package/dist/services/structuredDocuments/pptx.d.mts.map +1 -0
- package/dist/services/structuredDocuments/pptx.mjs +2 -0
- package/dist/services/structuredDocuments/pptx.mjs.map +1 -0
- package/dist/services/structuredDocuments/xlsx.cjs +2 -0
- package/dist/services/structuredDocuments/xlsx.cjs.map +1 -0
- package/dist/services/structuredDocuments/xlsx.d.cts +7 -0
- package/dist/services/structuredDocuments/xlsx.d.cts.map +1 -0
- package/dist/services/structuredDocuments/xlsx.d.mts +7 -0
- package/dist/services/structuredDocuments/xlsx.d.mts.map +1 -0
- package/dist/services/structuredDocuments/xlsx.mjs +2 -0
- package/dist/services/structuredDocuments/xlsx.mjs.map +1 -0
- package/dist/services/structuredDocuments/xmlText.cjs +2 -0
- package/dist/services/structuredDocuments/xmlText.cjs.map +1 -0
- package/dist/services/structuredDocuments/xmlText.mjs +2 -0
- package/dist/services/structuredDocuments/xmlText.mjs.map +1 -0
- package/dist/tools/authorTools.cjs +2 -0
- package/dist/tools/authorTools.cjs.map +1 -0
- package/dist/tools/authorTools.d.cts +6 -0
- package/dist/tools/authorTools.d.cts.map +1 -0
- package/dist/tools/authorTools.d.mts +6 -0
- package/dist/tools/authorTools.d.mts.map +1 -0
- package/dist/tools/authorTools.mjs +2 -0
- package/dist/tools/authorTools.mjs.map +1 -0
- package/dist/types/author.cjs +2 -0
- package/dist/types/author.cjs.map +1 -0
- package/dist/types/author.d.cts +39 -0
- package/dist/types/author.d.cts.map +1 -0
- package/dist/types/author.d.mts +39 -0
- package/dist/types/author.d.mts.map +1 -0
- package/dist/types/author.mjs +2 -0
- package/dist/types/author.mjs.map +1 -0
- package/dist/types/authorApi.cjs +2 -0
- package/dist/types/authorApi.cjs.map +1 -0
- package/dist/types/authorApi.d.cts +23 -0
- package/dist/types/authorApi.d.cts.map +1 -0
- package/dist/types/authorApi.d.mts +23 -0
- package/dist/types/authorApi.d.mts.map +1 -0
- package/dist/types/authorApi.mjs +2 -0
- package/dist/types/authorApi.mjs.map +1 -0
- package/dist/types/extension.d.cts +16 -0
- package/dist/types/extension.d.cts.map +1 -0
- package/dist/types/extension.d.mts +16 -0
- package/dist/types/extension.d.mts.map +1 -0
- package/dist/types/structuredDocuments.d.cts +60 -0
- package/dist/types/structuredDocuments.d.cts.map +1 -0
- package/dist/types/structuredDocuments.d.mts +60 -0
- package/dist/types/structuredDocuments.d.mts.map +1 -0
- package/dist/types/webAuthor.cjs +2 -0
- package/dist/types/webAuthor.cjs.map +1 -0
- package/dist/types/webAuthor.d.cts +67 -0
- package/dist/types/webAuthor.d.cts.map +1 -0
- package/dist/types/webAuthor.d.mts +67 -0
- package/dist/types/webAuthor.d.mts.map +1 -0
- package/dist/types/webAuthor.mjs +2 -0
- package/dist/types/webAuthor.mjs.map +1 -0
- package/llms.txt +11 -0
- package/package.json +147 -0
- package/src/extensions/web.ts +71 -0
- package/src/prompts/doompi-use-author/SKILL.md +17 -0
- package/src/types/author.ts +45 -0
- package/src/types/structuredDocuments.ts +63 -0
- package/src/types/webAuthor.ts +85 -0
- package/src/web/api/authorBroker.ts +14 -0
- package/src/web/api/authorBrowserBridge.ts +229 -0
- package/src/web/api/authorFiles.ts +221 -0
- package/src/web/api/authorMedia.ts +19 -0
- package/src/web/api/authorRuntime.ts +165 -0
- package/src/web/components/AuthorDocumentPanel.tsx +233 -0
- package/src/web/components/AuthorGridOverlay.tsx +82 -0
- package/src/web/components/AuthorMediaPreview.tsx +42 -0
- package/src/web/components/AuthorMediaView.tsx +357 -0
- package/src/web/components/AuthorPanel.tsx +102 -0
- package/src/web/components/AuthorRegionDrafts.tsx +103 -0
- package/src/web/components/AuthorRequestLog.tsx +179 -0
- package/src/web/components/AuthorStructuredView.tsx +122 -0
- package/src/web/components/AuthorTextView.tsx +98 -0
- package/src/web/components/AuthorToolPalette.tsx +104 -0
- package/src/web/components/AuthorVideoControls.tsx +111 -0
- package/src/web/components/DescribeAuthorToolsToolCard.tsx +51 -0
- package/src/web/components/OpenAuthoringFileToolCard.tsx +67 -0
- package/src/web/components/UseAuthorToolsToolCard.tsx +51 -0
- package/src/web/lib/authorGrid.ts +125 -0
- package/src/web/lib/authorRegions.ts +30 -0
- package/src/web/lib/authorViewportTypes.ts +202 -0
- package/src/web/lib/describeAuthorToolsToolRender.ts +20 -0
- package/src/web/lib/useAuthorToolsToolRender.ts +20 -0
- package/src/web/stores/authorCapture.ts +323 -0
- package/src/web/stores/authorGridTools.ts +316 -0
- package/src/web/stores/authorProfiles.ts +130 -0
- package/src/web/stores/authorRequestLifecycle.ts +83 -0
- package/src/web/stores/authorStore.ts +61 -0
- package/src/web/stores/authorWorkspaceStore.ts +526 -0
- package/src/web/tsconfig.json +22 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Static, Type } from "typebox";
|
|
2
|
+
import { DoomApiScope } from "@agimon-ai/doompi-core/package-api";
|
|
3
|
+
//#region src/schemas/authorFacade.d.ts
|
|
4
|
+
/** Lists the capabilities exposed by the current Author viewport. */
|
|
5
|
+
export declare const AuthorDescribeToolsInputSchema: Type.TObject<{}>;
|
|
6
|
+
export type AuthorDescribeToolsInput = Static<typeof AuthorDescribeToolsInputSchema>;
|
|
7
|
+
/** Invokes one capability exposed by the current Author viewport. */
|
|
8
|
+
export declare const AuthorUseToolsInputSchema: Type.TObject<{
|
|
9
|
+
catalogToken: Type.TString;
|
|
10
|
+
name: Type.TString;
|
|
11
|
+
arguments: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
12
|
+
}>;
|
|
13
|
+
export type AuthorUseToolsInput = Static<typeof AuthorUseToolsInputSchema>;
|
|
14
|
+
/** Browser-to-server lease messages, validated before Author sees the payload. */
|
|
15
|
+
export declare const AuthorBridgeMessageSchema: Type.TUnion<[Type.TObject<{
|
|
16
|
+
generation: Type.TNumber;
|
|
17
|
+
kind: Type.TLiteral<"register">;
|
|
18
|
+
}>, Type.TObject<{
|
|
19
|
+
generation: Type.TNumber;
|
|
20
|
+
kind: Type.TLiteral<"release">;
|
|
21
|
+
}>, Type.TObject<{
|
|
22
|
+
generation: Type.TNumber;
|
|
23
|
+
kind: Type.TLiteral<"catalog">;
|
|
24
|
+
ownerToken: Type.TString;
|
|
25
|
+
tools: Type.TArray<Type.TObject<{
|
|
26
|
+
name: Type.TString;
|
|
27
|
+
label: Type.TString;
|
|
28
|
+
description: Type.TString;
|
|
29
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
30
|
+
}>>;
|
|
31
|
+
}>, Type.TObject<{
|
|
32
|
+
generation: Type.TNumber;
|
|
33
|
+
kind: Type.TLiteral<"result">;
|
|
34
|
+
ownerToken: Type.TString;
|
|
35
|
+
catalogToken: Type.TString;
|
|
36
|
+
requestId: Type.TString;
|
|
37
|
+
result: Type.TUnknown;
|
|
38
|
+
}>, Type.TObject<{
|
|
39
|
+
generation: Type.TNumber;
|
|
40
|
+
kind: Type.TLiteral<"cancelled">;
|
|
41
|
+
ownerToken: Type.TString;
|
|
42
|
+
catalogToken: Type.TString;
|
|
43
|
+
requestId: Type.TString;
|
|
44
|
+
}>]>;
|
|
45
|
+
export declare const AuthorBridgeInputSchema: Type.TObject<{
|
|
46
|
+
sessionId: Type.TString;
|
|
47
|
+
message: Type.TUnion<[Type.TObject<{
|
|
48
|
+
generation: Type.TNumber;
|
|
49
|
+
kind: Type.TLiteral<"register">;
|
|
50
|
+
}>, Type.TObject<{
|
|
51
|
+
generation: Type.TNumber;
|
|
52
|
+
kind: Type.TLiteral<"release">;
|
|
53
|
+
}>, Type.TObject<{
|
|
54
|
+
generation: Type.TNumber;
|
|
55
|
+
kind: Type.TLiteral<"catalog">;
|
|
56
|
+
ownerToken: Type.TString;
|
|
57
|
+
tools: Type.TArray<Type.TObject<{
|
|
58
|
+
name: Type.TString;
|
|
59
|
+
label: Type.TString;
|
|
60
|
+
description: Type.TString;
|
|
61
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
62
|
+
}>>;
|
|
63
|
+
}>, Type.TObject<{
|
|
64
|
+
generation: Type.TNumber;
|
|
65
|
+
kind: Type.TLiteral<"result">;
|
|
66
|
+
ownerToken: Type.TString;
|
|
67
|
+
catalogToken: Type.TString;
|
|
68
|
+
requestId: Type.TString;
|
|
69
|
+
result: Type.TUnknown;
|
|
70
|
+
}>, Type.TObject<{
|
|
71
|
+
generation: Type.TNumber;
|
|
72
|
+
kind: Type.TLiteral<"cancelled">;
|
|
73
|
+
ownerToken: Type.TString;
|
|
74
|
+
catalogToken: Type.TString;
|
|
75
|
+
requestId: Type.TString;
|
|
76
|
+
}>]>;
|
|
77
|
+
}>;
|
|
78
|
+
export declare function authorBridgeMethod(scope: Extract<DoomApiScope, 'global' | 'workspace'>): import("@agimon-ai/doompi-core/plugin-protocol").DoomPluginMethod<Type.TObject<{
|
|
79
|
+
sessionId: Type.TString;
|
|
80
|
+
message: Type.TUnion<[Type.TObject<{
|
|
81
|
+
generation: Type.TNumber;
|
|
82
|
+
kind: Type.TLiteral<"register">;
|
|
83
|
+
}>, Type.TObject<{
|
|
84
|
+
generation: Type.TNumber;
|
|
85
|
+
kind: Type.TLiteral<"release">;
|
|
86
|
+
}>, Type.TObject<{
|
|
87
|
+
generation: Type.TNumber;
|
|
88
|
+
kind: Type.TLiteral<"catalog">;
|
|
89
|
+
ownerToken: Type.TString;
|
|
90
|
+
tools: Type.TArray<Type.TObject<{
|
|
91
|
+
name: Type.TString;
|
|
92
|
+
label: Type.TString;
|
|
93
|
+
description: Type.TString;
|
|
94
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
95
|
+
}>>;
|
|
96
|
+
}>, Type.TObject<{
|
|
97
|
+
generation: Type.TNumber;
|
|
98
|
+
kind: Type.TLiteral<"result">;
|
|
99
|
+
ownerToken: Type.TString;
|
|
100
|
+
catalogToken: Type.TString;
|
|
101
|
+
requestId: Type.TString;
|
|
102
|
+
result: Type.TUnknown;
|
|
103
|
+
}>, Type.TObject<{
|
|
104
|
+
generation: Type.TNumber;
|
|
105
|
+
kind: Type.TLiteral<"cancelled">;
|
|
106
|
+
ownerToken: Type.TString;
|
|
107
|
+
catalogToken: Type.TString;
|
|
108
|
+
requestId: Type.TString;
|
|
109
|
+
}>]>;
|
|
110
|
+
}>, Type.TObject<{}>>;
|
|
111
|
+
//#endregion
|
|
112
|
+
//# sourceMappingURL=authorFacade.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorFacade.d.cts","names":[],"sources":["../../src/schemas/authorFacade.ts"],"mappings":";;;;qBAWa,gCAA8B,KAAA;YAC/B,2BAA2B,cAAc;;qBAGxC,2BAAyB,KAAA;;;;;YAQ1B,sBAAsB,cAAc;;qBAOnC,2BAAyB,KAAA,QAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6CzB,yBAAuB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAKpB,mBAAmB,OAAO,QAAQ,yFAAqC,iBAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAStF,KAAA"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
import { Static, Type } from "typebox";
|
|
2
|
+
import { DoomApiScope } from "@agimon-ai/doompi-core/package-api";
|
|
3
|
+
//#region src/schemas/authorFacade.d.ts
|
|
4
|
+
/** Lists the capabilities exposed by the current Author viewport. */
|
|
5
|
+
export declare const AuthorDescribeToolsInputSchema: Type.TObject<{}>;
|
|
6
|
+
export type AuthorDescribeToolsInput = Static<typeof AuthorDescribeToolsInputSchema>;
|
|
7
|
+
/** Invokes one capability exposed by the current Author viewport. */
|
|
8
|
+
export declare const AuthorUseToolsInputSchema: Type.TObject<{
|
|
9
|
+
catalogToken: Type.TString;
|
|
10
|
+
name: Type.TString;
|
|
11
|
+
arguments: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
12
|
+
}>;
|
|
13
|
+
export type AuthorUseToolsInput = Static<typeof AuthorUseToolsInputSchema>;
|
|
14
|
+
/** Browser-to-server lease messages, validated before Author sees the payload. */
|
|
15
|
+
export declare const AuthorBridgeMessageSchema: Type.TUnion<[Type.TObject<{
|
|
16
|
+
generation: Type.TNumber;
|
|
17
|
+
kind: Type.TLiteral<"register">;
|
|
18
|
+
}>, Type.TObject<{
|
|
19
|
+
generation: Type.TNumber;
|
|
20
|
+
kind: Type.TLiteral<"release">;
|
|
21
|
+
}>, Type.TObject<{
|
|
22
|
+
generation: Type.TNumber;
|
|
23
|
+
kind: Type.TLiteral<"catalog">;
|
|
24
|
+
ownerToken: Type.TString;
|
|
25
|
+
tools: Type.TArray<Type.TObject<{
|
|
26
|
+
name: Type.TString;
|
|
27
|
+
label: Type.TString;
|
|
28
|
+
description: Type.TString;
|
|
29
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
30
|
+
}>>;
|
|
31
|
+
}>, Type.TObject<{
|
|
32
|
+
generation: Type.TNumber;
|
|
33
|
+
kind: Type.TLiteral<"result">;
|
|
34
|
+
ownerToken: Type.TString;
|
|
35
|
+
catalogToken: Type.TString;
|
|
36
|
+
requestId: Type.TString;
|
|
37
|
+
result: Type.TUnknown;
|
|
38
|
+
}>, Type.TObject<{
|
|
39
|
+
generation: Type.TNumber;
|
|
40
|
+
kind: Type.TLiteral<"cancelled">;
|
|
41
|
+
ownerToken: Type.TString;
|
|
42
|
+
catalogToken: Type.TString;
|
|
43
|
+
requestId: Type.TString;
|
|
44
|
+
}>]>;
|
|
45
|
+
export declare const AuthorBridgeInputSchema: Type.TObject<{
|
|
46
|
+
sessionId: Type.TString;
|
|
47
|
+
message: Type.TUnion<[Type.TObject<{
|
|
48
|
+
generation: Type.TNumber;
|
|
49
|
+
kind: Type.TLiteral<"register">;
|
|
50
|
+
}>, Type.TObject<{
|
|
51
|
+
generation: Type.TNumber;
|
|
52
|
+
kind: Type.TLiteral<"release">;
|
|
53
|
+
}>, Type.TObject<{
|
|
54
|
+
generation: Type.TNumber;
|
|
55
|
+
kind: Type.TLiteral<"catalog">;
|
|
56
|
+
ownerToken: Type.TString;
|
|
57
|
+
tools: Type.TArray<Type.TObject<{
|
|
58
|
+
name: Type.TString;
|
|
59
|
+
label: Type.TString;
|
|
60
|
+
description: Type.TString;
|
|
61
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
62
|
+
}>>;
|
|
63
|
+
}>, Type.TObject<{
|
|
64
|
+
generation: Type.TNumber;
|
|
65
|
+
kind: Type.TLiteral<"result">;
|
|
66
|
+
ownerToken: Type.TString;
|
|
67
|
+
catalogToken: Type.TString;
|
|
68
|
+
requestId: Type.TString;
|
|
69
|
+
result: Type.TUnknown;
|
|
70
|
+
}>, Type.TObject<{
|
|
71
|
+
generation: Type.TNumber;
|
|
72
|
+
kind: Type.TLiteral<"cancelled">;
|
|
73
|
+
ownerToken: Type.TString;
|
|
74
|
+
catalogToken: Type.TString;
|
|
75
|
+
requestId: Type.TString;
|
|
76
|
+
}>]>;
|
|
77
|
+
}>;
|
|
78
|
+
export declare function authorBridgeMethod(scope: Extract<DoomApiScope, 'global' | 'workspace'>): import("@agimon-ai/doompi-core/plugin-protocol").DoomPluginMethod<Type.TObject<{
|
|
79
|
+
sessionId: Type.TString;
|
|
80
|
+
message: Type.TUnion<[Type.TObject<{
|
|
81
|
+
generation: Type.TNumber;
|
|
82
|
+
kind: Type.TLiteral<"register">;
|
|
83
|
+
}>, Type.TObject<{
|
|
84
|
+
generation: Type.TNumber;
|
|
85
|
+
kind: Type.TLiteral<"release">;
|
|
86
|
+
}>, Type.TObject<{
|
|
87
|
+
generation: Type.TNumber;
|
|
88
|
+
kind: Type.TLiteral<"catalog">;
|
|
89
|
+
ownerToken: Type.TString;
|
|
90
|
+
tools: Type.TArray<Type.TObject<{
|
|
91
|
+
name: Type.TString;
|
|
92
|
+
label: Type.TString;
|
|
93
|
+
description: Type.TString;
|
|
94
|
+
inputSchema: Type.TRecord<"^.*$", Type.TUnknown>;
|
|
95
|
+
}>>;
|
|
96
|
+
}>, Type.TObject<{
|
|
97
|
+
generation: Type.TNumber;
|
|
98
|
+
kind: Type.TLiteral<"result">;
|
|
99
|
+
ownerToken: Type.TString;
|
|
100
|
+
catalogToken: Type.TString;
|
|
101
|
+
requestId: Type.TString;
|
|
102
|
+
result: Type.TUnknown;
|
|
103
|
+
}>, Type.TObject<{
|
|
104
|
+
generation: Type.TNumber;
|
|
105
|
+
kind: Type.TLiteral<"cancelled">;
|
|
106
|
+
ownerToken: Type.TString;
|
|
107
|
+
catalogToken: Type.TString;
|
|
108
|
+
requestId: Type.TString;
|
|
109
|
+
}>]>;
|
|
110
|
+
}>, Type.TObject<{}>>;
|
|
111
|
+
//#endregion
|
|
112
|
+
//# sourceMappingURL=authorFacade.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorFacade.d.mts","names":[],"sources":["../../src/schemas/authorFacade.ts"],"mappings":";;;;qBAWa,gCAA8B,KAAA;YAC/B,2BAA2B,cAAc;;qBAGxC,2BAAyB,KAAA;;;;;YAQ1B,sBAAsB,cAAc;;qBAOnC,2BAAyB,KAAA,QAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qBA6CzB,yBAAuB,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAKpB,mBAAmB,OAAO,QAAQ,yFAAqC,iBAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAStF,KAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Type as e}from"typebox";import{defineDoomPluginMethod as t}from"@agimon-ai/doompi-core/plugin-protocol";const n=e.String({minLength:1,maxLength:30,pattern:`^[a-z][a-z0-9_]*$`}),r=e.Object({},{additionalProperties:!1}),i=e.Object({catalogToken:e.String({minLength:1,maxLength:256}),name:n,arguments:e.Record(e.String(),e.Unknown())},{additionalProperties:!1}),a={generation:e.Number({minimum:0})},o=e.Union([e.Object({...a,kind:e.Literal(`register`)},{additionalProperties:!1}),e.Object({...a,kind:e.Literal(`release`)},{additionalProperties:!1}),e.Object({...a,kind:e.Literal(`catalog`),ownerToken:e.String({minLength:1}),tools:e.Array(e.Object({name:e.String({minLength:1}),label:e.String(),description:e.String(),inputSchema:e.Record(e.String(),e.Unknown())},{additionalProperties:!1}))},{additionalProperties:!1}),e.Object({...a,kind:e.Literal(`result`),ownerToken:e.String({minLength:1}),catalogToken:e.String({minLength:1}),requestId:e.String({minLength:1}),result:e.Unknown()},{additionalProperties:!1}),e.Object({...a,kind:e.Literal(`cancelled`),ownerToken:e.String({minLength:1}),catalogToken:e.String({minLength:1}),requestId:e.String({minLength:1})},{additionalProperties:!1})]),s=e.Object({sessionId:e.String({minLength:1}),message:o},{additionalProperties:!1});function c(n){return t({service:`author.bridge`,method:`send`,scope:n,direction:`client-to-server`,input:s,output:e.Object({},{additionalProperties:!1})})}export{s as AuthorBridgeInputSchema,o as AuthorBridgeMessageSchema,r as AuthorDescribeToolsInputSchema,i as AuthorUseToolsInputSchema,c as authorBridgeMethod};
|
|
2
|
+
//# sourceMappingURL=authorFacade.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorFacade.mjs","names":[],"sources":["../../src/schemas/authorFacade.ts"],"sourcesContent":["import type { DoomApiScope } from '@agimon-ai/doompi-core/package-api';\nimport { defineDoomPluginMethod } from '@agimon-ai/doompi-core/plugin-protocol';\nimport { type Static, Type } from 'typebox';\n\nconst AuthorCapabilityNameSchema = Type.String({\n minLength: 1,\n maxLength: 30,\n pattern: '^[a-z][a-z0-9_]*$',\n});\n\n/** Lists the capabilities exposed by the current Author viewport. */\nexport const AuthorDescribeToolsInputSchema = Type.Object({}, { additionalProperties: false });\nexport type AuthorDescribeToolsInput = Static<typeof AuthorDescribeToolsInputSchema>;\n\n/** Invokes one capability exposed by the current Author viewport. */\nexport const AuthorUseToolsInputSchema = Type.Object(\n {\n catalogToken: Type.String({ minLength: 1, maxLength: 256 }),\n name: AuthorCapabilityNameSchema,\n arguments: Type.Record(Type.String(), Type.Unknown()),\n },\n { additionalProperties: false },\n);\nexport type AuthorUseToolsInput = Static<typeof AuthorUseToolsInputSchema>;\n\nconst AuthorBridgeBase = {\n generation: Type.Number({ minimum: 0 }),\n};\n\n/** Browser-to-server lease messages, validated before Author sees the payload. */\nexport const AuthorBridgeMessageSchema = Type.Union([\n Type.Object({ ...AuthorBridgeBase, kind: Type.Literal('register') }, { additionalProperties: false }),\n Type.Object({ ...AuthorBridgeBase, kind: Type.Literal('release') }, { additionalProperties: false }),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('catalog'),\n ownerToken: Type.String({ minLength: 1 }),\n tools: Type.Array(\n Type.Object(\n {\n name: Type.String({ minLength: 1 }),\n label: Type.String(),\n description: Type.String(),\n inputSchema: Type.Record(Type.String(), Type.Unknown()),\n },\n { additionalProperties: false },\n ),\n ),\n },\n { additionalProperties: false },\n ),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('result'),\n ownerToken: Type.String({ minLength: 1 }),\n catalogToken: Type.String({ minLength: 1 }),\n requestId: Type.String({ minLength: 1 }),\n result: Type.Unknown(),\n },\n { additionalProperties: false },\n ),\n Type.Object(\n {\n ...AuthorBridgeBase,\n kind: Type.Literal('cancelled'),\n ownerToken: Type.String({ minLength: 1 }),\n catalogToken: Type.String({ minLength: 1 }),\n requestId: Type.String({ minLength: 1 }),\n },\n { additionalProperties: false },\n ),\n]);\n\nexport const AuthorBridgeInputSchema = Type.Object(\n { sessionId: Type.String({ minLength: 1 }), message: AuthorBridgeMessageSchema },\n { additionalProperties: false },\n);\n\nexport function authorBridgeMethod(scope: Extract<DoomApiScope, 'global' | 'workspace'>) {\n return defineDoomPluginMethod({\n service: 'author.bridge',\n method: 'send',\n scope,\n direction: 'client-to-server',\n input: AuthorBridgeInputSchema,\n output: Type.Object({}, { additionalProperties: false }),\n });\n}\n"],"mappings":"+GAIA,MAAM,EAA6B,EAAK,OAAO,CAC7C,UAAW,EACX,UAAW,GACX,QAAS,mBACX,CAAC,EAGY,EAAiC,EAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,EAIhF,EAA4B,EAAK,OAC5C,CACE,aAAc,EAAK,OAAO,CAAE,UAAW,EAAG,UAAW,GAAI,CAAC,EAC1D,KAAM,EACN,UAAW,EAAK,OAAO,EAAK,OAAO,EAAG,EAAK,QAAQ,CAAC,CACtD,EACA,CAAE,qBAAsB,EAAM,CAChC,EAGM,EAAmB,CACvB,WAAY,EAAK,OAAO,CAAE,QAAS,CAAE,CAAC,CACxC,EAGa,EAA4B,EAAK,MAAM,CAClD,EAAK,OAAO,CAAE,GAAG,EAAkB,KAAM,EAAK,QAAQ,UAAU,CAAE,EAAG,CAAE,qBAAsB,EAAM,CAAC,EACpG,EAAK,OAAO,CAAE,GAAG,EAAkB,KAAM,EAAK,QAAQ,SAAS,CAAE,EAAG,CAAE,qBAAsB,EAAM,CAAC,EACnG,EAAK,OACH,CACE,GAAG,EACH,KAAM,EAAK,QAAQ,SAAS,EAC5B,WAAY,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,MAAO,EAAK,MACV,EAAK,OACH,CACE,KAAM,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAClC,MAAO,EAAK,OAAO,EACnB,YAAa,EAAK,OAAO,EACzB,YAAa,EAAK,OAAO,EAAK,OAAO,EAAG,EAAK,QAAQ,CAAC,CACxD,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CACF,EACA,CAAE,qBAAsB,EAAM,CAChC,EACA,EAAK,OACH,CACE,GAAG,EACH,KAAM,EAAK,QAAQ,QAAQ,EAC3B,WAAY,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,aAAc,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC1C,UAAW,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACvC,OAAQ,EAAK,QAAQ,CACvB,EACA,CAAE,qBAAsB,EAAM,CAChC,EACA,EAAK,OACH,CACE,GAAG,EACH,KAAM,EAAK,QAAQ,WAAW,EAC9B,WAAY,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EACxC,aAAc,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAC1C,UAAW,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,CACzC,EACA,CAAE,qBAAsB,EAAM,CAChC,CACF,CAAC,EAEY,EAA0B,EAAK,OAC1C,CAAE,UAAW,EAAK,OAAO,CAAE,UAAW,CAAE,CAAC,EAAG,QAAS,CAA0B,EAC/E,CAAE,qBAAsB,EAAM,CAChC,EAEA,SAAgB,EAAmB,EAAsD,CACvF,OAAO,EAAuB,CAC5B,QAAS,gBACT,OAAQ,OACR,QACA,UAAW,mBACX,MAAO,EACP,OAAQ,EAAK,OAAO,CAAC,EAAG,CAAE,qBAAsB,EAAM,CAAC,CACzD,CAAC,CACH"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("./authorFacade.cjs"),t={type:`object`,properties:{path:{type:`string`,minLength:1,maxLength:4096}},required:[`path`],additionalProperties:!1},n=e.AuthorDescribeToolsInputSchema,r=e.AuthorUseToolsInputSchema;function i(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function a(e){if(typeof e!=`string`)return e;try{return JSON.parse(e)}catch{throw Error(`Author tool input must be valid JSON.`)}}function o(e){let t=a(e);if(!i(t)||Object.keys(t).some(e=>e!==`path`))throw Error(`open_authoring_file input is invalid.`);if(typeof t.path!=`string`||t.path.length===0||t.path.length>4096||t.path.includes(`\0`))throw Error(`A bounded relative document path is required.`);return{path:t.path}}function s(e){let t=a(e);if(!i(t)||Object.keys(t).length!==0)throw Error(`describe_author_tools accepts no input.`);return{}}function c(e){let t=a(e);if(!i(t)||Object.keys(t).some(e=>![`catalogToken`,`name`,`arguments`].includes(e)))throw Error(`use_author_tools input is invalid.`);if(typeof t.catalogToken!=`string`||t.catalogToken.length===0||t.catalogToken.length>256)throw Error(`A bounded catalogToken is required.`);if(typeof t.name!=`string`||t.name.length>30||!/^[a-z][a-z0-9_]*$/u.test(t.name))throw Error(`A valid Author capability name is required.`);if(!i(t.arguments))throw Error(`Author capability arguments must be an object.`);return{catalogToken:t.catalogToken,name:t.name,arguments:t.arguments}}exports.DescribeAuthorToolsInputSchema=n,exports.OpenAuthoringFileInputSchema=t,exports.UseAuthorToolInputSchema=r,exports.parseDescribeAuthorToolsInput=s,exports.parseOpenAuthoringFileInput=o,exports.parseUseAuthorToolInput=c;
|
|
2
|
+
//# sourceMappingURL=authorTools.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorTools.cjs","names":["AuthorDescribeToolsInputSchema","AuthorUseToolsInputSchema"],"sources":["../../src/schemas/authorTools.ts"],"sourcesContent":["import { AuthorDescribeToolsInputSchema, AuthorUseToolsInputSchema, type AuthorUseToolsInput } from './authorFacade';\n\nexport const OpenAuthoringFileInputSchema = {\n type: 'object',\n properties: { path: { type: 'string', minLength: 1, maxLength: 4096 } },\n required: ['path'],\n additionalProperties: false,\n} as const;\nexport const DescribeAuthorToolsInputSchema = AuthorDescribeToolsInputSchema;\nexport const UseAuthorToolInputSchema = AuthorUseToolsInputSchema;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction decoded(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error('Author tool input must be valid JSON.');\n }\n}\n\nexport function parseOpenAuthoringFileInput(value: unknown): { path: string } {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).some((key) => key !== 'path')) {\n throw new Error('open_authoring_file input is invalid.');\n }\n if (\n typeof input.path !== 'string' ||\n input.path.length === 0 ||\n input.path.length > 4096 ||\n input.path.includes('\\0')\n ) {\n throw new Error('A bounded relative document path is required.');\n }\n return { path: input.path };\n}\nexport function parseDescribeAuthorToolsInput(value: unknown): Record<string, never> {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).length !== 0) throw new Error('describe_author_tools accepts no input.');\n return {};\n}\n\nexport function parseUseAuthorToolInput(value: unknown): AuthorUseToolsInput {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).some((key) => !['catalogToken', 'name', 'arguments'].includes(key))) {\n throw new Error('use_author_tools input is invalid.');\n }\n if (typeof input.catalogToken !== 'string' || input.catalogToken.length === 0 || input.catalogToken.length > 256) {\n throw new Error('A bounded catalogToken is required.');\n }\n if (typeof input.name !== 'string' || input.name.length > 30 || !/^[a-z][a-z0-9_]*$/u.test(input.name)) {\n throw new Error('A valid Author capability name is required.');\n }\n if (!isRecord(input.arguments)) throw new Error('Author capability arguments must be an object.');\n return { catalogToken: input.catalogToken, name: input.name, arguments: input.arguments };\n}\n"],"mappings":"sCAEa,EAA+B,CAC1C,KAAM,SACN,WAAY,CAAE,KAAM,CAAE,KAAM,SAAU,UAAW,EAAG,UAAW,IAAK,CAAE,EACtE,SAAU,CAAC,MAAM,EACjB,qBAAsB,EACxB,EACa,EAAiCA,EAAAA,+BACjC,EAA2BC,EAAAA,0BAExC,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAQ,EAAyB,CACxC,GAAI,OAAO,GAAU,SAAU,OAAO,EACtC,GAAI,CACF,OAAO,KAAK,MAAM,CAAK,CACzB,MAAQ,CACN,MAAU,MAAM,uCAAuC,CACzD,CACF,CAEA,SAAgB,EAA4B,EAAkC,CAC5E,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,KAAM,GAAQ,IAAQ,MAAM,EACrE,MAAU,MAAM,uCAAuC,EAEzD,GACE,OAAO,EAAM,MAAS,UACtB,EAAM,KAAK,SAAW,GACtB,EAAM,KAAK,OAAS,MACpB,EAAM,KAAK,SAAS,IAAI,EAExB,MAAU,MAAM,+CAA+C,EAEjE,MAAO,CAAE,KAAM,EAAM,IAAK,CAC5B,CACA,SAAgB,EAA8B,EAAuC,CACnF,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,SAAW,EAAG,MAAU,MAAM,yCAAyC,EAClH,MAAO,CAAC,CACV,CAEA,SAAgB,EAAwB,EAAqC,CAC3E,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,KAAM,GAAQ,CAAC,CAAC,eAAgB,OAAQ,WAAW,CAAC,CAAC,SAAS,CAAG,CAAC,EAC3G,MAAU,MAAM,oCAAoC,EAEtD,GAAI,OAAO,EAAM,cAAiB,UAAY,EAAM,aAAa,SAAW,GAAK,EAAM,aAAa,OAAS,IAC3G,MAAU,MAAM,qCAAqC,EAEvD,GAAI,OAAO,EAAM,MAAS,UAAY,EAAM,KAAK,OAAS,IAAM,CAAC,qBAAqB,KAAK,EAAM,IAAI,EACnG,MAAU,MAAM,6CAA6C,EAE/D,GAAI,CAAC,EAAS,EAAM,SAAS,EAAG,MAAU,MAAM,gDAAgD,EAChG,MAAO,CAAE,aAAc,EAAM,aAAc,KAAM,EAAM,KAAM,UAAW,EAAM,SAAU,CAC1F"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthorUseToolsInput } from "./authorFacade.cjs";
|
|
2
|
+
//#region src/schemas/authorTools.d.ts
|
|
3
|
+
export declare const DescribeAuthorToolsInputSchema: import("typebox").TObject<{}>;
|
|
4
|
+
export declare const UseAuthorToolInputSchema: import("typebox").TObject<{
|
|
5
|
+
catalogToken: import("typebox").TString;
|
|
6
|
+
name: import("typebox").TString;
|
|
7
|
+
arguments: import("typebox").TRecord<"^.*$", import("typebox").TUnknown>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function parseDescribeAuthorToolsInput(value: unknown): Record<string, never>;
|
|
10
|
+
export declare function parseUseAuthorToolInput(value: unknown): AuthorUseToolsInput;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=authorTools.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorTools.d.cts","names":[],"sources":["../../src/schemas/authorTools.ts"],"mappings":";;qBAQa,kDAA8B;qBAC9B,4CAAwB;;;;;wBA8BrB,8BAA8B,iBAAiB;wBAM/C,wBAAwB,iBAAiB"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AuthorUseToolsInput } from "./authorFacade.mjs";
|
|
2
|
+
//#region src/schemas/authorTools.d.ts
|
|
3
|
+
export declare const DescribeAuthorToolsInputSchema: import("typebox").TObject<{}>;
|
|
4
|
+
export declare const UseAuthorToolInputSchema: import("typebox").TObject<{
|
|
5
|
+
catalogToken: import("typebox").TString;
|
|
6
|
+
name: import("typebox").TString;
|
|
7
|
+
arguments: import("typebox").TRecord<"^.*$", import("typebox").TUnknown>;
|
|
8
|
+
}>;
|
|
9
|
+
export declare function parseDescribeAuthorToolsInput(value: unknown): Record<string, never>;
|
|
10
|
+
export declare function parseUseAuthorToolInput(value: unknown): AuthorUseToolsInput;
|
|
11
|
+
//#endregion
|
|
12
|
+
//# sourceMappingURL=authorTools.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorTools.d.mts","names":[],"sources":["../../src/schemas/authorTools.ts"],"mappings":";;qBAQa,kDAA8B;qBAC9B,4CAAwB;;;;;wBA8BrB,8BAA8B,iBAAiB;wBAM/C,wBAAwB,iBAAiB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AuthorDescribeToolsInputSchema as e,AuthorUseToolsInputSchema as t}from"./authorFacade.mjs";const n={type:`object`,properties:{path:{type:`string`,minLength:1,maxLength:4096}},required:[`path`],additionalProperties:!1},r=e,i=t;function a(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function o(e){if(typeof e!=`string`)return e;try{return JSON.parse(e)}catch{throw Error(`Author tool input must be valid JSON.`)}}function s(e){let t=o(e);if(!a(t)||Object.keys(t).some(e=>e!==`path`))throw Error(`open_authoring_file input is invalid.`);if(typeof t.path!=`string`||t.path.length===0||t.path.length>4096||t.path.includes(`\0`))throw Error(`A bounded relative document path is required.`);return{path:t.path}}function c(e){let t=o(e);if(!a(t)||Object.keys(t).length!==0)throw Error(`describe_author_tools accepts no input.`);return{}}function l(e){let t=o(e);if(!a(t)||Object.keys(t).some(e=>![`catalogToken`,`name`,`arguments`].includes(e)))throw Error(`use_author_tools input is invalid.`);if(typeof t.catalogToken!=`string`||t.catalogToken.length===0||t.catalogToken.length>256)throw Error(`A bounded catalogToken is required.`);if(typeof t.name!=`string`||t.name.length>30||!/^[a-z][a-z0-9_]*$/u.test(t.name))throw Error(`A valid Author capability name is required.`);if(!a(t.arguments))throw Error(`Author capability arguments must be an object.`);return{catalogToken:t.catalogToken,name:t.name,arguments:t.arguments}}export{r as DescribeAuthorToolsInputSchema,n as OpenAuthoringFileInputSchema,i as UseAuthorToolInputSchema,c as parseDescribeAuthorToolsInput,s as parseOpenAuthoringFileInput,l as parseUseAuthorToolInput};
|
|
2
|
+
//# sourceMappingURL=authorTools.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authorTools.mjs","names":[],"sources":["../../src/schemas/authorTools.ts"],"sourcesContent":["import { AuthorDescribeToolsInputSchema, AuthorUseToolsInputSchema, type AuthorUseToolsInput } from './authorFacade';\n\nexport const OpenAuthoringFileInputSchema = {\n type: 'object',\n properties: { path: { type: 'string', minLength: 1, maxLength: 4096 } },\n required: ['path'],\n additionalProperties: false,\n} as const;\nexport const DescribeAuthorToolsInputSchema = AuthorDescribeToolsInputSchema;\nexport const UseAuthorToolInputSchema = AuthorUseToolsInputSchema;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction decoded(value: unknown): unknown {\n if (typeof value !== 'string') return value;\n try {\n return JSON.parse(value) as unknown;\n } catch {\n throw new Error('Author tool input must be valid JSON.');\n }\n}\n\nexport function parseOpenAuthoringFileInput(value: unknown): { path: string } {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).some((key) => key !== 'path')) {\n throw new Error('open_authoring_file input is invalid.');\n }\n if (\n typeof input.path !== 'string' ||\n input.path.length === 0 ||\n input.path.length > 4096 ||\n input.path.includes('\\0')\n ) {\n throw new Error('A bounded relative document path is required.');\n }\n return { path: input.path };\n}\nexport function parseDescribeAuthorToolsInput(value: unknown): Record<string, never> {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).length !== 0) throw new Error('describe_author_tools accepts no input.');\n return {};\n}\n\nexport function parseUseAuthorToolInput(value: unknown): AuthorUseToolsInput {\n const input = decoded(value);\n if (!isRecord(input) || Object.keys(input).some((key) => !['catalogToken', 'name', 'arguments'].includes(key))) {\n throw new Error('use_author_tools input is invalid.');\n }\n if (typeof input.catalogToken !== 'string' || input.catalogToken.length === 0 || input.catalogToken.length > 256) {\n throw new Error('A bounded catalogToken is required.');\n }\n if (typeof input.name !== 'string' || input.name.length > 30 || !/^[a-z][a-z0-9_]*$/u.test(input.name)) {\n throw new Error('A valid Author capability name is required.');\n }\n if (!isRecord(input.arguments)) throw new Error('Author capability arguments must be an object.');\n return { catalogToken: input.catalogToken, name: input.name, arguments: input.arguments };\n}\n"],"mappings":"mGAEA,MAAa,EAA+B,CAC1C,KAAM,SACN,WAAY,CAAE,KAAM,CAAE,KAAM,SAAU,UAAW,EAAG,UAAW,IAAK,CAAE,EACtE,SAAU,CAAC,MAAM,EACjB,qBAAsB,EACxB,EACa,EAAiC,EACjC,EAA2B,EAExC,SAAS,EAAS,EAAkD,CAClE,OAAO,OAAO,GAAU,YAAY,GAAkB,CAAC,MAAM,QAAQ,CAAK,CAC5E,CAEA,SAAS,EAAQ,EAAyB,CACxC,GAAI,OAAO,GAAU,SAAU,OAAO,EACtC,GAAI,CACF,OAAO,KAAK,MAAM,CAAK,CACzB,MAAQ,CACN,MAAU,MAAM,uCAAuC,CACzD,CACF,CAEA,SAAgB,EAA4B,EAAkC,CAC5E,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,KAAM,GAAQ,IAAQ,MAAM,EACrE,MAAU,MAAM,uCAAuC,EAEzD,GACE,OAAO,EAAM,MAAS,UACtB,EAAM,KAAK,SAAW,GACtB,EAAM,KAAK,OAAS,MACpB,EAAM,KAAK,SAAS,IAAI,EAExB,MAAU,MAAM,+CAA+C,EAEjE,MAAO,CAAE,KAAM,EAAM,IAAK,CAC5B,CACA,SAAgB,EAA8B,EAAuC,CACnF,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,SAAW,EAAG,MAAU,MAAM,yCAAyC,EAClH,MAAO,CAAC,CACV,CAEA,SAAgB,EAAwB,EAAqC,CAC3E,IAAM,EAAQ,EAAQ,CAAK,EAC3B,GAAI,CAAC,EAAS,CAAK,GAAK,OAAO,KAAK,CAAK,CAAC,CAAC,KAAM,GAAQ,CAAC,CAAC,eAAgB,OAAQ,WAAW,CAAC,CAAC,SAAS,CAAG,CAAC,EAC3G,MAAU,MAAM,oCAAoC,EAEtD,GAAI,OAAO,EAAM,cAAiB,UAAY,EAAM,aAAa,SAAW,GAAK,EAAM,aAAa,OAAS,IAC3G,MAAU,MAAM,qCAAqC,EAEvD,GAAI,OAAO,EAAM,MAAS,UAAY,EAAM,KAAK,OAAS,IAAM,CAAC,qBAAqB,KAAK,EAAM,IAAI,EACnG,MAAU,MAAM,6CAA6C,EAE/D,GAAI,CAAC,EAAS,EAAM,SAAS,EAAG,MAAU,MAAM,gDAAgD,EAChG,MAAO,CAAE,aAAc,EAAM,aAAc,KAAM,EAAM,KAAM,UAAW,EAAM,SAAU,CAC1F"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=class{open(){return Promise.reject(Error(`The Author session service is unavailable.`))}describe(){return Promise.reject(Error(`The Author session service is unavailable.`))}execute(){return Promise.reject(Error(`The Author session service is unavailable.`))}};function t(t){return t??new e}exports.createAuthorCatalog=t;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../../../src/services/authorCatalog/index.ts"],"sourcesContent":["import type { AuthorOpenFileResult, AuthorToolResult, AuthorViewportCatalogSnapshot } from '../../types/author';\nimport type { AuthorCatalog } from './type';\n\nclass UnavailableAuthorCatalog implements AuthorCatalog {\n public open(): Promise<AuthorOpenFileResult> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n\n public describe(): Promise<AuthorViewportCatalogSnapshot> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n\n public execute(): Promise<AuthorToolResult> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n}\n\n/** Uses an injected typed service directly. No internal transport is discovered here. */\nexport function createAuthorCatalog(host?: AuthorCatalog): AuthorCatalog {\n return host ?? new UnavailableAuthorCatalog();\n}\n"],"mappings":"AAGA,IAAM,EAAN,KAAwD,CACtD,MAA6C,CAC3C,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CAEA,UAA0D,CACxD,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CAEA,SAA4C,CAC1C,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CACF,EAGA,SAAgB,EAAoB,EAAqC,CACvE,OAAO,GAAQ,IAAI,CACrB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AuthorCatalog } from "./type.cjs";
|
|
2
|
+
//#region src/services/authorCatalog/index.d.ts
|
|
3
|
+
/** Uses an injected typed service directly. No internal transport is discovered here. */
|
|
4
|
+
export declare function createAuthorCatalog(host?: AuthorCatalog): AuthorCatalog;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../../../src/services/authorCatalog/index.ts"],"mappings":";;;wBAkBgB,oBAAoB,OAAO,gBAAgB"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AuthorCatalog } from "./type.mjs";
|
|
2
|
+
//#region src/services/authorCatalog/index.d.ts
|
|
3
|
+
/** Uses an injected typed service directly. No internal transport is discovered here. */
|
|
4
|
+
export declare function createAuthorCatalog(host?: AuthorCatalog): AuthorCatalog;
|
|
5
|
+
//#endregion
|
|
6
|
+
//# sourceMappingURL=index.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/services/authorCatalog/index.ts"],"mappings":";;;wBAkBgB,oBAAoB,OAAO,gBAAgB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
var e=class{open(){return Promise.reject(Error(`The Author session service is unavailable.`))}describe(){return Promise.reject(Error(`The Author session service is unavailable.`))}execute(){return Promise.reject(Error(`The Author session service is unavailable.`))}};function t(t){return t??new e}export{t as createAuthorCatalog};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/authorCatalog/index.ts"],"sourcesContent":["import type { AuthorOpenFileResult, AuthorToolResult, AuthorViewportCatalogSnapshot } from '../../types/author';\nimport type { AuthorCatalog } from './type';\n\nclass UnavailableAuthorCatalog implements AuthorCatalog {\n public open(): Promise<AuthorOpenFileResult> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n\n public describe(): Promise<AuthorViewportCatalogSnapshot> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n\n public execute(): Promise<AuthorToolResult> {\n return Promise.reject(new Error('The Author session service is unavailable.'));\n }\n}\n\n/** Uses an injected typed service directly. No internal transport is discovered here. */\nexport function createAuthorCatalog(host?: AuthorCatalog): AuthorCatalog {\n return host ?? new UnavailableAuthorCatalog();\n}\n"],"mappings":"AAGA,IAAM,EAAN,KAAwD,CACtD,MAA6C,CAC3C,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CAEA,UAA0D,CACxD,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CAEA,SAA4C,CAC1C,OAAO,QAAQ,OAAW,MAAM,4CAA4C,CAAC,CAC/E,CACF,EAGA,SAAgB,EAAoB,EAAqC,CACvE,OAAO,GAAQ,IAAI,CACrB"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../constants/author.cjs"),t=require("../../types/author.cjs");function n(n,r){let i=new Set([...n?[]:[t.OPEN_AUTHORING_FILE_TOOL_NAME],...n&&r?[]:e.AUTHOR_FACADE_TOOL_NAMES]);return e=>i.size===0?e:e.filter(e=>!i.has(e))}function r(e,t){let n,r=!1,i=!1,a=0,o,s,c=new Set,l=e=>{let t=n;n=e,(t?.catalogToken!==e?.catalogToken||t?.tools.length!==e?.tools.length||t===void 0!=(e===void 0))&&c.forEach(e=>e())},u=n=>{if(!r||n!==a||i)return;let c=new AbortController;s=c,e.describe(c.signal).then(e=>{r&&n===a&&e.catalogToken!==``&&l(e)}).catch(()=>{r&&n===a&&l(void 0)}).finally(()=>{s===c&&(s=void 0),r&&n===a&&!i&&(o=t.schedule(()=>u(n),500))})},d=()=>{r=!1,a+=1,o?.(),o=void 0,s?.abort(),s=void 0,l(void 0)};return{snapshot:()=>n,subscribe(e){return c.add(e),()=>c.delete(e)},start(){r||i||(r=!0,a+=1,u(a))},stop:d,dispose(){i||(i=!0,d(),c.clear())}}}exports.authorToolRestriction=n,exports.createAuthorCatalogMonitor=r;
|
|
2
|
+
//# sourceMappingURL=monitor.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.cjs","names":["OPEN_AUTHORING_FILE_TOOL_NAME","AUTHOR_FACADE_TOOL_NAMES"],"sources":["../../../src/services/authorCatalog/monitor.ts"],"sourcesContent":["import type { DoomToolRestriction } from '@agimon-ai/doompi-core/tool-surface';\n\nimport { AUTHOR_FACADE_TOOL_NAMES } from '../../constants/author';\nimport { OPEN_AUTHORING_FILE_TOOL_NAME, type AuthorViewportCatalogSnapshot } from '../../types/author';\nimport type { AuthorCatalog } from './type';\n\nconst CATALOG_POLL_MS = 500;\n\nexport interface AuthorModeMonitorClock {\n schedule(callback: () => void, delayMs: number): () => void;\n}\n\nexport interface AuthorCatalogMonitor {\n snapshot(): AuthorViewportCatalogSnapshot | undefined;\n subscribe(listener: () => void): () => void;\n start(): void;\n stop(): void;\n dispose(): void;\n}\n\n/** Hide Author tools until the mode and viewport catalog can serve them. */\nexport function authorToolRestriction(active: boolean, catalogReady: boolean): DoomToolRestriction {\n const hidden = new Set<string>([\n ...(active ? [] : [OPEN_AUTHORING_FILE_TOOL_NAME]),\n ...(active && catalogReady ? [] : AUTHOR_FACADE_TOOL_NAMES),\n ]);\n return (incoming) => (hidden.size === 0 ? incoming : incoming.filter((name) => !hidden.has(name)));\n}\n\n/** Author-specific viewport polling; the shared minor-mode factory owns activation. */\nexport function createAuthorCatalogMonitor(\n catalog: AuthorCatalog,\n clock: AuthorModeMonitorClock,\n): AuthorCatalogMonitor {\n let current: AuthorViewportCatalogSnapshot | undefined;\n let active = false;\n let disposed = false;\n let generation = 0;\n let cancelTimer: (() => void) | undefined;\n let request: AbortController | undefined;\n const listeners = new Set<() => void>();\n const setCatalog = (snapshot: AuthorViewportCatalogSnapshot | undefined): void => {\n const previous = current;\n current = snapshot;\n if (\n previous?.catalogToken !== snapshot?.catalogToken ||\n previous?.tools.length !== snapshot?.tools.length ||\n (previous === undefined) !== (snapshot === undefined)\n )\n listeners.forEach((listener) => listener());\n };\n const poll = (owner: number): void => {\n if (!active || owner !== generation || disposed) return;\n const controller = new AbortController();\n request = controller;\n void catalog\n .describe(controller.signal)\n .then((snapshot) => {\n if (active && owner === generation && snapshot.catalogToken !== '') setCatalog(snapshot);\n })\n .catch(() => {\n if (active && owner === generation) setCatalog(undefined);\n })\n .finally(() => {\n if (request === controller) request = undefined;\n if (!active || owner !== generation || disposed) return;\n cancelTimer = clock.schedule(() => poll(owner), CATALOG_POLL_MS);\n });\n };\n const stop = (): void => {\n active = false;\n generation += 1;\n cancelTimer?.();\n cancelTimer = undefined;\n request?.abort();\n request = undefined;\n setCatalog(undefined);\n };\n return {\n snapshot: () => current,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n start() {\n if (active || disposed) return;\n active = true;\n generation += 1;\n poll(generation);\n },\n stop,\n dispose() {\n if (disposed) return;\n disposed = true;\n stop();\n listeners.clear();\n },\n };\n}\n"],"mappings":"kFAqBA,SAAgB,EAAsB,EAAiB,EAA4C,CACjG,IAAM,EAAS,IAAI,IAAY,CAC7B,GAAI,EAAS,CAAC,EAAI,CAACA,EAAAA,6BAA6B,EAChD,GAAI,GAAU,EAAe,CAAC,EAAIC,EAAAA,wBACpC,CAAC,EACD,MAAQ,IAAc,EAAO,OAAS,EAAI,EAAW,EAAS,OAAQ,GAAS,CAAC,EAAO,IAAI,CAAI,CAAC,CAClG,CAGA,SAAgB,EACd,EACA,EACsB,CACtB,IAAI,EACA,EAAS,GACT,EAAW,GACX,EAAa,EACb,EACA,EACE,EAAY,IAAI,IAChB,EAAc,GAA8D,CAChF,IAAM,EAAW,EACjB,EAAU,GAER,GAAU,eAAiB,GAAU,cACrC,GAAU,MAAM,SAAW,GAAU,MAAM,QAC1C,IAAa,IAAA,KAAgB,IAAa,IAAA,MAE3C,EAAU,QAAS,GAAa,EAAS,CAAC,CAC9C,EACM,EAAQ,GAAwB,CACpC,GAAI,CAAC,GAAU,IAAU,GAAc,EAAU,OACjD,IAAM,EAAa,IAAI,gBACvB,EAAU,EACV,EACG,SAAS,EAAW,MAAM,CAAC,CAC3B,KAAM,GAAa,CACd,GAAU,IAAU,GAAc,EAAS,eAAiB,IAAI,EAAW,CAAQ,CACzF,CAAC,CAAC,CACD,UAAY,CACP,GAAU,IAAU,GAAY,EAAW,IAAA,EAAS,CAC1D,CAAC,CAAC,CACD,YAAc,CACT,IAAY,IAAY,EAAU,IAAA,IACjC,GAAU,IAAU,GAAc,KACvC,EAAc,EAAM,aAAe,EAAK,CAAK,EAAG,GAAe,EACjE,CAAC,CACL,EACM,MAAmB,CACvB,EAAS,GACT,GAAc,EACd,IAAc,EACd,EAAc,IAAA,GACd,GAAS,MAAM,EACf,EAAU,IAAA,GACV,EAAW,IAAA,EAAS,CACtB,EACA,MAAO,CACL,aAAgB,EAChB,UAAU,EAAU,CAElB,OADA,EAAU,IAAI,CAAQ,MACT,EAAU,OAAO,CAAQ,CACxC,EACA,OAAQ,CACF,GAAU,IACd,EAAS,GACT,GAAc,EACd,EAAK,CAAU,EACjB,EACA,OACA,SAAU,CACJ,IACJ,EAAW,GACX,EAAK,EACL,EAAU,MAAM,EAClB,CACF,CACF"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthorViewportCatalogSnapshot } from "../../types/author.cjs";
|
|
2
|
+
import { AuthorCatalog } from "./type.cjs";
|
|
3
|
+
import { DoomToolRestriction } from "@agimon-ai/doompi-core/tool-surface";
|
|
4
|
+
//#region src/services/authorCatalog/monitor.d.ts
|
|
5
|
+
export interface AuthorModeMonitorClock {
|
|
6
|
+
schedule(callback: () => void, delayMs: number): () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface AuthorCatalogMonitor {
|
|
9
|
+
snapshot(): AuthorViewportCatalogSnapshot | undefined;
|
|
10
|
+
subscribe(listener: () => void): () => void;
|
|
11
|
+
start(): void;
|
|
12
|
+
stop(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
/** Hide Author tools until the mode and viewport catalog can serve them. */
|
|
16
|
+
export declare function authorToolRestriction(active: boolean, catalogReady: boolean): DoomToolRestriction;
|
|
17
|
+
/** Author-specific viewport polling; the shared minor-mode factory owns activation. */
|
|
18
|
+
export declare function createAuthorCatalogMonitor(catalog: AuthorCatalog, clock: AuthorModeMonitorClock): AuthorCatalogMonitor;
|
|
19
|
+
//#endregion
|
|
20
|
+
//# sourceMappingURL=monitor.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.cts","names":[],"sources":["../../../src/services/authorCatalog/monitor.ts"],"mappings":";;;;iBAQiB;EACf,SAAS,sBAAsB;;iBAGhB;EACf,YAAY;EACZ,UAAU;EACV;EACA;EACA;;;wBAIc,sBAAsB,iBAAiB,wBAAwB;;wBAS/D,2BACd,SAAS,eACT,OAAO,yBACN"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AuthorViewportCatalogSnapshot } from "../../types/author.mjs";
|
|
2
|
+
import { AuthorCatalog } from "./type.mjs";
|
|
3
|
+
import { DoomToolRestriction } from "@agimon-ai/doompi-core/tool-surface";
|
|
4
|
+
//#region src/services/authorCatalog/monitor.d.ts
|
|
5
|
+
export interface AuthorModeMonitorClock {
|
|
6
|
+
schedule(callback: () => void, delayMs: number): () => void;
|
|
7
|
+
}
|
|
8
|
+
export interface AuthorCatalogMonitor {
|
|
9
|
+
snapshot(): AuthorViewportCatalogSnapshot | undefined;
|
|
10
|
+
subscribe(listener: () => void): () => void;
|
|
11
|
+
start(): void;
|
|
12
|
+
stop(): void;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
}
|
|
15
|
+
/** Hide Author tools until the mode and viewport catalog can serve them. */
|
|
16
|
+
export declare function authorToolRestriction(active: boolean, catalogReady: boolean): DoomToolRestriction;
|
|
17
|
+
/** Author-specific viewport polling; the shared minor-mode factory owns activation. */
|
|
18
|
+
export declare function createAuthorCatalogMonitor(catalog: AuthorCatalog, clock: AuthorModeMonitorClock): AuthorCatalogMonitor;
|
|
19
|
+
//#endregion
|
|
20
|
+
//# sourceMappingURL=monitor.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.d.mts","names":[],"sources":["../../../src/services/authorCatalog/monitor.ts"],"mappings":";;;;iBAQiB;EACf,SAAS,sBAAsB;;iBAGhB;EACf,YAAY;EACZ,UAAU;EACV;EACA;EACA;;;wBAIc,sBAAsB,iBAAiB,wBAAwB;;wBAS/D,2BACd,SAAS,eACT,OAAO,yBACN"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{AUTHOR_FACADE_TOOL_NAMES as e}from"../../constants/author.mjs";import{OPEN_AUTHORING_FILE_TOOL_NAME as t}from"../../types/author.mjs";function n(n,r){let i=new Set([...n?[]:[t],...n&&r?[]:e]);return e=>i.size===0?e:e.filter(e=>!i.has(e))}function r(e,t){let n,r=!1,i=!1,a=0,o,s,c=new Set,l=e=>{let t=n;n=e,(t?.catalogToken!==e?.catalogToken||t?.tools.length!==e?.tools.length||t===void 0!=(e===void 0))&&c.forEach(e=>e())},u=n=>{if(!r||n!==a||i)return;let c=new AbortController;s=c,e.describe(c.signal).then(e=>{r&&n===a&&e.catalogToken!==``&&l(e)}).catch(()=>{r&&n===a&&l(void 0)}).finally(()=>{s===c&&(s=void 0),r&&n===a&&!i&&(o=t.schedule(()=>u(n),500))})},d=()=>{r=!1,a+=1,o?.(),o=void 0,s?.abort(),s=void 0,l(void 0)};return{snapshot:()=>n,subscribe(e){return c.add(e),()=>c.delete(e)},start(){r||i||(r=!0,a+=1,u(a))},stop:d,dispose(){i||(i=!0,d(),c.clear())}}}export{n as authorToolRestriction,r as createAuthorCatalogMonitor};
|
|
2
|
+
//# sourceMappingURL=monitor.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"monitor.mjs","names":[],"sources":["../../../src/services/authorCatalog/monitor.ts"],"sourcesContent":["import type { DoomToolRestriction } from '@agimon-ai/doompi-core/tool-surface';\n\nimport { AUTHOR_FACADE_TOOL_NAMES } from '../../constants/author';\nimport { OPEN_AUTHORING_FILE_TOOL_NAME, type AuthorViewportCatalogSnapshot } from '../../types/author';\nimport type { AuthorCatalog } from './type';\n\nconst CATALOG_POLL_MS = 500;\n\nexport interface AuthorModeMonitorClock {\n schedule(callback: () => void, delayMs: number): () => void;\n}\n\nexport interface AuthorCatalogMonitor {\n snapshot(): AuthorViewportCatalogSnapshot | undefined;\n subscribe(listener: () => void): () => void;\n start(): void;\n stop(): void;\n dispose(): void;\n}\n\n/** Hide Author tools until the mode and viewport catalog can serve them. */\nexport function authorToolRestriction(active: boolean, catalogReady: boolean): DoomToolRestriction {\n const hidden = new Set<string>([\n ...(active ? [] : [OPEN_AUTHORING_FILE_TOOL_NAME]),\n ...(active && catalogReady ? [] : AUTHOR_FACADE_TOOL_NAMES),\n ]);\n return (incoming) => (hidden.size === 0 ? incoming : incoming.filter((name) => !hidden.has(name)));\n}\n\n/** Author-specific viewport polling; the shared minor-mode factory owns activation. */\nexport function createAuthorCatalogMonitor(\n catalog: AuthorCatalog,\n clock: AuthorModeMonitorClock,\n): AuthorCatalogMonitor {\n let current: AuthorViewportCatalogSnapshot | undefined;\n let active = false;\n let disposed = false;\n let generation = 0;\n let cancelTimer: (() => void) | undefined;\n let request: AbortController | undefined;\n const listeners = new Set<() => void>();\n const setCatalog = (snapshot: AuthorViewportCatalogSnapshot | undefined): void => {\n const previous = current;\n current = snapshot;\n if (\n previous?.catalogToken !== snapshot?.catalogToken ||\n previous?.tools.length !== snapshot?.tools.length ||\n (previous === undefined) !== (snapshot === undefined)\n )\n listeners.forEach((listener) => listener());\n };\n const poll = (owner: number): void => {\n if (!active || owner !== generation || disposed) return;\n const controller = new AbortController();\n request = controller;\n void catalog\n .describe(controller.signal)\n .then((snapshot) => {\n if (active && owner === generation && snapshot.catalogToken !== '') setCatalog(snapshot);\n })\n .catch(() => {\n if (active && owner === generation) setCatalog(undefined);\n })\n .finally(() => {\n if (request === controller) request = undefined;\n if (!active || owner !== generation || disposed) return;\n cancelTimer = clock.schedule(() => poll(owner), CATALOG_POLL_MS);\n });\n };\n const stop = (): void => {\n active = false;\n generation += 1;\n cancelTimer?.();\n cancelTimer = undefined;\n request?.abort();\n request = undefined;\n setCatalog(undefined);\n };\n return {\n snapshot: () => current,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n start() {\n if (active || disposed) return;\n active = true;\n generation += 1;\n poll(generation);\n },\n stop,\n dispose() {\n if (disposed) return;\n disposed = true;\n stop();\n listeners.clear();\n },\n };\n}\n"],"mappings":"6IAqBA,SAAgB,EAAsB,EAAiB,EAA4C,CACjG,IAAM,EAAS,IAAI,IAAY,CAC7B,GAAI,EAAS,CAAC,EAAI,CAAC,CAA6B,EAChD,GAAI,GAAU,EAAe,CAAC,EAAI,CACpC,CAAC,EACD,MAAQ,IAAc,EAAO,OAAS,EAAI,EAAW,EAAS,OAAQ,GAAS,CAAC,EAAO,IAAI,CAAI,CAAC,CAClG,CAGA,SAAgB,EACd,EACA,EACsB,CACtB,IAAI,EACA,EAAS,GACT,EAAW,GACX,EAAa,EACb,EACA,EACE,EAAY,IAAI,IAChB,EAAc,GAA8D,CAChF,IAAM,EAAW,EACjB,EAAU,GAER,GAAU,eAAiB,GAAU,cACrC,GAAU,MAAM,SAAW,GAAU,MAAM,QAC1C,IAAa,IAAA,KAAgB,IAAa,IAAA,MAE3C,EAAU,QAAS,GAAa,EAAS,CAAC,CAC9C,EACM,EAAQ,GAAwB,CACpC,GAAI,CAAC,GAAU,IAAU,GAAc,EAAU,OACjD,IAAM,EAAa,IAAI,gBACvB,EAAU,EACV,EACG,SAAS,EAAW,MAAM,CAAC,CAC3B,KAAM,GAAa,CACd,GAAU,IAAU,GAAc,EAAS,eAAiB,IAAI,EAAW,CAAQ,CACzF,CAAC,CAAC,CACD,UAAY,CACP,GAAU,IAAU,GAAY,EAAW,IAAA,EAAS,CAC1D,CAAC,CAAC,CACD,YAAc,CACT,IAAY,IAAY,EAAU,IAAA,IACjC,GAAU,IAAU,GAAc,KACvC,EAAc,EAAM,aAAe,EAAK,CAAK,EAAG,GAAe,EACjE,CAAC,CACL,EACM,MAAmB,CACvB,EAAS,GACT,GAAc,EACd,IAAc,EACd,EAAc,IAAA,GACd,GAAS,MAAM,EACf,EAAU,IAAA,GACV,EAAW,IAAA,EAAS,CACtB,EACA,MAAO,CACL,aAAgB,EAChB,UAAU,EAAU,CAElB,OADA,EAAU,IAAI,CAAQ,MACT,EAAU,OAAO,CAAQ,CACxC,EACA,OAAQ,CACF,GAAU,IACd,EAAS,GACT,GAAc,EACd,EAAK,CAAU,EACjB,EACA,OACA,SAAU,CACJ,IACJ,EAAW,GACX,EAAK,EACL,EAAU,MAAM,EAClB,CACF,CACF"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthorOpenFileResult, AuthorToolResult, AuthorViewportCatalogSnapshot, UseAuthorToolInput } from "../../types/author.cjs";
|
|
2
|
+
//#region src/services/authorCatalog/type.d.ts
|
|
3
|
+
/** Typed catalog supplied to Pi and headless Author tools. */
|
|
4
|
+
export interface AuthorCatalog {
|
|
5
|
+
open(path: string, signal?: AbortSignal): Promise<AuthorOpenFileResult>;
|
|
6
|
+
describe(signal?: AbortSignal): Promise<AuthorViewportCatalogSnapshot>;
|
|
7
|
+
execute(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=type.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.cts","names":[],"sources":["../../../src/services/authorCatalog/type.ts"],"mappings":";;;iBAQiB;EACf,KAAK,cAAc,SAAS,cAAc,QAAQ;EAClD,SAAS,SAAS,cAAc,QAAQ;EACxC,QAAQ,OAAO,oBAAoB,SAAS,cAAc,QAAQ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthorOpenFileResult, AuthorToolResult, AuthorViewportCatalogSnapshot, UseAuthorToolInput } from "../../types/author.mjs";
|
|
2
|
+
//#region src/services/authorCatalog/type.d.ts
|
|
3
|
+
/** Typed catalog supplied to Pi and headless Author tools. */
|
|
4
|
+
export interface AuthorCatalog {
|
|
5
|
+
open(path: string, signal?: AbortSignal): Promise<AuthorOpenFileResult>;
|
|
6
|
+
describe(signal?: AbortSignal): Promise<AuthorViewportCatalogSnapshot>;
|
|
7
|
+
execute(input: UseAuthorToolInput, signal?: AbortSignal): Promise<AuthorToolResult>;
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
//# sourceMappingURL=type.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type.d.mts","names":[],"sources":["../../../src/services/authorCatalog/type.ts"],"mappings":";;;iBAQiB;EACf,KAAK,cAAc,SAAS,cAAc,QAAQ;EAClD,SAAS,SAAS,cAAc,QAAQ;EACxC,QAAQ,OAAO,oBAAoB,SAAS,cAAc,QAAQ"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const e=require("../../_virtual/_rolldown/runtime.cjs");let t=require("node:path");t=e.__toESM(t,1);let n=require("node:fs/promises"),r=require("node:fs"),i=require("node:url");async function a(e=require("url").pathToFileURL(__filename).href){let a=t.default.dirname((0,i.fileURLToPath)(e));for(;;){let e=t.default.join(a,`src/prompts/doompi-use-author/SKILL.md`);if((0,r.existsSync)(e))return(0,n.readFile)(e,`utf8`);let i=t.default.dirname(a);if(i===a)throw Error(`Could not locate the Author prompt resource.`);a=i}}exports.readAuthorPrompt=a;
|
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["path","fileURLToPath","existsSync","readFile"],"sources":["../../../src/services/authorPrompt/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport async function readAuthorPrompt(moduleUrl: string | URL = import.meta.url): Promise<string> {\n let directory = path.dirname(fileURLToPath(moduleUrl));\n for (;;) {\n const prompt = path.join(directory, 'src/prompts/doompi-use-author/SKILL.md');\n if (existsSync(prompt)) return readFile(prompt, 'utf8');\n const parent = path.dirname(directory);\n if (parent === directory) throw new Error('Could not locate the Author prompt resource.');\n directory = parent;\n }\n}\n"],"mappings":"iLAKA,eAAsB,EAAiB,EAAA,QAAA,KAAA,CAAA,CAAA,cAAA,UAAA,CAAA,CAAA,KAA4D,CACjG,IAAI,EAAYA,EAAAA,QAAK,SAAA,EAAQC,EAAAA,cAAAA,CAAc,CAAS,CAAC,EACrD,OAAS,CACP,IAAM,EAASD,EAAAA,QAAK,KAAK,EAAW,wCAAwC,EAC5E,IAAA,EAAIE,EAAAA,WAAAA,CAAW,CAAM,EAAG,OAAA,EAAOC,EAAAA,SAAAA,CAAS,EAAQ,MAAM,EACtD,IAAM,EAASH,EAAAA,QAAK,QAAQ,CAAS,EACrC,GAAI,IAAW,EAAW,MAAU,MAAM,8CAA8C,EACxF,EAAY,CACd,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import e from"node:path";import{readFile as t}from"node:fs/promises";import{existsSync as n}from"node:fs";import{fileURLToPath as r}from"node:url";async function i(i=import.meta.url){let a=e.dirname(r(i));for(;;){let r=e.join(a,`src/prompts/doompi-use-author/SKILL.md`);if(n(r))return t(r,`utf8`);let i=e.dirname(a);if(i===a)throw Error(`Could not locate the Author prompt resource.`);a=i}}export{i as readAuthorPrompt};
|
|
2
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../../src/services/authorPrompt/index.ts"],"sourcesContent":["import { existsSync } from 'node:fs';\nimport { readFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport async function readAuthorPrompt(moduleUrl: string | URL = import.meta.url): Promise<string> {\n let directory = path.dirname(fileURLToPath(moduleUrl));\n for (;;) {\n const prompt = path.join(directory, 'src/prompts/doompi-use-author/SKILL.md');\n if (existsSync(prompt)) return readFile(prompt, 'utf8');\n const parent = path.dirname(directory);\n if (parent === directory) throw new Error('Could not locate the Author prompt resource.');\n directory = parent;\n }\n}\n"],"mappings":"mJAKA,eAAsB,EAAiB,EAA0B,YAAY,IAAsB,CACjG,IAAI,EAAY,EAAK,QAAQ,EAAc,CAAS,CAAC,EACrD,OAAS,CACP,IAAM,EAAS,EAAK,KAAK,EAAW,wCAAwC,EAC5E,GAAI,EAAW,CAAM,EAAG,OAAO,EAAS,EAAQ,MAAM,EACtD,IAAM,EAAS,EAAK,QAAQ,CAAS,EACrC,GAAI,IAAW,EAAW,MAAU,MAAM,8CAA8C,EACxF,EAAY,CACd,CACF"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
let e=require("node:crypto");function t(t){return(0,e.createHash)(`sha256`).update(t).digest(`hex`)}function n(e,n,i,a={}){return{manifest:{format:e,sourceDigest:t(n),byteLength:n.byteLength,fragmentCount:i.length,metadata:a},fragments:i,renderModel:r(e,i)}}function r(e,t){return{format:e,blocks:t.map(({id:e,text:t,readOnly:n})=>({id:e,text:t,readOnly:n===!0}))}}function i(e,n,r,i){let a=new Map(e.fragments.map(e=>[e.id,e])),o=new Set,s=[],c=[],l=0;for(let e of n){let t=a.get(e.fragmentId);if(!t){s.push({code:`unknown-fragment`,message:`The operation names an unknown fragment.`,fragmentId:e.fragmentId});continue}if(o.has(e.fragmentId)){s.push({code:`duplicate-operation`,message:`A fragment may be replaced only once.`,fragmentId:e.fragmentId});continue}o.add(e.fragmentId);let n=new TextEncoder().encode(e.replacement).byteLength;if(l+=n,n>10485760||l>104857600){s.push({code:`replacement-limit`,message:`Replacement content exceeds the document mutation limits.`,fragmentId:e.fragmentId});continue}if(t.readOnly===!0){s.push({code:`read-only`,message:`The fragment is read-only.`,fragmentId:e.fragmentId});continue}let i=r?.(e,t);i?s.push(i):c.push({...e,previous:t.text})}let u=t(JSON.stringify({format:e.manifest.format,binding:i,sourceDigest:e.manifest.sourceDigest,operations:c,issues:s}));return{accepted:s.length===0,digest:u,sourceDigest:e.manifest.sourceDigest,operations:c,issues:s}}function a(e,t){if(!e.accepted||e.digest!==t)throw Error(`An accepted, current preflight report digest is required.`)}function o(e){let t=new TextDecoder(`utf-8`,{fatal:!0}).decode(e);if(t.includes(`\0`))throw Error(`NUL bytes are not supported.`);return t}exports.MAX_ARCHIVE_ENTRIES=4096,exports.MAX_COMPRESSED_BYTES=26214400,exports.MAX_EXPANDED_BYTES=104857600,exports.MAX_XML_ENTRY_BYTES=10485760,exports.decodeUtf8=o,exports.digestOf=t,exports.parsedDocument=n,exports.preflight=i,exports.requireAccepted=a;
|
|
2
|
+
//# sourceMappingURL=common.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.cjs","names":["createHash"],"sources":["../../../src/services/structuredDocuments/common.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type {\n DocumentFragment,\n DocumentOperation,\n DocumentOperationLogEntry,\n DocumentPreflightIssue,\n DocumentPreflightReport,\n DocumentRenderModel,\n ParsedStructuredDocument,\n StructuredDocumentFormat,\n} from '../../types/structuredDocuments';\n\nexport const MAX_COMPRESSED_BYTES = 25 * 1024 * 1024;\nexport const MAX_EXPANDED_BYTES = 100 * 1024 * 1024;\nexport const MAX_XML_ENTRY_BYTES = 10 * 1024 * 1024;\nexport const MAX_ARCHIVE_ENTRIES = 4096;\nexport const MAX_COMPRESSION_RATIO = 100;\n\nexport function digestOf(value: Uint8Array | string): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nexport function parsedDocument(\n format: StructuredDocumentFormat,\n bytes: Uint8Array,\n fragments: DocumentFragment[],\n metadata: Record<string, string | number | boolean> = {},\n): ParsedStructuredDocument {\n return {\n manifest: {\n format,\n sourceDigest: digestOf(bytes),\n byteLength: bytes.byteLength,\n fragmentCount: fragments.length,\n metadata,\n },\n fragments,\n renderModel: renderModel(format, fragments),\n };\n}\n\nfunction renderModel(format: StructuredDocumentFormat, fragments: DocumentFragment[]): DocumentRenderModel {\n return { format, blocks: fragments.map(({ id, text, readOnly }) => ({ id, text, readOnly: readOnly === true })) };\n}\n\nexport function preflight(\n document: ParsedStructuredDocument,\n operations: DocumentOperation[],\n validate?: (operation: DocumentOperation, fragment: DocumentFragment) => DocumentPreflightIssue | undefined,\n binding?: unknown,\n): DocumentPreflightReport {\n const fragments = new Map(document.fragments.map((fragment) => [fragment.id, fragment]));\n const seen = new Set<string>();\n const issues: DocumentPreflightIssue[] = [];\n const log: DocumentOperationLogEntry[] = [];\n let replacementBytes = 0;\n for (const operation of operations) {\n const fragment = fragments.get(operation.fragmentId);\n if (!fragment) {\n issues.push({\n code: 'unknown-fragment',\n message: 'The operation names an unknown fragment.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n if (seen.has(operation.fragmentId)) {\n issues.push({\n code: 'duplicate-operation',\n message: 'A fragment may be replaced only once.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n seen.add(operation.fragmentId);\n const operationBytes = new TextEncoder().encode(operation.replacement).byteLength;\n replacementBytes += operationBytes;\n if (operationBytes > MAX_XML_ENTRY_BYTES || replacementBytes > MAX_EXPANDED_BYTES) {\n issues.push({\n code: 'replacement-limit',\n message: 'Replacement content exceeds the document mutation limits.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n if (fragment.readOnly === true) {\n issues.push({ code: 'read-only', message: 'The fragment is read-only.', fragmentId: operation.fragmentId });\n continue;\n }\n const issue = validate?.(operation, fragment);\n if (issue) issues.push(issue);\n else log.push({ ...operation, previous: fragment.text });\n }\n const digest = digestOf(\n JSON.stringify({\n format: document.manifest.format,\n binding,\n sourceDigest: document.manifest.sourceDigest,\n operations: log,\n issues,\n }),\n );\n return {\n accepted: issues.length === 0,\n digest,\n sourceDigest: document.manifest.sourceDigest,\n operations: log,\n issues,\n };\n}\n\nexport function requireAccepted(report: DocumentPreflightReport, expectedDigest: string): void {\n if (!report.accepted || report.digest !== expectedDigest)\n throw new Error('An accepted, current preflight report digest is required.');\n}\n\nexport function decodeUtf8(bytes: Uint8Array): string {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n if (text.includes('\\0')) throw new Error('NUL bytes are not supported.');\n return text;\n}\n"],"mappings":"6BAmBA,SAAgB,EAAS,EAAoC,CAC3D,OAAA,EAAOA,EAAAA,WAAAA,CAAW,QAAQ,CAAC,CAAC,OAAO,CAAK,CAAC,CAAC,OAAO,KAAK,CACxD,CAEA,SAAgB,EACd,EACA,EACA,EACA,EAAsD,CAAC,EAC7B,CAC1B,MAAO,CACL,SAAU,CACR,SACA,aAAc,EAAS,CAAK,EAC5B,WAAY,EAAM,WAClB,cAAe,EAAU,OACzB,UACF,EACA,YACA,YAAa,EAAY,EAAQ,CAAS,CAC5C,CACF,CAEA,SAAS,EAAY,EAAkC,EAAoD,CACzG,MAAO,CAAE,SAAQ,OAAQ,EAAU,KAAK,CAAE,KAAI,OAAM,eAAgB,CAAE,KAAI,OAAM,SAAU,IAAa,EAAK,EAAE,CAAE,CAClH,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACyB,CACzB,IAAM,EAAY,IAAI,IAAI,EAAS,UAAU,IAAK,GAAa,CAAC,EAAS,GAAI,CAAQ,CAAC,CAAC,EACjF,EAAO,IAAI,IACX,EAAmC,CAAC,EACpC,EAAmC,CAAC,EACtC,EAAmB,EACvB,IAAK,IAAM,KAAa,EAAY,CAClC,IAAM,EAAW,EAAU,IAAI,EAAU,UAAU,EACnD,GAAI,CAAC,EAAU,CACb,EAAO,KAAK,CACV,KAAM,mBACN,QAAS,2CACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,GAAI,EAAK,IAAI,EAAU,UAAU,EAAG,CAClC,EAAO,KAAK,CACV,KAAM,sBACN,QAAS,wCACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,EAAK,IAAI,EAAU,UAAU,EAC7B,IAAM,EAAiB,IAAI,YAAY,CAAC,CAAC,OAAO,EAAU,WAAW,CAAC,CAAC,WAEvE,GADA,GAAoB,EAChB,EAAA,UAAwC,EAAA,UAAuC,CACjF,EAAO,KAAK,CACV,KAAM,oBACN,QAAS,4DACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,GAAI,EAAS,WAAa,GAAM,CAC9B,EAAO,KAAK,CAAE,KAAM,YAAa,QAAS,6BAA8B,WAAY,EAAU,UAAW,CAAC,EAC1G,QACF,CACA,IAAM,EAAQ,IAAW,EAAW,CAAQ,EACxC,EAAO,EAAO,KAAK,CAAK,EACvB,EAAI,KAAK,CAAE,GAAG,EAAW,SAAU,EAAS,IAAK,CAAC,CACzD,CACA,IAAM,EAAS,EACb,KAAK,UAAU,CACb,OAAQ,EAAS,SAAS,OAC1B,UACA,aAAc,EAAS,SAAS,aAChC,WAAY,EACZ,QACF,CAAC,CACH,EACA,MAAO,CACL,SAAU,EAAO,SAAW,EAC5B,SACA,aAAc,EAAS,SAAS,aAChC,WAAY,EACZ,QACF,CACF,CAEA,SAAgB,EAAgB,EAAiC,EAA8B,CAC7F,GAAI,CAAC,EAAO,UAAY,EAAO,SAAW,EACxC,MAAU,MAAM,2DAA2D,CAC/E,CAEA,SAAgB,EAAW,EAA2B,CACpD,IAAM,EAAO,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,CAAC,CAAC,OAAO,CAAK,EACnE,GAAI,EAAK,SAAS,IAAI,EAAG,MAAU,MAAM,8BAA8B,EACvE,OAAO,CACT"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createHash as e}from"node:crypto";const t=26214400,n=104857600,r=10485760,i=4096;function a(t){return e(`sha256`).update(t).digest(`hex`)}function o(e,t,n,r={}){return{manifest:{format:e,sourceDigest:a(t),byteLength:t.byteLength,fragmentCount:n.length,metadata:r},fragments:n,renderModel:s(e,n)}}function s(e,t){return{format:e,blocks:t.map(({id:e,text:t,readOnly:n})=>({id:e,text:t,readOnly:n===!0}))}}function c(e,t,n,r){let i=new Map(e.fragments.map(e=>[e.id,e])),o=new Set,s=[],c=[],l=0;for(let e of t){let t=i.get(e.fragmentId);if(!t){s.push({code:`unknown-fragment`,message:`The operation names an unknown fragment.`,fragmentId:e.fragmentId});continue}if(o.has(e.fragmentId)){s.push({code:`duplicate-operation`,message:`A fragment may be replaced only once.`,fragmentId:e.fragmentId});continue}o.add(e.fragmentId);let r=new TextEncoder().encode(e.replacement).byteLength;if(l+=r,r>10485760||l>104857600){s.push({code:`replacement-limit`,message:`Replacement content exceeds the document mutation limits.`,fragmentId:e.fragmentId});continue}if(t.readOnly===!0){s.push({code:`read-only`,message:`The fragment is read-only.`,fragmentId:e.fragmentId});continue}let a=n?.(e,t);a?s.push(a):c.push({...e,previous:t.text})}let u=a(JSON.stringify({format:e.manifest.format,binding:r,sourceDigest:e.manifest.sourceDigest,operations:c,issues:s}));return{accepted:s.length===0,digest:u,sourceDigest:e.manifest.sourceDigest,operations:c,issues:s}}function l(e,t){if(!e.accepted||e.digest!==t)throw Error(`An accepted, current preflight report digest is required.`)}function u(e){let t=new TextDecoder(`utf-8`,{fatal:!0}).decode(e);if(t.includes(`\0`))throw Error(`NUL bytes are not supported.`);return t}export{i as MAX_ARCHIVE_ENTRIES,t as MAX_COMPRESSED_BYTES,n as MAX_EXPANDED_BYTES,r as MAX_XML_ENTRY_BYTES,u as decodeUtf8,a as digestOf,o as parsedDocument,c as preflight,l as requireAccepted};
|
|
2
|
+
//# sourceMappingURL=common.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common.mjs","names":[],"sources":["../../../src/services/structuredDocuments/common.ts"],"sourcesContent":["import { createHash } from 'node:crypto';\n\nimport type {\n DocumentFragment,\n DocumentOperation,\n DocumentOperationLogEntry,\n DocumentPreflightIssue,\n DocumentPreflightReport,\n DocumentRenderModel,\n ParsedStructuredDocument,\n StructuredDocumentFormat,\n} from '../../types/structuredDocuments';\n\nexport const MAX_COMPRESSED_BYTES = 25 * 1024 * 1024;\nexport const MAX_EXPANDED_BYTES = 100 * 1024 * 1024;\nexport const MAX_XML_ENTRY_BYTES = 10 * 1024 * 1024;\nexport const MAX_ARCHIVE_ENTRIES = 4096;\nexport const MAX_COMPRESSION_RATIO = 100;\n\nexport function digestOf(value: Uint8Array | string): string {\n return createHash('sha256').update(value).digest('hex');\n}\n\nexport function parsedDocument(\n format: StructuredDocumentFormat,\n bytes: Uint8Array,\n fragments: DocumentFragment[],\n metadata: Record<string, string | number | boolean> = {},\n): ParsedStructuredDocument {\n return {\n manifest: {\n format,\n sourceDigest: digestOf(bytes),\n byteLength: bytes.byteLength,\n fragmentCount: fragments.length,\n metadata,\n },\n fragments,\n renderModel: renderModel(format, fragments),\n };\n}\n\nfunction renderModel(format: StructuredDocumentFormat, fragments: DocumentFragment[]): DocumentRenderModel {\n return { format, blocks: fragments.map(({ id, text, readOnly }) => ({ id, text, readOnly: readOnly === true })) };\n}\n\nexport function preflight(\n document: ParsedStructuredDocument,\n operations: DocumentOperation[],\n validate?: (operation: DocumentOperation, fragment: DocumentFragment) => DocumentPreflightIssue | undefined,\n binding?: unknown,\n): DocumentPreflightReport {\n const fragments = new Map(document.fragments.map((fragment) => [fragment.id, fragment]));\n const seen = new Set<string>();\n const issues: DocumentPreflightIssue[] = [];\n const log: DocumentOperationLogEntry[] = [];\n let replacementBytes = 0;\n for (const operation of operations) {\n const fragment = fragments.get(operation.fragmentId);\n if (!fragment) {\n issues.push({\n code: 'unknown-fragment',\n message: 'The operation names an unknown fragment.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n if (seen.has(operation.fragmentId)) {\n issues.push({\n code: 'duplicate-operation',\n message: 'A fragment may be replaced only once.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n seen.add(operation.fragmentId);\n const operationBytes = new TextEncoder().encode(operation.replacement).byteLength;\n replacementBytes += operationBytes;\n if (operationBytes > MAX_XML_ENTRY_BYTES || replacementBytes > MAX_EXPANDED_BYTES) {\n issues.push({\n code: 'replacement-limit',\n message: 'Replacement content exceeds the document mutation limits.',\n fragmentId: operation.fragmentId,\n });\n continue;\n }\n if (fragment.readOnly === true) {\n issues.push({ code: 'read-only', message: 'The fragment is read-only.', fragmentId: operation.fragmentId });\n continue;\n }\n const issue = validate?.(operation, fragment);\n if (issue) issues.push(issue);\n else log.push({ ...operation, previous: fragment.text });\n }\n const digest = digestOf(\n JSON.stringify({\n format: document.manifest.format,\n binding,\n sourceDigest: document.manifest.sourceDigest,\n operations: log,\n issues,\n }),\n );\n return {\n accepted: issues.length === 0,\n digest,\n sourceDigest: document.manifest.sourceDigest,\n operations: log,\n issues,\n };\n}\n\nexport function requireAccepted(report: DocumentPreflightReport, expectedDigest: string): void {\n if (!report.accepted || report.digest !== expectedDigest)\n throw new Error('An accepted, current preflight report digest is required.');\n}\n\nexport function decodeUtf8(bytes: Uint8Array): string {\n const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);\n if (text.includes('\\0')) throw new Error('NUL bytes are not supported.');\n return text;\n}\n"],"mappings":"yCAaA,MAAa,EAAuB,SACvB,EAAqB,UACrB,EAAsB,SACtB,EAAsB,KAGnC,SAAgB,EAAS,EAAoC,CAC3D,OAAO,EAAW,QAAQ,CAAC,CAAC,OAAO,CAAK,CAAC,CAAC,OAAO,KAAK,CACxD,CAEA,SAAgB,EACd,EACA,EACA,EACA,EAAsD,CAAC,EAC7B,CAC1B,MAAO,CACL,SAAU,CACR,SACA,aAAc,EAAS,CAAK,EAC5B,WAAY,EAAM,WAClB,cAAe,EAAU,OACzB,UACF,EACA,YACA,YAAa,EAAY,EAAQ,CAAS,CAC5C,CACF,CAEA,SAAS,EAAY,EAAkC,EAAoD,CACzG,MAAO,CAAE,SAAQ,OAAQ,EAAU,KAAK,CAAE,KAAI,OAAM,eAAgB,CAAE,KAAI,OAAM,SAAU,IAAa,EAAK,EAAE,CAAE,CAClH,CAEA,SAAgB,EACd,EACA,EACA,EACA,EACyB,CACzB,IAAM,EAAY,IAAI,IAAI,EAAS,UAAU,IAAK,GAAa,CAAC,EAAS,GAAI,CAAQ,CAAC,CAAC,EACjF,EAAO,IAAI,IACX,EAAmC,CAAC,EACpC,EAAmC,CAAC,EACtC,EAAmB,EACvB,IAAK,IAAM,KAAa,EAAY,CAClC,IAAM,EAAW,EAAU,IAAI,EAAU,UAAU,EACnD,GAAI,CAAC,EAAU,CACb,EAAO,KAAK,CACV,KAAM,mBACN,QAAS,2CACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,GAAI,EAAK,IAAI,EAAU,UAAU,EAAG,CAClC,EAAO,KAAK,CACV,KAAM,sBACN,QAAS,wCACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,EAAK,IAAI,EAAU,UAAU,EAC7B,IAAM,EAAiB,IAAI,YAAY,CAAC,CAAC,OAAO,EAAU,WAAW,CAAC,CAAC,WAEvE,GADA,GAAoB,EAChB,EAAA,UAAwC,EAAA,UAAuC,CACjF,EAAO,KAAK,CACV,KAAM,oBACN,QAAS,4DACT,WAAY,EAAU,UACxB,CAAC,EACD,QACF,CACA,GAAI,EAAS,WAAa,GAAM,CAC9B,EAAO,KAAK,CAAE,KAAM,YAAa,QAAS,6BAA8B,WAAY,EAAU,UAAW,CAAC,EAC1G,QACF,CACA,IAAM,EAAQ,IAAW,EAAW,CAAQ,EACxC,EAAO,EAAO,KAAK,CAAK,EACvB,EAAI,KAAK,CAAE,GAAG,EAAW,SAAU,EAAS,IAAK,CAAC,CACzD,CACA,IAAM,EAAS,EACb,KAAK,UAAU,CACb,OAAQ,EAAS,SAAS,OAC1B,UACA,aAAc,EAAS,SAAS,aAChC,WAAY,EACZ,QACF,CAAC,CACH,EACA,MAAO,CACL,SAAU,EAAO,SAAW,EAC5B,SACA,aAAc,EAAS,SAAS,aAChC,WAAY,EACZ,QACF,CACF,CAEA,SAAgB,EAAgB,EAAiC,EAA8B,CAC7F,GAAI,CAAC,EAAO,UAAY,EAAO,SAAW,EACxC,MAAU,MAAM,2DAA2D,CAC/E,CAEA,SAAgB,EAAW,EAA2B,CACpD,IAAM,EAAO,IAAI,YAAY,QAAS,CAAE,MAAO,EAAK,CAAC,CAAC,CAAC,OAAO,CAAK,EACnE,GAAI,EAAK,SAAS,IAAI,EAAG,MAAU,MAAM,8BAA8B,EACvE,OAAO,CACT"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const e=require("./common.cjs");let t=require("csv-parse/sync");const n=/^\s*[=+\-@]/;function r(e){let t=e.includes(`\r
|
|
2
|
+
`)?`\r
|
|
3
|
+
`:`
|
|
4
|
+
`,n=e.split(/\r?\n/,1)[0]??``;return{delimiter:[`,`,`;`,` `,`|`].reduce((e,t)=>n.split(t).length>n.split(e).length?t:e),quote:`"`,recordDelimiter:t}}function i(e,t){if(t!==void 0&&(typeof t!=`object`||!t||Array.isArray(t)))throw Error(`CSV dialect must be an object.`);let n={...r(e),...t};if(![`,`,`;`,` `,`|`].includes(n.delimiter))throw Error(`Invalid CSV delimiter.`);if(![`"`,`'`].includes(n.quote))throw Error(`Invalid CSV quote.`);if(![`
|
|
5
|
+
`,`\r
|
|
6
|
+
`].includes(n.recordDelimiter))throw Error(`Invalid CSV record delimiter.`);return n}function a(r,a){let o=typeof r==`string`?new TextEncoder().encode(r):r;if(o.byteLength>26214400)throw Error(`CSV input exceeds the size limit.`);let s=e.decodeUtf8(o),c=i(s,a),l=(0,t.parse)(s,{bom:!0,delimiter:c.delimiter,quote:c.quote,record_delimiter:[c.recordDelimiter],relax_column_count:!1,skip_empty_lines:!1});if(l.reduce((e,t)=>e+t.length,0)>1e6)throw Error(`CSV input has too many cells.`);let u=l.flatMap((e,t)=>e.map((e,r)=>{if(n.test(e))throw Error(`CSV formula trigger rejected at row ${t+1}.`);return{id:`cell:${t+1}:${r+1}`,kind:`cell`,text:e,location:`row ${t+1}, column ${r+1}`}}));return e.parsedDocument(`csv`,o,u,{rows:l.length,columns:l.reduce((e,t)=>Math.max(e,t.length),0),delimiter:c.delimiter,quote:c.quote,recordDelimiter:c.recordDelimiter})}function o(t,r,o){let s=typeof t==`string`?new TextEncoder().encode(t):t,c=i(e.decodeUtf8(s),o);return e.preflight(a(s,c),r,e=>n.test(e.replacement)?{code:`formula-trigger`,message:`CSV values may not begin with a formula trigger.`,fragmentId:e.fragmentId}:void 0,{dialect:c})}function s(e,t){let n=e.replaceAll(t.quote,t.quote+t.quote);return e.includes(t.delimiter)||e.includes(t.quote)||/[\r\n]/.test(e)?`${t.quote}${n}${t.quote}`:n}function c(t,n,r,c){let l=i(typeof t==`string`?t:e.decodeUtf8(t),c),u=a(t,l),d=o(t,n,l);e.requireAccepted(d,r);let f=new Map(d.operations.map(e=>[e.fragmentId,e.replacement])),p=new Map(u.fragments.map(e=>[e.id,e])),m=Number(u.manifest.metadata.rows),h=Number(u.manifest.metadata.columns),g=[];for(let e=1;e<=m;e+=1){let t=[];for(let n=1;n<=h;n+=1){let r=`cell:${e}:${n}`,i=p.get(r);i&&t.push(s(f.get(r)??i.text,l))}g.push(t.join(l.delimiter))}let _=new TextEncoder().encode(g.join(l.recordDelimiter));return{bytes:_,operationLog:d.operations,manifest:a(_,l).manifest}}exports.parseCsv=a,exports.preflightCsv=o,exports.serializeCsv=c;
|
|
7
|
+
//# sourceMappingURL=csv.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"csv.cjs","names":["decodeUtf8","parse","parsedDocument","preflight"],"sources":["../../../src/services/structuredDocuments/csv.ts"],"sourcesContent":["import { parse } from 'csv-parse/sync';\n\nimport type {\n CsvDialect,\n DocumentOperation,\n DocumentPreflightReport,\n ParsedStructuredDocument,\n SerializedStructuredDocument,\n} from '../../types/structuredDocuments';\nimport { decodeUtf8, MAX_COMPRESSED_BYTES, parsedDocument, preflight, requireAccepted } from './common';\n\nconst FORMULA_TRIGGER = /^\\s*[=+\\-@]/;\nconst MAX_CELLS = 1_000_000;\n\nfunction detectDialect(text: string): CsvDialect {\n const recordDelimiter = text.includes('\\r\\n') ? '\\r\\n' : '\\n';\n const firstRecord = text.split(/\\r?\\n/, 1)[0] ?? '';\n const delimiters: CsvDialect['delimiter'][] = [',', ';', '\\t', '|'];\n const delimiter = delimiters.reduce((best, candidate) =>\n firstRecord.split(candidate).length > firstRecord.split(best).length ? candidate : best,\n );\n return { delimiter, quote: '\"', recordDelimiter };\n}\n\nfunction normalizeDialect(text: string, requestedDialect?: Partial<CsvDialect>): CsvDialect {\n if (\n requestedDialect !== undefined &&\n (typeof requestedDialect !== 'object' || requestedDialect === null || Array.isArray(requestedDialect))\n ) {\n throw new Error('CSV dialect must be an object.');\n }\n const dialect = { ...detectDialect(text), ...requestedDialect } as Record<string, unknown>;\n if (![',', ';', '\\t', '|'].includes(dialect.delimiter as string)) throw new Error('Invalid CSV delimiter.');\n if (!['\"', \"'\"].includes(dialect.quote as string)) throw new Error('Invalid CSV quote.');\n if (!['\\n', '\\r\\n'].includes(dialect.recordDelimiter as string)) throw new Error('Invalid CSV record delimiter.');\n return dialect as unknown as CsvDialect;\n}\n\nexport function parseCsv(\n source: Uint8Array | string,\n requestedDialect?: Partial<CsvDialect>,\n): ParsedStructuredDocument {\n const bytes = typeof source === 'string' ? new TextEncoder().encode(source) : source;\n if (bytes.byteLength > MAX_COMPRESSED_BYTES) throw new Error('CSV input exceeds the size limit.');\n const text = decodeUtf8(bytes);\n const dialect = normalizeDialect(text, requestedDialect);\n const records = parse(text, {\n bom: true,\n delimiter: dialect.delimiter,\n quote: dialect.quote,\n record_delimiter: [dialect.recordDelimiter],\n relax_column_count: false,\n skip_empty_lines: false,\n }) as string[][];\n const cellCount = records.reduce((total, row) => total + row.length, 0);\n if (cellCount > MAX_CELLS) throw new Error('CSV input has too many cells.');\n const fragments = records.flatMap((row, rowIndex) =>\n row.map((text, columnIndex) => {\n if (FORMULA_TRIGGER.test(text)) throw new Error(`CSV formula trigger rejected at row ${rowIndex + 1}.`);\n return {\n id: `cell:${rowIndex + 1}:${columnIndex + 1}`,\n kind: 'cell' as const,\n text,\n location: `row ${rowIndex + 1}, column ${columnIndex + 1}`,\n };\n }),\n );\n return parsedDocument('csv', bytes, fragments, {\n rows: records.length,\n columns: records.reduce((maximum, row) => Math.max(maximum, row.length), 0),\n delimiter: dialect.delimiter,\n quote: dialect.quote,\n recordDelimiter: dialect.recordDelimiter,\n });\n}\n\nexport function preflightCsv(\n source: Uint8Array | string,\n operations: DocumentOperation[],\n dialect?: Partial<CsvDialect>,\n): DocumentPreflightReport {\n const bytes = typeof source === 'string' ? new TextEncoder().encode(source) : source;\n const text = decodeUtf8(bytes);\n const normalizedDialect = normalizeDialect(text, dialect);\n return preflight(\n parseCsv(bytes, normalizedDialect),\n operations,\n (operation) =>\n FORMULA_TRIGGER.test(operation.replacement)\n ? {\n code: 'formula-trigger',\n message: 'CSV values may not begin with a formula trigger.',\n fragmentId: operation.fragmentId,\n }\n : undefined,\n { dialect: normalizedDialect },\n );\n}\n\nfunction encodeCell(value: string, dialect: CsvDialect): string {\n const escaped = value.replaceAll(dialect.quote, dialect.quote + dialect.quote);\n return value.includes(dialect.delimiter) || value.includes(dialect.quote) || /[\\r\\n]/.test(value)\n ? `${dialect.quote}${escaped}${dialect.quote}`\n : escaped;\n}\n\nexport function serializeCsv(\n source: Uint8Array | string,\n operations: DocumentOperation[],\n acceptedReportDigest: string,\n requestedDialect?: Partial<CsvDialect>,\n): SerializedStructuredDocument {\n const original = typeof source === 'string' ? source : decodeUtf8(source);\n const dialect = normalizeDialect(original, requestedDialect);\n const document = parseCsv(source, dialect);\n const report = preflightCsv(source, operations, dialect);\n requireAccepted(report, acceptedReportDigest);\n const replacements = new Map(report.operations.map((operation) => [operation.fragmentId, operation.replacement]));\n const fragments = new Map(document.fragments.map((fragment) => [fragment.id, fragment]));\n const rows = Number(document.manifest.metadata.rows);\n const columns = Number(document.manifest.metadata.columns);\n const outputRows: string[] = [];\n for (let row = 1; row <= rows; row += 1) {\n const values: string[] = [];\n for (let column = 1; column <= columns; column += 1) {\n const id = `cell:${row}:${column}`;\n const fragment = fragments.get(id);\n if (fragment) values.push(encodeCell(replacements.get(id) ?? fragment.text, dialect));\n }\n outputRows.push(values.join(dialect.delimiter));\n }\n const bytes = new TextEncoder().encode(outputRows.join(dialect.recordDelimiter));\n return { bytes, operationLog: report.operations, manifest: parseCsv(bytes, dialect).manifest };\n}\n"],"mappings":"gEAWA,MAAM,EAAkB,cAGxB,SAAS,EAAc,EAA0B,CAC/C,IAAM,EAAkB,EAAK,SAAS;CAAM,EAAI;EAAS;EACnD,EAAc,EAAK,MAAM,QAAS,CAAC,CAAC,CAAC,IAAM,GAKjD,MAAO,CAAE,UAHS,CAD6B,IAAK,IAAK,IAAM,GACpC,CAAC,CAAC,QAAQ,EAAM,IACzC,EAAY,MAAM,CAAS,CAAC,CAAC,OAAS,EAAY,MAAM,CAAI,CAAC,CAAC,OAAS,EAAY,CAEpE,EAAG,MAAO,IAAK,iBAAgB,CAClD,CAEA,SAAS,EAAiB,EAAc,EAAoD,CAC1F,GACE,IAAqB,IAAA,KACpB,OAAO,GAAqB,WAAY,GAA6B,MAAM,QAAQ,CAAgB,GAEpG,MAAU,MAAM,gCAAgC,EAElD,IAAM,EAAU,CAAE,GAAG,EAAc,CAAI,EAAG,GAAG,CAAiB,EAC9D,GAAI,CAAC,CAAC,IAAK,IAAK,IAAM,GAAG,CAAC,CAAC,SAAS,EAAQ,SAAmB,EAAG,MAAU,MAAM,wBAAwB,EAC1G,GAAI,CAAC,CAAC,IAAK,GAAG,CAAC,CAAC,SAAS,EAAQ,KAAe,EAAG,MAAU,MAAM,oBAAoB,EACvF,GAAI,CAAC,CAAC;EAAM;CAAM,CAAC,CAAC,SAAS,EAAQ,eAAyB,EAAG,MAAU,MAAM,+BAA+B,EAChH,OAAO,CACT,CAEA,SAAgB,EACd,EACA,EAC0B,CAC1B,IAAM,EAAQ,OAAO,GAAW,SAAW,IAAI,YAAY,CAAC,CAAC,OAAO,CAAM,EAAI,EAC9E,GAAI,EAAM,WAAA,SAAmC,MAAU,MAAM,mCAAmC,EAChG,IAAM,EAAOA,EAAAA,WAAW,CAAK,EACvB,EAAU,EAAiB,EAAM,CAAgB,EACjD,GAAA,EAAUC,EAAAA,MAAAA,CAAM,EAAM,CAC1B,IAAK,GACL,UAAW,EAAQ,UACnB,MAAO,EAAQ,MACf,iBAAkB,CAAC,EAAQ,eAAe,EAC1C,mBAAoB,GACpB,iBAAkB,EACpB,CAAC,EAED,GADkB,EAAQ,QAAQ,EAAO,IAAQ,EAAQ,EAAI,OAAQ,CACzD,EAAI,IAAW,MAAU,MAAM,+BAA+B,EAC1E,IAAM,EAAY,EAAQ,SAAS,EAAK,IACtC,EAAI,KAAK,EAAM,IAAgB,CAC7B,GAAI,EAAgB,KAAK,CAAI,EAAG,MAAU,MAAM,uCAAuC,EAAW,EAAE,EAAE,EACtG,MAAO,CACL,GAAI,QAAQ,EAAW,EAAE,GAAG,EAAc,IAC1C,KAAM,OACN,OACA,SAAU,OAAO,EAAW,EAAE,WAAW,EAAc,GACzD,CACF,CAAC,CACH,EACA,OAAOC,EAAAA,eAAe,MAAO,EAAO,EAAW,CAC7C,KAAM,EAAQ,OACd,QAAS,EAAQ,QAAQ,EAAS,IAAQ,KAAK,IAAI,EAAS,EAAI,MAAM,EAAG,CAAC,EAC1E,UAAW,EAAQ,UACnB,MAAO,EAAQ,MACf,gBAAiB,EAAQ,eAC3B,CAAC,CACH,CAEA,SAAgB,EACd,EACA,EACA,EACyB,CACzB,IAAM,EAAQ,OAAO,GAAW,SAAW,IAAI,YAAY,CAAC,CAAC,OAAO,CAAM,EAAI,EAExE,EAAoB,EADbF,EAAAA,WAAW,CACsB,EAAG,CAAO,EACxD,OAAOG,EAAAA,UACL,EAAS,EAAO,CAAiB,EACjC,EACC,GACC,EAAgB,KAAK,EAAU,WAAW,EACtC,CACE,KAAM,kBACN,QAAS,mDACT,WAAY,EAAU,UACxB,EACA,IAAA,GACN,CAAE,QAAS,CAAkB,CAC/B,CACF,CAEA,SAAS,EAAW,EAAe,EAA6B,CAC9D,IAAM,EAAU,EAAM,WAAW,EAAQ,MAAO,EAAQ,MAAQ,EAAQ,KAAK,EAC7E,OAAO,EAAM,SAAS,EAAQ,SAAS,GAAK,EAAM,SAAS,EAAQ,KAAK,GAAK,SAAS,KAAK,CAAK,EAC5F,GAAG,EAAQ,QAAQ,IAAU,EAAQ,QACrC,CACN,CAEA,SAAgB,EACd,EACA,EACA,EACA,EAC8B,CAE9B,IAAM,EAAU,EADC,OAAO,GAAW,SAAW,EAASH,EAAAA,WAAW,CAAM,EAC7B,CAAgB,EACrD,EAAW,EAAS,EAAQ,CAAO,EACnC,EAAS,EAAa,EAAQ,EAAY,CAAO,EACvD,EAAA,gBAAgB,EAAQ,CAAoB,EAC5C,IAAM,EAAe,IAAI,IAAI,EAAO,WAAW,IAAK,GAAc,CAAC,EAAU,WAAY,EAAU,WAAW,CAAC,CAAC,EAC1G,EAAY,IAAI,IAAI,EAAS,UAAU,IAAK,GAAa,CAAC,EAAS,GAAI,CAAQ,CAAC,CAAC,EACjF,EAAO,OAAO,EAAS,SAAS,SAAS,IAAI,EAC7C,EAAU,OAAO,EAAS,SAAS,SAAS,OAAO,EACnD,EAAuB,CAAC,EAC9B,IAAK,IAAI,EAAM,EAAG,GAAO,EAAM,GAAO,EAAG,CACvC,IAAM,EAAmB,CAAC,EAC1B,IAAK,IAAI,EAAS,EAAG,GAAU,EAAS,GAAU,EAAG,CACnD,IAAM,EAAK,QAAQ,EAAI,GAAG,IACpB,EAAW,EAAU,IAAI,CAAE,EAC7B,GAAU,EAAO,KAAK,EAAW,EAAa,IAAI,CAAE,GAAK,EAAS,KAAM,CAAO,CAAC,CACtF,CACA,EAAW,KAAK,EAAO,KAAK,EAAQ,SAAS,CAAC,CAChD,CACA,IAAM,EAAQ,IAAI,YAAY,CAAC,CAAC,OAAO,EAAW,KAAK,EAAQ,eAAe,CAAC,EAC/E,MAAO,CAAE,QAAO,aAAc,EAAO,WAAY,SAAU,EAAS,EAAO,CAAO,CAAC,CAAC,QAAS,CAC/F"}
|