@wayai/cli 0.3.40 → 0.3.41

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 (166) hide show
  1. package/dist/index.js +16893 -310
  2. package/dist/index.js.map +1 -1
  3. package/package.json +6 -4
  4. package/dist/commands/admin.d.ts +0 -1
  5. package/dist/commands/admin.js +0 -913
  6. package/dist/commands/admin.js.map +0 -1
  7. package/dist/commands/analytics.d.ts +0 -34
  8. package/dist/commands/analytics.js +0 -605
  9. package/dist/commands/analytics.js.map +0 -1
  10. package/dist/commands/conversations.d.ts +0 -14
  11. package/dist/commands/conversations.js +0 -292
  12. package/dist/commands/conversations.js.map +0 -1
  13. package/dist/commands/create-credential.d.ts +0 -20
  14. package/dist/commands/create-credential.js +0 -146
  15. package/dist/commands/create-credential.js.map +0 -1
  16. package/dist/commands/delete-history.d.ts +0 -15
  17. package/dist/commands/delete-history.js +0 -56
  18. package/dist/commands/delete-history.js.map +0 -1
  19. package/dist/commands/eval-capture.d.ts +0 -1
  20. package/dist/commands/eval-capture.js +0 -135
  21. package/dist/commands/eval-capture.js.map +0 -1
  22. package/dist/commands/eval-results.d.ts +0 -10
  23. package/dist/commands/eval-results.js +0 -168
  24. package/dist/commands/eval-results.js.map +0 -1
  25. package/dist/commands/eval.d.ts +0 -1
  26. package/dist/commands/eval.js +0 -49
  27. package/dist/commands/eval.js.map +0 -1
  28. package/dist/commands/evals.d.ts +0 -21
  29. package/dist/commands/evals.js +0 -120
  30. package/dist/commands/evals.js.map +0 -1
  31. package/dist/commands/init.d.ts +0 -16
  32. package/dist/commands/init.js +0 -191
  33. package/dist/commands/init.js.map +0 -1
  34. package/dist/commands/list.d.ts +0 -13
  35. package/dist/commands/list.js +0 -70
  36. package/dist/commands/list.js.map +0 -1
  37. package/dist/commands/login.d.ts +0 -8
  38. package/dist/commands/login.js +0 -145
  39. package/dist/commands/login.js.map +0 -1
  40. package/dist/commands/logout.d.ts +0 -1
  41. package/dist/commands/logout.js +0 -19
  42. package/dist/commands/logout.js.map +0 -1
  43. package/dist/commands/migrate.d.ts +0 -12
  44. package/dist/commands/migrate.js +0 -106
  45. package/dist/commands/migrate.js.map +0 -1
  46. package/dist/commands/observability.d.ts +0 -14
  47. package/dist/commands/observability.js +0 -124
  48. package/dist/commands/observability.js.map +0 -1
  49. package/dist/commands/org.d.ts +0 -19
  50. package/dist/commands/org.js +0 -186
  51. package/dist/commands/org.js.map +0 -1
  52. package/dist/commands/pull.d.ts +0 -31
  53. package/dist/commands/pull.js +0 -210
  54. package/dist/commands/pull.js.map +0 -1
  55. package/dist/commands/push.d.ts +0 -25
  56. package/dist/commands/push.js +0 -472
  57. package/dist/commands/push.js.map +0 -1
  58. package/dist/commands/report-create.d.ts +0 -18
  59. package/dist/commands/report-create.js +0 -143
  60. package/dist/commands/report-create.js.map +0 -1
  61. package/dist/commands/report.d.ts +0 -16
  62. package/dist/commands/report.js +0 -252
  63. package/dist/commands/report.js.map +0 -1
  64. package/dist/commands/run-eval.d.ts +0 -15
  65. package/dist/commands/run-eval.js +0 -187
  66. package/dist/commands/run-eval.js.map +0 -1
  67. package/dist/commands/send-message.d.ts +0 -11
  68. package/dist/commands/send-message.js +0 -63
  69. package/dist/commands/send-message.js.map +0 -1
  70. package/dist/commands/status.d.ts +0 -17
  71. package/dist/commands/status.js +0 -205
  72. package/dist/commands/status.js.map +0 -1
  73. package/dist/commands/sync-mcp.d.ts +0 -16
  74. package/dist/commands/sync-mcp.js +0 -51
  75. package/dist/commands/sync-mcp.js.map +0 -1
  76. package/dist/commands/sync-skills.d.ts +0 -10
  77. package/dist/commands/sync-skills.js +0 -49
  78. package/dist/commands/sync-skills.js.map +0 -1
  79. package/dist/commands/unlock.d.ts +0 -1
  80. package/dist/commands/unlock.js +0 -13
  81. package/dist/commands/unlock.js.map +0 -1
  82. package/dist/commands/update-credential.d.ts +0 -29
  83. package/dist/commands/update-credential.js +0 -156
  84. package/dist/commands/update-credential.js.map +0 -1
  85. package/dist/commands/update.d.ts +0 -6
  86. package/dist/commands/update.js +0 -36
  87. package/dist/commands/update.js.map +0 -1
  88. package/dist/commands/use.d.ts +0 -1
  89. package/dist/commands/use.js +0 -56
  90. package/dist/commands/use.js.map +0 -1
  91. package/dist/commands/whoami.d.ts +0 -11
  92. package/dist/commands/whoami.js +0 -30
  93. package/dist/commands/whoami.js.map +0 -1
  94. package/dist/index.d.ts +0 -28
  95. package/dist/lib/analytics-constants.d.ts +0 -6
  96. package/dist/lib/analytics-constants.js +0 -14
  97. package/dist/lib/analytics-constants.js.map +0 -1
  98. package/dist/lib/api-client.d.ts +0 -568
  99. package/dist/lib/api-client.js +0 -445
  100. package/dist/lib/api-client.js.map +0 -1
  101. package/dist/lib/auth.d.ts +0 -50
  102. package/dist/lib/auth.js +0 -230
  103. package/dist/lib/auth.js.map +0 -1
  104. package/dist/lib/config.d.ts +0 -34
  105. package/dist/lib/config.js +0 -69
  106. package/dist/lib/config.js.map +0 -1
  107. package/dist/lib/credential-utils.d.ts +0 -36
  108. package/dist/lib/credential-utils.js +0 -88
  109. package/dist/lib/credential-utils.js.map +0 -1
  110. package/dist/lib/diff-display.d.ts +0 -8
  111. package/dist/lib/diff-display.js +0 -37
  112. package/dist/lib/diff-display.js.map +0 -1
  113. package/dist/lib/eval-format.d.ts +0 -29
  114. package/dist/lib/eval-format.js +0 -44
  115. package/dist/lib/eval-format.js.map +0 -1
  116. package/dist/lib/hub-lock.d.ts +0 -7
  117. package/dist/lib/hub-lock.js +0 -116
  118. package/dist/lib/hub-lock.js.map +0 -1
  119. package/dist/lib/layout.d.ts +0 -79
  120. package/dist/lib/layout.js +0 -133
  121. package/dist/lib/layout.js.map +0 -1
  122. package/dist/lib/org-workspace.d.ts +0 -22
  123. package/dist/lib/org-workspace.js +0 -106
  124. package/dist/lib/org-workspace.js.map +0 -1
  125. package/dist/lib/parser.d.ts +0 -16
  126. package/dist/lib/parser.js +0 -306
  127. package/dist/lib/parser.js.map +0 -1
  128. package/dist/lib/repo-config.d.ts +0 -23
  129. package/dist/lib/repo-config.js +0 -91
  130. package/dist/lib/repo-config.js.map +0 -1
  131. package/dist/lib/report-edit-args.d.ts +0 -27
  132. package/dist/lib/report-edit-args.js +0 -56
  133. package/dist/lib/report-edit-args.js.map +0 -1
  134. package/dist/lib/report-inbox.d.ts +0 -19
  135. package/dist/lib/report-inbox.js +0 -73
  136. package/dist/lib/report-inbox.js.map +0 -1
  137. package/dist/lib/resource-files.d.ts +0 -29
  138. package/dist/lib/resource-files.js +0 -156
  139. package/dist/lib/resource-files.js.map +0 -1
  140. package/dist/lib/sentry.d.ts +0 -38
  141. package/dist/lib/sentry.js +0 -168
  142. package/dist/lib/sentry.js.map +0 -1
  143. package/dist/lib/skill-version.d.ts +0 -9
  144. package/dist/lib/skill-version.js +0 -53
  145. package/dist/lib/skill-version.js.map +0 -1
  146. package/dist/lib/sql-output.d.ts +0 -17
  147. package/dist/lib/sql-output.js +0 -48
  148. package/dist/lib/sql-output.js.map +0 -1
  149. package/dist/lib/token-store.d.ts +0 -37
  150. package/dist/lib/token-store.js +0 -354
  151. package/dist/lib/token-store.js.map +0 -1
  152. package/dist/lib/types.d.ts +0 -18
  153. package/dist/lib/types.js +0 -5
  154. package/dist/lib/types.js.map +0 -1
  155. package/dist/lib/utils.d.ts +0 -97
  156. package/dist/lib/utils.js +0 -288
  157. package/dist/lib/utils.js.map +0 -1
  158. package/dist/lib/version-cache.d.ts +0 -10
  159. package/dist/lib/version-cache.js +0 -34
  160. package/dist/lib/version-cache.js.map +0 -1
  161. package/dist/lib/workspace.d.ts +0 -112
  162. package/dist/lib/workspace.js +0 -387
  163. package/dist/lib/workspace.js.map +0 -1
  164. package/dist/lib/yaml-writer.d.ts +0 -18
  165. package/dist/lib/yaml-writer.js +0 -283
  166. package/dist/lib/yaml-writer.js.map +0 -1
