@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.cjs CHANGED
@@ -121,7 +121,11 @@ var publicToolNames = [
121
121
  "outlit_list_identity_merge_suggestions",
122
122
  "outlit_reject_identity_merge_suggestion",
123
123
  "outlit_merge_customers",
124
- "outlit_get_customer_merge_status"
124
+ "outlit_get_customer_merge_status",
125
+ "outlit_list_scoped_repairs",
126
+ "outlit_preview_scoped_repair",
127
+ "outlit_execute_scoped_repair",
128
+ "outlit_verify_scoped_repair"
125
129
  ];
126
130
  var publicToolContracts = {
127
131
  "outlit_list_customers": {
@@ -130,7 +134,7 @@ var publicToolContracts = {
130
134
  "commandVersion": 1,
131
135
  "ownerDomain": "customers",
132
136
  "title": "List Customers",
133
- "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).",
137
+ "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.",
134
138
  "annotations": {
135
139
  "readOnlyHint": true,
136
140
  "destructiveHint": false
@@ -177,12 +181,12 @@ var publicToolContracts = {
177
181
  ]
178
182
  },
179
183
  "mrrAbove": {
180
- "description": "Minimum MRR in cents (e.g., 10000 = $100)",
184
+ "description": "Minimum MRR, in currentMrr's units (10000 is $100 for a customer billed in USD)",
181
185
  "type": "number",
182
186
  "minimum": 0
183
187
  },
184
188
  "mrrBelow": {
185
- "description": "Maximum MRR in cents",
189
+ "description": "Maximum MRR, in currentMrr's units",
186
190
  "type": "number",
187
191
  "minimum": 0
188
192
  },
@@ -345,7 +349,8 @@ var publicToolContracts = {
345
349
  {
346
350
  "type": "null"
347
351
  }
348
- ]
352
+ ],
353
+ "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."
349
354
  },
350
355
  "mrrCalculationStatus": {
351
356
  "type": "string",
@@ -930,7 +935,7 @@ var publicToolContracts = {
930
935
  "commandVersion": 1,
931
936
  "ownerDomain": "customers",
932
937
  "title": "Get Customer",
933
- "description": "Get full details for a single customer. Optionally include users, revenue, recent activity, engagement metrics, or company enrichment.",
938
+ "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.",
934
939
  "annotations": {
935
940
  "readOnlyHint": true,
936
941
  "destructiveHint": false
@@ -1200,7 +1205,8 @@ var publicToolContracts = {
1200
1205
  {
1201
1206
  "type": "null"
1202
1207
  }
1203
- ]
1208
+ ],
1209
+ "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."
1204
1210
  },
1205
1211
  "mrrCalculationStatus": {
1206
1212
  "type": "string",
@@ -1211,7 +1217,8 @@ var publicToolContracts = {
1211
1217
  ]
1212
1218
  },
1213
1219
  "lifetimeRevenue": {
1214
- "type": "number"
1220
+ "type": "number",
1221
+ "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."
1215
1222
  },
1216
1223
  "activeSubscriptions": {
1217
1224
  "type": "integer",
@@ -4672,6 +4679,48 @@ var publicToolContracts = {
4672
4679
  "score": {
4673
4680
  "type": "number"
4674
4681
  },
4682
+ "customer": {
4683
+ "description": "The customer this result belongs to. Null when it can't be attributed to exactly one customer the caller can read.",
4684
+ "anyOf": [
4685
+ {
4686
+ "type": "object",
4687
+ "properties": {
4688
+ "id": {
4689
+ "type": "string"
4690
+ },
4691
+ "name": {
4692
+ "anyOf": [
4693
+ {
4694
+ "type": "string"
4695
+ },
4696
+ {
4697
+ "type": "null"
4698
+ }
4699
+ ]
4700
+ },
4701
+ "domain": {
4702
+ "anyOf": [
4703
+ {
4704
+ "type": "string"
4705
+ },
4706
+ {
4707
+ "type": "null"
4708
+ }
4709
+ ]
4710
+ }
4711
+ },
4712
+ "required": [
4713
+ "id",
4714
+ "name",
4715
+ "domain"
4716
+ ],
4717
+ "additionalProperties": false
4718
+ },
4719
+ {
4720
+ "type": "null"
4721
+ }
4722
+ ]
4723
+ },
4675
4724
  "matchCount": {
4676
4725
  "type": "integer",
4677
4726
  "minimum": 0,
@@ -5202,6 +5251,48 @@ var publicToolContracts = {
5202
5251
  "sourceId": {
5203
5252
  "type": "string"
5204
5253
  },
5254
+ "customer": {
5255
+ "description": "The customer this result belongs to. Null when it can't be attributed to exactly one customer the caller can read.",
5256
+ "anyOf": [
5257
+ {
5258
+ "type": "object",
5259
+ "properties": {
5260
+ "id": {
5261
+ "type": "string"
5262
+ },
5263
+ "name": {
5264
+ "anyOf": [
5265
+ {
5266
+ "type": "string"
5267
+ },
5268
+ {
5269
+ "type": "null"
5270
+ }
5271
+ ]
5272
+ },
5273
+ "domain": {
5274
+ "anyOf": [
5275
+ {
5276
+ "type": "string"
5277
+ },
5278
+ {
5279
+ "type": "null"
5280
+ }
5281
+ ]
5282
+ }
5283
+ },
5284
+ "required": [
5285
+ "id",
5286
+ "name",
5287
+ "domain"
5288
+ ],
5289
+ "additionalProperties": false
5290
+ },
5291
+ {
5292
+ "type": "null"
5293
+ }
5294
+ ]
5295
+ },
5205
5296
  "occurredAt": {
5206
5297
  "anyOf": [
5207
5298
  {
@@ -12539,7 +12630,8 @@ var publicToolContracts = {
12539
12630
  {
12540
12631
  "type": "null"
12541
12632
  }
12542
- ]
12633
+ ],
12634
+ "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."
12543
12635
  },
12544
12636
  "currency": {
12545
12637
  "anyOf": [
@@ -12839,7 +12931,8 @@ var publicToolContracts = {
12839
12931
  {
12840
12932
  "type": "null"
12841
12933
  }
12842
- ]
12934
+ ],
12935
+ "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."
12843
12936
  },
12844
12937
  "currency": {
12845
12938
  "anyOf": [
@@ -13451,6 +13544,16 @@ var publicToolContracts = {
13451
13544
  }
13452
13545
  ]
13453
13546
  },
13547
+ "billingStatus": {
13548
+ "anyOf": [
13549
+ {
13550
+ "type": "string"
13551
+ },
13552
+ {
13553
+ "type": "null"
13554
+ }
13555
+ ]
13556
+ },
13454
13557
  "identifierCount": {
13455
13558
  "type": "integer",
13456
13559
  "minimum": 0,
@@ -13521,6 +13624,16 @@ var publicToolContracts = {
13521
13624
  }
13522
13625
  ]
13523
13626
  },
13627
+ "billingStatus": {
13628
+ "anyOf": [
13629
+ {
13630
+ "type": "string"
13631
+ },
13632
+ {
13633
+ "type": "null"
13634
+ }
13635
+ ]
13636
+ },
13524
13637
  "identifierCount": {
13525
13638
  "type": "integer",
13526
13639
  "minimum": 0,
@@ -13672,6 +13785,19 @@ var publicToolContracts = {
13672
13785
  "type": "integer",
13673
13786
  "minimum": 0,
13674
13787
  "maximum": 9007199254740991
13788
+ },
13789
+ "analyticsAvailable": {
13790
+ "type": "boolean"
13791
+ },
13792
+ "opportunities": {
13793
+ "type": "integer",
13794
+ "minimum": 0,
13795
+ "maximum": 9007199254740991
13796
+ },
13797
+ "revenueSnapshots": {
13798
+ "type": "integer",
13799
+ "minimum": 0,
13800
+ "maximum": 9007199254740991
13675
13801
  }
13676
13802
  },
13677
13803
  "required": [
@@ -13689,321 +13815,1271 @@ var publicToolContracts = {
13689
13815
  ],
13690
13816
  "additionalProperties": false
13691
13817
  },
13692
- "latestJob": {
13693
- "anyOf": [
13694
- {
13818
+ "scope": {
13819
+ "type": "object",
13820
+ "properties": {
13821
+ "survivor": {
13695
13822
  "type": "object",
13696
13823
  "properties": {
13697
- "id": {
13824
+ "shape": {
13698
13825
  "type": "string",
13699
- "minLength": 1,
13700
- "maxLength": 191
13826
+ "enum": [
13827
+ "provisional",
13828
+ "established",
13829
+ "unknown"
13830
+ ]
13701
13831
  },
13702
- "operationId": {
13832
+ "billingStatus": {
13703
13833
  "anyOf": [
13704
13834
  {
13705
- "type": "string",
13706
- "minLength": 1,
13707
- "maxLength": 191
13835
+ "type": "string"
13708
13836
  },
13709
13837
  {
13710
13838
  "type": "null"
13711
13839
  }
13712
- ],
13713
- "description": "Pass to outlit_get_customer_merge_status. Null when this job has no matching tracked operation."
13840
+ ]
13714
13841
  },
13715
- "status": {
13842
+ "hasIndependentCrmIdentity": {
13843
+ "type": "boolean"
13844
+ },
13845
+ "hasIndependentStripeIdentity": {
13846
+ "type": "boolean"
13847
+ }
13848
+ },
13849
+ "required": [
13850
+ "shape",
13851
+ "billingStatus",
13852
+ "hasIndependentCrmIdentity",
13853
+ "hasIndependentStripeIdentity"
13854
+ ],
13855
+ "additionalProperties": false
13856
+ },
13857
+ "duplicate": {
13858
+ "type": "object",
13859
+ "properties": {
13860
+ "shape": {
13716
13861
  "type": "string",
13717
13862
  "enum": [
13718
- "QUEUED",
13719
- "RUNNING",
13720
- "COMPLETED",
13721
- "FAILED"
13863
+ "provisional",
13864
+ "established",
13865
+ "unknown"
13722
13866
  ]
13723
13867
  },
13724
- "createdAt": {
13725
- "type": "string",
13726
- "format": "date-time",
13727
- "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))$"
13868
+ "billingStatus": {
13869
+ "anyOf": [
13870
+ {
13871
+ "type": "string"
13872
+ },
13873
+ {
13874
+ "type": "null"
13875
+ }
13876
+ ]
13728
13877
  },
13729
- "updatedAt": {
13730
- "type": "string",
13731
- "format": "date-time",
13732
- "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))$"
13878
+ "hasIndependentCrmIdentity": {
13879
+ "type": "boolean"
13880
+ },
13881
+ "hasIndependentStripeIdentity": {
13882
+ "type": "boolean"
13733
13883
  }
13734
13884
  },
13735
13885
  "required": [
13736
- "id",
13737
- "operationId",
13738
- "status",
13739
- "createdAt",
13740
- "updatedAt"
13886
+ "shape",
13887
+ "billingStatus",
13888
+ "hasIndependentCrmIdentity",
13889
+ "hasIndependentStripeIdentity"
13741
13890
  ],
13742
13891
  "additionalProperties": false
13743
13892
  },
13744
- {
13745
- "type": "null"
13746
- }
13747
- ]
13748
- },
13749
- "jevEvidence": {
13750
- "description": "Jev advisory model evidence scoped to this suggestion's customers. Uncalibrated and never part of eligibility, confidence, or recommended action.",
13751
- "anyOf": [
13752
- {
13893
+ "payingAccountsAffected": {
13894
+ "anyOf": [
13895
+ {
13896
+ "type": "integer",
13897
+ "minimum": 0,
13898
+ "maximum": 9007199254740991
13899
+ },
13900
+ {
13901
+ "type": "null"
13902
+ }
13903
+ ]
13904
+ },
13905
+ "availability": {
13753
13906
  "type": "object",
13754
13907
  "properties": {
13755
- "computedAt": {
13756
- "type": "string",
13757
- "format": "date-time",
13758
- "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))$"
13759
- },
13760
- "expiresAt": {
13761
- "type": "string",
13762
- "format": "date-time",
13763
- "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))$"
13908
+ "currentCounts": {
13909
+ "type": "boolean"
13764
13910
  },
13765
- "expired": {
13911
+ "analytics": {
13766
13912
  "type": "boolean"
13913
+ }
13914
+ },
13915
+ "required": [
13916
+ "currentCounts",
13917
+ "analytics"
13918
+ ],
13919
+ "additionalProperties": false
13920
+ },
13921
+ "moves": {
13922
+ "type": "object",
13923
+ "properties": {
13924
+ "contacts": {
13925
+ "type": "integer",
13926
+ "minimum": 0,
13927
+ "maximum": 9007199254740991
13767
13928
  },
13768
- "pairs": {
13769
- "minItems": 1,
13770
- "type": "array",
13771
- "items": {
13772
- "type": "object",
13773
- "properties": {
13774
- "incoming": {
13775
- "type": "object",
13776
- "properties": {
13777
- "id": {
13778
- "type": "string",
13779
- "minLength": 1,
13780
- "maxLength": 191
13781
- },
13782
- "name": {
13783
- "type": "string",
13784
- "minLength": 1,
13785
- "maxLength": 500
13786
- },
13787
- "domain": {
13788
- "anyOf": [
13789
- {
13790
- "type": "string",
13791
- "minLength": 1,
13792
- "maxLength": 500
13793
- },
13794
- {
13795
- "type": "null"
13796
- }
13797
- ]
13798
- },
13799
- "type": {
13800
- "type": "string",
13801
- "enum": [
13802
- "COMPANY",
13803
- "INDIVIDUAL"
13804
- ]
13805
- },
13806
- "status": {
13807
- "anyOf": [
13808
- {
13809
- "type": "string",
13810
- "enum": [
13811
- "PROVISIONAL",
13812
- "ACTIVE",
13813
- "CHURNED",
13814
- "MERGED"
13815
- ]
13816
- },
13817
- {
13818
- "type": "null"
13819
- }
13820
- ]
13821
- },
13822
- "identifierCount": {
13823
- "type": "integer",
13824
- "minimum": 0,
13825
- "maximum": 9007199254740991
13826
- },
13827
- "contactCount": {
13828
- "type": "integer",
13829
- "minimum": 0,
13830
- "maximum": 9007199254740991
13831
- }
13832
- },
13833
- "required": [
13834
- "id",
13835
- "name",
13836
- "domain",
13837
- "type",
13838
- "status",
13839
- "identifierCount",
13840
- "contactCount"
13841
- ],
13842
- "additionalProperties": false
13843
- },
13844
- "candidate": {
13845
- "type": "object",
13846
- "properties": {
13847
- "id": {
13848
- "type": "string",
13849
- "minLength": 1,
13850
- "maxLength": 191
13851
- },
13852
- "name": {
13853
- "type": "string",
13854
- "minLength": 1,
13855
- "maxLength": 500
13856
- },
13857
- "domain": {
13858
- "anyOf": [
13859
- {
13860
- "type": "string",
13861
- "minLength": 1,
13862
- "maxLength": 500
13863
- },
13864
- {
13865
- "type": "null"
13866
- }
13867
- ]
13868
- },
13869
- "type": {
13870
- "type": "string",
13871
- "enum": [
13872
- "COMPANY",
13873
- "INDIVIDUAL"
13874
- ]
13875
- },
13876
- "status": {
13877
- "anyOf": [
13878
- {
13879
- "type": "string",
13880
- "enum": [
13881
- "PROVISIONAL",
13882
- "ACTIVE",
13883
- "CHURNED",
13884
- "MERGED"
13885
- ]
13886
- },
13887
- {
13888
- "type": "null"
13889
- }
13890
- ]
13891
- },
13892
- "identifierCount": {
13893
- "type": "integer",
13894
- "minimum": 0,
13895
- "maximum": 9007199254740991
13896
- },
13897
- "contactCount": {
13898
- "type": "integer",
13899
- "minimum": 0,
13900
- "maximum": 9007199254740991
13901
- }
13902
- },
13903
- "required": [
13904
- "id",
13905
- "name",
13906
- "domain",
13907
- "type",
13908
- "status",
13909
- "identifierCount",
13910
- "contactCount"
13911
- ],
13912
- "additionalProperties": false
13913
- },
13914
- "pSameEntity": {
13915
- "type": "number",
13916
- "minimum": 0,
13917
- "maximum": 1
13918
- },
13919
- "relation": {
13920
- "anyOf": [
13921
- {
13922
- "type": "string",
13923
- "minLength": 1,
13924
- "maxLength": 100
13925
- },
13926
- {
13927
- "type": "null"
13928
- }
13929
- ]
13930
- },
13931
- "relationProbability": {
13932
- "anyOf": [
13933
- {
13934
- "type": "number",
13935
- "minimum": 0,
13936
- "maximum": 1
13937
- },
13938
- {
13939
- "type": "null"
13940
- }
13941
- ]
13942
- }
13929
+ "analyticsEvents": {
13930
+ "anyOf": [
13931
+ {
13932
+ "type": "integer",
13933
+ "minimum": 0,
13934
+ "maximum": 9007199254740991
13943
13935
  },
13944
- "required": [
13945
- "incoming",
13946
- "candidate",
13947
- "pSameEntity",
13948
- "relation",
13949
- "relationProbability"
13950
- ],
13951
- "additionalProperties": false
13952
- }
13936
+ {
13937
+ "type": "null"
13938
+ }
13939
+ ]
13940
+ },
13941
+ "analyticsDimensions": {
13942
+ "anyOf": [
13943
+ {
13944
+ "type": "integer",
13945
+ "minimum": 0,
13946
+ "maximum": 9007199254740991
13947
+ },
13948
+ {
13949
+ "type": "null"
13950
+ }
13951
+ ]
13952
+ },
13953
+ "billingEvents": {
13954
+ "type": "integer",
13955
+ "minimum": 0,
13956
+ "maximum": 9007199254740991
13957
+ },
13958
+ "revenueSnapshots": {
13959
+ "anyOf": [
13960
+ {
13961
+ "type": "integer",
13962
+ "minimum": 0,
13963
+ "maximum": 9007199254740991
13964
+ },
13965
+ {
13966
+ "type": "null"
13967
+ }
13968
+ ]
13969
+ },
13970
+ "calls": {
13971
+ "type": "integer",
13972
+ "minimum": 0,
13973
+ "maximum": 9007199254740991
13974
+ },
13975
+ "facts": {
13976
+ "type": "integer",
13977
+ "minimum": 0,
13978
+ "maximum": 9007199254740991
13979
+ },
13980
+ "opportunities": {
13981
+ "anyOf": [
13982
+ {
13983
+ "type": "integer",
13984
+ "minimum": 0,
13985
+ "maximum": 9007199254740991
13986
+ },
13987
+ {
13988
+ "type": "null"
13989
+ }
13990
+ ]
13991
+ },
13992
+ "tickets": {
13993
+ "type": "integer",
13994
+ "minimum": 0,
13995
+ "maximum": 9007199254740991
13953
13996
  }
13954
13997
  },
13955
13998
  "required": [
13956
- "computedAt",
13957
- "expiresAt",
13958
- "expired",
13959
- "pairs"
13999
+ "contacts",
14000
+ "analyticsEvents",
14001
+ "analyticsDimensions",
14002
+ "billingEvents",
14003
+ "revenueSnapshots",
14004
+ "calls",
14005
+ "facts",
14006
+ "opportunities",
14007
+ "tickets"
13960
14008
  ],
13961
14009
  "additionalProperties": false
13962
14010
  },
14011
+ "conflicts": {
14012
+ "type": "array",
14013
+ "items": {
14014
+ "type": "object",
14015
+ "properties": {
14016
+ "code": {
14017
+ "type": "string"
14018
+ },
14019
+ "message": {
14020
+ "type": "string"
14021
+ },
14022
+ "scope": {
14023
+ "type": "string"
14024
+ },
14025
+ "sourceIdentities": {
14026
+ "type": "array",
14027
+ "items": {
14028
+ "type": "string"
14029
+ }
14030
+ },
14031
+ "survivorIdentities": {
14032
+ "type": "array",
14033
+ "items": {
14034
+ "type": "string"
14035
+ }
14036
+ }
14037
+ },
14038
+ "required": [
14039
+ "code",
14040
+ "message",
14041
+ "scope",
14042
+ "sourceIdentities",
14043
+ "survivorIdentities"
14044
+ ],
14045
+ "additionalProperties": false
14046
+ }
14047
+ },
14048
+ "supportingEvidence": {
14049
+ "type": "array",
14050
+ "items": {
14051
+ "type": "string"
14052
+ }
14053
+ }
14054
+ },
14055
+ "required": [
14056
+ "survivor",
14057
+ "duplicate",
14058
+ "payingAccountsAffected",
14059
+ "availability",
14060
+ "moves",
14061
+ "conflicts",
14062
+ "supportingEvidence"
14063
+ ],
14064
+ "additionalProperties": false
14065
+ },
14066
+ "mergeBlockedReason": {
14067
+ "anyOf": [
14068
+ {
14069
+ "type": "string"
14070
+ },
14071
+ {
14072
+ "type": "null"
14073
+ }
14074
+ ]
14075
+ },
14076
+ "reviewedPairOptions": {
14077
+ "type": "array",
14078
+ "items": {
14079
+ "type": "array",
14080
+ "prefixItems": [
14081
+ {
14082
+ "type": "string"
14083
+ },
14084
+ {
14085
+ "type": "string"
14086
+ }
14087
+ ]
14088
+ }
14089
+ },
14090
+ "candidateCustomers": {
14091
+ "type": "array",
14092
+ "items": {
14093
+ "type": "object",
14094
+ "properties": {
14095
+ "id": {
14096
+ "type": "string",
14097
+ "minLength": 1,
14098
+ "maxLength": 191
14099
+ },
14100
+ "name": {
14101
+ "type": "string",
14102
+ "minLength": 1,
14103
+ "maxLength": 500
14104
+ },
14105
+ "domain": {
14106
+ "anyOf": [
14107
+ {
14108
+ "type": "string",
14109
+ "minLength": 1,
14110
+ "maxLength": 500
14111
+ },
14112
+ {
14113
+ "type": "null"
14114
+ }
14115
+ ]
14116
+ },
14117
+ "type": {
14118
+ "type": "string",
14119
+ "enum": [
14120
+ "COMPANY",
14121
+ "INDIVIDUAL"
14122
+ ]
14123
+ },
14124
+ "status": {
14125
+ "anyOf": [
14126
+ {
14127
+ "type": "string",
14128
+ "enum": [
14129
+ "PROVISIONAL",
14130
+ "ACTIVE",
14131
+ "CHURNED",
14132
+ "MERGED"
14133
+ ]
14134
+ },
14135
+ {
14136
+ "type": "null"
14137
+ }
14138
+ ]
14139
+ },
14140
+ "billingStatus": {
14141
+ "anyOf": [
14142
+ {
14143
+ "type": "string"
14144
+ },
14145
+ {
14146
+ "type": "null"
14147
+ }
14148
+ ]
14149
+ },
14150
+ "identifierCount": {
14151
+ "type": "integer",
14152
+ "minimum": 0,
14153
+ "maximum": 9007199254740991
14154
+ },
14155
+ "contactCount": {
14156
+ "type": "integer",
14157
+ "minimum": 0,
14158
+ "maximum": 9007199254740991
14159
+ }
14160
+ },
14161
+ "required": [
14162
+ "id",
14163
+ "name",
14164
+ "domain",
14165
+ "type",
14166
+ "status",
14167
+ "identifierCount",
14168
+ "contactCount"
14169
+ ],
14170
+ "additionalProperties": false
14171
+ }
14172
+ },
14173
+ "impactScope": {
14174
+ "type": "string",
14175
+ "enum": [
14176
+ "single_source",
14177
+ "cluster_sources"
14178
+ ]
14179
+ },
14180
+ "latestJob": {
14181
+ "anyOf": [
14182
+ {
14183
+ "type": "object",
14184
+ "properties": {
14185
+ "id": {
14186
+ "type": "string",
14187
+ "minLength": 1,
14188
+ "maxLength": 191
14189
+ },
14190
+ "operationId": {
14191
+ "anyOf": [
14192
+ {
14193
+ "type": "string",
14194
+ "minLength": 1,
14195
+ "maxLength": 191
14196
+ },
14197
+ {
14198
+ "type": "null"
14199
+ }
14200
+ ],
14201
+ "description": "Pass to outlit_get_customer_merge_status. Null when this job has no matching tracked operation."
14202
+ },
14203
+ "status": {
14204
+ "type": "string",
14205
+ "enum": [
14206
+ "QUEUED",
14207
+ "RUNNING",
14208
+ "COMPLETED",
14209
+ "FAILED"
14210
+ ]
14211
+ },
14212
+ "createdAt": {
14213
+ "type": "string",
14214
+ "format": "date-time",
14215
+ "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))$"
14216
+ },
14217
+ "updatedAt": {
14218
+ "type": "string",
14219
+ "format": "date-time",
14220
+ "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))$"
14221
+ }
14222
+ },
14223
+ "required": [
14224
+ "id",
14225
+ "operationId",
14226
+ "status",
14227
+ "createdAt",
14228
+ "updatedAt"
14229
+ ],
14230
+ "additionalProperties": false
14231
+ },
14232
+ {
14233
+ "type": "null"
14234
+ }
14235
+ ]
14236
+ },
14237
+ "jevEvidence": {
14238
+ "description": "Jev advisory model evidence scoped to this suggestion's customers. Uncalibrated and never part of eligibility, confidence, or recommended action.",
14239
+ "anyOf": [
14240
+ {
14241
+ "type": "object",
14242
+ "properties": {
14243
+ "computedAt": {
14244
+ "type": "string",
14245
+ "format": "date-time",
14246
+ "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))$"
14247
+ },
14248
+ "expiresAt": {
14249
+ "type": "string",
14250
+ "format": "date-time",
14251
+ "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))$"
14252
+ },
14253
+ "expired": {
14254
+ "type": "boolean"
14255
+ },
14256
+ "pairs": {
14257
+ "minItems": 1,
14258
+ "type": "array",
14259
+ "items": {
14260
+ "type": "object",
14261
+ "properties": {
14262
+ "incoming": {
14263
+ "type": "object",
14264
+ "properties": {
14265
+ "id": {
14266
+ "type": "string",
14267
+ "minLength": 1,
14268
+ "maxLength": 191
14269
+ },
14270
+ "name": {
14271
+ "type": "string",
14272
+ "minLength": 1,
14273
+ "maxLength": 500
14274
+ },
14275
+ "domain": {
14276
+ "anyOf": [
14277
+ {
14278
+ "type": "string",
14279
+ "minLength": 1,
14280
+ "maxLength": 500
14281
+ },
14282
+ {
14283
+ "type": "null"
14284
+ }
14285
+ ]
14286
+ },
14287
+ "type": {
14288
+ "type": "string",
14289
+ "enum": [
14290
+ "COMPANY",
14291
+ "INDIVIDUAL"
14292
+ ]
14293
+ },
14294
+ "status": {
14295
+ "anyOf": [
14296
+ {
14297
+ "type": "string",
14298
+ "enum": [
14299
+ "PROVISIONAL",
14300
+ "ACTIVE",
14301
+ "CHURNED",
14302
+ "MERGED"
14303
+ ]
14304
+ },
14305
+ {
14306
+ "type": "null"
14307
+ }
14308
+ ]
14309
+ },
14310
+ "billingStatus": {
14311
+ "anyOf": [
14312
+ {
14313
+ "type": "string"
14314
+ },
14315
+ {
14316
+ "type": "null"
14317
+ }
14318
+ ]
14319
+ },
14320
+ "identifierCount": {
14321
+ "type": "integer",
14322
+ "minimum": 0,
14323
+ "maximum": 9007199254740991
14324
+ },
14325
+ "contactCount": {
14326
+ "type": "integer",
14327
+ "minimum": 0,
14328
+ "maximum": 9007199254740991
14329
+ }
14330
+ },
14331
+ "required": [
14332
+ "id",
14333
+ "name",
14334
+ "domain",
14335
+ "type",
14336
+ "status",
14337
+ "identifierCount",
14338
+ "contactCount"
14339
+ ],
14340
+ "additionalProperties": false
14341
+ },
14342
+ "candidate": {
14343
+ "type": "object",
14344
+ "properties": {
14345
+ "id": {
14346
+ "type": "string",
14347
+ "minLength": 1,
14348
+ "maxLength": 191
14349
+ },
14350
+ "name": {
14351
+ "type": "string",
14352
+ "minLength": 1,
14353
+ "maxLength": 500
14354
+ },
14355
+ "domain": {
14356
+ "anyOf": [
14357
+ {
14358
+ "type": "string",
14359
+ "minLength": 1,
14360
+ "maxLength": 500
14361
+ },
14362
+ {
14363
+ "type": "null"
14364
+ }
14365
+ ]
14366
+ },
14367
+ "type": {
14368
+ "type": "string",
14369
+ "enum": [
14370
+ "COMPANY",
14371
+ "INDIVIDUAL"
14372
+ ]
14373
+ },
14374
+ "status": {
14375
+ "anyOf": [
14376
+ {
14377
+ "type": "string",
14378
+ "enum": [
14379
+ "PROVISIONAL",
14380
+ "ACTIVE",
14381
+ "CHURNED",
14382
+ "MERGED"
14383
+ ]
14384
+ },
14385
+ {
14386
+ "type": "null"
14387
+ }
14388
+ ]
14389
+ },
14390
+ "billingStatus": {
14391
+ "anyOf": [
14392
+ {
14393
+ "type": "string"
14394
+ },
14395
+ {
14396
+ "type": "null"
14397
+ }
14398
+ ]
14399
+ },
14400
+ "identifierCount": {
14401
+ "type": "integer",
14402
+ "minimum": 0,
14403
+ "maximum": 9007199254740991
14404
+ },
14405
+ "contactCount": {
14406
+ "type": "integer",
14407
+ "minimum": 0,
14408
+ "maximum": 9007199254740991
14409
+ }
14410
+ },
14411
+ "required": [
14412
+ "id",
14413
+ "name",
14414
+ "domain",
14415
+ "type",
14416
+ "status",
14417
+ "identifierCount",
14418
+ "contactCount"
14419
+ ],
14420
+ "additionalProperties": false
14421
+ },
14422
+ "pSameEntity": {
14423
+ "type": "number",
14424
+ "minimum": 0,
14425
+ "maximum": 1
14426
+ },
14427
+ "relation": {
14428
+ "anyOf": [
14429
+ {
14430
+ "type": "string",
14431
+ "minLength": 1,
14432
+ "maxLength": 100
14433
+ },
14434
+ {
14435
+ "type": "null"
14436
+ }
14437
+ ]
14438
+ },
14439
+ "relationProbability": {
14440
+ "anyOf": [
14441
+ {
14442
+ "type": "number",
14443
+ "minimum": 0,
14444
+ "maximum": 1
14445
+ },
14446
+ {
14447
+ "type": "null"
14448
+ }
14449
+ ]
14450
+ }
14451
+ },
14452
+ "required": [
14453
+ "incoming",
14454
+ "candidate",
14455
+ "pSameEntity",
14456
+ "relation",
14457
+ "relationProbability"
14458
+ ],
14459
+ "additionalProperties": false
14460
+ }
14461
+ }
14462
+ },
14463
+ "required": [
14464
+ "computedAt",
14465
+ "expiresAt",
14466
+ "expired",
14467
+ "pairs"
14468
+ ],
14469
+ "additionalProperties": false
14470
+ },
14471
+ {
14472
+ "type": "null"
14473
+ }
14474
+ ]
14475
+ },
14476
+ "canMerge": {
14477
+ "type": "boolean"
14478
+ },
14479
+ "canReject": {
14480
+ "type": "boolean"
14481
+ }
14482
+ },
14483
+ "required": [
14484
+ "id",
14485
+ "status",
14486
+ "proposalStatus",
14487
+ "confidence",
14488
+ "survivor",
14489
+ "duplicate",
14490
+ "reviewNotes",
14491
+ "reviewedAt",
14492
+ "reviewedByName",
14493
+ "appliedAt",
14494
+ "appliedByName",
14495
+ "createdAt",
14496
+ "explanation",
14497
+ "impact",
14498
+ "latestJob",
14499
+ "canMerge",
14500
+ "canReject"
14501
+ ],
14502
+ "additionalProperties": false
14503
+ }
14504
+ },
14505
+ "canManageIdentityMerges": {
14506
+ "type": "boolean"
14507
+ },
14508
+ "nextCursor": {
14509
+ "default": null,
14510
+ "anyOf": [
14511
+ {
14512
+ "type": "string",
14513
+ "minLength": 1,
14514
+ "maxLength": 2e3
14515
+ },
14516
+ {
14517
+ "type": "null"
14518
+ }
14519
+ ]
14520
+ }
14521
+ },
14522
+ "required": [
14523
+ "suggestions",
14524
+ "canManageIdentityMerges",
14525
+ "nextCursor"
14526
+ ],
14527
+ "additionalProperties": false
14528
+ }
14529
+ },
14530
+ "outlit_reject_identity_merge_suggestion": {
14531
+ "toolName": "outlit_reject_identity_merge_suggestion",
14532
+ "commandId": "identity.suggestions.reject",
14533
+ "commandVersion": 1,
14534
+ "ownerDomain": "identity",
14535
+ "title": "Reject identity merge suggestion",
14536
+ "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.",
14537
+ "annotations": {
14538
+ "readOnlyHint": false,
14539
+ "destructiveHint": false
14540
+ },
14541
+ "inputSchema": {
14542
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14543
+ "type": "object",
14544
+ "properties": {
14545
+ "suggestionId": {
14546
+ "type": "string",
14547
+ "minLength": 1,
14548
+ "maxLength": 191
14549
+ },
14550
+ "reviewNotes": {
14551
+ "type": "string",
14552
+ "maxLength": 1e4
14553
+ }
14554
+ },
14555
+ "required": [
14556
+ "suggestionId"
14557
+ ],
14558
+ "additionalProperties": false
14559
+ },
14560
+ "outputSchema": {
14561
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14562
+ "type": "object",
14563
+ "properties": {
14564
+ "suggestionId": {
14565
+ "type": "string",
14566
+ "minLength": 1,
14567
+ "maxLength": 191
14568
+ },
14569
+ "status": {
14570
+ "type": "string",
14571
+ "const": "REJECTED"
14572
+ }
14573
+ },
14574
+ "required": [
14575
+ "suggestionId",
14576
+ "status"
14577
+ ],
14578
+ "additionalProperties": false
14579
+ }
14580
+ },
14581
+ "outlit_merge_customers": {
14582
+ "toolName": "outlit_merge_customers",
14583
+ "commandId": "customer.merge",
14584
+ "commandVersion": 1,
14585
+ "ownerDomain": "identity",
14586
+ "title": "Merge customers",
14587
+ "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.",
14588
+ "annotations": {
14589
+ "readOnlyHint": false,
14590
+ "destructiveHint": true
14591
+ },
14592
+ "inputSchema": {
14593
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14594
+ "type": "object",
14595
+ "properties": {
14596
+ "survivingCustomerId": {
14597
+ "type": "string",
14598
+ "minLength": 1,
14599
+ "maxLength": 191
14600
+ },
14601
+ "duplicateCustomerId": {
14602
+ "type": "string",
14603
+ "minLength": 1,
14604
+ "maxLength": 191
14605
+ },
14606
+ "suggestionId": {
14607
+ "type": "string",
14608
+ "minLength": 1,
14609
+ "maxLength": 191,
14610
+ "description": "Eligible saved suggestion for this exact pair. Required if either record is INDIVIDUAL; optional for two COMPANY records."
14611
+ },
14612
+ "reviewNotes": {
14613
+ "type": "string",
14614
+ "maxLength": 1e4
14615
+ },
14616
+ "dryRun": {
14617
+ "default": true,
14618
+ "type": "boolean"
14619
+ },
14620
+ "previewToken": {
14621
+ "type": "string",
14622
+ "minLength": 1,
14623
+ "maxLength": 4096
14624
+ },
14625
+ "requestId": {
14626
+ "type": "string",
14627
+ "minLength": 1,
14628
+ "maxLength": 191
14629
+ }
14630
+ },
14631
+ "required": [
14632
+ "survivingCustomerId",
14633
+ "duplicateCustomerId"
14634
+ ],
14635
+ "additionalProperties": false
14636
+ },
14637
+ "outputSchema": {
14638
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14639
+ "oneOf": [
14640
+ {
14641
+ "type": "object",
14642
+ "properties": {
14643
+ "kind": {
14644
+ "type": "string",
14645
+ "const": "preview"
14646
+ },
14647
+ "survivingCustomerId": {
14648
+ "type": "string",
14649
+ "minLength": 1,
14650
+ "maxLength": 191
14651
+ },
14652
+ "duplicateCustomerId": {
14653
+ "type": "string",
14654
+ "minLength": 1,
14655
+ "maxLength": 191
14656
+ },
14657
+ "previewToken": {
14658
+ "type": "string",
14659
+ "minLength": 1,
14660
+ "maxLength": 4096
14661
+ },
14662
+ "evaluatedAt": {
14663
+ "type": "string",
14664
+ "format": "date-time",
14665
+ "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)))$"
14666
+ },
14667
+ "impact": {
14668
+ "type": "object",
14669
+ "properties": {
14670
+ "identifiers": {
14671
+ "type": "integer",
14672
+ "minimum": 0,
14673
+ "maximum": 9007199254740991
14674
+ },
14675
+ "contacts": {
14676
+ "type": "integer",
14677
+ "minimum": 0,
14678
+ "maximum": 9007199254740991
14679
+ },
14680
+ "facts": {
14681
+ "type": "integer",
14682
+ "minimum": 0,
14683
+ "maximum": 9007199254740991
14684
+ },
14685
+ "communications": {
14686
+ "type": "integer",
14687
+ "minimum": 0,
14688
+ "maximum": 9007199254740991
14689
+ },
14690
+ "accessEntries": {
14691
+ "type": "integer",
14692
+ "minimum": 0,
14693
+ "maximum": 9007199254740991
14694
+ }
14695
+ },
14696
+ "required": [
14697
+ "identifiers",
14698
+ "contacts",
14699
+ "facts",
14700
+ "communications",
14701
+ "accessEntries"
14702
+ ],
14703
+ "additionalProperties": false
14704
+ },
14705
+ "warnings": {
14706
+ "maxItems": 30,
14707
+ "type": "array",
14708
+ "items": {
14709
+ "type": "object",
14710
+ "properties": {
14711
+ "code": {
14712
+ "type": "string",
14713
+ "minLength": 1,
14714
+ "maxLength": 100
14715
+ },
14716
+ "message": {
14717
+ "type": "string",
14718
+ "maxLength": 1e3
14719
+ }
14720
+ },
14721
+ "required": [
14722
+ "code",
14723
+ "message"
14724
+ ],
14725
+ "additionalProperties": false
14726
+ }
14727
+ }
14728
+ },
14729
+ "required": [
14730
+ "kind",
14731
+ "survivingCustomerId",
14732
+ "duplicateCustomerId",
14733
+ "previewToken",
14734
+ "evaluatedAt",
14735
+ "impact",
14736
+ "warnings"
14737
+ ],
14738
+ "additionalProperties": false
14739
+ },
14740
+ {
14741
+ "type": "object",
14742
+ "properties": {
14743
+ "kind": {
14744
+ "type": "string",
14745
+ "const": "operation"
14746
+ },
14747
+ "operationId": {
14748
+ "type": "string",
14749
+ "minLength": 1,
14750
+ "maxLength": 191
14751
+ },
14752
+ "survivingCustomerId": {
14753
+ "type": "string",
14754
+ "minLength": 1,
14755
+ "maxLength": 191
14756
+ },
14757
+ "duplicateCustomerId": {
14758
+ "type": "string",
14759
+ "minLength": 1,
14760
+ "maxLength": 191
14761
+ },
14762
+ "status": {
14763
+ "type": "string",
14764
+ "enum": [
14765
+ "queued",
14766
+ "running",
14767
+ "completed",
14768
+ "failed"
14769
+ ]
14770
+ },
14771
+ "phase": {
14772
+ "type": "string",
14773
+ "minLength": 1,
14774
+ "maxLength": 100
14775
+ },
14776
+ "error": {
14777
+ "type": "object",
14778
+ "properties": {
14779
+ "code": {
14780
+ "type": "string",
14781
+ "minLength": 1,
14782
+ "maxLength": 100
14783
+ },
14784
+ "message": {
14785
+ "type": "string",
14786
+ "maxLength": 1e3
14787
+ }
14788
+ },
14789
+ "required": [
14790
+ "code",
14791
+ "message"
14792
+ ],
14793
+ "additionalProperties": false
14794
+ }
14795
+ },
14796
+ "required": [
14797
+ "kind",
14798
+ "operationId",
14799
+ "survivingCustomerId",
14800
+ "duplicateCustomerId",
14801
+ "status",
14802
+ "phase"
14803
+ ],
14804
+ "additionalProperties": false
14805
+ }
14806
+ ]
14807
+ }
14808
+ },
14809
+ "outlit_get_customer_merge_status": {
14810
+ "toolName": "outlit_get_customer_merge_status",
14811
+ "commandId": "customer.merge.status",
14812
+ "commandVersion": 1,
14813
+ "ownerDomain": "identity",
14814
+ "title": "Get customer merge status",
14815
+ "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.",
14816
+ "annotations": {
14817
+ "readOnlyHint": true,
14818
+ "destructiveHint": false
14819
+ },
14820
+ "inputSchema": {
14821
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14822
+ "type": "object",
14823
+ "properties": {
14824
+ "operationId": {
14825
+ "type": "string",
14826
+ "minLength": 1,
14827
+ "maxLength": 191
14828
+ }
14829
+ },
14830
+ "required": [
14831
+ "operationId"
14832
+ ],
14833
+ "additionalProperties": false
14834
+ },
14835
+ "outputSchema": {
14836
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14837
+ "type": "object",
14838
+ "properties": {
14839
+ "kind": {
14840
+ "type": "string",
14841
+ "const": "operation"
14842
+ },
14843
+ "operationId": {
14844
+ "type": "string",
14845
+ "minLength": 1,
14846
+ "maxLength": 191
14847
+ },
14848
+ "survivingCustomerId": {
14849
+ "type": "string",
14850
+ "minLength": 1,
14851
+ "maxLength": 191
14852
+ },
14853
+ "duplicateCustomerId": {
14854
+ "type": "string",
14855
+ "minLength": 1,
14856
+ "maxLength": 191
14857
+ },
14858
+ "status": {
14859
+ "type": "string",
14860
+ "enum": [
14861
+ "queued",
14862
+ "running",
14863
+ "completed",
14864
+ "failed"
14865
+ ]
14866
+ },
14867
+ "phase": {
14868
+ "type": "string",
14869
+ "minLength": 1,
14870
+ "maxLength": 100
14871
+ },
14872
+ "error": {
14873
+ "type": "object",
14874
+ "properties": {
14875
+ "code": {
14876
+ "type": "string",
14877
+ "minLength": 1,
14878
+ "maxLength": 100
14879
+ },
14880
+ "message": {
14881
+ "type": "string",
14882
+ "maxLength": 1e3
14883
+ }
14884
+ },
14885
+ "required": [
14886
+ "code",
14887
+ "message"
14888
+ ],
14889
+ "additionalProperties": false
14890
+ }
14891
+ },
14892
+ "required": [
14893
+ "kind",
14894
+ "operationId",
14895
+ "survivingCustomerId",
14896
+ "duplicateCustomerId",
14897
+ "status",
14898
+ "phase"
14899
+ ],
14900
+ "additionalProperties": false
14901
+ }
14902
+ },
14903
+ "outlit_list_scoped_repairs": {
14904
+ "toolName": "outlit_list_scoped_repairs",
14905
+ "commandId": "integrity.scoped_repair.list",
14906
+ "commandVersion": 1,
14907
+ "ownerDomain": "identity",
14908
+ "title": "List scoped repair findings",
14909
+ "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.",
14910
+ "annotations": {
14911
+ "readOnlyHint": true,
14912
+ "destructiveHint": false
14913
+ },
14914
+ "inputSchema": {
14915
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14916
+ "type": "object",
14917
+ "properties": {
14918
+ "limit": {
14919
+ "default": 10,
14920
+ "type": "integer",
14921
+ "minimum": 1,
14922
+ "maximum": 20
14923
+ },
14924
+ "cursor": {
14925
+ "type": "string",
14926
+ "minLength": 1,
14927
+ "maxLength": 191
14928
+ }
14929
+ },
14930
+ "additionalProperties": false
14931
+ },
14932
+ "outputSchema": {
14933
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
14934
+ "type": "object",
14935
+ "properties": {
14936
+ "items": {
14937
+ "maxItems": 20,
14938
+ "type": "array",
14939
+ "items": {
14940
+ "type": "object",
14941
+ "properties": {
14942
+ "findingId": {
14943
+ "type": "string",
14944
+ "minLength": 1,
14945
+ "maxLength": 191
14946
+ },
14947
+ "fingerprint": {
14948
+ "type": "string",
14949
+ "minLength": 1,
14950
+ "maxLength": 191
14951
+ },
14952
+ "state": {
14953
+ "type": "string",
14954
+ "enum": [
14955
+ "manual",
14956
+ "ready",
14957
+ "admitted",
14958
+ "pending_verification",
14959
+ "recovery_needed",
14960
+ "blocked",
14961
+ "verified"
14962
+ ]
14963
+ },
14964
+ "action": {
14965
+ "anyOf": [
14966
+ {
14967
+ "type": "string",
14968
+ "enum": [
14969
+ "rehome_contact",
14970
+ "rehome_crm_account",
14971
+ "reattribute_stripe_customer",
14972
+ "rehome_source_corpus"
14973
+ ]
14974
+ },
13963
14975
  {
13964
14976
  "type": "null"
13965
14977
  }
13966
14978
  ]
13967
14979
  },
13968
- "canMerge": {
13969
- "type": "boolean"
14980
+ "sourceCustomerId": {
14981
+ "anyOf": [
14982
+ {
14983
+ "type": "string",
14984
+ "minLength": 1,
14985
+ "maxLength": 191
14986
+ },
14987
+ {
14988
+ "type": "null"
14989
+ }
14990
+ ]
13970
14991
  },
13971
- "canReject": {
14992
+ "targetCustomerId": {
14993
+ "anyOf": [
14994
+ {
14995
+ "type": "string",
14996
+ "minLength": 1,
14997
+ "maxLength": 191
14998
+ },
14999
+ {
15000
+ "type": "null"
15001
+ }
15002
+ ]
15003
+ },
15004
+ "evidenceRef": {
15005
+ "anyOf": [
15006
+ {
15007
+ "type": "string",
15008
+ "minLength": 1,
15009
+ "maxLength": 191
15010
+ },
15011
+ {
15012
+ "type": "null"
15013
+ }
15014
+ ]
15015
+ },
15016
+ "hasSavedCandidate": {
13972
15017
  "type": "boolean"
15018
+ },
15019
+ "planDigest": {
15020
+ "anyOf": [
15021
+ {
15022
+ "type": "string",
15023
+ "pattern": "^[a-f0-9]{64}$"
15024
+ },
15025
+ {
15026
+ "type": "null"
15027
+ }
15028
+ ]
15029
+ },
15030
+ "manualReason": {
15031
+ "anyOf": [
15032
+ {
15033
+ "type": "string",
15034
+ "maxLength": 300
15035
+ },
15036
+ {
15037
+ "type": "null"
15038
+ }
15039
+ ]
15040
+ },
15041
+ "nextStep": {
15042
+ "anyOf": [
15043
+ {
15044
+ "type": "string",
15045
+ "maxLength": 200
15046
+ },
15047
+ {
15048
+ "type": "null"
15049
+ }
15050
+ ]
13973
15051
  }
13974
15052
  },
13975
15053
  "required": [
13976
- "id",
13977
- "status",
13978
- "proposalStatus",
13979
- "confidence",
13980
- "survivor",
13981
- "duplicate",
13982
- "reviewNotes",
13983
- "reviewedAt",
13984
- "reviewedByName",
13985
- "appliedAt",
13986
- "appliedByName",
13987
- "createdAt",
13988
- "explanation",
13989
- "impact",
13990
- "latestJob",
13991
- "canMerge",
13992
- "canReject"
15054
+ "findingId",
15055
+ "fingerprint",
15056
+ "state",
15057
+ "action",
15058
+ "sourceCustomerId",
15059
+ "targetCustomerId",
15060
+ "evidenceRef",
15061
+ "hasSavedCandidate",
15062
+ "planDigest",
15063
+ "manualReason",
15064
+ "nextStep"
13993
15065
  ],
13994
15066
  "additionalProperties": false
13995
15067
  }
13996
15068
  },
13997
- "canManageIdentityMerges": {
15069
+ "scannedCount": {
15070
+ "type": "integer",
15071
+ "minimum": 0,
15072
+ "maximum": 9007199254740991
15073
+ },
15074
+ "hasMore": {
13998
15075
  "type": "boolean"
13999
15076
  },
14000
15077
  "nextCursor": {
14001
- "default": null,
14002
15078
  "anyOf": [
14003
15079
  {
14004
15080
  "type": "string",
14005
15081
  "minLength": 1,
14006
- "maxLength": 2e3
15082
+ "maxLength": 191
14007
15083
  },
14008
15084
  {
14009
15085
  "type": "null"
@@ -14012,315 +15088,422 @@ var publicToolContracts = {
14012
15088
  }
14013
15089
  },
14014
15090
  "required": [
14015
- "suggestions",
14016
- "canManageIdentityMerges",
15091
+ "items",
15092
+ "scannedCount",
15093
+ "hasMore",
14017
15094
  "nextCursor"
14018
15095
  ],
14019
15096
  "additionalProperties": false
14020
15097
  }
14021
15098
  },
14022
- "outlit_reject_identity_merge_suggestion": {
14023
- "toolName": "outlit_reject_identity_merge_suggestion",
14024
- "commandId": "identity.suggestions.reject",
15099
+ "outlit_preview_scoped_repair": {
15100
+ "toolName": "outlit_preview_scoped_repair",
15101
+ "commandId": "integrity.scoped_repair.preview",
14025
15102
  "commandVersion": 1,
14026
15103
  "ownerDomain": "identity",
14027
- "title": "Reject identity merge suggestion",
14028
- "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.",
15104
+ "title": "Preview scoped identity repair",
15105
+ "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.",
14029
15106
  "annotations": {
14030
15107
  "readOnlyHint": false,
14031
15108
  "destructiveHint": false
14032
15109
  },
14033
- "inputSchema": {
14034
- "$schema": "https://json-schema.org/draft/2020-12/schema",
14035
- "type": "object",
14036
- "properties": {
14037
- "suggestionId": {
14038
- "type": "string",
14039
- "minLength": 1,
14040
- "maxLength": 191
14041
- },
14042
- "reviewNotes": {
14043
- "type": "string",
14044
- "maxLength": 1e4
14045
- }
14046
- },
14047
- "required": [
14048
- "suggestionId"
14049
- ],
14050
- "additionalProperties": false
14051
- },
14052
- "outputSchema": {
15110
+ "inputSchema": {
14053
15111
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14054
15112
  "type": "object",
14055
15113
  "properties": {
14056
- "suggestionId": {
15114
+ "findingId": {
14057
15115
  "type": "string",
14058
15116
  "minLength": 1,
14059
15117
  "maxLength": 191
14060
15118
  },
14061
- "status": {
15119
+ "expectedFingerprint": {
14062
15120
  "type": "string",
14063
- "const": "REJECTED"
15121
+ "minLength": 1,
15122
+ "maxLength": 191
15123
+ },
15124
+ "candidate": {
15125
+ "type": "object",
15126
+ "properties": {
15127
+ "version": {
15128
+ "type": "number",
15129
+ "const": 1
15130
+ },
15131
+ "action": {
15132
+ "type": "string",
15133
+ "enum": [
15134
+ "rehome_contact",
15135
+ "rehome_crm_account",
15136
+ "reattribute_stripe_customer",
15137
+ "rehome_source_corpus"
15138
+ ]
15139
+ },
15140
+ "organizationId": {
15141
+ "type": "string",
15142
+ "minLength": 1,
15143
+ "maxLength": 191
15144
+ },
15145
+ "sourceCustomerId": {
15146
+ "type": "string",
15147
+ "minLength": 1,
15148
+ "maxLength": 191
15149
+ },
15150
+ "targetCustomerId": {
15151
+ "type": "string",
15152
+ "minLength": 1,
15153
+ "maxLength": 191
15154
+ },
15155
+ "evidenceRef": {
15156
+ "type": "string",
15157
+ "minLength": 1,
15158
+ "maxLength": 191
15159
+ },
15160
+ "provenance": {
15161
+ "type": "string",
15162
+ "const": "exact_source_manifest"
15163
+ },
15164
+ "manifest": {}
15165
+ },
15166
+ "required": [
15167
+ "version",
15168
+ "action",
15169
+ "organizationId",
15170
+ "sourceCustomerId",
15171
+ "targetCustomerId",
15172
+ "evidenceRef",
15173
+ "provenance",
15174
+ "manifest"
15175
+ ],
15176
+ "additionalProperties": false
14064
15177
  }
14065
15178
  },
14066
15179
  "required": [
14067
- "suggestionId",
14068
- "status"
15180
+ "findingId",
15181
+ "expectedFingerprint"
14069
15182
  ],
14070
15183
  "additionalProperties": false
14071
- }
14072
- },
14073
- "outlit_merge_customers": {
14074
- "toolName": "outlit_merge_customers",
14075
- "commandId": "customer.merge",
14076
- "commandVersion": 1,
14077
- "ownerDomain": "identity",
14078
- "title": "Merge customers",
14079
- "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.",
14080
- "annotations": {
14081
- "readOnlyHint": false,
14082
- "destructiveHint": true
14083
15184
  },
14084
- "inputSchema": {
15185
+ "outputSchema": {
14085
15186
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14086
15187
  "type": "object",
14087
15188
  "properties": {
14088
- "survivingCustomerId": {
15189
+ "findingId": {
14089
15190
  "type": "string",
14090
15191
  "minLength": 1,
14091
15192
  "maxLength": 191
14092
15193
  },
14093
- "duplicateCustomerId": {
15194
+ "fingerprint": {
14094
15195
  "type": "string",
14095
15196
  "minLength": 1,
14096
15197
  "maxLength": 191
14097
15198
  },
14098
- "suggestionId": {
15199
+ "state": {
14099
15200
  "type": "string",
14100
- "minLength": 1,
14101
- "maxLength": 191,
14102
- "description": "Eligible saved suggestion for this exact pair. Required if either record is INDIVIDUAL; optional for two COMPANY records."
15201
+ "const": "ready"
14103
15202
  },
14104
- "reviewNotes": {
15203
+ "planDigest": {
14105
15204
  "type": "string",
14106
- "maxLength": 1e4
15205
+ "pattern": "^[a-f0-9]{64}$"
14107
15206
  },
14108
- "dryRun": {
14109
- "default": true,
14110
- "type": "boolean"
15207
+ "action": {
15208
+ "type": "string",
15209
+ "enum": [
15210
+ "rehome_contact",
15211
+ "rehome_crm_account",
15212
+ "reattribute_stripe_customer",
15213
+ "rehome_source_corpus"
15214
+ ]
14111
15215
  },
14112
- "previewToken": {
15216
+ "sourceCustomerId": {
14113
15217
  "type": "string",
14114
15218
  "minLength": 1,
14115
- "maxLength": 4096
15219
+ "maxLength": 191
14116
15220
  },
14117
- "requestId": {
15221
+ "targetCustomerId": {
14118
15222
  "type": "string",
14119
15223
  "minLength": 1,
14120
15224
  "maxLength": 191
14121
- }
14122
- },
14123
- "required": [
14124
- "survivingCustomerId",
14125
- "duplicateCustomerId"
14126
- ],
14127
- "additionalProperties": false
14128
- },
14129
- "outputSchema": {
14130
- "$schema": "https://json-schema.org/draft/2020-12/schema",
14131
- "oneOf": [
14132
- {
15225
+ },
15226
+ "impact": {
14133
15227
  "type": "object",
14134
15228
  "properties": {
14135
- "kind": {
14136
- "type": "string",
14137
- "const": "preview"
14138
- },
14139
- "survivingCustomerId": {
14140
- "type": "string",
14141
- "minLength": 1,
14142
- "maxLength": 191
14143
- },
14144
- "duplicateCustomerId": {
14145
- "type": "string",
14146
- "minLength": 1,
14147
- "maxLength": 191
15229
+ "movedCounts": {
15230
+ "type": "object",
15231
+ "propertyNames": {
15232
+ "type": "string"
15233
+ },
15234
+ "additionalProperties": {
15235
+ "type": "integer",
15236
+ "minimum": 0,
15237
+ "maximum": 9007199254740991
15238
+ }
14148
15239
  },
14149
- "previewToken": {
14150
- "type": "string",
14151
- "minLength": 1,
14152
- "maxLength": 4096
15240
+ "protectedCustomerIds": {
15241
+ "type": "array",
15242
+ "items": {
15243
+ "type": "string",
15244
+ "minLength": 1,
15245
+ "maxLength": 191
15246
+ }
14153
15247
  },
14154
- "evaluatedAt": {
14155
- "type": "string",
14156
- "format": "date-time",
14157
- "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)))$"
15248
+ "conflictingProviderIdentities": {
15249
+ "type": "array",
15250
+ "items": {
15251
+ "type": "string"
15252
+ }
14158
15253
  },
14159
- "impact": {
15254
+ "baselineContext": {
14160
15255
  "type": "object",
14161
15256
  "properties": {
14162
- "identifiers": {
14163
- "type": "integer",
14164
- "minimum": 0,
14165
- "maximum": 9007199254740991
14166
- },
14167
- "contacts": {
15257
+ "v1MissingFacts": {
14168
15258
  "type": "integer",
14169
15259
  "minimum": 0,
14170
15260
  "maximum": 9007199254740991
14171
15261
  },
14172
- "facts": {
15262
+ "v1MissingSources": {
14173
15263
  "type": "integer",
14174
15264
  "minimum": 0,
14175
15265
  "maximum": 9007199254740991
14176
15266
  },
14177
- "communications": {
15267
+ "v2MissingFacts": {
14178
15268
  "type": "integer",
14179
15269
  "minimum": 0,
14180
15270
  "maximum": 9007199254740991
14181
15271
  },
14182
- "accessEntries": {
15272
+ "v2MissingSources": {
14183
15273
  "type": "integer",
14184
15274
  "minimum": 0,
14185
15275
  "maximum": 9007199254740991
14186
15276
  }
14187
15277
  },
14188
15278
  "required": [
14189
- "identifiers",
14190
- "contacts",
14191
- "facts",
14192
- "communications",
14193
- "accessEntries"
15279
+ "v1MissingFacts",
15280
+ "v1MissingSources",
15281
+ "v2MissingFacts",
15282
+ "v2MissingSources"
14194
15283
  ],
14195
15284
  "additionalProperties": false
14196
- },
14197
- "warnings": {
14198
- "maxItems": 30,
14199
- "type": "array",
14200
- "items": {
14201
- "type": "object",
14202
- "properties": {
14203
- "code": {
14204
- "type": "string",
14205
- "minLength": 1,
14206
- "maxLength": 100
14207
- },
14208
- "message": {
14209
- "type": "string",
14210
- "maxLength": 1e3
14211
- }
14212
- },
14213
- "required": [
14214
- "code",
14215
- "message"
14216
- ],
14217
- "additionalProperties": false
14218
- }
14219
15285
  }
14220
15286
  },
14221
15287
  "required": [
14222
- "kind",
14223
- "survivingCustomerId",
14224
- "duplicateCustomerId",
14225
- "previewToken",
14226
- "evaluatedAt",
14227
- "impact",
14228
- "warnings"
15288
+ "movedCounts",
15289
+ "protectedCustomerIds",
15290
+ "conflictingProviderIdentities"
14229
15291
  ],
14230
15292
  "additionalProperties": false
15293
+ }
15294
+ },
15295
+ "required": [
15296
+ "findingId",
15297
+ "fingerprint",
15298
+ "state",
15299
+ "planDigest",
15300
+ "action",
15301
+ "sourceCustomerId",
15302
+ "targetCustomerId",
15303
+ "impact"
15304
+ ],
15305
+ "additionalProperties": false
15306
+ }
15307
+ },
15308
+ "outlit_execute_scoped_repair": {
15309
+ "toolName": "outlit_execute_scoped_repair",
15310
+ "commandId": "integrity.scoped_repair.execute",
15311
+ "commandVersion": 1,
15312
+ "ownerDomain": "identity",
15313
+ "title": "Execute scoped identity repair",
15314
+ "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.",
15315
+ "annotations": {
15316
+ "readOnlyHint": false,
15317
+ "destructiveHint": true
15318
+ },
15319
+ "inputSchema": {
15320
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
15321
+ "type": "object",
15322
+ "properties": {
15323
+ "findingId": {
15324
+ "type": "string",
15325
+ "minLength": 1,
15326
+ "maxLength": 191
14231
15327
  },
14232
- {
14233
- "type": "object",
14234
- "properties": {
14235
- "kind": {
14236
- "type": "string",
14237
- "const": "operation"
14238
- },
14239
- "operationId": {
14240
- "type": "string",
14241
- "minLength": 1,
14242
- "maxLength": 191
14243
- },
14244
- "survivingCustomerId": {
14245
- "type": "string",
14246
- "minLength": 1,
14247
- "maxLength": 191
14248
- },
14249
- "duplicateCustomerId": {
15328
+ "planDigest": {
15329
+ "type": "string",
15330
+ "pattern": "^[a-f0-9]{64}$"
15331
+ },
15332
+ "reason": {
15333
+ "type": "string",
15334
+ "minLength": 10,
15335
+ "maxLength": 2e3
15336
+ },
15337
+ "resume": {
15338
+ "default": false,
15339
+ "type": "boolean"
15340
+ }
15341
+ },
15342
+ "required": [
15343
+ "findingId",
15344
+ "planDigest",
15345
+ "reason"
15346
+ ],
15347
+ "additionalProperties": false
15348
+ },
15349
+ "outputSchema": {
15350
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
15351
+ "type": "object",
15352
+ "properties": {
15353
+ "findingId": {
15354
+ "type": "string",
15355
+ "minLength": 1,
15356
+ "maxLength": 191
15357
+ },
15358
+ "state": {
15359
+ "type": "string",
15360
+ "enum": [
15361
+ "ready",
15362
+ "admitted",
15363
+ "pending_verification",
15364
+ "recovery_needed",
15365
+ "manual_required",
15366
+ "blocked",
15367
+ "verified"
15368
+ ]
15369
+ },
15370
+ "operationId": {
15371
+ "anyOf": [
15372
+ {
14250
15373
  "type": "string",
14251
15374
  "minLength": 1,
14252
15375
  "maxLength": 191
14253
15376
  },
14254
- "status": {
14255
- "type": "string",
14256
- "enum": [
14257
- "queued",
14258
- "running",
14259
- "completed",
14260
- "failed"
14261
- ]
14262
- },
14263
- "phase": {
15377
+ {
15378
+ "type": "null"
15379
+ }
15380
+ ]
15381
+ },
15382
+ "summary": {
15383
+ "type": "string"
15384
+ },
15385
+ "nextStep": {
15386
+ "anyOf": [
15387
+ {
14264
15388
  "type": "string",
14265
- "minLength": 1,
14266
- "maxLength": 100
15389
+ "maxLength": 200
14267
15390
  },
14268
- "error": {
15391
+ {
15392
+ "type": "null"
15393
+ }
15394
+ ]
15395
+ },
15396
+ "receipt": {
15397
+ "anyOf": [
15398
+ {
14269
15399
  "type": "object",
14270
15400
  "properties": {
14271
- "code": {
15401
+ "disposition": {
14272
15402
  "type": "string",
14273
- "minLength": 1,
14274
- "maxLength": 100
15403
+ "enum": [
15404
+ "moved",
15405
+ "resumed",
15406
+ "noop",
15407
+ "partial",
15408
+ "refused",
15409
+ "failed"
15410
+ ]
14275
15411
  },
14276
- "message": {
14277
- "type": "string",
14278
- "maxLength": 1e3
15412
+ "followThroughComplete": {
15413
+ "type": "boolean"
15414
+ },
15415
+ "admissionAuditIds": {
15416
+ "type": "array",
15417
+ "items": {
15418
+ "type": "string",
15419
+ "minLength": 1,
15420
+ "maxLength": 191
15421
+ }
15422
+ },
15423
+ "completionAuditIds": {
15424
+ "type": "array",
15425
+ "items": {
15426
+ "type": "string",
15427
+ "minLength": 1,
15428
+ "maxLength": 191
15429
+ }
15430
+ },
15431
+ "movedIds": {
15432
+ "type": "object",
15433
+ "propertyNames": {
15434
+ "type": "string"
15435
+ },
15436
+ "additionalProperties": {
15437
+ "type": "array",
15438
+ "items": {
15439
+ "type": "string",
15440
+ "minLength": 1,
15441
+ "maxLength": 191
15442
+ }
15443
+ }
15444
+ },
15445
+ "refusals": {
15446
+ "type": "array",
15447
+ "items": {
15448
+ "type": "string"
15449
+ }
15450
+ },
15451
+ "informationalObservations": {
15452
+ "type": "array",
15453
+ "items": {
15454
+ "type": "string"
15455
+ }
14279
15456
  }
14280
15457
  },
14281
15458
  "required": [
14282
- "code",
14283
- "message"
15459
+ "disposition",
15460
+ "followThroughComplete",
15461
+ "admissionAuditIds",
15462
+ "completionAuditIds",
15463
+ "movedIds"
14284
15464
  ],
14285
15465
  "additionalProperties": false
15466
+ },
15467
+ {
15468
+ "type": "null"
14286
15469
  }
14287
- },
14288
- "required": [
14289
- "kind",
14290
- "operationId",
14291
- "survivingCustomerId",
14292
- "duplicateCustomerId",
14293
- "status",
14294
- "phase"
14295
- ],
14296
- "additionalProperties": false
15470
+ ]
14297
15471
  }
14298
- ]
15472
+ },
15473
+ "required": [
15474
+ "findingId",
15475
+ "state",
15476
+ "operationId",
15477
+ "summary",
15478
+ "nextStep",
15479
+ "receipt"
15480
+ ],
15481
+ "additionalProperties": false
14299
15482
  }
14300
15483
  },
14301
- "outlit_get_customer_merge_status": {
14302
- "toolName": "outlit_get_customer_merge_status",
14303
- "commandId": "customer.merge.status",
15484
+ "outlit_verify_scoped_repair": {
15485
+ "toolName": "outlit_verify_scoped_repair",
15486
+ "commandId": "integrity.scoped_repair.verify",
14304
15487
  "commandVersion": 1,
14305
15488
  "ownerDomain": "identity",
14306
- "title": "Get customer merge status",
14307
- "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.",
15489
+ "title": "Verify scoped identity repair",
15490
+ "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.",
14308
15491
  "annotations": {
14309
- "readOnlyHint": true,
15492
+ "readOnlyHint": false,
14310
15493
  "destructiveHint": false
14311
15494
  },
14312
15495
  "inputSchema": {
14313
15496
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14314
15497
  "type": "object",
14315
15498
  "properties": {
14316
- "operationId": {
15499
+ "findingId": {
14317
15500
  "type": "string",
14318
15501
  "minLength": 1,
14319
15502
  "maxLength": 191
14320
15503
  }
14321
15504
  },
14322
15505
  "required": [
14323
- "operationId"
15506
+ "findingId"
14324
15507
  ],
14325
15508
  "additionalProperties": false
14326
15509
  },
@@ -14328,66 +15511,191 @@ var publicToolContracts = {
14328
15511
  "$schema": "https://json-schema.org/draft/2020-12/schema",
14329
15512
  "type": "object",
14330
15513
  "properties": {
14331
- "kind": {
14332
- "type": "string",
14333
- "const": "operation"
14334
- },
14335
- "operationId": {
14336
- "type": "string",
14337
- "minLength": 1,
14338
- "maxLength": 191
14339
- },
14340
- "survivingCustomerId": {
14341
- "type": "string",
14342
- "minLength": 1,
14343
- "maxLength": 191
14344
- },
14345
- "duplicateCustomerId": {
15514
+ "findingId": {
14346
15515
  "type": "string",
14347
15516
  "minLength": 1,
14348
15517
  "maxLength": 191
14349
15518
  },
14350
- "status": {
15519
+ "state": {
14351
15520
  "type": "string",
14352
15521
  "enum": [
14353
- "queued",
14354
- "running",
14355
- "completed",
14356
- "failed"
15522
+ "ready",
15523
+ "admitted",
15524
+ "pending_verification",
15525
+ "recovery_needed",
15526
+ "manual_required",
15527
+ "blocked",
15528
+ "verified"
14357
15529
  ]
14358
15530
  },
14359
- "phase": {
14360
- "type": "string",
14361
- "minLength": 1,
14362
- "maxLength": 100
14363
- },
14364
- "error": {
14365
- "type": "object",
14366
- "properties": {
14367
- "code": {
15531
+ "operationId": {
15532
+ "anyOf": [
15533
+ {
14368
15534
  "type": "string",
14369
15535
  "minLength": 1,
14370
- "maxLength": 100
15536
+ "maxLength": 191
14371
15537
  },
14372
- "message": {
15538
+ {
15539
+ "type": "null"
15540
+ }
15541
+ ]
15542
+ },
15543
+ "summary": {
15544
+ "type": "string"
15545
+ },
15546
+ "nextStep": {
15547
+ "anyOf": [
15548
+ {
14373
15549
  "type": "string",
14374
- "maxLength": 1e3
15550
+ "maxLength": 200
15551
+ },
15552
+ {
15553
+ "type": "null"
14375
15554
  }
14376
- },
14377
- "required": [
14378
- "code",
14379
- "message"
14380
- ],
14381
- "additionalProperties": false
15555
+ ]
15556
+ },
15557
+ "receipt": {
15558
+ "anyOf": [
15559
+ {
15560
+ "type": "object",
15561
+ "properties": {
15562
+ "disposition": {
15563
+ "type": "string",
15564
+ "enum": [
15565
+ "moved",
15566
+ "resumed",
15567
+ "noop",
15568
+ "partial",
15569
+ "refused",
15570
+ "failed"
15571
+ ]
15572
+ },
15573
+ "followThroughComplete": {
15574
+ "type": "boolean"
15575
+ },
15576
+ "admissionAuditIds": {
15577
+ "type": "array",
15578
+ "items": {
15579
+ "type": "string",
15580
+ "minLength": 1,
15581
+ "maxLength": 191
15582
+ }
15583
+ },
15584
+ "completionAuditIds": {
15585
+ "type": "array",
15586
+ "items": {
15587
+ "type": "string",
15588
+ "minLength": 1,
15589
+ "maxLength": 191
15590
+ }
15591
+ },
15592
+ "movedIds": {
15593
+ "type": "object",
15594
+ "propertyNames": {
15595
+ "type": "string"
15596
+ },
15597
+ "additionalProperties": {
15598
+ "type": "array",
15599
+ "items": {
15600
+ "type": "string",
15601
+ "minLength": 1,
15602
+ "maxLength": 191
15603
+ }
15604
+ }
15605
+ },
15606
+ "refusals": {
15607
+ "type": "array",
15608
+ "items": {
15609
+ "type": "string"
15610
+ }
15611
+ },
15612
+ "informationalObservations": {
15613
+ "type": "array",
15614
+ "items": {
15615
+ "type": "string"
15616
+ }
15617
+ }
15618
+ },
15619
+ "required": [
15620
+ "disposition",
15621
+ "followThroughComplete",
15622
+ "admissionAuditIds",
15623
+ "completionAuditIds",
15624
+ "movedIds"
15625
+ ],
15626
+ "additionalProperties": false
15627
+ },
15628
+ {
15629
+ "type": "null"
15630
+ }
15631
+ ]
15632
+ },
15633
+ "verification": {
15634
+ "anyOf": [
15635
+ {
15636
+ "type": "object",
15637
+ "properties": {
15638
+ "outcome": {
15639
+ "type": "string",
15640
+ "enum": [
15641
+ "verified",
15642
+ "inconclusive"
15643
+ ]
15644
+ },
15645
+ "ownership": {
15646
+ "type": "boolean"
15647
+ },
15648
+ "derived": {
15649
+ "type": "boolean"
15650
+ },
15651
+ "indexed": {
15652
+ "type": "boolean"
15653
+ },
15654
+ "reconstruction": {
15655
+ "type": "string",
15656
+ "enum": [
15657
+ "complete",
15658
+ "pending",
15659
+ "baseline_gap"
15660
+ ]
15661
+ },
15662
+ "warnings": {
15663
+ "type": "array",
15664
+ "items": {
15665
+ "type": "string"
15666
+ }
15667
+ },
15668
+ "informationalObservations": {
15669
+ "type": "array",
15670
+ "items": {
15671
+ "type": "string"
15672
+ }
15673
+ }
15674
+ },
15675
+ "required": [
15676
+ "outcome",
15677
+ "ownership",
15678
+ "derived",
15679
+ "indexed",
15680
+ "reconstruction",
15681
+ "warnings"
15682
+ ],
15683
+ "additionalProperties": false
15684
+ },
15685
+ {
15686
+ "type": "null"
15687
+ }
15688
+ ]
14382
15689
  }
14383
15690
  },
14384
15691
  "required": [
14385
- "kind",
15692
+ "findingId",
15693
+ "state",
14386
15694
  "operationId",
14387
- "survivingCustomerId",
14388
- "duplicateCustomerId",
14389
- "status",
14390
- "phase"
15695
+ "summary",
15696
+ "nextStep",
15697
+ "receipt",
15698
+ "verification"
14391
15699
  ],
14392
15700
  "additionalProperties": false
14393
15701
  }
@@ -14487,7 +15795,11 @@ var consumerToolPolicies = {
14487
15795
  "outlit_list_identity_merge_suggestions",
14488
15796
  "outlit_reject_identity_merge_suggestion",
14489
15797
  "outlit_merge_customers",
14490
- "outlit_get_customer_merge_status"
15798
+ "outlit_get_customer_merge_status",
15799
+ "outlit_list_scoped_repairs",
15800
+ "outlit_preview_scoped_repair",
15801
+ "outlit_execute_scoped_repair",
15802
+ "outlit_verify_scoped_repair"
14491
15803
  ],
14492
15804
  "cli": [
14493
15805
  "outlit_list_customers",
@@ -14536,7 +15848,11 @@ var consumerToolPolicies = {
14536
15848
  "outlit_list_identity_merge_suggestions",
14537
15849
  "outlit_reject_identity_merge_suggestion",
14538
15850
  "outlit_merge_customers",
14539
- "outlit_get_customer_merge_status"
15851
+ "outlit_get_customer_merge_status",
15852
+ "outlit_list_scoped_repairs",
15853
+ "outlit_preview_scoped_repair",
15854
+ "outlit_execute_scoped_repair",
15855
+ "outlit_verify_scoped_repair"
14540
15856
  ]
14541
15857
  };
14542
15858
  var toolGatewayTransport = {
@@ -15859,7 +17175,7 @@ var schemaTables = [
15859
17175
  "users",
15860
17176
  "revenue"
15861
17177
  ];
15862
- var sdkConsumerContractHash = "ef50db53b08b67d02c0b6b17e7e5a0181e6a078f2a3ab3f09ca1b807765e149c";
17178
+ var sdkConsumerContractHash = "4487d082473e65e51514b2a491210e1aab16dc7b0045412e4c11e6d89bc4ab5a";
15863
17179
 
15864
17180
  // src/contracts.ts
15865
17181
  var publicToolNameSet = new Set(publicToolNames);