@undefineds.co/xpod 0.3.61 → 0.3.63
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/node_modules/@undefineds.co/extensions/README.md +101 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts +25 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js +45 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/langchain.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts +31 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js +50 -0
- package/node_modules/@undefineds.co/extensions/dist/adapters/llamaindex.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js +7 -0
- package/node_modules/@undefineds.co/extensions/dist/index.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js +267 -0
- package/node_modules/@undefineds.co/extensions/dist/paddleocr.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts +18 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js +39 -0
- package/node_modules/@undefineds.co/extensions/dist/reader.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts +16 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js +97 -0
- package/node_modules/@undefineds.co/extensions/dist/registry.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts +141 -0
- package/node_modules/@undefineds.co/extensions/dist/types.d.ts.map +1 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js +2 -0
- package/node_modules/@undefineds.co/extensions/dist/types.js.map +1 -0
- package/node_modules/@undefineds.co/extensions/package.json +38 -0
- package/package.json +1 -3
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# undefineds-extensions
|
|
2
|
+
|
|
3
|
+
Unified Undefineds extension protocol and in-memory registry.
|
|
4
|
+
|
|
5
|
+
This repository owns the extension boundary shared by Xpod server, LinX client,
|
|
6
|
+
and future local runtime hosts. It does not execute remote code, download code to
|
|
7
|
+
clients, or ship concrete heavy reader dependencies.
|
|
8
|
+
|
|
9
|
+
## Boundary
|
|
10
|
+
|
|
11
|
+
P0 scope:
|
|
12
|
+
|
|
13
|
+
- one extension entry point
|
|
14
|
+
- one registry for capabilities
|
|
15
|
+
- reader capability registration
|
|
16
|
+
- source accessor registration
|
|
17
|
+
- runtime capability registration
|
|
18
|
+
- tool metadata registration
|
|
19
|
+
- config schema registration
|
|
20
|
+
|
|
21
|
+
Out of scope for this package:
|
|
22
|
+
|
|
23
|
+
- marketplace distribution
|
|
24
|
+
- remote code execution
|
|
25
|
+
- plugin sandboxing
|
|
26
|
+
- package installation
|
|
27
|
+
- heavy OCR/reader runtime dependencies
|
|
28
|
+
- Xpod server scheduling
|
|
29
|
+
- LinX client daemon transport
|
|
30
|
+
|
|
31
|
+
Those should be built as consumers of this protocol.
|
|
32
|
+
|
|
33
|
+
## Extension shape
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
import type { Extension } from '@undefineds.co/extensions';
|
|
37
|
+
|
|
38
|
+
const extension: Extension = (api) => {
|
|
39
|
+
api.reader.register({
|
|
40
|
+
id: 'paddleocr',
|
|
41
|
+
displayName: 'PaddleOCR Reader',
|
|
42
|
+
outputs: ['markdown', 'text'],
|
|
43
|
+
transports: ['remote-http', 'local-http'],
|
|
44
|
+
supportedSourceSchemes: ['https', 'file'],
|
|
45
|
+
read: async () => ({
|
|
46
|
+
reader: 'paddleocr',
|
|
47
|
+
documents: [{ text: '# parsed' }],
|
|
48
|
+
markdown: '# parsed',
|
|
49
|
+
text: '# parsed',
|
|
50
|
+
}),
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
api.source.register({
|
|
54
|
+
id: 'local-file',
|
|
55
|
+
schemes: ['file'],
|
|
56
|
+
canOpen: () => true,
|
|
57
|
+
open: async (source) => ({
|
|
58
|
+
kind: 'local-path',
|
|
59
|
+
path: source.replace(/^file:\/\//u, ''),
|
|
60
|
+
}),
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
api.runtime.registerCapability({
|
|
64
|
+
id: 'paddleocr-local-process',
|
|
65
|
+
kind: 'local-process',
|
|
66
|
+
readerIds: ['paddleocr'],
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
export default extension;
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
## Reader protocol
|
|
75
|
+
|
|
76
|
+
The canonical Reader interface is documented in [`docs/reader.md`](docs/reader.md).
|
|
77
|
+
This package includes:
|
|
78
|
+
|
|
79
|
+
- `createPaddleOcrReader()` and `createPaddleOcrExtension()` for a
|
|
80
|
+
PaddleOCR-compatible endpoint resolved by the host from settings/provider config;
|
|
81
|
+
- `toLangChainDocuments()`, `createLangChainDocumentLoader()`, and
|
|
82
|
+
`createReaderFromLangChainLoader()` for structural LangChain compatibility;
|
|
83
|
+
- `toLlamaIndexDocuments()`, `createLlamaIndexReader()`, and
|
|
84
|
+
`createReaderFromLlamaIndexReader()` for structural LlamaIndex compatibility.
|
|
85
|
+
|
|
86
|
+
## Naming
|
|
87
|
+
|
|
88
|
+
- `Reader`: a capability that reads or extracts document content.
|
|
89
|
+
- `SourceAccessor`: a capability that opens a source into a reader input.
|
|
90
|
+
- `RuntimeCapability`: a capability report for where and how a reader can run.
|
|
91
|
+
- `Extension`: one package-level entry point that can register multiple capabilities.
|
|
92
|
+
- `ExtensionApi`: the registration surface passed to an extension.
|
|
93
|
+
|
|
94
|
+
## Development
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
bun install
|
|
98
|
+
bun run test
|
|
99
|
+
bun run typecheck
|
|
100
|
+
bun run build
|
|
101
|
+
```
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ReadRequest, ReadResult, Reader, ReaderContext, ReaderDefinition, ReaderOutput, ReaderTransport } from '../types.js';
|
|
2
|
+
export interface LangChainDocumentLike {
|
|
3
|
+
pageContent: string;
|
|
4
|
+
metadata?: Record<string, unknown>;
|
|
5
|
+
id?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface LangChainLoaderLike {
|
|
8
|
+
load(): Promise<LangChainDocumentLike[]> | LangChainDocumentLike[];
|
|
9
|
+
}
|
|
10
|
+
export interface LangChainReaderOptions {
|
|
11
|
+
id: string;
|
|
12
|
+
displayName?: string;
|
|
13
|
+
outputs: ReaderOutput[];
|
|
14
|
+
transports: ReaderTransport[];
|
|
15
|
+
supportedSourceSchemes?: string[];
|
|
16
|
+
supportedMimeTypes?: string[];
|
|
17
|
+
createLoader(request: ReadRequest, ctx: ReaderContext): LangChainLoaderLike | Promise<LangChainLoaderLike>;
|
|
18
|
+
}
|
|
19
|
+
export interface LangChainDocumentLoaderLike {
|
|
20
|
+
load(): Promise<LangChainDocumentLike[]>;
|
|
21
|
+
}
|
|
22
|
+
export declare function toLangChainDocuments(result: ReadResult): LangChainDocumentLike[];
|
|
23
|
+
export declare function createLangChainDocumentLoader(reader: Reader, request: ReadRequest, ctx: ReaderContext): LangChainDocumentLoaderLike;
|
|
24
|
+
export declare function createReaderFromLangChainLoader(options: LangChainReaderOptions): ReaderDefinition;
|
|
25
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/adapters/langchain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,eAAe,EAChB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,qBAAqB;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,GAAG,qBAAqB,EAAE,CAAC;CACpE;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;CAC5G;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,IAAI,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;CAC1C;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,qBAAqB,EAAE,CAKhF;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,WAAW,EACpB,GAAG,EAAE,aAAa,GACjB,2BAA2B,CAI7B;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CAwBjG"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { readResultText, mergeDocumentMetadata } from '../reader.js';
|
|
2
|
+
export function toLangChainDocuments(result) {
|
|
3
|
+
return result.documents.map((document) => ({
|
|
4
|
+
pageContent: document.text,
|
|
5
|
+
metadata: mergeDocumentMetadata(result, document),
|
|
6
|
+
}));
|
|
7
|
+
}
|
|
8
|
+
export function createLangChainDocumentLoader(reader, request, ctx) {
|
|
9
|
+
return {
|
|
10
|
+
load: async () => toLangChainDocuments(await reader.read(request, ctx)),
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export function createReaderFromLangChainLoader(options) {
|
|
14
|
+
return {
|
|
15
|
+
id: options.id,
|
|
16
|
+
displayName: options.displayName,
|
|
17
|
+
outputs: options.outputs,
|
|
18
|
+
transports: options.transports,
|
|
19
|
+
supportedSourceSchemes: options.supportedSourceSchemes,
|
|
20
|
+
supportedMimeTypes: options.supportedMimeTypes,
|
|
21
|
+
read: async (request, ctx) => {
|
|
22
|
+
const loader = await options.createLoader(request, ctx);
|
|
23
|
+
const langChainDocuments = await loader.load();
|
|
24
|
+
const documents = langChainDocuments.map((document) => langChainDocumentToReaderDocument(document));
|
|
25
|
+
const result = {
|
|
26
|
+
reader: options.id,
|
|
27
|
+
model: request.model,
|
|
28
|
+
documents,
|
|
29
|
+
text: documents.map((document) => document.text).filter(Boolean).join('\n\n'),
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
...result,
|
|
33
|
+
text: readResultText(result),
|
|
34
|
+
};
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function langChainDocumentToReaderDocument(document) {
|
|
39
|
+
return {
|
|
40
|
+
id: document.id,
|
|
41
|
+
text: document.pageContent,
|
|
42
|
+
metadata: document.metadata ?? {},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../src/adapters/langchain.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AA0BrE,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACrD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzC,WAAW,EAAE,QAAQ,CAAC,IAAI;QAC1B,QAAQ,EAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,MAAc,EACd,OAAoB,EACpB,GAAkB;IAElB,OAAO;QACL,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,oBAAoB,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;KACxE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,OAA+B;IAC7E,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YACxD,MAAM,kBAAkB,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,iCAAiC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACpG,MAAM,MAAM,GAAe;gBACzB,MAAM,EAAE,OAAO,CAAC,EAAE;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS;gBACT,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aAC9E,CAAC;YACF,OAAO;gBACL,GAAG,MAAM;gBACT,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;aAC7B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,iCAAiC,CAAC,QAA+B;IACxE,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,IAAI,EAAE,QAAQ,CAAC,WAAW;QAC1B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ReadRequest, ReadResult, Reader, ReaderContext, ReaderDefinition, ReaderOutput, ReaderTransport } from '../types.js';
|
|
2
|
+
export interface LlamaIndexDocumentLike {
|
|
3
|
+
text?: string;
|
|
4
|
+
textResource?: {
|
|
5
|
+
text?: string;
|
|
6
|
+
};
|
|
7
|
+
getText?: () => string;
|
|
8
|
+
metadata?: Record<string, unknown>;
|
|
9
|
+
id?: string;
|
|
10
|
+
id_?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface LlamaIndexReaderLike {
|
|
13
|
+
loadData(input?: unknown): Promise<LlamaIndexDocumentLike[]> | LlamaIndexDocumentLike[];
|
|
14
|
+
}
|
|
15
|
+
export interface LlamaIndexReaderOptions {
|
|
16
|
+
id: string;
|
|
17
|
+
displayName?: string;
|
|
18
|
+
outputs: ReaderOutput[];
|
|
19
|
+
transports: ReaderTransport[];
|
|
20
|
+
supportedSourceSchemes?: string[];
|
|
21
|
+
supportedMimeTypes?: string[];
|
|
22
|
+
createReader(request: ReadRequest, ctx: ReaderContext): LlamaIndexReaderLike | Promise<LlamaIndexReaderLike>;
|
|
23
|
+
createLoadDataInput?: (request: ReadRequest, ctx: ReaderContext) => unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface LlamaIndexReaderAdapterLike {
|
|
26
|
+
loadData(input: ReadRequest | ReadRequest[]): Promise<LlamaIndexDocumentLike[]>;
|
|
27
|
+
}
|
|
28
|
+
export declare function toLlamaIndexDocuments(result: ReadResult): LlamaIndexDocumentLike[];
|
|
29
|
+
export declare function createLlamaIndexReader(reader: Reader, ctx: ReaderContext): LlamaIndexReaderAdapterLike;
|
|
30
|
+
export declare function createReaderFromLlamaIndexReader(options: LlamaIndexReaderOptions): ReaderDefinition;
|
|
31
|
+
//# sourceMappingURL=llamaindex.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llamaindex.d.ts","sourceRoot":"","sources":["../../src/adapters/llamaindex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,UAAU,EACV,MAAM,EACN,aAAa,EACb,gBAAgB,EAEhB,YAAY,EACZ,eAAe,EAChB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,GAAG,sBAAsB,EAAE,CAAC;CACzF;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,sBAAsB,CAAC,EAAE,MAAM,EAAE,CAAC;IAClC,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,GAAG,oBAAoB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;IAC7G,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CAC7E;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,KAAK,EAAE,WAAW,GAAG,WAAW,EAAE,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC,CAAC;CACjF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,sBAAsB,EAAE,CAKlF;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,aAAa,GAAG,2BAA2B,CAQtG;AAED,wBAAgB,gCAAgC,CAAC,OAAO,EAAE,uBAAuB,GAAG,gBAAgB,CAyBnG"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { mergeDocumentMetadata, readResultText } from '../reader.js';
|
|
2
|
+
export function toLlamaIndexDocuments(result) {
|
|
3
|
+
return result.documents.map((document) => ({
|
|
4
|
+
text: document.text,
|
|
5
|
+
metadata: mergeDocumentMetadata(result, document),
|
|
6
|
+
}));
|
|
7
|
+
}
|
|
8
|
+
export function createLlamaIndexReader(reader, ctx) {
|
|
9
|
+
return {
|
|
10
|
+
loadData: async (input) => {
|
|
11
|
+
const requests = Array.isArray(input) ? input : [input];
|
|
12
|
+
const results = await Promise.all(requests.map((request) => reader.read(request, ctx)));
|
|
13
|
+
return results.flatMap((result) => toLlamaIndexDocuments(result));
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
export function createReaderFromLlamaIndexReader(options) {
|
|
18
|
+
return {
|
|
19
|
+
id: options.id,
|
|
20
|
+
displayName: options.displayName,
|
|
21
|
+
outputs: options.outputs,
|
|
22
|
+
transports: options.transports,
|
|
23
|
+
supportedSourceSchemes: options.supportedSourceSchemes,
|
|
24
|
+
supportedMimeTypes: options.supportedMimeTypes,
|
|
25
|
+
read: async (request, ctx) => {
|
|
26
|
+
const llamaReader = await options.createReader(request, ctx);
|
|
27
|
+
const loadInput = options.createLoadDataInput?.(request, ctx) ?? request;
|
|
28
|
+
const llamaDocuments = await llamaReader.loadData(loadInput);
|
|
29
|
+
const documents = llamaDocuments.map((document) => llamaIndexDocumentToReaderDocument(document));
|
|
30
|
+
const result = {
|
|
31
|
+
reader: options.id,
|
|
32
|
+
model: request.model,
|
|
33
|
+
documents,
|
|
34
|
+
text: documents.map((document) => document.text).filter(Boolean).join('\n\n'),
|
|
35
|
+
};
|
|
36
|
+
return {
|
|
37
|
+
...result,
|
|
38
|
+
text: readResultText(result),
|
|
39
|
+
};
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function llamaIndexDocumentToReaderDocument(document) {
|
|
44
|
+
return {
|
|
45
|
+
id: document.id_ ?? document.id,
|
|
46
|
+
text: document.getText?.() ?? document.text ?? document.textResource?.text ?? '',
|
|
47
|
+
metadata: document.metadata ?? {},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=llamaindex.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llamaindex.js","sourceRoot":"","sources":["../../src/adapters/llamaindex.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA8BrE,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzC,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,QAAQ,EAAE,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC;KAClD,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAc,EAAE,GAAkB;IACvE,OAAO;QACL,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;YACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;YACxF,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAAgC;IAC/E,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,sBAAsB,EAAE,OAAO,CAAC,sBAAsB;QACtD,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;QAC9C,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE;YAC3B,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC;YACzE,MAAM,cAAc,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,kCAAkC,CAAC,QAAQ,CAAC,CAAC,CAAC;YACjG,MAAM,MAAM,GAAe;gBACzB,MAAM,EAAE,OAAO,CAAC,EAAE;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,SAAS;gBACT,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;aAC9E,CAAC;YACF,OAAO;gBACL,GAAG,MAAM;gBACT,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC;aAC7B,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,QAAgC;IAC1E,OAAO;QACL,EAAE,EAAE,QAAQ,CAAC,GAAG,IAAI,QAAQ,CAAC,EAAE;QAC/B,IAAI,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,IAAI,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,YAAY,EAAE,IAAI,IAAI,EAAE;QAChF,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE;KAClC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAE9B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAE9B,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Extension, ReaderDefinition } from './types.js';
|
|
2
|
+
export type PaddleOcrFetch = (input: string | URL | Request, init?: RequestInit) => Promise<Response>;
|
|
3
|
+
export declare const PADDLEOCR_DEFAULT_ENDPOINT = "https://paddleocr.aistudio-app.com/api/v2/ocr/jobs";
|
|
4
|
+
export interface PaddleOcrReaderOptions {
|
|
5
|
+
id?: string;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
/** System/deployment-level override. Do not expose this as user config for the built-in Paddle provider. */
|
|
8
|
+
endpoint?: string;
|
|
9
|
+
apiKey?: string;
|
|
10
|
+
model?: string;
|
|
11
|
+
fetch?: PaddleOcrFetch;
|
|
12
|
+
defaultOptions?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare function createPaddleOcrReader(options: PaddleOcrReaderOptions): ReaderDefinition;
|
|
15
|
+
export declare function createPaddleOcrExtension(options: PaddleOcrReaderOptions): Extension;
|
|
16
|
+
//# sourceMappingURL=paddleocr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paddleocr.d.ts","sourceRoot":"","sources":["../src/paddleocr.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EAIT,gBAAgB,EAGjB,MAAM,YAAY,CAAC;AAGpB,MAAM,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEtG,eAAO,MAAM,0BAA0B,uDAAuD,CAAC;AAE/F,MAAM,WAAW,sBAAsB;IACrC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,4GAA4G;IAC5G,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAWD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,gBAAgB,CAyCvF;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,sBAAsB,GAAG,SAAS,CAkBnF"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { ReaderError } from './reader.js';
|
|
2
|
+
export const PADDLEOCR_DEFAULT_ENDPOINT = 'https://paddleocr.aistudio-app.com/api/v2/ocr/jobs';
|
|
3
|
+
export function createPaddleOcrReader(options) {
|
|
4
|
+
const id = options.id ?? 'paddleocr';
|
|
5
|
+
const model = options.model ?? 'PP-OCRv6';
|
|
6
|
+
return {
|
|
7
|
+
id,
|
|
8
|
+
displayName: options.displayName ?? 'PaddleOCR Reader',
|
|
9
|
+
outputs: ['markdown', 'text', 'structured'],
|
|
10
|
+
transports: ['remote-http'],
|
|
11
|
+
supportedSourceSchemes: ['https', 'http', 'file'],
|
|
12
|
+
supportedMimeTypes: ['application/pdf', 'image/png', 'image/jpeg', 'image/webp', 'image/tiff'],
|
|
13
|
+
read: async (request, ctx) => {
|
|
14
|
+
const fetcher = options.fetch ?? globalThis.fetch;
|
|
15
|
+
if (!fetcher) {
|
|
16
|
+
throw new ReaderError('No fetch implementation is available for PaddleOCR reader.', {
|
|
17
|
+
code: 'INVALID_INPUT',
|
|
18
|
+
retryable: false,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
const payload = await createPaddlePayload(request, model, options.defaultOptions);
|
|
22
|
+
const response = await fetcher(resolvePaddleEndpoint(options), {
|
|
23
|
+
method: 'POST',
|
|
24
|
+
headers: createHeaders(options.apiKey),
|
|
25
|
+
body: JSON.stringify(payload),
|
|
26
|
+
signal: ctx.signal,
|
|
27
|
+
});
|
|
28
|
+
const body = await readJsonResponse(response);
|
|
29
|
+
if (!response.ok) {
|
|
30
|
+
throw new ReaderError(`PaddleOCR request failed with HTTP ${response.status}.`, {
|
|
31
|
+
code: response.status >= 500 || response.status === 429 ? 'PROVIDER_UNAVAILABLE' : 'PROVIDER_REJECTED',
|
|
32
|
+
status: response.status,
|
|
33
|
+
retryable: response.status >= 500 || response.status === 429,
|
|
34
|
+
cause: body,
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return paddleResponseToReadResult(id, model, request, body);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export function createPaddleOcrExtension(options) {
|
|
42
|
+
return (api) => {
|
|
43
|
+
const reader = createPaddleOcrReader(options);
|
|
44
|
+
api.reader.register(reader);
|
|
45
|
+
api.config.registerSchema({
|
|
46
|
+
id: reader.id,
|
|
47
|
+
fields: [
|
|
48
|
+
{ name: 'apiKey', type: 'secret', required: true, description: 'Bearer token for the PaddleOCR provider.' },
|
|
49
|
+
{ name: 'model', type: 'string', required: false, description: 'PaddleOCR model or pipeline name.' },
|
|
50
|
+
],
|
|
51
|
+
});
|
|
52
|
+
api.runtime.registerCapability({
|
|
53
|
+
id: `${reader.id}-remote-http`,
|
|
54
|
+
kind: 'remote-http',
|
|
55
|
+
readerIds: [reader.id],
|
|
56
|
+
sourceSchemes: ['https', 'http', 'file'],
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function resolvePaddleEndpoint(options) {
|
|
61
|
+
return options.endpoint?.trim() || PADDLEOCR_DEFAULT_ENDPOINT;
|
|
62
|
+
}
|
|
63
|
+
async function createPaddlePayload(request, model, defaultOptions) {
|
|
64
|
+
const input = request.input ?? sourceToInput(request.source);
|
|
65
|
+
const file = await inputToPaddleFile(input);
|
|
66
|
+
return {
|
|
67
|
+
...defaultOptions,
|
|
68
|
+
...request.options,
|
|
69
|
+
file,
|
|
70
|
+
fileType: inferPaddleFileType(input.mimeType ?? input.filename ?? request.source),
|
|
71
|
+
fileName: input.filename ?? filenameFromUri(request.source),
|
|
72
|
+
pageRange: request.pages,
|
|
73
|
+
model: request.model ?? model,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function sourceToInput(source) {
|
|
77
|
+
if (/^https?:\/\//u.test(source)) {
|
|
78
|
+
return {
|
|
79
|
+
kind: 'remote-url',
|
|
80
|
+
url: source,
|
|
81
|
+
filename: filenameFromUri(source),
|
|
82
|
+
mimeType: inferMimeType(source),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (source.startsWith('file://')) {
|
|
86
|
+
return {
|
|
87
|
+
kind: 'local-path',
|
|
88
|
+
path: decodeURIComponent(source.slice('file://'.length)),
|
|
89
|
+
filename: filenameFromUri(source),
|
|
90
|
+
mimeType: inferMimeType(source),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
throw new ReaderError(`Unsupported PaddleOCR source URI: ${source}`, {
|
|
94
|
+
code: 'UNSUPPORTED_SOURCE',
|
|
95
|
+
retryable: false,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
async function inputToPaddleFile(input) {
|
|
99
|
+
switch (input.kind) {
|
|
100
|
+
case 'remote-url':
|
|
101
|
+
return input.url;
|
|
102
|
+
case 'bytes':
|
|
103
|
+
return bytesToBase64(input.bytes);
|
|
104
|
+
case 'local-path': {
|
|
105
|
+
const fs = await import('node:fs/promises');
|
|
106
|
+
return bytesToBase64(await fs.readFile(input.path));
|
|
107
|
+
}
|
|
108
|
+
case 'stream':
|
|
109
|
+
return bytesToBase64(await streamToBytes(input.stream));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
function createHeaders(apiKey) {
|
|
113
|
+
const headers = {
|
|
114
|
+
'Content-Type': 'application/json',
|
|
115
|
+
};
|
|
116
|
+
if (apiKey) {
|
|
117
|
+
headers.Authorization = `Bearer ${apiKey}`;
|
|
118
|
+
}
|
|
119
|
+
return headers;
|
|
120
|
+
}
|
|
121
|
+
async function readJsonResponse(response) {
|
|
122
|
+
const text = await response.text();
|
|
123
|
+
if (!text) {
|
|
124
|
+
return {};
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
return JSON.parse(text);
|
|
128
|
+
}
|
|
129
|
+
catch (error) {
|
|
130
|
+
throw new ReaderError('PaddleOCR returned a non-JSON response.', {
|
|
131
|
+
code: 'PARSE_FAILED',
|
|
132
|
+
status: response.status,
|
|
133
|
+
retryable: response.status >= 500,
|
|
134
|
+
cause: error,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function paddleResponseToReadResult(readerId, model, request, body) {
|
|
139
|
+
const entries = extractPaddleEntries(body);
|
|
140
|
+
const documents = entries.map((entry, index) => paddleEntryToDocument(entry, index, request, model));
|
|
141
|
+
const markdown = documents.map((document) => document.text).filter(Boolean).join('\n\n');
|
|
142
|
+
return {
|
|
143
|
+
reader: readerId,
|
|
144
|
+
model: request.model ?? model,
|
|
145
|
+
documents,
|
|
146
|
+
markdown,
|
|
147
|
+
text: markdown,
|
|
148
|
+
raw: body,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
function extractPaddleEntries(body) {
|
|
152
|
+
if (!isRecord(body)) {
|
|
153
|
+
return [];
|
|
154
|
+
}
|
|
155
|
+
const candidates = [
|
|
156
|
+
body.result,
|
|
157
|
+
body.data,
|
|
158
|
+
body,
|
|
159
|
+
];
|
|
160
|
+
for (const candidate of candidates) {
|
|
161
|
+
if (isRecord(candidate) && Array.isArray(candidate.layoutParsingResults)) {
|
|
162
|
+
return candidate.layoutParsingResults;
|
|
163
|
+
}
|
|
164
|
+
if (isRecord(candidate) && Array.isArray(candidate.results)) {
|
|
165
|
+
return candidate.results;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return [body];
|
|
169
|
+
}
|
|
170
|
+
function paddleEntryToDocument(entry, index, request, model) {
|
|
171
|
+
const record = isRecord(entry) ? entry : {};
|
|
172
|
+
const markdown = isRecord(record.markdown) ? record.markdown : undefined;
|
|
173
|
+
const text = firstString([
|
|
174
|
+
markdown?.text,
|
|
175
|
+
record.markdown,
|
|
176
|
+
record.text,
|
|
177
|
+
record.content,
|
|
178
|
+
]);
|
|
179
|
+
const page = firstNumber([
|
|
180
|
+
record.page,
|
|
181
|
+
record.pageId,
|
|
182
|
+
record.pageIndex,
|
|
183
|
+
record.page_number,
|
|
184
|
+
]);
|
|
185
|
+
return {
|
|
186
|
+
id: `${request.source}#paddleocr-${index + 1}`,
|
|
187
|
+
text,
|
|
188
|
+
metadata: {
|
|
189
|
+
sourceUri: request.source,
|
|
190
|
+
page,
|
|
191
|
+
model: request.model ?? model,
|
|
192
|
+
},
|
|
193
|
+
sourceUri: request.source,
|
|
194
|
+
raw: entry,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
function firstString(values) {
|
|
198
|
+
for (const value of values) {
|
|
199
|
+
if (typeof value === 'string') {
|
|
200
|
+
return value;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
return '';
|
|
204
|
+
}
|
|
205
|
+
function firstNumber(values) {
|
|
206
|
+
for (const value of values) {
|
|
207
|
+
if (typeof value === 'number') {
|
|
208
|
+
return value;
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
return undefined;
|
|
212
|
+
}
|
|
213
|
+
function isRecord(value) {
|
|
214
|
+
return typeof value === 'object' && value !== null;
|
|
215
|
+
}
|
|
216
|
+
function inferPaddleFileType(value) {
|
|
217
|
+
const normalized = value?.toLowerCase() ?? '';
|
|
218
|
+
if (normalized.includes('pdf') || normalized.endsWith('.pdf')) {
|
|
219
|
+
return 0;
|
|
220
|
+
}
|
|
221
|
+
return 1;
|
|
222
|
+
}
|
|
223
|
+
function inferMimeType(uri) {
|
|
224
|
+
const clean = uri.split(/[?#]/u)[0]?.toLowerCase() ?? '';
|
|
225
|
+
if (clean.endsWith('.pdf'))
|
|
226
|
+
return 'application/pdf';
|
|
227
|
+
if (clean.endsWith('.png'))
|
|
228
|
+
return 'image/png';
|
|
229
|
+
if (clean.endsWith('.jpg') || clean.endsWith('.jpeg'))
|
|
230
|
+
return 'image/jpeg';
|
|
231
|
+
if (clean.endsWith('.webp'))
|
|
232
|
+
return 'image/webp';
|
|
233
|
+
if (clean.endsWith('.tiff') || clean.endsWith('.tif'))
|
|
234
|
+
return 'image/tiff';
|
|
235
|
+
return undefined;
|
|
236
|
+
}
|
|
237
|
+
function filenameFromUri(uri) {
|
|
238
|
+
const clean = uri.split(/[?#]/u)[0] ?? '';
|
|
239
|
+
const filename = clean.split('/').filter(Boolean).at(-1);
|
|
240
|
+
return filename ? decodeURIComponent(filename) : undefined;
|
|
241
|
+
}
|
|
242
|
+
function bytesToBase64(bytes) {
|
|
243
|
+
return Buffer.from(bytes).toString('base64');
|
|
244
|
+
}
|
|
245
|
+
async function streamToBytes(stream) {
|
|
246
|
+
const reader = stream.getReader();
|
|
247
|
+
const chunks = [];
|
|
248
|
+
let total = 0;
|
|
249
|
+
while (true) {
|
|
250
|
+
const { done, value } = await reader.read();
|
|
251
|
+
if (done) {
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
if (value) {
|
|
255
|
+
chunks.push(value);
|
|
256
|
+
total += value.byteLength;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
const result = new Uint8Array(total);
|
|
260
|
+
let offset = 0;
|
|
261
|
+
for (const chunk of chunks) {
|
|
262
|
+
result.set(chunk, offset);
|
|
263
|
+
offset += chunk.byteLength;
|
|
264
|
+
}
|
|
265
|
+
return result;
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=paddleocr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paddleocr.js","sourceRoot":"","sources":["../src/paddleocr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReadResult, ReaderDocument } from './types.js';
|
|
2
|
+
export type ReaderErrorCode = 'INVALID_INPUT' | 'UNSUPPORTED_SOURCE' | 'PROVIDER_REJECTED' | 'PROVIDER_UNAVAILABLE' | 'PARSE_FAILED';
|
|
3
|
+
export interface ReaderErrorOptions {
|
|
4
|
+
code: ReaderErrorCode;
|
|
5
|
+
status?: number;
|
|
6
|
+
retryable?: boolean;
|
|
7
|
+
cause?: unknown;
|
|
8
|
+
}
|
|
9
|
+
export declare class ReaderError extends Error {
|
|
10
|
+
readonly name = "ReaderError";
|
|
11
|
+
readonly code: ReaderErrorCode;
|
|
12
|
+
readonly status?: number;
|
|
13
|
+
readonly retryable: boolean;
|
|
14
|
+
constructor(message: string, options: ReaderErrorOptions);
|
|
15
|
+
}
|
|
16
|
+
export declare function readResultText(result: ReadResult): string;
|
|
17
|
+
export declare function mergeDocumentMetadata(result: ReadResult, document: ReaderDocument): Record<string, unknown>;
|
|
18
|
+
//# sourceMappingURL=reader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,MAAM,eAAe,GACvB,eAAe,GACf,oBAAoB,GACpB,mBAAmB,GACnB,sBAAsB,GACtB,cAAc,CAAC;AAEnB,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAyB,IAAI,iBAAiB;IAC9C,SAAgB,IAAI,EAAE,eAAe,CAAC;IACtC,SAAgB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChC,SAAgB,SAAS,EAAE,OAAO,CAAC;gBAEhB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB;CAMhE;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQzD;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiB3G"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export class ReaderError extends Error {
|
|
2
|
+
name = 'ReaderError';
|
|
3
|
+
code;
|
|
4
|
+
status;
|
|
5
|
+
retryable;
|
|
6
|
+
constructor(message, options) {
|
|
7
|
+
super(message, { cause: options.cause });
|
|
8
|
+
this.code = options.code;
|
|
9
|
+
this.status = options.status;
|
|
10
|
+
this.retryable = options.retryable ?? false;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export function readResultText(result) {
|
|
14
|
+
if (typeof result.text === 'string') {
|
|
15
|
+
return result.text;
|
|
16
|
+
}
|
|
17
|
+
if (typeof result.markdown === 'string') {
|
|
18
|
+
return result.markdown;
|
|
19
|
+
}
|
|
20
|
+
return result.documents.map((document) => document.text).filter(Boolean).join('\n\n');
|
|
21
|
+
}
|
|
22
|
+
export function mergeDocumentMetadata(result, document) {
|
|
23
|
+
const metadata = {
|
|
24
|
+
id: document.id,
|
|
25
|
+
reader: result.reader,
|
|
26
|
+
model: result.model,
|
|
27
|
+
sourceUri: document.sourceUri,
|
|
28
|
+
pageRange: document.pageRange,
|
|
29
|
+
mimeType: document.mimeType,
|
|
30
|
+
...document.metadata,
|
|
31
|
+
};
|
|
32
|
+
for (const [key, value] of Object.entries(metadata)) {
|
|
33
|
+
if (value === undefined) {
|
|
34
|
+
delete metadata[key];
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
return metadata;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=reader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reader.js","sourceRoot":"","sources":["../src/reader.ts"],"names":[],"mappings":"AAgBA,MAAM,OAAO,WAAY,SAAQ,KAAK;IACX,IAAI,GAAG,aAAa,CAAC;IAC9B,IAAI,CAAkB;IACtB,MAAM,CAAU;IAChB,SAAS,CAAU;IAEnC,YAAmB,OAAe,EAAE,OAA2B;QAC7D,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC9C,CAAC;CACF;AAED,MAAM,UAAU,cAAc,CAAC,MAAkB;IAC/C,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,QAAQ,CAAC;IACzB,CAAC;IACD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAkB,EAAE,QAAwB;IAChF,MAAM,QAAQ,GAA4B;QACxC,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,SAAS,EAAE,QAAQ,CAAC,SAAS;QAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,GAAG,QAAQ,CAAC,QAAQ;KACrB,CAAC;IAEF,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ExtensionDescriptor, RegisteredConfigSchema, RegisteredReader, RegisteredRuntimeCapability, RegisteredSourceAccessor, RegisteredTool, Extension } from './types.js';
|
|
2
|
+
export interface ExtensionRegistry {
|
|
3
|
+
install(extension: Extension, descriptor: ExtensionDescriptor): Promise<void> | void;
|
|
4
|
+
getReader(id: string): RegisteredReader | undefined;
|
|
5
|
+
listReaders(): RegisteredReader[];
|
|
6
|
+
getSourceAccessor(id: string): RegisteredSourceAccessor | undefined;
|
|
7
|
+
listSourceAccessors(): RegisteredSourceAccessor[];
|
|
8
|
+
getRuntimeCapability(id: string): RegisteredRuntimeCapability | undefined;
|
|
9
|
+
listRuntimeCapabilities(): RegisteredRuntimeCapability[];
|
|
10
|
+
getTool(id: string): RegisteredTool | undefined;
|
|
11
|
+
listTools(): RegisteredTool[];
|
|
12
|
+
getConfigSchema(id: string): RegisteredConfigSchema | undefined;
|
|
13
|
+
listConfigSchemas(): RegisteredConfigSchema[];
|
|
14
|
+
}
|
|
15
|
+
export declare function createExtensionRegistry(): ExtensionRegistry;
|
|
16
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,mBAAmB,EAEnB,sBAAsB,EACtB,gBAAgB,EAChB,2BAA2B,EAC3B,wBAAwB,EACxB,cAAc,EAId,SAAS,EAEV,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAErF,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAAC;IACpD,WAAW,IAAI,gBAAgB,EAAE,CAAC;IAElC,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,wBAAwB,GAAG,SAAS,CAAC;IACpE,mBAAmB,IAAI,wBAAwB,EAAE,CAAC;IAElD,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,2BAA2B,GAAG,SAAS,CAAC;IAC1E,uBAAuB,IAAI,2BAA2B,EAAE,CAAC;IAEzD,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IAChD,SAAS,IAAI,cAAc,EAAE,CAAC;IAE9B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS,CAAC;IAChE,iBAAiB,IAAI,sBAAsB,EAAE,CAAC;CAC/C;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
export function createExtensionRegistry() {
|
|
2
|
+
return new InMemoryExtensionRegistry();
|
|
3
|
+
}
|
|
4
|
+
class InMemoryExtensionRegistry {
|
|
5
|
+
readers = new Map();
|
|
6
|
+
sourceAccessors = new Map();
|
|
7
|
+
runtimeCapabilities = new Map();
|
|
8
|
+
tools = new Map();
|
|
9
|
+
configSchemas = new Map();
|
|
10
|
+
install(extension, descriptor) {
|
|
11
|
+
const api = this.createApi(descriptor);
|
|
12
|
+
const result = extension(api);
|
|
13
|
+
if (isPromiseLike(result)) {
|
|
14
|
+
return result.then(() => undefined);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
getReader(id) {
|
|
18
|
+
return this.readers.get(id);
|
|
19
|
+
}
|
|
20
|
+
listReaders() {
|
|
21
|
+
return [...this.readers.values()];
|
|
22
|
+
}
|
|
23
|
+
getSourceAccessor(id) {
|
|
24
|
+
return this.sourceAccessors.get(id);
|
|
25
|
+
}
|
|
26
|
+
listSourceAccessors() {
|
|
27
|
+
return [...this.sourceAccessors.values()];
|
|
28
|
+
}
|
|
29
|
+
getRuntimeCapability(id) {
|
|
30
|
+
return this.runtimeCapabilities.get(id);
|
|
31
|
+
}
|
|
32
|
+
listRuntimeCapabilities() {
|
|
33
|
+
return [...this.runtimeCapabilities.values()];
|
|
34
|
+
}
|
|
35
|
+
getTool(id) {
|
|
36
|
+
return this.tools.get(id);
|
|
37
|
+
}
|
|
38
|
+
listTools() {
|
|
39
|
+
return [...this.tools.values()];
|
|
40
|
+
}
|
|
41
|
+
getConfigSchema(id) {
|
|
42
|
+
return this.configSchemas.get(id);
|
|
43
|
+
}
|
|
44
|
+
listConfigSchemas() {
|
|
45
|
+
return [...this.configSchemas.values()];
|
|
46
|
+
}
|
|
47
|
+
createApi(descriptor) {
|
|
48
|
+
const registration = {
|
|
49
|
+
extensionId: descriptor.id,
|
|
50
|
+
extensionVersion: descriptor.version,
|
|
51
|
+
};
|
|
52
|
+
return {
|
|
53
|
+
reader: {
|
|
54
|
+
register: (definition) => {
|
|
55
|
+
assertUnique(this.readers, 'reader', definition.id);
|
|
56
|
+
this.readers.set(definition.id, { ...definition, ...registration });
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
source: {
|
|
60
|
+
register: (definition) => {
|
|
61
|
+
assertUnique(this.sourceAccessors, 'source accessor', definition.id);
|
|
62
|
+
this.sourceAccessors.set(definition.id, { ...definition, ...registration });
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
runtime: {
|
|
66
|
+
registerCapability: (definition) => {
|
|
67
|
+
assertUnique(this.runtimeCapabilities, 'runtime capability', definition.id);
|
|
68
|
+
this.runtimeCapabilities.set(definition.id, { ...definition, ...registration });
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
tools: {
|
|
72
|
+
register: (definition) => {
|
|
73
|
+
assertUnique(this.tools, 'tool', definition.id);
|
|
74
|
+
this.tools.set(definition.id, { ...definition, ...registration });
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
config: {
|
|
78
|
+
registerSchema: (definition) => {
|
|
79
|
+
assertUnique(this.configSchemas, 'config schema', definition.id);
|
|
80
|
+
this.configSchemas.set(definition.id, { ...definition, ...registration });
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function assertUnique(map, label, id) {
|
|
87
|
+
if (map.has(id)) {
|
|
88
|
+
throw new Error(`Duplicate ${label} id ${id}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function isPromiseLike(value) {
|
|
92
|
+
return typeof value === 'object'
|
|
93
|
+
&& value !== null
|
|
94
|
+
&& 'then' in value
|
|
95
|
+
&& typeof value.then === 'function';
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
export type ReaderOutput = 'text' | 'markdown' | 'structured';
|
|
2
|
+
export type ReaderTransport = 'remote-http' | 'local-http' | 'local-process' | 'in-process';
|
|
3
|
+
export interface ExtensionDescriptor {
|
|
4
|
+
id: string;
|
|
5
|
+
version: string;
|
|
6
|
+
displayName?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface RegisteredByExtension {
|
|
9
|
+
extensionId: string;
|
|
10
|
+
extensionVersion: string;
|
|
11
|
+
}
|
|
12
|
+
export type ReaderInput = {
|
|
13
|
+
kind: 'remote-url';
|
|
14
|
+
url: string;
|
|
15
|
+
filename?: string;
|
|
16
|
+
mimeType?: string;
|
|
17
|
+
} | {
|
|
18
|
+
kind: 'local-path';
|
|
19
|
+
path: string;
|
|
20
|
+
filename?: string;
|
|
21
|
+
mimeType?: string;
|
|
22
|
+
} | {
|
|
23
|
+
kind: 'bytes';
|
|
24
|
+
bytes: Uint8Array;
|
|
25
|
+
filename?: string;
|
|
26
|
+
mimeType?: string;
|
|
27
|
+
} | {
|
|
28
|
+
kind: 'stream';
|
|
29
|
+
stream: ReadableStream<Uint8Array>;
|
|
30
|
+
filename?: string;
|
|
31
|
+
mimeType?: string;
|
|
32
|
+
};
|
|
33
|
+
export interface ReaderContext {
|
|
34
|
+
signal?: AbortSignal;
|
|
35
|
+
}
|
|
36
|
+
export interface ReadRequest {
|
|
37
|
+
/** Source URI. Host/source layers own metadata lookup and materialization. */
|
|
38
|
+
source: string;
|
|
39
|
+
/** Optional already-materialized input for hosts that have opened the source. */
|
|
40
|
+
input?: ReaderInput;
|
|
41
|
+
output?: ReaderOutput;
|
|
42
|
+
pages?: string;
|
|
43
|
+
model?: string;
|
|
44
|
+
options?: Record<string, unknown>;
|
|
45
|
+
}
|
|
46
|
+
export interface ReaderDocument {
|
|
47
|
+
id?: string;
|
|
48
|
+
text: string;
|
|
49
|
+
metadata?: Record<string, unknown>;
|
|
50
|
+
sourceUri?: string;
|
|
51
|
+
mimeType?: string;
|
|
52
|
+
pageRange?: string;
|
|
53
|
+
raw?: unknown;
|
|
54
|
+
}
|
|
55
|
+
export interface ReaderArtifact {
|
|
56
|
+
id?: string;
|
|
57
|
+
kind: string;
|
|
58
|
+
uri?: string;
|
|
59
|
+
mimeType?: string;
|
|
60
|
+
metadata?: Record<string, unknown>;
|
|
61
|
+
}
|
|
62
|
+
export interface ReadResult {
|
|
63
|
+
reader: string;
|
|
64
|
+
model?: string;
|
|
65
|
+
documents: ReaderDocument[];
|
|
66
|
+
markdown?: string;
|
|
67
|
+
text?: string;
|
|
68
|
+
json?: unknown;
|
|
69
|
+
artifacts?: ReaderArtifact[];
|
|
70
|
+
usage?: {
|
|
71
|
+
pages?: number;
|
|
72
|
+
bytes?: number;
|
|
73
|
+
};
|
|
74
|
+
raw?: unknown;
|
|
75
|
+
}
|
|
76
|
+
export interface Reader {
|
|
77
|
+
id: string;
|
|
78
|
+
displayName?: string;
|
|
79
|
+
read(request: ReadRequest, ctx: ReaderContext): Promise<ReadResult>;
|
|
80
|
+
}
|
|
81
|
+
export interface ReaderDefinition extends Reader {
|
|
82
|
+
outputs: ReaderOutput[];
|
|
83
|
+
transports: ReaderTransport[];
|
|
84
|
+
supportedSourceSchemes?: string[];
|
|
85
|
+
supportedMimeTypes?: string[];
|
|
86
|
+
}
|
|
87
|
+
export type RegisteredReader = ReaderDefinition & RegisteredByExtension;
|
|
88
|
+
export interface SourceAccessorDefinition {
|
|
89
|
+
id: string;
|
|
90
|
+
schemes: string[];
|
|
91
|
+
canOpen(source: string, ctx: ReaderContext): boolean | Promise<boolean>;
|
|
92
|
+
open(source: string, ctx: ReaderContext): Promise<ReaderInput>;
|
|
93
|
+
}
|
|
94
|
+
export type RegisteredSourceAccessor = SourceAccessorDefinition & RegisteredByExtension;
|
|
95
|
+
export interface RuntimeCapabilityDefinition {
|
|
96
|
+
id: string;
|
|
97
|
+
kind: ReaderTransport;
|
|
98
|
+
readerIds: string[];
|
|
99
|
+
sourceSchemes?: string[];
|
|
100
|
+
maxFileBytes?: number;
|
|
101
|
+
maxPagesPerJob?: number;
|
|
102
|
+
}
|
|
103
|
+
export type RegisteredRuntimeCapability = RuntimeCapabilityDefinition & RegisteredByExtension;
|
|
104
|
+
export interface ToolDefinition {
|
|
105
|
+
id: string;
|
|
106
|
+
description: string;
|
|
107
|
+
inputSchema?: unknown;
|
|
108
|
+
}
|
|
109
|
+
export type RegisteredTool = ToolDefinition & RegisteredByExtension;
|
|
110
|
+
export type ConfigFieldType = 'string' | 'number' | 'boolean' | 'secret' | 'url' | 'select';
|
|
111
|
+
export interface ConfigFieldDefinition {
|
|
112
|
+
name: string;
|
|
113
|
+
type: ConfigFieldType;
|
|
114
|
+
required?: boolean;
|
|
115
|
+
description?: string;
|
|
116
|
+
options?: string[];
|
|
117
|
+
}
|
|
118
|
+
export interface ConfigSchemaDefinition {
|
|
119
|
+
id: string;
|
|
120
|
+
fields: ConfigFieldDefinition[];
|
|
121
|
+
}
|
|
122
|
+
export type RegisteredConfigSchema = ConfigSchemaDefinition & RegisteredByExtension;
|
|
123
|
+
export interface ExtensionApi {
|
|
124
|
+
reader: {
|
|
125
|
+
register(definition: ReaderDefinition): void;
|
|
126
|
+
};
|
|
127
|
+
source: {
|
|
128
|
+
register(definition: SourceAccessorDefinition): void;
|
|
129
|
+
};
|
|
130
|
+
runtime: {
|
|
131
|
+
registerCapability(definition: RuntimeCapabilityDefinition): void;
|
|
132
|
+
};
|
|
133
|
+
tools: {
|
|
134
|
+
register(definition: ToolDefinition): void;
|
|
135
|
+
};
|
|
136
|
+
config: {
|
|
137
|
+
registerSchema(definition: ConfigSchemaDefinition): void;
|
|
138
|
+
};
|
|
139
|
+
}
|
|
140
|
+
export type Extension = (api: ExtensionApi) => void | Promise<void>;
|
|
141
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@undefineds.co/extensions",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Unified Undefineds extension protocol and registry.",
|
|
5
|
+
"repository": "https://github.com/undefinedsco/extensions",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "dist-cjs/index.js",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist-cjs/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"dist-cjs",
|
|
19
|
+
"README.md"
|
|
20
|
+
],
|
|
21
|
+
"scripts": {
|
|
22
|
+
"build": "rm -rf dist dist-cjs && tsc -p tsconfig.json && tsc -p tsconfig.cjs.json && node scripts/write-cjs-package.cjs",
|
|
23
|
+
"prepare": "bun run build",
|
|
24
|
+
"test": "vitest --run",
|
|
25
|
+
"typecheck": "tsc -p tsconfig.json --noEmit && tsc -p tsconfig.cjs.json --noEmit"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^24.0.0",
|
|
29
|
+
"typescript": "^5.9.3",
|
|
30
|
+
"vitest": "^1.6.1"
|
|
31
|
+
},
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=22 <27"
|
|
34
|
+
},
|
|
35
|
+
"publishConfig": {
|
|
36
|
+
"access": "public"
|
|
37
|
+
}
|
|
38
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@undefineds.co/xpod",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.63",
|
|
4
4
|
"description": "Xpod is an extended Community Solid Server, offering rich-feature, production-level Solid Pod and identity management.",
|
|
5
5
|
"repository": "https://github.com/undefinedsco/xpod",
|
|
6
6
|
"author": "developer@undefineds.co",
|
|
@@ -190,8 +190,6 @@
|
|
|
190
190
|
"@mariozechner/pi-coding-agent": "^0.55.1",
|
|
191
191
|
"@radix-ui/react-slot": "^1.2.4",
|
|
192
192
|
"@solid/community-server": "8.0.0-alpha.1",
|
|
193
|
-
"@undefineds.co/drizzle-solid": "0.3.18",
|
|
194
|
-
"@undefineds.co/extensions": "github:undefinedsco/extensions#497942519bc211b6b5bc684f47f41bad189cf632",
|
|
195
193
|
"@undefineds.co/models": "0.2.47",
|
|
196
194
|
"abstract-level": "^1.0.4",
|
|
197
195
|
"acme-client": "^5.1.3",
|