@outlit/tools 2.2.2 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -47,7 +47,11 @@ var publicToolNames = [
47
47
  "outlit_list_identity_merge_suggestions",
48
48
  "outlit_reject_identity_merge_suggestion",
49
49
  "outlit_merge_customers",
50
- "outlit_get_customer_merge_status"
50
+ "outlit_get_customer_merge_status",
51
+ "outlit_list_scoped_repairs",
52
+ "outlit_preview_scoped_repair",
53
+ "outlit_execute_scoped_repair",
54
+ "outlit_verify_scoped_repair"
51
55
  ];
52
56
  var publicToolContracts = {
53
57
  "outlit_list_customers": {
@@ -56,7 +60,7 @@ var publicToolContracts = {
56
60
  "commandVersion": 1,
57
61
  "ownerDomain": "customers",
58
62
  "title": "List Customers",
59
- "description": "Browse and filter customers. Use this to find customers by billing status, activity recency, revenue, or name. Returns a paginated list with summary info (MRR, last activity, status).",
63
+ "description": "Browse and filter customers. Use this to find customers by billing status, activity recency, revenue, or name. Returns a paginated list with summary info (MRR, last activity, status). currentMrr is in the billing provider's units for the customer's currency, which the result doesn't name. For USD, EUR, GBP and CAD this is cents: divide by 100 (e.g. 1234500 is $12,345 MRR, USD). Other currencies follow the provider's amount rules. ARR is 12 \xD7 currentMrr in the same units.",
60
64
  "annotations": {
61
65
  "readOnlyHint": true,
62
66
  "destructiveHint": false
@@ -103,12 +107,12 @@ var publicToolContracts = {
103
107
  ]
104
108
  },
105
109
  "mrrAbove": {
106
- "description": "Minimum MRR in cents (e.g., 10000 = $100)",
110
+ "description": "Minimum MRR, in currentMrr's units (10000 is $100 for a customer billed in USD)",
107
111
  "type": "number",
108
112
  "minimum": 0
109
113
  },
110
114
  "mrrBelow": {
111
- "description": "Maximum MRR in cents",
115
+ "description": "Maximum MRR, in currentMrr's units",
112
116
  "type": "number",
113
117
  "minimum": 0
114
118
  },
@@ -271,7 +275,8 @@ var publicToolContracts = {
271
275
  {
272
276
  "type": "null"
273
277
  }
274
- ]
278
+ ],
279
+ "description": "Monthly recurring revenue as an integer amount in the billing provider's units for the customer's currency, which this result doesn't name. For USD, EUR, GBP and CAD this is cents: divide by 100 (e.g. 1234500 is $12,345, USD). Other currencies follow the provider's amount rules (Stripe's currency docs), so don't assume a divisor for them. ARR is 12 \xD7 this value in the same units. Null unless mrrCalculationStatus is calculated."
275
280
  },
276
281
  "mrrCalculationStatus": {
277
282
  "type": "string",
@@ -856,7 +861,7 @@ var publicToolContracts = {
856
861
  "commandVersion": 1,
857
862
  "ownerDomain": "customers",
858
863
  "title": "Get Customer",
859
- "description": "Get full details for a single customer. Optionally include users, revenue, recent activity, engagement metrics, or company enrichment.",
864
+ "description": "Get full details for a single customer. Optionally include users, revenue, recent activity, engagement metrics, or company enrichment. Revenue amounts (currentMrr, lifetimeRevenue) are in the billing provider's units for the customer's currency, which the result doesn't name. For USD, EUR, GBP and CAD these are cents: divide by 100 (e.g. 1234500 is $12,345, USD). Other currencies follow the provider's amount rules. ARR is 12 \xD7 currentMrr in the same units.",
860
865
  "annotations": {
861
866
  "readOnlyHint": true,
862
867
  "destructiveHint": false
@@ -1126,7 +1131,8 @@ var publicToolContracts = {
1126
1131
  {
1127
1132
  "type": "null"
1128
1133
  }
1129
- ]
1134
+ ],
1135
+ "description": "Monthly recurring revenue as an integer amount in the billing provider's units for the customer's currency, which this result doesn't name. For USD, EUR, GBP and CAD this is cents: divide by 100 (e.g. 1234500 is $12,345, USD). Other currencies follow the provider's amount rules (Stripe's currency docs), so don't assume a divisor for them. ARR is 12 \xD7 this value in the same units. Null unless mrrCalculationStatus is calculated."
1130
1136
  },
1131
1137
  "mrrCalculationStatus": {
1132
1138
  "type": "string",
@@ -1137,7 +1143,8 @@ var publicToolContracts = {
1137
1143
  ]
1138
1144
  },
1139
1145
  "lifetimeRevenue": {
1140
- "type": "number"
1146
+ "type": "number",
1147
+ "description": "Lifetime revenue in the billing provider's units for the currency it was billed in, like currentMrr: cents for USD, EUR, GBP and CAD, so divide by 100. Other currencies follow the provider's amount rules, so don't assume a divisor for them."
1141
1148
  },
1142
1149
  "activeSubscriptions": {
1143
1150
  "type": "integer",
@@ -4598,6 +4605,48 @@ var publicToolContracts = {
4598
4605
  "score": {
4599
4606
  "type": "number"
4600
4607
  },
4608
+ "customer": {
4609
+ "description": "The customer this result belongs to. Null when it can't be attributed to exactly one customer the caller can read.",
4610
+ "anyOf": [
4611
+ {
4612
+ "type": "object",
4613
+ "properties": {
4614
+ "id": {
4615
+ "type": "string"
4616
+ },
4617
+ "name": {
4618
+ "anyOf": [
4619
+ {
4620
+ "type": "string"
4621
+ },
4622
+ {
4623
+ "type": "null"
4624
+ }
4625
+ ]
4626
+ },
4627
+ "domain": {
4628
+ "anyOf": [
4629
+ {
4630
+ "type": "string"
4631
+ },
4632
+ {
4633
+ "type": "null"
4634
+ }
4635
+ ]
4636
+ }
4637
+ },
4638
+ "required": [
4639
+ "id",
4640
+ "name",
4641
+ "domain"
4642
+ ],
4643
+ "additionalProperties": false
4644
+ },
4645
+ {
4646
+ "type": "null"
4647
+ }
4648
+ ]
4649
+ },
4601
4650
  "matchCount": {
4602
4651
  "type": "integer",
4603
4652
  "minimum": 0,
@@ -5128,6 +5177,48 @@ var publicToolContracts = {
5128
5177
  "sourceId": {
5129
5178
  "type": "string"
5130
5179
  },
5180
+ "customer": {
5181
+ "description": "The customer this result belongs to. Null when it can't be attributed to exactly one customer the caller can read.",
5182
+ "anyOf": [
5183
+ {
5184
+ "type": "object",
5185
+ "properties": {
5186
+ "id": {
5187
+ "type": "string"
5188
+ },
5189
+ "name": {
5190
+ "anyOf": [
5191
+ {
5192
+ "type": "string"
5193
+ },
5194
+ {
5195
+ "type": "null"
5196
+ }
5197
+ ]
5198
+ },
5199
+ "domain": {
5200
+ "anyOf": [
5201
+ {
5202
+ "type": "string"
5203
+ },
5204
+ {
5205
+ "type": "null"
5206
+ }
5207
+ ]
5208
+ }
5209
+ },
5210
+ "required": [
5211
+ "id",
5212
+ "name",
5213
+ "domain"
5214
+ ],
5215
+ "additionalProperties": false
5216
+ },
5217
+ {
5218
+ "type": "null"
5219
+ }
5220
+ ]
5221
+ },
5131
5222
  "occurredAt": {
5132
5223
  "anyOf": [
5133
5224
  {
@@ -12465,7 +12556,8 @@ var publicToolContracts = {
12465
12556
  {
12466
12557
  "type": "null"
12467
12558
  }
12468
- ]
12559
+ ],
12560
+ "description": "Annual recurring revenue (12 \xD7 billing MRR) in the billing provider's units for the currency field. For USD, EUR, GBP and CAD this is cents: divide by 100 (e.g. 1234500 is $12,345, USD). For other currencies, use the provider's amount rules for that currency (Stripe's currency docs) rather than assuming a divisor."
12469
12561
  },
12470
12562
  "currency": {
12471
12563
  "anyOf": [
@@ -12765,7 +12857,8 @@ var publicToolContracts = {
12765
12857
  {
12766
12858
  "type": "null"
12767
12859
  }
12768
- ]
12860
+ ],
12861
+ "description": "Annual recurring revenue (12 \xD7 billing MRR) in the billing provider's units for the currency field. For USD, EUR, GBP and CAD this is cents: divide by 100 (e.g. 1234500 is $12,345, USD). For other currencies, use the provider's amount rules for that currency (Stripe's currency docs) rather than assuming a divisor."
12769
12862
  },
12770
12863
  "currency": {
12771
12864
  "anyOf": [
@@ -13377,6 +13470,16 @@ var publicToolContracts = {
13377
13470
  }
13378
13471
  ]
13379
13472
  },
13473
+ "billingStatus": {
13474
+ "anyOf": [
13475
+ {
13476
+ "type": "string"
13477
+ },
13478
+ {
13479
+ "type": "null"
13480
+ }
13481
+ ]
13482
+ },
13380
13483
  "identifierCount": {
13381
13484
  "type": "integer",
13382
13485
  "minimum": 0,
@@ -13447,6 +13550,16 @@ var publicToolContracts = {
13447
13550
  }
13448
13551
  ]
13449
13552
  },
13553
+ "billingStatus": {
13554
+ "anyOf": [
13555
+ {
13556
+ "type": "string"
13557
+ },
13558
+ {
13559
+ "type": "null"
13560
+ }
13561
+ ]
13562
+ },
13450
13563
  "identifierCount": {
13451
13564
  "type": "integer",
13452
13565
  "minimum": 0,
@@ -13598,6 +13711,19 @@ var publicToolContracts = {
13598
13711
  "type": "integer",
13599
13712
  "minimum": 0,
13600
13713
  "maximum": 9007199254740991
13714
+ },
13715
+ "analyticsAvailable": {
13716
+ "type": "boolean"
13717
+ },
13718
+ "opportunities": {
13719
+ "type": "integer",
13720
+ "minimum": 0,
13721
+ "maximum": 9007199254740991
13722
+ },
13723
+ "revenueSnapshots": {
13724
+ "type": "integer",
13725
+ "minimum": 0,
13726
+ "maximum": 9007199254740991
13601
13727
  }
13602
13728
  },
13603
13729
  "required": [
@@ -13615,321 +13741,1271 @@ var publicToolContracts = {
13615
13741
  ],
13616
13742
  "additionalProperties": false
13617
13743
  },
13618
- "latestJob": {
13619
- "anyOf": [
13620
- {
13744
+ "scope": {
13745
+ "type": "object",
13746
+ "properties": {
13747
+ "survivor": {
13621
13748
  "type": "object",
13622
13749
  "properties": {
13623
- "id": {
13750
+ "shape": {
13624
13751
  "type": "string",
13625
- "minLength": 1,
13626
- "maxLength": 191
13752
+ "enum": [
13753
+ "provisional",
13754
+ "established",
13755
+ "unknown"
13756
+ ]
13627
13757
  },
13628
- "operationId": {
13758
+ "billingStatus": {
13629
13759
  "anyOf": [
13630
13760
  {
13631
- "type": "string",
13632
- "minLength": 1,
13633
- "maxLength": 191
13761
+ "type": "string"
13634
13762
  },
13635
13763
  {
13636
13764
  "type": "null"
13637
13765
  }
13638
- ],
13639
- "description": "Pass to outlit_get_customer_merge_status. Null when this job has no matching tracked operation."
13766
+ ]
13640
13767
  },
13641
- "status": {
13768
+ "hasIndependentCrmIdentity": {
13769
+ "type": "boolean"
13770
+ },
13771
+ "hasIndependentStripeIdentity": {
13772
+ "type": "boolean"
13773
+ }
13774
+ },
13775
+ "required": [
13776
+ "shape",
13777
+ "billingStatus",
13778
+ "hasIndependentCrmIdentity",
13779
+ "hasIndependentStripeIdentity"
13780
+ ],
13781
+ "additionalProperties": false
13782
+ },
13783
+ "duplicate": {
13784
+ "type": "object",
13785
+ "properties": {
13786
+ "shape": {
13642
13787
  "type": "string",
13643
13788
  "enum": [
13644
- "QUEUED",
13645
- "RUNNING",
13646
- "COMPLETED",
13647
- "FAILED"
13789
+ "provisional",
13790
+ "established",
13791
+ "unknown"
13648
13792
  ]
13649
13793
  },
13650
- "createdAt": {
13651
- "type": "string",
13652
- "format": "date-time",
13653
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
13794
+ "billingStatus": {
13795
+ "anyOf": [
13796
+ {
13797
+ "type": "string"
13798
+ },
13799
+ {
13800
+ "type": "null"
13801
+ }
13802
+ ]
13654
13803
  },
13655
- "updatedAt": {
13656
- "type": "string",
13657
- "format": "date-time",
13658
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
13804
+ "hasIndependentCrmIdentity": {
13805
+ "type": "boolean"
13806
+ },
13807
+ "hasIndependentStripeIdentity": {
13808
+ "type": "boolean"
13659
13809
  }
13660
13810
  },
13661
13811
  "required": [
13662
- "id",
13663
- "operationId",
13664
- "status",
13665
- "createdAt",
13666
- "updatedAt"
13812
+ "shape",
13813
+ "billingStatus",
13814
+ "hasIndependentCrmIdentity",
13815
+ "hasIndependentStripeIdentity"
13667
13816
  ],
13668
13817
  "additionalProperties": false
13669
13818
  },
13670
- {
13671
- "type": "null"
13672
- }
13673
- ]
13674
- },
13675
- "jevEvidence": {
13676
- "description": "Jev advisory model evidence scoped to this suggestion's customers. Uncalibrated and never part of eligibility, confidence, or recommended action.",
13677
- "anyOf": [
13678
- {
13819
+ "payingAccountsAffected": {
13820
+ "anyOf": [
13821
+ {
13822
+ "type": "integer",
13823
+ "minimum": 0,
13824
+ "maximum": 9007199254740991
13825
+ },
13826
+ {
13827
+ "type": "null"
13828
+ }
13829
+ ]
13830
+ },
13831
+ "availability": {
13679
13832
  "type": "object",
13680
13833
  "properties": {
13681
- "computedAt": {
13682
- "type": "string",
13683
- "format": "date-time",
13684
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
13685
- },
13686
- "expiresAt": {
13687
- "type": "string",
13688
- "format": "date-time",
13689
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
13834
+ "currentCounts": {
13835
+ "type": "boolean"
13690
13836
  },
13691
- "expired": {
13837
+ "analytics": {
13692
13838
  "type": "boolean"
13839
+ }
13840
+ },
13841
+ "required": [
13842
+ "currentCounts",
13843
+ "analytics"
13844
+ ],
13845
+ "additionalProperties": false
13846
+ },
13847
+ "moves": {
13848
+ "type": "object",
13849
+ "properties": {
13850
+ "contacts": {
13851
+ "type": "integer",
13852
+ "minimum": 0,
13853
+ "maximum": 9007199254740991
13693
13854
  },
13694
- "pairs": {
13695
- "minItems": 1,
13696
- "type": "array",
13697
- "items": {
13698
- "type": "object",
13699
- "properties": {
13700
- "incoming": {
13701
- "type": "object",
13702
- "properties": {
13703
- "id": {
13704
- "type": "string",
13705
- "minLength": 1,
13706
- "maxLength": 191
13707
- },
13708
- "name": {
13709
- "type": "string",
13710
- "minLength": 1,
13711
- "maxLength": 500
13712
- },
13713
- "domain": {
13714
- "anyOf": [
13715
- {
13716
- "type": "string",
13717
- "minLength": 1,
13718
- "maxLength": 500
13719
- },
13720
- {
13721
- "type": "null"
13722
- }
13723
- ]
13724
- },
13725
- "type": {
13726
- "type": "string",
13727
- "enum": [
13728
- "COMPANY",
13729
- "INDIVIDUAL"
13730
- ]
13731
- },
13732
- "status": {
13733
- "anyOf": [
13734
- {
13735
- "type": "string",
13736
- "enum": [
13737
- "PROVISIONAL",
13738
- "ACTIVE",
13739
- "CHURNED",
13740
- "MERGED"
13741
- ]
13742
- },
13743
- {
13744
- "type": "null"
13745
- }
13746
- ]
13747
- },
13748
- "identifierCount": {
13749
- "type": "integer",
13750
- "minimum": 0,
13751
- "maximum": 9007199254740991
13752
- },
13753
- "contactCount": {
13754
- "type": "integer",
13755
- "minimum": 0,
13756
- "maximum": 9007199254740991
13757
- }
13758
- },
13759
- "required": [
13760
- "id",
13761
- "name",
13762
- "domain",
13763
- "type",
13764
- "status",
13765
- "identifierCount",
13766
- "contactCount"
13767
- ],
13768
- "additionalProperties": false
13769
- },
13770
- "candidate": {
13771
- "type": "object",
13772
- "properties": {
13773
- "id": {
13774
- "type": "string",
13775
- "minLength": 1,
13776
- "maxLength": 191
13777
- },
13778
- "name": {
13779
- "type": "string",
13780
- "minLength": 1,
13781
- "maxLength": 500
13782
- },
13783
- "domain": {
13784
- "anyOf": [
13785
- {
13786
- "type": "string",
13787
- "minLength": 1,
13788
- "maxLength": 500
13789
- },
13790
- {
13791
- "type": "null"
13792
- }
13793
- ]
13794
- },
13795
- "type": {
13796
- "type": "string",
13797
- "enum": [
13798
- "COMPANY",
13799
- "INDIVIDUAL"
13800
- ]
13801
- },
13802
- "status": {
13803
- "anyOf": [
13804
- {
13805
- "type": "string",
13806
- "enum": [
13807
- "PROVISIONAL",
13808
- "ACTIVE",
13809
- "CHURNED",
13810
- "MERGED"
13811
- ]
13812
- },
13813
- {
13814
- "type": "null"
13815
- }
13816
- ]
13817
- },
13818
- "identifierCount": {
13819
- "type": "integer",
13820
- "minimum": 0,
13821
- "maximum": 9007199254740991
13822
- },
13823
- "contactCount": {
13824
- "type": "integer",
13825
- "minimum": 0,
13826
- "maximum": 9007199254740991
13827
- }
13828
- },
13829
- "required": [
13830
- "id",
13831
- "name",
13832
- "domain",
13833
- "type",
13834
- "status",
13835
- "identifierCount",
13836
- "contactCount"
13837
- ],
13838
- "additionalProperties": false
13839
- },
13840
- "pSameEntity": {
13841
- "type": "number",
13842
- "minimum": 0,
13843
- "maximum": 1
13844
- },
13845
- "relation": {
13846
- "anyOf": [
13847
- {
13848
- "type": "string",
13849
- "minLength": 1,
13850
- "maxLength": 100
13851
- },
13852
- {
13853
- "type": "null"
13854
- }
13855
- ]
13856
- },
13857
- "relationProbability": {
13858
- "anyOf": [
13859
- {
13860
- "type": "number",
13861
- "minimum": 0,
13862
- "maximum": 1
13863
- },
13864
- {
13865
- "type": "null"
13866
- }
13867
- ]
13868
- }
13855
+ "analyticsEvents": {
13856
+ "anyOf": [
13857
+ {
13858
+ "type": "integer",
13859
+ "minimum": 0,
13860
+ "maximum": 9007199254740991
13869
13861
  },
13870
- "required": [
13871
- "incoming",
13872
- "candidate",
13873
- "pSameEntity",
13874
- "relation",
13875
- "relationProbability"
13876
- ],
13877
- "additionalProperties": false
13878
- }
13862
+ {
13863
+ "type": "null"
13864
+ }
13865
+ ]
13866
+ },
13867
+ "analyticsDimensions": {
13868
+ "anyOf": [
13869
+ {
13870
+ "type": "integer",
13871
+ "minimum": 0,
13872
+ "maximum": 9007199254740991
13873
+ },
13874
+ {
13875
+ "type": "null"
13876
+ }
13877
+ ]
13878
+ },
13879
+ "billingEvents": {
13880
+ "type": "integer",
13881
+ "minimum": 0,
13882
+ "maximum": 9007199254740991
13883
+ },
13884
+ "revenueSnapshots": {
13885
+ "anyOf": [
13886
+ {
13887
+ "type": "integer",
13888
+ "minimum": 0,
13889
+ "maximum": 9007199254740991
13890
+ },
13891
+ {
13892
+ "type": "null"
13893
+ }
13894
+ ]
13895
+ },
13896
+ "calls": {
13897
+ "type": "integer",
13898
+ "minimum": 0,
13899
+ "maximum": 9007199254740991
13900
+ },
13901
+ "facts": {
13902
+ "type": "integer",
13903
+ "minimum": 0,
13904
+ "maximum": 9007199254740991
13905
+ },
13906
+ "opportunities": {
13907
+ "anyOf": [
13908
+ {
13909
+ "type": "integer",
13910
+ "minimum": 0,
13911
+ "maximum": 9007199254740991
13912
+ },
13913
+ {
13914
+ "type": "null"
13915
+ }
13916
+ ]
13917
+ },
13918
+ "tickets": {
13919
+ "type": "integer",
13920
+ "minimum": 0,
13921
+ "maximum": 9007199254740991
13879
13922
  }
13880
13923
  },
13881
13924
  "required": [
13882
- "computedAt",
13883
- "expiresAt",
13884
- "expired",
13885
- "pairs"
13925
+ "contacts",
13926
+ "analyticsEvents",
13927
+ "analyticsDimensions",
13928
+ "billingEvents",
13929
+ "revenueSnapshots",
13930
+ "calls",
13931
+ "facts",
13932
+ "opportunities",
13933
+ "tickets"
13886
13934
  ],
13887
13935
  "additionalProperties": false
13888
13936
  },
13937
+ "conflicts": {
13938
+ "type": "array",
13939
+ "items": {
13940
+ "type": "object",
13941
+ "properties": {
13942
+ "code": {
13943
+ "type": "string"
13944
+ },
13945
+ "message": {
13946
+ "type": "string"
13947
+ },
13948
+ "scope": {
13949
+ "type": "string"
13950
+ },
13951
+ "sourceIdentities": {
13952
+ "type": "array",
13953
+ "items": {
13954
+ "type": "string"
13955
+ }
13956
+ },
13957
+ "survivorIdentities": {
13958
+ "type": "array",
13959
+ "items": {
13960
+ "type": "string"
13961
+ }
13962
+ }
13963
+ },
13964
+ "required": [
13965
+ "code",
13966
+ "message",
13967
+ "scope",
13968
+ "sourceIdentities",
13969
+ "survivorIdentities"
13970
+ ],
13971
+ "additionalProperties": false
13972
+ }
13973
+ },
13974
+ "supportingEvidence": {
13975
+ "type": "array",
13976
+ "items": {
13977
+ "type": "string"
13978
+ }
13979
+ }
13980
+ },
13981
+ "required": [
13982
+ "survivor",
13983
+ "duplicate",
13984
+ "payingAccountsAffected",
13985
+ "availability",
13986
+ "moves",
13987
+ "conflicts",
13988
+ "supportingEvidence"
13989
+ ],
13990
+ "additionalProperties": false
13991
+ },
13992
+ "mergeBlockedReason": {
13993
+ "anyOf": [
13994
+ {
13995
+ "type": "string"
13996
+ },
13997
+ {
13998
+ "type": "null"
13999
+ }
14000
+ ]
14001
+ },
14002
+ "reviewedPairOptions": {
14003
+ "type": "array",
14004
+ "items": {
14005
+ "type": "array",
14006
+ "prefixItems": [
14007
+ {
14008
+ "type": "string"
14009
+ },
14010
+ {
14011
+ "type": "string"
14012
+ }
14013
+ ]
14014
+ }
14015
+ },
14016
+ "candidateCustomers": {
14017
+ "type": "array",
14018
+ "items": {
14019
+ "type": "object",
14020
+ "properties": {
14021
+ "id": {
14022
+ "type": "string",
14023
+ "minLength": 1,
14024
+ "maxLength": 191
14025
+ },
14026
+ "name": {
14027
+ "type": "string",
14028
+ "minLength": 1,
14029
+ "maxLength": 500
14030
+ },
14031
+ "domain": {
14032
+ "anyOf": [
14033
+ {
14034
+ "type": "string",
14035
+ "minLength": 1,
14036
+ "maxLength": 500
14037
+ },
14038
+ {
14039
+ "type": "null"
14040
+ }
14041
+ ]
14042
+ },
14043
+ "type": {
14044
+ "type": "string",
14045
+ "enum": [
14046
+ "COMPANY",
14047
+ "INDIVIDUAL"
14048
+ ]
14049
+ },
14050
+ "status": {
14051
+ "anyOf": [
14052
+ {
14053
+ "type": "string",
14054
+ "enum": [
14055
+ "PROVISIONAL",
14056
+ "ACTIVE",
14057
+ "CHURNED",
14058
+ "MERGED"
14059
+ ]
14060
+ },
14061
+ {
14062
+ "type": "null"
14063
+ }
14064
+ ]
14065
+ },
14066
+ "billingStatus": {
14067
+ "anyOf": [
14068
+ {
14069
+ "type": "string"
14070
+ },
14071
+ {
14072
+ "type": "null"
14073
+ }
14074
+ ]
14075
+ },
14076
+ "identifierCount": {
14077
+ "type": "integer",
14078
+ "minimum": 0,
14079
+ "maximum": 9007199254740991
14080
+ },
14081
+ "contactCount": {
14082
+ "type": "integer",
14083
+ "minimum": 0,
14084
+ "maximum": 9007199254740991
14085
+ }
14086
+ },
14087
+ "required": [
14088
+ "id",
14089
+ "name",
14090
+ "domain",
14091
+ "type",
14092
+ "status",
14093
+ "identifierCount",
14094
+ "contactCount"
14095
+ ],
14096
+ "additionalProperties": false
14097
+ }
14098
+ },
14099
+ "impactScope": {
14100
+ "type": "string",
14101
+ "enum": [
14102
+ "single_source",
14103
+ "cluster_sources"
14104
+ ]
14105
+ },
14106
+ "latestJob": {
14107
+ "anyOf": [
14108
+ {
14109
+ "type": "object",
14110
+ "properties": {
14111
+ "id": {
14112
+ "type": "string",
14113
+ "minLength": 1,
14114
+ "maxLength": 191
14115
+ },
14116
+ "operationId": {
14117
+ "anyOf": [
14118
+ {
14119
+ "type": "string",
14120
+ "minLength": 1,
14121
+ "maxLength": 191
14122
+ },
14123
+ {
14124
+ "type": "null"
14125
+ }
14126
+ ],
14127
+ "description": "Pass to outlit_get_customer_merge_status. Null when this job has no matching tracked operation."
14128
+ },
14129
+ "status": {
14130
+ "type": "string",
14131
+ "enum": [
14132
+ "QUEUED",
14133
+ "RUNNING",
14134
+ "COMPLETED",
14135
+ "FAILED"
14136
+ ]
14137
+ },
14138
+ "createdAt": {
14139
+ "type": "string",
14140
+ "format": "date-time",
14141
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
14142
+ },
14143
+ "updatedAt": {
14144
+ "type": "string",
14145
+ "format": "date-time",
14146
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
14147
+ }
14148
+ },
14149
+ "required": [
14150
+ "id",
14151
+ "operationId",
14152
+ "status",
14153
+ "createdAt",
14154
+ "updatedAt"
14155
+ ],
14156
+ "additionalProperties": false
14157
+ },
14158
+ {
14159
+ "type": "null"
14160
+ }
14161
+ ]
14162
+ },
14163
+ "jevEvidence": {
14164
+ "description": "Jev advisory model evidence scoped to this suggestion's customers. Uncalibrated and never part of eligibility, confidence, or recommended action.",
14165
+ "anyOf": [
14166
+ {
14167
+ "type": "object",
14168
+ "properties": {
14169
+ "computedAt": {
14170
+ "type": "string",
14171
+ "format": "date-time",
14172
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
14173
+ },
14174
+ "expiresAt": {
14175
+ "type": "string",
14176
+ "format": "date-time",
14177
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"
14178
+ },
14179
+ "expired": {
14180
+ "type": "boolean"
14181
+ },
14182
+ "pairs": {
14183
+ "minItems": 1,
14184
+ "type": "array",
14185
+ "items": {
14186
+ "type": "object",
14187
+ "properties": {
14188
+ "incoming": {
14189
+ "type": "object",
14190
+ "properties": {
14191
+ "id": {
14192
+ "type": "string",
14193
+ "minLength": 1,
14194
+ "maxLength": 191
14195
+ },
14196
+ "name": {
14197
+ "type": "string",
14198
+ "minLength": 1,
14199
+ "maxLength": 500
14200
+ },
14201
+ "domain": {
14202
+ "anyOf": [
14203
+ {
14204
+ "type": "string",
14205
+ "minLength": 1,
14206
+ "maxLength": 500
14207
+ },
14208
+ {
14209
+ "type": "null"
14210
+ }
14211
+ ]
14212
+ },
14213
+ "type": {
14214
+ "type": "string",
14215
+ "enum": [
14216
+ "COMPANY",
14217
+ "INDIVIDUAL"
14218
+ ]
14219
+ },
14220
+ "status": {
14221
+ "anyOf": [
14222
+ {
14223
+ "type": "string",
14224
+ "enum": [
14225
+ "PROVISIONAL",
14226
+ "ACTIVE",
14227
+ "CHURNED",
14228
+ "MERGED"
14229
+ ]
14230
+ },
14231
+ {
14232
+ "type": "null"
14233
+ }
14234
+ ]
14235
+ },
14236
+ "billingStatus": {
14237
+ "anyOf": [
14238
+ {
14239
+ "type": "string"
14240
+ },
14241
+ {
14242
+ "type": "null"
14243
+ }
14244
+ ]
14245
+ },
14246
+ "identifierCount": {
14247
+ "type": "integer",
14248
+ "minimum": 0,
14249
+ "maximum": 9007199254740991
14250
+ },
14251
+ "contactCount": {
14252
+ "type": "integer",
14253
+ "minimum": 0,
14254
+ "maximum": 9007199254740991
14255
+ }
14256
+ },
14257
+ "required": [
14258
+ "id",
14259
+ "name",
14260
+ "domain",
14261
+ "type",
14262
+ "status",
14263
+ "identifierCount",
14264
+ "contactCount"
14265
+ ],
14266
+ "additionalProperties": false
14267
+ },
14268
+ "candidate": {
14269
+ "type": "object",
14270
+ "properties": {
14271
+ "id": {
14272
+ "type": "string",
14273
+ "minLength": 1,
14274
+ "maxLength": 191
14275
+ },
14276
+ "name": {
14277
+ "type": "string",
14278
+ "minLength": 1,
14279
+ "maxLength": 500
14280
+ },
14281
+ "domain": {
14282
+ "anyOf": [
14283
+ {
14284
+ "type": "string",
14285
+ "minLength": 1,
14286
+ "maxLength": 500
14287
+ },
14288
+ {
14289
+ "type": "null"
14290
+ }
14291
+ ]
14292
+ },
14293
+ "type": {
14294
+ "type": "string",
14295
+ "enum": [
14296
+ "COMPANY",
14297
+ "INDIVIDUAL"
14298
+ ]
14299
+ },
14300
+ "status": {
14301
+ "anyOf": [
14302
+ {
14303
+ "type": "string",
14304
+ "enum": [
14305
+ "PROVISIONAL",
14306
+ "ACTIVE",
14307
+ "CHURNED",
14308
+ "MERGED"
14309
+ ]
14310
+ },
14311
+ {
14312
+ "type": "null"
14313
+ }
14314
+ ]
14315
+ },
14316
+ "billingStatus": {
14317
+ "anyOf": [
14318
+ {
14319
+ "type": "string"
14320
+ },
14321
+ {
14322
+ "type": "null"
14323
+ }
14324
+ ]
14325
+ },
14326
+ "identifierCount": {
14327
+ "type": "integer",
14328
+ "minimum": 0,
14329
+ "maximum": 9007199254740991
14330
+ },
14331
+ "contactCount": {
14332
+ "type": "integer",
14333
+ "minimum": 0,
14334
+ "maximum": 9007199254740991
14335
+ }
14336
+ },
14337
+ "required": [
14338
+ "id",
14339
+ "name",
14340
+ "domain",
14341
+ "type",
14342
+ "status",
14343
+ "identifierCount",
14344
+ "contactCount"
14345
+ ],
14346
+ "additionalProperties": false
14347
+ },
14348
+ "pSameEntity": {
14349
+ "type": "number",
14350
+ "minimum": 0,
14351
+ "maximum": 1
14352
+ },
14353
+ "relation": {
14354
+ "anyOf": [
14355
+ {
14356
+ "type": "string",
14357
+ "minLength": 1,
14358
+ "maxLength": 100
14359
+ },
14360
+ {
14361
+ "type": "null"
14362
+ }
14363
+ ]
14364
+ },
14365
+ "relationProbability": {
14366
+ "anyOf": [
14367
+ {
14368
+ "type": "number",
14369
+ "minimum": 0,
14370
+ "maximum": 1
14371
+ },
14372
+ {
14373
+ "type": "null"
14374
+ }
14375
+ ]
14376
+ }
14377
+ },
14378
+ "required": [
14379
+ "incoming",
14380
+ "candidate",
14381
+ "pSameEntity",
14382
+ "relation",
14383
+ "relationProbability"
14384
+ ],
14385
+ "additionalProperties": false
14386
+ }
14387
+ }
14388
+ },
14389
+ "required": [
14390
+ "computedAt",
14391
+ "expiresAt",
14392
+ "expired",
14393
+ "pairs"
14394
+ ],
14395
+ "additionalProperties": false
14396
+ },
14397
+ {
14398
+ "type": "null"
14399
+ }
14400
+ ]
14401
+ },
14402
+ "canMerge": {
14403
+ "type": "boolean"
14404
+ },
14405
+ "canReject": {
14406
+ "type": "boolean"
14407
+ }
14408
+ },
14409
+ "required": [
14410
+ "id",
14411
+ "status",
14412
+ "proposalStatus",
14413
+ "confidence",
14414
+ "survivor",
14415
+ "duplicate",
14416
+ "reviewNotes",
14417
+ "reviewedAt",
14418
+ "reviewedByName",
14419
+ "appliedAt",
14420
+ "appliedByName",
14421
+ "createdAt",
14422
+ "explanation",
14423
+ "impact",
14424
+ "latestJob",
14425
+ "canMerge",
14426
+ "canReject"
14427
+ ],
14428
+ "additionalProperties": false
14429
+ }
14430
+ },
14431
+ "canManageIdentityMerges": {
14432
+ "type": "boolean"
14433
+ },
14434
+ "nextCursor": {
14435
+ "default": null,
14436
+ "anyOf": [
14437
+ {
14438
+ "type": "string",
14439
+ "minLength": 1,
14440
+ "maxLength": 2e3
14441
+ },
14442
+ {
14443
+ "type": "null"
14444
+ }
14445
+ ]
14446
+ }
14447
+ },
14448
+ "required": [
14449
+ "suggestions",
14450
+ "canManageIdentityMerges",
14451
+ "nextCursor"
14452
+ ],
14453
+ "additionalProperties": false
14454
+ }
14455
+ },
14456
+ "outlit_reject_identity_merge_suggestion": {
14457
+ "toolName": "outlit_reject_identity_merge_suggestion",
14458
+ "commandId": "identity.suggestions.reject",
14459
+ "commandVersion": 1,
14460
+ "ownerDomain": "identity",
14461
+ "title": "Reject identity merge suggestion",
14462
+ "description": "Reject a saved identity merge suggestion and optionally record why. Requires identity review permission. Keeps the customer profiles separate; does not merge or change customer identities. Outlit-owned agents cannot perform this operation.",
14463
+ "annotations": {
14464
+ "readOnlyHint": false,
14465
+ "destructiveHint": false
14466
+ },
14467
+ "inputSchema": {
14468
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14469
+ "type": "object",
14470
+ "properties": {
14471
+ "suggestionId": {
14472
+ "type": "string",
14473
+ "minLength": 1,
14474
+ "maxLength": 191
14475
+ },
14476
+ "reviewNotes": {
14477
+ "type": "string",
14478
+ "maxLength": 1e4
14479
+ }
14480
+ },
14481
+ "required": [
14482
+ "suggestionId"
14483
+ ],
14484
+ "additionalProperties": false
14485
+ },
14486
+ "outputSchema": {
14487
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14488
+ "type": "object",
14489
+ "properties": {
14490
+ "suggestionId": {
14491
+ "type": "string",
14492
+ "minLength": 1,
14493
+ "maxLength": 191
14494
+ },
14495
+ "status": {
14496
+ "type": "string",
14497
+ "const": "REJECTED"
14498
+ }
14499
+ },
14500
+ "required": [
14501
+ "suggestionId",
14502
+ "status"
14503
+ ],
14504
+ "additionalProperties": false
14505
+ }
14506
+ },
14507
+ "outlit_merge_customers": {
14508
+ "toolName": "outlit_merge_customers",
14509
+ "commandId": "customer.merge",
14510
+ "commandVersion": 1,
14511
+ "ownerDomain": "identity",
14512
+ "title": "Merge customers",
14513
+ "description": "DANGEROUS execution with no supported undo. Preview or execute a merge of two exact records into the specified survivor; defaults to preview (dryRun:true). Without suggestionId, both records must be COMPANY. Any pair involving an INDIVIDUAL requires an eligible saved suggestionId for that exact pair. Execute only when authorized and absolutely certain both records represent the same customer; two company records must represent the same company. Similar names, related domains, shared participants, parent/subsidiary relationships or a suggested match are insufficient. If uncertain, do not execute. Execution moves customer data and access relationships and requires the reviewed previewToken, stable requestId and explicit merge permission. A preview grants no execution authority. Reuse identical request inputs for retries. Execution is asynchronous; queued does not mean complete. Outlit-owned agents cannot perform this operation.",
14514
+ "annotations": {
14515
+ "readOnlyHint": false,
14516
+ "destructiveHint": true
14517
+ },
14518
+ "inputSchema": {
14519
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14520
+ "type": "object",
14521
+ "properties": {
14522
+ "survivingCustomerId": {
14523
+ "type": "string",
14524
+ "minLength": 1,
14525
+ "maxLength": 191
14526
+ },
14527
+ "duplicateCustomerId": {
14528
+ "type": "string",
14529
+ "minLength": 1,
14530
+ "maxLength": 191
14531
+ },
14532
+ "suggestionId": {
14533
+ "type": "string",
14534
+ "minLength": 1,
14535
+ "maxLength": 191,
14536
+ "description": "Eligible saved suggestion for this exact pair. Required if either record is INDIVIDUAL; optional for two COMPANY records."
14537
+ },
14538
+ "reviewNotes": {
14539
+ "type": "string",
14540
+ "maxLength": 1e4
14541
+ },
14542
+ "dryRun": {
14543
+ "default": true,
14544
+ "type": "boolean"
14545
+ },
14546
+ "previewToken": {
14547
+ "type": "string",
14548
+ "minLength": 1,
14549
+ "maxLength": 4096
14550
+ },
14551
+ "requestId": {
14552
+ "type": "string",
14553
+ "minLength": 1,
14554
+ "maxLength": 191
14555
+ }
14556
+ },
14557
+ "required": [
14558
+ "survivingCustomerId",
14559
+ "duplicateCustomerId"
14560
+ ],
14561
+ "additionalProperties": false
14562
+ },
14563
+ "outputSchema": {
14564
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14565
+ "oneOf": [
14566
+ {
14567
+ "type": "object",
14568
+ "properties": {
14569
+ "kind": {
14570
+ "type": "string",
14571
+ "const": "preview"
14572
+ },
14573
+ "survivingCustomerId": {
14574
+ "type": "string",
14575
+ "minLength": 1,
14576
+ "maxLength": 191
14577
+ },
14578
+ "duplicateCustomerId": {
14579
+ "type": "string",
14580
+ "minLength": 1,
14581
+ "maxLength": 191
14582
+ },
14583
+ "previewToken": {
14584
+ "type": "string",
14585
+ "minLength": 1,
14586
+ "maxLength": 4096
14587
+ },
14588
+ "evaluatedAt": {
14589
+ "type": "string",
14590
+ "format": "date-time",
14591
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
14592
+ },
14593
+ "impact": {
14594
+ "type": "object",
14595
+ "properties": {
14596
+ "identifiers": {
14597
+ "type": "integer",
14598
+ "minimum": 0,
14599
+ "maximum": 9007199254740991
14600
+ },
14601
+ "contacts": {
14602
+ "type": "integer",
14603
+ "minimum": 0,
14604
+ "maximum": 9007199254740991
14605
+ },
14606
+ "facts": {
14607
+ "type": "integer",
14608
+ "minimum": 0,
14609
+ "maximum": 9007199254740991
14610
+ },
14611
+ "communications": {
14612
+ "type": "integer",
14613
+ "minimum": 0,
14614
+ "maximum": 9007199254740991
14615
+ },
14616
+ "accessEntries": {
14617
+ "type": "integer",
14618
+ "minimum": 0,
14619
+ "maximum": 9007199254740991
14620
+ }
14621
+ },
14622
+ "required": [
14623
+ "identifiers",
14624
+ "contacts",
14625
+ "facts",
14626
+ "communications",
14627
+ "accessEntries"
14628
+ ],
14629
+ "additionalProperties": false
14630
+ },
14631
+ "warnings": {
14632
+ "maxItems": 30,
14633
+ "type": "array",
14634
+ "items": {
14635
+ "type": "object",
14636
+ "properties": {
14637
+ "code": {
14638
+ "type": "string",
14639
+ "minLength": 1,
14640
+ "maxLength": 100
14641
+ },
14642
+ "message": {
14643
+ "type": "string",
14644
+ "maxLength": 1e3
14645
+ }
14646
+ },
14647
+ "required": [
14648
+ "code",
14649
+ "message"
14650
+ ],
14651
+ "additionalProperties": false
14652
+ }
14653
+ }
14654
+ },
14655
+ "required": [
14656
+ "kind",
14657
+ "survivingCustomerId",
14658
+ "duplicateCustomerId",
14659
+ "previewToken",
14660
+ "evaluatedAt",
14661
+ "impact",
14662
+ "warnings"
14663
+ ],
14664
+ "additionalProperties": false
14665
+ },
14666
+ {
14667
+ "type": "object",
14668
+ "properties": {
14669
+ "kind": {
14670
+ "type": "string",
14671
+ "const": "operation"
14672
+ },
14673
+ "operationId": {
14674
+ "type": "string",
14675
+ "minLength": 1,
14676
+ "maxLength": 191
14677
+ },
14678
+ "survivingCustomerId": {
14679
+ "type": "string",
14680
+ "minLength": 1,
14681
+ "maxLength": 191
14682
+ },
14683
+ "duplicateCustomerId": {
14684
+ "type": "string",
14685
+ "minLength": 1,
14686
+ "maxLength": 191
14687
+ },
14688
+ "status": {
14689
+ "type": "string",
14690
+ "enum": [
14691
+ "queued",
14692
+ "running",
14693
+ "completed",
14694
+ "failed"
14695
+ ]
14696
+ },
14697
+ "phase": {
14698
+ "type": "string",
14699
+ "minLength": 1,
14700
+ "maxLength": 100
14701
+ },
14702
+ "error": {
14703
+ "type": "object",
14704
+ "properties": {
14705
+ "code": {
14706
+ "type": "string",
14707
+ "minLength": 1,
14708
+ "maxLength": 100
14709
+ },
14710
+ "message": {
14711
+ "type": "string",
14712
+ "maxLength": 1e3
14713
+ }
14714
+ },
14715
+ "required": [
14716
+ "code",
14717
+ "message"
14718
+ ],
14719
+ "additionalProperties": false
14720
+ }
14721
+ },
14722
+ "required": [
14723
+ "kind",
14724
+ "operationId",
14725
+ "survivingCustomerId",
14726
+ "duplicateCustomerId",
14727
+ "status",
14728
+ "phase"
14729
+ ],
14730
+ "additionalProperties": false
14731
+ }
14732
+ ]
14733
+ }
14734
+ },
14735
+ "outlit_get_customer_merge_status": {
14736
+ "toolName": "outlit_get_customer_merge_status",
14737
+ "commandId": "customer.merge.status",
14738
+ "commandVersion": 1,
14739
+ "ownerDomain": "identity",
14740
+ "title": "Get customer merge status",
14741
+ "description": "Read a customer merge operation's current progress, completion or bounded failure information. Requires current read access; possession of an operation ID does not grant access. Queued or running operations are not complete. Does not retry, restart, cancel or undo the merge.",
14742
+ "annotations": {
14743
+ "readOnlyHint": true,
14744
+ "destructiveHint": false
14745
+ },
14746
+ "inputSchema": {
14747
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14748
+ "type": "object",
14749
+ "properties": {
14750
+ "operationId": {
14751
+ "type": "string",
14752
+ "minLength": 1,
14753
+ "maxLength": 191
14754
+ }
14755
+ },
14756
+ "required": [
14757
+ "operationId"
14758
+ ],
14759
+ "additionalProperties": false
14760
+ },
14761
+ "outputSchema": {
14762
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14763
+ "type": "object",
14764
+ "properties": {
14765
+ "kind": {
14766
+ "type": "string",
14767
+ "const": "operation"
14768
+ },
14769
+ "operationId": {
14770
+ "type": "string",
14771
+ "minLength": 1,
14772
+ "maxLength": 191
14773
+ },
14774
+ "survivingCustomerId": {
14775
+ "type": "string",
14776
+ "minLength": 1,
14777
+ "maxLength": 191
14778
+ },
14779
+ "duplicateCustomerId": {
14780
+ "type": "string",
14781
+ "minLength": 1,
14782
+ "maxLength": 191
14783
+ },
14784
+ "status": {
14785
+ "type": "string",
14786
+ "enum": [
14787
+ "queued",
14788
+ "running",
14789
+ "completed",
14790
+ "failed"
14791
+ ]
14792
+ },
14793
+ "phase": {
14794
+ "type": "string",
14795
+ "minLength": 1,
14796
+ "maxLength": 100
14797
+ },
14798
+ "error": {
14799
+ "type": "object",
14800
+ "properties": {
14801
+ "code": {
14802
+ "type": "string",
14803
+ "minLength": 1,
14804
+ "maxLength": 100
14805
+ },
14806
+ "message": {
14807
+ "type": "string",
14808
+ "maxLength": 1e3
14809
+ }
14810
+ },
14811
+ "required": [
14812
+ "code",
14813
+ "message"
14814
+ ],
14815
+ "additionalProperties": false
14816
+ }
14817
+ },
14818
+ "required": [
14819
+ "kind",
14820
+ "operationId",
14821
+ "survivingCustomerId",
14822
+ "duplicateCustomerId",
14823
+ "status",
14824
+ "phase"
14825
+ ],
14826
+ "additionalProperties": false
14827
+ }
14828
+ },
14829
+ "outlit_list_scoped_repairs": {
14830
+ "toolName": "outlit_list_scoped_repairs",
14831
+ "commandId": "integrity.scoped_repair.list",
14832
+ "commandVersion": 1,
14833
+ "ownerDomain": "identity",
14834
+ "title": "List scoped repair findings",
14835
+ "description": "Read a bounded page of integrity findings visible to this caller, including finding IDs, fingerprints, compact source/target/evidence summaries, hasSavedCandidate, and plan state. The default page is 10 findings; maximum 20. Scan successive cursors until hasMore is false; one page is not complete discovery. When hasSavedCandidate is true and state is not blocked, call preview with findingId and expectedFingerprint and omit candidate to use the saved exact manifest. A blocked finding cannot be previewed; follow its reason. If no saved exact candidate exists, the finding is manual. Candidate manifests must be source-backed and exact: contact moves pin contactId/fromCustomerId/toCustomerId/expectedEmail/expectedUpdatedAt; Stripe pins identifierId/identifierValue/sourceScopeKey/preserveContacts; CRM and corpus require their domain-produced exact source manifests. Do not invent a manifest from a finding summary.",
14836
+ "annotations": {
14837
+ "readOnlyHint": true,
14838
+ "destructiveHint": false
14839
+ },
14840
+ "inputSchema": {
14841
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14842
+ "type": "object",
14843
+ "properties": {
14844
+ "limit": {
14845
+ "default": 10,
14846
+ "type": "integer",
14847
+ "minimum": 1,
14848
+ "maximum": 20
14849
+ },
14850
+ "cursor": {
14851
+ "type": "string",
14852
+ "minLength": 1,
14853
+ "maxLength": 191
14854
+ }
14855
+ },
14856
+ "additionalProperties": false
14857
+ },
14858
+ "outputSchema": {
14859
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14860
+ "type": "object",
14861
+ "properties": {
14862
+ "items": {
14863
+ "maxItems": 20,
14864
+ "type": "array",
14865
+ "items": {
14866
+ "type": "object",
14867
+ "properties": {
14868
+ "findingId": {
14869
+ "type": "string",
14870
+ "minLength": 1,
14871
+ "maxLength": 191
14872
+ },
14873
+ "fingerprint": {
14874
+ "type": "string",
14875
+ "minLength": 1,
14876
+ "maxLength": 191
14877
+ },
14878
+ "state": {
14879
+ "type": "string",
14880
+ "enum": [
14881
+ "manual",
14882
+ "ready",
14883
+ "admitted",
14884
+ "pending_verification",
14885
+ "recovery_needed",
14886
+ "blocked",
14887
+ "verified"
14888
+ ]
14889
+ },
14890
+ "action": {
14891
+ "anyOf": [
14892
+ {
14893
+ "type": "string",
14894
+ "enum": [
14895
+ "rehome_contact",
14896
+ "rehome_crm_account",
14897
+ "reattribute_stripe_customer",
14898
+ "rehome_source_corpus"
14899
+ ]
14900
+ },
13889
14901
  {
13890
14902
  "type": "null"
13891
14903
  }
13892
14904
  ]
13893
14905
  },
13894
- "canMerge": {
13895
- "type": "boolean"
14906
+ "sourceCustomerId": {
14907
+ "anyOf": [
14908
+ {
14909
+ "type": "string",
14910
+ "minLength": 1,
14911
+ "maxLength": 191
14912
+ },
14913
+ {
14914
+ "type": "null"
14915
+ }
14916
+ ]
13896
14917
  },
13897
- "canReject": {
14918
+ "targetCustomerId": {
14919
+ "anyOf": [
14920
+ {
14921
+ "type": "string",
14922
+ "minLength": 1,
14923
+ "maxLength": 191
14924
+ },
14925
+ {
14926
+ "type": "null"
14927
+ }
14928
+ ]
14929
+ },
14930
+ "evidenceRef": {
14931
+ "anyOf": [
14932
+ {
14933
+ "type": "string",
14934
+ "minLength": 1,
14935
+ "maxLength": 191
14936
+ },
14937
+ {
14938
+ "type": "null"
14939
+ }
14940
+ ]
14941
+ },
14942
+ "hasSavedCandidate": {
13898
14943
  "type": "boolean"
14944
+ },
14945
+ "planDigest": {
14946
+ "anyOf": [
14947
+ {
14948
+ "type": "string",
14949
+ "pattern": "^[a-f0-9]{64}$"
14950
+ },
14951
+ {
14952
+ "type": "null"
14953
+ }
14954
+ ]
14955
+ },
14956
+ "manualReason": {
14957
+ "anyOf": [
14958
+ {
14959
+ "type": "string",
14960
+ "maxLength": 300
14961
+ },
14962
+ {
14963
+ "type": "null"
14964
+ }
14965
+ ]
14966
+ },
14967
+ "nextStep": {
14968
+ "anyOf": [
14969
+ {
14970
+ "type": "string",
14971
+ "maxLength": 200
14972
+ },
14973
+ {
14974
+ "type": "null"
14975
+ }
14976
+ ]
13899
14977
  }
13900
14978
  },
13901
14979
  "required": [
13902
- "id",
13903
- "status",
13904
- "proposalStatus",
13905
- "confidence",
13906
- "survivor",
13907
- "duplicate",
13908
- "reviewNotes",
13909
- "reviewedAt",
13910
- "reviewedByName",
13911
- "appliedAt",
13912
- "appliedByName",
13913
- "createdAt",
13914
- "explanation",
13915
- "impact",
13916
- "latestJob",
13917
- "canMerge",
13918
- "canReject"
14980
+ "findingId",
14981
+ "fingerprint",
14982
+ "state",
14983
+ "action",
14984
+ "sourceCustomerId",
14985
+ "targetCustomerId",
14986
+ "evidenceRef",
14987
+ "hasSavedCandidate",
14988
+ "planDigest",
14989
+ "manualReason",
14990
+ "nextStep"
13919
14991
  ],
13920
14992
  "additionalProperties": false
13921
14993
  }
13922
14994
  },
13923
- "canManageIdentityMerges": {
14995
+ "scannedCount": {
14996
+ "type": "integer",
14997
+ "minimum": 0,
14998
+ "maximum": 9007199254740991
14999
+ },
15000
+ "hasMore": {
13924
15001
  "type": "boolean"
13925
15002
  },
13926
15003
  "nextCursor": {
13927
- "default": null,
13928
15004
  "anyOf": [
13929
15005
  {
13930
15006
  "type": "string",
13931
15007
  "minLength": 1,
13932
- "maxLength": 2e3
15008
+ "maxLength": 191
13933
15009
  },
13934
15010
  {
13935
15011
  "type": "null"
@@ -13938,315 +15014,422 @@ var publicToolContracts = {
13938
15014
  }
13939
15015
  },
13940
15016
  "required": [
13941
- "suggestions",
13942
- "canManageIdentityMerges",
15017
+ "items",
15018
+ "scannedCount",
15019
+ "hasMore",
13943
15020
  "nextCursor"
13944
15021
  ],
13945
15022
  "additionalProperties": false
13946
15023
  }
13947
15024
  },
13948
- "outlit_reject_identity_merge_suggestion": {
13949
- "toolName": "outlit_reject_identity_merge_suggestion",
13950
- "commandId": "identity.suggestions.reject",
15025
+ "outlit_preview_scoped_repair": {
15026
+ "toolName": "outlit_preview_scoped_repair",
15027
+ "commandId": "integrity.scoped_repair.preview",
13951
15028
  "commandVersion": 1,
13952
15029
  "ownerDomain": "identity",
13953
- "title": "Reject identity merge suggestion",
13954
- "description": "Reject a saved identity merge suggestion and optionally record why. Requires identity review permission. Keeps the customer profiles separate; does not merge or change customer identities. Outlit-owned agents cannot perform this operation.",
15030
+ "title": "Preview scoped identity repair",
15031
+ "description": "Preview and save one exact source-backed repair against a finding fingerprint. Obtain findingId and fingerprint from outlit_list_scoped_repairs. Supply an exact candidate manifest, or omit it when hasSavedCandidate is true to use the saved exact candidate server-side. If discovery reports no saved candidate, a domain-produced source manifest is required; a finding summary is insufficient. Requires identity write authority and access to every finding member and protected customer.",
13955
15032
  "annotations": {
13956
15033
  "readOnlyHint": false,
13957
15034
  "destructiveHint": false
13958
15035
  },
13959
- "inputSchema": {
13960
- "$schema": "https://json-schema.org/draft/2020-12/schema",
13961
- "type": "object",
13962
- "properties": {
13963
- "suggestionId": {
13964
- "type": "string",
13965
- "minLength": 1,
13966
- "maxLength": 191
13967
- },
13968
- "reviewNotes": {
13969
- "type": "string",
13970
- "maxLength": 1e4
13971
- }
13972
- },
13973
- "required": [
13974
- "suggestionId"
13975
- ],
13976
- "additionalProperties": false
13977
- },
13978
- "outputSchema": {
15036
+ "inputSchema": {
13979
15037
  "$schema": "https://json-schema.org/draft/2020-12/schema",
13980
15038
  "type": "object",
13981
15039
  "properties": {
13982
- "suggestionId": {
15040
+ "findingId": {
13983
15041
  "type": "string",
13984
15042
  "minLength": 1,
13985
15043
  "maxLength": 191
13986
15044
  },
13987
- "status": {
15045
+ "expectedFingerprint": {
13988
15046
  "type": "string",
13989
- "const": "REJECTED"
15047
+ "minLength": 1,
15048
+ "maxLength": 191
15049
+ },
15050
+ "candidate": {
15051
+ "type": "object",
15052
+ "properties": {
15053
+ "version": {
15054
+ "type": "number",
15055
+ "const": 1
15056
+ },
15057
+ "action": {
15058
+ "type": "string",
15059
+ "enum": [
15060
+ "rehome_contact",
15061
+ "rehome_crm_account",
15062
+ "reattribute_stripe_customer",
15063
+ "rehome_source_corpus"
15064
+ ]
15065
+ },
15066
+ "organizationId": {
15067
+ "type": "string",
15068
+ "minLength": 1,
15069
+ "maxLength": 191
15070
+ },
15071
+ "sourceCustomerId": {
15072
+ "type": "string",
15073
+ "minLength": 1,
15074
+ "maxLength": 191
15075
+ },
15076
+ "targetCustomerId": {
15077
+ "type": "string",
15078
+ "minLength": 1,
15079
+ "maxLength": 191
15080
+ },
15081
+ "evidenceRef": {
15082
+ "type": "string",
15083
+ "minLength": 1,
15084
+ "maxLength": 191
15085
+ },
15086
+ "provenance": {
15087
+ "type": "string",
15088
+ "const": "exact_source_manifest"
15089
+ },
15090
+ "manifest": {}
15091
+ },
15092
+ "required": [
15093
+ "version",
15094
+ "action",
15095
+ "organizationId",
15096
+ "sourceCustomerId",
15097
+ "targetCustomerId",
15098
+ "evidenceRef",
15099
+ "provenance",
15100
+ "manifest"
15101
+ ],
15102
+ "additionalProperties": false
13990
15103
  }
13991
15104
  },
13992
15105
  "required": [
13993
- "suggestionId",
13994
- "status"
15106
+ "findingId",
15107
+ "expectedFingerprint"
13995
15108
  ],
13996
15109
  "additionalProperties": false
13997
- }
13998
- },
13999
- "outlit_merge_customers": {
14000
- "toolName": "outlit_merge_customers",
14001
- "commandId": "customer.merge",
14002
- "commandVersion": 1,
14003
- "ownerDomain": "identity",
14004
- "title": "Merge customers",
14005
- "description": "DANGEROUS execution with no supported undo. Preview or execute a merge of two exact records into the specified survivor; defaults to preview (dryRun:true). Without suggestionId, both records must be COMPANY. Any pair involving an INDIVIDUAL requires an eligible saved suggestionId for that exact pair. Execute only when authorized and absolutely certain both records represent the same customer; two company records must represent the same company. Similar names, related domains, shared participants, parent/subsidiary relationships or a suggested match are insufficient. If uncertain, do not execute. Execution moves customer data and access relationships and requires the reviewed previewToken, stable requestId and explicit merge permission. A preview grants no execution authority. Reuse identical request inputs for retries. Execution is asynchronous; queued does not mean complete. Outlit-owned agents cannot perform this operation.",
14006
- "annotations": {
14007
- "readOnlyHint": false,
14008
- "destructiveHint": true
14009
15110
  },
14010
- "inputSchema": {
15111
+ "outputSchema": {
14011
15112
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14012
15113
  "type": "object",
14013
15114
  "properties": {
14014
- "survivingCustomerId": {
15115
+ "findingId": {
14015
15116
  "type": "string",
14016
15117
  "minLength": 1,
14017
15118
  "maxLength": 191
14018
15119
  },
14019
- "duplicateCustomerId": {
15120
+ "fingerprint": {
14020
15121
  "type": "string",
14021
15122
  "minLength": 1,
14022
15123
  "maxLength": 191
14023
15124
  },
14024
- "suggestionId": {
15125
+ "state": {
14025
15126
  "type": "string",
14026
- "minLength": 1,
14027
- "maxLength": 191,
14028
- "description": "Eligible saved suggestion for this exact pair. Required if either record is INDIVIDUAL; optional for two COMPANY records."
15127
+ "const": "ready"
14029
15128
  },
14030
- "reviewNotes": {
15129
+ "planDigest": {
14031
15130
  "type": "string",
14032
- "maxLength": 1e4
15131
+ "pattern": "^[a-f0-9]{64}$"
14033
15132
  },
14034
- "dryRun": {
14035
- "default": true,
14036
- "type": "boolean"
15133
+ "action": {
15134
+ "type": "string",
15135
+ "enum": [
15136
+ "rehome_contact",
15137
+ "rehome_crm_account",
15138
+ "reattribute_stripe_customer",
15139
+ "rehome_source_corpus"
15140
+ ]
14037
15141
  },
14038
- "previewToken": {
15142
+ "sourceCustomerId": {
14039
15143
  "type": "string",
14040
15144
  "minLength": 1,
14041
- "maxLength": 4096
15145
+ "maxLength": 191
14042
15146
  },
14043
- "requestId": {
15147
+ "targetCustomerId": {
14044
15148
  "type": "string",
14045
15149
  "minLength": 1,
14046
15150
  "maxLength": 191
14047
- }
14048
- },
14049
- "required": [
14050
- "survivingCustomerId",
14051
- "duplicateCustomerId"
14052
- ],
14053
- "additionalProperties": false
14054
- },
14055
- "outputSchema": {
14056
- "$schema": "https://json-schema.org/draft/2020-12/schema",
14057
- "oneOf": [
14058
- {
15151
+ },
15152
+ "impact": {
14059
15153
  "type": "object",
14060
15154
  "properties": {
14061
- "kind": {
14062
- "type": "string",
14063
- "const": "preview"
14064
- },
14065
- "survivingCustomerId": {
14066
- "type": "string",
14067
- "minLength": 1,
14068
- "maxLength": 191
14069
- },
14070
- "duplicateCustomerId": {
14071
- "type": "string",
14072
- "minLength": 1,
14073
- "maxLength": 191
15155
+ "movedCounts": {
15156
+ "type": "object",
15157
+ "propertyNames": {
15158
+ "type": "string"
15159
+ },
15160
+ "additionalProperties": {
15161
+ "type": "integer",
15162
+ "minimum": 0,
15163
+ "maximum": 9007199254740991
15164
+ }
14074
15165
  },
14075
- "previewToken": {
14076
- "type": "string",
14077
- "minLength": 1,
14078
- "maxLength": 4096
15166
+ "protectedCustomerIds": {
15167
+ "type": "array",
15168
+ "items": {
15169
+ "type": "string",
15170
+ "minLength": 1,
15171
+ "maxLength": 191
15172
+ }
14079
15173
  },
14080
- "evaluatedAt": {
14081
- "type": "string",
14082
- "format": "date-time",
14083
- "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z|([+-](?:[01]\\d|2[0-3]):[0-5]\\d)))$"
15174
+ "conflictingProviderIdentities": {
15175
+ "type": "array",
15176
+ "items": {
15177
+ "type": "string"
15178
+ }
14084
15179
  },
14085
- "impact": {
15180
+ "baselineContext": {
14086
15181
  "type": "object",
14087
15182
  "properties": {
14088
- "identifiers": {
14089
- "type": "integer",
14090
- "minimum": 0,
14091
- "maximum": 9007199254740991
14092
- },
14093
- "contacts": {
15183
+ "v1MissingFacts": {
14094
15184
  "type": "integer",
14095
15185
  "minimum": 0,
14096
15186
  "maximum": 9007199254740991
14097
15187
  },
14098
- "facts": {
15188
+ "v1MissingSources": {
14099
15189
  "type": "integer",
14100
15190
  "minimum": 0,
14101
15191
  "maximum": 9007199254740991
14102
15192
  },
14103
- "communications": {
15193
+ "v2MissingFacts": {
14104
15194
  "type": "integer",
14105
15195
  "minimum": 0,
14106
15196
  "maximum": 9007199254740991
14107
15197
  },
14108
- "accessEntries": {
15198
+ "v2MissingSources": {
14109
15199
  "type": "integer",
14110
15200
  "minimum": 0,
14111
15201
  "maximum": 9007199254740991
14112
15202
  }
14113
15203
  },
14114
15204
  "required": [
14115
- "identifiers",
14116
- "contacts",
14117
- "facts",
14118
- "communications",
14119
- "accessEntries"
15205
+ "v1MissingFacts",
15206
+ "v1MissingSources",
15207
+ "v2MissingFacts",
15208
+ "v2MissingSources"
14120
15209
  ],
14121
15210
  "additionalProperties": false
14122
- },
14123
- "warnings": {
14124
- "maxItems": 30,
14125
- "type": "array",
14126
- "items": {
14127
- "type": "object",
14128
- "properties": {
14129
- "code": {
14130
- "type": "string",
14131
- "minLength": 1,
14132
- "maxLength": 100
14133
- },
14134
- "message": {
14135
- "type": "string",
14136
- "maxLength": 1e3
14137
- }
14138
- },
14139
- "required": [
14140
- "code",
14141
- "message"
14142
- ],
14143
- "additionalProperties": false
14144
- }
14145
15211
  }
14146
15212
  },
14147
15213
  "required": [
14148
- "kind",
14149
- "survivingCustomerId",
14150
- "duplicateCustomerId",
14151
- "previewToken",
14152
- "evaluatedAt",
14153
- "impact",
14154
- "warnings"
15214
+ "movedCounts",
15215
+ "protectedCustomerIds",
15216
+ "conflictingProviderIdentities"
14155
15217
  ],
14156
15218
  "additionalProperties": false
15219
+ }
15220
+ },
15221
+ "required": [
15222
+ "findingId",
15223
+ "fingerprint",
15224
+ "state",
15225
+ "planDigest",
15226
+ "action",
15227
+ "sourceCustomerId",
15228
+ "targetCustomerId",
15229
+ "impact"
15230
+ ],
15231
+ "additionalProperties": false
15232
+ }
15233
+ },
15234
+ "outlit_execute_scoped_repair": {
15235
+ "toolName": "outlit_execute_scoped_repair",
15236
+ "commandId": "integrity.scoped_repair.execute",
15237
+ "commandVersion": 1,
15238
+ "ownerDomain": "identity",
15239
+ "title": "Execute scoped identity repair",
15240
+ "description": "Execute only the saved exact plan identified by its digest. Requires identity write authority for a human or the customer_identity:merge API key grant, plus current access to every protected customer. Use resume:true only for the same admitted Stripe operation with a proven committed admission receipt, the same actor, and the same surface; it never reexecutes the SQL move. A pending or recovery_needed result is not verified. Outlit-hosted agents and internal apps cannot execute.",
15241
+ "annotations": {
15242
+ "readOnlyHint": false,
15243
+ "destructiveHint": true
15244
+ },
15245
+ "inputSchema": {
15246
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
15247
+ "type": "object",
15248
+ "properties": {
15249
+ "findingId": {
15250
+ "type": "string",
15251
+ "minLength": 1,
15252
+ "maxLength": 191
14157
15253
  },
14158
- {
14159
- "type": "object",
14160
- "properties": {
14161
- "kind": {
14162
- "type": "string",
14163
- "const": "operation"
14164
- },
14165
- "operationId": {
14166
- "type": "string",
14167
- "minLength": 1,
14168
- "maxLength": 191
14169
- },
14170
- "survivingCustomerId": {
14171
- "type": "string",
14172
- "minLength": 1,
14173
- "maxLength": 191
14174
- },
14175
- "duplicateCustomerId": {
15254
+ "planDigest": {
15255
+ "type": "string",
15256
+ "pattern": "^[a-f0-9]{64}$"
15257
+ },
15258
+ "reason": {
15259
+ "type": "string",
15260
+ "minLength": 10,
15261
+ "maxLength": 2e3
15262
+ },
15263
+ "resume": {
15264
+ "default": false,
15265
+ "type": "boolean"
15266
+ }
15267
+ },
15268
+ "required": [
15269
+ "findingId",
15270
+ "planDigest",
15271
+ "reason"
15272
+ ],
15273
+ "additionalProperties": false
15274
+ },
15275
+ "outputSchema": {
15276
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
15277
+ "type": "object",
15278
+ "properties": {
15279
+ "findingId": {
15280
+ "type": "string",
15281
+ "minLength": 1,
15282
+ "maxLength": 191
15283
+ },
15284
+ "state": {
15285
+ "type": "string",
15286
+ "enum": [
15287
+ "ready",
15288
+ "admitted",
15289
+ "pending_verification",
15290
+ "recovery_needed",
15291
+ "manual_required",
15292
+ "blocked",
15293
+ "verified"
15294
+ ]
15295
+ },
15296
+ "operationId": {
15297
+ "anyOf": [
15298
+ {
14176
15299
  "type": "string",
14177
15300
  "minLength": 1,
14178
15301
  "maxLength": 191
14179
15302
  },
14180
- "status": {
14181
- "type": "string",
14182
- "enum": [
14183
- "queued",
14184
- "running",
14185
- "completed",
14186
- "failed"
14187
- ]
14188
- },
14189
- "phase": {
15303
+ {
15304
+ "type": "null"
15305
+ }
15306
+ ]
15307
+ },
15308
+ "summary": {
15309
+ "type": "string"
15310
+ },
15311
+ "nextStep": {
15312
+ "anyOf": [
15313
+ {
14190
15314
  "type": "string",
14191
- "minLength": 1,
14192
- "maxLength": 100
15315
+ "maxLength": 200
14193
15316
  },
14194
- "error": {
15317
+ {
15318
+ "type": "null"
15319
+ }
15320
+ ]
15321
+ },
15322
+ "receipt": {
15323
+ "anyOf": [
15324
+ {
14195
15325
  "type": "object",
14196
15326
  "properties": {
14197
- "code": {
15327
+ "disposition": {
14198
15328
  "type": "string",
14199
- "minLength": 1,
14200
- "maxLength": 100
15329
+ "enum": [
15330
+ "moved",
15331
+ "resumed",
15332
+ "noop",
15333
+ "partial",
15334
+ "refused",
15335
+ "failed"
15336
+ ]
14201
15337
  },
14202
- "message": {
14203
- "type": "string",
14204
- "maxLength": 1e3
15338
+ "followThroughComplete": {
15339
+ "type": "boolean"
15340
+ },
15341
+ "admissionAuditIds": {
15342
+ "type": "array",
15343
+ "items": {
15344
+ "type": "string",
15345
+ "minLength": 1,
15346
+ "maxLength": 191
15347
+ }
15348
+ },
15349
+ "completionAuditIds": {
15350
+ "type": "array",
15351
+ "items": {
15352
+ "type": "string",
15353
+ "minLength": 1,
15354
+ "maxLength": 191
15355
+ }
15356
+ },
15357
+ "movedIds": {
15358
+ "type": "object",
15359
+ "propertyNames": {
15360
+ "type": "string"
15361
+ },
15362
+ "additionalProperties": {
15363
+ "type": "array",
15364
+ "items": {
15365
+ "type": "string",
15366
+ "minLength": 1,
15367
+ "maxLength": 191
15368
+ }
15369
+ }
15370
+ },
15371
+ "refusals": {
15372
+ "type": "array",
15373
+ "items": {
15374
+ "type": "string"
15375
+ }
15376
+ },
15377
+ "informationalObservations": {
15378
+ "type": "array",
15379
+ "items": {
15380
+ "type": "string"
15381
+ }
14205
15382
  }
14206
15383
  },
14207
15384
  "required": [
14208
- "code",
14209
- "message"
15385
+ "disposition",
15386
+ "followThroughComplete",
15387
+ "admissionAuditIds",
15388
+ "completionAuditIds",
15389
+ "movedIds"
14210
15390
  ],
14211
15391
  "additionalProperties": false
15392
+ },
15393
+ {
15394
+ "type": "null"
14212
15395
  }
14213
- },
14214
- "required": [
14215
- "kind",
14216
- "operationId",
14217
- "survivingCustomerId",
14218
- "duplicateCustomerId",
14219
- "status",
14220
- "phase"
14221
- ],
14222
- "additionalProperties": false
15396
+ ]
14223
15397
  }
14224
- ]
15398
+ },
15399
+ "required": [
15400
+ "findingId",
15401
+ "state",
15402
+ "operationId",
15403
+ "summary",
15404
+ "nextStep",
15405
+ "receipt"
15406
+ ],
15407
+ "additionalProperties": false
14225
15408
  }
14226
15409
  },
14227
- "outlit_get_customer_merge_status": {
14228
- "toolName": "outlit_get_customer_merge_status",
14229
- "commandId": "customer.merge.status",
15410
+ "outlit_verify_scoped_repair": {
15411
+ "toolName": "outlit_verify_scoped_repair",
15412
+ "commandId": "integrity.scoped_repair.verify",
14230
15413
  "commandVersion": 1,
14231
15414
  "ownerDomain": "identity",
14232
- "title": "Get customer merge status",
14233
- "description": "Read a customer merge operation's current progress, completion or bounded failure information. Requires current read access; possession of an operation ID does not grant access. Queued or running operations are not complete. Does not retry, restart, cancel or undo the merge.",
15415
+ "title": "Verify scoped identity repair",
15416
+ "description": "Read the current saved command progress and, after a completed receipt, run live ownership, audit, billing and index verification. Queued, admitted, blocked and pending verification are not complete. Requires current access to every protected customer.",
14234
15417
  "annotations": {
14235
- "readOnlyHint": true,
15418
+ "readOnlyHint": false,
14236
15419
  "destructiveHint": false
14237
15420
  },
14238
15421
  "inputSchema": {
14239
15422
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14240
15423
  "type": "object",
14241
15424
  "properties": {
14242
- "operationId": {
15425
+ "findingId": {
14243
15426
  "type": "string",
14244
15427
  "minLength": 1,
14245
15428
  "maxLength": 191
14246
15429
  }
14247
15430
  },
14248
15431
  "required": [
14249
- "operationId"
15432
+ "findingId"
14250
15433
  ],
14251
15434
  "additionalProperties": false
14252
15435
  },
@@ -14254,66 +15437,191 @@ var publicToolContracts = {
14254
15437
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14255
15438
  "type": "object",
14256
15439
  "properties": {
14257
- "kind": {
14258
- "type": "string",
14259
- "const": "operation"
14260
- },
14261
- "operationId": {
14262
- "type": "string",
14263
- "minLength": 1,
14264
- "maxLength": 191
14265
- },
14266
- "survivingCustomerId": {
14267
- "type": "string",
14268
- "minLength": 1,
14269
- "maxLength": 191
14270
- },
14271
- "duplicateCustomerId": {
15440
+ "findingId": {
14272
15441
  "type": "string",
14273
15442
  "minLength": 1,
14274
15443
  "maxLength": 191
14275
15444
  },
14276
- "status": {
15445
+ "state": {
14277
15446
  "type": "string",
14278
15447
  "enum": [
14279
- "queued",
14280
- "running",
14281
- "completed",
14282
- "failed"
15448
+ "ready",
15449
+ "admitted",
15450
+ "pending_verification",
15451
+ "recovery_needed",
15452
+ "manual_required",
15453
+ "blocked",
15454
+ "verified"
14283
15455
  ]
14284
15456
  },
14285
- "phase": {
14286
- "type": "string",
14287
- "minLength": 1,
14288
- "maxLength": 100
14289
- },
14290
- "error": {
14291
- "type": "object",
14292
- "properties": {
14293
- "code": {
15457
+ "operationId": {
15458
+ "anyOf": [
15459
+ {
14294
15460
  "type": "string",
14295
15461
  "minLength": 1,
14296
- "maxLength": 100
15462
+ "maxLength": 191
14297
15463
  },
14298
- "message": {
15464
+ {
15465
+ "type": "null"
15466
+ }
15467
+ ]
15468
+ },
15469
+ "summary": {
15470
+ "type": "string"
15471
+ },
15472
+ "nextStep": {
15473
+ "anyOf": [
15474
+ {
14299
15475
  "type": "string",
14300
- "maxLength": 1e3
15476
+ "maxLength": 200
15477
+ },
15478
+ {
15479
+ "type": "null"
14301
15480
  }
14302
- },
14303
- "required": [
14304
- "code",
14305
- "message"
14306
- ],
14307
- "additionalProperties": false
15481
+ ]
15482
+ },
15483
+ "receipt": {
15484
+ "anyOf": [
15485
+ {
15486
+ "type": "object",
15487
+ "properties": {
15488
+ "disposition": {
15489
+ "type": "string",
15490
+ "enum": [
15491
+ "moved",
15492
+ "resumed",
15493
+ "noop",
15494
+ "partial",
15495
+ "refused",
15496
+ "failed"
15497
+ ]
15498
+ },
15499
+ "followThroughComplete": {
15500
+ "type": "boolean"
15501
+ },
15502
+ "admissionAuditIds": {
15503
+ "type": "array",
15504
+ "items": {
15505
+ "type": "string",
15506
+ "minLength": 1,
15507
+ "maxLength": 191
15508
+ }
15509
+ },
15510
+ "completionAuditIds": {
15511
+ "type": "array",
15512
+ "items": {
15513
+ "type": "string",
15514
+ "minLength": 1,
15515
+ "maxLength": 191
15516
+ }
15517
+ },
15518
+ "movedIds": {
15519
+ "type": "object",
15520
+ "propertyNames": {
15521
+ "type": "string"
15522
+ },
15523
+ "additionalProperties": {
15524
+ "type": "array",
15525
+ "items": {
15526
+ "type": "string",
15527
+ "minLength": 1,
15528
+ "maxLength": 191
15529
+ }
15530
+ }
15531
+ },
15532
+ "refusals": {
15533
+ "type": "array",
15534
+ "items": {
15535
+ "type": "string"
15536
+ }
15537
+ },
15538
+ "informationalObservations": {
15539
+ "type": "array",
15540
+ "items": {
15541
+ "type": "string"
15542
+ }
15543
+ }
15544
+ },
15545
+ "required": [
15546
+ "disposition",
15547
+ "followThroughComplete",
15548
+ "admissionAuditIds",
15549
+ "completionAuditIds",
15550
+ "movedIds"
15551
+ ],
15552
+ "additionalProperties": false
15553
+ },
15554
+ {
15555
+ "type": "null"
15556
+ }
15557
+ ]
15558
+ },
15559
+ "verification": {
15560
+ "anyOf": [
15561
+ {
15562
+ "type": "object",
15563
+ "properties": {
15564
+ "outcome": {
15565
+ "type": "string",
15566
+ "enum": [
15567
+ "verified",
15568
+ "inconclusive"
15569
+ ]
15570
+ },
15571
+ "ownership": {
15572
+ "type": "boolean"
15573
+ },
15574
+ "derived": {
15575
+ "type": "boolean"
15576
+ },
15577
+ "indexed": {
15578
+ "type": "boolean"
15579
+ },
15580
+ "reconstruction": {
15581
+ "type": "string",
15582
+ "enum": [
15583
+ "complete",
15584
+ "pending",
15585
+ "baseline_gap"
15586
+ ]
15587
+ },
15588
+ "warnings": {
15589
+ "type": "array",
15590
+ "items": {
15591
+ "type": "string"
15592
+ }
15593
+ },
15594
+ "informationalObservations": {
15595
+ "type": "array",
15596
+ "items": {
15597
+ "type": "string"
15598
+ }
15599
+ }
15600
+ },
15601
+ "required": [
15602
+ "outcome",
15603
+ "ownership",
15604
+ "derived",
15605
+ "indexed",
15606
+ "reconstruction",
15607
+ "warnings"
15608
+ ],
15609
+ "additionalProperties": false
15610
+ },
15611
+ {
15612
+ "type": "null"
15613
+ }
15614
+ ]
14308
15615
  }
14309
15616
  },
14310
15617
  "required": [
14311
- "kind",
15618
+ "findingId",
15619
+ "state",
14312
15620
  "operationId",
14313
- "survivingCustomerId",
14314
- "duplicateCustomerId",
14315
- "status",
14316
- "phase"
15621
+ "summary",
15622
+ "nextStep",
15623
+ "receipt",
15624
+ "verification"
14317
15625
  ],
14318
15626
  "additionalProperties": false
14319
15627
  }
@@ -14413,7 +15721,11 @@ var consumerToolPolicies = {
14413
15721
  "outlit_list_identity_merge_suggestions",
14414
15722
  "outlit_reject_identity_merge_suggestion",
14415
15723
  "outlit_merge_customers",
14416
- "outlit_get_customer_merge_status"
15724
+ "outlit_get_customer_merge_status",
15725
+ "outlit_list_scoped_repairs",
15726
+ "outlit_preview_scoped_repair",
15727
+ "outlit_execute_scoped_repair",
15728
+ "outlit_verify_scoped_repair"
14417
15729
  ],
14418
15730
  "cli": [
14419
15731
  "outlit_list_customers",
@@ -14462,7 +15774,11 @@ var consumerToolPolicies = {
14462
15774
  "outlit_list_identity_merge_suggestions",
14463
15775
  "outlit_reject_identity_merge_suggestion",
14464
15776
  "outlit_merge_customers",
14465
- "outlit_get_customer_merge_status"
15777
+ "outlit_get_customer_merge_status",
15778
+ "outlit_list_scoped_repairs",
15779
+ "outlit_preview_scoped_repair",
15780
+ "outlit_execute_scoped_repair",
15781
+ "outlit_verify_scoped_repair"
14466
15782
  ]
14467
15783
  };
14468
15784
  var toolGatewayTransport = {
@@ -15785,7 +17101,7 @@ var schemaTables = [
15785
17101
  "users",
15786
17102
  "revenue"
15787
17103
  ];
15788
- var sdkConsumerContractHash = "ef50db53b08b67d02c0b6b17e7e5a0181e6a078f2a3ab3f09ca1b807765e149c";
17104
+ var sdkConsumerContractHash = "4487d082473e65e51514b2a491210e1aab16dc7b0045412e4c11e6d89bc4ab5a";
15789
17105
 
15790
17106
  // src/contracts.ts
15791
17107
  var publicToolNameSet = new Set(publicToolNames);