@inhuman.tools/harness-provider-sdk 0.0.0-stage → 0.1.0
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.md +7 -0
- package/dist/auth.d.ts +11 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +2 -0
- package/dist/auth.js.map +1 -0
- package/dist/blobs.d.ts +13 -0
- package/dist/blobs.d.ts.map +1 -0
- package/dist/blobs.js +16 -0
- package/dist/blobs.js.map +1 -0
- package/dist/capabilities.d.ts +105 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +32 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/descriptor.d.ts +20 -0
- package/dist/descriptor.d.ts.map +1 -0
- package/dist/descriptor.js +39 -0
- package/dist/descriptor.js.map +1 -0
- package/dist/driver.d.ts +5 -0
- package/dist/driver.d.ts.map +1 -0
- package/dist/driver.js +9 -0
- package/dist/driver.js.map +1 -0
- package/dist/identity.d.ts +10 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +11 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/parse.d.ts +3 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +9 -0
- package/dist/parse.js.map +1 -0
- package/dist/registration.d.ts +24 -0
- package/dist/registration.d.ts.map +1 -0
- package/dist/registration.js +70 -0
- package/dist/registration.js.map +1 -0
- package/dist/schemas/index.d.ts +2 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +2 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/provider.d.ts +178 -0
- package/dist/schemas/provider.d.ts.map +1 -0
- package/dist/schemas/provider.js +100 -0
- package/dist/schemas/provider.js.map +1 -0
- package/dist/visuals.d.ts +12 -0
- package/dist/visuals.d.ts.map +1 -0
- package/dist/visuals.js +15 -0
- package/dist/visuals.js.map +1 -0
- package/package.json +49 -3
- package/src/auth.ts +11 -0
- package/src/blobs.ts +21 -0
- package/src/capabilities.ts +127 -0
- package/src/descriptor.ts +69 -0
- package/src/driver.ts +12 -0
- package/src/identity.ts +14 -0
- package/src/index.ts +33 -0
- package/src/parse.ts +9 -0
- package/src/registration.ts +108 -0
- package/src/schemas/index.ts +1 -0
- package/src/schemas/provider.ts +121 -0
- package/src/visuals.ts +20 -0
- package/README.md +0 -3
package/LICENSE.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Copyright 2026 Merkle Bonsai
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
4
|
+
|
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
6
|
+
|
|
7
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/dist/auth.d.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auth interaction shapes. OAuth/OIDC/PKCE live in provider-auth; adopt
|
|
3
|
+
* helpers stay with the connection registry (D3).
|
|
4
|
+
*/
|
|
5
|
+
import { AUTH_INTERACTION_KINDS } from "./schemas/provider.js";
|
|
6
|
+
export type AuthInteractionKind = (typeof AUTH_INTERACTION_KINDS)[number];
|
|
7
|
+
export type AuthInteraction = {
|
|
8
|
+
readonly kind: AuthInteractionKind;
|
|
9
|
+
readonly connectionId: string;
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,MAAM,mBAAmB,GAAG,CAAC,OAAO,sBAAsB,CAAC,CAAC,MAAM,CAAC,CAAC;AAC1E,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B,CAAC"}
|
package/dist/auth.js
ADDED
package/dist/auth.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":""}
|
package/dist/blobs.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read seam for stored blobs. The kernel's blob bucket belongs to the daemon;
|
|
3
|
+
* code that needs a blob's bytes (a provider projecting a wire, a recall tool)
|
|
4
|
+
* reads them through here and never imports the store. Keys are content hashes,
|
|
5
|
+
* so there is no session or id to pass: a hash a document names is the whole address.
|
|
6
|
+
*/
|
|
7
|
+
/** Bytes of one stored blob, or null when the hash is unknown or unreadable. */
|
|
8
|
+
export type BlobReader = (sha256: string) => Uint8Array | null;
|
|
9
|
+
/** The host that owns the bucket binds it once at boot. `null` unbinds. */
|
|
10
|
+
export declare function bindBlobReader(read: BlobReader | null): void;
|
|
11
|
+
/** Null while nothing is bound, so a caller falls back to the head the document kept. */
|
|
12
|
+
export declare function readBlob(sha256: string): Uint8Array | null;
|
|
13
|
+
//# sourceMappingURL=blobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobs.d.ts","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gFAAgF;AAChF,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,UAAU,GAAG,IAAI,CAAC;AAI/D,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAE5D;AAED,yFAAyF;AACzF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAE1D"}
|
package/dist/blobs.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Read seam for stored blobs. The kernel's blob bucket belongs to the daemon;
|
|
3
|
+
* code that needs a blob's bytes (a provider projecting a wire, a recall tool)
|
|
4
|
+
* reads them through here and never imports the store. Keys are content hashes,
|
|
5
|
+
* so there is no session or id to pass: a hash a document names is the whole address.
|
|
6
|
+
*/
|
|
7
|
+
let reader = null;
|
|
8
|
+
/** The host that owns the bucket binds it once at boot. `null` unbinds. */
|
|
9
|
+
export function bindBlobReader(read) {
|
|
10
|
+
reader = read;
|
|
11
|
+
}
|
|
12
|
+
/** Null while nothing is bound, so a caller falls back to the head the document kept. */
|
|
13
|
+
export function readBlob(sha256) {
|
|
14
|
+
return reader === null ? null : reader(sha256);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=blobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blobs.js","sourceRoot":"","sources":["../src/blobs.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,IAAI,MAAM,GAAsB,IAAI,CAAC;AAErC,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAuB;IACpD,MAAM,GAAG,IAAI,CAAC;AAChB,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known capability kinds and request/result envelopes.
|
|
3
|
+
*
|
|
4
|
+
* `can` on a driver is these short names (product law). PEW/model kinds stay
|
|
5
|
+
* the existing Expectation classes — v1 does not invent third-party wire kinds.
|
|
6
|
+
*/
|
|
7
|
+
import type { CompletionExpectation, CompletionMessage, CompletionResult, McpToolResult, WebExtractResult, WebSearchResult } from "@inhuman.tools/harness-model";
|
|
8
|
+
import { CAPABILITY_KINDS } from "./schemas/provider.js";
|
|
9
|
+
export type CapabilityKind = (typeof CAPABILITY_KINDS)[number];
|
|
10
|
+
/** Sync tags of the harness-model PEW kinds each `can` token claims. */
|
|
11
|
+
export declare const CAPABILITY_EXPECTATION: {
|
|
12
|
+
readonly completion: "harness:expectation:completion";
|
|
13
|
+
readonly mcp: "harness:expectation:mcp-tool";
|
|
14
|
+
readonly "web-search": "harness:expectation:web-search";
|
|
15
|
+
readonly "web-extract": "harness:expectation:web-extract";
|
|
16
|
+
};
|
|
17
|
+
export declare const CAPABILITY_METHOD: {
|
|
18
|
+
readonly completion: "complete";
|
|
19
|
+
readonly mcp: "callTool";
|
|
20
|
+
readonly "web-search": "webSearch";
|
|
21
|
+
readonly "web-extract": "webExtract";
|
|
22
|
+
};
|
|
23
|
+
export declare function isCapabilityKind(value: unknown): value is CapabilityKind;
|
|
24
|
+
export declare function parseCapabilityKind(value: unknown): CapabilityKind;
|
|
25
|
+
export declare function admitCapability(can: readonly string[], kind: CapabilityKind): boolean;
|
|
26
|
+
export type CompleteFields = {
|
|
27
|
+
readonly model: string;
|
|
28
|
+
readonly promptText?: string;
|
|
29
|
+
readonly messages?: CompletionMessage[];
|
|
30
|
+
readonly responseSchemaJson?: string;
|
|
31
|
+
readonly systemNote?: string;
|
|
32
|
+
readonly signal?: AbortSignal;
|
|
33
|
+
/** Required. Homed on a session plexus. Mutated in place. */
|
|
34
|
+
readonly round: CompletionExpectation;
|
|
35
|
+
};
|
|
36
|
+
export type CompleteRequest = CompleteFields & {
|
|
37
|
+
readonly connectionId: string;
|
|
38
|
+
};
|
|
39
|
+
export type ConnectionCompleteRequest = CompleteFields;
|
|
40
|
+
export type CompleteResult = CompletionResult;
|
|
41
|
+
export type McpCallRequest = {
|
|
42
|
+
readonly connectionId: string;
|
|
43
|
+
readonly serverToolName: string;
|
|
44
|
+
readonly args: Record<string, unknown>;
|
|
45
|
+
readonly signal?: AbortSignal;
|
|
46
|
+
readonly onDispatch?: () => void;
|
|
47
|
+
};
|
|
48
|
+
export type ConnectionMcpCallRequest = Omit<McpCallRequest, "connectionId">;
|
|
49
|
+
export type McpCallResult = McpToolResult;
|
|
50
|
+
export type WebSearchRequest = {
|
|
51
|
+
readonly connectionId: string;
|
|
52
|
+
readonly query: string;
|
|
53
|
+
readonly limit?: number;
|
|
54
|
+
readonly signal?: AbortSignal;
|
|
55
|
+
};
|
|
56
|
+
export type ConnectionWebSearchRequest = Omit<WebSearchRequest, "connectionId">;
|
|
57
|
+
export type WebSearchCapabilityResult = WebSearchResult;
|
|
58
|
+
export type WebExtractRequest = {
|
|
59
|
+
readonly connectionId: string;
|
|
60
|
+
readonly url: string;
|
|
61
|
+
readonly charLimit?: number;
|
|
62
|
+
readonly signal?: AbortSignal;
|
|
63
|
+
};
|
|
64
|
+
export type ConnectionWebExtractRequest = Omit<WebExtractRequest, "connectionId">;
|
|
65
|
+
export type WebExtractCapabilityResult = WebExtractResult;
|
|
66
|
+
export type CapabilityRequest = {
|
|
67
|
+
readonly kind: "completion";
|
|
68
|
+
readonly request: CompleteRequest;
|
|
69
|
+
} | {
|
|
70
|
+
readonly kind: "mcp";
|
|
71
|
+
readonly request: McpCallRequest;
|
|
72
|
+
} | {
|
|
73
|
+
readonly kind: "web-search";
|
|
74
|
+
readonly request: WebSearchRequest;
|
|
75
|
+
} | {
|
|
76
|
+
readonly kind: "web-extract";
|
|
77
|
+
readonly request: WebExtractRequest;
|
|
78
|
+
};
|
|
79
|
+
export type CapabilityResult = {
|
|
80
|
+
readonly kind: "completion";
|
|
81
|
+
readonly result: CompleteResult;
|
|
82
|
+
} | {
|
|
83
|
+
readonly kind: "mcp";
|
|
84
|
+
readonly result: McpCallResult;
|
|
85
|
+
} | {
|
|
86
|
+
readonly kind: "web-search";
|
|
87
|
+
readonly result: WebSearchCapabilityResult;
|
|
88
|
+
} | {
|
|
89
|
+
readonly kind: "web-extract";
|
|
90
|
+
readonly result: WebExtractCapabilityResult;
|
|
91
|
+
};
|
|
92
|
+
/**
|
|
93
|
+
* Duck-typed interned connection face. Generic admission uses this, not a
|
|
94
|
+
* vendor `instanceof`.
|
|
95
|
+
*/
|
|
96
|
+
export type CapabilityConnection = {
|
|
97
|
+
readonly connectionId: string;
|
|
98
|
+
complete?(req: ConnectionCompleteRequest): Promise<CompleteResult>;
|
|
99
|
+
callTool?(req: ConnectionMcpCallRequest): Promise<McpCallResult>;
|
|
100
|
+
webSearch?(req: ConnectionWebSearchRequest): Promise<WebSearchCapabilityResult>;
|
|
101
|
+
webExtract?(req: ConnectionWebExtractRequest): Promise<WebExtractCapabilityResult>;
|
|
102
|
+
};
|
|
103
|
+
export declare function parseCapabilityRequest(value: unknown): CapabilityRequest;
|
|
104
|
+
export declare function connectionSupports(connection: CapabilityConnection, kind: CapabilityKind): boolean;
|
|
105
|
+
//# sourceMappingURL=capabilities.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { parseWith } from "./parse.js";
|
|
2
|
+
import { capabilityKindSchema, capabilityRequestSchema } from "./schemas/provider.js";
|
|
3
|
+
/** Sync tags of the harness-model PEW kinds each `can` token claims. */
|
|
4
|
+
export const CAPABILITY_EXPECTATION = {
|
|
5
|
+
completion: "harness:expectation:completion",
|
|
6
|
+
mcp: "harness:expectation:mcp-tool",
|
|
7
|
+
"web-search": "harness:expectation:web-search",
|
|
8
|
+
"web-extract": "harness:expectation:web-extract",
|
|
9
|
+
};
|
|
10
|
+
export const CAPABILITY_METHOD = {
|
|
11
|
+
completion: "complete",
|
|
12
|
+
mcp: "callTool",
|
|
13
|
+
"web-search": "webSearch",
|
|
14
|
+
"web-extract": "webExtract",
|
|
15
|
+
};
|
|
16
|
+
export function isCapabilityKind(value) {
|
|
17
|
+
return capabilityKindSchema.safeParse(value).success;
|
|
18
|
+
}
|
|
19
|
+
export function parseCapabilityKind(value) {
|
|
20
|
+
return parseWith(capabilityKindSchema, value);
|
|
21
|
+
}
|
|
22
|
+
export function admitCapability(can, kind) {
|
|
23
|
+
return can.includes(kind);
|
|
24
|
+
}
|
|
25
|
+
export function parseCapabilityRequest(value) {
|
|
26
|
+
return parseWith(capabilityRequestSchema, value);
|
|
27
|
+
}
|
|
28
|
+
export function connectionSupports(connection, kind) {
|
|
29
|
+
const method = CAPABILITY_METHOD[kind];
|
|
30
|
+
return typeof connection[method] === "function";
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=capabilities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capabilities.js","sourceRoot":"","sources":["../src/capabilities.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAoB,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAIxG,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,UAAU,EAAE,gCAAgC;IAC5C,GAAG,EAAE,8BAA8B;IACnC,YAAY,EAAE,gCAAgC;IAC9C,aAAa,EAAE,iCAAiC;CACC,CAAC;AAEpD,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,UAAU,EAAE,UAAU;IACtB,GAAG,EAAE,UAAU;IACf,YAAY,EAAE,WAAW;IACzB,aAAa,EAAE,YAAY;CACsB,CAAC;AAEpD,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,oBAAoB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAChD,OAAO,SAAS,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAsB,EAAE,IAAoB;IAC1E,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AA0ED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,OAAO,SAAS,CAAC,uBAAuB,EAAE,KAAK,CAAsB,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,UAAgC,EAAE,IAAoB;IACvF,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,OAAO,UAAU,CAAC,MAAM,CAAC,KAAK,UAAU,CAAC;AAClD,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { DriverMultiplicity } from "@inhuman.tools/plexus-expectations";
|
|
2
|
+
import type { CapabilityKind } from "./capabilities.js";
|
|
3
|
+
import { type ProviderSdkContract } from "./identity.js";
|
|
4
|
+
export type DriverDefinition = {
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly description: string;
|
|
7
|
+
readonly abilityClaim: readonly CapabilityKind[];
|
|
8
|
+
readonly multiplicity: DriverMultiplicity;
|
|
9
|
+
readonly importPath: string;
|
|
10
|
+
};
|
|
11
|
+
export type ProviderDescriptor = {
|
|
12
|
+
readonly id: string;
|
|
13
|
+
readonly name: string;
|
|
14
|
+
readonly description: string;
|
|
15
|
+
readonly contract: ProviderSdkContract;
|
|
16
|
+
readonly drivers: readonly DriverDefinition[];
|
|
17
|
+
};
|
|
18
|
+
export declare function parseProviderDescriptor(value: unknown): ProviderDescriptor;
|
|
19
|
+
export declare function isProviderDescriptor(value: unknown): value is ProviderDescriptor;
|
|
20
|
+
//# sourceMappingURL=descriptor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAKxE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,SAAS,cAAc,EAAE,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C,CAAC;AA0BF,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAW1E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAMhF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { providerBrand } from "./identity.js";
|
|
2
|
+
import { parseWith } from "./parse.js";
|
|
3
|
+
import { PROVIDER_SDK_CONTRACT } from "./schemas/index.js";
|
|
4
|
+
import { providerDescriptorSchema } from "./schemas/provider.js";
|
|
5
|
+
function freezeDriver(row) {
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
name: row.name,
|
|
8
|
+
description: row.description,
|
|
9
|
+
abilityClaim: Object.freeze([...row.abilityClaim]),
|
|
10
|
+
multiplicity: row.multiplicity,
|
|
11
|
+
importPath: row.importPath ?? row.name,
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
function rejectDuplicateDrivers(drivers, context) {
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
for (const driver of drivers) {
|
|
17
|
+
if (seen.has(driver.name))
|
|
18
|
+
throw new Error(`${context}: driver "${driver.name}" collides`);
|
|
19
|
+
seen.add(driver.name);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function parseProviderDescriptor(value) {
|
|
23
|
+
const parsed = parseWith(providerDescriptorSchema, value);
|
|
24
|
+
rejectDuplicateDrivers(parsed.drivers, "provider-sdk");
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
[providerBrand.descriptor]: true,
|
|
27
|
+
id: parsed.id,
|
|
28
|
+
name: parsed.name,
|
|
29
|
+
description: parsed.description ?? "",
|
|
30
|
+
contract: PROVIDER_SDK_CONTRACT,
|
|
31
|
+
drivers: Object.freeze(parsed.drivers.map(freezeDriver)),
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function isProviderDescriptor(value) {
|
|
35
|
+
return (typeof value === "object" &&
|
|
36
|
+
value !== null &&
|
|
37
|
+
value[providerBrand.descriptor] === true);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=descriptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../src/descriptor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,aAAa,EAA4B,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAmBjE,SAAS,YAAY,CAAC,GAMrB;IACC,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QAClD,YAAY,EAAE,GAAG,CAAC,YAAY;QAC9B,UAAU,EAAE,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI;KACvC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAoC,EAAE,OAAe;IACnF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,aAAa,MAAM,CAAC,IAAI,YAAY,CAAC,CAAC;QAC3F,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAc;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;IAC1D,sBAAsB,CAAC,MAAM,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;IACvD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,IAAa;QACzC,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,EAAE;QACrC,QAAQ,EAAE,qBAAqB;QAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAc;IACjD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACb,KAAkC,CAAC,aAAa,CAAC,UAAU,CAAC,KAAK,IAAI,CACvE,CAAC;AACJ,CAAC"}
|
package/dist/driver.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { DriverSpec } from "@inhuman.tools/plexus-expectations";
|
|
2
|
+
import type { DriverDefinition } from "./descriptor.js";
|
|
3
|
+
/** Declarations fill DriverSpec inventory. Process facts stay untouched. */
|
|
4
|
+
export declare function applyDriverDefinition(spec: DriverSpec, driver: DriverDefinition): void;
|
|
5
|
+
//# sourceMappingURL=driver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAEhE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAMtF"}
|
package/dist/driver.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Declarations fill DriverSpec inventory. Process facts stay untouched. */
|
|
2
|
+
export function applyDriverDefinition(spec, driver) {
|
|
3
|
+
spec.name = driver.name;
|
|
4
|
+
spec.description = driver.description;
|
|
5
|
+
spec.importPath = driver.importPath;
|
|
6
|
+
spec.abilityClaim = [...driver.abilityClaim];
|
|
7
|
+
spec.multiplicity = driver.multiplicity;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"driver.js","sourceRoot":"","sources":["../src/driver.ts"],"names":[],"mappings":"AAIA,4EAA4E;AAC5E,MAAM,UAAU,qBAAqB,CAAC,IAAgB,EAAE,MAAwB;IAC9E,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;IACtC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC;IACpC,IAAI,CAAC,YAAY,GAAG,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IAC7C,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC;AAC1C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PROVIDER_SDK_CONTRACT } from "./schemas/provider.js";
|
|
2
|
+
/** Process-local brands. Not plugin-sdk InhumanPlugin and not a PEW kind. */
|
|
3
|
+
export declare const providerBrand: {
|
|
4
|
+
readonly descriptor: symbol;
|
|
5
|
+
readonly registration: symbol;
|
|
6
|
+
readonly driver: symbol;
|
|
7
|
+
};
|
|
8
|
+
export type ProviderSdkContract = typeof PROVIDER_SDK_CONTRACT;
|
|
9
|
+
export declare function isCompatibleContract(contract: unknown): contract is ProviderSdkContract;
|
|
10
|
+
//# sourceMappingURL=identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,6EAA6E;AAC7E,eAAO,MAAM,aAAa;;;;CAIhB,CAAC;AAEX,MAAM,MAAM,mBAAmB,GAAG,OAAO,qBAAqB,CAAC;AAE/D,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,mBAAmB,CAEvF"}
|
package/dist/identity.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { PROVIDER_SDK_CONTRACT } from "./schemas/provider.js";
|
|
2
|
+
/** Process-local brands. Not plugin-sdk InhumanPlugin and not a PEW kind. */
|
|
3
|
+
export const providerBrand = {
|
|
4
|
+
descriptor: Symbol.for("@inhuman.tools/harness-provider-sdk:descriptor"),
|
|
5
|
+
registration: Symbol.for("@inhuman.tools/harness-provider-sdk:registration"),
|
|
6
|
+
driver: Symbol.for("@inhuman.tools/harness-provider-sdk:driver"),
|
|
7
|
+
};
|
|
8
|
+
export function isCompatibleContract(contract) {
|
|
9
|
+
return contract === PROVIDER_SDK_CONTRACT;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"identity.js","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,gDAAgD,CAAC;IACxE,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,kDAAkD,CAAC;IAC5E,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,4CAA4C,CAAC;CACxD,CAAC;AAIX,MAAM,UAAU,oBAAoB,CAAC,QAAiB;IACpD,OAAO,QAAQ,KAAK,qBAAqB,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @inhuman.tools/harness-provider-sdk — driver-provider descriptors,
|
|
3
|
+
* registration identity, and capability request/result contracts on PEW.
|
|
4
|
+
*
|
|
5
|
+
* Not a vendor completion class, not InhumanPlugin, not a plugin loader.
|
|
6
|
+
*/
|
|
7
|
+
export type * from "./auth.js";
|
|
8
|
+
export { AUTH_INTERACTION_KINDS as AUTH_INTERACTION_KINDS } from "./schemas/index.js";
|
|
9
|
+
export * from "./blobs.js";
|
|
10
|
+
export * from "./capabilities.js";
|
|
11
|
+
export { CAPABILITY_KINDS as CAPABILITY_KINDS } from "./schemas/index.js";
|
|
12
|
+
export * from "./descriptor.js";
|
|
13
|
+
export * from "./driver.js";
|
|
14
|
+
export * from "./identity.js";
|
|
15
|
+
export { PROVIDER_SDK_CONTRACT as PROVIDER_SDK_CONTRACT } from "./schemas/index.js";
|
|
16
|
+
export * from "./registration.js";
|
|
17
|
+
export * from "./visuals.js";
|
|
18
|
+
export { authInteractionSchema as authInteractionSchema, capabilityKindSchema as capabilityKindSchema, capabilityRequestSchema as capabilityRequestSchema, completeRequestSchema as completeRequestSchema, driverConnectionClassSchema as driverConnectionClassSchema, driverDefinitionSchema as driverDefinitionSchema, mcpCallRequestSchema as mcpCallRequestSchema, multiplicitySchema as multiplicitySchema, providerDescriptorSchema as providerDescriptorSchema, providerRegistrationSchema as providerRegistrationSchema, registeredDriverInputSchema as registeredDriverInputSchema, webExtractRequestSchema as webExtractRequestSchema, webSearchRequestSchema as webSearchRequestSchema, } from "./schemas/index.js";
|
|
19
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,mBAAmB,WAAW,CAAC;AAC/B,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtF,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACpF,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,qBAAqB,IAAI,qBAAqB,EAC9C,oBAAoB,IAAI,oBAAoB,EAC5C,uBAAuB,IAAI,uBAAuB,EAClD,qBAAqB,IAAI,qBAAqB,EAC9C,2BAA2B,IAAI,2BAA2B,EAC1D,sBAAsB,IAAI,sBAAsB,EAChD,oBAAoB,IAAI,oBAAoB,EAC5C,kBAAkB,IAAI,kBAAkB,EACxC,wBAAwB,IAAI,wBAAwB,EACpD,0BAA0B,IAAI,0BAA0B,EACxD,2BAA2B,IAAI,2BAA2B,EAC1D,uBAAuB,IAAI,uBAAuB,EAClD,sBAAsB,IAAI,sBAAsB,GACjD,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @inhuman.tools/harness-provider-sdk — driver-provider descriptors,
|
|
3
|
+
* registration identity, and capability request/result contracts on PEW.
|
|
4
|
+
*
|
|
5
|
+
* Not a vendor completion class, not InhumanPlugin, not a plugin loader.
|
|
6
|
+
*/
|
|
7
|
+
export { AUTH_INTERACTION_KINDS as AUTH_INTERACTION_KINDS } from "./schemas/index.js";
|
|
8
|
+
export * from "./blobs.js";
|
|
9
|
+
export * from "./capabilities.js";
|
|
10
|
+
export { CAPABILITY_KINDS as CAPABILITY_KINDS } from "./schemas/index.js";
|
|
11
|
+
export * from "./descriptor.js";
|
|
12
|
+
export * from "./driver.js";
|
|
13
|
+
export * from "./identity.js";
|
|
14
|
+
export { PROVIDER_SDK_CONTRACT as PROVIDER_SDK_CONTRACT } from "./schemas/index.js";
|
|
15
|
+
export * from "./registration.js";
|
|
16
|
+
export * from "./visuals.js";
|
|
17
|
+
export { authInteractionSchema as authInteractionSchema, capabilityKindSchema as capabilityKindSchema, capabilityRequestSchema as capabilityRequestSchema, completeRequestSchema as completeRequestSchema, driverConnectionClassSchema as driverConnectionClassSchema, driverDefinitionSchema as driverDefinitionSchema, mcpCallRequestSchema as mcpCallRequestSchema, multiplicitySchema as multiplicitySchema, providerDescriptorSchema as providerDescriptorSchema, providerRegistrationSchema as providerRegistrationSchema, registeredDriverInputSchema as registeredDriverInputSchema, webExtractRequestSchema as webExtractRequestSchema, webSearchRequestSchema as webSearchRequestSchema, } from "./schemas/index.js";
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,sBAAsB,IAAI,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACtF,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,OAAO,EAAE,gBAAgB,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAC1E,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,qBAAqB,IAAI,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACpF,cAAc,mBAAmB,CAAC;AAClC,cAAc,cAAc,CAAC;AAC7B,OAAO,EACL,qBAAqB,IAAI,qBAAqB,EAC9C,oBAAoB,IAAI,oBAAoB,EAC5C,uBAAuB,IAAI,uBAAuB,EAClD,qBAAqB,IAAI,qBAAqB,EAC9C,2BAA2B,IAAI,2BAA2B,EAC1D,sBAAsB,IAAI,sBAAsB,EAChD,oBAAoB,IAAI,oBAAoB,EAC5C,kBAAkB,IAAI,kBAAkB,EACxC,wBAAwB,IAAI,wBAAwB,EACpD,0BAA0B,IAAI,0BAA0B,EACxD,2BAA2B,IAAI,2BAA2B,EAC1D,uBAAuB,IAAI,uBAAuB,EAClD,sBAAsB,IAAI,sBAAsB,GACjD,MAAM,oBAAoB,CAAC"}
|
package/dist/parse.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,SAAiB,GAAG,CAAC,CAM9F"}
|
package/dist/parse.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function parseWith(schema, value, context = "provider-sdk") {
|
|
2
|
+
const result = schema.safeParse(value);
|
|
3
|
+
if (result.success)
|
|
4
|
+
return result.data;
|
|
5
|
+
const issue = result.error.issues[0];
|
|
6
|
+
const path = issue.path.length > 0 ? `${issue.path.join(".")}: ` : "";
|
|
7
|
+
throw new Error(`${context}: ${path}${issue.message}`);
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../src/parse.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAI,MAAoB,EAAE,KAAc,EAAE,OAAO,GAAG,cAAc;IACzF,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,MAAM,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC,IAAI,CAAC;IACvC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IACtE,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { DriverConnectionClass } from "@inhuman.tools/plexus-expectations/driver";
|
|
2
|
+
import { type DriverDefinition } from "./descriptor.js";
|
|
3
|
+
import { type ProviderSdkContract } from "./identity.js";
|
|
4
|
+
export type RegisteredDriver = DriverDefinition & {
|
|
5
|
+
readonly providerId: string;
|
|
6
|
+
readonly connection: DriverConnectionClass;
|
|
7
|
+
};
|
|
8
|
+
export type RegisteredProvider = {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly contract: ProviderSdkContract;
|
|
13
|
+
readonly drivers: readonly RegisteredDriver[];
|
|
14
|
+
};
|
|
15
|
+
export declare function parseProviderRegistration(value: unknown): RegisteredProvider;
|
|
16
|
+
/**
|
|
17
|
+
* Compose a roster. Duplicate provider ids or driver names fail before any
|
|
18
|
+
* connection is constructed — identity is catalog keys, not intern slots.
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerProviders(inputs: readonly unknown[]): RegisteredProvider[];
|
|
21
|
+
export declare function flattenDrivers(providers: readonly RegisteredProvider[]): readonly RegisteredDriver[];
|
|
22
|
+
export declare function isRegisteredProvider(value: unknown): value is RegisteredProvider;
|
|
23
|
+
export declare function isRegisteredDriver(value: unknown): value is RegisteredDriver;
|
|
24
|
+
//# sourceMappingURL=registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration.d.ts","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AAGvF,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAKxE,MAAM,MAAM,gBAAgB,GAAG,gBAAgB,GAAG;IAEhD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;CAC5C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAE/B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC/C,CAAC;AAiCF,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,kBAAkB,CAW5E;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,kBAAkB,EAAE,CAiBlF;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,kBAAkB,EAAE,GAAG,SAAS,gBAAgB,EAAE,CAEpG;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,kBAAkB,CAMhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAI5E"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { providerBrand } from "./identity.js";
|
|
2
|
+
import { parseWith } from "./parse.js";
|
|
3
|
+
import { PROVIDER_SDK_CONTRACT } from "./schemas/index.js";
|
|
4
|
+
import { providerRegistrationSchema } from "./schemas/provider.js";
|
|
5
|
+
function freezeRegisteredDriver(providerId, row) {
|
|
6
|
+
return Object.freeze({
|
|
7
|
+
[providerBrand.driver]: true,
|
|
8
|
+
providerId,
|
|
9
|
+
name: row.name,
|
|
10
|
+
description: row.description,
|
|
11
|
+
abilityClaim: Object.freeze([...row.abilityClaim]),
|
|
12
|
+
multiplicity: row.multiplicity,
|
|
13
|
+
importPath: row.importPath ?? row.name,
|
|
14
|
+
connection: row.connection,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function rejectDuplicateDrivers(drivers, context) {
|
|
18
|
+
const seen = new Set();
|
|
19
|
+
for (const driver of drivers) {
|
|
20
|
+
if (seen.has(driver.name))
|
|
21
|
+
throw new Error(`${context}: driver "${driver.name}" collides`);
|
|
22
|
+
seen.add(driver.name);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
export function parseProviderRegistration(value) {
|
|
26
|
+
const parsed = parseWith(providerRegistrationSchema, value);
|
|
27
|
+
rejectDuplicateDrivers(parsed.drivers, "provider-sdk");
|
|
28
|
+
return Object.freeze({
|
|
29
|
+
[providerBrand.registration]: true,
|
|
30
|
+
id: parsed.id,
|
|
31
|
+
name: parsed.name,
|
|
32
|
+
description: parsed.description ?? "",
|
|
33
|
+
contract: PROVIDER_SDK_CONTRACT,
|
|
34
|
+
drivers: Object.freeze(parsed.drivers.map((row) => freezeRegisteredDriver(parsed.id, row))),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Compose a roster. Duplicate provider ids or driver names fail before any
|
|
39
|
+
* connection is constructed — identity is catalog keys, not intern slots.
|
|
40
|
+
*/
|
|
41
|
+
export function registerProviders(inputs) {
|
|
42
|
+
const providers = inputs.map((input) => parseProviderRegistration(input));
|
|
43
|
+
const providerIds = new Set();
|
|
44
|
+
const driverNames = new Set();
|
|
45
|
+
for (const provider of providers) {
|
|
46
|
+
if (providerIds.has(provider.id)) {
|
|
47
|
+
throw new Error(`provider-sdk: provider "${provider.id}" collides`);
|
|
48
|
+
}
|
|
49
|
+
providerIds.add(provider.id);
|
|
50
|
+
for (const driver of provider.drivers) {
|
|
51
|
+
if (driverNames.has(driver.name)) {
|
|
52
|
+
throw new Error(`provider-sdk: driver "${driver.name}" collides`);
|
|
53
|
+
}
|
|
54
|
+
driverNames.add(driver.name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return providers;
|
|
58
|
+
}
|
|
59
|
+
export function flattenDrivers(providers) {
|
|
60
|
+
return providers.flatMap((provider) => provider.drivers);
|
|
61
|
+
}
|
|
62
|
+
export function isRegisteredProvider(value) {
|
|
63
|
+
return (typeof value === "object" &&
|
|
64
|
+
value !== null &&
|
|
65
|
+
value[providerBrand.registration] === true);
|
|
66
|
+
}
|
|
67
|
+
export function isRegisteredDriver(value) {
|
|
68
|
+
return (typeof value === "object" && value !== null && value[providerBrand.driver] === true);
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registration.js","sourceRoot":"","sources":["../src/registration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/schemas/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|