@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,472 +0,0 @@
1
- /**
2
- * wayai push [--hub <id|name>] [-y] — parse local files, diff remote, sync to preview
3
- *
4
- * The hub is derived from the workspace:
5
- * - cwd is inside a hub folder → use that hub
6
- * - exactly one hub in the hubs dir → use it
7
- * - multiple hubs → require `--hub <uuid|folder-name>` to disambiguate
8
- *
9
- * If a hub folder has hub.yaml without a `hub_id`, push creates the hub on the
10
- * platform first, then pushes its config.
11
- */
12
- import * as fs from 'node:fs';
13
- import * as path from 'node:path';
14
- import * as yaml from 'js-yaml';
15
- import { requireAuth } from '../lib/auth.js';
16
- import { ApiClient } from '../lib/api-client.js';
17
- import { parseHubFolder } from '../lib/parser.js';
18
- import { writeHubFolder } from '../lib/yaml-writer.js';
19
- import { downloadBinaryResourceFiles } from './pull.js';
20
- import { printDiff } from '../lib/diff-display.js';
21
- import { confirm, slugify, resolveHubYamlPath, UUID_RE } from '../lib/utils.js';
22
- import { autoRenameHubFolder, scanWorkspaceHubs, scanNewHubs, detectWorkspace, findGitRoot, findEnclosingHubFolder, } from '../lib/workspace.js';
23
- import { resolveLayout, warnLayoutOnce, hubsDirLabel } from '../lib/layout.js';
24
- import { requireRepoConfig } from '../lib/repo-config.js';
25
- import { assertHubMatchesLock, assertNoLockBlocksHubCreation, autoLockIfUnlocked } from '../lib/hub-lock.js';
26
- function parseArgs(args) {
27
- let autoConfirm = false;
28
- let hubSelector;
29
- for (let i = 0; i < args.length; i++) {
30
- const arg = args[i];
31
- if (arg === '--yes' || arg === '-y') {
32
- autoConfirm = true;
33
- }
34
- else if (arg === '--hub' && args[i + 1]) {
35
- hubSelector = args[++i];
36
- }
37
- }
38
- return { autoConfirm, hubSelector };
39
- }
40
- export function printSyncResult(result) {
41
- console.log(`\nSync complete. Preview hub: ${result.preview_hub_id}`);
42
- const c = result.changes;
43
- const parts = [];
44
- if (c.hub_updated)
45
- parts.push('hub updated');
46
- if (c.connections_created > 0)
47
- parts.push(`${c.connections_created} connection(s) created`);
48
- if (c.connections_updated > 0)
49
- parts.push(`${c.connections_updated} connection(s) updated`);
50
- if (c.connections_deleted > 0)
51
- parts.push(`${c.connections_deleted} connection(s) deleted`);
52
- if (c.agents_created > 0)
53
- parts.push(`${c.agents_created} agent(s) created`);
54
- if (c.agents_updated > 0)
55
- parts.push(`${c.agents_updated} agent(s) updated`);
56
- if (c.agents_deleted > 0)
57
- parts.push(`${c.agents_deleted} agent(s) deleted`);
58
- if (c.tools_created > 0)
59
- parts.push(`${c.tools_created} tool(s) created`);
60
- if (c.tools_updated > 0)
61
- parts.push(`${c.tools_updated} tool(s) updated`);
62
- if (c.tools_deleted > 0)
63
- parts.push(`${c.tools_deleted} tool(s) deleted`);
64
- if (c.states_created > 0)
65
- parts.push(`${c.states_created} state(s) created`);
66
- if (c.states_updated > 0)
67
- parts.push(`${c.states_updated} state(s) updated`);
68
- if (c.states_deleted > 0)
69
- parts.push(`${c.states_deleted} state(s) deleted`);
70
- if (c.teams_created > 0)
71
- parts.push(`${c.teams_created} team(s) created`);
72
- if (c.teams_updated > 0)
73
- parts.push(`${c.teams_updated} team(s) updated`);
74
- if (c.teams_deleted > 0)
75
- parts.push(`${c.teams_deleted} team(s) deleted`);
76
- if (c.resources_created > 0)
77
- parts.push(`${c.resources_created} resource(s) created`);
78
- if (c.resources_updated > 0)
79
- parts.push(`${c.resources_updated} resource(s) updated`);
80
- if (c.resources_deleted > 0)
81
- parts.push(`${c.resources_deleted} resource(s) deleted`);
82
- if (c.resource_files_uploaded > 0)
83
- parts.push(`${c.resource_files_uploaded} resource file(s) uploaded`);
84
- if (c.resource_files_deleted > 0)
85
- parts.push(`${c.resource_files_deleted} resource file(s) deleted`);
86
- if (c.resource_links_created > 0)
87
- parts.push(`${c.resource_links_created} resource link(s) created`);
88
- if (c.resource_links_updated > 0)
89
- parts.push(`${c.resource_links_updated} resource link(s) updated`);
90
- if (c.resource_links_deleted > 0)
91
- parts.push(`${c.resource_links_deleted} resource link(s) deleted`);
92
- if (c.outbound_contacts_created > 0)
93
- parts.push(`${c.outbound_contacts_created} outbound contact(s) created`);
94
- if (c.outbound_contacts_updated > 0)
95
- parts.push(`${c.outbound_contacts_updated} outbound contact(s) updated`);
96
- if (c.outbound_contacts_deleted > 0)
97
- parts.push(`${c.outbound_contacts_deleted} outbound contact(s) deleted`);
98
- if (c.outbound_lists_created > 0)
99
- parts.push(`${c.outbound_lists_created} outbound list(s) created`);
100
- if (c.outbound_lists_updated > 0)
101
- parts.push(`${c.outbound_lists_updated} outbound list(s) updated`);
102
- if (c.outbound_lists_deleted > 0)
103
- parts.push(`${c.outbound_lists_deleted} outbound list(s) deleted`);
104
- if (c.outbound_schedules_created > 0)
105
- parts.push(`${c.outbound_schedules_created} outbound schedule(s) created`);
106
- if (c.outbound_schedules_updated > 0)
107
- parts.push(`${c.outbound_schedules_updated} outbound schedule(s) updated`);
108
- if (c.outbound_schedules_deleted > 0)
109
- parts.push(`${c.outbound_schedules_deleted} outbound schedule(s) deleted`);
110
- if (parts.length > 0) {
111
- console.log(`Changes: ${parts.join(', ')}`);
112
- }
113
- if (result.errors && result.errors.length > 0) {
114
- printWarnings(result.errors);
115
- }
116
- if (result.warnings && result.warnings.length > 0) {
117
- printWarnings(result.warnings.map((w) => w.message));
118
- }
119
- }
120
- /** Render a yellow-highlighted "Warnings (N)" block. Shared by push + sync output. */
121
- export function printWarnings(warnings) {
122
- if (warnings.length === 0)
123
- return;
124
- console.log(`\n\x1b[33mWarnings (${warnings.length}):\x1b[0m`);
125
- for (const w of warnings) {
126
- console.log(` \x1b[33m! ${w}\x1b[0m`);
127
- }
128
- }
129
- /**
130
- * Auto-rename agent .yaml and .md files when agents have been renamed (matched by ID).
131
- * Compares local agent names against remote agent names via pull,
132
- * then renames old-slug.yaml → new-slug.yaml and old-slug.md → new-slug.md.
133
- * Handles slug swaps via temp files.
134
- * Also updates explicit `instructions` paths in the hub YAML to match.
135
- */
136
- export async function autoRenameAgentFiles(client, hubId, hubFolder, organizationId) {
137
- // Collect agents with IDs from per-agent YAML files or main YAML
138
- const agentsDir = path.join(hubFolder, 'agents');
139
- let agentsWithIds = [];
140
- // Try per-agent YAML files first
141
- if (fs.existsSync(agentsDir)) {
142
- const yamlFiles = fs.readdirSync(agentsDir).filter((f) => f.endsWith('.yaml'));
143
- for (const file of yamlFiles) {
144
- try {
145
- const content = fs.readFileSync(path.join(agentsDir, file), 'utf-8');
146
- const agent = yaml.load(content);
147
- if (agent?.id && agent.name) {
148
- agentsWithIds.push({ id: agent.id, name: agent.name });
149
- }
150
- }
151
- catch {
152
- console.warn(` Warning: could not parse agents/${file}, skipping`);
153
- }
154
- }
155
- }
156
- // Fall back to inline agents from main YAML
157
- if (agentsWithIds.length === 0) {
158
- const yamlPath = resolveHubYamlPath(hubFolder);
159
- if (!yamlPath)
160
- return;
161
- const yamlContent = fs.readFileSync(yamlPath, 'utf-8');
162
- const config = yaml.load(yamlContent);
163
- agentsWithIds = (config.agents || []).filter((a) => !!a.id && !!a.name);
164
- }
165
- if (agentsWithIds.length === 0)
166
- return;
167
- // Fetch remote state to detect renames (extra round-trip, only when agents have IDs)
168
- console.log('Checking for agent renames...');
169
- let remote;
170
- try {
171
- remote = await client.pull(hubId, organizationId);
172
- }
173
- catch (err) {
174
- console.warn(` Warning: could not fetch remote state for auto-rename (${err instanceof Error ? err.message : String(err)}). File renames skipped.`);
175
- return;
176
- }
177
- // Build remote agent id → name map
178
- const remoteAgentNames = new Map();
179
- for (const agent of remote.agents || []) {
180
- if (agent.id) {
181
- remoteAgentNames.set(agent.id, agent.name);
182
- }
183
- }
184
- // Collect renames needed (old slug → new slug)
185
- const renames = [];
186
- for (const agent of agentsWithIds) {
187
- const remoteName = remoteAgentNames.get(agent.id);
188
- if (!remoteName || remoteName === agent.name)
189
- continue;
190
- const oldSlug = slugify(remoteName);
191
- const newSlug = slugify(agent.name);
192
- if (oldSlug !== newSlug) {
193
- renames.push({ oldSlug, newSlug });
194
- }
195
- }
196
- if (renames.length === 0)
197
- return;
198
- if (!fs.existsSync(agentsDir))
199
- return;
200
- // Clean up orphaned temp files from a previous interrupted rename
201
- for (const file of fs.readdirSync(agentsDir)) {
202
- if (file.startsWith('__rename_temp_') && (file.endsWith('.md') || file.endsWith('.yaml'))) {
203
- console.warn(` Warning: removing orphaned temp file agents/${file}`);
204
- fs.unlinkSync(path.join(agentsDir, file));
205
- }
206
- }
207
- // Helper to rename a file if it exists (for both .yaml and .md extensions)
208
- const renameFileIfExists = (dir, oldName, newName) => {
209
- const oldPath = path.join(dir, oldName);
210
- const newPath = path.join(dir, newName);
211
- if (!fs.existsSync(oldPath))
212
- return false;
213
- fs.renameSync(oldPath, newPath);
214
- return true;
215
- };
216
- // Detect slug swaps: if newSlug matches another rename's oldSlug
217
- const oldSlugs = new Set(renames.map((r) => r.oldSlug));
218
- const newSlugs = new Set(renames.map((r) => r.newSlug));
219
- const hasConflicts = renames.some((r) => oldSlugs.has(r.newSlug)) || newSlugs.size !== renames.length;
220
- // Track which renames actually completed (file existed and was moved)
221
- const completedRenames = [];
222
- const extensions = ['.yaml', '.md'];
223
- if (hasConflicts) {
224
- // Rename through temp files to avoid collisions
225
- const tempRenames = [];
226
- for (const { oldSlug, newSlug } of renames) {
227
- const tempName = `__rename_temp_${oldSlug}_${Date.now()}`;
228
- tempRenames.push({ oldSlug, tempName, newSlug });
229
- }
230
- // Step 1: old → temp (both extensions)
231
- for (const { oldSlug, tempName } of tempRenames) {
232
- for (const ext of extensions) {
233
- renameFileIfExists(agentsDir, `${oldSlug}${ext}`, `${tempName}${ext}`);
234
- }
235
- }
236
- // Step 2: temp → new (both extensions)
237
- for (const { oldSlug, tempName, newSlug } of tempRenames) {
238
- let anyRenamed = false;
239
- for (const ext of extensions) {
240
- if (renameFileIfExists(agentsDir, `${tempName}${ext}`, `${newSlug}${ext}`)) {
241
- anyRenamed = true;
242
- }
243
- }
244
- if (anyRenamed) {
245
- completedRenames.push({ oldSlug, newSlug });
246
- console.log(` Renamed agents/${oldSlug}.* → agents/${newSlug}.*`);
247
- }
248
- }
249
- }
250
- else {
251
- // No conflicts — direct renames
252
- for (const { oldSlug, newSlug } of renames) {
253
- // Check if any file with old slug exists
254
- const hasOldFile = extensions.some((ext) => fs.existsSync(path.join(agentsDir, `${oldSlug}${ext}`)));
255
- if (!hasOldFile)
256
- continue;
257
- // Check for target conflicts
258
- const hasNewFile = extensions.some((ext) => fs.existsSync(path.join(agentsDir, `${newSlug}${ext}`)));
259
- if (hasNewFile) {
260
- console.warn(` Warning: skipping rename agents/${oldSlug}.* → agents/${newSlug}.* (target already exists)`);
261
- continue;
262
- }
263
- for (const ext of extensions) {
264
- renameFileIfExists(agentsDir, `${oldSlug}${ext}`, `${newSlug}${ext}`);
265
- }
266
- completedRenames.push({ oldSlug, newSlug });
267
- console.log(` Renamed agents/${oldSlug}.* → agents/${newSlug}.*`);
268
- }
269
- }
270
- if (completedRenames.length === 0)
271
- return;
272
- // Update explicit instructions paths in hub YAML for completed renames only.
273
- const mainYamlPath = resolveHubYamlPath(hubFolder);
274
- if (mainYamlPath) {
275
- const mainYamlContent = fs.readFileSync(mainYamlPath, 'utf-8');
276
- const substitutionMap = new Map();
277
- for (const { oldSlug, newSlug } of completedRenames) {
278
- substitutionMap.set(`agents/${oldSlug}.md`, `agents/${newSlug}.md`);
279
- }
280
- const escapedKeys = Array.from(substitutionMap.keys())
281
- .map((k) => k.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'));
282
- const updatedYaml = mainYamlContent.replace(new RegExp(`(instructions:\\s+)(${escapedKeys.join('|')})`, 'g'), (_match, prefix, pathMatch) => `${prefix}${substitutionMap.get(pathMatch) ?? pathMatch}`);
283
- if (updatedYaml !== mainYamlContent) {
284
- fs.writeFileSync(mainYamlPath, updatedYaml, 'utf-8');
285
- console.log(` Updated instructions paths in ${path.basename(mainYamlPath)}`);
286
- }
287
- }
288
- }
289
- /** Pull remote config after push, sync local files, and rename hub folder if needed. */
290
- async function syncAfterPush(client, hubId, hubFolder, organizationId) {
291
- try {
292
- const remoteConfig = await client.pull(hubId, organizationId);
293
- writeHubFolder(hubFolder, remoteConfig);
294
- await downloadBinaryResourceFiles(hubFolder, remoteConfig);
295
- console.log('Local files synced with server.');
296
- const finalFolder = autoRenameHubFolder(hubFolder, remoteConfig.hub.name, remoteConfig.hub_environment, hubId, remoteConfig.preview_label, remoteConfig.branch_name);
297
- if (finalFolder !== hubFolder) {
298
- console.log(`Hub folder is now ${finalFolder}`);
299
- }
300
- }
301
- catch (err) {
302
- console.warn(`Warning: could not sync local files after push (${err instanceof Error ? err.message : String(err)})`);
303
- }
304
- }
305
- async function pushSingleHub(client, hubId, hubFolder, autoConfirm, organizationId, opts) {
306
- if (!opts?.skipAgentRename) {
307
- // Auto-rename agent .md files if agents were renamed (before parsing)
308
- await autoRenameAgentFiles(client, hubId, hubFolder, organizationId);
309
- }
310
- console.log('Parsing local configuration...');
311
- const localConfig = parseHubFolder(hubFolder);
312
- console.log('Computing diff...');
313
- const diffResult = await client.diff(hubId, localConfig, 'push', organizationId);
314
- // Render diff-time warnings (e.g. native/delegation tools dropped due to
315
- // missing connections) before any short-circuit. Without this, a push where
316
- // every change was silently dropped would just say "No changes to push". See
317
- // gh #1538.
318
- printWarnings(diffResult.warnings);
319
- if (!diffResult.has_changes) {
320
- // Still rename folder if hub name changed (content matches but folder slug is stale)
321
- const finalFolder = autoRenameHubFolder(hubFolder, localConfig.hub.name, localConfig.hub_environment, hubId, localConfig.preview_label, localConfig.branch_name);
322
- if (finalFolder === hubFolder) {
323
- console.log('No changes to push.');
324
- }
325
- else {
326
- console.log('No changes to push; folder renamed.');
327
- }
328
- autoLockIfUnlocked(hubId);
329
- return true;
330
- }
331
- console.log('\nChanges to push:');
332
- printDiff(diffResult.summary);
333
- if (!autoConfirm) {
334
- const ok = await confirm('Push these changes?');
335
- if (!ok) {
336
- console.log('Cancelled.');
337
- return false;
338
- }
339
- }
340
- console.log('Pushing changes...');
341
- const result = await client.push(hubId, localConfig, organizationId);
342
- printSyncResult(result);
343
- await syncAfterPush(client, hubId, hubFolder, organizationId);
344
- autoLockIfUnlocked(hubId);
345
- return true;
346
- }
347
- function resolveWorkspaceDir() {
348
- const workspace = detectWorkspace();
349
- if (workspace)
350
- return workspace.workspaceDir;
351
- const gitRoot = findGitRoot();
352
- if (!gitRoot) {
353
- console.error('Not inside a git repository.');
354
- process.exit(1);
355
- }
356
- return resolveLayout(gitRoot).hubsDir;
357
- }
358
- function selectExistingHub(workspaceDir, allHubs, selector, wsLabel) {
359
- if (selector) {
360
- const match = allHubs.find((h) => h.hubId === selector || path.basename(h.hubFolder) === selector);
361
- if (!match) {
362
- console.error(`No hub matching --hub ${selector} found in ${wsLabel}/.`);
363
- process.exit(1);
364
- }
365
- return match;
366
- }
367
- const enclosing = findEnclosingHubFolder(workspaceDir);
368
- if (enclosing)
369
- return enclosing;
370
- if (allHubs.length === 1)
371
- return allHubs[0];
372
- return null;
373
- }
374
- function selectNewHub(newHubs, selector) {
375
- if (selector) {
376
- const match = newHubs.find((h) => path.basename(h.hubFolder) === selector);
377
- if (!match)
378
- return null;
379
- return match;
380
- }
381
- // Try cwd
382
- const cwd = process.cwd();
383
- const cwdMatch = newHubs.find((h) => path.resolve(h.hubFolder) === path.resolve(cwd));
384
- if (cwdMatch)
385
- return cwdMatch;
386
- if (newHubs.length === 1)
387
- return newHubs[0];
388
- return null;
389
- }
390
- export async function pushCommand(args) {
391
- const { autoConfirm, hubSelector } = parseArgs(args);
392
- const repoConfig = requireRepoConfig();
393
- const { organization_id: organizationId } = repoConfig;
394
- const { config, accessToken } = await requireAuth();
395
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
396
- const workspaceDir = resolveWorkspaceDir();
397
- const gitRoot = findGitRoot();
398
- const wsLabel = hubsDirLabel(gitRoot);
399
- if (gitRoot)
400
- warnLayoutOnce(gitRoot);
401
- if (!fs.existsSync(workspaceDir)) {
402
- console.error(`No ${wsLabel}/ directory found. Run \`wayai pull\` first or create hub files in ${wsLabel}/<hub>/hub.yaml.`);
403
- process.exit(1);
404
- }
405
- // Scan once and reuse — both existing- and new-hub flows share these arrays
406
- const existingHubs = scanWorkspaceHubs(workspaceDir);
407
- const newHubs = scanNewHubs(workspaceDir);
408
- // Existing hub flow first — prefer hubs that already have hub_id
409
- const existing = selectExistingHub(workspaceDir, existingHubs, hubSelector, wsLabel);
410
- if (existing) {
411
- assertHubMatchesLock(existing.hubId, path.basename(existing.hubFolder));
412
- await pushSingleHub(client, existing.hubId, existing.hubFolder, autoConfirm, organizationId);
413
- return;
414
- }
415
- // No existing hub matched — try the new-hub flow
416
- const newHub = selectNewHub(newHubs, hubSelector);
417
- if (!newHub) {
418
- if (existingHubs.length === 0 && newHubs.length === 0) {
419
- console.error(`No hub folders found. Create hub files in ${wsLabel}/<hub>/hub.yaml with \`hub: { name: ... }\` and run \`wayai push\`.`);
420
- process.exit(1);
421
- }
422
- console.error(`Multiple hub folders found in ${wsLabel}/. Pass --hub <uuid|folder-name> to choose, or run from inside a hub folder:`);
423
- for (const h of existingHubs) {
424
- console.error(` ${path.basename(h.hubFolder)} (${h.hubId})`);
425
- }
426
- for (const h of newHubs) {
427
- console.error(` ${path.basename(h.hubFolder)} (new — "${h.hubName}")`);
428
- }
429
- process.exit(1);
430
- }
431
- assertNoLockBlocksHubCreation(newHub.hubName);
432
- const hubType = newHub.hubType || 'chat';
433
- console.log(`\nNew hub detected: "${newHub.hubName}" (${hubType})`);
434
- if (!autoConfirm) {
435
- const ok = await confirm('Create this hub on the platform?');
436
- if (!ok) {
437
- console.log('Cancelled.');
438
- return;
439
- }
440
- }
441
- const hubYamlPath = resolveHubYamlPath(newHub.hubFolder);
442
- if (!hubYamlPath) {
443
- console.error(`hub.yaml not found in ${newHub.hubFolder}. Cannot proceed with hub creation.`);
444
- process.exit(1);
445
- }
446
- console.log('Creating hub...');
447
- const createResult = await client.createHub(organizationId, newHub.hubName, hubType);
448
- const createdHub = createResult.data[0];
449
- const hubId = createdHub.hub_id;
450
- if (!UUID_RE.test(hubId)) {
451
- console.error(`Invalid hub_id received from server: ${hubId}`);
452
- process.exit(1);
453
- }
454
- console.log(`Hub created: ${createdHub.hub_name} (${hubId})`);
455
- // Update hub.yaml with hub_id and hub_environment
456
- const content = fs.readFileSync(hubYamlPath, 'utf-8');
457
- const hasVersion = content.match(/^version:\s/m);
458
- let updated;
459
- if (hasVersion) {
460
- updated = content.replace(/^(version:\s.*\n)/m, `$1hub_id: "${hubId}"\nhub_environment: preview\n`);
461
- }
462
- else {
463
- updated = `version: 1\nhub_id: "${hubId}"\nhub_environment: preview\n${content}`;
464
- }
465
- fs.writeFileSync(hubYamlPath, updated, 'utf-8');
466
- // Auto-lock only after hub.yaml is persisted, so a write failure can't
467
- // leave a lock pointing at a hub with no local files.
468
- autoLockIfUnlocked(hubId);
469
- // Push the new hub (skip autoRenameAgentFiles — no remote agents exist)
470
- await pushSingleHub(client, hubId, newHub.hubFolder, autoConfirm, organizationId, { skipAgentRename: true });
471
- }
472
- //# sourceMappingURL=push.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"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"}
@@ -1,18 +0,0 @@
1
- /**
2
- * wayai report create — submit a platform bug report to the triage queue.
3
- *
4
- * Usage:
5
- * wayai report create --title "Title" --description "Description"
6
- * wayai report create -t "Title" -d "Description" --hub <uuid> --error "Error msg"
7
- *
8
- * Auto-captures hub/org context from .wayai.yaml if present.
9
- *
10
- * The report lands in the platform_report queue (status=pending). A Claude
11
- * Code Desktop routine triages on a 15-min cadence: groups by root cause,
12
- * dismisses noise, escalates actionable clusters by opening one GitHub issue
13
- * per group. You'll receive a follow-up email on escalation, on resolution
14
- * (fix shipped), or on dismissal (polite-no with the reason). If your report
15
- * is silently grouped as a duplicate of another, you won't get a separate
16
- * email — you'll only hear from us when the underlying issue is resolved.
17
- */
18
- export declare function reportCreateCommand(args: string[]): Promise<void>;
@@ -1,143 +0,0 @@
1
- /**
2
- * wayai report create — submit a platform bug report to the triage queue.
3
- *
4
- * Usage:
5
- * wayai report create --title "Title" --description "Description"
6
- * wayai report create -t "Title" -d "Description" --hub <uuid> --error "Error msg"
7
- *
8
- * Auto-captures hub/org context from .wayai.yaml if present.
9
- *
10
- * The report lands in the platform_report queue (status=pending). A Claude
11
- * Code Desktop routine triages on a 15-min cadence: groups by root cause,
12
- * dismisses noise, escalates actionable clusters by opening one GitHub issue
13
- * per group. You'll receive a follow-up email on escalation, on resolution
14
- * (fix shipped), or on dismissal (polite-no with the reason). If your report
15
- * is silently grouped as a duplicate of another, you won't get a separate
16
- * email — you'll only hear from us when the underlying issue is resolved.
17
- */
18
- import { readFileSync } from 'node:fs';
19
- import { dirname, join } from 'node:path';
20
- import { fileURLToPath } from 'node:url';
21
- import { requireAuth } from '../lib/auth.js';
22
- import { readRepoConfig } from '../lib/repo-config.js';
23
- import { ApiClient, ApiError } from '../lib/api-client.js';
24
- const __dirname = dirname(fileURLToPath(import.meta.url));
25
- function getCliVersion() {
26
- try {
27
- const pkg = JSON.parse(readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf-8'));
28
- return `cli@${pkg.version}`;
29
- }
30
- catch {
31
- return 'cli@unknown';
32
- }
33
- }
34
- export async function reportCreateCommand(args) {
35
- // Parse args
36
- let title;
37
- let description;
38
- let source;
39
- let classification;
40
- let dedupKey;
41
- let hubId;
42
- let conversationId;
43
- let errorMessage;
44
- let steps;
45
- let context;
46
- for (let i = 0; i < args.length; i++) {
47
- const arg = args[i];
48
- if (arg === '--title' || arg === '-t') {
49
- title = args[++i];
50
- }
51
- else if (arg === '--description' || arg === '-d') {
52
- description = args[++i];
53
- }
54
- else if (arg === '--source') {
55
- source = args[++i];
56
- }
57
- else if (arg === '--classification') {
58
- classification = args[++i];
59
- }
60
- else if (arg === '--dedup-key') {
61
- dedupKey = args[++i];
62
- }
63
- else if (arg === '--hub') {
64
- hubId = args[++i];
65
- }
66
- else if (arg === '--conversation') {
67
- conversationId = args[++i];
68
- }
69
- else if (arg === '--error' || arg === '-e') {
70
- errorMessage = args[++i];
71
- }
72
- else if (arg === '--steps' || arg === '-s') {
73
- steps = args[++i];
74
- }
75
- else if (arg === '--context') {
76
- context = args[++i];
77
- }
78
- }
79
- if (!title || !description) {
80
- console.error('Usage: wayai report create --title "Title" --description "Description"');
81
- console.error('');
82
- console.error('Required:');
83
- console.error(' -t, --title <text> Bug title');
84
- console.error(' -d, --description <text> Detailed description');
85
- console.error('');
86
- console.error('Optional:');
87
- console.error(' --source <value> Origin: cli (default) | review | security_audit');
88
- console.error(' --classification <value> Nature: bug (default) | flaky_test | security');
89
- console.error(' --dedup-key <text> Stable dedup key (e.g. "<file>::<test>")');
90
- console.error(' --hub <uuid> Hub ID (optional context for the bug report)');
91
- console.error(' --conversation <uuid> Conversation ID');
92
- console.error(' -e, --error <text> Error message or stack trace');
93
- console.error(' -s, --steps <text> Steps to reproduce');
94
- console.error(' --context <text> Additional context');
95
- process.exit(1);
96
- }
97
- const { config, accessToken } = await requireAuth();
98
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
99
- // Auto-capture from .wayai.yaml (optional — don't fail if missing)
100
- const repoConfig = readRepoConfig();
101
- const organizationId = repoConfig?.organization_id;
102
- try {
103
- const result = await client.submitReport({
104
- title,
105
- description,
106
- source,
107
- classification,
108
- dedup_key: dedupKey,
109
- organization_id: organizationId,
110
- hub_id: hubId,
111
- conversation_id: conversationId,
112
- error_message: errorMessage,
113
- steps_to_reproduce: steps,
114
- additional_context: context,
115
- client_version: getCliVersion(),
116
- });
117
- if (result.created) {
118
- console.log(`Report submitted: ${result.report_id}`);
119
- }
120
- else {
121
- console.log(`Report merged with existing: ${result.report_id}`);
122
- }
123
- console.log('A WayAI engineer (or one of our AI agents) will triage your report.');
124
- console.log('You\'ll get an email on escalation, resolution, or dismissal — if your');
125
- console.log('report is silently grouped as a duplicate, you won\'t get a separate email.');
126
- }
127
- catch (err) {
128
- if (err instanceof ApiError) {
129
- if (err.status === 429) {
130
- console.error('Rate limit exceeded. Please try again later.');
131
- }
132
- else if (err.status === 503) {
133
- console.error('Report submission is not currently available.');
134
- }
135
- else {
136
- console.error(`Failed to submit report: ${err.message}`);
137
- }
138
- process.exit(1);
139
- }
140
- throw err;
141
- }
142
- }
143
- //# sourceMappingURL=report-create.js.map