@wayai/cli 0.1.0 → 0.2.0

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 (44) hide show
  1. package/dist/commands/init.d.ts +7 -0
  2. package/dist/commands/init.js +88 -0
  3. package/dist/commands/init.js.map +1 -0
  4. package/dist/commands/login.d.ts +1 -0
  5. package/dist/commands/login.js +54 -13
  6. package/dist/commands/login.js.map +1 -1
  7. package/dist/commands/pull.d.ts +7 -1
  8. package/dist/commands/pull.js +134 -42
  9. package/dist/commands/pull.js.map +1 -1
  10. package/dist/commands/push.d.ts +6 -1
  11. package/dist/commands/push.js +248 -54
  12. package/dist/commands/push.js.map +1 -1
  13. package/dist/commands/status.d.ts +1 -1
  14. package/dist/commands/status.js +17 -8
  15. package/dist/commands/status.js.map +1 -1
  16. package/dist/index.d.ts +1 -0
  17. package/dist/index.js +24 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/lib/api-client.d.ts +3 -1
  20. package/dist/lib/api-client.js +9 -0
  21. package/dist/lib/api-client.js.map +1 -1
  22. package/dist/lib/auth.d.ts +13 -4
  23. package/dist/lib/auth.js +52 -12
  24. package/dist/lib/auth.js.map +1 -1
  25. package/dist/lib/config.d.ts +2 -0
  26. package/dist/lib/config.js.map +1 -1
  27. package/dist/lib/parser.js +13 -3
  28. package/dist/lib/parser.js.map +1 -1
  29. package/dist/lib/repo-config.d.ts +16 -0
  30. package/dist/lib/repo-config.js +49 -0
  31. package/dist/lib/repo-config.js.map +1 -0
  32. package/dist/lib/types.d.ts +13 -0
  33. package/dist/lib/utils.d.ts +4 -0
  34. package/dist/lib/utils.js +13 -0
  35. package/dist/lib/utils.js.map +1 -1
  36. package/dist/lib/workspace.d.ts +75 -0
  37. package/dist/lib/workspace.js +244 -0
  38. package/dist/lib/workspace.js.map +1 -0
  39. package/dist/lib/workspace.test.d.ts +5 -0
  40. package/dist/lib/workspace.test.js +329 -0
  41. package/dist/lib/workspace.test.js.map +1 -0
  42. package/dist/lib/yaml-writer.js +10 -6
  43. package/dist/lib/yaml-writer.js.map +1 -1
  44. package/package.json +1 -1
