@outlit/cli 3.2.2 → 3.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.
Files changed (2) hide show
  1. package/dist/cli.js +877 -31
  2. package/package.json +2 -2
package/dist/cli.js CHANGED
@@ -104,7 +104,7 @@ var package_default;
104
104
  var init_package = __esm(() => {
105
105
  package_default = {
106
106
  name: "@outlit/cli",
107
- version: "3.2.2",
107
+ version: "3.2.3",
108
108
  description: "CLI for querying Outlit customer context and installing agent skills",
109
109
  license: "Apache-2.0",
110
110
  repository: {
@@ -147,7 +147,7 @@ var init_package = __esm(() => {
147
147
  },
148
148
  dependencies: {
149
149
  "@clack/prompts": "^1.0.1",
150
- "@outlit/tools": "^2.2.1",
150
+ "@outlit/tools": "^2.2.2",
151
151
  citty: "^0.2.1"
152
152
  },
153
153
  devDependencies: {
@@ -1742,6 +1742,7 @@ var init_dist4 = __esm(() => {
1742
1742
  "outlit_enable_destination",
1743
1743
  "outlit_disable_destination",
1744
1744
  "outlit_archive_destination",
1745
+ "outlit_submit_feedback",
1745
1746
  "outlit_get_integration_capabilities",
1746
1747
  "outlit_begin_integration_setup",
1747
1748
  "outlit_get_integration_setup_status",
@@ -1773,6 +1774,10 @@ var init_dist4 = __esm(() => {
1773
1774
  ownerDomain: "customers",
1774
1775
  title: "List Customers",
1775
1776
  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).",
1777
+ annotations: {
1778
+ readOnlyHint: true,
1779
+ destructiveHint: false
1780
+ },
1776
1781
  inputSchema: {
1777
1782
  $schema: "https://json-schema.org/draft/2020-12/schema",
1778
1783
  type: "object",
@@ -2094,6 +2099,10 @@ var init_dist4 = __esm(() => {
2094
2099
  ownerDomain: "users",
2095
2100
  title: "List Users",
2096
2101
  description: "Browse and filter users. Use this to find users by journey stage, activity recency, customer, or email/name. Returns a paginated list with activity info.",
2102
+ annotations: {
2103
+ readOnlyHint: true,
2104
+ destructiveHint: false
2105
+ },
2097
2106
  inputSchema: {
2098
2107
  $schema: "https://json-schema.org/draft/2020-12/schema",
2099
2108
  type: "object",
@@ -2374,6 +2383,10 @@ var init_dist4 = __esm(() => {
2374
2383
  ownerDomain: "users",
2375
2384
  title: "List Workspace Users",
2376
2385
  description: "List active workspace members who resolve to local Outlit users. Use this to discover exact user IDs for customer ownership and access commands or to browse account ownership.",
2386
+ annotations: {
2387
+ readOnlyHint: true,
2388
+ destructiveHint: false
2389
+ },
2377
2390
  inputSchema: {
2378
2391
  $schema: "https://json-schema.org/draft/2020-12/schema",
2379
2392
  type: "object",
@@ -2561,6 +2574,10 @@ var init_dist4 = __esm(() => {
2561
2574
  ownerDomain: "customers",
2562
2575
  title: "Get Customer",
2563
2576
  description: "Get full details for a single customer. Optionally include users, revenue, recent activity, engagement metrics, or company enrichment.",
2577
+ annotations: {
2578
+ readOnlyHint: true,
2579
+ destructiveHint: false
2580
+ },
2564
2581
  inputSchema: {
2565
2582
  $schema: "https://json-schema.org/draft/2020-12/schema",
2566
2583
  type: "object",
@@ -3363,6 +3380,10 @@ var init_dist4 = __esm(() => {
3363
3380
  ownerDomain: "customers",
3364
3381
  title: "Get Customer Relationship",
3365
3382
  description: "Get the bounded, evidence-backed relationship shown on a customer page. Returns a summary, categorized current statements with ISO observed-at timestamps when supported, source labels, and the compiled summary timestamp when available without raw facts, quotes, or internal status.",
3383
+ annotations: {
3384
+ readOnlyHint: true,
3385
+ destructiveHint: false
3386
+ },
3366
3387
  inputSchema: {
3367
3388
  $schema: "https://json-schema.org/draft/2020-12/schema",
3368
3389
  type: "object",
@@ -3514,6 +3535,10 @@ var init_dist4 = __esm(() => {
3514
3535
  ownerDomain: "customers",
3515
3536
  title: "Assign Customer Owner",
3516
3537
  description: "Assign an active workspace member as this customer’s primary owner. The former owner keeps Editor access.",
3538
+ annotations: {
3539
+ readOnlyHint: false,
3540
+ destructiveHint: false
3541
+ },
3517
3542
  inputSchema: {
3518
3543
  $schema: "https://json-schema.org/draft/2020-12/schema",
3519
3544
  type: "object",
@@ -3570,6 +3595,10 @@ var init_dist4 = __esm(() => {
3570
3595
  ownerDomain: "customers",
3571
3596
  title: "Grant Customer Access",
3572
3597
  description: "Share a customer with an active workspace member as a Viewer or Editor. The customer ID must be exact.",
3598
+ annotations: {
3599
+ readOnlyHint: false,
3600
+ destructiveHint: false
3601
+ },
3573
3602
  inputSchema: {
3574
3603
  $schema: "https://json-schema.org/draft/2020-12/schema",
3575
3604
  type: "object",
@@ -3651,6 +3680,10 @@ var init_dist4 = __esm(() => {
3651
3680
  ownerDomain: "customers",
3652
3681
  title: "Update Customer Access",
3653
3682
  description: "Change an existing customer collaborator between Viewer and Editor.",
3683
+ annotations: {
3684
+ readOnlyHint: false,
3685
+ destructiveHint: false
3686
+ },
3654
3687
  inputSchema: {
3655
3688
  $schema: "https://json-schema.org/draft/2020-12/schema",
3656
3689
  type: "object",
@@ -3732,6 +3765,10 @@ var init_dist4 = __esm(() => {
3732
3765
  ownerDomain: "customers",
3733
3766
  title: "Revoke Customer Access",
3734
3767
  description: "Remove a collaborator’s explicit access to a customer.",
3768
+ annotations: {
3769
+ readOnlyHint: false,
3770
+ destructiveHint: true
3771
+ },
3735
3772
  inputSchema: {
3736
3773
  $schema: "https://json-schema.org/draft/2020-12/schema",
3737
3774
  type: "object",
@@ -3776,7 +3813,11 @@ var init_dist4 = __esm(() => {
3776
3813
  commandVersion: 1,
3777
3814
  ownerDomain: "customer-context",
3778
3815
  title: "Get Customer Timeline",
3779
- description: "Get the chronological activity timeline for a customer. Use this to see what happened and when — emails, calls, Slack messages, billing events, etc. Supports channel and date filtering.",
3816
+ description: 'Get the chronological activity timeline for a customer — compact event entries by default, so unfiltered calls stay small. When channels is omitted the response covers the relationship chronology (communication, meetings, support, CRM, billing). Pass channels:["PRODUCT"] to add a weekly product-usage aggregate; set productDetail to "material" or "raw" to also return individual product events. Set includeMetadata:true only when a specific event metadata field is needed; pass sourceType/sourceId or sourceRef to outlit_get_source to read a full underlying record.',
3817
+ annotations: {
3818
+ readOnlyHint: true,
3819
+ destructiveHint: false
3820
+ },
3780
3821
  inputSchema: {
3781
3822
  $schema: "https://json-schema.org/draft/2020-12/schema",
3782
3823
  type: "object",
@@ -3788,7 +3829,7 @@ var init_dist4 = __esm(() => {
3788
3829
  description: "Customer ID or domain"
3789
3830
  },
3790
3831
  channels: {
3791
- description: "Filter by event channel. Use values such as PRODUCT, COMMUNICATION, MEETING, CRM, BILLING, SUPPORT, IDENTITY, DOCUMENT, or SYSTEM.",
3832
+ description: 'Filter by event channel. When omitted, defaults to the relationship channels COMMUNICATION, MEETING, SUPPORT, CRM, and BILLING. PRODUCT, IDENTITY, DOCUMENT, and SYSTEM are included only when listed here. Pass channels:["PRODUCT"] to read the weekly product usage aggregate, and combine with productDetail to also return individual product events.',
3792
3833
  type: "array",
3793
3834
  items: {
3794
3835
  type: "string",
@@ -3805,6 +3846,19 @@ var init_dist4 = __esm(() => {
3805
3846
  ]
3806
3847
  }
3807
3848
  },
3849
+ productDetail: {
3850
+ description: 'Controls whether PRODUCT-channel rows appear in `events` when channels includes PRODUCT. "none" (default): product activity is returned only as the `product` weekly usage aggregate — no product telemetry rows. "material": also include individual product events that match the organization\'s configured value-feature event names (each keeps an `id` usable for citations); when the organization has no configured value features this returns no product rows, but the `product` aggregate is still returned. "raw": include every product event, including autocapture, pageview, feature-flag, and identity telemetry — large; request only when the aggregate and material events are insufficient.',
3851
+ type: "string",
3852
+ enum: [
3853
+ "none",
3854
+ "material",
3855
+ "raw"
3856
+ ]
3857
+ },
3858
+ includeMetadata: {
3859
+ description: "Include each event's raw metadata/properties payload. Default false: events return compact fields only, keeping the response small. Pass true only when a specific metadata field is needed.",
3860
+ type: "boolean"
3861
+ },
3808
3862
  eventTypes: {
3809
3863
  description: "Filter by event type",
3810
3864
  type: "array",
@@ -3861,7 +3915,8 @@ var init_dist4 = __esm(() => {
3861
3915
  type: "object",
3862
3916
  properties: {
3863
3917
  id: {
3864
- type: "string"
3918
+ type: "string",
3919
+ description: "Stable event identifier. Pass as timeline_event eventId when citing this event."
3865
3920
  },
3866
3921
  eventType: {
3867
3922
  type: "string"
@@ -3901,7 +3956,8 @@ var init_dist4 = __esm(() => {
3901
3956
  {
3902
3957
  type: "null"
3903
3958
  }
3904
- ]
3959
+ ],
3960
+ description: "Bounded display summary, truncated past roughly 2 KB. Use outlit_get_source on sourceType/sourceId for the full underlying content."
3905
3961
  },
3906
3962
  occurredAt: {
3907
3963
  type: "string",
@@ -3939,6 +3995,7 @@ var init_dist4 = __esm(() => {
3939
3995
  ]
3940
3996
  },
3941
3997
  sourceRef: {
3998
+ description: "Canonical source handle for this event, emitted only when outlit_get_source can retrieve the underlying record; omitted when the event is marked unreadable.",
3942
3999
  type: "object",
3943
4000
  properties: {
3944
4001
  sourceType: {
@@ -3954,7 +4011,17 @@ var init_dist4 = __esm(() => {
3954
4011
  ],
3955
4012
  additionalProperties: false
3956
4013
  },
4014
+ unreadable: {
4015
+ description: "Present only when the event's underlying source record cannot be retrieved via outlit_get_source. Do not retry source lookups for this event.",
4016
+ type: "boolean",
4017
+ const: true
4018
+ },
4019
+ unreadableReason: {
4020
+ description: "Why the event's source is unreadable, e.g. unresolved_source or ambiguous_source.",
4021
+ type: "string"
4022
+ },
3957
4023
  metadata: {
4024
+ description: "Raw event properties. Present only when the request set includeMetadata:true.",
3958
4025
  type: "object",
3959
4026
  propertyNames: {
3960
4027
  type: "string"
@@ -3972,8 +4039,7 @@ var init_dist4 = __esm(() => {
3972
4039
  "occurredAt",
3973
4040
  "contact",
3974
4041
  "sourceType",
3975
- "sourceId",
3976
- "metadata"
4042
+ "sourceId"
3977
4043
  ],
3978
4044
  additionalProperties: false
3979
4045
  }
@@ -3993,11 +4059,112 @@ var init_dist4 = __esm(() => {
3993
4059
  type: "null"
3994
4060
  }
3995
4061
  ]
4062
+ },
4063
+ effectiveLimit: {
4064
+ type: "integer",
4065
+ minimum: 1,
4066
+ maximum: 9007199254740991,
4067
+ description: "The maximum number of events a page of this response can contain. Responses can hold fewer events than requested when hosted response-size limits apply; callers should rely on pagination.hasMore/nextCursor rather than event count to detect truncation."
3996
4068
  }
3997
4069
  },
3998
4070
  required: [
3999
4071
  "hasMore",
4000
- "nextCursor"
4072
+ "nextCursor",
4073
+ "effectiveLimit"
4074
+ ],
4075
+ additionalProperties: false
4076
+ },
4077
+ product: {
4078
+ description: 'Present when the request\'s channels include PRODUCT. Weekly product usage aggregate for the requested window: value-feature event counts and distinct active users per UTC week, plus the window\'s top value-feature event names. Individual product events appear in `events` only when productDetail is "material" or "raw".',
4079
+ type: "object",
4080
+ properties: {
4081
+ windowStartAt: {
4082
+ type: "string",
4083
+ format: "date-time",
4084
+ 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))$",
4085
+ description: "Start of the aggregate coverage window: the UTC week containing the requested start (or the earliest retained week)."
4086
+ },
4087
+ windowEndAt: {
4088
+ type: "string",
4089
+ format: "date-time",
4090
+ 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))$",
4091
+ description: "End of the aggregate coverage window (the request end bound)"
4092
+ },
4093
+ weeklyBuckets: {
4094
+ type: "array",
4095
+ items: {
4096
+ type: "object",
4097
+ properties: {
4098
+ weekStartAt: {
4099
+ type: "string",
4100
+ format: "date-time",
4101
+ 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))$",
4102
+ description: "Start of the bucket's UTC week (Monday 00:00:00Z)"
4103
+ },
4104
+ events: {
4105
+ type: "integer",
4106
+ minimum: 0,
4107
+ maximum: 9007199254740991,
4108
+ description: "Events in this week matching the organization's configured value features"
4109
+ },
4110
+ activeUsers: {
4111
+ type: "integer",
4112
+ minimum: 0,
4113
+ maximum: 9007199254740991,
4114
+ description: "Distinct users with product activity this week"
4115
+ }
4116
+ },
4117
+ required: [
4118
+ "weekStartAt",
4119
+ "events",
4120
+ "activeUsers"
4121
+ ],
4122
+ additionalProperties: false
4123
+ },
4124
+ description: "UTC week buckets covering the requested window, oldest first"
4125
+ },
4126
+ topEventNames: {
4127
+ type: "array",
4128
+ items: {
4129
+ type: "object",
4130
+ properties: {
4131
+ eventName: {
4132
+ type: "string"
4133
+ },
4134
+ events: {
4135
+ type: "integer",
4136
+ minimum: 0,
4137
+ maximum: 9007199254740991
4138
+ }
4139
+ },
4140
+ required: [
4141
+ "eventName",
4142
+ "events"
4143
+ ],
4144
+ additionalProperties: false
4145
+ },
4146
+ description: "Most frequent configured value-feature event names across the window"
4147
+ }
4148
+ },
4149
+ required: [
4150
+ "windowStartAt",
4151
+ "windowEndAt",
4152
+ "weeklyBuckets",
4153
+ "topEventNames"
4154
+ ],
4155
+ additionalProperties: false
4156
+ },
4157
+ productUnavailable: {
4158
+ description: "Present only when channels included PRODUCT but the weekly usage aggregate could not be computed. Report product usage as unavailable — never as zero or absent usage. When configured value-feature names are still known, material product events are returned in `events` instead of the aggregate.",
4159
+ type: "object",
4160
+ properties: {
4161
+ reason: {
4162
+ type: "string",
4163
+ description: "Machine-readable reason the usage aggregate could not be computed"
4164
+ }
4165
+ },
4166
+ required: [
4167
+ "reason"
4001
4168
  ],
4002
4169
  additionalProperties: false
4003
4170
  }
@@ -4016,6 +4183,10 @@ var init_dist4 = __esm(() => {
4016
4183
  ownerDomain: "customer-context",
4017
4184
  title: "List Customer Facts",
4018
4185
  description: "List structured facts known about a customer. Use filters like status, sourceTypes, factTypes, factCategories, and date bounds to narrow the result set. For topic-specific retrieval, use outlit_search_customer_context instead.",
4186
+ annotations: {
4187
+ readOnlyHint: true,
4188
+ destructiveHint: false
4189
+ },
4019
4190
  inputSchema: {
4020
4191
  $schema: "https://json-schema.org/draft/2020-12/schema",
4021
4192
  type: "object",
@@ -4702,6 +4873,10 @@ CHAMPION_RISK: Historical broad relationship-risk fact retained for existing row
4702
4873
  ownerDomain: "customer-context",
4703
4874
  title: "Get Customer Fact",
4704
4875
  description: "Get one exact fact by ID. Returns the canonical fact shape and optionally expands requested related data such as evidence.",
4876
+ annotations: {
4877
+ readOnlyHint: true,
4878
+ destructiveHint: false
4879
+ },
4705
4880
  inputSchema: {
4706
4881
  $schema: "https://json-schema.org/draft/2020-12/schema",
4707
4882
  type: "object",
@@ -5204,6 +5379,10 @@ CHAMPION_RISK: Historical broad relationship-risk fact retained for existing row
5204
5379
  ownerDomain: "customer-context",
5205
5380
  title: "Get Source",
5206
5381
  description: "Get one exact source record by generic sourceType and sourceId. Use this when you already know the concrete underlying source you want to inspect.",
5382
+ annotations: {
5383
+ readOnlyHint: true,
5384
+ destructiveHint: false
5385
+ },
5207
5386
  inputSchema: {
5208
5387
  $schema: "https://json-schema.org/draft/2020-12/schema",
5209
5388
  type: "object",
@@ -5584,6 +5763,10 @@ CHAMPION_RISK: Historical broad relationship-risk fact retained for existing row
5584
5763
  ownerDomain: "customer-context",
5585
5764
  title: "List Sources",
5586
5765
  description: "List concrete source records deterministically. Use this instead of semantic search when you need enumerated calls, emails, calendar events, support tickets, Slack conversations, or opportunities.",
5766
+ annotations: {
5767
+ readOnlyHint: true,
5768
+ destructiveHint: false
5769
+ },
5587
5770
  inputSchema: {
5588
5771
  $schema: "https://json-schema.org/draft/2020-12/schema",
5589
5772
  type: "object",
@@ -6027,6 +6210,10 @@ CHAMPION_RISK: Historical broad relationship-risk fact retained for existing row
6027
6210
  ownerDomain: "customer-context",
6028
6211
  title: "Search Customer Context",
6029
6212
  description: "Search across all known customer context using a natural-language query. Returns ranked artifact-level discovery previews with at most two matching excerpts per source or fact. Use outlit_get_source with a returned sourceType and sourceId when you need the canonical source contents. Omit customer to search across all customers in the organization.",
6213
+ annotations: {
6214
+ readOnlyHint: true,
6215
+ destructiveHint: false
6216
+ },
6030
6217
  inputSchema: {
6031
6218
  $schema: "https://json-schema.org/draft/2020-12/schema",
6032
6219
  type: "object",
@@ -6816,6 +7003,10 @@ Example queries:
6816
7003
  - SELECT event_name, count(*) FROM activity GROUP BY 1 ORDER BY 2 DESC LIMIT 10
6817
7004
  - SELECT billing_status, sum(mrr_cents)/100 as mrr FROM customers GROUP BY 1
6818
7005
  - SELECT * FROM activity WHERE customer_id = 'cust_123' ORDER BY occurred_at DESC LIMIT 50`,
7006
+ annotations: {
7007
+ readOnlyHint: true,
7008
+ destructiveHint: false
7009
+ },
6819
7010
  inputSchema: {
6820
7011
  $schema: "https://json-schema.org/draft/2020-12/schema",
6821
7012
  type: "object",
@@ -6898,6 +7089,10 @@ Example queries:
6898
7089
 
6899
7090
  Use this to discover column names, types, and descriptions before writing SQL queries.
6900
7091
  Returns column definitions and example queries for each view.`,
7092
+ annotations: {
7093
+ readOnlyHint: true,
7094
+ destructiveHint: false
7095
+ },
6901
7096
  inputSchema: {
6902
7097
  $schema: "https://json-schema.org/draft/2020-12/schema",
6903
7098
  type: "object",
@@ -7102,6 +7297,10 @@ Returns column definitions and example queries for each view.`,
7102
7297
  ownerDomain: "destinations",
7103
7298
  title: "List Destinations",
7104
7299
  description: "List configured destinations using safe status fields and masked configuration only.",
7300
+ annotations: {
7301
+ readOnlyHint: true,
7302
+ destructiveHint: false
7303
+ },
7105
7304
  inputSchema: {
7106
7305
  $schema: "https://json-schema.org/draft/2020-12/schema",
7107
7306
  type: "object",
@@ -7481,6 +7680,10 @@ Returns column definitions and example queries for each view.`,
7481
7680
  ownerDomain: "destinations",
7482
7681
  title: "Get Destination",
7483
7682
  description: "Get one destination using safe status fields and masked configuration only.",
7683
+ annotations: {
7684
+ readOnlyHint: true,
7685
+ destructiveHint: false
7686
+ },
7484
7687
  inputSchema: {
7485
7688
  $schema: "https://json-schema.org/draft/2020-12/schema",
7486
7689
  type: "object",
@@ -7866,6 +8069,10 @@ Returns column definitions and example queries for each view.`,
7866
8069
  ownerDomain: "destinations",
7867
8070
  title: "Create Destination",
7868
8071
  description: "Create a Slack channel destination from an available channel.",
8072
+ annotations: {
8073
+ readOnlyHint: false,
8074
+ destructiveHint: false
8075
+ },
7869
8076
  inputSchema: {
7870
8077
  $schema: "https://json-schema.org/draft/2020-12/schema",
7871
8078
  type: "object",
@@ -8270,6 +8477,10 @@ Returns column definitions and example queries for each view.`,
8270
8477
  ownerDomain: "destinations",
8271
8478
  title: "Update Destination",
8272
8479
  description: "Update ordinary destination metadata. Use the dedicated enable or disable tool for lifecycle state.",
8480
+ annotations: {
8481
+ readOnlyHint: false,
8482
+ destructiveHint: false
8483
+ },
8273
8484
  inputSchema: {
8274
8485
  $schema: "https://json-schema.org/draft/2020-12/schema",
8275
8486
  type: "object",
@@ -8669,6 +8880,10 @@ Returns column definitions and example queries for each view.`,
8669
8880
  ownerDomain: "destinations",
8670
8881
  title: "Enable Destination",
8671
8882
  description: "Enable an ordinary destination that is ready for delivery.",
8883
+ annotations: {
8884
+ readOnlyHint: false,
8885
+ destructiveHint: false
8886
+ },
8672
8887
  inputSchema: {
8673
8888
  $schema: "https://json-schema.org/draft/2020-12/schema",
8674
8889
  type: "object",
@@ -9054,6 +9269,10 @@ Returns column definitions and example queries for each view.`,
9054
9269
  ownerDomain: "destinations",
9055
9270
  title: "Disable Destination",
9056
9271
  description: "Disable an ordinary non-default destination.",
9272
+ annotations: {
9273
+ readOnlyHint: false,
9274
+ destructiveHint: false
9275
+ },
9057
9276
  inputSchema: {
9058
9277
  $schema: "https://json-schema.org/draft/2020-12/schema",
9059
9278
  type: "object",
@@ -9439,6 +9658,10 @@ Returns column definitions and example queries for each view.`,
9439
9658
  ownerDomain: "destinations",
9440
9659
  title: "Archive Destination",
9441
9660
  description: "Archive an ordinary destination.",
9661
+ annotations: {
9662
+ readOnlyHint: false,
9663
+ destructiveHint: true
9664
+ },
9442
9665
  inputSchema: {
9443
9666
  $schema: "https://json-schema.org/draft/2020-12/schema",
9444
9667
  type: "object",
@@ -9485,6 +9708,64 @@ Returns column definitions and example queries for each view.`,
9485
9708
  additionalProperties: false
9486
9709
  }
9487
9710
  },
9711
+ outlit_submit_feedback: {
9712
+ toolName: "outlit_submit_feedback",
9713
+ commandId: "feedback.submit",
9714
+ commandVersion: 1,
9715
+ ownerDomain: "feedback",
9716
+ title: "Submit Product Feedback",
9717
+ description: "Submit product feedback to Outlit. This does not open a support ticket or promise a reply.",
9718
+ annotations: {
9719
+ readOnlyHint: false,
9720
+ destructiveHint: false
9721
+ },
9722
+ inputSchema: {
9723
+ $schema: "https://json-schema.org/draft/2020-12/schema",
9724
+ type: "object",
9725
+ properties: {
9726
+ body: {
9727
+ type: "string",
9728
+ minLength: 1,
9729
+ maxLength: 20000
9730
+ },
9731
+ area: {
9732
+ type: "string",
9733
+ minLength: 1,
9734
+ maxLength: 100
9735
+ },
9736
+ context: {
9737
+ type: "object",
9738
+ propertyNames: {
9739
+ type: "string"
9740
+ },
9741
+ additionalProperties: {}
9742
+ }
9743
+ },
9744
+ required: [
9745
+ "body"
9746
+ ],
9747
+ additionalProperties: false
9748
+ },
9749
+ outputSchema: {
9750
+ $schema: "https://json-schema.org/draft/2020-12/schema",
9751
+ type: "object",
9752
+ properties: {
9753
+ id: {
9754
+ type: "string"
9755
+ },
9756
+ createdAt: {
9757
+ type: "string",
9758
+ format: "date-time",
9759
+ 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))$"
9760
+ }
9761
+ },
9762
+ required: [
9763
+ "id",
9764
+ "createdAt"
9765
+ ],
9766
+ additionalProperties: false
9767
+ }
9768
+ },
9488
9769
  outlit_get_integration_capabilities: {
9489
9770
  toolName: "outlit_get_integration_capabilities",
9490
9771
  commandId: "integration.capabilities.get",
@@ -9492,6 +9773,10 @@ Returns column definitions and example queries for each view.`,
9492
9773
  ownerDomain: "integrations",
9493
9774
  title: "Get Integration Capabilities",
9494
9775
  description: "Describe safe integration setup modes without exposing credential fields or provider configuration.",
9776
+ annotations: {
9777
+ readOnlyHint: true,
9778
+ destructiveHint: false
9779
+ },
9495
9780
  inputSchema: {
9496
9781
  $schema: "https://json-schema.org/draft/2020-12/schema",
9497
9782
  type: "object",
@@ -9584,6 +9869,10 @@ Returns column definitions and example queries for each view.`,
9584
9869
  ownerDomain: "integrations",
9585
9870
  title: "Begin Integration Setup",
9586
9871
  description: "Begin a short-lived browser handoff for an integration that supports browser authentication.",
9872
+ annotations: {
9873
+ readOnlyHint: false,
9874
+ destructiveHint: false
9875
+ },
9587
9876
  inputSchema: {
9588
9877
  $schema: "https://json-schema.org/draft/2020-12/schema",
9589
9878
  type: "object",
@@ -9668,6 +9957,10 @@ Returns column definitions and example queries for each view.`,
9668
9957
  ownerDomain: "integrations",
9669
9958
  title: "Get Integration Setup Status",
9670
9959
  description: "Check a browser setup handoff owned by the current actor.",
9960
+ annotations: {
9961
+ readOnlyHint: true,
9962
+ destructiveHint: false
9963
+ },
9671
9964
  inputSchema: {
9672
9965
  $schema: "https://json-schema.org/draft/2020-12/schema",
9673
9966
  type: "object",
@@ -9723,6 +10016,10 @@ Returns column definitions and example queries for each view.`,
9723
10016
  ownerDomain: "integrations",
9724
10017
  title: "Get Integration Status",
9725
10018
  description: "Get the configuration-readiness status for one integration or the public integration catalog.",
10019
+ annotations: {
10020
+ readOnlyHint: true,
10021
+ destructiveHint: false
10022
+ },
9726
10023
  inputSchema: {
9727
10024
  $schema: "https://json-schema.org/draft/2020-12/schema",
9728
10025
  type: "object",
@@ -9818,6 +10115,10 @@ Returns column definitions and example queries for each view.`,
9818
10115
  ownerDomain: "integrations",
9819
10116
  title: "Set Up Integration",
9820
10117
  description: "Continue integration setup through validated credentials, safe configuration, or a trusted browser handoff.",
10118
+ annotations: {
10119
+ readOnlyHint: false,
10120
+ destructiveHint: false
10121
+ },
9821
10122
  inputSchema: {
9822
10123
  $schema: "https://json-schema.org/draft/2020-12/schema",
9823
10124
  anyOf: [
@@ -10693,6 +10994,10 @@ Returns column definitions and example queries for each view.`,
10693
10994
  ownerDomain: "customer_activation",
10694
10995
  title: "Get Customer Activation",
10695
10996
  description: "Get the product event currently configured to activate customers and users.",
10997
+ annotations: {
10998
+ readOnlyHint: true,
10999
+ destructiveHint: false
11000
+ },
10696
11001
  inputSchema: {
10697
11002
  $schema: "https://json-schema.org/draft/2020-12/schema",
10698
11003
  type: "object",
@@ -10738,6 +11043,10 @@ Returns column definitions and example queries for each view.`,
10738
11043
  ownerDomain: "customer_activation",
10739
11044
  title: "Preview Customer Activation",
10740
11045
  description: "Preview the bounded recent impact of choosing a product event for customer activation without changing configuration.",
11046
+ annotations: {
11047
+ readOnlyHint: true,
11048
+ destructiveHint: false
11049
+ },
10741
11050
  inputSchema: {
10742
11051
  $schema: "https://json-schema.org/draft/2020-12/schema",
10743
11052
  type: "object",
@@ -10930,6 +11239,10 @@ Returns column definitions and example queries for each view.`,
10930
11239
  ownerDomain: "customer_activation",
10931
11240
  title: "Update Customer Activation",
10932
11241
  description: "Set the product event used for future customer activation, or disable event-based activation with null. This does not backfill history.",
11242
+ annotations: {
11243
+ readOnlyHint: false,
11244
+ destructiveHint: false
11245
+ },
10933
11246
  inputSchema: {
10934
11247
  $schema: "https://json-schema.org/draft/2020-12/schema",
10935
11248
  type: "object",
@@ -10994,7 +11307,11 @@ Returns column definitions and example queries for each view.`,
10994
11307
  commandVersion: 1,
10995
11308
  ownerDomain: "settings",
10996
11309
  title: "Get Workspace Settings",
10997
- description: "Get the workspace default timezone used by time-based product behavior.",
11310
+ description: "Get the workspace default timezone and the default customer owner used as the lowest-ranked ownership source.",
11311
+ annotations: {
11312
+ readOnlyHint: true,
11313
+ destructiveHint: false
11314
+ },
10998
11315
  inputSchema: {
10999
11316
  $schema: "https://json-schema.org/draft/2020-12/schema",
11000
11317
  type: "object",
@@ -11011,10 +11328,32 @@ Returns column definitions and example queries for each view.`,
11011
11328
  defaultTimezone: {
11012
11329
  type: "string",
11013
11330
  minLength: 1
11331
+ },
11332
+ customerOwnership: {
11333
+ type: "object",
11334
+ properties: {
11335
+ defaultOwnerUserId: {
11336
+ anyOf: [
11337
+ {
11338
+ type: "string",
11339
+ minLength: 1,
11340
+ maxLength: 191
11341
+ },
11342
+ {
11343
+ type: "null"
11344
+ }
11345
+ ]
11346
+ }
11347
+ },
11348
+ required: [
11349
+ "defaultOwnerUserId"
11350
+ ],
11351
+ additionalProperties: false
11014
11352
  }
11015
11353
  },
11016
11354
  required: [
11017
- "defaultTimezone"
11355
+ "defaultTimezone",
11356
+ "customerOwnership"
11018
11357
  ],
11019
11358
  additionalProperties: false
11020
11359
  }
@@ -11031,7 +11370,11 @@ Returns column definitions and example queries for each view.`,
11031
11370
  commandVersion: 1,
11032
11371
  ownerDomain: "settings",
11033
11372
  title: "Update Workspace Settings",
11034
- description: "Update the workspace default timezone using a valid IANA timezone.",
11373
+ description: "Update the workspace default timezone (a valid IANA timezone) and/or the default customer owner (an active workspace member, or null to clear).",
11374
+ annotations: {
11375
+ readOnlyHint: false,
11376
+ destructiveHint: false
11377
+ },
11035
11378
  inputSchema: {
11036
11379
  $schema: "https://json-schema.org/draft/2020-12/schema",
11037
11380
  type: "object",
@@ -11039,11 +11382,29 @@ Returns column definitions and example queries for each view.`,
11039
11382
  defaultTimezone: {
11040
11383
  type: "string",
11041
11384
  minLength: 1
11385
+ },
11386
+ customerOwnership: {
11387
+ type: "object",
11388
+ properties: {
11389
+ defaultOwnerUserId: {
11390
+ anyOf: [
11391
+ {
11392
+ type: "string",
11393
+ minLength: 1,
11394
+ maxLength: 191
11395
+ },
11396
+ {
11397
+ type: "null"
11398
+ }
11399
+ ]
11400
+ }
11401
+ },
11402
+ required: [
11403
+ "defaultOwnerUserId"
11404
+ ],
11405
+ additionalProperties: false
11042
11406
  }
11043
11407
  },
11044
- required: [
11045
- "defaultTimezone"
11046
- ],
11047
11408
  additionalProperties: false
11048
11409
  },
11049
11410
  outputSchema: {
@@ -11056,10 +11417,32 @@ Returns column definitions and example queries for each view.`,
11056
11417
  defaultTimezone: {
11057
11418
  type: "string",
11058
11419
  minLength: 1
11420
+ },
11421
+ customerOwnership: {
11422
+ type: "object",
11423
+ properties: {
11424
+ defaultOwnerUserId: {
11425
+ anyOf: [
11426
+ {
11427
+ type: "string",
11428
+ minLength: 1,
11429
+ maxLength: 191
11430
+ },
11431
+ {
11432
+ type: "null"
11433
+ }
11434
+ ]
11435
+ }
11436
+ },
11437
+ required: [
11438
+ "defaultOwnerUserId"
11439
+ ],
11440
+ additionalProperties: false
11059
11441
  }
11060
11442
  },
11061
11443
  required: [
11062
- "defaultTimezone"
11444
+ "defaultTimezone",
11445
+ "customerOwnership"
11063
11446
  ],
11064
11447
  additionalProperties: false
11065
11448
  }
@@ -11077,6 +11460,10 @@ Returns column definitions and example queries for each view.`,
11077
11460
  ownerDomain: "value_features",
11078
11461
  title: "List Features",
11079
11462
  description: "List configured features, exact historical usage, eligible sources, and observed event candidates.",
11463
+ annotations: {
11464
+ readOnlyHint: true,
11465
+ destructiveHint: false
11466
+ },
11080
11467
  inputSchema: {
11081
11468
  $schema: "https://json-schema.org/draft/2020-12/schema",
11082
11469
  type: "object",
@@ -11627,6 +12014,10 @@ Returns column definitions and example queries for each view.`,
11627
12014
  ownerDomain: "value_features",
11628
12015
  title: "Create Feature",
11629
12016
  description: "Create or idempotently return one customer-value Feature observed by one event rule.",
12017
+ annotations: {
12018
+ readOnlyHint: false,
12019
+ destructiveHint: false
12020
+ },
11630
12021
  inputSchema: {
11631
12022
  $schema: "https://json-schema.org/draft/2020-12/schema",
11632
12023
  type: "object",
@@ -11943,6 +12334,10 @@ Returns column definitions and example queries for each view.`,
11943
12334
  ownerDomain: "value_features",
11944
12335
  title: "Archive Feature",
11945
12336
  description: "Archive a Feature when at least one other active Feature remains.",
12337
+ annotations: {
12338
+ readOnlyHint: false,
12339
+ destructiveHint: true
12340
+ },
11946
12341
  inputSchema: {
11947
12342
  $schema: "https://json-schema.org/draft/2020-12/schema",
11948
12343
  type: "object",
@@ -12003,6 +12398,10 @@ Returns column definitions and example queries for each view.`,
12003
12398
  ownerDomain: "value_features",
12004
12399
  title: "Get Customer Features",
12005
12400
  description: "Read Outlit event evidence and stored non-credit Autumn feature quantities, frequency, recency, weekly coverage, and explicit links for one authorized customer. Provider totals and linked event counts remain separate.",
12401
+ annotations: {
12402
+ readOnlyHint: true,
12403
+ destructiveHint: false
12404
+ },
12006
12405
  inputSchema: {
12007
12406
  $schema: "https://json-schema.org/draft/2020-12/schema",
12008
12407
  type: "object",
@@ -13191,6 +13590,10 @@ Returns column definitions and example queries for each view.`,
13191
13590
  ownerDomain: "customers",
13192
13591
  title: "Get Customer Credits",
13193
13592
  description: "Read a customer's credit pools, remaining credits, provider reset dates, and deterministic daily burn rate, rate change, runway, and trend from stored data. Missing or stale evidence is explicit; no live provider calls. For individual product feature usage use outlit_get_customer_features.",
13593
+ annotations: {
13594
+ readOnlyHint: true,
13595
+ destructiveHint: false
13596
+ },
13194
13597
  inputSchema: {
13195
13598
  $schema: "https://json-schema.org/draft/2020-12/schema",
13196
13599
  type: "object",
@@ -13353,25 +13756,90 @@ Returns column definitions and example queries for each view.`,
13353
13756
  type: "null"
13354
13757
  }
13355
13758
  ],
13356
- description: "Average daily usage over the last seven complete UTC days. See scope before interpreting this as pool deductions."
13759
+ description: "Average daily usage over the trailing rate window (28 days, shrinking to the covered history with a seven-day floor). See scope before interpreting this as pool deductions."
13760
+ },
13761
+ scope: {
13762
+ type: "string",
13763
+ enum: [
13764
+ "customer_balance",
13765
+ "account"
13766
+ ]
13767
+ },
13768
+ rateBasis: {
13769
+ description: "Length of the trailing window the forecast rate averages over.",
13770
+ anyOf: [
13771
+ {
13772
+ type: "object",
13773
+ properties: {
13774
+ kind: {
13775
+ type: "string",
13776
+ const: "trailing"
13777
+ },
13778
+ days: {
13779
+ type: "integer",
13780
+ exclusiveMinimum: 0,
13781
+ maximum: 9007199254740991
13782
+ }
13783
+ },
13784
+ required: [
13785
+ "kind",
13786
+ "days"
13787
+ ],
13788
+ additionalProperties: false
13789
+ },
13790
+ {
13791
+ type: "null"
13792
+ }
13793
+ ]
13794
+ },
13795
+ paceSinceReset: {
13796
+ description: "Context-only average daily usage since the current grant period started; never the forecast rate.",
13797
+ anyOf: [
13798
+ {
13799
+ type: "number",
13800
+ minimum: 0
13801
+ },
13802
+ {
13803
+ type: "null"
13804
+ }
13805
+ ]
13806
+ },
13807
+ periodStart: {
13808
+ description: "UTC day the current grant period started, when derivable from the reset interval.",
13809
+ anyOf: [
13810
+ {
13811
+ type: "string",
13812
+ format: "date",
13813
+ 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])))$"
13814
+ },
13815
+ {
13816
+ type: "null"
13817
+ }
13818
+ ]
13819
+ },
13820
+ change: {
13821
+ anyOf: [
13822
+ {
13823
+ type: "number"
13824
+ },
13825
+ {
13826
+ type: "null"
13827
+ }
13828
+ ],
13829
+ description: "Percentage change in customer-balance burn rate versus the preceding equal-length window. Null when either window is incomplete or the prior rate is zero."
13357
13830
  },
13358
- scope: {
13359
- type: "string",
13360
- enum: [
13361
- "customer_balance",
13362
- "account"
13363
- ]
13364
- },
13365
- change: {
13831
+ changeDays: {
13832
+ description: "Days in each side of the percentage comparison: 28 when covered, else 7.",
13366
13833
  anyOf: [
13367
13834
  {
13368
- type: "number"
13835
+ type: "integer",
13836
+ exclusiveMinimum: 0,
13837
+ maximum: 9007199254740991
13369
13838
  },
13370
13839
  {
13371
13840
  type: "null"
13372
13841
  }
13373
- ],
13374
- description: "Percentage change in customer-balance burn rate versus the preceding seven complete days. Null when either window is incomplete or the prior rate is zero."
13842
+ ]
13375
13843
  },
13376
13844
  days: {
13377
13845
  anyOf: [
@@ -13445,7 +13913,7 @@ Returns column definitions and example queries for each view.`,
13445
13913
  "end"
13446
13914
  ],
13447
13915
  additionalProperties: false,
13448
- description: "UTC dates for the seven-day rate window; end is exclusive."
13916
+ description: "UTC dates for the rate window; end is exclusive."
13449
13917
  },
13450
13918
  trend: {
13451
13919
  maxItems: 14,
@@ -13560,6 +14028,10 @@ Returns column definitions and example queries for each view.`,
13560
14028
  ownerDomain: "attention",
13561
14029
  title: "List Attention Items",
13562
14030
  description: "List authorized open or resolved Attention items. Returns bounded customer identity, current priority, ARR importance, lifecycle timestamps, and a prepared-action URL without evidence bodies or internal agent state.",
14031
+ annotations: {
14032
+ readOnlyHint: true,
14033
+ destructiveHint: false
14034
+ },
13563
14035
  inputSchema: {
13564
14036
  $schema: "https://json-schema.org/draft/2020-12/schema",
13565
14037
  type: "object",
@@ -13881,6 +14353,10 @@ Returns column definitions and example queries for each view.`,
13881
14353
  ownerDomain: "attention",
13882
14354
  title: "Get Attention Item",
13883
14355
  description: "Get one authorized Attention item with its bounded current assessment, timeline, evidence summaries, and prepared-action URL. Does not return evidence IDs, quotes, email drafts, or internal agent state.",
14356
+ annotations: {
14357
+ readOnlyHint: true,
14358
+ destructiveHint: false
14359
+ },
13884
14360
  inputSchema: {
13885
14361
  $schema: "https://json-schema.org/draft/2020-12/schema",
13886
14362
  type: "object",
@@ -14954,6 +15430,225 @@ Returns column definitions and example queries for each view.`,
14954
15430
  }
14955
15431
  ]
14956
15432
  },
15433
+ jevEvidence: {
15434
+ description: "Jev advisory model evidence scoped to this suggestion's customers. Uncalibrated and never part of eligibility, confidence, or recommended action.",
15435
+ anyOf: [
15436
+ {
15437
+ type: "object",
15438
+ properties: {
15439
+ computedAt: {
15440
+ type: "string",
15441
+ format: "date-time",
15442
+ 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))$"
15443
+ },
15444
+ expiresAt: {
15445
+ type: "string",
15446
+ format: "date-time",
15447
+ 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))$"
15448
+ },
15449
+ expired: {
15450
+ type: "boolean"
15451
+ },
15452
+ pairs: {
15453
+ minItems: 1,
15454
+ type: "array",
15455
+ items: {
15456
+ type: "object",
15457
+ properties: {
15458
+ incoming: {
15459
+ type: "object",
15460
+ properties: {
15461
+ id: {
15462
+ type: "string",
15463
+ minLength: 1,
15464
+ maxLength: 191
15465
+ },
15466
+ name: {
15467
+ type: "string",
15468
+ minLength: 1,
15469
+ maxLength: 500
15470
+ },
15471
+ domain: {
15472
+ anyOf: [
15473
+ {
15474
+ type: "string",
15475
+ minLength: 1,
15476
+ maxLength: 500
15477
+ },
15478
+ {
15479
+ type: "null"
15480
+ }
15481
+ ]
15482
+ },
15483
+ type: {
15484
+ type: "string",
15485
+ enum: [
15486
+ "COMPANY",
15487
+ "INDIVIDUAL"
15488
+ ]
15489
+ },
15490
+ status: {
15491
+ anyOf: [
15492
+ {
15493
+ type: "string",
15494
+ enum: [
15495
+ "PROVISIONAL",
15496
+ "ACTIVE",
15497
+ "CHURNED",
15498
+ "MERGED"
15499
+ ]
15500
+ },
15501
+ {
15502
+ type: "null"
15503
+ }
15504
+ ]
15505
+ },
15506
+ identifierCount: {
15507
+ type: "integer",
15508
+ minimum: 0,
15509
+ maximum: 9007199254740991
15510
+ },
15511
+ contactCount: {
15512
+ type: "integer",
15513
+ minimum: 0,
15514
+ maximum: 9007199254740991
15515
+ }
15516
+ },
15517
+ required: [
15518
+ "id",
15519
+ "name",
15520
+ "domain",
15521
+ "type",
15522
+ "status",
15523
+ "identifierCount",
15524
+ "contactCount"
15525
+ ],
15526
+ additionalProperties: false
15527
+ },
15528
+ candidate: {
15529
+ type: "object",
15530
+ properties: {
15531
+ id: {
15532
+ type: "string",
15533
+ minLength: 1,
15534
+ maxLength: 191
15535
+ },
15536
+ name: {
15537
+ type: "string",
15538
+ minLength: 1,
15539
+ maxLength: 500
15540
+ },
15541
+ domain: {
15542
+ anyOf: [
15543
+ {
15544
+ type: "string",
15545
+ minLength: 1,
15546
+ maxLength: 500
15547
+ },
15548
+ {
15549
+ type: "null"
15550
+ }
15551
+ ]
15552
+ },
15553
+ type: {
15554
+ type: "string",
15555
+ enum: [
15556
+ "COMPANY",
15557
+ "INDIVIDUAL"
15558
+ ]
15559
+ },
15560
+ status: {
15561
+ anyOf: [
15562
+ {
15563
+ type: "string",
15564
+ enum: [
15565
+ "PROVISIONAL",
15566
+ "ACTIVE",
15567
+ "CHURNED",
15568
+ "MERGED"
15569
+ ]
15570
+ },
15571
+ {
15572
+ type: "null"
15573
+ }
15574
+ ]
15575
+ },
15576
+ identifierCount: {
15577
+ type: "integer",
15578
+ minimum: 0,
15579
+ maximum: 9007199254740991
15580
+ },
15581
+ contactCount: {
15582
+ type: "integer",
15583
+ minimum: 0,
15584
+ maximum: 9007199254740991
15585
+ }
15586
+ },
15587
+ required: [
15588
+ "id",
15589
+ "name",
15590
+ "domain",
15591
+ "type",
15592
+ "status",
15593
+ "identifierCount",
15594
+ "contactCount"
15595
+ ],
15596
+ additionalProperties: false
15597
+ },
15598
+ pSameEntity: {
15599
+ type: "number",
15600
+ minimum: 0,
15601
+ maximum: 1
15602
+ },
15603
+ relation: {
15604
+ anyOf: [
15605
+ {
15606
+ type: "string",
15607
+ minLength: 1,
15608
+ maxLength: 100
15609
+ },
15610
+ {
15611
+ type: "null"
15612
+ }
15613
+ ]
15614
+ },
15615
+ relationProbability: {
15616
+ anyOf: [
15617
+ {
15618
+ type: "number",
15619
+ minimum: 0,
15620
+ maximum: 1
15621
+ },
15622
+ {
15623
+ type: "null"
15624
+ }
15625
+ ]
15626
+ }
15627
+ },
15628
+ required: [
15629
+ "incoming",
15630
+ "candidate",
15631
+ "pSameEntity",
15632
+ "relation",
15633
+ "relationProbability"
15634
+ ],
15635
+ additionalProperties: false
15636
+ }
15637
+ }
15638
+ },
15639
+ required: [
15640
+ "computedAt",
15641
+ "expiresAt",
15642
+ "expired",
15643
+ "pairs"
15644
+ ],
15645
+ additionalProperties: false
15646
+ },
15647
+ {
15648
+ type: "null"
15649
+ }
15650
+ ]
15651
+ },
14957
15652
  canMerge: {
14958
15653
  type: "boolean"
14959
15654
  },
@@ -15432,6 +16127,7 @@ Returns column definitions and example queries for each view.`,
15432
16127
  "outlit_enable_destination",
15433
16128
  "outlit_disable_destination",
15434
16129
  "outlit_archive_destination",
16130
+ "outlit_submit_feedback",
15435
16131
  "outlit_get_integration_capabilities",
15436
16132
  "outlit_begin_integration_setup",
15437
16133
  "outlit_get_integration_setup_status",
@@ -15480,6 +16176,7 @@ Returns column definitions and example queries for each view.`,
15480
16176
  "outlit_enable_destination",
15481
16177
  "outlit_disable_destination",
15482
16178
  "outlit_archive_destination",
16179
+ "outlit_submit_feedback",
15483
16180
  "outlit_get_integration_capabilities",
15484
16181
  "outlit_begin_integration_setup",
15485
16182
  "outlit_get_integration_setup_status",
@@ -20798,12 +21495,147 @@ var init_search = __esm(() => {
20798
21495
  });
20799
21496
  });
20800
21497
 
21498
+ // src/commands/feedback.ts
21499
+ var exports_feedback = {};
21500
+ __export(exports_feedback, {
21501
+ default: () => feedback_default
21502
+ });
21503
+ import { readFileSync as readFileSync4 } from "node:fs";
21504
+ function readTextFile(path, flag, json) {
21505
+ try {
21506
+ return readFileSync4(path, "utf-8");
21507
+ } catch (error) {
21508
+ return outputError({
21509
+ message: `Cannot read ${flag} file: ${errorMessage(error, "unknown error")}`,
21510
+ code: "file_error"
21511
+ }, json);
21512
+ }
21513
+ }
21514
+ function resolveBody(args, json) {
21515
+ if (args.body !== undefined && args.bodyFile !== undefined) {
21516
+ return outputError({ message: "Use either --body or --body-file, not both", code: "invalid_input" }, json);
21517
+ }
21518
+ const raw = args.bodyFile !== undefined ? readTextFile(args.bodyFile, "--body-file", json) : args.body;
21519
+ const trimmed = raw?.trim();
21520
+ if (!trimmed) {
21521
+ return outputError({ message: "Provide --body or --body-file", code: "missing_input" }, json);
21522
+ }
21523
+ if (trimmed.length > BODY_MAX_LENGTH) {
21524
+ return outputError({ message: `--body must be at most ${BODY_MAX_LENGTH} characters`, code: "invalid_input" }, json);
21525
+ }
21526
+ return trimmed;
21527
+ }
21528
+ function resolveArea(area, json) {
21529
+ if (area === undefined)
21530
+ return;
21531
+ const trimmed = area.trim();
21532
+ if (!trimmed) {
21533
+ return outputError({ message: "--area must be a non-empty string", code: "invalid_input" }, json);
21534
+ }
21535
+ if (trimmed.length > AREA_MAX_LENGTH) {
21536
+ return outputError({ message: `--area must be at most ${AREA_MAX_LENGTH} characters`, code: "invalid_input" }, json);
21537
+ }
21538
+ return trimmed;
21539
+ }
21540
+ function resolveContext(args, json) {
21541
+ if (args.context !== undefined && args.contextFile !== undefined) {
21542
+ return outputError({ message: "Use either --context or --context-file, not both", code: "invalid_input" }, json);
21543
+ }
21544
+ const raw = args.contextFile !== undefined ? readTextFile(args.contextFile, "--context-file", json) : args.context;
21545
+ if (raw === undefined)
21546
+ return;
21547
+ let parsed;
21548
+ try {
21549
+ parsed = JSON.parse(raw);
21550
+ } catch (error) {
21551
+ return outputError({
21552
+ message: `Invalid --context JSON: ${errorMessage(error, "parse failed")}`,
21553
+ code: "invalid_input"
21554
+ }, json);
21555
+ }
21556
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
21557
+ return outputError({ message: "--context must be a JSON object", code: "invalid_input" }, json);
21558
+ }
21559
+ if (Buffer.byteLength(JSON.stringify(parsed), "utf-8") > CONTEXT_MAX_BYTES) {
21560
+ return outputError({ message: "--context must serialize to at most 16 KiB", code: "invalid_input" }, json);
21561
+ }
21562
+ return parsed;
21563
+ }
21564
+ var BODY_MAX_LENGTH = 20000, AREA_MAX_LENGTH = 100, CONTEXT_MAX_BYTES, feedback_default;
21565
+ var init_feedback = __esm(() => {
21566
+ init_dist4();
21567
+ init_dist();
21568
+ init_auth();
21569
+ init_output2();
21570
+ init_api();
21571
+ init_output();
21572
+ CONTEXT_MAX_BYTES = 16 * 1024;
21573
+ feedback_default = defineCommand2({
21574
+ meta: {
21575
+ name: "feedback",
21576
+ description: [
21577
+ "Submit product feedback to the Outlit team: bugs, feature ideas, or agent friction.",
21578
+ "Feedback is product intake, not a support ticket, and does not guarantee a reply.",
21579
+ "Do not include secrets or unnecessary customer data.",
21580
+ "",
21581
+ "Examples:",
21582
+ " outlit feedback --body 'The customers merge preview did not list the losing record traits' --json",
21583
+ " outlit feedback --body 'Add a way to export attention items' --area attention --json",
21584
+ ` outlit feedback --body 'SQL tool rejected a valid LIMIT clause' --context '{"surface":"cli","command":"sql"}' --json`,
21585
+ " outlit feedback --body-file report.md --context-file diagnostics.json --json",
21586
+ "",
21587
+ AGENT_JSON_HINT
21588
+ ].join(`
21589
+ `)
21590
+ },
21591
+ args: {
21592
+ ...authArgs,
21593
+ ...outputArgs,
21594
+ body: {
21595
+ type: "string",
21596
+ description: "Feedback text: trimmed, non-empty, at most 20000 characters"
21597
+ },
21598
+ "body-file": {
21599
+ type: "string",
21600
+ description: "Path to a UTF-8 text file containing the feedback body"
21601
+ },
21602
+ area: {
21603
+ type: "string",
21604
+ description: "Optional product area label, at most 100 characters"
21605
+ },
21606
+ context: {
21607
+ type: "string",
21608
+ description: "Optional JSON object with diagnostic context, at most 16 KiB serialized. Never include secrets."
21609
+ },
21610
+ "context-file": {
21611
+ type: "string",
21612
+ description: "Path to a JSON file with diagnostic context (mutually exclusive with --context)"
21613
+ }
21614
+ },
21615
+ async run({ args }) {
21616
+ const json = !!args.json;
21617
+ const client = await getClientOrExit(args["api-key"], json);
21618
+ const body = resolveBody({ body: args.body, bodyFile: args["body-file"] }, json);
21619
+ const area = resolveArea(args.area, json);
21620
+ const context = resolveContext({ context: args.context, contextFile: args["context-file"] }, json);
21621
+ const input = { body };
21622
+ if (area !== undefined)
21623
+ input.area = area;
21624
+ if (context !== undefined)
21625
+ input.context = context;
21626
+ return runTool(client, publicToolContracts.outlit_submit_feedback.toolName, input, json, {
21627
+ spinnerMessage: "Submitting feedback..."
21628
+ });
21629
+ }
21630
+ });
21631
+ });
21632
+
20801
21633
  // src/commands/sql.ts
20802
21634
  var exports_sql = {};
20803
21635
  __export(exports_sql, {
20804
21636
  default: () => sql_default
20805
21637
  });
20806
- import { readFileSync as readFileSync4 } from "node:fs";
21638
+ import { readFileSync as readFileSync5 } from "node:fs";
20807
21639
  var publicSqlViews, sql_default;
20808
21640
  var init_sql = __esm(() => {
20809
21641
  init_dist4();
@@ -20857,7 +21689,7 @@ var init_sql = __esm(() => {
20857
21689
  let sql;
20858
21690
  if (args["query-file"]) {
20859
21691
  try {
20860
- sql = readFileSync4(args["query-file"], "utf-8");
21692
+ sql = readFileSync5(args["query-file"], "utf-8");
20861
21693
  } catch (err) {
20862
21694
  return outputError({
20863
21695
  message: `Cannot read file: ${errorMessage(err, "unknown error")}`,
@@ -22872,6 +23704,18 @@ var init_completions = __esm(() => {
22872
23704
  }
22873
23705
  ]
22874
23706
  },
23707
+ {
23708
+ name: "feedback",
23709
+ desc: "Submit product feedback",
23710
+ flags: [
23711
+ ...COMMON,
23712
+ { name: "--body", desc: "Feedback text (max 20000 chars)" },
23713
+ { name: "--body-file", desc: "Read feedback text from a file" },
23714
+ { name: "--area", desc: "Optional product area label" },
23715
+ { name: "--context", desc: "Optional JSON context object (max 16 KiB)" },
23716
+ { name: "--context-file", desc: "Read JSON context object from a file" }
23717
+ ]
23718
+ },
22875
23719
  {
22876
23720
  name: "search",
22877
23721
  desc: "Search customer context",
@@ -23832,6 +24676,7 @@ async function startCli() {
23832
24676
  " outlit features create --source metric_source_v1_0123456789abcdef0123456789abcdef --event report_exported --key reports_exported --name 'Reports exported' --json",
23833
24677
  " outlit customers features acme.com --weekly --json",
23834
24678
  " outlit customers credits acme.com --json",
24679
+ " outlit feedback --body 'The merge preview dropped trait history' --area customers --json",
23835
24680
  " outlit doctor --json",
23836
24681
  "",
23837
24682
  "For AI agents: commands auto-output JSON when stdout is piped. No --json flag needed."
@@ -23852,6 +24697,7 @@ async function startCli() {
23852
24697
  facts: () => Promise.resolve().then(() => (init_facts(), exports_facts)).then((m) => m.default),
23853
24698
  sources: () => Promise.resolve().then(() => (init_sources(), exports_sources)).then((m) => m.default),
23854
24699
  search: () => Promise.resolve().then(() => (init_search(), exports_search)).then((m) => m.default),
24700
+ feedback: () => Promise.resolve().then(() => (init_feedback(), exports_feedback)).then((m) => m.default),
23855
24701
  sql: () => Promise.resolve().then(() => (init_sql(), exports_sql)).then((m) => m.default),
23856
24702
  schema: () => Promise.resolve().then(() => (init_schema(), exports_schema)).then((m) => m.default),
23857
24703
  destinations: () => Promise.resolve().then(() => (init_destinations(), exports_destinations)).then((m) => m.default),