@relayfx/sdk 0.0.48 → 0.0.50

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 (34) hide show
  1. package/dist/ai.js +2054 -576
  2. package/dist/index.js +2884 -860
  3. package/dist/migrations/20260709214238_faithful_black_widow/migration.sql +53 -0
  4. package/dist/migrations/20260709214238_faithful_black_widow/snapshot.json +5426 -0
  5. package/dist/migrations/20260709220016_fearless_aaron_stack/migration.sql +2 -0
  6. package/dist/migrations/20260709220016_fearless_aaron_stack/snapshot.json +5426 -0
  7. package/dist/migrations/mysql/0002_durable_tool_placement.sql +75 -0
  8. package/dist/migrations/pg/20260709214238_faithful_black_widow/migration.sql +53 -0
  9. package/dist/migrations/pg/20260709214238_faithful_black_widow/snapshot.json +5426 -0
  10. package/dist/migrations/pg/20260709220016_fearless_aaron_stack/migration.sql +2 -0
  11. package/dist/migrations/pg/20260709220016_fearless_aaron_stack/snapshot.json +5426 -0
  12. package/dist/migrations/sqlite/0002_durable_tool_placement.sql +71 -0
  13. package/dist/types/relay/client.d.ts +27 -6
  14. package/dist/types/relay/index.d.ts +1 -0
  15. package/dist/types/relay/operation.d.ts +525 -53
  16. package/dist/types/relay/tool-worker.d.ts +19 -0
  17. package/dist/types/runtime/address/address-resolution-service.d.ts +69 -54
  18. package/dist/types/runtime/agent/relay-compaction.d.ts +1 -0
  19. package/dist/types/runtime/cluster/execution-entity.d.ts +10 -477
  20. package/dist/types/runtime/execution/event-log-service.d.ts +6 -0
  21. package/dist/types/runtime/index.d.ts +1 -0
  22. package/dist/types/runtime/runner/runner-runtime-service.d.ts +18 -15
  23. package/dist/types/runtime/tool/tool-runtime-service.d.ts +17 -1
  24. package/dist/types/runtime/tool/tool-transition-coordinator.d.ts +13 -0
  25. package/dist/types/runtime/workflow/execution-workflow.d.ts +146 -114
  26. package/dist/types/schema/agent-schema.d.ts +431 -320
  27. package/dist/types/schema/execution-schema.d.ts +69 -53
  28. package/dist/types/schema/ids-schema.d.ts +4 -0
  29. package/dist/types/schema/tool-schema.d.ts +29 -0
  30. package/dist/types/store-sql/envelope/envelope-repository.d.ts +6 -0
  31. package/dist/types/store-sql/execution/execution-event-repository.d.ts +6 -0
  32. package/dist/types/store-sql/schema/relay-schema.d.ts +386 -7
  33. package/dist/types/store-sql/tool/tool-call-repository.d.ts +160 -1
  34. package/package.json +3 -3
@@ -1,4 +1,4 @@
1
- import { type Agent, type Content, type Envelope, type Skill, type Workspace } from "../../schema/index";
1
+ import { type Agent, type Content, type Envelope, type Skill, type Tool, type Workspace } from "../../schema/index";
2
2
  import type { Part } from "effect/unstable/ai/Prompt";
3
3
  export declare const relayAddressBookEntries: import("drizzle-orm/pg-core").PgTableWithColumns<{
4
4
  name: "relay_address_book_entries";
@@ -1681,11 +1681,11 @@ export declare const relayExecutions: import("drizzle-orm/pg-core").PgTableWithC
1681
1681
  identity: undefined;
1682
1682
  generated: undefined;
1683
1683
  }>;
1684
- status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_executions", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "queued" | "running" | "waiting" | "completed" | "failed" | "cancelled">>, {
1684
+ status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_executions", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "waiting" | "running" | "completed" | "failed" | "queued" | "cancelled">>, {
1685
1685
  name: string;
1686
1686
  tableName: "relay_executions";
1687
1687
  dataType: "string";
1688
- data: "queued" | "running" | "waiting" | "completed" | "failed" | "cancelled";
1688
+ data: "waiting" | "running" | "completed" | "failed" | "queued" | "cancelled";
1689
1689
  driverParam: string;
1690
1690
  notNull: true;
1691
1691
  hasDefault: false;
@@ -1872,11 +1872,11 @@ export declare const relayChildExecutions: import("drizzle-orm/pg-core").PgTable
1872
1872
  identity: undefined;
1873
1873
  generated: undefined;
1874
1874
  }>;
1875
- status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_child_executions", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "queued" | "running" | "waiting" | "completed" | "failed" | "cancelled">>, {
1875
+ status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_child_executions", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "waiting" | "running" | "completed" | "failed" | "queued" | "cancelled">>, {
1876
1876
  name: string;