@@ -0,0 +1,7 @@
1
+ /**
2
+ * wayai init [org-name] — link this repo to a WayAI organization
3
+ *
4
+ * Creates .wayai.yaml at the git root with the selected organization.
5
+ * Also creates workspace/ directory if missing.
6
+ */
7
+ export declare function initCommand(args: string[]): Promise<void>;
@@ -0,0 +1,88 @@
1
+ /**
2
+ * wayai init [org-name] — link this repo to a WayAI organization
3
+ *
4
+ * Creates .wayai.yaml at the git root with the selected organization.
5
+ * Also creates workspace/ directory if missing.
6
+ */
7
+ import * as fs from 'node:fs';
8
+ import * as path from 'node:path';
9
+ import * as readline from 'node:readline';
10
+ import { requireAuth } from '../lib/auth.js';
11
+ import { ApiClient } from '../lib/api-client.js';
12
+ import { readRepoConfig, writeRepoConfig } from '../lib/repo-config.js';
13
+ import { findGitRoot } from '../lib/workspace.js';
14
+ function promptSelection(question, options) {
15
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
16
+ return new Promise((resolve) => {
17
+ console.log(question);
18
+ for (let i = 0; i < options.length; i++) {
19
+ console.log(` ${i + 1}. ${options[i]}`);
20
+ }
21
+ rl.question('Select [1]: ', (answer) => {
22
+ rl.close();
23
+ const num = parseInt(answer.trim(), 10);
24
+ if (isNaN(num) || num < 1 || num > options.length) {
25
+ resolve(0); // default to first
26
+ }
27
+ else {
28
+ resolve(num - 1);
29
+ }
30
+ });
31
+ });
32
+ }
33
+ export async function initCommand(args) {
34
+ const gitRoot = findGitRoot();
35
+ if (!gitRoot) {
36
+ console.error('Not inside a git repository. Run `git init` first.');
37
+ process.exit(1);
38
+ }
39
+ // Check for existing config
40
+ const existing = readRepoConfig(gitRoot);
41
+ if (existing) {
42
+ console.log(`Already initialized: organization "${existing.organization}"`);
43
+ console.log('To re-initialize, delete .wayai.yaml and run again.');
44
+ return;
45
+ }
46
+ const { config, accessToken } = await requireAuth();
47
+ const client = new ApiClient({ apiUrl: config.api_url, accessToken });
48
+ console.log('Fetching organizations...');
49
+ const { organizations } = await client.organizations();
50
+ if (organizations.length === 0) {
51
+ console.error('No organizations found. Create one at platform.wayai.pro first.');
52
+ process.exit(1);
53
+ }
54
+ let selectedOrg;
55
+ // If arg provided, match by name
56
+ const argName = args.find((a) => !a.startsWith('-'));
57
+ if (argName) {
58
+ const match = organizations.find((org) => org.name.toLowerCase() === argName.toLowerCase());
59
+ if (!match) {
60
+ console.error(`Organization "${argName}" not found. Available:`);
61
+ for (const org of organizations) {
62
+ console.error(` ${org.name}`);
63
+ }
64
+ process.exit(1);
65
+ }
66
+ selectedOrg = match;
67
+ }
68
+ else if (organizations.length === 1) {
69
+ selectedOrg = organizations[0];
70
+ console.log(`Using organization: ${selectedOrg.name}`);
71
+ }
72
+ else {
73
+ const idx = await promptSelection('Select an organization:', organizations.map((o) => o.name));
74
+ selectedOrg = organizations[idx];
75
+ }
76
+ // Write .wayai.yaml
77
+ const configPath = writeRepoConfig({ organization: selectedOrg.name }, gitRoot);
78
+ console.log(`Wrote ${configPath}`);
79
+ // Create workspace/ if missing
80
+ const workspaceDir = path.join(gitRoot, 'workspace');
81
+ if (!fs.existsSync(workspaceDir)) {
82
+ fs.mkdirSync(workspaceDir, { recursive: true });
83
+ console.log(`Created ${workspaceDir}/`);
84
+ }
85
+ console.log(`\nInitialized for organization: ${selectedOrg.name}`);
86
+ console.log('Run `wayai pull --all` to sync hub configurations.');
87
+ }
88
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,SAAS,eAAe,CAAC,QAAgB,EAAE,OAAiB;IAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QACD,EAAE,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,EAAE;YACrC,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;YACxC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;gBAClD,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB;YACjC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,sCAAsC,QAAQ,CAAC,YAAY,GAAG,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO;IACT,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAEtE,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;IACzC,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,EAAE,CAAC;IAEvD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,iEAAiE,CAAC,CAAC;QACjF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,WAAyC,CAAC;IAE9C,iCAAiC;IACjC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;IACrD,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,CAC9B,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAC1D,CAAC;QACF,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,KAAK,CAAC,iBAAiB,OAAO,yBAAyB,CAAC,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;gBAChC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,WAAW,GAAG,KAAK,CAAC;IACtB,CAAC;SAAM,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,uBAAuB,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,GAAG,MAAM,eAAe,CAC/B,yBAAyB,EACzB,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CACjC,CAAC;QACF,WAAW,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACnC,CAAC;IAED,oBAAoB;IACpB,MAAM,UAAU,GAAG,eAAe,CAAC,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC;IAChF,OAAO,CAAC,GAAG,CAAC,SAAS,UAAU,EAAE,CAAC,CAAC;IAEnC,+BAA+B;IAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,WAAW,YAAY,GAAG,CAAC,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC;AACpE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  /**
2
2
  * wayai login — OAuth browser flow (default) or --token fallback
3
3
  */
4
+ export declare function parseApiUrl(args: string[]): string;
4
5
  export declare function loginCommand(args: string[]): Promise<void>;
@@ -2,8 +2,8 @@
2
2
  * wayai login — OAuth browser flow (default) or --token fallback
3
3
  */
4
4
  import * as readline from 'node:readline';
