@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
@@ -1,29 +0,0 @@
1
- /**
2
- * Resource file-tree primitives shared by hub-as-code and org-as-code.
3
- *
4
- * Both surfaces represent a resource's files as a directory tree on disk
5
- * (`<root>/<slug>/...`), scan them into `HubAsCodeResourceFile[]` (text inline,
6
- * binary as base64, SHA-256 hashes), and write them back. Extracted here so
7
- * the binary/hash/orphan-cleanup rules live in exactly one place.
8
- */
9
- import type { HubAsCodeResourceFile } from './types.js';
10
- export declare const BINARY_EXTENSIONS: Set<string>;
11
- export declare const MAX_RESOURCE_FILE_SIZE: number;
12
- export declare function isBinaryFile(filename: string): boolean;
13
- export declare function guessMimeType(filename: string): string | undefined;
14
- export declare function computeHash(data: Buffer): string;
15
- /** Recursively scan a resource directory into file entries (text inline, binary base64). */
16
- export declare function scanResourceFiles(dir: string, prefix?: string): HubAsCodeResourceFile[];
17
- /**
18
- * Write a resource's files into `resDir`, then prune orphans. Text and base64
19
- * content land synchronously; files carrying only `download_url` are left for
20
- * the caller's async download pass but still counted as written (not orphaned).
21
- */
22
- export declare function writeResourceFileTree(resDir: string, files: HubAsCodeResourceFile[]): void;
23
- /** Recursively remove files not in `writtenPaths`, plus any directories left empty. */
24
- export declare function cleanOrphanFiles(dir: string, prefix: string, writtenPaths: Set<string>): void;
25
- /**
26
- * Download binary files (those carrying `download_url` and no inline content)
27
- * into `resDir`. Returns the count downloaded. Path-traversal guarded.
28
- */
29
- export declare function downloadBinaryFiles(resDir: string, files: HubAsCodeResourceFile[]): Promise<number>;
@@ -1,156 +0,0 @@
1
- /**
2
- * Resource file-tree primitives shared by hub-as-code and org-as-code.
3
- *
4
- * Both surfaces represent a resource's files as a directory tree on disk
5
- * (`<root>/<slug>/...`), scan them into `HubAsCodeResourceFile[]` (text inline,
6
- * binary as base64, SHA-256 hashes), and write them back. Extracted here so
7
- * the binary/hash/orphan-cleanup rules live in exactly one place.
8
- */
9
- import * as fs from 'node:fs';
10
- import * as path from 'node:path';
11
- import * as crypto from 'node:crypto';
12
- export const BINARY_EXTENSIONS = new Set([
13
- 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'webp', 'svg', 'ico',
14
- 'mp3', 'mp4', 'wav', 'zip', 'tar', 'gz',
15
- 'woff', 'woff2', 'ttf', 'eot',
16
- ]);
17
- export const MAX_RESOURCE_FILE_SIZE = 10 * 1024 * 1024; // 10MB
18
- export function isBinaryFile(filename) {
19
- const ext = filename.split('.').pop()?.toLowerCase() || '';
20
- return BINARY_EXTENSIONS.has(ext);
21
- }
22
- export function guessMimeType(filename) {
23
- const ext = filename.split('.').pop()?.toLowerCase() || '';
24
- const mimeMap = {
25
- md: 'text/markdown', txt: 'text/plain', json: 'application/json',
26
- yaml: 'text/yaml', yml: 'text/yaml', html: 'text/html', css: 'text/css',
27
- js: 'text/javascript', ts: 'text/typescript', xml: 'text/xml', csv: 'text/csv',
28
- pdf: 'application/pdf', png: 'image/png', jpg: 'image/jpeg', jpeg: 'image/jpeg',
29
- gif: 'image/gif', webp: 'image/webp', svg: 'image/svg+xml', ico: 'image/x-icon',
30
- mp3: 'audio/mpeg', mp4: 'video/mp4', wav: 'audio/wav',
31
- zip: 'application/zip', tar: 'application/x-tar', gz: 'application/gzip',
32
- woff: 'font/woff', woff2: 'font/woff2', ttf: 'font/ttf', eot: 'application/vnd.ms-fontobject',
33
- };
34
- return mimeMap[ext];
35
- }
36
- export function computeHash(data) {
37
- return crypto.createHash('sha256').update(data).digest('hex');
38
- }
39
- /** Recursively scan a resource directory into file entries (text inline, binary base64). */
40
- export function scanResourceFiles(dir, prefix = '') {
41
- const files = [];
42
- const entries = fs.readdirSync(dir, { withFileTypes: true });
43
- for (const entry of entries) {
44
- const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
45
- if (entry.isDirectory()) {
46
- files.push(...scanResourceFiles(path.join(dir, entry.name), relPath));
47
- }
48
- else if (entry.isFile()) {
49
- const fullPath = path.join(dir, entry.name);
50
- const stat = fs.statSync(fullPath);
51
- if (stat.size > MAX_RESOURCE_FILE_SIZE) {
52
- console.warn(` Warning: skipping ${relPath} (${(stat.size / 1024 / 1024).toFixed(1)}MB exceeds 10MB limit)`);
53
- continue;
54
- }
55
- const fileEntry = {
56
- path: relPath,
57
- mime_type: guessMimeType(entry.name),
58
- file_size: stat.size,
59
- };
60
- const data = fs.readFileSync(fullPath);
61
- fileEntry.hash = computeHash(data);
62
- if (isBinaryFile(entry.name)) {
63
- fileEntry.content_base64 = data.toString('base64');
64
- }
65
- else {
66
- fileEntry.content = data.toString('utf-8');
67
- }
68
- files.push(fileEntry);
69
- }
70
- }
71
- return files;
72
- }
73
- /**
74
- * Write a resource's files into `resDir`, then prune orphans. Text and base64
75
- * content land synchronously; files carrying only `download_url` are left for
76
- * the caller's async download pass but still counted as written (not orphaned).
77
- */
78
- export function writeResourceFileTree(resDir, files) {
79
- if (files.length === 0) {
80
- if (fs.existsSync(resDir))
81
- cleanOrphanFiles(resDir, '', new Set());
82
- return;
83
- }
84
- const writtenPaths = new Set();
85
- for (const file of files) {
86
- const filePath = path.join(resDir, file.path);
87
- // Guard against path traversal (e.g. "../../../.bashrc")
88
- if (!filePath.startsWith(resDir + path.sep) && filePath !== resDir) {
89
- console.warn(` Warning: skipping ${file.path} (path traversal detected)`);
90
- continue;
91
- }
92
- const fileDir = path.dirname(filePath);
93
- if (!fs.existsSync(fileDir))
94
- fs.mkdirSync(fileDir, { recursive: true });
95
- writtenPaths.add(file.path);
96
- if (file.content !== undefined) {
97
- fs.writeFileSync(filePath, file.content, 'utf-8');
98
- }
99
- else if (file.content_base64) {
100
- fs.writeFileSync(filePath, Buffer.from(file.content_base64, 'base64'));
101
- }
102
- // download_url files are written later by downloadBinaryFiles
103
- }
104
- if (fs.existsSync(resDir))
105
- cleanOrphanFiles(resDir, '', writtenPaths);
106
- }
107
- /** Recursively remove files not in `writtenPaths`, plus any directories left empty. */
108
- export function cleanOrphanFiles(dir, prefix, writtenPaths) {
109
- const entries = fs.readdirSync(dir, { withFileTypes: true });
110
- for (const entry of entries) {
111
- const relPath = prefix ? `${prefix}/${entry.name}` : entry.name;
112
- const fullPath = path.join(dir, entry.name);
113
- if (entry.isDirectory()) {
114
- cleanOrphanFiles(fullPath, relPath, writtenPaths);
115
- if (fs.readdirSync(fullPath).length === 0)
116
- fs.rmdirSync(fullPath);
117
- }
118
- else if (!writtenPaths.has(relPath)) {
119
- fs.unlinkSync(fullPath);
120
- }
121
- }
122
- }
123
- /**
124
- * Download binary files (those carrying `download_url` and no inline content)
125
- * into `resDir`. Returns the count downloaded. Path-traversal guarded.
126
- */
127
- export async function downloadBinaryFiles(resDir, files) {
128
- let count = 0;
129
- for (const file of files) {
130
- if (!file.download_url || file.content !== undefined)
131
- continue;
132
- try {
133
- const filePath = path.join(resDir, file.path);
134
- if (!filePath.startsWith(resDir + path.sep) && filePath !== resDir) {
135
- console.warn(` Warning: skipping ${file.path} (path traversal detected)`);
136
- continue;
137
- }
138
- const response = await fetch(file.download_url);
139
- if (!response.ok) {
140
- console.warn(` Warning: failed to download ${file.path} (${response.status})`);
141
- continue;
142
- }
143
- const buffer = Buffer.from(await response.arrayBuffer());
144
- const fileDir = path.dirname(filePath);
145
- if (!fs.existsSync(fileDir))
146
- fs.mkdirSync(fileDir, { recursive: true });
147
- fs.writeFileSync(filePath, buffer);
148
- count++;
149
- }
150
- catch (err) {
151
- console.warn(` Warning: failed to download ${file.path} (${err instanceof Error ? err.message : String(err)})`);
152
- }
153
- }
154
- return count;
155
- }
156
- //# sourceMappingURL=resource-files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resource-files.js","sourceRoot":"","sources":["../../src/lib/resource-files.ts"],"names":[],"mappings":"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"}
@@ -1,38 +0,0 @@
1
- /**
2
- * Sentry error tracking for @wayai/cli
3
- *
4
- * Production-only: skips initialization when running from source (development).
5
- * Opt-out: set WAYAI_TELEMETRY_DISABLED=1 to disable.
6
- */
7
- /**
8
- * Initialize Sentry for the CLI.
9
- *
10
- * @param command - The CLI command being run (e.g., 'push', 'pull')
11
- */
12
- export declare function initSentry(command?: string): void;
13
- /**
14
- * Whether an error should be reported to Sentry.
15
- * Expected API errors (4xx) are user-facing conditions, not bugs.
16
- */
17
- export declare function shouldReportToSentry(error: unknown): boolean;
18
- /**
19
- * Capture an exception to Sentry.
20
- */
21
- export declare function captureException(error: unknown, context?: {
22
- tags?: Record<string, string>;
23
- extra?: Record<string, unknown>;
24
- }): void;
25
- /**
26
- * Add a breadcrumb for API requests.
27
- */
28
- export declare function addApiBreadcrumb(method: string, path: string): void;
29
- /**
30
- * Set the Sentry user from a way_ token or JWT access token.
31
- * For way_ tokens, uses a hash prefix as the user identifier.
32
- * For JWTs (legacy), decodes the payload to extract the `sub` claim.
33
- */
34
- export declare function setSentryUser(accessToken: string): void;
35
- /**
36
- * Flush and close Sentry. Must be awaited before process.exit().
37
- */
38
- export declare function closeSentry(): Promise<void>;
@@ -1,168 +0,0 @@
1
- /**
2
- * Sentry error tracking for @wayai/cli
3
- *
4
- * Production-only: skips initialization when running from source (development).
5
- * Opt-out: set WAYAI_TELEMETRY_DISABLED=1 to disable.
6
- */
7
- import * as Sentry from '@sentry/node';
8
- import { readFileSync } from 'node:fs';
9
- import { dirname, join } from 'node:path';
10
- import { fileURLToPath } from 'node:url';
11
- import { homedir, platform, arch } from 'node:os';
12
- const HARDCODED_DSN = 'https://ffe500121277babcabf32e5868f00f9e@o4510669417807872.ingest.us.sentry.io/4510960145465344';
13
- let initialized = false;
14
- function getVersion() {
15
- try {
16
- const __dirname = dirname(fileURLToPath(import.meta.url));
17
- const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
18
- return pkg.version || '0.0.0';
19
- }
20
- catch {
21
- return '0.0.0';
22
- }
23
- }
24
- /**
25
- * Detect if running from npm install (production) vs from source (development).
26
- * When installed via npm, import.meta.url path contains 'node_modules'.
27
- * SENTRY_DSN env var overrides this check for testing.
28
- */
29
- function isInstalledPackage() {
30
- try {
31
- return fileURLToPath(import.meta.url).includes('node_modules');
32
- }
33
- catch {
34
- return false;
35
- }
36
- }
37
- /**
38
- * Initialize Sentry for the CLI.
39
- *
40
- * @param command - The CLI command being run (e.g., 'push', 'pull')
41
- */
42
- export function initSentry(command) {
43
- if (initialized)
44
- return;
45
- // Opt-out
46
- if (process.env.WAYAI_TELEMETRY_DISABLED === '1')
47
- return;
48
- const dsn = process.env.SENTRY_DSN || HARDCODED_DSN;
49
- // Skip when running from source (dev), unless SENTRY_DSN is explicitly set
50
- if (!process.env.SENTRY_DSN && !isInstalledPackage())
51
- return;
52
- const version = getVersion();
53
- Sentry.init({
54
- dsn,
55
- tracesSampleRate: 0,
56
- release: `wayai-cli@${version}`,
57
- environment: 'production',
58
- defaultIntegrations: false,
59
- beforeSend(event) {
60
- // Sanitize home directory paths in stack frames
61
- const home = homedir();
62
- if (home && event.exception?.values) {
63
- for (const value of event.exception.values) {
64
- if (value.stacktrace?.frames) {
65
- for (const frame of value.stacktrace.frames) {
66
- if (frame.filename && frame.filename.includes(home)) {
67
- frame.filename = frame.filename.replace(home, '~');
68
- }
69
- }
70
- }
71
- }
72
- }
73
- return event;
74
- },
75
- });
76
- // Set default tags
77
- Sentry.setTag('command', command || 'unknown');
78
- Sentry.setTag('node_version', process.version);
79
- Sentry.setTag('os_platform', platform());
80
- Sentry.setTag('os_arch', arch());
81
- initialized = true;
82
- }
83
- /**
84
- * Whether an error should be reported to Sentry.
85
- * Expected API errors (4xx) are user-facing conditions, not bugs.
86
- */
87
- export function shouldReportToSentry(error) {
88
- if (error instanceof Error &&
89
- 'isExpected' in error &&
90
- error.isExpected) {
91
- return false;
92
- }
93
- return true;
94
- }
95
- /**
96
- * Capture an exception to Sentry.
97
- */
98
- export function captureException(error, context) {
99
- if (!initialized)
100
- return;
101
- Sentry.withScope((scope) => {
102
- if (context?.tags) {
103
- for (const [key, value] of Object.entries(context.tags)) {
104
- scope.setTag(key, value);
105
- }
106
- }
107
- if (context?.extra) {
108
- for (const [key, value] of Object.entries(context.extra)) {
109
- scope.setExtra(key, value);
110
- }
111
- }
112
- Sentry.captureException(error);
113
- });
114
- }
115
- /**
116
- * Add a breadcrumb for API requests.
117
- */
118
- export function addApiBreadcrumb(method, path) {
119
- if (!initialized)
120
- return;
121
- Sentry.addBreadcrumb({
122
- category: 'http',
123
- message: `${method} ${path}`,
124
- level: 'info',
125
- });
126
- }
127
- /**
128
- * Set the Sentry user from a way_ token or JWT access token.
129
- * For way_ tokens, uses a hash prefix as the user identifier.
130
- * For JWTs (legacy), decodes the payload to extract the `sub` claim.
131
- */
132
- export function setSentryUser(accessToken) {
133
- if (!initialized)
134
- return;
135
- try {
136
- if (accessToken.startsWith('way_')) {
137
- // way_ tokens are opaque — use a truncated hash as user identifier
138
- const hash = require('node:crypto')
139
- .createHash('sha256')
140
- .update(accessToken)
141
- .digest('hex')
142
- .slice(0, 16);
143
- Sentry.setUser({ id: `token:${hash}` });
144
- return;
145
- }
146
- // Legacy JWT path
147
- const payloadBase64 = accessToken.split('.')[1];
148
- if (!payloadBase64)
149
- return;
150
- const payload = JSON.parse(Buffer.from(payloadBase64, 'base64url').toString());
151
- if (payload.sub) {
152
- Sentry.setUser({ id: payload.sub });
153
- }
154
- }
155
- catch {
156
- // Silently ignore malformed tokens — user context is best-effort
157
- }
158
- }
159
- /**
160
- * Flush and close Sentry. Must be awaited before process.exit().
161
- */
162
- export async function closeSentry() {
163
- if (!initialized)
164
- return;
165
- await Sentry.close(2000);
166
- initialized = false;
167
- }
168
- //# sourceMappingURL=sentry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sentry.js","sourceRoot":"","sources":["../../src/lib/sentry.ts"],"names":[],"mappings":"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"}
@@ -1,9 +0,0 @@
1
- export declare const DEFAULT_SKILL_RAW_URL = "https://raw.githubusercontent.com/wayai-pro/wayai-skill/main/skills/wayai/SKILL.md";
2
- export declare const SKILL_INSTALL_PATHS: readonly [".claude/skills/wayai/SKILL.md", ".opencode/skills/wayai/SKILL.md", ".agents/skills/wayai/SKILL.md"];
3
- export interface InstalledSkill {
4
- path: string;
5
- version: string | null;
6
- }
7
- export declare function parseFrontmatterVersion(content: string): string | null;
8
- export declare function findInstalledSkills(projectRoot: string): InstalledSkill[];
9
- export declare function lowestInstalledVersion(installs: InstalledSkill[]): string | null;
@@ -1,53 +0,0 @@
1
- import { existsSync, readFileSync } from 'node:fs';
2
- import { join } from 'node:path';
3
- import * as yaml from 'js-yaml';
4
- import { isNewerVersion } from './utils.js';
5
- // Path must match the destination layout written by `.github/workflows/sync-public-skill.yml`.
6
- export const DEFAULT_SKILL_RAW_URL = 'https://raw.githubusercontent.com/wayai-pro/wayai-skill/main/skills/wayai/SKILL.md';
7
- export const SKILL_INSTALL_PATHS = [
8
- '.claude/skills/wayai/SKILL.md',
9
- '.opencode/skills/wayai/SKILL.md',
10
- '.agents/skills/wayai/SKILL.md',
11
- ];
12
- export function parseFrontmatterVersion(content) {
13
- const match = /^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/.exec(content);
14
- if (!match)
15
- return null;
16
- let parsed;
17
- try {
18
- parsed = yaml.load(match[1]);
19
- }
20
- catch {
21
- return null;
22
- }
23
- if (!parsed || typeof parsed !== 'object')
24
- return null;
25
- const v = parsed.version;
26
- return typeof v === 'string' ? v : null;
27
- }
28
- export function findInstalledSkills(projectRoot) {
29
- const found = [];
30
- for (const rel of SKILL_INSTALL_PATHS) {
31
- const path = join(projectRoot, rel);
32
- if (!existsSync(path))
33
- continue;
34
- let version = null;
35
- try {
36
- version = parseFrontmatterVersion(readFileSync(path, 'utf-8'));
37
- }
38
- catch {
39
- // Unreadable
40
- }
41
- found.push({ path, version });
42
- }
43
- return found;
44
- }
45
- export function lowestInstalledVersion(installs) {
46
- const versions = installs
47
- .map((i) => i.version)
48
- .filter((v) => v !== null);
49
- if (versions.length === 0)
50
- return null;
51
- return versions.reduce((lowest, v) => (isNewerVersion(lowest, v) ? v : lowest));
52
- }
53
- //# sourceMappingURL=skill-version.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-version.js","sourceRoot":"","sources":["../../src/lib/skill-version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,+FAA+F;AAC/F,MAAM,CAAC,MAAM,qBAAqB,GAChC,oFAAoF,CAAC;AAEvF,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,+BAA+B;IAC/B,iCAAiC;IACjC,+BAA+B;CACvB,CAAC;AAOX,MAAM,UAAU,uBAAuB,CAAC,OAAe;IACrD,MAAM,KAAK,GAAG,wCAAwC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACvD,MAAM,CAAC,GAAI,MAAkC,CAAC,OAAO,CAAC;IACtD,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACrD,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QAChC,IAAI,OAAO,GAAkB,IAAI,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,GAAG,uBAAuB,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,aAAa;QACf,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,QAA0B;IAC/D,MAAM,QAAQ,GAAG,QAAQ;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;SACrB,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;IAC1C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAClF,CAAC"}
@@ -1,17 +0,0 @@
1
- export declare function printQueryRows(rows: Array<Record<string, unknown>>): void;
2
- interface SqlSchemaPath {
3
- path: string;
4
- type: string;
5
- origin: string;
6
- category?: string;
7
- description?: string;
8
- }
9
- export declare function printSqlSchema(data: {
10
- table: string;
11
- top_level: Array<{
12
- column: string;
13
- type: string;
14
- }>;
15
- paths: SqlSchemaPath[];
16
- }, pathsHeader: string): void;
17
- export {};
@@ -1,48 +0,0 @@
1
- // Shared row + schema printers for `wayai analytics sql` and `wayai evals sql`.
2
- export function printQueryRows(rows) {
3
- if (rows.length === 0) {
4
- console.log('(no rows)');
5
- return;
6
- }
7
- const columns = Object.keys(rows[0]);
8
- const widths = columns.map((c) => Math.max(c.length, ...rows.map((r) => formatCell(r[c]).length)));
9
- const header = columns.map((c, i) => c.padEnd(widths[i])).join(' ');
10
- console.log(header);
11
- console.log(columns.map((_, i) => '-'.repeat(widths[i])).join(' '));
12
- for (const row of rows) {
13
- console.log(columns.map((c, i) => formatCell(row[c]).padEnd(widths[i])).join(' '));
14
- }
15
- }
16
- export function printSqlSchema(data, pathsHeader) {
17
- console.log(`Table: ${data.table}\n`);
18
- console.log('Top-level columns:');
19
- for (const c of data.top_level) {
20
- console.log(` ${c.column.padEnd(24)} ${c.type}`);
21
- }
22
- console.log(`\n${pathsHeader}`);
23
- const byCat = new Map();
24
- for (const p of data.paths) {
25
- const key = p.category || p.origin;
26
- const arr = byCat.get(key) || [];
27
- arr.push(p);
28
- byCat.set(key, arr);
29
- }
30
- const cats = [...byCat.keys()].sort();
31
- for (const cat of cats) {
32
- console.log(`\n [${cat}]`);
33
- for (const p of byCat.get(cat)) {
34
- const desc = p.description ? ` — ${p.description}` : '';
35
- console.log(` ${p.path.padEnd(48)} ${p.type}${desc}`);
36
- }
37
- }
38
- }
39
- function formatCell(value) {
40
- if (value === null || value === undefined)
41
- return '';
42
- if (typeof value === 'number')
43
- return Number.isInteger(value) ? String(value) : value.toFixed(4);
44
- if (typeof value === 'object')
45
- return JSON.stringify(value);
46
- return String(value);
47
- }
48
- //# sourceMappingURL=sql-output.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sql-output.js","sourceRoot":"","sources":["../../src/lib/sql-output.ts"],"names":[],"mappings":"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"}
@@ -1,37 +0,0 @@
1
- export type TokenType = 'jwt' | 'way_token' | 'unknown';
2
- export declare function identifyTokenType(token: string): TokenType;
3
- export type ResolvedToken = {
4
- kind: 'way';
5
- token: string;
6
- } | {
7
- kind: 'oauth';
8
- access_token: string;
9
- refresh_token?: string;
10
- expires_at?: string;
11
- };
12
- interface KeyringBinding {
13
- getPassword(service: string, account: string): Promise<string | null>;
14
- setPassword(service: string, account: string, password: string): Promise<void>;
15
- deletePassword(service: string, account: string): Promise<boolean>;
16
- }
17
- /**
18
- * A keyring slot was deleted but a subsequent getPassword still returned a
19
- * value — the underlying secret store accepted the delete call without
20
- * actually removing the entry. Typically a macOS Keychain ACL surviving
21
- * from a prior login. Until the slot is cleared, writes to other slots
22
- * cannot reliably override what reads pick up first.
23
- */
24
- export declare class StaleKeyringSlotError extends Error {
25
- readonly account: string;
26
- constructor(account: string);
27
- }
28
- export declare function migrateLegacyTokens(): Promise<ResolvedToken | null>;
29
- export declare function getToken(): Promise<ResolvedToken | null>;
30
- export declare function setWayToken(token: string): Promise<void>;
31
- export declare function setOAuthTokens(access_token: string, refresh_token: string | undefined, expires_at: string): Promise<void>;
32
- export declare function clearTokens(): Promise<void>;
33
- /** Test hook — production code must not call this. */
34
- export declare function __setKeyringForTesting(binding: KeyringBinding | null): void;
35
- /** Test hook — production code must not call this. */
36
- export declare function __resetKeyringForTesting(): void;
37
- export {};