1877
1877
  tableName: "relay_child_executions";
1878
1878
  dataType: "string";
1879
- data: "queued" | "running" | "waiting" | "completed" | "failed" | "cancelled";
1879
+ data: "waiting" | "running" | "completed" | "failed" | "queued" | "cancelled";
1880
1880
  driverParam: string;
1881
1881
  notNull: true;
1882
1882
  hasDefault: false;
@@ -2355,11 +2355,11 @@ export declare const relayWorkspaceLeases: import("drizzle-orm/pg-core").PgTable
2355
2355
  identity: undefined;
2356
2356
  generated: undefined;
2357
2357
  }>;
2358
- status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_workspace_leases", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "running" | "failed" | "planned" | "suspended" | "snapshotted" | "archived" | "released">>, {
2358
+ status: import("drizzle-orm/pg-core").PgBuildColumn<"relay_workspace_leases", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "running" | "failed" | "released" | "planned" | "suspended" | "snapshotted" | "archived">>, {
2359
2359
  name: string;
2360
2360
  tableName: "relay_workspace_leases";
2361
2361
  dataType: "string";
2362
- data: "running" | "failed" | "planned" | "suspended" | "snapshotted" | "archived" | "released";
2362
+ data: "running" | "failed" | "released" | "planned" | "suspended" | "snapshotted" | "archived";
2363
2363
  driverParam: string;
2364
2364
  notNull: true;
2365
2365
  hasDefault: false;
@@ -3385,6 +3385,213 @@ export declare const relayToolCalls: import("drizzle-orm/pg-core").PgTableWithCo
3385
3385
  identity: undefined;
3386
3386
  generated: undefined;
3387
3387
  }>;
