@outlit/tools 2.2.2 → 2.2.4

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