@relayflows/sdk 2.0.44 → 2.0.46
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/dist/authored-flow-error.d.ts +1 -1
- package/dist/authored-flow-error.d.ts.map +1 -1
- package/dist/authored-flow-error.js.map +1 -1
- package/dist/authored-helper-effect.d.ts.map +1 -1
- package/dist/authored-helper-effect.js +9 -0
- package/dist/authored-helper-effect.js.map +1 -1
- package/dist/authored-root.d.ts.map +1 -1
- package/dist/authored-root.js +17 -0
- package/dist/authored-root.js.map +1 -1
- package/dist/cli/direct-run.d.ts.map +1 -1
- package/dist/cli/direct-run.js +7 -0
- package/dist/cli/direct-run.js.map +1 -1
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +31 -2
- package/dist/cli/run.js.map +1 -1
- package/dist/cloud-mirror-step.d.ts.map +1 -1
- package/dist/cloud-mirror-step.js +6 -1
- package/dist/cloud-mirror-step.js.map +1 -1
- package/dist/compile.d.ts +1 -0
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +2 -1
- package/dist/compile.js.map +1 -1
- package/dist/failure-kinds.d.ts +1 -1
- package/dist/failure-kinds.d.ts.map +1 -1
- package/dist/failure-kinds.js +1 -0
- package/dist/failure-kinds.js.map +1 -1
- package/dist/flow-tool-adapters.d.ts +56 -0
- package/dist/flow-tool-adapters.d.ts.map +1 -0
- package/dist/flow-tool-adapters.js +42 -0
- package/dist/flow-tool-adapters.js.map +1 -0
- package/dist/flow-tool-client.d.ts +38 -0
- package/dist/flow-tool-client.d.ts.map +1 -0
- package/dist/flow-tool-client.js +105 -0
- package/dist/flow-tool-client.js.map +1 -0
- package/dist/flow-tool-contract.d.ts +103 -0
- package/dist/flow-tool-contract.d.ts.map +1 -0
- package/dist/flow-tool-contract.js +75 -0
- package/dist/flow-tool-contract.js.map +1 -0
- package/dist/flow-tool-definitions.d.ts +19 -0
- package/dist/flow-tool-definitions.d.ts.map +1 -0
- package/dist/flow-tool-definitions.js +12 -0
- package/dist/flow-tool-definitions.js.map +1 -0
- package/dist/flow-tool-http.d.ts +14 -0
- package/dist/flow-tool-http.d.ts.map +1 -0
- package/dist/flow-tool-http.js +175 -0
- package/dist/flow-tool-http.js.map +1 -0
- package/dist/flow-tool-kernel.d.ts +27 -0
- package/dist/flow-tool-kernel.d.ts.map +1 -0
- package/dist/flow-tool-kernel.js +310 -0
- package/dist/flow-tool-kernel.js.map +1 -0
- package/dist/flow-tool-manifest.d.ts +30 -0
- package/dist/flow-tool-manifest.d.ts.map +1 -0
- package/dist/flow-tool-manifest.js +79 -0
- package/dist/flow-tool-manifest.js.map +1 -0
- package/dist/flow-tool-schema.d.ts +15 -0
- package/dist/flow-tool-schema.d.ts.map +1 -0
- package/dist/flow-tool-schema.js +70 -0
- package/dist/flow-tool-schema.js.map +1 -0
- package/dist/flow-tool-wire.d.ts +26 -0
- package/dist/flow-tool-wire.d.ts.map +1 -0
- package/dist/flow-tool-wire.js +195 -0
- package/dist/flow-tool-wire.js.map +1 -0
- package/dist/helper-park.d.ts +14 -0
- package/dist/helper-park.d.ts.map +1 -0
- package/dist/helper-park.js +40 -0
- package/dist/helper-park.js.map +1 -0
- package/dist/helper-receipt.d.ts +11 -0
- package/dist/helper-receipt.d.ts.map +1 -0
- package/dist/helper-receipt.js +100 -0
- package/dist/helper-receipt.js.map +1 -0
- package/dist/helper-writeback.d.ts.map +1 -1
- package/dist/helper-writeback.js +7 -2
- package/dist/helper-writeback.js.map +1 -1
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/journal-client.d.ts +7 -0
- package/dist/journal-client.d.ts.map +1 -1
- package/dist/journal-client.js +22 -1
- package/dist/journal-client.js.map +1 -1
- package/dist/protocol.d.ts +7 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/yaml-helper-effect.d.ts.map +1 -1
- package/dist/yaml-helper-effect.js +32 -23
- package/dist/yaml-helper-effect.js.map +1 -1
- package/package.json +2 -2
- package/src/authored-flow-error.ts +1 -0
- package/src/authored-helper-effect.ts +9 -0
- package/src/authored-root.ts +17 -0
- package/src/cli/direct-run.ts +7 -0
- package/src/cli/run.ts +30 -2
- package/src/cloud-mirror-step.ts +6 -1
- package/src/compile.ts +2 -1
- package/src/failure-kinds.ts +1 -0
- package/src/flow-tool-adapters.ts +43 -0
- package/src/flow-tool-client.ts +115 -0
- package/src/flow-tool-contract.ts +153 -0
- package/src/flow-tool-definitions.ts +27 -0
- package/src/flow-tool-http.ts +134 -0
- package/src/flow-tool-kernel.ts +319 -0
- package/src/flow-tool-manifest.ts +104 -0
- package/src/flow-tool-schema.ts +66 -0
- package/src/flow-tool-wire.ts +152 -0
- package/src/helper-park.ts +45 -0
- package/src/helper-receipt.ts +90 -0
- package/src/helper-writeback.ts +8 -3
- package/src/index.ts +21 -0
- package/src/journal-client.ts +21 -1
- package/src/protocol.ts +7 -0
- package/src/yaml-helper-effect.ts +12 -5
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { canonicalize } from './canonical.js';
|
|
2
|
+
import { flowToolFunctionDefinition } from './flow-tool-definitions.js';
|
|
3
|
+
import { FLOW_TOOL_RUN_SCHEMA } from './flow-tool-contract.js';
|
|
4
|
+
import { parseFlowToolEntry } from './flow-tool-wire.js';
|
|
5
|
+
/**
|
|
6
|
+
* One selected, authorized revision; no alternate execution path. Host/session
|
|
7
|
+
* code supplies stable operation metadata separately from model tool arguments.
|
|
8
|
+
* Register only after discovery with this same authenticated client. The server
|
|
9
|
+
* MUST reauthorize; possession of this object is not an authorization token.
|
|
10
|
+
*/
|
|
11
|
+
export function createFlowToolAdapters(client, selected) {
|
|
12
|
+
const entry = parseFlowToolEntry(selected);
|
|
13
|
+
const invoke = (input, operation) => client.invoke(entry, input, operation);
|
|
14
|
+
return Object.freeze({
|
|
15
|
+
native: Object.freeze({ definition: flowToolFunctionDefinition(entry.manifest), call: invoke }),
|
|
16
|
+
mcp: Object.freeze({
|
|
17
|
+
// Do not reuse the legacy business-result-only metadata descriptor here:
|
|
18
|
+
// tools/call returns an async run envelope, not the eventual result object.
|
|
19
|
+
definition: Object.freeze({
|
|
20
|
+
name: entry.manifest.name, description: entry.manifest.description,
|
|
21
|
+
inputSchema: entry.manifest.inputSchema, outputSchema: FLOW_TOOL_RUN_SCHEMA,
|
|
22
|
+
}),
|
|
23
|
+
async call(input, operation) {
|
|
24
|
+
const run = await invoke(input, operation);
|
|
25
|
+
return {
|
|
26
|
+
structuredContent: Object.freeze({ ...run }),
|
|
27
|
+
content: [{ type: 'text', text: canonicalize(run) }],
|
|
28
|
+
};
|
|
29
|
+
},
|
|
30
|
+
}),
|
|
31
|
+
// Relay action registration can use this schema/handler. An action dispatch
|
|
32
|
+
// acknowledgment is not this return value and must never become completion.
|
|
33
|
+
action: Object.freeze({
|
|
34
|
+
definition: Object.freeze({
|
|
35
|
+
name: entry.manifest.name, description: entry.manifest.description,
|
|
36
|
+
inputSchema: entry.manifest.inputSchema, outputSchema: FLOW_TOOL_RUN_SCHEMA,
|
|
37
|
+
}),
|
|
38
|
+
invoke,
|
|
39
|
+
}),
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=flow-tool-adapters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-adapters.js","sourceRoot":"","sources":["../src/flow-tool-adapters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAA+B,MAAM,yBAAyB,CAAC;AAC5F,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAsB,EAAE,QAAgC;IAC7F,MAAM,KAAK,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,MAAM,GAAG,CAAC,KAAc,EAAE,SAAoC,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC;IAChH,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,0BAA0B,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC/F,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC;YACjB,yEAAyE;YACzE,4EAA4E;YAC5E,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;gBACxB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW;gBAClE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,oBAAoB;aAC5E,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,KAAc,EAAE,SAAoC;gBAC7D,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;gBAC3C,OAAO;oBACL,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC;oBAC5C,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC;iBAC9D,CAAC;YACJ,CAAC;SACF,CAAC;QACF,4EAA4E;QAC5E,4EAA4E;QAC5E,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;YACpB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC;gBACxB,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW;gBAClE,WAAW,EAAE,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,oBAAoB;aAC5E,CAAC;YACF,MAAM;SACP,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type FlowToolCatalogEntryV1, type FlowToolRunV1, type FlowToolEventV1 } from './flow-tool-contract.js';
|
|
2
|
+
export interface FlowToolRequest {
|
|
3
|
+
readonly method: 'GET' | 'POST';
|
|
4
|
+
readonly path: string;
|
|
5
|
+
readonly body?: unknown;
|
|
6
|
+
readonly idempotencyKey?: string;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Authenticated control-plane boundary. Implementations must authorize every
|
|
10
|
+
* operation and durably admit/deduplicate runs; the client owns no run ledger.
|
|
11
|
+
* A test transport is not a hosted implementation. No source-submission fallback.
|
|
12
|
+
*/
|
|
13
|
+
export interface FlowToolTransport {
|
|
14
|
+
request(request: FlowToolRequest): Promise<unknown>;
|
|
15
|
+
events(path: string, after: number): AsyncIterable<unknown>;
|
|
16
|
+
}
|
|
17
|
+
export interface FlowToolInvocationOptions {
|
|
18
|
+
/** Host-owned operation identity; preserve across reconnect/retry, never generate per retry. */
|
|
19
|
+
readonly idempotencyKey: string;
|
|
20
|
+
readonly mode?: 'async' | 'sync';
|
|
21
|
+
/** Server-side observation bound only, not an execution timeout or cancellation. */
|
|
22
|
+
readonly waitMs?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare function flowToolOperationKey(value: unknown): asserts value is string;
|
|
25
|
+
export declare class FlowToolClient {
|
|
26
|
+
private readonly transport;
|
|
27
|
+
constructor(transport: FlowToolTransport);
|
|
28
|
+
discover(): Promise<import("./flow-tool-contract.js").FlowToolCatalogV1>;
|
|
29
|
+
invoke(selected: FlowToolCatalogEntryV1, input: unknown, options: FlowToolInvocationOptions): Promise<FlowToolRunV1>;
|
|
30
|
+
status(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1): Promise<FlowToolRunV1>;
|
|
31
|
+
events(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1, after?: number): AsyncIterable<FlowToolEventV1>;
|
|
32
|
+
evidence(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1): Promise<import("./flow-tool-contract.js").FlowToolEvidenceV1>;
|
|
33
|
+
cancel(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1, key: string): Promise<FlowToolRunV1>;
|
|
34
|
+
resume(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1, key: string): Promise<FlowToolRunV1>;
|
|
35
|
+
answer(selected: FlowToolCatalogEntryV1, receipt: FlowToolRunV1, waitId: string, approved: boolean, key: string): Promise<FlowToolRunV1>;
|
|
36
|
+
private command;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=flow-tool-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-client.d.ts","sourceRoot":"","sources":["../src/flow-tool-client.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,sBAAsB,EAAE,KAAK,aAAa,EAAE,KAAK,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAG/H,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC;AACD;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;CAC7D;AACD,MAAM,WAAW,yBAAyB;IACxC,gGAAgG;IAChG,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IACjC,oFAAoF;IACpF,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AACD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAE5E;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,SAAS;gBAAT,SAAS,EAAE,iBAAiB;IAEnD,QAAQ;IAIR,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,aAAa,CAAC;IAwBpH,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAKvF,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,EAAE,KAAK,SAAI,GAAG,aAAa,CAAC,eAAe,CAAC;IAY5G,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa;IAcvE,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;IAG5E,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM;IAG5E,MAAM,CAAC,QAAQ,EAAE,sBAAsB,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM;YAMjG,OAAO;CAOtB"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { canonicalize } from './canonical.js';
|
|
2
|
+
import { snapshotJsonValue } from './json-value.js';
|
|
3
|
+
import { FLOW_TOOL_LIMITS } from './flow-tool-schema.js';
|
|
4
|
+
import { validateFlowToolInput } from './flow-tool-manifest.js';
|
|
5
|
+
import { FlowToolError } from './flow-tool-contract.js';
|
|
6
|
+
import { parseFlowToolCatalog, parseFlowToolEntry, parseFlowToolRun, parseFlowToolEvent, parseFlowToolEvidence, flowToolInputDigest, toolId } from './flow-tool-wire.js';
|
|
7
|
+
export function flowToolOperationKey(value) {
|
|
8
|
+
if (typeof value !== 'string' || !/^[A-Za-z0-9_-][A-Za-z0-9_.:-]{0,127}$/.test(value))
|
|
9
|
+
throw new FlowToolError('invalid_contract');
|
|
10
|
+
}
|
|
11
|
+
export class FlowToolClient {
|
|
12
|
+
transport;
|
|
13
|
+
constructor(transport) {
|
|
14
|
+
this.transport = transport;
|
|
15
|
+
}
|
|
16
|
+
async discover() {
|
|
17
|
+
return parseFlowToolCatalog(await this.transport.request({ method: 'GET', path: '/api/v1/flow-tools' }));
|
|
18
|
+
}
|
|
19
|
+
async invoke(selected, input, options) {
|
|
20
|
+
const entry = parseFlowToolEntry(selected);
|
|
21
|
+
// Schema validation precedes ALL transport calls, including credential access.
|
|
22
|
+
let validated;
|
|
23
|
+
try {
|
|
24
|
+
validated = validateFlowToolInput(entry.manifest, input);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
throw new FlowToolError('invalid_contract');
|
|
28
|
+
}
|
|
29
|
+
flowToolOperationKey(options.idempotencyKey);
|
|
30
|
+
const mode = options.mode ?? 'async';
|
|
31
|
+
const waitMs = options.waitMs ?? 0;
|
|
32
|
+
if (!['async', 'sync'].includes(mode) || !Number.isSafeInteger(waitMs) || waitMs < 0 || waitMs > 25_000
|
|
33
|
+
|| (mode === 'async' && waitMs !== 0))
|
|
34
|
+
throw new FlowToolError('invalid_contract');
|
|
35
|
+
const inputDigest = flowToolInputDigest(validated);
|
|
36
|
+
const body = {
|
|
37
|
+
api_version: 1, flow: `${entry.manifest.flow.name}@${entry.manifest.flow.digest}`,
|
|
38
|
+
deployment_id: entry.deployment_id, manifest_digest: entry.manifest.digest,
|
|
39
|
+
input: validated, input_digest: inputDigest, mode, wait_ms: waitMs,
|
|
40
|
+
};
|
|
41
|
+
const run = parseFlowToolRun(await this.transport.request({
|
|
42
|
+
method: 'POST', path: `/api/v1/flow-tools/${entry.manifest.name}/invoke`, body, idempotencyKey: options.idempotencyKey,
|
|
43
|
+
}), entry);
|
|
44
|
+
if (run.input_digest !== inputDigest)
|
|
45
|
+
throw new FlowToolError('invalid_contract');
|
|
46
|
+
return run;
|
|
47
|
+
}
|
|
48
|
+
async status(selected, receipt) {
|
|
49
|
+
const entry = parseFlowToolEntry(selected), run = parseFlowToolRun(receipt, entry);
|
|
50
|
+
return parseFlowToolRun(await this.transport.request({ method: 'GET', path: run.status_url }), entry, run);
|
|
51
|
+
}
|
|
52
|
+
async *events(selected, receipt, after = 0) {
|
|
53
|
+
const run = parseFlowToolRun(receipt, parseFlowToolEntry(selected));
|
|
54
|
+
if (!Number.isSafeInteger(after) || after < 0)
|
|
55
|
+
throw new FlowToolError('invalid_contract');
|
|
56
|
+
let cursor = after;
|
|
57
|
+
for await (const raw of this.transport.events(run.events_url, after)) {
|
|
58
|
+
const event = parseFlowToolEvent(raw, run, cursor);
|
|
59
|
+
cursor = event.sequence;
|
|
60
|
+
yield event;
|
|
61
|
+
if (event.type === 'run.terminal')
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
async evidence(selected, receipt) {
|
|
66
|
+
const run = parseFlowToolRun(receipt, parseFlowToolEntry(selected));
|
|
67
|
+
const response = await this.transport.request({ method: 'GET', path: run.evidence_url });
|
|
68
|
+
let raw;
|
|
69
|
+
try {
|
|
70
|
+
raw = snapshotJsonValue(response, 'flow tool evidence', FLOW_TOOL_LIMITS);
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
throw new FlowToolError('invalid_contract');
|
|
74
|
+
}
|
|
75
|
+
if (raw === null || typeof raw !== 'object' || Array.isArray(raw)
|
|
76
|
+
|| Object.keys(raw).sort().join(',') !== 'api_version,evidence,run_id'
|
|
77
|
+
|| raw.api_version !== 1 || raw.run_id !== run.run_id)
|
|
78
|
+
throw new FlowToolError('invalid_contract');
|
|
79
|
+
const evidence = parseFlowToolEvidence(raw.evidence, run.flow_digest);
|
|
80
|
+
if (run.terminal !== null && canonicalize(evidence) !== canonicalize(run.terminal.evidence))
|
|
81
|
+
throw new FlowToolError('invalid_contract');
|
|
82
|
+
return evidence;
|
|
83
|
+
}
|
|
84
|
+
cancel(selected, receipt, key) {
|
|
85
|
+
return this.command(selected, receipt, '/cancel', key, { api_version: 1 });
|
|
86
|
+
}
|
|
87
|
+
resume(selected, receipt, key) {
|
|
88
|
+
return this.command(selected, receipt, '/resume', key, { api_version: 1 });
|
|
89
|
+
}
|
|
90
|
+
answer(selected, receipt, waitId, approved, key) {
|
|
91
|
+
toolId(waitId);
|
|
92
|
+
if (typeof approved !== 'boolean')
|
|
93
|
+
throw new FlowToolError('invalid_contract');
|
|
94
|
+
// No answered_by claim: the server derives/audits the authenticated human actor.
|
|
95
|
+
return this.command(selected, receipt, `/human/${waitId}/answer`, key, { api_version: 1, input: { approved } });
|
|
96
|
+
}
|
|
97
|
+
async command(selected, receipt, suffix, key, body) {
|
|
98
|
+
const entry = parseFlowToolEntry(selected), run = parseFlowToolRun(receipt, entry);
|
|
99
|
+
flowToolOperationKey(key);
|
|
100
|
+
return parseFlowToolRun(await this.transport.request({
|
|
101
|
+
method: 'POST', path: `${run.status_url}${suffix}`, idempotencyKey: key, body,
|
|
102
|
+
}), entry, run);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=flow-tool-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-client.js","sourceRoot":"","sources":["../src/flow-tool-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import type { FlowToolDigest, FlowToolManifestV1 } from './flow-tool-manifest.js';
|
|
2
|
+
import type { FlowToolJson, FlowToolObjectSchema } from './flow-tool-schema.js';
|
|
3
|
+
import type { Spend } from './run-state.js';
|
|
4
|
+
export declare const FLOW_TOOL_API_VERSION: 1;
|
|
5
|
+
export declare const FLOW_TOOL_TERMINAL_REASONS: readonly ["success", "gate_failed", "model_failed", "agent_failed", "budget_exceeded", "human_rejected", "human_timeout", "canceled", "execution_failed"];
|
|
6
|
+
export type FlowToolTerminalReason = typeof FLOW_TOOL_TERMINAL_REASONS[number];
|
|
7
|
+
export type FlowToolRunState = 'accepted' | 'running' | 'parked' | 'cancelling' | 'completed' | 'failed' | 'cancelled';
|
|
8
|
+
/** Operator-owned, server-authorized read-only revision; never generated from run input. */
|
|
9
|
+
export interface FlowToolCatalogEntryV1 {
|
|
10
|
+
readonly manifest: FlowToolManifestV1;
|
|
11
|
+
readonly deployment_id: string;
|
|
12
|
+
readonly read_only: true;
|
|
13
|
+
readonly effects: readonly string[];
|
|
14
|
+
readonly requires_human: readonly string[];
|
|
15
|
+
readonly business_verdicts: readonly string[];
|
|
16
|
+
readonly budget: Readonly<{
|
|
17
|
+
max_tokens: number;
|
|
18
|
+
max_dollars: string | null;
|
|
19
|
+
max_wallclock_ms: number;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface FlowToolCatalogV1 {
|
|
23
|
+
readonly api_version: 1;
|
|
24
|
+
readonly tools: readonly FlowToolCatalogEntryV1[];
|
|
25
|
+
}
|
|
26
|
+
export interface FlowToolEvidenceV1 {
|
|
27
|
+
readonly journal_digest: FlowToolDigest;
|
|
28
|
+
readonly flow_digest: FlowToolDigest;
|
|
29
|
+
readonly artifacts: readonly Readonly<{
|
|
30
|
+
name: string;
|
|
31
|
+
ref: string;
|
|
32
|
+
media_type: string;
|
|
33
|
+
}>[];
|
|
34
|
+
readonly redacted_transcript_refs: readonly string[];
|
|
35
|
+
}
|
|
36
|
+
export interface FlowToolTerminalV1 {
|
|
37
|
+
readonly terminal_reason: FlowToolTerminalReason;
|
|
38
|
+
readonly business_verdict: string | null;
|
|
39
|
+
readonly result: Readonly<Record<string, FlowToolJson>> | null;
|
|
40
|
+
readonly gates: readonly Readonly<{
|
|
41
|
+
name: string;
|
|
42
|
+
status: 'pass' | 'fail' | 'skipped';
|
|
43
|
+
evidence_ref: string;
|
|
44
|
+
}>[];
|
|
45
|
+
readonly evidence: FlowToolEvidenceV1;
|
|
46
|
+
readonly spend: Readonly<Spend>;
|
|
47
|
+
}
|
|
48
|
+
/** Accepted is durable admission, never successful execution; terminal is null until finished. */
|
|
49
|
+
export interface FlowToolRunV1 {
|
|
50
|
+
readonly api_version: 1;
|
|
51
|
+
readonly accepted: true;
|
|
52
|
+
readonly run_id: string;
|
|
53
|
+
readonly tool_name: string;
|
|
54
|
+
readonly deployment_id: string;
|
|
55
|
+
readonly manifest_digest: FlowToolDigest;
|
|
56
|
+
readonly flow_digest: FlowToolDigest;
|
|
57
|
+
readonly input_digest: FlowToolDigest;
|
|
58
|
+
readonly state: FlowToolRunState;
|
|
59
|
+
readonly sequence: number;
|
|
60
|
+
readonly status_url: string;
|
|
61
|
+
readonly events_url: string;
|
|
62
|
+
readonly evidence_url: string;
|
|
63
|
+
readonly cancel_url: string;
|
|
64
|
+
readonly resume_url: string;
|
|
65
|
+
readonly terminal: FlowToolTerminalV1 | null;
|
|
66
|
+
}
|
|
67
|
+
export interface FlowToolEventV1 {
|
|
68
|
+
readonly api_version: 1;
|
|
69
|
+
readonly run_id: string;
|
|
70
|
+
readonly flow_digest: FlowToolDigest;
|
|
71
|
+
readonly sequence: number;
|
|
72
|
+
readonly type: 'run.accepted' | 'run.state_changed' | 'step.completed' | 'human.required' | 'run.terminal';
|
|
73
|
+
readonly state: FlowToolRunState;
|
|
74
|
+
readonly step_id?: string;
|
|
75
|
+
readonly wait_id?: string;
|
|
76
|
+
readonly terminal_reason?: FlowToolTerminalReason;
|
|
77
|
+
}
|
|
78
|
+
export interface FlowToolInvokeRequestV1 {
|
|
79
|
+
readonly api_version: 1;
|
|
80
|
+
readonly flow: string;
|
|
81
|
+
readonly deployment_id: string;
|
|
82
|
+
readonly manifest_digest: FlowToolDigest;
|
|
83
|
+
readonly input: Readonly<Record<string, FlowToolJson>>;
|
|
84
|
+
/** Assertion only: admission MUST recompute this from schema-validated canonical input. */
|
|
85
|
+
readonly input_digest: FlowToolDigest;
|
|
86
|
+
readonly mode: 'async' | 'sync';
|
|
87
|
+
readonly wait_ms: number;
|
|
88
|
+
}
|
|
89
|
+
export type FlowToolFailureCode = 'invalid_contract' | 'not_authorized' | 'not_found' | 'idempotency_conflict' | 'unsupported' | 'unavailable' | 'transport_error';
|
|
90
|
+
export declare class FlowToolError extends Error {
|
|
91
|
+
readonly code: FlowToolFailureCode;
|
|
92
|
+
constructor(code: FlowToolFailureCode);
|
|
93
|
+
}
|
|
94
|
+
export declare const FLOW_TOOL_EVIDENCE_SCHEMA: FlowToolObjectSchema;
|
|
95
|
+
/** Async adapters return this envelope, NOT the flow's eventual business-result schema. */
|
|
96
|
+
export declare const FLOW_TOOL_RUN_SCHEMA: FlowToolObjectSchema;
|
|
97
|
+
export declare const FLOW_TOOL_CATALOG_SCHEMA: FlowToolObjectSchema;
|
|
98
|
+
export declare const FLOW_TOOL_EVENT_SCHEMA: FlowToolObjectSchema;
|
|
99
|
+
export declare const FLOW_TOOL_INVOKE_SCHEMA: FlowToolObjectSchema;
|
|
100
|
+
export declare const FLOW_TOOL_COMMAND_SCHEMA: FlowToolObjectSchema;
|
|
101
|
+
export declare const FLOW_TOOL_ANSWER_SCHEMA: FlowToolObjectSchema;
|
|
102
|
+
export declare const FLOW_TOOL_ERROR_SCHEMA: FlowToolObjectSchema;
|
|
103
|
+
//# sourceMappingURL=flow-tool-contract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-contract.d.ts","sourceRoot":"","sources":["../src/flow-tool-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { snapshotJsonValue } from './json-value.js';
|
|
2
|
+
import { FLOW_TOOL_LIMITS } from './flow-tool-schema.js';
|
|
3
|
+
export const FLOW_TOOL_API_VERSION = 1;
|
|
4
|
+
export const FLOW_TOOL_TERMINAL_REASONS = [
|
|
5
|
+
'success', 'gate_failed', 'model_failed', 'agent_failed', 'budget_exceeded',
|
|
6
|
+
'human_rejected', 'human_timeout', 'canceled', 'execution_failed',
|
|
7
|
+
];
|
|
8
|
+
export class FlowToolError extends Error {
|
|
9
|
+
code;
|
|
10
|
+
constructor(code) {
|
|
11
|
+
// Never interpolate remote bodies, model input, bearer tokens or transport errors.
|
|
12
|
+
super(`Flow Tool ${code}${code === 'transport_error' ? ': admission or command outcome may be unknown; observation failure does not cancel a run' : ''}`);
|
|
13
|
+
this.code = code;
|
|
14
|
+
this.name = 'FlowToolError';
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
const text = { type: 'string', minLength: 1, maxLength: 128 };
|
|
18
|
+
const digest = { type: 'string', minLength: 71, maxLength: 71 };
|
|
19
|
+
const integer = { type: 'integer', minimum: 0, maximum: Number.MAX_SAFE_INTEGER };
|
|
20
|
+
const positive = { ...integer, minimum: 1 };
|
|
21
|
+
const strings = { type: 'array', items: text, maxItems: 64, uniqueItems: true };
|
|
22
|
+
const state = { enum: ['accepted', 'running', 'parked', 'cancelling', 'completed', 'failed', 'cancelled'] };
|
|
23
|
+
function object(properties, required = Object.keys(properties)) {
|
|
24
|
+
return snapshotJsonValue({ type: 'object', properties, required, additionalProperties: false }, 'flow tool protocol schema', FLOW_TOOL_LIMITS);
|
|
25
|
+
}
|
|
26
|
+
export const FLOW_TOOL_EVIDENCE_SCHEMA = object({
|
|
27
|
+
journal_digest: digest, flow_digest: digest,
|
|
28
|
+
artifacts: { type: 'array', maxItems: 128, items: object({ name: text, ref: text, media_type: text }) },
|
|
29
|
+
redacted_transcript_refs: strings,
|
|
30
|
+
});
|
|
31
|
+
const terminal = object({
|
|
32
|
+
terminal_reason: { enum: FLOW_TOOL_TERMINAL_REASONS },
|
|
33
|
+
business_verdict: { type: ['string', 'null'], minLength: 1, maxLength: 128 },
|
|
34
|
+
result: { type: ['object', 'null'] },
|
|
35
|
+
gates: { type: 'array', maxItems: 128, items: object({ name: text, status: { enum: ['pass', 'fail', 'skipped'] }, evidence_ref: text }) },
|
|
36
|
+
evidence: FLOW_TOOL_EVIDENCE_SCHEMA,
|
|
37
|
+
spend: object({ tokens_in: integer, tokens_out: integer, dollars: text, dollars_unmetered: { type: 'boolean' } }),
|
|
38
|
+
});
|
|
39
|
+
/** Async adapters return this envelope, NOT the flow's eventual business-result schema. */
|
|
40
|
+
export const FLOW_TOOL_RUN_SCHEMA = object({
|
|
41
|
+
api_version: { const: 1 }, accepted: { const: true }, run_id: text, tool_name: text,
|
|
42
|
+
deployment_id: text, manifest_digest: digest, flow_digest: digest, input_digest: digest,
|
|
43
|
+
state, sequence: integer,
|
|
44
|
+
status_url: { type: 'string' }, events_url: { type: 'string' }, evidence_url: { type: 'string' },
|
|
45
|
+
cancel_url: { type: 'string' }, resume_url: { type: 'string' },
|
|
46
|
+
terminal: { anyOf: [{ type: 'null' }, terminal] },
|
|
47
|
+
});
|
|
48
|
+
export const FLOW_TOOL_CATALOG_SCHEMA = object({
|
|
49
|
+
api_version: { const: 1 },
|
|
50
|
+
tools: { type: 'array', maxItems: 64, items: object({
|
|
51
|
+
manifest: { type: 'object' }, deployment_id: text, read_only: { const: true },
|
|
52
|
+
effects: strings, requires_human: strings,
|
|
53
|
+
business_verdicts: { ...strings, minItems: 1 },
|
|
54
|
+
budget: object({ max_tokens: positive, max_dollars: { type: ['string', 'null'] }, max_wallclock_ms: positive }),
|
|
55
|
+
}) },
|
|
56
|
+
});
|
|
57
|
+
export const FLOW_TOOL_EVENT_SCHEMA = object({
|
|
58
|
+
api_version: { const: 1 }, run_id: text, flow_digest: digest, sequence: positive,
|
|
59
|
+
type: { enum: ['run.accepted', 'run.state_changed', 'step.completed', 'human.required', 'run.terminal'] },
|
|
60
|
+
state, step_id: text, wait_id: text, terminal_reason: { enum: FLOW_TOOL_TERMINAL_REASONS },
|
|
61
|
+
}, ['api_version', 'run_id', 'flow_digest', 'sequence', 'type', 'state']);
|
|
62
|
+
export const FLOW_TOOL_INVOKE_SCHEMA = object({
|
|
63
|
+
api_version: { const: 1 }, flow: { type: 'string', minLength: 73, maxLength: 200 },
|
|
64
|
+
deployment_id: text, manifest_digest: digest, input_digest: digest,
|
|
65
|
+
input: { type: 'object' }, mode: { enum: ['async', 'sync'] },
|
|
66
|
+
wait_ms: { type: 'integer', minimum: 0, maximum: 25000 },
|
|
67
|
+
});
|
|
68
|
+
export const FLOW_TOOL_COMMAND_SCHEMA = object({ api_version: { const: 1 } });
|
|
69
|
+
export const FLOW_TOOL_ANSWER_SCHEMA = object({
|
|
70
|
+
api_version: { const: 1 }, input: object({ approved: { type: 'boolean' } }),
|
|
71
|
+
});
|
|
72
|
+
export const FLOW_TOOL_ERROR_SCHEMA = object({
|
|
73
|
+
api_version: { const: 1 }, code: { enum: ['invalid_contract', 'not_authorized', 'not_found', 'idempotency_conflict', 'unsupported', 'unavailable'] },
|
|
74
|
+
});
|
|
75
|
+
//# sourceMappingURL=flow-tool-contract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-contract.js","sourceRoot":"","sources":["../src/flow-tool-contract.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type FlowToolManifestV1 } from './flow-tool-manifest.js';
|
|
2
|
+
import type { FlowToolObjectSchema } from './flow-tool-schema.js';
|
|
3
|
+
export interface FlowToolFunctionDefinition {
|
|
4
|
+
readonly type: 'function';
|
|
5
|
+
readonly name: string;
|
|
6
|
+
readonly description: string;
|
|
7
|
+
readonly parameters: FlowToolObjectSchema;
|
|
8
|
+
}
|
|
9
|
+
export interface FlowToolMcpDefinition {
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly description: string;
|
|
12
|
+
readonly inputSchema: FlowToolObjectSchema;
|
|
13
|
+
readonly outputSchema: FlowToolObjectSchema;
|
|
14
|
+
}
|
|
15
|
+
/** Plain function-call descriptor. Provider-specific strict-mode translation is not implied. */
|
|
16
|
+
export declare function flowToolFunctionDefinition(value: FlowToolManifestV1): FlowToolFunctionDefinition;
|
|
17
|
+
/** MCP tools/list metadata only: no server, call handler, authority, or idempotency claim. */
|
|
18
|
+
export declare function flowToolMcpDefinition(value: FlowToolManifestV1): FlowToolMcpDefinition;
|
|
19
|
+
//# sourceMappingURL=flow-tool-definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-definitions.d.ts","sourceRoot":"","sources":["../src/flow-tool-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACzF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC;CAC3C;AACD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,oBAAoB,CAAC;IAC3C,QAAQ,CAAC,YAAY,EAAE,oBAAoB,CAAC;CAC7C;AAED,gGAAgG;AAChG,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,kBAAkB,GAAG,0BAA0B,CAGhG;AAED,8FAA8F;AAC9F,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,qBAAqB,CAGtF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { parseFlowToolManifest } from './flow-tool-manifest.js';
|
|
2
|
+
/** Plain function-call descriptor. Provider-specific strict-mode translation is not implied. */
|
|
3
|
+
export function flowToolFunctionDefinition(value) {
|
|
4
|
+
const manifest = parseFlowToolManifest(value);
|
|
5
|
+
return Object.freeze({ type: 'function', name: manifest.name, description: manifest.description, parameters: manifest.inputSchema });
|
|
6
|
+
}
|
|
7
|
+
/** MCP tools/list metadata only: no server, call handler, authority, or idempotency claim. */
|
|
8
|
+
export function flowToolMcpDefinition(value) {
|
|
9
|
+
const manifest = parseFlowToolManifest(value);
|
|
10
|
+
return Object.freeze({ name: manifest.name, description: manifest.description, inputSchema: manifest.inputSchema, outputSchema: manifest.resultSchema });
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=flow-tool-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-definitions.js","sourceRoot":"","sources":["../src/flow-tool-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAA2B,MAAM,yBAAyB,CAAC;AAgBzF,gGAAgG;AAChG,MAAM,UAAU,0BAA0B,CAAC,KAAyB;IAClE,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AACvI,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,qBAAqB,CAAC,KAAyB;IAC7D,MAAM,QAAQ,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC;AAC3J,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type FlowToolTransport } from './flow-tool-client.js';
|
|
2
|
+
export interface FlowToolHttpOptions {
|
|
3
|
+
/** Explicit trusted HTTPS API origin/base path. No implicit production endpoint. */
|
|
4
|
+
readonly apiUrl: string;
|
|
5
|
+
/** Dedicated scoped bearer; never included in definitions, bodies, errors or persisted state. */
|
|
6
|
+
readonly token: string;
|
|
7
|
+
readonly requestTimeoutMs?: number;
|
|
8
|
+
readonly signal?: AbortSignal;
|
|
9
|
+
/** Test/integration seam; the default is the standard fetch implementation. */
|
|
10
|
+
readonly fetch?: typeof fetch;
|
|
11
|
+
}
|
|
12
|
+
/** No automatic retry; the owner can repeat the same operation key after an ambiguous failure. */
|
|
13
|
+
export declare function createFlowToolHttpTransport(options: FlowToolHttpOptions): FlowToolTransport;
|
|
14
|
+
//# sourceMappingURL=flow-tool-http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flow-tool-http.d.ts","sourceRoot":"","sources":["../src/flow-tool-http.ts"],"names":[],"mappings":"AAGA,OAAO,EAA8C,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG3G,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iGAAiG;IACjG,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CAC/B;AA+BD,kGAAkG;AAClG,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,iBAAiB,CA+D3F"}
|