3388
+ definitionJson: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, Tool.Definition>, {
3389
+ name: string;
3390
+ tableName: "relay_tool_calls";
3391
+ dataType: "object json";
3392
+ data: Tool.Definition;
3393
+ driverParam: unknown;
3394
+ notNull: false;
3395
+ hasDefault: false;
3396
+ isPrimaryKey: false;
3397
+ isAutoincrement: false;
3398
+ hasRuntimeDefault: false;
3399
+ enumValues: undefined;
3400
+ identity: undefined;
3401
+ generated: undefined;
3402
+ }>;
3403
+ placementKind: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "local" | "client" | "remote" | "mcp">>>, {
3404
+ name: string;
3405
+ tableName: "relay_tool_calls";
3406
+ dataType: "string";
3407
+ data: "local" | "client" | "remote" | "mcp";
3408
+ driverParam: string;
3409
+ notNull: true;
3410
+ hasDefault: true;
3411
+ isPrimaryKey: false;
3412
+ isAutoincrement: false;
3413
+ hasRuntimeDefault: false;
3414
+ enumValues: undefined;
3415
+ identity: undefined;
3416
+ generated: undefined;
3417
+ }>;
3418
+ placementKey: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
3419
+ name: string;
3420
+ tableName: "relay_tool_calls";
3421
+ dataType: "string";
3422
+ data: string;
3423
+ driverParam: string;
3424
+ notNull: false;
3425
+ hasDefault: false;
3426
+ isPrimaryKey: false;
3427
+ isAutoincrement: false;
3428
+ hasRuntimeDefault: false;
3429
+ enumValues: undefined;
3430
+ identity: undefined;
3431
+ generated: undefined;
3432
+ }>;
3433
+ state: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "requested" | "waiting" | "running" | "submitted" | "completed" | "failed">>>, {
3434
+ name: string;
3435
+ tableName: "relay_tool_calls";
3436
+ dataType: "string";
3437
+ data: "requested" | "waiting" | "running" | "submitted" | "completed" | "failed";
3438
+ driverParam: string;
3439
+ notNull: true;
3440
+ hasDefault: true;
3441
+ isPrimaryKey: false;
3442
+ isAutoincrement: false;
3443
+ hasRuntimeDefault: false;
3444
+ enumValues: undefined;
3445
+ identity: undefined;
3446
+ generated: undefined;
3447
+ }>;
3448
+ waitId: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, string & import("effect/Brand").Brand<"Relay.WaitId">>, {
3449
+ name: string;
3450
+ tableName: "relay_tool_calls";
3451
+ dataType: "string";
3452
+ data: string & import("effect/Brand").Brand<"Relay.WaitId">;
3453
+ driverParam: string;
3454
+ notNull: false;
3455
+ hasDefault: false;
3456
+ isPrimaryKey: false;
3457
+ isAutoincrement: false;
3458
+ hasRuntimeDefault: false;
3459
+ enumValues: undefined;
3460
+ identity: undefined;
3461
+ generated: undefined;
3462
+ }>;
3463
+ idempotencyKey: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>>, {
3464
+ name: string;
3465
+ tableName: "relay_tool_calls";
3466
+ dataType: "string";
3467
+ data: string;
3468
+ driverParam: string;
3469
+ notNull: true;
3470
+ hasDefault: false;
3471
+ isPrimaryKey: false;
3472
+ isAutoincrement: false;
3473
+ hasRuntimeDefault: false;
3474
+ enumValues: undefined;
3475
+ identity: undefined;
3476
+ generated: undefined;
3477
+ }>;
3478
+ availableAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
3479
+ name: string;
3480
+ tableName: "relay_tool_calls";
3481
+ dataType: "object date";
3482
+ data: Date;
3483
+ driverParam: string;
3484
+ notNull: true;
3485
+ hasDefault: true;
3486
+ isPrimaryKey: false;
3487
+ isAutoincrement: false;
3488
+ hasRuntimeDefault: false;
3489
+ enumValues: undefined;
3490
+ identity: undefined;
3491
+ generated: undefined;
3492
+ }>;
3493
+ activeAttemptId: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, string & import("effect/Brand").Brand<"Relay.ToolAttemptId">>, {
3494
+ name: string;
3495
+ tableName: "relay_tool_calls";
3496
+ dataType: "string";
3497
+ data: string & import("effect/Brand").Brand<"Relay.ToolAttemptId">;
3498
+ driverParam: string;
3499
+ notNull: false;
3500
+ hasDefault: false;
3501
+ isPrimaryKey: false;
3502
+ isAutoincrement: false;
3503
+ hasRuntimeDefault: false;
3504
+ enumValues: undefined;
3505
+ identity: undefined;
3506
+ generated: undefined;
3507
+ }>;
3508
+ claimOwner: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
3509
+ name: string;
3510
+ tableName: "relay_tool_calls";
3511
+ dataType: "string";
3512
+ data: string;
3513
+ driverParam: string;
3514
+ notNull: false;
3515
+ hasDefault: false;
3516
+ isPrimaryKey: false;
3517
+ isAutoincrement: false;
3518
+ hasRuntimeDefault: false;
3519
+ enumValues: undefined;
3520
+ identity: undefined;
3521
+ generated: undefined;
3522
+ }>;
3523
+ claimedAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").PgTimestampBuilder, {
3524
+ name: string;
3525
+ tableName: "relay_tool_calls";
3526
+ dataType: "object date";
3527
+ data: Date;
3528
+ driverParam: string;
3529
+ notNull: false;
3530
+ hasDefault: false;
3531
+ isPrimaryKey: false;
3532
+ isAutoincrement: false;
3533
+ hasRuntimeDefault: false;
3534
+ enumValues: undefined;
3535
+ identity: undefined;
3536
+ generated: undefined;
3537
+ }>;
3538
+ claimExpiresAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").PgTimestampBuilder, {
3539
+ name: string;
3540
+ tableName: "relay_tool_calls";
3541
+ dataType: "object date";
3542
+ data: Date;
3543
+ driverParam: string;
3544
+ notNull: false;
3545
+ hasDefault: false;
3546
+ isPrimaryKey: false;
3547
+ isAutoincrement: false;
3548
+ hasRuntimeDefault: false;
3549
+ enumValues: undefined;
3550
+ identity: undefined;
3551
+ generated: undefined;
3552
+ }>;
3553
+ externalOutcomeJson: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, import("effect/Schema").Struct.ReadonlySide<{
3554
+ readonly kind: import("effect/Schema").Literal<"success">;
3555
+ readonly output: import("effect/Schema").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>;
3556
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
3557
+ readonly kind: import("effect/Schema").Literal<"failure">;
3558
+ readonly message: import("effect/Schema").String;
3559
+ }, "Type">>, {
3560
+ name: string;
3561
+ tableName: "relay_tool_calls";
3562
+ dataType: "object json";
3563
+ data: import("effect/Schema").Struct.ReadonlySide<{
3564
+ readonly kind: import("effect/Schema").Literal<"success">;
3565
+ readonly output: import("effect/Schema").Codec<import("effect/Schema").Json, import("effect/Schema").Json, never, never>;
3566
+ }, "Type"> | import("effect/Schema").Struct.ReadonlySide<{
3567
+ readonly kind: import("effect/Schema").Literal<"failure">;
3568
+ readonly message: import("effect/Schema").String;
3569
+ }, "Type">;
3570
+ driverParam: unknown;
3571
+ notNull: false;
3572
+ hasDefault: false;
3573
+ isPrimaryKey: false;
3574
+ isAutoincrement: false;
3575
+ hasRuntimeDefault: false;
3576
+ enumValues: undefined;
3577
+ identity: undefined;
3578
+ generated: undefined;
3579
+ }>;
3580
+ externalOutcomeAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").PgTimestampBuilder, {
3581
+ name: string;
3582
+ tableName: "relay_tool_calls";
3583
+ dataType: "object date";
3584
+ data: Date;
3585
+ driverParam: string;
3586
+ notNull: false;
3587
+ hasDefault: false;
3588
+ isPrimaryKey: false;
3589
+ isAutoincrement: false;
3590
+ hasRuntimeDefault: false;
3591
+ enumValues: undefined;
3592
+ identity: undefined;
3593
+ generated: undefined;
3594
+ }>;
3388
3595
  metadataJson: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgJsonbBuilder, {
3389
3596
  readonly [x: string]: import("effect/Schema").Json;
3390
3597
  }>>>, {
@@ -3419,6 +3626,178 @@ export declare const relayToolCalls: import("drizzle-orm/pg-core").PgTableWithCo
3419
3626
  identity: undefined;
3420
3627
  generated: undefined;
3421
3628
  }>;
