gooseworks 0.1.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 (70) hide show
  1. package/README.md +180 -0
  2. package/dist/agents/claude.d.ts +4 -0
  3. package/dist/agents/claude.d.ts.map +1 -0
  4. package/dist/agents/claude.js +112 -0
  5. package/dist/agents/claude.js.map +1 -0
  6. package/dist/agents/cursor.d.ts +3 -0
  7. package/dist/agents/cursor.d.ts.map +1 -0
  8. package/dist/agents/cursor.js +95 -0
  9. package/dist/agents/cursor.js.map +1 -0
  10. package/dist/agents/detect.d.ts +9 -0
  11. package/dist/agents/detect.d.ts.map +1 -0
  12. package/dist/agents/detect.js +76 -0
  13. package/dist/agents/detect.js.map +1 -0
  14. package/dist/auth/credentials.d.ts +12 -0
  15. package/dist/auth/credentials.d.ts.map +1 -0
  16. package/dist/auth/credentials.js +87 -0
  17. package/dist/auth/credentials.js.map +1 -0
  18. package/dist/auth/oauth-server.d.ts +8 -0
  19. package/dist/auth/oauth-server.d.ts.map +1 -0
  20. package/dist/auth/oauth-server.js +132 -0
  21. package/dist/auth/oauth-server.js.map +1 -0
  22. package/dist/commands/credits.d.ts +3 -0
  23. package/dist/commands/credits.d.ts.map +1 -0
  24. package/dist/commands/credits.js +91 -0
  25. package/dist/commands/credits.js.map +1 -0
  26. package/dist/commands/install.d.ts +3 -0
  27. package/dist/commands/install.d.ts.map +1 -0
  28. package/dist/commands/install.js +104 -0
  29. package/dist/commands/install.js.map +1 -0
  30. package/dist/commands/login.d.ts +8 -0
  31. package/dist/commands/login.d.ts.map +1 -0
  32. package/dist/commands/login.js +79 -0
  33. package/dist/commands/login.js.map +1 -0
  34. package/dist/commands/logout.d.ts +3 -0
  35. package/dist/commands/logout.d.ts.map +1 -0
  36. package/dist/commands/logout.js +51 -0
  37. package/dist/commands/logout.js.map +1 -0
  38. package/dist/commands/search.d.ts +3 -0
  39. package/dist/commands/search.d.ts.map +1 -0
  40. package/dist/commands/search.js +122 -0
  41. package/dist/commands/search.js.map +1 -0
  42. package/dist/commands/update.d.ts +3 -0
  43. package/dist/commands/update.d.ts.map +1 -0
  44. package/dist/commands/update.js +64 -0
  45. package/dist/commands/update.js.map +1 -0
  46. package/dist/config.d.ts +10 -0
  47. package/dist/config.d.ts.map +1 -0
  48. package/dist/config.js +13 -0
  49. package/dist/config.js.map +1 -0
  50. package/dist/index.d.ts +3 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +23 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/skills/fetcher.d.ts +18 -0
  55. package/dist/skills/fetcher.d.ts.map +1 -0
  56. package/dist/skills/fetcher.js +118 -0
  57. package/dist/skills/fetcher.js.map +1 -0
  58. package/dist/skills/installer.d.ts +5 -0
  59. package/dist/skills/installer.d.ts.map +1 -0
  60. package/dist/skills/installer.js +72 -0
  61. package/dist/skills/installer.js.map +1 -0
  62. package/dist/skills/master-skill.d.ts +7 -0
  63. package/dist/skills/master-skill.d.ts.map +1 -0
  64. package/dist/skills/master-skill.js +84 -0
  65. package/dist/skills/master-skill.js.map +1 -0
  66. package/dist/utils/logger.d.ts +10 -0
  67. package/dist/utils/logger.d.ts.map +1 -0
  68. package/dist/utils/logger.js +44 -0
  69. package/dist/utils/logger.js.map +1 -0
  70. package/package.json +43 -0
