@wayai/cli 0.3.40 → 0.3.42

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 +16920 -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
package/dist/lib/auth.js DELETED
@@ -1,230 +0,0 @@
1
- /**
2
- * Authentication — OAuth 2.1 + PKCE browser login + way_ token fallback
3
- *
4
- * Two login paths:
5
- * 1. Browser login (default): OAuth 2.1 with PKCE → JWT + refresh token
6
- * 2. Token login (--token): User pastes a way_ scoped token directly
7
- *
8
- * The CLI exchanges codes directly with AuthKit's token endpoint.
9
- */
10
- import * as crypto from 'node:crypto';
11
- import * as http from 'node:http';
12
- import { readConfig, writeConfig } from './config.js';
13
- import { getToken, setOAuthTokens, clearTokens, migrateLegacyTokens } from './token-store.js';
14
- import { setSentryUser } from './sentry.js';
15
- // =============================================================================
16
- // PKCE Utilities
17
- // =============================================================================
18
- export function generateCodeVerifier() {
19
- return crypto.randomBytes(32).toString('base64url');
20
- }
21
- export async function generateCodeChallenge(verifier) {
22
- const hash = crypto.createHash('sha256').update(verifier).digest();
23
- return hash.toString('base64url');
24
- }
25
- export function generateState() {
26
- return crypto.randomBytes(16).toString('base64url');
27
- }
28
- // =============================================================================
29
- // AuthKit Token Exchange
30
- // =============================================================================
31
- /**
32
- * Convert a token lifetime in seconds (as returned by AuthKit) into an absolute
33
- * ISO 8601 timestamp suitable for `token_expires_at` in the CLI config.
34
- */
35
- export function expiresInToIso(expiresInSeconds) {
36
- return new Date(Date.now() + expiresInSeconds * 1000).toISOString();
37
- }
38
- export async function exchangeCodeForTokens(authkitDomain, clientId, code, codeVerifier, redirectUri) {
39
- const response = await fetch(`${authkitDomain}/oauth2/token`, {
40
- method: 'POST',
41
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
42
- body: new URLSearchParams({
43
- grant_type: 'authorization_code',
44
- code,
45
- code_verifier: codeVerifier,
46
- redirect_uri: redirectUri,
47
- client_id: clientId,
48
- }).toString(),
49
- });
50
- if (!response.ok) {
51
- const body = await response.text();
52
- throw new Error(`Token exchange failed (${response.status}): ${body}`);
53
- }
54
- return response.json();
55
- }
56
- export async function refreshAccessToken(authkitDomain, clientId, refreshToken) {
57
- const response = await fetch(`${authkitDomain}/oauth2/token`, {
58
- method: 'POST',
59
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
60
- body: new URLSearchParams({
61
- grant_type: 'refresh_token',
62
- refresh_token: refreshToken,
63
- client_id: clientId,
64
- }).toString(),
65
- });
66
- if (!response.ok) {
67
- const status = response.status;
68
- const body = await response.text();
69
- if (status === 400 || status === 401) {
70
- let isInvalidGrant = false;
71
- try {
72
- const parsed = JSON.parse(body);
73
- if (parsed.error === 'invalid_grant')
74
- isInvalidGrant = true;
75
- }
76
- catch { /* non-JSON body */ }
77
- if (isInvalidGrant)
78
- throw new Error('SESSION_EXPIRED');
79
- }
80
- throw new Error(`Token refresh failed (${status}): ${body}`);
81
- }
82
- return response.json();
83
- }
84
- export async function validateToken(apiUrl, token) {
85
- const response = await fetch(`${apiUrl}/api/auth/me`, {
86
- headers: { Authorization: `Bearer ${token}` },
87
- });
88
- if (!response.ok) {
89
- throw new Error(`Token validation failed (${response.status})`);
90
- }
91
- }
92
- // =============================================================================
93
- // Callback Server
94
- // =============================================================================
95
- /** Fixed port for OAuth callback — must match the redirect URI registered in WorkOS */
96
- export const OAUTH_CALLBACK_PORT = 3829;
97
- export function startCallbackServer(port, expectedState, timeoutMs = 120_000) {
98
- return new Promise((resolve, reject) => {
99
- const server = http.createServer((req, res) => {
100
- const url = new URL(req.url || '/', `http://127.0.0.1:${port}`);
101
- if (url.pathname === '/callback') {
102
- const code = url.searchParams.get('code');
103
- const state = url.searchParams.get('state');
104
- const error = url.searchParams.get('error');
105
- const errorDescription = url.searchParams.get('error_description');
106
- if (error) {
107
- res.writeHead(400, { 'Content-Type': 'text/html' });
108
- res.end(`<html><body><h2>Login failed</h2><p>${errorDescription || error}</p></body></html>`);
109
- server.close();
110
- reject(new Error(`OAuth callback error: ${errorDescription || error}`));
111
- return;
112
- }
113
- if (state !== expectedState) {
114
- res.writeHead(400, { 'Content-Type': 'text/html' });
115
- res.end('<html><body><h2>Login failed</h2><p>Invalid state parameter</p></body></html>');
116
- server.close();
117
- reject(new Error('OAuth state mismatch — possible CSRF attack'));
118
- return;
119
- }
120
- if (code) {
121
- res.writeHead(200, { 'Content-Type': 'text/html' });
122
- res.end('<html><body><h2>Login successful!</h2><p>You can close this tab and return to your terminal.</p></body></html>');
123
- server.close();
124
- resolve({ code, port });
125
- }
126
- else {
127
- res.writeHead(400, { 'Content-Type': 'text/html' });
128
- res.end('<html><body><h2>Login failed</h2><p>No authorization code received</p></body></html>');
129
- server.close();
130
- reject(new Error('No authorization code received'));
131
- }
132
- }
133
- else {
134
- res.writeHead(404);
135
- res.end();
136
- }
137
- });
138
- const timeout = setTimeout(() => {
139
- server.close();
140
- reject(new Error('Timed out waiting for login. Run `wayai login` again.'));
141
- }, timeoutMs);
142
- server.on('close', () => clearTimeout(timeout));
143
- server.listen(port, '127.0.0.1');
144
- server.on('error', (err) => {
145
- if (err.code === 'EADDRINUSE') {
146
- reject(new Error(`Port ${port} is in use. Try again.`));
147
- }
148
- else {
149
- reject(err);
150
- }
151
- });
152
- });
153
- }
154
- // =============================================================================
155
- // Token Resolution (for API calls)
156
- // =============================================================================
157
- const AUTHKIT_DOMAIN = 'https://sprightly-comic-51.authkit.app';
158
- const AUTHKIT_CLIENT_ID = 'client_01KMZHB50KENM5SV90ZA80VXK4'; // WayAI CLI Connect app (public, PKCE)
159
- export function getAuthKitDomain() {
160
- return process.env.WAYAI_AUTHKIT_DOMAIN || AUTHKIT_DOMAIN;
161
- }
162
- export function getAuthKitClientId() {
163
- return process.env.WAYAI_AUTHKIT_CLIENT_ID || AUTHKIT_CLIENT_ID;
164
- }
165
- /**
166
- * Get a valid access token. Reads from the keyring (or env/file fallback) and
167
- * handles OAuth refresh transparently when nearing expiry.
168
- *
169
- * `config` is passed in for `api_url` access and to support the SESSION_EXPIRED
170
- * recovery path. Token data does NOT live in config anymore — it's resolved
171
- * from token-store.
172
- */
173
- export async function getAccessToken(config) {
174
- // One-time migration from legacy plaintext config (versions < 0.4.0). Idempotent.
175
- await migrateLegacyTokens();
176
- const resolved = await getToken();
177
- if (!resolved) {
178
- throw new Error('No token found. Run `wayai login` to authenticate.');
179
- }
180
- // way_ token path — no refresh needed
181
- if (resolved.kind === 'way') {
182
- return resolved.token;
183
- }
184
- // OAuth JWT path — check expiry and refresh if needed
185
- const expiresAt = resolved.expires_at;
186
- if (!expiresAt) {
187
- return resolved.access_token;
188
- }
189
- if (new Date(expiresAt).getTime() > Date.now() + 60_000) {
190
- return resolved.access_token;
191
- }
192
- if (!resolved.refresh_token) {
193
- throw new Error('Access token expired and no refresh token available. Run `wayai login` again.');
194
- }
195
- // Token expired — refresh
196
- try {
197
- const result = await refreshAccessToken(getAuthKitDomain(), getAuthKitClientId(), resolved.refresh_token);
198
- const newExpiresAt = expiresInToIso(result.expires_in);
199
- // setOAuthTokens persists token_expires_at to the metadata file — no need to
200
- // writeConfig again here (would double-write the same file).
201
- await setOAuthTokens(result.access_token, result.refresh_token ?? resolved.refresh_token, newExpiresAt);
202
- return result.access_token;
203
- }
204
- catch (err) {
205
- if (err instanceof Error && err.message === 'SESSION_EXPIRED') {
206
- await clearTokens();
207
- writeConfig({ api_url: config.api_url });
208
- throw new Error('Session expired. Please run `wayai login` again.');
209
- }
210
- throw err;
211
- }
212
- }
213
- export async function requireAuth() {
214
- const config = readConfig();
215
- if (!config) {
216
- console.error('Not logged in. Run `wayai login` first.');
217
- process.exit(1);
218
- }
219
- try {
220
- const accessToken = await getAccessToken(config);
221
- setSentryUser(accessToken);
222
- return { config, accessToken };
223
- }
224
- catch (err) {
225
- console.error(`Authentication failed: ${err instanceof Error ? err.message : String(err)}`);
226
- console.error('Run `wayai login` to re-authenticate.');
227
- process.exit(1);
228
- }
229
- }
230
- //# sourceMappingURL=auth.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"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"}
@@ -1,34 +0,0 @@
1
- /**
2
- * CLI configuration — non-secret metadata at ~/.wayai/config.json.
3
- *
4
- * Tokens themselves live in the OS keyring (see token-store.ts). This file
5
- * holds only metadata that survives a logout/login cycle gracefully if needed.
6
- */
7
- /**
8
- * Non-secret CLI configuration. Token fields removed in v0.4.0 — they now live
9
- * in the OS keyring. token_expires_at is metadata (timestamp, not a secret) and
10
- * stays here so the refresh path can decide when to refresh without unlocking
11
- * the keyring just to read the expiry.
12
- */
13
- export interface CliConfig {
14
- api_url: string;
15
- /** ISO 8601 expiry of the OAuth access token (metadata, not secret). */
16
- token_expires_at?: string;
17
- /**
18
- * Report-action nudge dedup keys the user has already been nudged about, so the login/status
19
- * reminder fires once per notifiable event. Shipped keys are `<report_id>:shipped:<contest_count>`
20
- * (one per shipment — a re-shipped fix re-nudges, matching the re-firing shipped email); dismissed
21
- * keys are `<report_id>:dismissed` (once-ever, matching the once-ever dismissed email). Capped to
22
- * the most-recent entries by the writer.
23
- */
24
- nudged_report_ids?: string[];
25
- }
26
- export declare function getConfigPath(): string;
27
- /**
28
- * Read the metadata config. Tokens are NOT included — fetch them via
29
- * `getToken()` from token-store. Returns null only when the user has never
30
- * logged in (no config file at all).
31
- */
32
- export declare function readConfig(): CliConfig | null;
33
- export declare function writeConfig(config: CliConfig): void;
34
- export declare function deleteConfig(): void;
@@ -1,69 +0,0 @@
1
- /**
2
- * CLI configuration — non-secret metadata at ~/.wayai/config.json.
3
- *
4
- * Tokens themselves live in the OS keyring (see token-store.ts). This file
5
- * holds only metadata that survives a logout/login cycle gracefully if needed.
6
- */
7
- import * as fs from 'node:fs';
8
- import * as path from 'node:path';
9
- import * as os from 'node:os';
10
- // Resolved per-call so tests can redirect via $HOME and any runtime HOME change
11
- // (e.g., su -) is picked up. Frozen module-level constants previously made tests
12
- // write to the user's real ~/.wayai/.
13
- function configDir() { return path.join(os.homedir(), '.wayai'); }
14
- function configPath() { return path.join(configDir(), 'config.json'); }
15
- export function getConfigPath() {
16
- return configPath();
17
- }
18
- /**
19
- * Read the metadata config. Tokens are NOT included — fetch them via
20
- * `getToken()` from token-store. Returns null only when the user has never
21
- * logged in (no config file at all).
22
- */
23
- export function readConfig() {
24
- if (!fs.existsSync(configPath()))
25
- return null;
26
- try {
27
- const content = fs.readFileSync(configPath(), 'utf-8');
28
- const parsed = JSON.parse(content);
29
- if (!parsed.api_url)
30
- return null;
31
- return {
32
- api_url: parsed.api_url,
33
- token_expires_at: parsed.token_expires_at,
34
- nudged_report_ids: Array.isArray(parsed.nudged_report_ids)
35
- ? parsed.nudged_report_ids.filter((x) => typeof x === 'string')
36
- : undefined,
37
- };
38
- }
39
- catch {
40
- return null;
41
- }
42
- }
43
- export function writeConfig(config) {
44
- if (!fs.existsSync(configDir())) {
45
- fs.mkdirSync(configDir(), { recursive: true });
46
- }
47
- // Preserve any existing metadata fields (e.g., user_id) that may be added later.
48
- let existing = {};
49
- if (fs.existsSync(configPath())) {
50
- try {
51
- existing = JSON.parse(fs.readFileSync(configPath(), 'utf-8'));
52
- }
53
- catch { /* corrupt — overwrite */ }
54
- }
55
- // Drop any legacy plaintext token fields that may still be present.
56
- delete existing.token;
57
- delete existing.access_token;
58
- delete existing.refresh_token;
59
- Object.assign(existing, config);
60
- fs.writeFileSync(configPath(), JSON.stringify(existing, null, 2) + '\n', {
61
- mode: 0o600, // owner-only read/write
62
- });
63
- }
64
- export function deleteConfig() {
65
- if (fs.existsSync(configPath())) {
66
- fs.unlinkSync(configPath());
67
- }
68
- }
69
- //# sourceMappingURL=config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAsB9B,gFAAgF;AAChF,iFAAiF;AACjF,sCAAsC;AACtC,SAAS,SAAS,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC1E,SAAS,UAAU,KAAa,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC;AAE/E,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAC;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IAE9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;YACzC,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC;gBACxD,CAAC,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAU,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC;gBACrF,CAAC,CAAC,SAAS;SACd,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,iFAAiF;IACjF,IAAI,QAAQ,GAA4B,EAAE,CAAC;IAC3C,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QAChC,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;IACvC,CAAC;IACD,oEAAoE;IACpE,OAAO,QAAQ,CAAC,KAAK,CAAC;IACtB,OAAO,QAAQ,CAAC,YAAY,CAAC;IAC7B,OAAO,QAAQ,CAAC,aAAa,CAAC;IAE9B,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAEhC,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QACvE,IAAI,EAAE,KAAK,EAAE,wBAAwB;KACtC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;QAChC,EAAE,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}
@@ -1,36 +0,0 @@
1
- /**
2
- * Shared helpers for the org-credential CLI commands (create-credential,
3
- * update-credential).
4
- */
5
- export declare const VALID_AUTH_TYPES: readonly ["api_key", "bearer", "basic_auth"];
6
- export type AuthType = typeof VALID_AUTH_TYPES[number];
7
- /** Maps legacy display names to canonical lowercase codes for backward compat. */
8
- export declare const LEGACY_AUTH_TYPE_MAP: Record<string, AuthType>;
9
- /** Normalize a user-supplied auth type, accepting legacy display names. */
10
- export declare function normalizeCliAuthType(type: string): AuthType | null;
11
- export declare const VALID_ENVIRONMENTS: readonly ["preview", "production", "all"];
12
- export type Environment = typeof VALID_ENVIRONMENTS[number];
13
- /** Validate a user-supplied credential environment; returns null when invalid. */
14
- export declare function normalizeCliEnvironment(env: string): Environment | null;
15
- /**
16
- * Map a single secret string (read from stdin) to the credential body fields
17
- * the backend expects for the given auth type. Basic Auth expects
18
- * `username:password`. Throws on malformed Basic Auth input.
19
- */
20
- export declare function mapSecretToCredentialFields(authType: AuthType, secret: string): Record<string, string>;
21
- export interface OrgTagLike {
22
- tag_id: string;
23
- name: string;
24
- }
25
- /**
26
- * Resolve a list of tag references (names, or raw tag UUIDs) to tag UUIDs using
27
- * the org's tag registry. Accepts names primarily (the human-facing identifier);
28
- * a value that is already a known tag_id passes through. Unknown references throw
29
- * with the list of available tag names. Empty/whitespace entries are skipped.
30
- */
31
- export declare function resolveTagIds(tagRefs: string[], orgTags: OrgTagLike[]): string[];
32
- /**
33
- * Split repeatable + comma-separated `--tag` values into a flat list of refs.
34
- * `['a,b', 'c']` → `['a', 'b', 'c']`.
35
- */
36
- export declare function splitTagRefs(rawValues: string[]): string[];
@@ -1,88 +0,0 @@
1
- /**
2
- * Shared helpers for the org-credential CLI commands (create-credential,
3
- * update-credential).
4
- */
5
- export const VALID_AUTH_TYPES = ['api_key', 'bearer', 'basic_auth'];
6
- /** Maps legacy display names to canonical lowercase codes for backward compat. */
7
- export const LEGACY_AUTH_TYPE_MAP = {
8
- 'API Key': 'api_key',
9
- 'Bearer Token': 'bearer',
10
- 'Basic Auth': 'basic_auth',
11
- };
12
- /** Normalize a user-supplied auth type, accepting legacy display names. */
13
- export function normalizeCliAuthType(type) {
14
- const normalized = LEGACY_AUTH_TYPE_MAP[type] ?? type;
15
- return VALID_AUTH_TYPES.includes(normalized) ? normalized : null;
16
- }
17
- export const VALID_ENVIRONMENTS = ['preview', 'production', 'all'];
18
- /** Validate a user-supplied credential environment; returns null when invalid. */
19
- export function normalizeCliEnvironment(env) {
20
- return VALID_ENVIRONMENTS.includes(env) ? env : null;
21
- }
22
- /**
23
- * Map a single secret string (read from stdin) to the credential body fields
24
- * the backend expects for the given auth type. Basic Auth expects
25
- * `username:password`. Throws on malformed Basic Auth input.
26
- */
27
- export function mapSecretToCredentialFields(authType, secret) {
28
- switch (authType) {
29
- case 'bearer':
30
- return { access_token: secret };
31
- case 'api_key':
32
- return { api_key: secret };
33
- case 'basic_auth': {
34
- const colonIdx = secret.indexOf(':');
35
- if (colonIdx === -1) {
36
- throw new Error('Basic Auth stdin format: username:password');
37
- }
38
- return {
39
- username: secret.slice(0, colonIdx),
40
- password: secret.slice(colonIdx + 1),
41
- };
42
- }
43
- }
44
- }
45
- /**
46
- * Resolve a list of tag references (names, or raw tag UUIDs) to tag UUIDs using
47
- * the org's tag registry. Accepts names primarily (the human-facing identifier);
48
- * a value that is already a known tag_id passes through. Unknown references throw
49
- * with the list of available tag names. Empty/whitespace entries are skipped.
50
- */
51
- export function resolveTagIds(tagRefs, orgTags) {
52
- const byName = new Map(orgTags.map((t) => [t.name, t.tag_id]));
53
- const byId = new Set(orgTags.map((t) => t.tag_id));
54
- const ids = [];
55
- const missing = [];
56
- for (const raw of tagRefs) {
57
- const ref = raw.trim();
58
- if (!ref)
59
- continue;
60
- const resolved = byName.get(ref);
61
- if (resolved) {
62
- ids.push(resolved);
63
- }
64
- else if (byId.has(ref)) {
65
- ids.push(ref);
66
- }
67
- else {
68
- missing.push(ref);
69
- }
70
- }
71
- if (missing.length > 0) {
72
- const available = orgTags.map((t) => t.name).join(', ') || '(none)';
73
- throw new Error(`Unknown tag(s): ${missing.join(', ')}. Available org tags: ${available}`);
74
- }
75
- // De-dup while preserving order.
76
- return [...new Set(ids)];
77
- }
78
- /**
79
- * Split repeatable + comma-separated `--tag` values into a flat list of refs.
80
- * `['a,b', 'c']` → `['a', 'b', 'c']`.
81
- */
82
- export function splitTagRefs(rawValues) {
83
- return rawValues
84
- .flatMap((v) => v.split(','))
85
- .map((v) => v.trim())
86
- .filter((v) => v.length > 0);
87
- }
88
- //# sourceMappingURL=credential-utils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"credential-utils.js","sourceRoot":"","sources":["../../src/lib/credential-utils.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /**
2
- * Colored terminal output from diff summary markdown
3
- */
4
- /**
5
- * Print a diff summary to the terminal with ANSI colors.
6
- * Parses the markdown summary from the backend diff endpoint.
7
- */
8
- export declare function printDiff(summary: string): void;
@@ -1,37 +0,0 @@
1
- /**
2
- * Colored terminal output from diff summary markdown
3
- */
4
- /**
5
- * Print a diff summary to the terminal with ANSI colors.
6
- * Parses the markdown summary from the backend diff endpoint.
7
- */
8
- export function printDiff(summary) {
9
- const lines = summary.split('\n');
10
- for (const line of lines) {
11
- if (line.startsWith('**') && line.endsWith('**')) {
12
- // Section header
13
- console.log(`\n\x1b[1m${line.replace(/\*\*/g, '')}\x1b[0m`);
14
- }
15
- else if (line.trimStart().startsWith('+ ')) {
16
- // Addition — green
17
- console.log(`\x1b[32m${line}\x1b[0m`);
18
- }
19
- else if (line.trimStart().startsWith('- ')) {
20
- // Deletion — red
21
- console.log(`\x1b[31m${line}\x1b[0m`);
22
- }
23
- else if (line.trimStart().startsWith('~ ')) {
24
- // Modification — yellow
25
- console.log(`\x1b[33m${line}\x1b[0m`);
26
- }
27
- else if (line.includes('(no changes)')) {
28
- // No changes — dim
29
- console.log(`\x1b[2m${line}\x1b[0m`);
30
- }
31
- else {
32
- console.log(line);
33
- }
34
- }
35
- console.log(); // trailing newline
36
- }
37
- //# sourceMappingURL=diff-display.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"diff-display.js","sourceRoot":"","sources":["../../src/lib/diff-display.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,iBAAiB;YACjB,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,mBAAmB;YACnB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,iBAAiB;YACjB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAC7C,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QACxC,CAAC;aAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YACzC,mBAAmB;YACnB,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB;AACpC,CAAC"}
@@ -1,29 +0,0 @@
1
- /**
2
- * Shared formatting helpers for eval results display.
3
- */
4
- interface ResultRow {
5
- eval_id: string;
6
- total_runs: number;
7
- successful_runs: number;
8
- failed_runs: number;
9
- pending_runs?: number;
10
- running_runs?: number;
11
- avg_execution_time_ms?: number;
12
- aggregated_scores?: Record<string, {
13
- avg: number;
14
- min: number;
15
- max: number;
16
- }>;
17
- eval?: {
18
- eval_id: string;
19
- eval_name: string;
20
- } | null;
21
- }
22
- /**
23
- * Print a results table and overall summary.
24
- *
25
- * @param mode - 'compact': scores show avg only (used by run-eval summary)
26
- * 'detailed': scores show avg/min/max (used by eval-results)
27
- */
28
- export declare function printResultsTable(results: ResultRow[], mode: 'compact' | 'detailed'): void;
29
- export {};
@@ -1,44 +0,0 @@
1
- /**
2
- * Shared formatting helpers for eval results display.
3
- */
4
- /**
5
- * Print a results table and overall summary.
6
- *
7
- * @param mode - 'compact': scores show avg only (used by run-eval summary)
8
- * 'detailed': scores show avg/min/max (used by eval-results)
9
- */
10
- export function printResultsTable(results, mode) {
11
- let totalPassed = 0;
12
- let totalTerminal = 0;
13
- let totalInProgress = 0;
14
- for (const r of results) {
15
- const evalName = r.eval?.eval_name || r.eval_id.slice(0, 8);
16
- // Denominator = completed runs (`successful + failed`, = the backend's
17
- // `completed` count). Counting still-running runs against it understates the
18
- // pass rate mid-run (gh #2604); in-progress runs are surfaced separately.
19
- // (`completed` includes unevaluated/errored rows, per `failed_runs`;
20
- // `success_rate` uses the narrower evaluated-only denominator.)
21
- const terminalRuns = r.successful_runs + r.failed_runs;
22
- const inProgress = (r.running_runs ?? 0) + (r.pending_runs ?? 0);
23
- const passed = inProgress > 0
24
- ? `${r.successful_runs}/${terminalRuns} passed (+${inProgress} in progress)`
25
- : `${r.successful_runs}/${terminalRuns} passed`;
26
- const avgTime = r.avg_execution_time_ms != null ? `avg ${(r.avg_execution_time_ms / 1000).toFixed(1)}s` : '';
27
- let scoresStr = '';
28
- if (r.aggregated_scores) {
29
- const parts = Object.entries(r.aggregated_scores).map(([key, val]) => mode === 'compact'
30
- ? `${key}: ${Math.round(val.avg * 100)}%`
31
- : `${key}: avg ${Math.round(val.avg * 100)}%, min ${Math.round(val.min * 100)}%, max ${Math.round(val.max * 100)}%`);
32
- if (parts.length > 0)
33
- scoresStr = ' ' + parts.join(' ');
34
- }
35
- console.log(` ${evalName.padEnd(20)} ${passed.padEnd(14)} ${avgTime}${scoresStr}`);
36
- totalPassed += r.successful_runs;
37
- totalTerminal += terminalRuns;
38
- totalInProgress += inProgress;
39
- }
40
- const pct = totalTerminal > 0 ? ((totalPassed / totalTerminal) * 100).toFixed(1) : '0.0';
41
- const inProgressNote = totalInProgress > 0 ? ` — ${totalInProgress} in progress` : '';
42
- console.log(`\nOverall: ${totalPassed}/${totalTerminal} passed (${pct}%)${inProgressNote}`);
43
- }
44
- //# sourceMappingURL=eval-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-format.js","sourceRoot":"","sources":["../../src/lib/eval-format.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- export declare function getLockPath(): string | null;
2
- export declare function readLock(): string | null;
3
- export declare function writeLock(hubId: string): void;
4
- export declare function clearLock(): boolean;
5
- export declare function assertHubMatchesLock(resolvedHubId: string, hubLabel?: string): void;
6
- export declare function autoLockIfUnlocked(hubId: string): boolean;
7
- export declare function assertNoLockBlocksHubCreation(newHubName: string): void;