3629
+ updatedAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_calls", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
3630
+ name: string;
3631
+ tableName: "relay_tool_calls";
3632
+ dataType: "object date";
3633
+ data: Date;
3634
+ driverParam: string;
3635
+ notNull: true;
3636
+ hasDefault: true;
3637
+ isPrimaryKey: false;
3638
+ isAutoincrement: false;
3639
+ hasRuntimeDefault: false;
3640
+ enumValues: undefined;
3641
+ identity: undefined;
3642
+ generated: undefined;
3643
+ }>;
3644
+ };
3645
+ dialect: "pg";
3646
+ }>;
3647
+ export declare const relayToolAttempts: import("drizzle-orm/pg-core").PgTableWithColumns<{
3648
+ name: "relay_tool_attempts";
3649
+ schema: undefined;
3650
+ columns: {
3651
+ tenantId: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, string & import("effect/Brand").Brand<"Relay.TenantId">>>>, {
3652
+ name: string;
3653
+ tableName: "relay_tool_attempts";
3654
+ dataType: "string";
3655
+ data: string & import("effect/Brand").Brand<"Relay.TenantId">;
3656
+ driverParam: string;
3657
+ notNull: true;
3658
+ hasDefault: true;
3659
+ isPrimaryKey: false;
3660
+ isAutoincrement: false;
3661
+ hasRuntimeDefault: false;
3662
+ enumValues: undefined;
3663
+ identity: undefined;
3664
+ generated: undefined;
3665
+ }>;
3666
+ id: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, string & import("effect/Brand").Brand<"Relay.ToolAttemptId">>>, {
3667
+ name: string;
3668
+ tableName: "relay_tool_attempts";
3669
+ dataType: "string";
3670
+ data: string & import("effect/Brand").Brand<"Relay.ToolAttemptId">;
3671
+ driverParam: string;
3672
+ notNull: true;
3673
+ hasDefault: false;
3674
+ isPrimaryKey: false;
3675
+ isAutoincrement: false;
3676
+ hasRuntimeDefault: false;
3677
+ enumValues: undefined;
3678
+ identity: undefined;
3679
+ generated: undefined;
3680
+ }>;
3681
+ toolCallId: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, string & import("effect/Brand").Brand<"Relay.ToolCallId">>>, {
3682
+ name: string;
3683
+ tableName: "relay_tool_attempts";
3684
+ dataType: "string";
3685
+ data: string & import("effect/Brand").Brand<"Relay.ToolCallId">;
3686
+ driverParam: string;
3687
+ notNull: true;
3688
+ hasDefault: false;
3689
+ isPrimaryKey: false;
3690
+ isAutoincrement: false;
3691
+ hasRuntimeDefault: false;
3692
+ enumValues: undefined;
3693
+ identity: undefined;
3694
+ generated: undefined;
3695
+ }>;
3696
+ attemptNumber: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgIntegerBuilder>, {
3697
+ name: string;
3698
+ tableName: "relay_tool_attempts";
3699
+ dataType: "number int32";
3700
+ data: number;
3701
+ driverParam: string | number;
3702
+ notNull: true;
3703
+ hasDefault: false;
3704
+ isPrimaryKey: false;
3705
+ isAutoincrement: false;
3706
+ hasRuntimeDefault: false;
3707
+ enumValues: undefined;
3708
+ identity: undefined;
3709
+ generated: undefined;
3710
+ }>;
3711
+ state: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").Set$Type<import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, "running" | "completed" | "failed" | "released" | "expired" | "abandoned">>, {
3712
+ name: string;
3713
+ tableName: "relay_tool_attempts";
3714
+ dataType: "string";
3715
+ data: "running" | "completed" | "failed" | "released" | "expired" | "abandoned";
3716
+ driverParam: string;
3717
+ notNull: true;
3718
+ hasDefault: false;
3719
+ isPrimaryKey: false;
3720
+ isAutoincrement: false;
3721
+ hasRuntimeDefault: false;
3722
+ enumValues: undefined;
3723
+ identity: undefined;
3724
+ generated: undefined;
3725
+ }>;
3726
+ workerId: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
3727
+ name: string;
3728
+ tableName: "relay_tool_attempts";
3729
+ dataType: "string";
3730
+ data: string;
3731
+ driverParam: string;
3732
+ notNull: false;
3733
+ hasDefault: false;
3734
+ isPrimaryKey: false;
3735
+ isAutoincrement: false;
3736
+ hasRuntimeDefault: false;
3737
+ enumValues: undefined;
3738
+ identity: undefined;
3739
+ generated: undefined;
3740
+ }>;
3741
+ claimExpiresAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").PgTimestampBuilder, {
3742
+ name: string;
3743
+ tableName: "relay_tool_attempts";
3744
+ dataType: "object date";
3745
+ data: Date;
3746
+ driverParam: string;
3747
+ notNull: false;
3748
+ hasDefault: false;
3749
+ isPrimaryKey: false;
3750
+ isAutoincrement: false;
3751
+ hasRuntimeDefault: false;
3752
+ enumValues: undefined;
3753
+ identity: undefined;
3754
+ generated: undefined;
3755
+ }>;
3756
+ error: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").PgTextBuilder<[string, ...string[]]>, {
3757
+ name: string;
3758
+ tableName: "relay_tool_attempts";
3759
+ dataType: "string";
3760
+ data: string;
3761
+ driverParam: string;
3762
+ notNull: false;
3763
+ hasDefault: false;
3764
+ isPrimaryKey: false;
3765
+ isAutoincrement: false;
3766
+ hasRuntimeDefault: false;
3767
+ enumValues: undefined;
3768
+ identity: undefined;
3769
+ generated: undefined;
3770
+ }>;
3771
+ createdAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").SetHasDefault<import("drizzle-orm/pg-core").SetNotNull<import("drizzle-orm/pg-core").PgTimestampBuilder>>, {
3772
+ name: string;
3773
+ tableName: "relay_tool_attempts";
3774
+ dataType: "object date";
3775
+ data: Date;
3776
+ driverParam: string;
3777
+ notNull: true;
3778
+ hasDefault: true;
3779
+ isPrimaryKey: false;
3780
+ isAutoincrement: false;
3781
+ hasRuntimeDefault: false;
3782
+ enumValues: undefined;
3783
+ identity: undefined;
3784
+ generated: undefined;
3785
+ }>;
3786
+ completedAt: import("drizzle-orm/pg-core").PgBuildColumn<"relay_tool_attempts", import("drizzle-orm/pg-core").PgTimestampBuilder, {
3787
+ name: string;
3788
+ tableName: "relay_tool_attempts";
3789
+ dataType: "object date";
3790
+ data: Date;
3791
+ driverParam: string;
3792
+ notNull: false;
3793
+ hasDefault: false;
3794
+ isPrimaryKey: false;
3795
+ isAutoincrement: false;
3796
+ hasRuntimeDefault: false;
3797
+ enumValues: undefined;
3798
+ identity: undefined;
3799
+ generated: undefined;
3800
+ }>;
3422
3801
  };