@@ -1,605 +0,0 @@
1
- /**
2
- * wayai analytics — show analytics summary and metrics for the current hub
3
- *
4
- * Usage:
5
- * wayai analytics # summary for last 7d
6
- * wayai analytics --period 30d # summary for last 30 days
7
- * wayai analytics --from 2026-01-01 --to 2026-01-31 # explicit date range
8
- * wayai analytics --metric tokens_total,first_response_time
9
- * wayai analytics --filter "tokens_total gt 5000" # repeat for AND'd filters
10
- * wayai analytics --filter "user_sentiment is positive"
11
- * wayai analytics --list-metrics # list available metrics
12
- * wayai analytics --json # raw JSON output
13
- *
14
- * wayai analytics query \
15
- * --metric "col=data.system.tokens_total,agg=avg,alias=avg_tokens" \
16
- * --metric "col=data.system.tokens_total,agg=corr,corr_with=data.system.avg_agent_response_time,alias=tok_resp" \
17
- * --group-by data.meta.kanban_status \
18
- * --filter "data.system.tokens_total gt 0" \
19
- * --order-by avg_tokens:desc --limit 50 --from 2026-01-01 --to 2026-01-31
20
- *
21
- * `query` is a thin wrapper over POST /api/analytics/query — supports aggregations
22
- * (avg|sum|min|max|count|quantile|stddevPop|corr|uniq), group_by, order_by, raw
23
- * column filters (eq|neq|gt|gte|lt|lte|in|not_in|like) and correlation via corr_with.
24
- *
25
- * wayai analytics sql "SELECT count() FROM conversation"
26
- * wayai analytics sql "SELECT data.meta.kanban_status, count() FROM conversation GROUP BY 1" --json
27
- * wayai analytics sql --schema # column + variable-path catalog
28
- * wayai analytics sql "..." --limit 500
29
- *
30
- * `sql` is a thin wrapper over POST /api/analytics/sql — server enforces hub_id +
31
- * is_eval=false scoping (CTE shadow), single-SELECT only, function/keyword
32
- * denylist, 10k row cap. `--schema` calls GET /api/analytics/sql/schema.
33
- */
34
- import { requireAuth } from '../lib/auth.js';
35
- import { requireRepoConfig } from '../lib/repo-config.js';
36
- import { resolveActiveHubId } from '../lib/workspace.js';
37
- import { ApiClient } from '../lib/api-client.js';
38
- import { parsePeriod, parseDateArg, parsePositiveIntFlag } from '../lib/utils.js';
39
- import { printQueryRows, printSqlSchema } from '../lib/sql-output.js';
40
- import { NUMERIC_FILTER_OPS, TEXT_FILTER_OPS, CATEGORICAL_FILTER_OPS, VARIABLE_FILTER_OPS, STRUCTURED_QUERY_OPS, STRUCTURED_QUERY_AGGREGATIONS, } from '../lib/analytics-constants.js';
41
- const NUMERIC_OPS = new Set(NUMERIC_FILTER_OPS);
42
- const TEXT_OPS = new Set(TEXT_FILTER_OPS);
43
- const CATEGORICAL_OPS = new Set(CATEGORICAL_FILTER_OPS);
44
- const ALL_DATA_OPS = new Set(VARIABLE_FILTER_OPS);
45
- const STRUCTURED_OPS = new Set(STRUCTURED_QUERY_OPS);
46
- const STRUCTURED_AGGREGATIONS = new Set(STRUCTURED_QUERY_AGGREGATIONS);
47
- export async function analyticsCommand(args) {
48
- if (args[0] === 'query') {
49
- return analyticsQuerySubcommand(args.slice(1));
50
- }
51
- if (args[0] === 'sql') {
52
- return analyticsSqlSubcommand(args.slice(1));
53
- }
54
- return analyticsSummaryCommand(args);
55
- }
56
- // ---------------------------------------------------------------------------
57
- // Default summary command (POST /api/analytics/data)
58
- // ---------------------------------------------------------------------------
59
- async function analyticsSummaryCommand(args) {
60
- const hubId = resolveActiveHubId(args);
61
- const { config, accessToken } = await requireAuth();
62
- requireRepoConfig();
63
- let period;
64
- let from;
65
- let to;
66
- let metricNames;
67
- const filterArgs = [];
68
- let listMetrics = false;
69
- let jsonOutput = false;
70
- for (let i = 0; i < args.length; i++) {
71
- const arg = args[i];
72
- if (arg === '--period') {
73
- if (i + 1 >= args.length) {
74
- console.error('--period requires a value');
75
- process.exit(1);
76
- }
77
- period = args[++i];
78
- }
79
- else if (arg === '--from') {
80
- if (i + 1 >= args.length) {
81
- console.error('--from requires a value');
82
- process.exit(1);
83
- }
84
- from = args[++i];
85
- }
86
- else if (arg === '--to') {
87
- if (i + 1 >= args.length) {
88
- console.error('--to requires a value');
89
- process.exit(1);
90
- }
91
- to = args[++i];
92
- }
93
- else if (arg === '--metric') {
94
- if (i + 1 >= args.length) {
95
- console.error('--metric requires a value');
96
- process.exit(1);
97
- }
98
- metricNames = args[++i].split(',').map((s) => s.trim()).filter(Boolean);
99
- }
100
- else if (arg === '--filter') {
101
- if (i + 1 >= args.length) {
102
- console.error('--filter requires a value');
103
- process.exit(1);
104
- }
105
- filterArgs.push(args[++i]);
106
- }
107
- else if (arg === '--list-metrics') {
108
- listMetrics = true;
109
- }
110
- else if (arg === '--json') {
111
- jsonOutput = true;
112
- }
113
- }
114
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
115
- if (listMetrics) {
116
- const result = await client.getAnalyticsVariables(hubId);
117
- if (jsonOutput) {
118
- console.log(JSON.stringify(result.data, null, 2));
119
- return;
120
- }
121
- printVariablesByCategory(result.data);
122
- return;
123
- }
124
- if ((from && !to) || (!from && to)) {
125
- console.error('--from and --to must both be provided together.');
126
- process.exit(1);
127
- }
128
- let start;
129
- let end;
130
- let periodicity;
131
- try {
132
- if (from && to) {
133
- start = parseDateArg(from, 'from');
134
- end = parseDateArg(to, 'to');
135
- if (new Date(start).getTime() >= new Date(end).getTime()) {
136
- console.error('--from must be before --to.');
137
- process.exit(1);
138
- }
139
- const rangeMs = new Date(end).getTime() - new Date(start).getTime();
140
- const rangeDays = rangeMs / (1000 * 60 * 60 * 24);
141
- if (rangeDays > 365)
142
- periodicity = 'yearly';
143
- else if (rangeDays > 90)
144
- periodicity = 'monthly';
145
- else if (rangeDays > 14)
146
- periodicity = 'weekly';
147
- else
148
- periodicity = 'daily';
149
- }
150
- else {
151
- const parsed = parsePeriod(period || '7d');
152
- start = parsed.start;
153
- end = parsed.end;
154
- periodicity = parsed.periodicity;
155
- }
156
- }
157
- catch (err) {
158
- console.error(err instanceof Error ? err.message : String(err));
159
- process.exit(1);
160
- }
161
- // Resolve --metric and --filter against the variable catalog (single fetch).
162
- let allVars;
163
- let variableNameMap;
164
- const needsCatalog = (metricNames && metricNames.length > 0) || filterArgs.length > 0;
165
- if (needsCatalog) {
166
- const varsResult = await client.getAnalyticsVariables(hubId);
167
- allVars = Object.values(varsResult.data.variablesByCategory).flat();
168
- variableNameMap = new Map(allVars.map((v) => [v.variable_id, v.variable_name]));
169
- }
170
- let selectedVariables = [];
171
- if (metricNames && metricNames.length > 0 && allVars) {
172
- const notFound = [];
173
- for (const name of metricNames) {
174
- const match = allVars.find((v) => v.variable_name === name);
175
- if (match)
176
- selectedVariables.push(match.variable_id);
177
- else
178
- notFound.push(name);
179
- }
180
- if (notFound.length > 0) {
181
- const available = allVars.map((v) => v.variable_name).sort();
182
- console.error(`Unknown metric(s): ${notFound.join(', ')}`);
183
- console.error(`\nAvailable metrics:\n ${available.join('\n ')}`);
184
- process.exit(1);
185
- }
186
- }
187
- let parsedFilters;
188
- if (filterArgs.length > 0 && allVars) {
189
- parsedFilters = filterArgs.map((raw) => parseFilterByName(raw, allVars));
190
- }
191
- const result = await client.getAnalyticsData({
192
- hub_id: hubId,
193
- selected_variables: selectedVariables,
194
- time_interval: { start, end },
195
- periodicity,
196
- trend_analysis: false,
197
- include_summary: true,
198
- ...(parsedFilters && { filters: parsedFilters }),
199
- });
200
- if (jsonOutput) {
201
- console.log(JSON.stringify(result, null, 2));
202
- return;
203
- }
204
- const label = from && to ? `${from} to ${to}` : `last ${period || '7d'}`;
205
- console.log(`Hub Analytics (${label})\n`);
206
- if (result.summary) {
207
- const s = result.summary;
208
- console.log('Summary:');
209
- console.log(` Total conversations: ${s.total_conversations}`);
210
- console.log(` AI-only rate: ${(s.ai_only_rate * 100).toFixed(1)}%`);
211
- console.log(` Avg response time: ${formatMinutes(s.avg_response_time)}`);
212
- console.log(` AI response time: ${formatMinutes(s.assistant_response_time)}`);
213
- console.log(` Support response time: ${formatMinutes(s.support_response_time)}`);
214
- if (s.threshold1_minutes) {
215
- console.log(` SLA (< ${s.threshold1_minutes}min): ${(s.rate_under_threshold1 * 100).toFixed(1)}%`);
216
- console.log(` SLA (< ${s.threshold2_minutes}min): ${(s.rate_under_threshold2 * 100).toFixed(1)}%`);
217
- console.log(` SLA (< ${s.threshold3_minutes}min): ${(s.rate_under_threshold3 * 100).toFixed(1)}%`);
218
- }
219
- }
220
- if (result.analytics && result.analytics.length > 0) {
221
- console.log('\nMetrics:');
222
- for (const item of result.analytics) {
223
- const name = variableNameMap?.get(item.variable_id) || item.variable;
224
- console.log(` ${name}:`);
225
- if (item.type === 'numeric' && item.metrics) {
226
- const m = item.metrics;
227
- const parts = [];
228
- parts.push(`Average: ${fmt(m.average)}`);
229
- if (m.median !== undefined)
230
- parts.push(`Median: ${fmt(m.median)}`);
231
- parts.push(`Min: ${fmt(m.minimum)}`);
232
- parts.push(`Max: ${fmt(m.maximum)}`);
233
- if (m.count !== undefined)
234
- parts.push(`Count: ${m.count}`);
235
- console.log(` ${parts.join(' ')}`);
236
- }
237
- else if (item.type === 'categorical' && item.distribution) {
238
- for (const [cat, count] of Object.entries(item.distribution)) {
239
- console.log(` ${cat}: ${count}`);
240
- }
241
- }
242
- }
243
- }
244
- }
245
- // ---------------------------------------------------------------------------
246
- // `wayai analytics query` — POST /api/analytics/query (structured)
247
- // ---------------------------------------------------------------------------
248
- async function analyticsQuerySubcommand(args) {
249
- const hubId = resolveActiveHubId(args);
250
- const { config, accessToken } = await requireAuth();
251
- requireRepoConfig();
252
- const metricArgs = [];
253
- const orderByArgs = [];
254
- const filterArgs = [];
255
- let groupByRaw;
256
- let from;
257
- let to;
258
- let limit;
259
- let jsonOutput = false;
260
- for (let i = 0; i < args.length; i++) {
261
- const arg = args[i];
262
- if (arg === '--metric') {
263
- if (i + 1 >= args.length) {
264
- console.error('--metric requires a value');
265
- process.exit(1);
266
- }
267
- metricArgs.push(args[++i]);
268
- }
269
- else if (arg === '--group-by') {
270
- if (i + 1 >= args.length) {
271
- console.error('--group-by requires a value');
272
- process.exit(1);
273
- }
274
- groupByRaw = args[++i];
275
- }
276
- else if (arg === '--order-by') {
277
- if (i + 1 >= args.length) {
278
- console.error('--order-by requires a value');
279
- process.exit(1);
280
- }
281
- orderByArgs.push(args[++i]);
282
- }
283
- else if (arg === '--filter') {
284
- if (i + 1 >= args.length) {
285
- console.error('--filter requires a value');
286
- process.exit(1);
287
- }
288
- filterArgs.push(args[++i]);
289
- }
290
- else if (arg === '--from') {
291
- if (i + 1 >= args.length) {
292
- console.error('--from requires a value');
293
- process.exit(1);
294
- }
295
- from = args[++i];
296
- }
297
- else if (arg === '--to') {
298
- if (i + 1 >= args.length) {
299
- console.error('--to requires a value');
300
- process.exit(1);
301
- }
302
- to = args[++i];
303
- }
304
- else if (arg === '--limit') {
305
- limit = parsePositiveIntFlag('--limit', args[++i]);
306
- }
307
- else if (arg === '--json') {
308
- jsonOutput = true;
309
- }
310
- else {
311
- console.error(`Unknown flag for \`analytics query\`: ${arg}`);
312
- process.exit(1);
313
- }
314
- }
315
- if (metricArgs.length === 0) {
316
- console.error('At least one --metric is required for `analytics query`.');
317
- console.error('Example: --metric "col=data.system.tokens_total,agg=avg,alias=avg_tokens"');
318
- process.exit(1);
319
- }
320
- if ((from && !to) || (!from && to)) {
321
- console.error('--from and --to must both be provided together.');
322
- process.exit(1);
323
- }
324
- let timeRange;
325
- if (from && to) {
326
- try {
327
- const start = parseDateArg(from, 'from');
328
- const end = parseDateArg(to, 'to');
329
- if (new Date(start).getTime() >= new Date(end).getTime()) {
330
- console.error('--from must be before --to.');
331
- process.exit(1);
332
- }
333
- timeRange = { start, end };
334
- }
335
- catch (err) {
336
- console.error(err instanceof Error ? err.message : String(err));
337
- process.exit(1);
338
- }
339
- }
340
- const metrics = metricArgs.map(parseMetricSpec);
341
- const filters = filterArgs.map(parseStructuredFilter);
342
- const orderBy = orderByArgs.map(parseOrderBy);
343
- const groupBy = groupByRaw ? groupByRaw.split(',').map((s) => s.trim()).filter(Boolean) : undefined;
344
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
345
- const result = await client.runAnalyticsQuery({
346
- hub_id: hubId,
347
- metrics,
348
- ...(groupBy && groupBy.length > 0 && { group_by: groupBy }),
349
- ...(orderBy.length > 0 && { order_by: orderBy }),
350
- ...(filters.length > 0 && { filters }),
351
- ...(timeRange && { time_range: timeRange }),
352
- ...(limit !== undefined && { limit }),
353
- });
354
- if (jsonOutput) {
355
- console.log(JSON.stringify(result, null, 2));
356
- return;
357
- }
358
- printQueryRows(result.data);
359
- }
360
- // ---------------------------------------------------------------------------
361
- // `wayai analytics sql` — POST /api/analytics/sql (read-only, server-scoped)
362
- // ---------------------------------------------------------------------------
363
- async function analyticsSqlSubcommand(args) {
364
- const hubId = resolveActiveHubId(args);
365
- const { config, accessToken } = await requireAuth();
366
- requireRepoConfig();
367
- let sql;
368
- let limit;
369
- let jsonOutput = false;
370
- let schemaOnly = false;
371
- for (let i = 0; i < args.length; i++) {
372
- const arg = args[i];
373
- if (arg === '--limit') {
374
- limit = parsePositiveIntFlag('--limit', args[++i]);
375
- }
376
- else if (arg === '--json') {
377
- jsonOutput = true;
378
- }
379
- else if (arg === '--schema') {
380
- schemaOnly = true;
381
- }
382
- else if (!arg.startsWith('--') && sql === undefined) {
383
- sql = arg;
384
- }
385
- else {
386
- console.error(`Unknown flag for \`analytics sql\`: ${arg}`);
387
- process.exit(1);
388
- }
389
- }
390
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
391
- if (schemaOnly) {
392
- const schema = await client.getAnalyticsSqlSchema(hubId);
393
- if (jsonOutput) {
394
- console.log(JSON.stringify(schema.data, null, 2));
395
- return;
396
- }
397
- printSqlSchema(schema.data, 'Variable paths (data.system.* + data.variables.*):');
398
- return;
399
- }
400
- if (!sql) {
401
- console.error('Provide a SQL string. Example: wayai analytics sql "SELECT count() FROM conversation"');
402
- console.error('Or run: wayai analytics sql --schema to list available columns and paths.');
403
- process.exit(1);
404
- }
405
- const result = await client.runAnalyticsSql({
406
- hub_id: hubId,
407
- sql,
408
- ...(limit !== undefined && { limit }),
409
- });
410
- if (jsonOutput) {
411
- console.log(JSON.stringify(result, null, 2));
412
- return;
413
- }
414
- printQueryRows(result.data);
415
- }
416
- // ---------------------------------------------------------------------------
417
- // Parsing helpers
418
- // ---------------------------------------------------------------------------
419
- /**
420
- * Split a "<lhs> <op> <value...>" filter expression. Value may contain spaces
421
- * (e.g. "feedback contains good service"). Exits the process on malformed input.
422
- */
423
- function splitFilterExpr(raw, shape) {
424
- const parts = raw.trim().split(/\s+/);
425
- if (parts.length < 3) {
426
- console.error(`Invalid --filter "${raw}". Expected: "${shape}".`);
427
- process.exit(1);
428
- }
429
- const [lhs, op, ...rest] = parts;
430
- return { lhs, op, value: rest.join(' ') };
431
- }
432
- /**
433
- * Parse `--filter "name op value"` for the variable-aware /data endpoint.
434
- * `name` resolves to a variable_id; `op` is validated against the variable's type.
435
- */
436
- function parseFilterByName(raw, allVars) {
437
- const { lhs: name, op, value } = splitFilterExpr(raw, '<name> <op> <value>');
438
- const variable = allVars.find((v) => v.variable_name === name);
439
- if (!variable) {
440
- const available = allVars.map((v) => v.variable_name).sort();
441
- console.error(`Unknown variable in --filter: ${name}`);
442
- console.error(`\nAvailable variables:\n ${available.join('\n ')}`);
443
- process.exit(1);
444
- }
445
- if (!ALL_DATA_OPS.has(op)) {
446
- console.error(`Invalid filter operator: ${op}`);
447
- console.error('Numeric ops: eq, neq, gt, gte, lt, lte');
448
- console.error('Text ops: equals, not_equals, contains, not_contains, starts_with, ends_with');
449
- console.error('Categorical ops: is, is_not, in, not_in');
450
- process.exit(1);
451
- }
452
- const expectedSet = variable.variable_type === 'numeric' ? NUMERIC_OPS :
453
- variable.variable_type === 'text' ? TEXT_OPS :
454
- CATEGORICAL_OPS;
455
- if (!expectedSet.has(op)) {
456
- console.error(`Operator "${op}" is not valid for ${variable.variable_type} variable "${name}".`);
457
- console.error(`Valid operators: ${[...expectedSet].join(', ')}`);
458
- process.exit(1);
459
- }
460
- let filterValue;
461
- if (variable.variable_type === 'numeric') {
462
- const n = Number(value);
463
- if (!Number.isFinite(n)) {
464
- console.error(`Numeric filter value must be a number, got: "${value}"`);
465
- process.exit(1);
466
- }
467
- filterValue = n;
468
- }
469
- else {
470
- filterValue = value;
471
- }
472
- return { variable_id: variable.variable_id, filter_type: op, filter_value: filterValue };
473
- }
474
- /**
475
- * Parse `--metric "col=...,agg=...[,alias=...][,corr_with=...][,level=...]"`.
476
- * Order doesn't matter; unknown keys are rejected so typos surface immediately.
477
- */
478
- function parseMetricSpec(raw) {
479
- const fields = raw.split(',').map((s) => s.trim()).filter(Boolean);
480
- const map = new Map();
481
- for (const field of fields) {
482
- const eq = field.indexOf('=');
483
- if (eq < 0) {
484
- console.error(`Invalid --metric segment "${field}". Expected key=value pairs.`);
485
- process.exit(1);
486
- }
487
- const key = field.slice(0, eq).trim();
488
- const val = field.slice(eq + 1).trim();
489
- if (map.has(key)) {
490
- console.error(`Duplicate key "${key}" in --metric "${raw}".`);
491
- process.exit(1);
492
- }
493
- map.set(key, val);
494
- }
495
- const knownKeys = new Set(['col', 'agg', 'alias', 'corr_with', 'level']);
496
- for (const key of map.keys()) {
497
- if (!knownKeys.has(key)) {
498
- console.error(`Unknown --metric key: "${key}". Allowed: ${[...knownKeys].join(', ')}`);
499
- process.exit(1);
500
- }
501
- }
502
- const column = map.get('col');
503
- const aggregation = map.get('agg');
504
- if (!column || !aggregation) {
505
- console.error(`--metric requires col and agg, got: "${raw}"`);
506
- process.exit(1);
507
- }
508
- if (!STRUCTURED_AGGREGATIONS.has(aggregation)) {
509
- console.error(`Invalid aggregation: "${aggregation}". Allowed: ${[...STRUCTURED_AGGREGATIONS].join(', ')}`);
510
- process.exit(1);
511
- }
512
- if (aggregation === 'corr' && !map.has('corr_with')) {
513
- console.error(`--metric agg=corr requires corr_with=<column>.`);
514
- process.exit(1);
515
- }
516
- const spec = {
517
- column, aggregation: aggregation,
518
- };
519
- if (map.has('alias'))
520
- spec.alias = map.get('alias');
521
- if (map.has('corr_with'))
522
- spec.corr_with = map.get('corr_with');
523
- if (map.has('level')) {
524
- const lvl = Number(map.get('level'));
525
- if (!Number.isFinite(lvl) || lvl < 0 || lvl > 1) {
526
- console.error(`--metric level must be a number between 0 and 1, got "${map.get('level')}"`);
527
- process.exit(1);
528
- }
529
- spec.quantile_level = lvl;
530
- }
531
- return spec;
532
- }
533
- /**
534
- * Parse `--filter "<col> <op> <value>"` for the structured /query endpoint.
535
- * Columns are raw paths/identifiers — no name lookup.
536
- */
537
- function parseStructuredFilter(raw) {
538
- const { lhs: column, op: operator, value } = splitFilterExpr(raw, '<column> <op> <value>');
539
- if (!STRUCTURED_OPS.has(operator)) {
540
- console.error(`Invalid operator "${operator}". Allowed: ${[...STRUCTURED_OPS].join(', ')}`);
541
- process.exit(1);
542
- }
543
- // Equality and ordering operators forward numeric values as numbers when the
544
- // input parses as one; falls back to string for non-numeric eq/neq targets.
545
- // `value !== ''` guards `Number('') === 0` from coercing missing input.
546
- const parsedNum = Number(value);
547
- const isOrderOp = operator === 'gt' || operator === 'gte' || operator === 'lt' || operator === 'lte';
548
- const isEqualityOp = operator === 'eq' || operator === 'neq';
549
- const isFiniteValue = value !== '' && Number.isFinite(parsedNum);
550
- if (isOrderOp && !isFiniteValue) {
551
- console.error(`Filter value for "${operator}" must be numeric, got: "${value}"`);
552
- process.exit(1);
553
- }
554
- const coerceToNumber = isOrderOp || (isEqualityOp && isFiniteValue);
555
- return {
556
- column,
557
- operator: operator,
558
- value: coerceToNumber ? parsedNum : value,
559
- };
560
- }
561
- function parseOrderBy(raw) {
562
- const [column, dirRaw = 'asc'] = raw.split(':').map((s) => s.trim());
563
- if (!column) {
564
- console.error(`Invalid --order-by "${raw}". Expected: "<column>[:asc|desc]".`);
565
- process.exit(1);
566
- }
567
- const dir = dirRaw.toLowerCase();
568
- if (dir !== 'asc' && dir !== 'desc') {
569
- console.error(`Invalid --order-by direction "${dirRaw}". Use asc or desc.`);
570
- process.exit(1);
571
- }
572
- return { column, direction: dir };
573
- }
574
- // ---------------------------------------------------------------------------
575
- // Output helpers
576
- // ---------------------------------------------------------------------------
577
- function printVariablesByCategory(data) {
578
- console.log('Analytics Variables\n');
579
- for (const category of data.categories) {
580
- const variables = data.variablesByCategory[category.category] || [];
581
- console.log(`${category.label} (${category.variableCount}):`);
582
- if (variables.length === 0) {
583
- console.log(' (none)\n');
584
- continue;
585
- }
586
- for (const v of variables) {
587
- const desc = v.variable_description ? ` — ${v.variable_description}` : '';
588
- console.log(` ${v.variable_name} (${v.variable_type})${desc}`);
589
- }
590
- console.log('');
591
- }
592
- }
593
- function formatMinutes(minutes) {
594
- if (minutes == null)
595
- return 'N/A';
596
- if (minutes < 1)
597
- return `${(minutes * 60).toFixed(1)}s`;
598
- return `${minutes.toFixed(1)}min`;
599
- }
600
- function fmt(n) {
601
- if (n == null)
602
- return 'N/A';
603
- return Number.isInteger(n) ? String(n) : n.toFixed(2);
604
- }
605
- //# sourceMappingURL=analytics.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"analytics.js","sourceRoot":"","sources":["../../src/commands/analytics.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- /**
2
- * wayai conversations — list conversations or show conversation detail
3
- *
4
- * Usage:
5
- * wayai conversations # list conversations
6
- * wayai conversations <conversation_id> # show detail + messages
7
- * wayai conversations <conversation_id> observability # list per-message LLM traces
8
- * wayai conversations <conversation_id> observability --message-id <id>
9
- * wayai conversations --status ended # filter by status
10
- * wayai conversations --period 7d # analytics-powered list
11
- * wayai conversations --from 2026-01-01 --to 2026-01-31
12
- * wayai conversations --json # raw JSON output
13
- */
14
- export declare function conversationsCommand(args: string[]): Promise<void>;