@once-agent/sdk 0.1.4 → 0.1.6

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.
Files changed (89) hide show
  1. package/LICENSE +20 -20
  2. package/README.md +62 -3
  3. package/dist/benchmark.d.ts +40 -0
  4. package/dist/benchmark.d.ts.map +1 -0
  5. package/dist/benchmark.js +169 -0
  6. package/dist/benchmark.js.map +1 -0
  7. package/dist/cli.js +52 -12
  8. package/dist/cli.js.map +1 -1
  9. package/dist/connect/binding.d.ts +17 -0
  10. package/dist/connect/binding.d.ts.map +1 -0
  11. package/dist/connect/binding.js +91 -0
  12. package/dist/connect/binding.js.map +1 -0
  13. package/dist/connect/classifier.d.ts +18 -0
  14. package/dist/connect/classifier.d.ts.map +1 -0
  15. package/dist/connect/classifier.js +49 -0
  16. package/dist/connect/classifier.js.map +1 -0
  17. package/dist/connect/execute.d.ts +30 -0
  18. package/dist/connect/execute.d.ts.map +1 -0
  19. package/dist/connect/execute.js +47 -0
  20. package/dist/connect/execute.js.map +1 -0
  21. package/dist/connect/kernel.d.ts +33 -0
  22. package/dist/connect/kernel.d.ts.map +1 -0
  23. package/dist/connect/kernel.js +46 -0
  24. package/dist/connect/kernel.js.map +1 -0
  25. package/dist/connect/openai-agents.d.ts +31 -0
  26. package/dist/connect/openai-agents.d.ts.map +1 -0
  27. package/dist/connect/openai-agents.js +42 -0
  28. package/dist/connect/openai-agents.js.map +1 -0
  29. package/dist/dataset-cli.d.ts +3 -0
  30. package/dist/dataset-cli.d.ts.map +1 -0
  31. package/dist/dataset-cli.js +49 -0
  32. package/dist/dataset-cli.js.map +1 -0
  33. package/dist/dataset-progress.d.ts +16 -0
  34. package/dist/dataset-progress.d.ts.map +1 -0
  35. package/dist/dataset-progress.js +130 -0
  36. package/dist/dataset-progress.js.map +1 -0
  37. package/dist/dataset.d.ts +35 -0
  38. package/dist/dataset.d.ts.map +1 -0
  39. package/dist/dataset.js +133 -0
  40. package/dist/dataset.js.map +1 -0
  41. package/dist/index.d.ts +39 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +259 -2
  44. package/dist/index.js.map +1 -1
  45. package/dist/runtime/decision.d.ts +39 -0
  46. package/dist/runtime/decision.d.ts.map +1 -0
  47. package/dist/runtime/decision.js +102 -0
  48. package/dist/runtime/decision.js.map +1 -0
  49. package/dist/runtime/fetch-interceptor.d.ts +74 -0
  50. package/dist/runtime/fetch-interceptor.d.ts.map +1 -0
  51. package/dist/runtime/fetch-interceptor.js +156 -0
  52. package/dist/runtime/fetch-interceptor.js.map +1 -0
  53. package/dist/runtime/identity.d.ts +23 -0
  54. package/dist/runtime/identity.d.ts.map +1 -0
  55. package/dist/runtime/identity.js +191 -0
  56. package/dist/runtime/identity.js.map +1 -0
  57. package/dist/runtime/pipeline.d.ts +25 -0
  58. package/dist/runtime/pipeline.d.ts.map +1 -0
  59. package/dist/runtime/pipeline.js +121 -0
  60. package/dist/runtime/pipeline.js.map +1 -0
  61. package/dist/setup.d.ts +2 -0
  62. package/dist/setup.d.ts.map +1 -1
  63. package/dist/setup.js +126 -33
  64. package/dist/setup.js.map +1 -1
  65. package/dist/trace.d.ts +13 -0
  66. package/dist/trace.d.ts.map +1 -0
  67. package/dist/trace.js +60 -0
  68. package/dist/trace.js.map +1 -0
  69. package/dist-cjs/connect/binding.js +99 -0
  70. package/dist-cjs/connect/binding.js.map +1 -0
  71. package/dist-cjs/connect/classifier.js +53 -0
  72. package/dist-cjs/connect/classifier.js.map +1 -0
  73. package/dist-cjs/connect/execute.js +52 -0
  74. package/dist-cjs/connect/execute.js.map +1 -0
  75. package/dist-cjs/connect/kernel.js +51 -0
  76. package/dist-cjs/connect/kernel.js.map +1 -0
  77. package/dist-cjs/connect/openai-agents.js +47 -0
  78. package/dist-cjs/connect/openai-agents.js.map +1 -0
  79. package/dist-cjs/index.js +282 -3
  80. package/dist-cjs/index.js.map +1 -1
  81. package/dist-cjs/runtime/decision.js +105 -0
  82. package/dist-cjs/runtime/decision.js.map +1 -0
  83. package/dist-cjs/runtime/fetch-interceptor.js +162 -0
  84. package/dist-cjs/runtime/fetch-interceptor.js.map +1 -0
  85. package/dist-cjs/runtime/identity.js +194 -0
  86. package/dist-cjs/runtime/identity.js.map +1 -0
  87. package/dist-cjs/runtime/pipeline.js +124 -0
  88. package/dist-cjs/runtime/pipeline.js.map +1 -0
  89. package/package.json +91 -69