@@ -0,0 +1,132 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.runOAuthFlow = runOAuthFlow;
40
+ const http = __importStar(require("http"));
41
+ const crypto = __importStar(require("crypto"));
42
+ const open_1 = __importDefault(require("open"));
43
+ const credentials_1 = require("./credentials");
44
+ const logger = __importStar(require("../utils/logger"));
45
+ const config_1 = require("../config");
46
+ const OAUTH_TIMEOUT_MS = 120_000;
47
+ async function runOAuthFlow(apiBase) {
48
+ const state = crypto.randomBytes(16).toString('hex');
49
+ const frontendBase = config_1.FRONTEND_URL;
50
+ return new Promise((resolve, reject) => {
51
+ // Track open sockets so we can force-destroy them on close
52
+ const sockets = new Set();
53
+ const server = http.createServer((req, res) => {
54
+ const url = new URL(req.url || '/', `http://127.0.0.1`);
55
+ if (url.pathname === '/callback') {
56
+ const token = url.searchParams.get('token');
57
+ const email = url.searchParams.get('email');
58
+ const agentId = url.searchParams.get('agent_id');
59
+ const returnedState = url.searchParams.get('state');
60
+ if (returnedState !== state) {
61
+ res.writeHead(400, { 'Content-Type': 'text/html' });
62
+ res.end('<html><body><h2>Authentication failed: invalid state</h2><p>You can close this window.</p></body></html>');
63
+ return;
64
+ }
65
+ if (!token || !email || !agentId) {
66
+ res.writeHead(400, { 'Content-Type': 'text/html' });
67
+ res.end('<html><body><h2>Authentication failed: missing parameters</h2><p>You can close this window.</p></body></html>');
68
+ return;
69
+ }
70
+ // Send response with Connection: close so browser doesn't keep-alive
71
+ res.writeHead(200, {
72
+ 'Content-Type': 'text/html',
73
+ 'Connection': 'close',
74
+ });
75
+ res.end('<html><body><h2>GooseWorks CLI authenticated!</h2><p>You can close this window and return to your terminal.</p></body></html>');
76
+ const creds = {
77
+ api_key: token,
78
+ email,
79
+ agent_id: agentId,
80
+ api_base: apiBase,
81
+ };
82
+ (0, credentials_1.saveCredentials)(creds);
83
+ clearTimeout(timeout);
84
+ process.removeListener('SIGINT', cleanup);
85
+ process.removeListener('SIGTERM', cleanup);
86
+ // Force-close all open sockets so the server actually shuts down
87
+ server.close(() => {
88
+ resolve({ api_key: token, email, agent_id: agentId });
89
+ });
90
+ for (const socket of sockets) {
91
+ socket.destroy();
92
+ }
93
+ }
94
+ else {
95
+ res.writeHead(404);
96
+ res.end('Not found');
97
+ }
98
+ });
99
+ // Track connections for forced shutdown
100
+ server.on('connection', (socket) => {
101
+ sockets.add(socket);
102
+ socket.once('close', () => sockets.delete(socket));
103
+ });
104
+ server.listen(0, '127.0.0.1', () => {
105
+ const addr = server.address();
106
+ if (!addr || typeof addr === 'string') {
107
+ reject(new Error('Failed to start OAuth server'));
108
+ return;
109
+ }
110
+ const port = addr.port;
111
+ const authUrl = `${frontendBase}/cli/auth?callback_port=${port}&state=${state}`;
112
+ logger.info('Opening browser for Google sign-in...');
113
+ (0, open_1.default)(authUrl).catch(() => {
114
+ logger.warn(`Could not open browser. Please visit:\n ${authUrl}`);
115
+ });
116
+ });
117
+ const timeout = setTimeout(() => {
118
+ cleanup();
119
+ reject(new Error('Authentication timed out after 120 seconds. Please try again.'));
120
+ }, OAUTH_TIMEOUT_MS);
121
+ const cleanup = () => {
122
+ clearTimeout(timeout);
123
+ server.close();
124
+ for (const socket of sockets) {
125
+ socket.destroy();
126
+ }
127
+ };
128
+ process.once('SIGINT', cleanup);
129
+ process.once('SIGTERM', cleanup);
130
+ });
131
+ }
132
+ //# sourceMappingURL=oauth-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth-server.js","sourceRoot":"","sources":["../../src/auth/oauth-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const creditsCommand: Command;
3
+ //# sourceMappingURL=credits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.d.ts","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0CpC,eAAO,MAAM,cAAc,SAwBvB,CAAC"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.creditsCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const https = __importStar(require("https"));
39
+ const http = __importStar(require("http"));
40
+ const credentials_1 = require("../auth/credentials");
41
+ const logger = __importStar(require("../utils/logger"));
42
+ function fetchCredits(apiBase, apiKey) {
43
+ return new Promise((resolve, reject) => {
44
+ const url = new URL(`${apiBase}/v1/credits`);
45
+ const client = url.protocol === 'https:' ? https : http;
46
+ const req = client.get(url.toString(), {
47
+ headers: {
48
+ 'Authorization': `Bearer ${apiKey}`,
49
+ 'Accept': 'application/json',
50
+ },
51
+ }, (res) => {
52
+ const chunks = [];
53
+ res.on('data', (chunk) => chunks.push(chunk));
54
+ res.on('end', () => {
55
+ try {
56
+ const body = JSON.parse(Buffer.concat(chunks).toString('utf-8'));
57
+ resolve(body);
58
+ }
59
+ catch {
60
+ reject(new Error('Invalid response from server'));
61
+ }
62
+ });
63
+ res.on('error', reject);
64
+ });
65
+ req.on('error', reject);
66
+ });
67
+ }
68
+ exports.creditsCommand = new commander_1.Command('credits')
69
+ .description('Check your GooseWorks credit balance')
70
+ .action(async () => {
71
+ const creds = (0, credentials_1.getCredentials)();
72
+ if (!creds) {
73
+ logger.error('Not logged in. Run "gooseworks login" first.');
74
+ process.exit(1);
75
+ }
76
+ try {
77
+ const response = await fetchCredits(creds.api_base, creds.api_key);
78
+ if (response.status === 'error') {
79
+ logger.error('Failed to fetch credits');
80
+ process.exit(1);
81
+ }
82
+ const { available, subscription, purchased } = response.data;
83
+ logger.success(`Credits: ${available.toLocaleString()} available (${subscription.toLocaleString()} subscription + ${purchased.toLocaleString()} purchased)`);
84
+ }
85
+ catch (err) {
86
+ const message = err instanceof Error ? err.message : 'Failed to fetch credits';
87
+ logger.error(message);
88
+ process.exit(1);
89
+ }
90
+ });
91
+ //# sourceMappingURL=credits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credits.js","sourceRoot":"","sources":["../../src/commands/credits.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const installCommand: Command;
3
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,cAAc,SAkDvB,CAAC"}
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.installCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const login_1 = require("./login");
39
+ const installer_1 = require("../skills/installer");
40
+ const claude_1 = require("../agents/claude");
41
+ const cursor_1 = require("../agents/cursor");
42
+ const detect_1 = require("../agents/detect");
43
+ const logger = __importStar(require("../utils/logger"));
44
+ const master_skill_1 = require("../skills/master-skill");
45
+ const config_1 = require("../config");
46
+ exports.installCommand = new commander_1.Command('install')
47
+ .description('Install GooseWorks data tools into your coding agent')
48
+ .option('--claude', 'Configure for Claude Code')
49
+ .option('--cursor', 'Configure for Cursor')
50
+ .option('--all', 'Configure for all detected agents')
51
+ .option('--api-base <url>', 'API base URL', config_1.API_BASE)
52
+ .action(async (opts) => {
53
+ logger.banner('0.1.0');
54
+ // Determine which agents to configure
55
+ const targetAgents = resolveTargetAgents(opts);
56
+ if (targetAgents.length === 0) {
57
+ logger.error('No agent specified. Use --claude, --cursor, or --all');
58
+ process.exit(1);
59
+ }
60
+ // Step 1: Authenticate
61
+ logger.step(1, 3, 'Authenticating...');
62
+ const creds = await (0, login_1.ensureLoggedIn)(opts.apiBase);
63
+ logger.success(`Logged in as ${creds.email}`);
64
+ // Step 2: Install master skill (clean old skills first)
65
+ logger.step(2, 3, 'Installing GooseWorks skill...');
66
+ (0, installer_1.removeAllSkills)();
67
+ const masterContent = (0, master_skill_1.getMasterSkillContent)(creds.api_base);
68
+ (0, installer_1.installMasterSkill)(masterContent);
69
+ logger.success('Installed GooseWorks skill to ~/.agents/skills/gooseworks-master/');
70
+ // Step 3: Configure agents
71
+ logger.step(3, 3, 'Configuring agents...');
72
+ for (const agent of targetAgents) {
73
+ if (agent === 'claude') {
74
+ logger.info('Creating symlinks in ~/.claude/skills/');
75
+ (0, claude_1.configureClaude)();
76
+ logger.success('Claude Code configured');
77
+ }
78
+ if (agent === 'cursor') {
79
+ logger.info('Writing MCP config for Cursor');
80
+ (0, cursor_1.configureCursor)();
81
+ logger.success('Cursor configured');
82
+ }
83
+ }
84
+ // Done
85
+ const agentNames = targetAgents.map((a) => a === 'claude' ? 'Claude Code' : 'Cursor').join(' and ');
86
+ logger.done(`Setup complete! Open ${agentNames} and say "find me leads" to get started.`);
87
+ });
88
+ function resolveTargetAgents(opts) {
89
+ if (opts.all) {
90
+ const detected = (0, detect_1.detectAgents)();
91
+ if (detected.length === 0) {
92
+ logger.warn('No coding agents detected. Installing skills only.');
93
+ return ['claude']; // Default to claude file layout
94
+ }
95
+ return detected.map((a) => a.type);
96
+ }
97
+ const targets = [];
98
+ if (opts.claude)
99
+ targets.push('claude');
100
+ if (opts.cursor)
101
+ targets.push('cursor');
102
+ return targets;
103
+ }
104
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { Command } from 'commander';
2
+ export declare const loginCommand: Command;
3
+ /**
4
+ * Ensures the user is logged in, running OAuth if needed.
5
+ * Returns credentials or exits the process.
6
+ */
7
+ export declare function ensureLoggedIn(apiBase?: string): Promise<import("../auth/credentials").Credentials>;
8
+ //# sourceMappingURL=login.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,YAAY,SAmBrB,CAAC;AAEL;;;GAGG;AACH,wBAAsB,cAAc,CAAC,OAAO,GAAE,MAAiB,sDAW9D"}
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.loginCommand = void 0;
37
+ exports.ensureLoggedIn = ensureLoggedIn;
38
+ const commander_1 = require("commander");
39
+ const credentials_1 = require("../auth/credentials");
40
+ const oauth_server_1 = require("../auth/oauth-server");
41
+ const logger = __importStar(require("../utils/logger"));
42
+ const config_1 = require("../config");
43
+ exports.loginCommand = new commander_1.Command('login')
44
+ .description('Sign in to GooseWorks with Google')
45
+ .option('--api-base <url>', 'API base URL', config_1.API_BASE)
46
+ .action(async (opts) => {
47
+ const existing = (0, credentials_1.getCredentials)();
48
+ if (existing) {
49
+ logger.success(`Already logged in as ${existing.email}`);
50
+ logger.info('Run "gooseworks logout" first to switch accounts.');
51
+ return;
52
+ }
53
+ try {
54
+ const result = await (0, oauth_server_1.runOAuthFlow)(opts.apiBase);
55
+ logger.success(`Logged in as ${result.email}`);
56
+ }
57
+ catch (err) {
58
+ const message = err instanceof Error ? err.message : 'Login failed';
59
+ logger.error(message);
60
+ process.exit(1);
61
+ }
62
+ });
63
+ /**
64
+ * Ensures the user is logged in, running OAuth if needed.
65
+ * Returns credentials or exits the process.
66
+ */
67
+ async function ensureLoggedIn(apiBase = config_1.API_BASE) {
68
+ const existing = (0, credentials_1.getCredentials)();
69
+ if (existing)
70
+ return existing;
71
+ const result = await (0, oauth_server_1.runOAuthFlow)(apiBase);
72
+ const creds = (0, credentials_1.getCredentials)();
73
+ if (!creds) {
74
+ logger.error('Failed to save credentials after login');
75
+ process.exit(1);
76
+ }
77
+ return creds;
78
+ }
79
+ //# sourceMappingURL=login.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,wCAWC;AA1CD,yCAAoC;AACpC,qDAAqD;AACrD,uDAAoD;AACpD,wDAA0C;AAC1C,sCAAqC;AAExB,QAAA,YAAY,GAAG,IAAI,mBAAO,CAAC,OAAO,CAAC;KAC7C,WAAW,CAAC,mCAAmC,CAAC;KAChD,MAAM,CAAC,kBAAkB,EAAE,cAAc,EAAE,iBAAQ,CAAC;KACpD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACrB,MAAM,QAAQ,GAAG,IAAA,4BAAc,GAAE,CAAC;IAClC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,CAAC,OAAO,CAAC,wBAAwB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QACzD,MAAM,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAY,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,gBAAgB,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACtB,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC;QACpE,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL;;;GAGG;AACI,KAAK,UAAU,cAAc,CAAC,UAAkB,iBAAQ;IAC7D,MAAM,QAAQ,GAAG,IAAA,4BAAc,GAAE,CAAC;IAClC,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,IAAA,2BAAY,EAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAA,4BAAc,GAAE,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const logoutCommand: Command;
3
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,aAAa,SAWtB,CAAC"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.logoutCommand = void 0;
37
+ const commander_1 = require("commander");
38
+ const credentials_1 = require("../auth/credentials");
39
+ const logger = __importStar(require("../utils/logger"));
40
+ exports.logoutCommand = new commander_1.Command('logout')
41
+ .description('Sign out and clear saved credentials')
42
+ .action(async () => {
43
+ const existing = (0, credentials_1.getCredentials)();
44
+ if (!existing) {
45
+ logger.info('Not currently logged in.');
46
+ return;
47
+ }
48
+ (0, credentials_1.clearCredentials)();
49
+ logger.success(`Logged out (was ${existing.email})`);
50
+ });
51
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAoC;AACpC,qDAAuE;AACvE,wDAA0C;AAE7B,QAAA,aAAa,GAAG,IAAI,mBAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAA,4BAAc,GAAE,CAAC;IAClC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO;IACT,CAAC;IAED,IAAA,8BAAgB,GAAE,CAAC;IACnB,MAAM,CAAC,OAAO,CAAC,mBAAmB,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;AACvD,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const searchCommand: Command;
3
+ //# sourceMappingURL=search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoDpC,eAAO,MAAM,aAAa,SAsDtB,CAAC"}