5
- import { generatePKCE, findAvailablePort, startCallbackServer, exchangeCodeForTokens, exchangeMcpToken, fetchAuthConfig, } from '../lib/auth.js';
6
- import { writeConfig } from '../lib/config.js';
5
+ import { generatePKCE, findAvailablePort, isPortAvailable, startCallbackServer, registerOAuthClient, exchangeCodeForTokens, exchangeMcpToken, fetchAuthConfig, } from '../lib/auth.js';
6
+ import { readConfig, writeConfig } from '../lib/config.js';
7
7
  function prompt(question, defaultValue) {
8
8
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
9
9
  const display = defaultValue ? `${question} [${defaultValue}]: ` : `${question}: `;
@@ -14,17 +14,25 @@ function prompt(question, defaultValue) {
14
14
  });
15
15
  });
16
16
  }
17
+ const DEFAULT_API_URL = 'https://api.wayai.pro';
18
+ export function parseApiUrl(args) {
19
+ const idx = args.indexOf('--api-url');
20
+ if (idx !== -1 && args[idx + 1]) {
21
+ return args[idx + 1];
22
+ }
23
+ return DEFAULT_API_URL;
24
+ }
17
25
  export async function loginCommand(args) {
18
26
  const useToken = args.includes('--token');
27
+ const apiUrl = parseApiUrl(args);
19
28
  if (useToken) {
20
- await loginWithToken();
29
+ await loginWithToken(apiUrl);
21
30
  }
22
31
  else {
23
- await loginWithOAuth();
32
+ await loginWithOAuth(apiUrl);
24
33
  }
25
34
  }