@@ -0,0 +1,18 @@
1
+ export declare const CONNECT_DECISION: Readonly<{
2
+ readonly PROTECT: "PROTECT";
3
+ readonly BYPASS: "BYPASS";
4
+ readonly REJECT: "REJECT";
5
+ }>;
6
+ export type ConnectDecision = (typeof CONNECT_DECISION)[keyof typeof CONNECT_DECISION];
7
+ export interface ConnectSafetyDeclaration {
8
+ changesExternalState: boolean;
9
+ retryPossible: boolean;
10
+ ambiguousOutcomePossible: boolean;
11
+ duplicateUndesirable: boolean;
12
+ }
13
+ export interface ConnectClassification {
14
+ decision: ConnectDecision;
15
+ reason: "INVALID_OPERATION" | "INCOMPLETE_SAFETY_DECLARATION" | "CONSEQUENTIAL_RETRY_RISK" | "PROTECTION_CONDITIONS_NOT_ALL_PRESENT";
16
+ }
17
+ export declare function classifyConnectOperation(operation: unknown): Readonly<ConnectClassification>;
18
+ //# sourceMappingURL=classifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../src/connect/classifier.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB;;;;EAIlB,CAAC;AAEZ,MAAM,MAAM,eAAe,GACzB,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAE3D,MAAM,WAAW,wBAAwB;IACvC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,aAAa,EAAE,OAAO,CAAC;IACvB,wBAAwB,EAAE,OAAO,CAAC;IAClC,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EACF,mBAAmB,GACnB,+BAA+B,GAC/B,0BAA0B,GAC1B,uCAAuC,CAAC;CAC7C;AAaD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,OAAO,GACjB,QAAQ,CAAC,qBAAqB,CAAC,CAmEjC"}
@@ -0,0 +1,49 @@
1
+ export const CONNECT_DECISION = Object.freeze({
2
+ PROTECT: "PROTECT",
3
+ BYPASS: "BYPASS",
4
+ REJECT: "REJECT",
5
+ });
6
+ function requireBoolean(value, name) {
7
+ if (typeof value !== "boolean") {
8
+ throw new TypeError(`Once Connect requires boolean "${name}".`);
9
+ }
10
+ }
11
+ export function classifyConnectOperation(operation) {
12
+ if (!operation ||
13
+ typeof operation !== "object" ||
14
+ Array.isArray(operation)) {
15
+ return Object.freeze({
16
+ decision: CONNECT_DECISION.REJECT,
17
+ reason: "INVALID_OPERATION",
18
+ });
19
+ }
20
+ const candidate = operation;
21
+ const { changesExternalState, retryPossible, ambiguousOutcomePossible, duplicateUndesirable, } = candidate;
22
+ try {
23
+ requireBoolean(changesExternalState, "changesExternalState");
24
+ requireBoolean(retryPossible, "retryPossible");
25
+ requireBoolean(ambiguousOutcomePossible, "ambiguousOutcomePossible");
26
+ requireBoolean(duplicateUndesirable, "duplicateUndesirable");
27
+ }
28
+ catch {
29
+ return Object.freeze({
30
+ decision: CONNECT_DECISION.REJECT,
31
+ reason: "INCOMPLETE_SAFETY_DECLARATION",
32
+ });
33
+ }
34
+ const requiresProtection = changesExternalState &&
35
+ retryPossible &&
36
+ ambiguousOutcomePossible &&
37
+ duplicateUndesirable;
38
+ if (requiresProtection) {
39
+ return Object.freeze({
40
+ decision: CONNECT_DECISION.PROTECT,
41
+ reason: "CONSEQUENTIAL_RETRY_RISK",
42
+ });
43
+ }
44
+ return Object.freeze({
45
+ decision: CONNECT_DECISION.BYPASS,
46
+ reason: "PROTECTION_CONDITIONS_NOT_ALL_PRESENT",
47
+ });
48
+ }
49
+ //# sourceMappingURL=classifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../src/connect/classifier.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACR,CAAC,CAAC;AAqBZ,SAAS,cAAc,CACrB,KAAc,EACd,IAAY;IAEZ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,IAAI,SAAS,CACjB,kCAAkC,IAAI,IAAI,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAkB;IAElB,IACE,CAAC,SAAS;QACV,OAAO,SAAS,KAAK,QAAQ;QAC7B,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EACxB,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,gBAAgB,CAAC,MAAM;YACjC,MAAM,EAAE,mBAAmB;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GACb,SAAoC,CAAC;IAEvC,MAAM,EACJ,oBAAoB,EACpB,aAAa,EACb,wBAAwB,EACxB,oBAAoB,GACrB,GAAG,SAAS,CAAC;IAEd,IAAI,CAAC;QACH,cAAc,CACZ,oBAAoB,EACpB,sBAAsB,CACvB,CAAC;QAEF,cAAc,CACZ,aAAa,EACb,eAAe,CAChB,CAAC;QAEF,cAAc,CACZ,wBAAwB,EACxB,0BAA0B,CAC3B,CAAC;QAEF,cAAc,CACZ,oBAAoB,EACpB,sBAAsB,CACvB,CAAC;IACJ,CAAC;IACD,MAAM,CAAC;QACL,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,gBAAgB,CAAC,MAAM;YACjC,MAAM,EAAE,+BAA+B;SACxC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,kBAAkB,GACtB,oBAAoB;QACpB,aAAa;QACb,wBAAwB;QACxB,oBAAoB,CAAC;IAEvB,IAAI,kBAAkB,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,gBAAgB,CAAC,OAAO;YAClC,MAAM,EAAE,0BAA0B;SACnC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,QAAQ,EAAE,gBAAgB,CAAC,MAAM;QACjC,MAAM,EAAE,uCAAuC;KAChD,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,30 @@
1
+ import type { ConnectClassification, ConnectSafetyDeclaration } from "./classifier.js";
2
+ import type { ConnectPayload } from "./binding.js";
3
+ export interface ConnectProtectedContext {
4
+ operationId: string;
5
+ payload: ConnectPayload;
6
+ payloadFingerprint: string;
7
+ classification: Readonly<ConnectClassification>;
8
+ }
9
+ export interface ConnectExecutionInput<T = unknown> {
10
+ safety: ConnectSafetyDeclaration;
11
+ operationId: string;
12
+ payload: ConnectPayload;
13
+ bypass?: () => Promise<T> | T;
14
+ protect?: (context: ConnectProtectedContext) => Promise<T> | T;
15
+ }
16
+ export declare class ConnectExecutionError extends Error {
17
+ readonly code: string;
18
+ constructor(message: string, code: string);
19
+ }
20
+ /**
21
+ * Framework-neutral Connect orchestration boundary.
22
+ *
23
+ * Connect decides whether the proposed tool call requires
24
+ * Once protection. It does not implement execution safety.
25
+ *
26
+ * Protected execution is delegated to the existing Once
27
+ * runtime/kernel supplied by the caller.
28
+ */
29
+ export declare function executeConnectOperation<T = unknown>({ safety, operationId, payload, bypass, protect, }: ConnectExecutionInput<T>): Promise<T>;
30
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/connect/execute.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,KAAK,EACV,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,QAAQ,CAAC,qBAAqB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,OAAO;IAChD,MAAM,EAAE,wBAAwB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,cAAc,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,uBAAuB,KAC7B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;CACrB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBAGpB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM;CAMf;AAED;;;;;;;;GAQG;AACH,wBAAsB,uBAAuB,CAAC,CAAC,GAAG,OAAO,EAAE,EACzD,MAAM,EACN,WAAW,EACX,OAAO,EACP,MAAM,EACN,OAAO,GACR,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAoDvC"}
@@ -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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=dataset-cli.d.ts.map
@@ -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"}