3423
3802
  dialect: "pg";
3424
3803
  }>;
@@ -27,10 +27,50 @@ declare const DuplicateToolResult_base: Schema.Class<DuplicateToolResult, Schema
27
27
  }>, import("effect/Cause").YieldableError>;
28
28
  export declare class DuplicateToolResult extends DuplicateToolResult_base {
29
29
  }
30
+ declare const ToolCallConflict_base: Schema.Class<ToolCallConflict, Schema.TaggedStruct<"ToolCallConflict", {
31
+ readonly id: Schema.brand<Schema.String, "Relay.ToolCallId"> & {
32
+ make: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => string & import("effect/Brand").Brand<"Relay.ToolCallId">;
33
+ };
34
+ }>, import("effect/Cause").YieldableError>;
35
+ export declare class ToolCallConflict extends ToolCallConflict_base {
36
+ }
37
+ declare const ToolCallTransitionRejected_base: Schema.Class<ToolCallTransitionRejected, Schema.TaggedStruct<"ToolCallTransitionRejected", {
38
+ readonly id: Schema.brand<Schema.String, "Relay.ToolCallId"> & {
39
+ make: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => string & import("effect/Brand").Brand<"Relay.ToolCallId">;
40
+ };
41
+ readonly message: Schema.String;
42
+ }>, import("effect/Cause").YieldableError>;
43
+ export declare class ToolCallTransitionRejected extends ToolCallTransitionRejected_base {
44
+ }
45
+ declare const ToolOutcomeConflict_base: Schema.Class<ToolOutcomeConflict, Schema.TaggedStruct<"ToolOutcomeConflict", {
46
+ readonly id: Schema.brand<Schema.String, "Relay.ToolCallId"> & {
47
+ make: (input: unknown, options?: import("effect/SchemaAST").ParseOptions) => string & import("effect/Brand").Brand<"Relay.ToolCallId">;
48
+ };
49
+ }>, import("effect/Cause").YieldableError>;
50
+ export declare class ToolOutcomeConflict extends ToolOutcomeConflict_base {
51
+ }
52
+ declare const ToolClaimRejected_base: Schema.Class<ToolClaimRejected, Schema.TaggedStruct<"ToolClaimRejected", {
53
+ readonly message: Schema.String;
54
+ }>, import("effect/Cause").YieldableError>;
55
+ export declare class ToolClaimRejected extends ToolClaimRejected_base {
56
+ }
30
57
  export interface ToolCallRecord {
31
58
  readonly executionId: Ids.ExecutionId;
32
59
  readonly call: Tool.Call;
60
+ readonly definition?: Tool.Definition | undefined;
61
+ readonly placement: Tool.Placement;
62
+ readonly state: Tool.CallState;
63
+ readonly waitId?: Ids.WaitId | undefined;
64
+ readonly idempotencyKey: string;
65
+ readonly availableAt: number;
66
+ readonly activeAttemptId?: Ids.ToolAttemptId | undefined;
67
+ readonly claimOwner?: string | undefined;
68
+ readonly claimedAt?: number | undefined;
69
+ readonly claimExpiresAt?: number | undefined;
70
+ readonly externalOutcome?: Tool.ExternalOutcome | undefined;
71
+ readonly externalOutcomeAt?: number | undefined;
33
72
  readonly createdAt: number;
73
+ readonly updatedAt: number;
34
74
  }
