@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,135 +0,0 @@
1
- // wayai eval capture <conversation_id> — POST a real conversation to /api/evals/scenarios/from-conversation and write the result as eval YAML.
2
- import * as fs from 'node:fs';
3
- import * as path from 'node:path';
4
- import * as yaml from 'js-yaml';
5
- import { requireAuth } from '../lib/auth.js';
6
- import { requireRepoConfig } from '../lib/repo-config.js';
7
- import { ApiClient } from '../lib/api-client.js';
8
- import { findLocalHubFolder, resolveActiveHubId } from '../lib/workspace.js';
9
- import { slugify, UUID_RE } from '../lib/utils.js';
10
- import { YAML_DUMP_OPTIONS, buildEvalYamlObject } from '../lib/yaml-writer.js';
11
- // Scenario sets are single folder names — reject separators and traversal so they fit the parser's flat-set model.
12
- function isValidSetName(name) {
13
- if (name.length === 0 || name === '.' || name === '..')
14
- return false;
15
- if (name.startsWith('.'))
16
- return false;
17
- return !/[\/\\\0]/.test(name);
18
- }
19
- function parseArgs(args) {
20
- if (args.length === 0 || args[0].startsWith('-')) {
21
- console.error('Usage: wayai eval capture <conversation_id> [--set <name>] [--name <eval_name>] [--instructions <text>]');
22
- process.exit(1);
23
- }
24
- const conversationId = args[0];
25
- if (!UUID_RE.test(conversationId)) {
26
- console.error(`Invalid conversation ID "${conversationId}". Expected a UUID.`);
27
- process.exit(1);
28
- }
29
- let setName = null;
30
- let evalName = null;
31
- let evaluatorInstructions = null;
32
- for (let i = 1; i < args.length; i++) {
33
- const arg = args[i];
34
- if (arg === '--set') {
35
- setName = args[++i] ?? '';
36
- if (!setName) {
37
- console.error('--set requires a value.');
38
- process.exit(1);
39
- }
40
- if (!isValidSetName(setName)) {
41
- console.error(`Invalid --set value "${setName}". Scenario set names must be a single folder name (no slashes, no '.', no '..', no leading dot).`);
42
- process.exit(1);
43
- }
44
- }
45
- else if (arg === '--name') {
46
- evalName = args[++i] ?? '';
47
- if (!evalName) {
48
- console.error('--name requires a value.');
49
- process.exit(1);
50
- }
51
- }
52
- else if (arg === '--instructions') {
53
- evaluatorInstructions = args[++i] ?? '';
54
- if (!evaluatorInstructions) {
55
- console.error('--instructions requires a value.');
56
- process.exit(1);
57
- }
58
- }
59
- else {
60
- console.error(`Unknown argument: ${arg}`);
61
- process.exit(1);
62
- }
63
- }
64
- return { conversationId, setName, evalName, evaluatorInstructions };
65
- }
66
- export async function evalCaptureCommand(args) {
67
- // Resolve hub before parseArgs in case parseArgs rejects unknown flags
68
- const hubId = resolveActiveHubId(args);
69
- const parsed = parseArgs(args);
70
- const { config, accessToken } = await requireAuth();
71
- requireRepoConfig();
72
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
73
- const hubFolder = findLocalHubFolder(hubId);
74
- if (!hubFolder) {
75
- console.error('Could not find a local hub folder for this hub. Run `wayai pull` first.');
76
- process.exit(1);
77
- }
78
- // Fall back to 'Default' on both sides so the local path and platform set agree.
79
- const targetSetName = parsed.setName ?? 'Default';
80
- const setFolderName = targetSetName;
81
- const scenarioName = parsed.evalName ?? `Capture ${parsed.conversationId.slice(0, 8)}`;
82
- const slug = slugify(scenarioName);
83
- const evalsDir = path.join(hubFolder, 'evals');
84
- const targetDir = path.join(evalsDir, setFolderName);
85
- const targetPath = path.join(targetDir, `${slug}.yaml`);
86
- // Defense-in-depth: refuse paths escaping evals/, mirroring writeEvalYamlFiles.
87
- if (!targetPath.startsWith(evalsDir + path.sep)) {
88
- console.error(`Resolved path "${path.relative(hubFolder, targetPath)}" escapes evals/. Aborting.`);
89
- process.exit(1);
90
- }
91
- if (fs.existsSync(targetPath)) {
92
- console.error(`File already exists: ${path.relative(hubFolder, targetPath)}. Use --name to choose a different name.`);
93
- process.exit(1);
94
- }
95
- // 2. Resolve scenario_set_id (find or create by name).
96
- console.log('Resolving scenario set...');
97
- const sets = await client.listScenarioSets(hubId);
98
- let scenarioSetId = sets.data.scenario_sets.find((s) => s.set_name === targetSetName)?.scenario_set_id;
99
- if (!scenarioSetId) {
100
- console.log(`Creating scenario set "${targetSetName}"...`);
101
- const created = await client.createScenarioSet(hubId, targetSetName);
102
- scenarioSetId = created.data.scenario_set.scenario_set_id;
103
- }
104
- // 3. Capture from conversation.
105
- console.log(`Capturing conversation ${parsed.conversationId}...`);
106
- const result = await client.createScenarioFromConversation({
107
- hub_id: hubId,
108
- conversation_id: parsed.conversationId,
109
- scenario_set_id: scenarioSetId,
110
- scenario_name: scenarioName,
111
- ...(parsed.evaluatorInstructions ? { evaluator_instructions: parsed.evaluatorInstructions } : {}),
112
- });
113
- const captured = result.data.eval;
114
- // 4. Build the on-disk YAML via the shared eval-writer logic so capture and
115
- // pull produce identical shapes. The display name is initially the agent_id
116
- // — `wayai pull` resolves it to the proper name on next sync.
117
- const evalEntry = {
118
- id: captured.eval_id,
119
- name: scenarioName,
120
- agent: captured.responder_agent_id,
121
- agent_id: captured.responder_agent_id,
122
- path: setFolderName,
123
- history: captured.message_history,
124
- input: captured.message_text,
125
- expected: captured.message_expected_response,
126
- ...(captured.evaluator_instructions ? { evaluator_instructions: captured.evaluator_instructions } : {}),
127
- };
128
- const yamlObj = buildEvalYamlObject(evalEntry, slug);
129
- fs.mkdirSync(targetDir, { recursive: true });
130
- fs.writeFileSync(targetPath, yaml.dump(yamlObj, YAML_DUMP_OPTIONS), 'utf-8');
131
- const relPath = path.relative(process.cwd(), targetPath);
132
- console.log(`\nWrote ${relPath}`);
133
- console.log('Run `wayai pull` to refresh the agent display name, then commit. The scenario is already on the platform.');
134
- }
135
- //# sourceMappingURL=eval-capture.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-capture.js","sourceRoot":"","sources":["../../src/commands/eval-capture.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- /**
2
- * wayai eval-results — view results from a completed eval session
3
- *
4
- * Usage:
5
- * wayai eval-results --session <id> # show aggregate results
6
- * wayai eval-results --session <id> --runs # show individual run details
7
- * wayai eval-results --session <id> --json # raw JSON output
8
- * wayai eval-results --eval "Test Greeting" # latest session results for an eval
9
- */
10
- export declare function evalResultsCommand(args: string[]): Promise<void>;
@@ -1,168 +0,0 @@
1
- /**
2
- * wayai eval-results — view results from a completed eval session
3
- *
4
- * Usage:
5
- * wayai eval-results --session <id> # show aggregate results
6
- * wayai eval-results --session <id> --runs # show individual run details
7
- * wayai eval-results --session <id> --json # raw JSON output
8
- * wayai eval-results --eval "Test Greeting" # latest session results for an eval
9
- */
10
- import { requireAuth } from '../lib/auth.js';
11
- import { requireRepoConfig } from '../lib/repo-config.js';
12
- import { resolveActiveHubId } from '../lib/workspace.js';
13
- import { ApiClient } from '../lib/api-client.js';
14
- import { printResultsTable } from '../lib/eval-format.js';
15
- export async function evalResultsCommand(args) {
16
- const hubId = resolveActiveHubId(args);
17
- const { config, accessToken } = await requireAuth();
18
- requireRepoConfig();
19
- // Parse args
20
- let sessionId;
21
- let evalName;
22
- let showRuns = false;
23
- let jsonOutput = false;
24
- for (let i = 0; i < args.length; i++) {
25
- const arg = args[i];
26
- if (arg === '--session') {
27
- if (i + 1 >= args.length) {
28
- console.error('--session requires a value');
29
- process.exit(1);
30
- }
31
- sessionId = args[++i];
32
- }
33
- else if (arg === '--eval') {
34
- if (i + 1 >= args.length) {
35
- console.error('--eval requires a value');
36
- process.exit(1);
37
- }
38
- evalName = args[++i];
39
- }
40
- else if (arg === '--runs') {
41
- showRuns = true;
42
- }
43
- else if (arg === '--json') {
44
- jsonOutput = true;
45
- }
46
- }
47
- if (!sessionId && !evalName) {
48
- console.error('Usage: wayai eval-results --session <id> [--runs] [--json]');
49
- console.error(' wayai eval-results --eval <name> [--runs] [--json]');
50
- process.exit(1);
51
- }
52
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
53
- // If --eval, find the latest completed session containing that eval
54
- if (evalName && !sessionId) {
55
- sessionId = await findLatestSessionForEval(client, hubId, evalName);
56
- }
57
- if (!sessionId) {
58
- // findLatestSessionForEval already printed the error
59
- return;
60
- }
61
- if (showRuns) {
62
- await showRunDetails(client, hubId, sessionId, evalName, jsonOutput);
63
- }
64
- else {
65
- await showAggregateResults(client, hubId, sessionId, jsonOutput);
66
- }
67
- }
68
- async function findLatestSessionForEval(client, hubId, evalName) {
69
- // Fetch evals and completed sessions in parallel
70
- const [evalsResult, sessionsResult] = await Promise.all([
71
- client.getEvals(hubId),
72
- client.getEvalSessions(hubId, { status: 'completed' }),
73
- ]);
74
- const matchingEval = evalsResult.data.evals.find((e) => e.eval_name.toLowerCase() === evalName.toLowerCase());
75
- if (!matchingEval) {
76
- console.error(`Eval "${evalName}" not found in this hub.`);
77
- process.exit(1);
78
- }
79
- const completedSessions = sessionsResult.data.sessions;
80
- if (completedSessions.length === 0) {
81
- console.error('No completed sessions found for this hub.');
82
- process.exit(1);
83
- }
84
- // Sessions are ordered by created_at desc, so first match is the latest
85
- for (const session of completedSessions) {
86
- const details = await client.getEvalSessionDetails(hubId, session.eval_session_id);
87
- const hasEval = details.data.results.some((r) => r.eval_id === matchingEval.eval_id);
88
- if (hasEval) {
89
- return session.eval_session_id;
90
- }
91
- }
92
- console.error(`No completed session found containing eval "${evalName}".`);
93
- process.exit(1);
94
- }
95
- async function showAggregateResults(client, hubId, sessionId, jsonOutput) {
96
- const details = await client.getEvalSessionDetails(hubId, sessionId);
97
- if (jsonOutput) {
98
- console.log(JSON.stringify(details.data, null, 2));
99
- return;
100
- }
101
- const session = details.data.session;
102
- const results = details.data.results;
103
- console.log(`Session: ${session.session_name} (${session.session_status})`);
104
- if (session.started_at) {
105
- console.log(`Started: ${new Date(session.started_at).toLocaleString()}`);
106
- }
107
- if (session.completed_at && session.started_at) {
108
- const durationMs = new Date(session.completed_at).getTime() - new Date(session.started_at).getTime();
109
- console.log(`Duration: ${(durationMs / 1000).toFixed(0)}s`);
110
- }
111
- console.log('');
112
- printResultsTable(results, 'detailed');
113
- }
114
- async function showRunDetails(client, hubId, sessionId, evalNameFilter, jsonOutput) {
115
- // Fetch session details (for header + eval name resolution) once
116
- const details = await client.getEvalSessionDetails(hubId, sessionId);
117
- // If filtering by eval name, resolve eval_id from the already-fetched details
118
- let evalId;
119
- if (evalNameFilter) {
120
- const matchingResult = details.data.results.find((r) => r.eval?.eval_name?.toLowerCase() === evalNameFilter.toLowerCase());
121
- if (matchingResult) {
122
- evalId = matchingResult.eval_id;
123
- }
124
- }
125
- const runsResult = await client.getEvalSessionRuns(hubId, sessionId, { evalId });
126
- if (jsonOutput) {
127
- console.log(JSON.stringify(runsResult.data, null, 2));
128
- return;
129
- }
130
- console.log(`Session: ${details.data.session.session_name} (${details.data.session.session_status})\n`);
131
- if (runsResult.data.runs.length === 0) {
132
- console.log('No runs found.');
133
- return;
134
- }
135
- for (const run of runsResult.data.runs) {
136
- const evalName = run.eval?.eval_name || run.eval_id.slice(0, 8);
137
- const status = run.response_match === true ? 'PASS' : run.response_match === false ? 'FAIL' : 'PENDING';
138
- const time = run.execution_time_ms != null ? `(${(run.execution_time_ms / 1000).toFixed(1)}s)` : '';
139
- console.log(`${evalName} — Run #${run.run_number} [${status}] ${time}`);
140
- if (run.eval_response?.content) {
141
- console.log(` Response: "${truncate(run.eval_response.content, 80)}"`);
142
- }
143
- // Surface the agent's actual tool calls so tool-call evals are diagnosable
144
- // here, without opening the conversation (gh #2597).
145
- if (run.eval_response?.tool_calls && run.eval_response.tool_calls.length > 0) {
146
- console.log(' Tool calls:');
147
- for (const tc of run.eval_response.tool_calls) {
148
- console.log(` ${tc.function.name}(${truncate(tc.function.arguments, 80)})`);
149
- }
150
- }
151
- if (run.response_comment) {
152
- console.log(` Comment: ${run.response_comment}`);
153
- }
154
- if (run.scores && Object.keys(run.scores).length > 0) {
155
- const scoresStr = Object.entries(run.scores)
156
- .map(([key, val]) => `${key}: ${Math.round(val * 100)}%`)
157
- .join(', ');
158
- console.log(` Scores: ${scoresStr}`);
159
- }
160
- console.log('');
161
- }
162
- }
163
- function truncate(str, maxLen) {
164
- if (str.length <= maxLen)
165
- return str;
166
- return str.slice(0, maxLen - 3) + '...';
167
- }
168
- //# sourceMappingURL=eval-results.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-results.js","sourceRoot":"","sources":["../../src/commands/eval-results.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export declare function evalCommand(args: string[]): Promise<void>;
@@ -1,49 +0,0 @@
1
- // wayai eval — dispatcher for imperative eval actions (authoring is file-driven via wayai push/pull).
2
- export async function evalCommand(args) {
3
- const [sub, ...rest] = args;
4
- if (!sub) {
5
- printHelp();
6
- process.exit(1);
7
- }
8
- switch (sub) {
9
- case 'capture': {
10
- const { evalCaptureCommand } = await import('./eval-capture.js');
11
- await evalCaptureCommand(rest);
12
- return;
13
- }
14
- case 'help':
15
- case '--help':
16
- case '-h':
17
- printHelp();
18
- return;
19
- default:
20
- console.error(`Unknown eval subcommand: ${sub}`);
21
- printHelp();
22
- process.exit(1);
23
- }
24
- }
25
- function printHelp() {
26
- console.log(`
27
- wayai eval — eval scenario operations
28
-
29
- Usage:
30
- wayai eval <subcommand> [options]
31
-
32
- Subcommands:
33
- capture <conversation_id> Capture a real conversation as a scenario YAML
34
- in the workspace evals/ folder.
35
-
36
- Capture flags:
37
- --set <name> Scenario set folder (created if missing). Default: "Default".
38
- --name <eval_name> Scenario name. Default: derived from conversation ID.
39
- --instructions <text> Evaluator instructions for the scoring agent.
40
-
41
- Examples:
42
- wayai eval capture 11111111-2222-3333-4444-555555555555
43
- wayai eval capture <conv_id> --set regression-suite --name "Cancel order"
44
-
45
- Authoring evals (create/update/delete) is file-driven — edit YAML in
46
- evals/ and run \`wayai push\`. This command is for production replay only.
47
- `.trim());
48
- }
49
- //# sourceMappingURL=eval.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval.js","sourceRoot":"","sources":["../../src/commands/eval.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAE5B,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,SAAS,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;YACjE,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ,CAAC;QACd,KAAK,IAAI;YACP,SAAS,EAAE,CAAC;YACZ,OAAO;QACT;YACE,OAAO,CAAC,KAAK,CAAC,4BAA4B,GAAG,EAAE,CAAC,CAAC;YACjD,SAAS,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACH,CAAC;AAED,SAAS,SAAS;IAChB,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;CAqBb,CAAC,IAAI,EAAE,CAAC,CAAC;AACV,CAAC"}
@@ -1,21 +0,0 @@
1
- /**
2
- * wayai evals — list evaluation scenarios for the current hub, or query eval
3
- * results stored in ClickHouse.
4
- *
5
- * Usage:
6
- * wayai evals # list all evals
7
- * wayai evals --enabled # show only enabled evals
8
- * wayai evals --disabled # show only disabled evals
9
- *
10
- * wayai evals sql "SELECT count() FROM conversation"
11
- * wayai evals sql "SELECT eval_id, count() FROM conversation GROUP BY 1" --json
12
- * wayai evals sql --schema # column + eval-score-path catalog
13
- * wayai evals sql "..." --limit 500
14
- *
15
- * `sql` is a thin wrapper over POST /api/evals/sql — server enforces hub_id +
16
- * is_eval=true scoping (CTE shadow), single-SELECT only, function/keyword
17
- * denylist, 10k row cap. `--schema` calls GET /api/evals/sql/schema and
18
- * returns top-level columns + system variable paths + dynamically discovered
19
- * `data.eval_scores.*` dimensions.
20
- */
21
- export declare function evalsCommand(args: string[]): Promise<void>;
@@ -1,120 +0,0 @@
1
- /**
2
- * wayai evals — list evaluation scenarios for the current hub, or query eval
3
- * results stored in ClickHouse.
4
- *
5
- * Usage:
6
- * wayai evals # list all evals
7
- * wayai evals --enabled # show only enabled evals
8
- * wayai evals --disabled # show only disabled evals
9
- *
10
- * wayai evals sql "SELECT count() FROM conversation"
11
- * wayai evals sql "SELECT eval_id, count() FROM conversation GROUP BY 1" --json
12
- * wayai evals sql --schema # column + eval-score-path catalog
13
- * wayai evals sql "..." --limit 500
14
- *
15
- * `sql` is a thin wrapper over POST /api/evals/sql — server enforces hub_id +
16
- * is_eval=true scoping (CTE shadow), single-SELECT only, function/keyword
17
- * denylist, 10k row cap. `--schema` calls GET /api/evals/sql/schema and
18
- * returns top-level columns + system variable paths + dynamically discovered
19
- * `data.eval_scores.*` dimensions.
20
- */
21
- import { requireAuth } from '../lib/auth.js';
22
- import { requireRepoConfig } from '../lib/repo-config.js';
23
- import { resolveActiveHubId } from '../lib/workspace.js';
24
- import { ApiClient } from '../lib/api-client.js';
25
- import { printQueryRows, printSqlSchema } from '../lib/sql-output.js';
26
- import { parsePositiveIntFlag } from '../lib/utils.js';
27
- export async function evalsCommand(args) {
28
- if (args[0] === 'sql') {
29
- return evalsSqlSubcommand(args.slice(1));
30
- }
31
- return evalsListCommand(args);
32
- }
33
- // ---------------------------------------------------------------------------
34
- // Default list command (GET /api/evals)
35
- // ---------------------------------------------------------------------------
36
- async function evalsListCommand(args) {
37
- const hubId = resolveActiveHubId(args);
38
- const { config, accessToken } = await requireAuth();
39
- requireRepoConfig();
40
- let enabledFilter;
41
- for (let i = 0; i < args.length; i++) {
42
- const arg = args[i];
43
- if (arg === '--enabled') {
44
- enabledFilter = 'true';
45
- }
46
- else if (arg === '--disabled') {
47
- enabledFilter = 'false';
48
- }
49
- }
50
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
51
- const result = await client.getEvals(hubId, { enabled: enabledFilter });
52
- if (result.data.evals.length === 0) {
53
- console.log('No evals found.');
54
- return;
55
- }
56
- console.log(`Evals (${result.data.evals.length}):\n`);
57
- for (const eval_ of result.data.evals) {
58
- const status = eval_.enabled ? 'enabled' : 'disabled';
59
- const runs = `${eval_.number_of_runs} run${eval_.number_of_runs === 1 ? '' : 's'}`;
60
- const agentName = eval_.agent?.agent_name || 'unknown';
61
- console.log(` ${eval_.eval_name.padEnd(20)} ${eval_.eval_id.slice(0, 8)} ${status.padEnd(9)} ${runs.padEnd(7)} Agent: ${agentName}`);
62
- }
63
- }
64
- // ---------------------------------------------------------------------------
65
- // `wayai evals sql` — POST /api/evals/sql (read-only, server-scoped to is_eval = true)
66
- // ---------------------------------------------------------------------------
67
- async function evalsSqlSubcommand(args) {
68
- const hubId = resolveActiveHubId(args);
69
- const { config, accessToken } = await requireAuth();
70
- requireRepoConfig();
71
- let sql;
72
- let limit;
73
- let jsonOutput = false;
74
- let schemaOnly = false;
75
- for (let i = 0; i < args.length; i++) {
76
- const arg = args[i];
77
- if (arg === '--limit') {
78
- limit = parsePositiveIntFlag('--limit', args[++i]);
79
- }
80
- else if (arg === '--json') {
81
- jsonOutput = true;
82
- }
83
- else if (arg === '--schema') {
84
- schemaOnly = true;
85
- }
86
- else if (!arg.startsWith('--') && sql === undefined) {
87
- sql = arg;
88
- }
89
- else {
90
- console.error(`Unknown flag for \`evals sql\`: ${arg}`);
91
- process.exit(1);
92
- }
93
- }
94
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
95
- if (schemaOnly) {
96
- const schema = await client.getEvalsSqlSchema(hubId);
97
- if (jsonOutput) {
98
- console.log(JSON.stringify(schema.data, null, 2));
99
- return;
100
- }
101
- printSqlSchema(schema.data, 'Variable paths (data.system.* + data.eval_scores.*):');
102
- return;
103
- }
104
- if (!sql) {
105
- console.error('Provide a SQL string. Example: wayai evals sql "SELECT count() FROM conversation"');
106
- console.error('Or run: wayai evals sql --schema to list available columns and paths.');
107
- process.exit(1);
108
- }
109
- const result = await client.runEvalsSql({
110
- hub_id: hubId,
111
- sql,
112
- ...(limit !== undefined && { limit }),
113
- });
114
- if (jsonOutput) {
115
- console.log(JSON.stringify(result, null, 2));
116
- return;
117
- }
118
- printQueryRows(result.data);
119
- }
120
- //# sourceMappingURL=evals.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/commands/evals.ts"],"names":[],"mappings":"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"}
@@ -1,16 +0,0 @@
1
- /**
2
- * wayai init [--org <uuid>] — set up .wayai.yaml to scope this repo to an organization
3
- *
4
- * Interactive mode: prompts user to pick an org (or auto-selects if only one).
5
- * Direct mode: --org <uuid> sets the org without prompting.
6
- *
7
- * Hubs self-identify via `hub.yaml` inside their folder; this file only carries
8
- * org context so that push/pull know which org to talk to.
9
- */
10
- export declare const SKILL_INSTALL_CMD = "npx skills add wayai-pro/wayai-skill -y";
11
- export declare function writeWorkspaceFiles(gitRoot: string): string[];
12
- export declare function parseArgs(args: string[]): {
13
- orgId: string | undefined;
14
- autoConfirm: boolean;
15
- };
16
- export declare function initCommand(args: string[]): Promise<void>;