26
- async function loginWithOAuth() {
27
- const apiUrl = await prompt('API URL', 'https://api.wayai.pro');
35
+ async function loginWithOAuth(apiUrl) {
28
36
  console.log('\nConnecting to WayAI...');
29
37
  let supabaseUrl;
30
38
  try {
@@ -37,9 +45,18 @@ async function loginWithOAuth() {
37
45
  }
38
46
  console.log('Starting OAuth login...');
39
47
  const { codeVerifier, codeChallenge } = generatePKCE();
40
- const port = await findAvailablePort();
41
- const redirectUri = `http://127.0.0.1:${port}/callback`;
42
- const authUrl = `${supabaseUrl}/auth/v1/authorize?provider=email&redirect_to=${encodeURIComponent(redirectUri)}&code_challenge=${codeChallenge}&code_challenge_method=S256`;
48
+ // Try to reuse the stored DCR client (same port same redirect_uri → same client_id)
49
+ const { clientId, redirectUri } = await resolveOAuthClient(supabaseUrl);
50
+ // Build OAuth 2.1 authorize URL (Supabase as authorization server)
51
+ const authParams = new URLSearchParams({
52
+ client_id: clientId,
53
+ response_type: 'code',
54
+ redirect_uri: redirectUri,
55
+ code_challenge: codeChallenge,
56
+ code_challenge_method: 'S256',
57
+ scope: 'openid email profile',
58
+ });
59
+ const authUrl = `${supabaseUrl}/auth/v1/oauth/authorize?${authParams.toString()}`;
43
60
  // Try to open browser
44
61
  const openBrowser = await tryOpenBrowser(authUrl);
45
62
  if (!openBrowser) {
@@ -49,13 +66,16 @@ async function loginWithOAuth() {
49
66
  console.log('Opening browser for login...');
50
67
  }
51
68
  try {
52
- const callbackPromise = startCallbackServer(port);
69
+ const callbackPort = parseInt(new URL(redirectUri).port, 10);
70
+ const callbackPromise = startCallbackServer(callbackPort);
53
71
  const { code } = await callbackPromise;
54
72
  console.log('Exchanging authorization code for tokens...');
55
- const { accessToken, refreshToken } = await exchangeCodeForTokens(supabaseUrl, code, codeVerifier);
73
+ const { accessToken, refreshToken } = await exchangeCodeForTokens(supabaseUrl, code, codeVerifier, clientId, redirectUri);
56
74
  writeConfig({
57
75
  api_url: apiUrl,
58
76
  supabase_url: supabaseUrl,
77
+ client_id: clientId,
78
+ redirect_uri: redirectUri,
59
79
  refresh_token: refreshToken,
60
80
  auth_method: 'oauth',
61
81
  });
@@ -68,8 +88,29 @@ async function loginWithOAuth() {
68
88
  process.exit(1);
69
89
  }
70
90
  }
71
- async function loginWithToken() {
72
- const apiUrl = await prompt('API URL', 'https://api.wayai.pro');
91
+ async function resolveOAuthClient(supabaseUrl) {
92
+ const existingConfig = readConfig();
93
+ if (existingConfig?.client_id &&
94
+ existingConfig?.redirect_uri &&
95
+ existingConfig?.supabase_url === supabaseUrl) {
96
+ const storedUrl = new URL(existingConfig.redirect_uri);
97
+ const storedPort = parseInt(storedUrl.port, 10);
98
+ if (storedPort && await isPortAvailable(storedPort)) {
99
+ return { clientId: existingConfig.client_id, redirectUri: existingConfig.redirect_uri };
100
+ }
101
+ }
102
+ const port = await findAvailablePort();
103
+ const redirectUri = `http://127.0.0.1:${port}/callback`;
104
+ try {
105
+ const clientId = await registerOAuthClient(supabaseUrl, redirectUri);
106
+ return { clientId, redirectUri };
107
+ }
108
+ catch (err) {
109
+ console.error(`Failed to register OAuth client: ${err instanceof Error ? err.message : String(err)}`);
110
+ process.exit(1);
111
+ }
112
+ }
113
+ async function loginWithToken(apiUrl) {
73
114
  const mcpToken = await prompt('MCP Token (way_...)');
74
115
  if (!mcpToken) {
75
116
  console.error('MCP token is required.');
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
1
  /**
2
- * wayai pull [hub-path] — fetch hub config from platform and write to local files
2
+ * wayai pull [hub-path] [--all] [--yes] — fetch hub config and write local files
3
+ *
4
+ * Modes:
5
+ * wayai pull project/hub — resolve workspace folder, pull that hub
6
+ * wayai pull --all — pull all hubs in workspace
7
+ * wayai pull — from hub folder: pull current hub
8
+ * wayai pull — from repo root: error with help
3
9
  */
4
10
  export declare function pullCommand(args: string[]): Promise<void>;
@@ -1,55 +1,43 @@
1
1
  /**
2
- * wayai pull [hub-path] — fetch hub config from platform and write to local files
2
+ * wayai pull [hub-path] [--all] [--yes] — fetch hub config and write local files
3
+ *
4
+ * Modes:
5
+ * wayai pull project/hub — resolve workspace folder, pull that hub
6
+ * wayai pull --all — pull all hubs in workspace
7
+ * wayai pull — from hub folder: pull current hub
8
+ * wayai pull — from repo root: error with help
3
9
  */
4
- import * as readline from 'node:readline';
5
10
  import { requireAuth } from '../lib/auth.js';
6
11
  import { ApiClient } from '../lib/api-client.js';
7
12
  import { writeHubFolder } from '../lib/yaml-writer.js';
8
13
  import { parseHubFolder } from '../lib/parser.js';
9
14
  import { printDiff } from '../lib/diff-display.js';
10
- import { detectHubFromCwd } from '../lib/utils.js';
11
- function confirm(question) {
12
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
13
- return new Promise((resolve) => {
14
- rl.question(`${question} [y/N]: `, (answer) => {
15
- rl.close();
16
- resolve(answer.trim().toLowerCase() === 'y');
17
- });
18
- });
19
- }
20
- export async function pullCommand(args) {
21
- const { config, accessToken } = await requireAuth();
22
- const client = new ApiClient({ apiUrl: config.api_url, accessToken });
23
- const hubPath = args[0];
24
- let hubId;
25
- let hubFolder;
26
- if (hubPath) {
27
- // Resolve hub-path (org/project/hub) → hub_id
28
- console.log(`Looking up ${hubPath}...`);
29
- const lookup = await client.lookup(hubPath);
30
- hubId = lookup.hub_id;
31
- hubFolder = process.cwd();
32
- console.log(`Found hub: ${lookup.hub_name} (${lookup.hub_environment}) in ${lookup.organization_name}/${lookup.project_name}`);
33
- }
34
- else {
35
- // Try to detect from wayai.yaml in cwd
36
- const detected = await detectHubFromCwd();
37
- if (!detected) {
38
- console.error('No hub path provided and no wayai.yaml found in current directory.');
39
- console.error('Usage: wayai pull <org/project/hub>');
40
- process.exit(1);
15
+ import { confirm, detectHubFromCwd } from '../lib/utils.js';
16
+ import { detectWorkspace, resolveHubFolder, scanWorkspaceHubs, resolveExplicitHubPath } from '../lib/workspace.js';
17
+ import { readRepoConfig } from '../lib/repo-config.js';
18
+ function parseArgs(args) {
19
+ let hubPath;
20
+ let all = false;
21
+ let autoConfirm = false;
22
+ for (const arg of args) {
23
+ if (arg === '--all') {
24
+ all = true;
25
+ }
26
+ else if (arg === '--yes' || arg === '-y') {
27
+ autoConfirm = true;
28
+ }
29
+ else if (!arg.startsWith('-')) {
30
+ hubPath = arg;
41
31
  }
42
- hubId = detected.hubId;
43
- hubFolder = detected.hubFolder;
44
- console.log(`Using hub from wayai.yaml: ${hubId}`);
45
32
  }
46
- // Fetch remote config
33
+ return { hubPath, all, autoConfirm };
34
+ }
35
+ async function pullSingleHub(client, hubId, hubFolder, autoConfirm) {
47
36
  console.log('Fetching hub configuration...');
48
37
  const payload = await client.pull(hubId);
49
38
  // If local files exist, show diff before overwriting
50
39
  try {
51
40
  const localPayload = parseHubFolder(hubFolder);
52
- // Use the diff endpoint to compare remote vs local
53
41
  const diffResult = await client.diff(hubId, localPayload, 'pull');
54
42
  if (!diffResult.has_changes) {
55
43
  console.log('No changes — local files are up to date.');
@@ -57,10 +45,12 @@ export async function pullCommand(args) {
57
45
  }
58
46
  console.log('\nChanges to apply locally:');
59
47
  printDiff(diffResult.summary);
60
- const ok = await confirm('Apply these changes?');
61
- if (!ok) {
62
- console.log('Cancelled.');
63
- return;
48
+ if (!autoConfirm) {
49
+ const ok = await confirm('Apply these changes?');
50
+ if (!ok) {
51
+ console.log('Cancelled.');
52
+ return;
53
+ }
64
54
  }
65
55
  }
66
56
  catch {
@@ -70,4 +60,106 @@ export async function pullCommand(args) {
70
60
  writeHubFolder(hubFolder, payload);
71
61
  console.log(`Hub configuration written to ${hubFolder}`);
72
62
  }
63
+ async function pullAllHubs(client, autoConfirm) {
64
+ const workspace = detectWorkspace();
65
+ if (!workspace) {
66
+ console.error('No workspace/ directory found. Run from a git repo with a workspace/ directory.');
67
+ process.exit(1);
68
+ }
69
+ const hubs = scanWorkspaceHubs(workspace.workspaceDir);
70
+ if (hubs.length === 0) {
71
+ console.log('No hubs found in workspace/.');
72
+ return;
73
+ }
74
+ console.log(`Found ${hubs.length} hub(s) in workspace:\n`);
75
+ for (const hub of hubs) {
76
+ console.log(` ${hub.hubFolder}`);
77
+ }
78
+ console.log();
79
+ if (!autoConfirm) {
80
+ const ok = await confirm(`Pull ${hubs.length} hub(s)?`);
81
+ if (!ok) {
82
+ console.log('Cancelled.');
83
+ return;
84
+ }
85
+ }
86
+ const errors = [];
87
+ for (const hub of hubs) {
88
+ console.log(`\n--- ${hub.hubFolder} ---`);
89
+ try {
90
+ await pullSingleHub(client, hub.hubId, hub.hubFolder, true);
91
+ }
92
+ catch (err) {
93
+ const msg = err instanceof Error ? err.message : String(err);
94
+ console.error(`Error: ${msg}`);
95
+ errors.push({ hubFolder: hub.hubFolder, error: msg });
96
+ }
97
+ }
98
+ if (errors.length > 0) {
99
+ console.error(`\n${errors.length} hub(s) failed:`);
100
+ for (const e of errors) {
101
+ console.error(` ${e.hubFolder}: ${e.error}`);
102
+ }
103
+ process.exit(1);
104
+ }
105
+ }
106
+ async function pullExplicitPath(client, hubPath, autoConfirm) {
107
+ const result = resolveExplicitHubPath(hubPath);
108
+ if ('resolved' in result) {
109
+ console.log(`Found hub locally: ${result.resolved.hubId} (${result.resolved.hubEnvironment})`);
110
+ await pullSingleHub(client, result.resolved.hubId, result.resolved.hubFolder, autoConfirm);
111
+ return;
112
+ }
113
+ // Fall back to API lookup (handles original names and remote-only hubs)
114
+ const { segments } = result;
115
+ let lookupPath;
116
+ if (segments.orgPrefix) {
117
+ lookupPath = hubPath;
118
+ }
119
+ else {
120
+ const repoConfig = readRepoConfig();
121
+ if (!repoConfig) {
122
+ console.error('Hub not found in workspace and 2-part path requires .wayai.yaml for API lookup.');
123
+ console.error('Run `wayai init` first, or use 3-part: org/project/hub');
124
+ process.exit(1);
125
+ }
126
+ lookupPath = `${repoConfig.organization}/${hubPath}`;
127
+ }
128
+ console.log(`Looking up ${hubPath}...`);
129
+ const lookup = await client.lookup(lookupPath);
130
+ console.log(`Found hub: ${lookup.hub_name} (${lookup.hub_environment}) in ${lookup.project_name}`);
131
+ const workspace = detectWorkspace();
132
+ const hubFolder = workspace
133
+ ? resolveHubFolder(workspace.workspaceDir, lookup.hub_id, lookup.project_name, lookup.hub_name, lookup.hub_environment, lookup.preview_label, lookup.branch_name)
134
+ : process.cwd();
135
+ await pullSingleHub(client, lookup.hub_id, hubFolder, autoConfirm);
136
+ }
137
+ export async function pullCommand(args) {
138
+ const { hubPath, all, autoConfirm } = parseArgs(args);
139
+ const { config, accessToken } = await requireAuth();
140
+ const client = new ApiClient({ apiUrl: config.api_url, accessToken });
141
+ // 1. Explicit hub path argument
142
+ if (hubPath) {
143
+ await pullExplicitPath(client, hubPath, autoConfirm);
144
+ return;
145
+ }
146
+ // 2. --all flag: pull all hubs in workspace
147
+ if (all) {
148
+ await pullAllHubs(client, autoConfirm);
149
+ return;
150
+ }
151
+ // 3. Current directory has wayai.yaml
152
+ const detected = await detectHubFromCwd();
153
+ if (detected) {
154
+ console.log(`Using hub from wayai.yaml: ${detected.hubId}`);
155
+ await pullSingleHub(client, detected.hubId, detected.hubFolder, autoConfirm);
156
+ return;
157
+ }
158
+ // 4. None of the above — error with help
159
+ console.error('No hub found. Provide a hub path, use --all, or run from a hub folder:');
160
+ console.error(' wayai pull <project/hub> Pull a specific hub');
161
+ console.error(' wayai pull --all Pull all hubs in workspace');
162
+ console.error(' wayai pull Pull current hub (from hub folder)');
163
+ process.exit(1);
164
+ }
73
165
  //# sourceMappingURL=pull.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,eAAe,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD,SAAS,OAAO,CAAC,QAAgB;IAC/B,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,EAAE,CAAC,QAAQ,CAAC,GAAG,QAAQ,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5C,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAc;IAC9C,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC;IAEtE,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,KAAa,CAAC;IAClB,IAAI,SAAiB,CAAC;IAEtB,IAAI,OAAO,EAAE,CAAC;QACZ,8CAA8C;QAC9C,OAAO,CAAC,GAAG,CAAC,cAAc,OAAO,KAAK,CAAC,CAAC;QACxC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5C,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QACtB,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,eAAe,QAAQ,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACjI,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,CAAC,KAAK,CAAC,oEAAoE,CAAC,CAAC;YACpF,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;QACvB,SAAS,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,sBAAsB;IACtB,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzC,qDAAqD;IACrD,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC;QAE/C,mDAAmD;QACnD,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,CAAC;QAElE,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YACxD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAE9B,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,sBAAsB,CAAC,CAAC;QACjD,IAAI,CAAC,EAAE,EAAE,CAAC;YACR,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC1B,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,4DAA4D;QAC5D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9C,CAAC;IAED,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAC;AAC3D,CAAC"}
1
+ {"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,9 @@
1
1
  /**
2
- * wayai push [hub-path] — parse local files, diff remote, sync to preview
2
+ * wayai push [hub-path] [--yes] — parse local files, diff remote, sync to preview
3
+ *
4
+ * Modes:
5
+ * wayai push project/hub — resolve workspace folder, push that hub
6
+ * wayai push — from hub folder: push current hub
7
+ * wayai push — from repo root: auto-detect changed hubs via git
3
8
  */
4
9
  export declare function pushCommand(args: string[]): Promise<void>;