35
75
  export interface ToolResultRecord {
36
76
  readonly result: Tool.Result;
@@ -41,16 +81,100 @@ export interface RecordCallInput {
41
81
  readonly call: Tool.Call;
42
82
  readonly createdAt: number;
43
83
  }
84
+ export interface EnsureCallInput extends RecordCallInput {
85
+ readonly definition: Tool.Definition;
86
+ readonly placement: Tool.Placement;
87
+ }
88
+ export interface ToolAttemptRecord {
89
+ readonly id: Ids.ToolAttemptId;
90
+ readonly callId: Ids.ToolCallId;
91
+ readonly attemptNumber: number;
92
+ readonly state: Tool.AttemptState;
93
+ readonly workerId?: string;
94
+ readonly claimExpiresAt?: number;
95
+ readonly error?: string;
96
+ readonly createdAt: number;
97
+ readonly completedAt?: number;
98
+ }
99
+ export interface PrepareExternalWaitInput {
100
+ readonly callId: Ids.ToolCallId;
101
+ readonly waitId: Ids.WaitId;
102
+ readonly availableAt: number;
103
+ readonly updatedAt: number;
104
+ }
105
+ export interface BeginAttemptInput {
106
+ readonly callId: Ids.ToolCallId;
107
+ readonly startedAt: number;
108
+ }
109
+ export interface AcceptClientOutcomeInput {
110
+ readonly executionId: Ids.ExecutionId;
111
+ readonly callId: Ids.ToolCallId;
112
+ readonly outcome: Tool.ExternalOutcome;
113
+ readonly submittedAt: number;
114
+ }
115
+ export interface ClaimRemoteInput {
116
+ readonly queue: Tool.PlacementKey;
117
+ readonly workerId: Tool.WorkerId;
118
+ readonly now: number;
119
+ readonly claimExpiresAt: number;
120
+ }
121
+ export interface ReleaseRemoteInput {
122
+ readonly callId: Ids.ToolCallId;
123
+ readonly attemptId: Ids.ToolAttemptId;
124
+ readonly workerId: Tool.WorkerId;
125
+ readonly releasedAt: number;
126
+ readonly nextAvailableAt: number;
127
+ readonly error?: string;
128
+ }
129
+ export interface AcceptRemoteOutcomeInput {
130
+ readonly callId: Ids.ToolCallId;
131
+ readonly attemptId: Ids.ToolAttemptId;
132
+ readonly workerId: Tool.WorkerId;
133
+ readonly outcome: Tool.ExternalOutcome;
134
+ readonly submittedAt: number;
135
+ }
136
+ export interface AcceptedOutcome {
137
+ readonly call: ToolCallRecord;
138
+ readonly attempt: ToolAttemptRecord;
139
+ readonly duplicate: boolean;
140
+ }
141
+ export interface ToolWorkLease {
142
+ readonly call: ToolCallRecord & {
143
+ readonly definition: Tool.Definition;
144
+ };
145
+ readonly attempt: ToolAttemptRecord;
146
+ readonly queue: Tool.PlacementKey;
147
+ readonly workerId: Tool.WorkerId;
148
+ readonly claimExpiresAt: number;
149
+ readonly idempotencyKey: string;
150
+ }
151
+ export interface FailOpenForExecutionInput {
152
+ readonly executionId: Ids.ExecutionId;
153
+ readonly callIds?: ReadonlyArray<Ids.ToolCallId>;
154
+ readonly message: string;
155
+ readonly failedAt: number;
156
+ }
157
+ export type ToolCallStateError = ToolCallNotFound | ToolCallConflict | ToolCallTransitionRejected | ToolOutcomeConflict | ToolClaimRejected | ToolCallRepositoryError;
158
+ export declare const toolCallIdempotencyKey: (tenantId: Ids.TenantId, executionId: Ids.ExecutionId, callId: Ids.ToolCallId) => string;
44
159
  export interface RecordResultInput {
45
160
  readonly result: Tool.Result;
46
161
  readonly createdAt: number;
47
162
  }
48
163
  export interface Interface {
164
+ readonly ensureCall: (input: EnsureCallInput) => Effect.Effect<ToolCallRecord, ToolCallStateError>;
49
165
  readonly recordCall: (input: RecordCallInput) => Effect.Effect<ToolCallRecord, DuplicateToolCall | ToolCallRepositoryError>;
50
166
  readonly getCall: (id: Ids.ToolCallId) => Effect.Effect<ToolCallRecord | undefined, ToolCallRepositoryError>;
51
167
  readonly listCalls: (executionId: Ids.ExecutionId) => Effect.Effect<ReadonlyArray<ToolCallRecord>, ToolCallRepositoryError>;
52
168
  readonly recordResult: (input: RecordResultInput) => Effect.Effect<ToolResultRecord, ToolCallNotFound | DuplicateToolResult | ToolCallRepositoryError>;
53
169
  readonly getResult: (callId: Ids.ToolCallId) => Effect.Effect<ToolResultRecord | undefined, ToolCallRepositoryError>;
170
+ readonly prepareExternalWait: (input: PrepareExternalWaitInput) => Effect.Effect<ToolCallRecord, ToolCallStateError>;
171
+ readonly beginAttempt: (input: BeginAttemptInput) => Effect.Effect<ToolAttemptRecord, ToolCallStateError>;
172
+ readonly acceptClientOutcome: (input: AcceptClientOutcomeInput) => Effect.Effect<AcceptedOutcome, ToolCallStateError>;
173
+ readonly claimRemote: (input: ClaimRemoteInput) => Effect.Effect<ToolWorkLease | undefined, ToolCallStateError>;
174
+ readonly releaseRemote: (input: ReleaseRemoteInput) => Effect.Effect<ToolCallRecord, ToolCallStateError>;
175
+ readonly acceptRemoteOutcome: (input: AcceptRemoteOutcomeInput) => Effect.Effect<AcceptedOutcome, ToolCallStateError>;
176
+ readonly listAttempts: (callId: Ids.ToolCallId) => Effect.Effect<ReadonlyArray<ToolAttemptRecord>, ToolCallRepositoryError>;
177
+ readonly failOpenForExecution: (input: FailOpenForExecutionInput) => Effect.Effect<ReadonlyArray<ToolCallRecord>, ToolCallNotFound | ToolCallRepositoryError>;
54
178
  }
55
179
  declare const Service_base: Context.ServiceClass<Service, "@relayfx/store-sql/ToolCallRepository", Interface>;
56
180
  export declare class Service extends Service_base {
@@ -60,8 +184,33 @@ export declare const ToolCallRow: Schema.Struct<{
60
184
  readonly execution_id: Schema.String;
61
185
  readonly name: Schema.String;
62
186
  readonly input_json: Schema.Unknown;
187
+ readonly definition_json: Schema.NullishOr<Schema.Unknown>;
188
+ readonly placement_kind: Schema.String;
189
+ readonly placement_key: Schema.NullishOr<Schema.String>;
190
+ readonly state: Schema.String;
191
+ readonly wait_id: Schema.NullishOr<Schema.String>;
192
+ readonly idempotency_key: Schema.String;
193
+ readonly available_at: Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>;
194
+ readonly active_attempt_id: Schema.NullishOr<Schema.String>;
195
+ readonly claim_owner: Schema.NullishOr<Schema.String>;
196
+ readonly claimed_at: Schema.NullishOr<Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>>;
197
+ readonly claim_expires_at: Schema.NullishOr<Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>>;
198
+ readonly external_outcome_json: Schema.NullishOr<Schema.Unknown>;
199
+ readonly external_outcome_at: Schema.NullishOr<Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>>;
63
200
  readonly metadata_json: Schema.Unknown;
64
201
  readonly created_at: Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>;
202
+ readonly updated_at: Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>;
203
+ }>;
204
+ export declare const ToolAttemptRow: Schema.Struct<{
205
+ readonly id: Schema.String;
206
+ readonly tool_call_id: Schema.String;
207
+ readonly attempt_number: Schema.Union<readonly [Schema.Number, Schema.String, Schema.BigInt]>;
208
+ readonly state: Schema.String;
209
+ readonly worker_id: Schema.NullishOr<Schema.String>;
210
+ readonly claim_expires_at: Schema.NullishOr<Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>>;
211
+ readonly error: Schema.NullishOr<Schema.String>;
212
+ readonly created_at: Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>;
213
+ readonly completed_at: Schema.NullishOr<Schema.Union<readonly [Schema.Date, Schema.String, Schema.Number]>>;
65
214
  }>;
66
215
  export declare const ToolResultRow: Schema.Struct<{
67
216
  readonly tool_call_id: Schema.String;
@@ -72,10 +221,20 @@ export declare const ToolResultRow: Schema.Struct<{
72
221
  }>;
73
222
  export declare const layer: Layer.Layer<Service, never, SqlClient>;
74
223
  export declare const memoryLayer: Layer.Layer<Service, never, never>;
75
- export declare const testLayer: (implementation: Interface) => Layer.Layer<Service, never, never>;
224
+ type TestInterface = Pick<Interface, "recordCall" | "getCall" | "listCalls" | "recordResult" | "getResult"> & Partial<Interface>;
225
+ export declare const testLayer: (implementation: TestInterface) => Layer.Layer<Service, never, never>;
76
226
  export declare const recordCall: (input: RecordCallInput) => Effect.Effect<ToolCallRecord, ToolCallRepositoryError | DuplicateToolCall, Service>;
77
227
  export declare const getCall: (id: string & import("effect/Brand").Brand<"Relay.ToolCallId">) => Effect.Effect<ToolCallRecord | undefined, ToolCallRepositoryError, Service>;
78
228
  export declare const listCalls: (executionId: string & import("effect/Brand").Brand<"Relay.ExecutionId">) => Effect.Effect<readonly ToolCallRecord[], ToolCallRepositoryError, Service>;
79
229
  export declare const recordResult: (input: RecordResultInput) => Effect.Effect<ToolResultRecord, ToolCallRepositoryError | ToolCallNotFound | DuplicateToolResult, Service>;
80
230
  export declare const getResult: (callId: string & import("effect/Brand").Brand<"Relay.ToolCallId">) => Effect.Effect<ToolResultRecord | undefined, ToolCallRepositoryError, Service>;
231
+ export declare const ensureCall: (input: EnsureCallInput) => Effect.Effect<ToolCallRecord, ToolCallStateError, Service>;
232
+ export declare const prepareExternalWait: (input: PrepareExternalWaitInput) => Effect.Effect<ToolCallRecord, ToolCallStateError, Service>;
233
+ export declare const beginAttempt: (input: BeginAttemptInput) => Effect.Effect<ToolAttemptRecord, ToolCallStateError, Service>;
234
+ export declare const acceptClientOutcome: (input: AcceptClientOutcomeInput) => Effect.Effect<AcceptedOutcome, ToolCallStateError, Service>;
235
+ export declare const claimRemote: (input: ClaimRemoteInput) => Effect.Effect<ToolWorkLease | undefined, ToolCallStateError, Service>;
236
+ export declare const releaseRemote: (input: ReleaseRemoteInput) => Effect.Effect<ToolCallRecord, ToolCallStateError, Service>;
237
+ export declare const acceptRemoteOutcome: (input: AcceptRemoteOutcomeInput) => Effect.Effect<AcceptedOutcome, ToolCallStateError, Service>;
238
+ export declare const listAttempts: (callId: string & import("effect/Brand").Brand<"Relay.ToolCallId">) => Effect.Effect<readonly ToolAttemptRecord[], ToolCallRepositoryError, Service>;
239
+ export declare const failOpenForExecution: (input: FailOpenForExecutionInput) => Effect.Effect<readonly ToolCallRecord[], ToolCallRepositoryError | ToolCallNotFound, Service>;
81
240
  export {};