@once-agent/sdk 0.1.5 → 0.1.7
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 +20 -20
- package/README.md +5 -0
- package/dist/benchmark.d.ts +40 -0
- package/dist/benchmark.d.ts.map +1 -0
- package/dist/benchmark.js +169 -0
- package/dist/benchmark.js.map +1 -0
- package/dist/cli.js +39 -9
- package/dist/cli.js.map +1 -1
- package/dist/connect/binding.d.ts +17 -0
- package/dist/connect/binding.d.ts.map +1 -0
- package/dist/connect/binding.js +91 -0
- package/dist/connect/binding.js.map +1 -0
- package/dist/connect/classifier.d.ts +18 -0
- package/dist/connect/classifier.d.ts.map +1 -0
- package/dist/connect/classifier.js +49 -0
- package/dist/connect/classifier.js.map +1 -0
- package/dist/connect/execute.d.ts +30 -0
- package/dist/connect/execute.d.ts.map +1 -0
- package/dist/connect/execute.js +47 -0
- package/dist/connect/execute.js.map +1 -0
- package/dist/connect/kernel.d.ts +33 -0
- package/dist/connect/kernel.d.ts.map +1 -0
- package/dist/connect/kernel.js +46 -0
- package/dist/connect/kernel.js.map +1 -0
- package/dist/connect/openai-agents.d.ts +31 -0
- package/dist/connect/openai-agents.d.ts.map +1 -0
- package/dist/connect/openai-agents.js +42 -0
- package/dist/connect/openai-agents.js.map +1 -0
- package/dist/dataset-cli.d.ts +3 -0
- package/dist/dataset-cli.d.ts.map +1 -0
- package/dist/dataset-cli.js +49 -0
- package/dist/dataset-cli.js.map +1 -0
- package/dist/dataset-progress.d.ts +16 -0
- package/dist/dataset-progress.d.ts.map +1 -0
- package/dist/dataset-progress.js +130 -0
- package/dist/dataset-progress.js.map +1 -0
- package/dist/dataset.d.ts +35 -0
- package/dist/dataset.d.ts.map +1 -0
- package/dist/dataset.js +133 -0
- package/dist/dataset.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +15 -1
- package/dist/index.js.map +1 -1
- package/dist/local.d.ts +37 -0
- package/dist/local.d.ts.map +1 -0
- package/dist/local.js +269 -0
- package/dist/local.js.map +1 -0
- package/dist/runtime/fetch-interceptor.d.ts +8 -0
- package/dist/runtime/fetch-interceptor.d.ts.map +1 -1
- package/dist/runtime/fetch-interceptor.js +5 -0
- package/dist/runtime/fetch-interceptor.js.map +1 -1
- package/dist/setup.d.ts.map +1 -1
- package/dist/setup.js +25 -25
- package/dist/setup.js.map +1 -1
- package/dist/trace.d.ts +13 -0
- package/dist/trace.d.ts.map +1 -0
- package/dist/trace.js +60 -0
- package/dist/trace.js.map +1 -0
- package/dist-cjs/connect/binding.js +99 -0
- package/dist-cjs/connect/binding.js.map +1 -0
- package/dist-cjs/connect/classifier.js +53 -0
- package/dist-cjs/connect/classifier.js.map +1 -0
- package/dist-cjs/connect/execute.js +52 -0
- package/dist-cjs/connect/execute.js.map +1 -0
- package/dist-cjs/connect/kernel.js +51 -0
- package/dist-cjs/connect/kernel.js.map +1 -0
- package/dist-cjs/connect/openai-agents.js +47 -0
- package/dist-cjs/connect/openai-agents.js.map +1 -0
- package/dist-cjs/index.js +31 -2
- package/dist-cjs/index.js.map +1 -1
- package/dist-cjs/local.js +310 -0
- package/dist-cjs/local.js.map +1 -0
- package/dist-cjs/runtime/fetch-interceptor.js +5 -0
- package/dist-cjs/runtime/fetch-interceptor.js.map +1 -1
- package/package.json +93 -70
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { CONNECT_DECISION, classifyConnectOperation, } from "./classifier.js";
|
|
2
|
+
import { bindConnectOperation, } from "./binding.js";
|
|
3
|
+
export class ConnectExecutionError extends Error {
|
|
4
|
+
code;
|
|
5
|
+
constructor(message, code) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = "ConnectExecutionError";
|
|
8
|
+
this.code = code;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Framework-neutral Connect orchestration boundary.
|
|
13
|
+
*
|
|
14
|
+
* Connect decides whether the proposed tool call requires
|
|
15
|
+
* Once protection. It does not implement execution safety.
|
|
16
|
+
*
|
|
17
|
+
* Protected execution is delegated to the existing Once
|
|
18
|
+
* runtime/kernel supplied by the caller.
|
|
19
|
+
*/
|
|
20
|
+
export async function executeConnectOperation({ safety, operationId, payload, bypass, protect, }) {
|
|
21
|
+
const classification = classifyConnectOperation(safety);
|
|
22
|
+
if (classification.decision ===
|
|
23
|
+
CONNECT_DECISION.REJECT) {
|
|
24
|
+
throw new ConnectExecutionError("Once Connect rejected an incomplete or invalid safety declaration.", "CONNECT_REJECTED");
|
|
25
|
+
}
|
|
26
|
+
if (classification.decision ===
|
|
27
|
+
CONNECT_DECISION.BYPASS) {
|
|
28
|
+
if (typeof bypass !== "function") {
|
|
29
|
+
throw new ConnectExecutionError("Once Connect bypass execution is unavailable.", "BYPASS_HANDLER_MISSING");
|
|
30
|
+
}
|
|
31
|
+
return await bypass();
|
|
32
|
+
}
|
|
33
|
+
const binding = bindConnectOperation({
|
|
34
|
+
operationId,
|
|
35
|
+
payload,
|
|
36
|
+
});
|
|
37
|
+
if (typeof protect !== "function") {
|
|
38
|
+
throw new ConnectExecutionError("Once Connect protected execution is unavailable.", "PROTECT_HANDLER_MISSING");
|
|
39
|
+
}
|
|
40
|
+
return await protect({
|
|
41
|
+
operationId: binding.operationId,
|
|
42
|
+
payload,
|
|
43
|
+
payloadFingerprint: binding.payloadFingerprint,
|
|
44
|
+
classification,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=execute.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"execute.js","sourceRoot":"","sources":["../../src/connect/execute.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,wBAAwB,GACzB,MAAM,iBAAiB,CAAC;AAOzB,OAAO,EACL,oBAAoB,GACrB,MAAM,cAAc,CAAC;AAuBtB,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,IAAY;QAEZ,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;QACpC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAc,EACzD,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,GACkB;IACzB,MAAM,cAAc,GAClB,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAEnC,IACE,cAAc,CAAC,QAAQ;QACvB,gBAAgB,CAAC,MAAM,EACvB,CAAC;QACD,MAAM,IAAI,qBAAqB,CAC7B,oEAAoE,EACpE,kBAAkB,CACnB,CAAC;IACJ,CAAC;IAED,IACE,cAAc,CAAC,QAAQ;QACvB,gBAAgB,CAAC,MAAM,EACvB,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,qBAAqB,CAC7B,+CAA+C,EAC/C,wBAAwB,CACzB,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,MAAM,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,OAAO,GACX,oBAAoB,CAAC;QACnB,WAAW;QACX,OAAO;KACR,CAAC,CAAC;IAEL,IAAI,OAAO,OAAO,KAAK,UAAU,EAAE,CAAC;QAClC,MAAM,IAAI,qBAAqB,CAC7B,kDAAkD,EAClD,yBAAyB,CAC1B,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,OAAO,CAAC;QACnB,WAAW,EACT,OAAO,CAAC,WAAW;QAErB,OAAO;QAEP,kBAAkB,EAChB,OAAO,CAAC,kBAAkB;QAE5B,cAAc;KACf,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ConnectExecutionError } from "./execute.js";
|
|
2
|
+
import type { ConnectSafetyDeclaration } from "./classifier.js";
|
|
3
|
+
import type { ConnectPayload } from "./binding.js";
|
|
4
|
+
interface OnceConnectClient {
|
|
5
|
+
execute(input: {
|
|
6
|
+
operationId: string;
|
|
7
|
+
provider: string;
|
|
8
|
+
action: Record<string, unknown>;
|
|
9
|
+
}): Promise<unknown>;
|
|
10
|
+
}
|
|
11
|
+
export interface ConnectKernelInput<T = unknown> {
|
|
12
|
+
once: OnceConnectClient | null | undefined;
|
|
13
|
+
provider: string;
|
|
14
|
+
safety: ConnectSafetyDeclaration;
|
|
15
|
+
operationId: string;
|
|
16
|
+
payload: ConnectPayload;
|
|
17
|
+
action: Record<string, unknown> | null;
|
|
18
|
+
bypass?: () => Promise<T> | T;
|
|
19
|
+
}
|
|
20
|
+
export declare class ConnectKernelError extends Error {
|
|
21
|
+
readonly code: string;
|
|
22
|
+
constructor(message: string, code: string);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Route a proposed tool operation through Connect and, when protection
|
|
26
|
+
* is required, through the existing authoritative Once.execute() kernel.
|
|
27
|
+
*
|
|
28
|
+
* This adapter deliberately contains no execution-state machine,
|
|
29
|
+
* replay logic, reconciliation logic, or truth semantics.
|
|
30
|
+
*/
|
|
31
|
+
export declare function executeConnectWithOnce<T = unknown>({ once, provider, safety, operationId, payload, action, bypass, }: ConnectKernelInput<T>): Promise<T | unknown>;
|
|
32
|
+
export { ConnectExecutionError, };
|
|
33
|
+
//# sourceMappingURL=kernel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.d.ts","sourceRoot":"","sources":["../../src/connect/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,qBAAqB,EACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,UAAU,iBAAiB;IACzB,OAAO,CAAC,KAAK,EAAE;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACjC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,OAAO;IAC7C,IAAI,EAAE,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CAC/B;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM;CAMf;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAAC,CAAC,GAAG,OAAO,EAAE,EACxD,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,MAAM,GACP,EAAE,kBAAkB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,CAkD9C;AAED,OAAO,EACL,qBAAqB,GACtB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { executeConnectOperation, ConnectExecutionError, } from "./execute.js";
|
|
2
|
+
export class ConnectKernelError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "ConnectKernelError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Route a proposed tool operation through Connect and, when protection
|
|
12
|
+
* is required, through the existing authoritative Once.execute() kernel.
|
|
13
|
+
*
|
|
14
|
+
* This adapter deliberately contains no execution-state machine,
|
|
15
|
+
* replay logic, reconciliation logic, or truth semantics.
|
|
16
|
+
*/
|
|
17
|
+
export async function executeConnectWithOnce({ once, provider, safety, operationId, payload, action, bypass, }) {
|
|
18
|
+
if (!once ||
|
|
19
|
+
typeof once.execute !== "function") {
|
|
20
|
+
throw new ConnectKernelError("Once Connect requires an existing Once client.", "ONCE_CLIENT_REQUIRED");
|
|
21
|
+
}
|
|
22
|
+
return executeConnectOperation({
|
|
23
|
+
safety,
|
|
24
|
+
operationId,
|
|
25
|
+
payload,
|
|
26
|
+
bypass,
|
|
27
|
+
protect: async (context) => {
|
|
28
|
+
if (typeof provider !== "string" ||
|
|
29
|
+
provider.trim() === "") {
|
|
30
|
+
throw new ConnectKernelError("Protected Connect execution requires a Once provider.", "PROVIDER_REQUIRED");
|
|
31
|
+
}
|
|
32
|
+
if (action === null ||
|
|
33
|
+
typeof action !== "object" ||
|
|
34
|
+
Array.isArray(action)) {
|
|
35
|
+
throw new ConnectKernelError("Protected Connect execution requires an action object.", "ACTION_REQUIRED");
|
|
36
|
+
}
|
|
37
|
+
return once.execute({
|
|
38
|
+
operationId: context.operationId,
|
|
39
|
+
provider,
|
|
40
|
+
action,
|
|
41
|
+
});
|
|
42
|
+
},
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
export { ConnectExecutionError, };
|
|
46
|
+
//# sourceMappingURL=kernel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kernel.js","sourceRoot":"","sources":["../../src/connect/kernel.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AA4BtB,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,IAAY;QAEZ,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAc,EACxD,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,MAAM,GACgB;IACtB,IACE,CAAC,IAAI;QACL,OAAO,IAAI,CAAC,OAAO,KAAK,UAAU,EAClC,CAAC;QACD,MAAM,IAAI,kBAAkB,CAC1B,gDAAgD,EAChD,sBAAsB,CACvB,CAAC;IACJ,CAAC;IAED,OAAO,uBAAuB,CAAc;QAC1C,MAAM;QACN,WAAW;QACX,OAAO;QAEP,MAAM;QAEN,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzB,IACE,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EACtB,CAAC;gBACD,MAAM,IAAI,kBAAkB,CAC1B,uDAAuD,EACvD,mBAAmB,CACpB,CAAC;YACJ,CAAC;YAED,IACE,MAAM,KAAK,IAAI;gBACf,OAAO,MAAM,KAAK,QAAQ;gBAC1B,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EACrB,CAAC;gBACD,MAAM,IAAI,kBAAkB,CAC1B,wDAAwD,EACxD,iBAAiB,CAClB,CAAC;YACJ,CAAC;YAED,OAAO,IAAI,CAAC,OAAO,CAAC;gBAClB,WAAW,EACT,OAAO,CAAC,WAAW;gBAErB,QAAQ;gBAER,MAAM;aACP,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EACL,qBAAqB,GACtB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { ConnectSafetyDeclaration } from "./classifier.js";
|
|
2
|
+
import type { Once } from "../index.js";
|
|
3
|
+
export type OpenAIAgentsToolInput = Record<string, unknown>;
|
|
4
|
+
export type OpenAIAgentsAction = Record<string, unknown>;
|
|
5
|
+
export interface OpenAIAgentsConnectToolInput {
|
|
6
|
+
once: Once;
|
|
7
|
+
provider: string;
|
|
8
|
+
safety: ConnectSafetyDeclaration;
|
|
9
|
+
operationId: string;
|
|
10
|
+
input: OpenAIAgentsToolInput;
|
|
11
|
+
action: OpenAIAgentsAction;
|
|
12
|
+
bypass?: () => unknown | Promise<unknown>;
|
|
13
|
+
}
|
|
14
|
+
export declare class OpenAIAgentsConnectError extends Error {
|
|
15
|
+
readonly code: string;
|
|
16
|
+
constructor(message: string, code: string);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Minimal OpenAI Agents -> Once Connect execution adapter.
|
|
20
|
+
*
|
|
21
|
+
* This adapter owns no execution-safety state machine.
|
|
22
|
+
* It validates the framework boundary and delegates to
|
|
23
|
+
* the existing Connect -> Once kernel.
|
|
24
|
+
*
|
|
25
|
+
* OpenAI tool-call IDs are intentionally not used as
|
|
26
|
+
* logical operation identity. The caller must provide a
|
|
27
|
+
* stable operationId representing the same real-world
|
|
28
|
+
* logical operation across retries.
|
|
29
|
+
*/
|
|
30
|
+
export declare function executeOpenAIAgentsConnectTool({ once, provider, safety, operationId, input, action, bypass, }: OpenAIAgentsConnectToolInput): Promise<unknown>;
|
|
31
|
+
//# sourceMappingURL=openai-agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agents.d.ts","sourceRoot":"","sources":["../../src/connect/openai-agents.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EACV,IAAI,EACL,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,qBAAqB,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1B,MAAM,MAAM,kBAAkB,GAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE1B,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM;CAMf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,8BAA8B,CAClD,EACE,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,MAAM,GACP,EAAE,4BAA4B,GAC9B,OAAO,CAAC,OAAO,CAAC,CA2BlB"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { executeConnectWithOnce, } from "./kernel.js";
|
|
2
|
+
export class OpenAIAgentsConnectError extends Error {
|
|
3
|
+
code;
|
|
4
|
+
constructor(message, code) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "OpenAIAgentsConnectError";
|
|
7
|
+
this.code = code;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Minimal OpenAI Agents -> Once Connect execution adapter.
|
|
12
|
+
*
|
|
13
|
+
* This adapter owns no execution-safety state machine.
|
|
14
|
+
* It validates the framework boundary and delegates to
|
|
15
|
+
* the existing Connect -> Once kernel.
|
|
16
|
+
*
|
|
17
|
+
* OpenAI tool-call IDs are intentionally not used as
|
|
18
|
+
* logical operation identity. The caller must provide a
|
|
19
|
+
* stable operationId representing the same real-world
|
|
20
|
+
* logical operation across retries.
|
|
21
|
+
*/
|
|
22
|
+
export async function executeOpenAIAgentsConnectTool({ once, provider, safety, operationId, input, action, bypass, }) {
|
|
23
|
+
if (input === null ||
|
|
24
|
+
typeof input !== "object" ||
|
|
25
|
+
Array.isArray(input)) {
|
|
26
|
+
throw new OpenAIAgentsConnectError("Once Connect requires parsed OpenAI Agents tool input.", "INVALID_OPENAI_TOOL_INPUT");
|
|
27
|
+
}
|
|
28
|
+
return await executeConnectWithOnce({
|
|
29
|
+
once,
|
|
30
|
+
provider,
|
|
31
|
+
safety,
|
|
32
|
+
operationId,
|
|
33
|
+
/*
|
|
34
|
+
* Parsed consequential tool input becomes the payload
|
|
35
|
+
* bound to the stable logical operation identity.
|
|
36
|
+
*/
|
|
37
|
+
payload: input,
|
|
38
|
+
action,
|
|
39
|
+
bypass,
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=openai-agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openai-agents.js","sourceRoot":"","sources":["../../src/connect/openai-agents.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,GACvB,MAAM,aAAa,CAAC;AA0BrB,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,CAAS;IAEtB,YACE,OAAe,EACf,IAAY;QAEZ,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,EACE,IAAI,EACJ,QAAQ,EACR,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,MAAM,GACuB;IAE/B,IACE,KAAK,KAAK,IAAI;QACd,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,wBAAwB,CAChC,wDAAwD,EACxD,2BAA2B,CAC5B,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,sBAAsB,CAAC;QAClC,IAAI;QACJ,QAAQ;QACR,MAAM;QACN,WAAW;QAEX;;;WAGG;QACH,OAAO,EAAE,KAAK;QAEd,MAAM;QACN,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-cli.d.ts","sourceRoot":"","sources":["../src/dataset-cli.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { runDatasetSeal } from "./dataset.js";
|
|
3
|
+
import { runDatasetProgress } from "./dataset-progress.js";
|
|
4
|
+
function argumentValue(args, prefix) {
|
|
5
|
+
const value = args.find(argument => argument.startsWith(prefix));
|
|
6
|
+
return value?.substring(prefix.length);
|
|
7
|
+
}
|
|
8
|
+
async function main() {
|
|
9
|
+
const args = process.argv.slice(2);
|
|
10
|
+
const command = (args.shift() ?? "").toLowerCase();
|
|
11
|
+
if (command === "progress") {
|
|
12
|
+
const tracePath = args.find(value => !value.startsWith("--"));
|
|
13
|
+
if (!tracePath) {
|
|
14
|
+
throw new Error("dataset progress requires a source JSONL trace path.");
|
|
15
|
+
}
|
|
16
|
+
const preregistrationPath = argumentValue(args, "--prereg=");
|
|
17
|
+
if (!preregistrationPath) {
|
|
18
|
+
throw new Error("dataset progress requires --prereg=<path>; stopping criteria must come from the preregistered protocol.");
|
|
19
|
+
}
|
|
20
|
+
await runDatasetProgress(tracePath, preregistrationPath);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
if (command !== "seal") {
|
|
24
|
+
throw new Error("Usage:\n once-dataset progress <trace.jsonl> --prereg=<preregistration.json>\n once-dataset seal <trace.jsonl> --collector-commit=<git-sha> [--id=001] [--out=.once/datasets]");
|
|
25
|
+
}
|
|
26
|
+
const tracePath = args.find(value => !value.startsWith("--"));
|
|
27
|
+
if (!tracePath) {
|
|
28
|
+
throw new Error("dataset seal requires a source JSONL trace path.");
|
|
29
|
+
}
|
|
30
|
+
const collectorGitCommit = argumentValue(args, "--collector-commit=");
|
|
31
|
+
if (!collectorGitCommit) {
|
|
32
|
+
throw new Error("dataset seal requires --collector-commit=<git-sha>; provenance must be explicit, never inferred later.");
|
|
33
|
+
}
|
|
34
|
+
await runDatasetSeal(tracePath, {
|
|
35
|
+
datasetId: argumentValue(args, "--id="),
|
|
36
|
+
outputDirectory: argumentValue(args, "--out="),
|
|
37
|
+
collectorGitCommit
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
try {
|
|
41
|
+
await main();
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error("");
|
|
45
|
+
console.error("Once dataset command failed.");
|
|
46
|
+
console.error(error instanceof Error ? error.message : error);
|
|
47
|
+
process.exitCode = 1;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=dataset-cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-cli.js","sourceRoot":"","sources":["../src/dataset-cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,SAAS,aAAa,CACpB,IAAc,EACd,MAAc;IAEd,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;IACjE,OAAO,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAEnD,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,mBAAmB,GAAG,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC7D,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;QACJ,CAAC;QAED,MAAM,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;QACzD,OAAO;IACT,CAAC;IAED,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,iLAAiL,CAClL,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9D,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,kBAAkB,GAAG,aAAa,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC;IACtE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;IAED,MAAM,cAAc,CAAC,SAAS,EAAE;QAC9B,SAAS,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;QACvC,eAAe,EAAE,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;QAC9C,kBAAkB;KACnB,CAAC,CAAC;AACL,CAAC;AAED,IAAI,CAAC;IACH,MAAM,IAAI,EAAE,CAAC;AACf,CAAC;AAAC,OAAO,KAAK,EAAE,CAAC;IACf,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC9C,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC9D,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface DatasetProgress {
|
|
2
|
+
dataset_id: string;
|
|
3
|
+
observations: number;
|
|
4
|
+
minimum_observations: number;
|
|
5
|
+
eligible_repeated_observations: number;
|
|
6
|
+
minimum_eligible_repeated_observations: number;
|
|
7
|
+
unique_resources: number;
|
|
8
|
+
minimum_unique_resources: number;
|
|
9
|
+
collection_days: number;
|
|
10
|
+
minimum_collection_days: number;
|
|
11
|
+
once_decision_count: 0;
|
|
12
|
+
stop_rule_satisfied: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function datasetProgress(tracePath: string, preregistrationPath: string): Promise<DatasetProgress>;
|
|
15
|
+
export declare function runDatasetProgress(tracePath: string, preregistrationPath: string): Promise<DatasetProgress>;
|
|
16
|
+
//# sourceMappingURL=dataset-progress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-progress.d.ts","sourceRoot":"","sources":["../src/dataset-progress.ts"],"names":[],"mappings":"AAuBA,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,8BAA8B,EAAE,MAAM,CAAC;IACvC,sCAAsC,EAAE,MAAM,CAAC;IAC/C,gBAAgB,EAAE,MAAM,CAAC;IACzB,wBAAwB,EAAE,MAAM,CAAC;IACjC,eAAe,EAAE,MAAM,CAAC;IACxB,uBAAuB,EAAE,MAAM,CAAC;IAChC,mBAAmB,EAAE,CAAC,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAwID,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CAoD1B;AAED,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,mBAAmB,EAAE,MAAM,GAC1B,OAAO,CAAC,eAAe,CAAC,CA6B1B"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
function finiteNonNegativeInteger(value, field) {
|
|
4
|
+
if (typeof value !== "number" ||
|
|
5
|
+
!Number.isInteger(value) ||
|
|
6
|
+
value < 0) {
|
|
7
|
+
throw new Error(`Invalid preregistration field: ${field}`);
|
|
8
|
+
}
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
function parseTimestamp(value, field) {
|
|
12
|
+
if (typeof value !== "string") {
|
|
13
|
+
throw new Error(`Invalid timestamp field: ${field}`);
|
|
14
|
+
}
|
|
15
|
+
const parsed = Date.parse(value);
|
|
16
|
+
if (!Number.isFinite(parsed)) {
|
|
17
|
+
throw new Error(`Invalid timestamp field: ${field}`);
|
|
18
|
+
}
|
|
19
|
+
return parsed;
|
|
20
|
+
}
|
|
21
|
+
async function readPreregistration(preregistrationPath) {
|
|
22
|
+
const raw = await readFile(resolve(preregistrationPath), "utf8");
|
|
23
|
+
const parsed = JSON.parse(raw);
|
|
24
|
+
if (parsed.schema_version !== "once-dataset-preregistration-v1" ||
|
|
25
|
+
typeof parsed.dataset_id !== "string" ||
|
|
26
|
+
typeof parsed.collection_start !== "string" ||
|
|
27
|
+
!parsed.stopping_rule ||
|
|
28
|
+
parsed.stopping_rule.type !== "all_conditions_must_be_met" ||
|
|
29
|
+
parsed.stopping_rule.outcome_dependent_stopping !== false) {
|
|
30
|
+
throw new Error("Unsupported or invalid dataset preregistration.");
|
|
31
|
+
}
|
|
32
|
+
finiteNonNegativeInteger(parsed.stopping_rule.minimum_observations, "minimum_observations");
|
|
33
|
+
finiteNonNegativeInteger(parsed.stopping_rule.minimum_eligible_repeated_observations, "minimum_eligible_repeated_observations");
|
|
34
|
+
finiteNonNegativeInteger(parsed.stopping_rule.minimum_unique_resources, "minimum_unique_resources");
|
|
35
|
+
if (typeof parsed.stopping_rule.minimum_collection_days !== "number" ||
|
|
36
|
+
!Number.isFinite(parsed.stopping_rule.minimum_collection_days) ||
|
|
37
|
+
parsed.stopping_rule.minimum_collection_days < 0) {
|
|
38
|
+
throw new Error("Invalid preregistration field: minimum_collection_days");
|
|
39
|
+
}
|
|
40
|
+
parseTimestamp(parsed.collection_start, "collection_start");
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
async function readStructuralObservations(tracePath) {
|
|
44
|
+
const raw = await readFile(resolve(tracePath), "utf8");
|
|
45
|
+
const lines = raw
|
|
46
|
+
.split(/\r?\n/u)
|
|
47
|
+
.filter(line => line.trim().length > 0);
|
|
48
|
+
if (lines.length === 0) {
|
|
49
|
+
throw new Error("Dataset progress requires a non-empty trace.");
|
|
50
|
+
}
|
|
51
|
+
const resources = new Set();
|
|
52
|
+
let repeats = 0;
|
|
53
|
+
let latestTimestamp = Number.NEGATIVE_INFINITY;
|
|
54
|
+
let onceDecisionCount = 0;
|
|
55
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
56
|
+
const observation = JSON.parse(lines[index]);
|
|
57
|
+
if (typeof observation.resource !== "string" ||
|
|
58
|
+
observation.resource.length === 0) {
|
|
59
|
+
throw new Error(`Invalid resource on observation ${index + 1}.`);
|
|
60
|
+
}
|
|
61
|
+
const timestamp = parseTimestamp(observation.timestamp, `observation ${index + 1}`);
|
|
62
|
+
latestTimestamp = Math.max(latestTimestamp, timestamp);
|
|
63
|
+
if (resources.has(observation.resource)) {
|
|
64
|
+
repeats += 1;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
resources.add(observation.resource);
|
|
68
|
+
}
|
|
69
|
+
if (observation.once_decision !== undefined) {
|
|
70
|
+
onceDecisionCount += 1;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
if (onceDecisionCount > 0) {
|
|
74
|
+
throw new Error(`Refusing blind progress: found ${onceDecisionCount} observation(s) containing once_decision.`);
|
|
75
|
+
}
|
|
76
|
+
return {
|
|
77
|
+
observations: lines.length,
|
|
78
|
+
uniqueResources: resources.size,
|
|
79
|
+
eligibleRepeatedObservations: repeats,
|
|
80
|
+
latestTimestamp
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
export async function datasetProgress(tracePath, preregistrationPath) {
|
|
84
|
+
const preregistration = await readPreregistration(preregistrationPath);
|
|
85
|
+
const structural = await readStructuralObservations(tracePath);
|
|
86
|
+
const collectionStart = parseTimestamp(preregistration.collection_start, "collection_start");
|
|
87
|
+
if (structural.latestTimestamp < collectionStart) {
|
|
88
|
+
throw new Error("Latest observation predates the preregistered collection start.");
|
|
89
|
+
}
|
|
90
|
+
const collectionDays = (structural.latestTimestamp - collectionStart) /
|
|
91
|
+
86_400_000;
|
|
92
|
+
const minimumObservations = finiteNonNegativeInteger(preregistration.stopping_rule.minimum_observations, "minimum_observations");
|
|
93
|
+
const minimumRepeated = finiteNonNegativeInteger(preregistration.stopping_rule.minimum_eligible_repeated_observations, "minimum_eligible_repeated_observations");
|
|
94
|
+
const minimumUnique = finiteNonNegativeInteger(preregistration.stopping_rule.minimum_unique_resources, "minimum_unique_resources");
|
|
95
|
+
const minimumDays = preregistration.stopping_rule.minimum_collection_days;
|
|
96
|
+
const stopRuleSatisfied = structural.observations >= minimumObservations &&
|
|
97
|
+
structural.eligibleRepeatedObservations >= minimumRepeated &&
|
|
98
|
+
structural.uniqueResources >= minimumUnique &&
|
|
99
|
+
collectionDays >= minimumDays;
|
|
100
|
+
return {
|
|
101
|
+
dataset_id: preregistration.dataset_id,
|
|
102
|
+
observations: structural.observations,
|
|
103
|
+
minimum_observations: minimumObservations,
|
|
104
|
+
eligible_repeated_observations: structural.eligibleRepeatedObservations,
|
|
105
|
+
minimum_eligible_repeated_observations: minimumRepeated,
|
|
106
|
+
unique_resources: structural.uniqueResources,
|
|
107
|
+
minimum_unique_resources: minimumUnique,
|
|
108
|
+
collection_days: collectionDays,
|
|
109
|
+
minimum_collection_days: minimumDays,
|
|
110
|
+
once_decision_count: 0,
|
|
111
|
+
stop_rule_satisfied: stopRuleSatisfied
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
export async function runDatasetProgress(tracePath, preregistrationPath) {
|
|
115
|
+
const progress = await datasetProgress(tracePath, preregistrationPath);
|
|
116
|
+
console.log("");
|
|
117
|
+
console.log("Once Dataset Progress");
|
|
118
|
+
console.log("---------------------");
|
|
119
|
+
console.log(`Dataset: ${progress.dataset_id}`);
|
|
120
|
+
console.log(`Observations: ${progress.observations} / ${progress.minimum_observations}`);
|
|
121
|
+
console.log(`Eligible repeated observations: ${progress.eligible_repeated_observations} / ${progress.minimum_eligible_repeated_observations}`);
|
|
122
|
+
console.log(`Unique resources: ${progress.unique_resources} / ${progress.minimum_unique_resources}`);
|
|
123
|
+
console.log(`Collection span: ${progress.collection_days.toFixed(2)} / ${progress.minimum_collection_days} days`);
|
|
124
|
+
console.log("Policy decisions present: 0");
|
|
125
|
+
console.log("Fingerprint outcomes inspected: NO");
|
|
126
|
+
console.log(`Stop rule satisfied: ${progress.stop_rule_satisfied ? "YES" : "NO"}`);
|
|
127
|
+
console.log(`Status: ${progress.stop_rule_satisfied ? "READY TO SEAL" : "COLLECTING"}`);
|
|
128
|
+
return progress;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=dataset-progress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-progress.js","sourceRoot":"","sources":["../src/dataset-progress.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface SealDatasetOptions {
|
|
2
|
+
datasetId?: string;
|
|
3
|
+
outputDirectory?: string;
|
|
4
|
+
collectorGitCommit: string;
|
|
5
|
+
sealedAt?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface DatasetManifest {
|
|
8
|
+
schema_version: "once-dataset-manifest-v1";
|
|
9
|
+
observation_schema: "once-benchmark-observation-v1";
|
|
10
|
+
trace_format: "jsonl";
|
|
11
|
+
dataset_id: string;
|
|
12
|
+
sealed_at: string;
|
|
13
|
+
dataset_filename: string;
|
|
14
|
+
sha256_filename: string;
|
|
15
|
+
manifest_filename: string;
|
|
16
|
+
source_trace_filename: string;
|
|
17
|
+
sha256: string;
|
|
18
|
+
raw_bytes: number;
|
|
19
|
+
observations: number;
|
|
20
|
+
unique_resources: number;
|
|
21
|
+
collection_started_at: string;
|
|
22
|
+
collection_ended_at: string;
|
|
23
|
+
collectors: string[];
|
|
24
|
+
collector_git_commit: string;
|
|
25
|
+
once_decision_count: 0;
|
|
26
|
+
}
|
|
27
|
+
export interface SealDatasetResult {
|
|
28
|
+
datasetPath: string;
|
|
29
|
+
sha256Path: string;
|
|
30
|
+
manifestPath: string;
|
|
31
|
+
manifest: DatasetManifest;
|
|
32
|
+
}
|
|
33
|
+
export declare function sealDataset(tracePath: string, options: SealDatasetOptions): Promise<SealDatasetResult>;
|
|
34
|
+
export declare function runDatasetSeal(tracePath: string, options: SealDatasetOptions): Promise<SealDatasetResult>;
|
|
35
|
+
//# sourceMappingURL=dataset.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.d.ts","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,0BAA0B,CAAC;IAC3C,kBAAkB,EAAE,+BAA+B,CAAC;IACpD,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qBAAqB,EAAE,MAAM,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AA4DD,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAmG5B;AAED,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAmB5B"}
|
package/dist/dataset.js
ADDED
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { mkdir, readFile, writeFile, access } from "node:fs/promises";
|
|
3
|
+
import { basename, resolve } from "node:path";
|
|
4
|
+
import { readBenchmarkTrace } from "./benchmark.js";
|
|
5
|
+
function assertDatasetId(value) {
|
|
6
|
+
if (!/^\d{3,}$/u.test(value)) {
|
|
7
|
+
throw new Error("dataset id must contain at least three digits, for example 001.");
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
function assertCollectorCommit(value) {
|
|
11
|
+
if (!/^[0-9a-f]{7,40}$/u.test(value)) {
|
|
12
|
+
throw new Error("collector git commit must be an explicit 7-40 character hexadecimal git commit.");
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
async function assertAbsent(path) {
|
|
16
|
+
try {
|
|
17
|
+
await access(path);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
const code = error.code;
|
|
21
|
+
if (code === "ENOENT") {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
throw error;
|
|
25
|
+
}
|
|
26
|
+
throw new Error(`Refusing to overwrite sealed dataset artifact: ${path}`);
|
|
27
|
+
}
|
|
28
|
+
function observationTime(observation, index) {
|
|
29
|
+
const value = Date.parse(observation.timestamp);
|
|
30
|
+
if (!Number.isFinite(value)) {
|
|
31
|
+
throw new Error(`Invalid timestamp on observation ${index + 1}: ${observation.timestamp}`);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function collectorNames(observations) {
|
|
36
|
+
const values = new Set();
|
|
37
|
+
for (const observation of observations) {
|
|
38
|
+
const collector = observation.metadata?.collector;
|
|
39
|
+
if (typeof collector === "string" && collector.length > 0) {
|
|
40
|
+
values.add(collector);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return [...values].sort();
|
|
44
|
+
}
|
|
45
|
+
export async function sealDataset(tracePath, options) {
|
|
46
|
+
const datasetId = options.datasetId ?? "001";
|
|
47
|
+
const outputDirectory = resolve(options.outputDirectory ?? ".once/datasets");
|
|
48
|
+
const collectorGitCommit = options.collectorGitCommit.toLowerCase();
|
|
49
|
+
assertDatasetId(datasetId);
|
|
50
|
+
assertCollectorCommit(collectorGitCommit);
|
|
51
|
+
const rawTrace = await readFile(resolve(tracePath));
|
|
52
|
+
const observations = await readBenchmarkTrace(tracePath);
|
|
53
|
+
if (observations.length === 0) {
|
|
54
|
+
throw new Error("Cannot seal an empty dataset.");
|
|
55
|
+
}
|
|
56
|
+
const onceDecisionCount = observations.filter(observation => observation.once_decision !== undefined).length;
|
|
57
|
+
if (onceDecisionCount > 0) {
|
|
58
|
+
throw new Error(`Refusing to seal raw holdout: found ${onceDecisionCount} observation(s) containing once_decision.`);
|
|
59
|
+
}
|
|
60
|
+
const times = observations.map(observationTime);
|
|
61
|
+
const collectionStartedAt = new Date(Math.min(...times)).toISOString();
|
|
62
|
+
const collectionEndedAt = new Date(Math.max(...times)).toISOString();
|
|
63
|
+
const uniqueResources = new Set(observations.map(observation => observation.resource)).size;
|
|
64
|
+
const sha256 = createHash("sha256")
|
|
65
|
+
.update(rawTrace)
|
|
66
|
+
.digest("hex");
|
|
67
|
+
const stem = `once-dataset-${datasetId}`;
|
|
68
|
+
const datasetFilename = `${stem}.jsonl`;
|
|
69
|
+
const sha256Filename = `${stem}.sha256`;
|
|
70
|
+
const manifestFilename = `${stem}-manifest.json`;
|
|
71
|
+
const datasetPath = resolve(outputDirectory, datasetFilename);
|
|
72
|
+
const sha256Path = resolve(outputDirectory, sha256Filename);
|
|
73
|
+
const manifestPath = resolve(outputDirectory, manifestFilename);
|
|
74
|
+
await mkdir(outputDirectory, { recursive: true });
|
|
75
|
+
await Promise.all([
|
|
76
|
+
assertAbsent(datasetPath),
|
|
77
|
+
assertAbsent(sha256Path),
|
|
78
|
+
assertAbsent(manifestPath)
|
|
79
|
+
]);
|
|
80
|
+
const sealedAt = options.sealedAt ?? new Date().toISOString();
|
|
81
|
+
if (!Number.isFinite(Date.parse(sealedAt))) {
|
|
82
|
+
throw new Error(`Invalid sealed_at timestamp: ${sealedAt}`);
|
|
83
|
+
}
|
|
84
|
+
const manifest = {
|
|
85
|
+
schema_version: "once-dataset-manifest-v1",
|
|
86
|
+
observation_schema: "once-benchmark-observation-v1",
|
|
87
|
+
trace_format: "jsonl",
|
|
88
|
+
dataset_id: datasetId,
|
|
89
|
+
sealed_at: new Date(sealedAt).toISOString(),
|
|
90
|
+
dataset_filename: datasetFilename,
|
|
91
|
+
sha256_filename: sha256Filename,
|
|
92
|
+
manifest_filename: manifestFilename,
|
|
93
|
+
source_trace_filename: basename(tracePath),
|
|
94
|
+
sha256,
|
|
95
|
+
raw_bytes: rawTrace.byteLength,
|
|
96
|
+
observations: observations.length,
|
|
97
|
+
unique_resources: uniqueResources,
|
|
98
|
+
collection_started_at: collectionStartedAt,
|
|
99
|
+
collection_ended_at: collectionEndedAt,
|
|
100
|
+
collectors: collectorNames(observations),
|
|
101
|
+
collector_git_commit: collectorGitCommit,
|
|
102
|
+
once_decision_count: 0
|
|
103
|
+
};
|
|
104
|
+
// The dataset bytes are written exactly as collected. No reserialization.
|
|
105
|
+
await writeFile(datasetPath, rawTrace, { flag: "wx" });
|
|
106
|
+
await writeFile(sha256Path, `${sha256} ${datasetFilename}\n`, { encoding: "utf8", flag: "wx" });
|
|
107
|
+
await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, { encoding: "utf8", flag: "wx" });
|
|
108
|
+
return {
|
|
109
|
+
datasetPath,
|
|
110
|
+
sha256Path,
|
|
111
|
+
manifestPath,
|
|
112
|
+
manifest
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
export async function runDatasetSeal(tracePath, options) {
|
|
116
|
+
const result = await sealDataset(tracePath, options);
|
|
117
|
+
console.log("");
|
|
118
|
+
console.log("Once Dataset Seal");
|
|
119
|
+
console.log("-----------------");
|
|
120
|
+
console.log(`Dataset: ${result.datasetPath}`);
|
|
121
|
+
console.log(`SHA-256: ${result.manifest.sha256}`);
|
|
122
|
+
console.log(`Hash file: ${result.sha256Path}`);
|
|
123
|
+
console.log(`Manifest: ${result.manifestPath}`);
|
|
124
|
+
console.log(`Observations: ${result.manifest.observations}`);
|
|
125
|
+
console.log(`Unique resources: ${result.manifest.unique_resources}`);
|
|
126
|
+
console.log(`Collection start: ${result.manifest.collection_started_at}`);
|
|
127
|
+
console.log(`Collection end: ${result.manifest.collection_ended_at}`);
|
|
128
|
+
console.log(`Collector commit: ${result.manifest.collector_git_commit}`);
|
|
129
|
+
console.log("Policy decisions present: 0");
|
|
130
|
+
console.log("Status: SEALED RAW HOLDOUT");
|
|
131
|
+
return result;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=dataset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset.js","sourceRoot":"","sources":["../src/dataset.ts"],"names":[],"mappings":"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"}
|