guidemode 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 (105) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +85 -0
  3. package/dist/cjs/auth.d.ts +4 -0
  4. package/dist/cjs/auth.d.ts.map +1 -0
  5. package/dist/cjs/auth.js +191 -0
  6. package/dist/cjs/auth.js.map +1 -0
  7. package/dist/cjs/config.d.ts +24 -0
  8. package/dist/cjs/config.d.ts.map +1 -0
  9. package/dist/cjs/config.js +55 -0
  10. package/dist/cjs/config.js.map +1 -0
  11. package/dist/cjs/deploy.d.ts +18 -0
  12. package/dist/cjs/deploy.d.ts.map +1 -0
  13. package/dist/cjs/deploy.js +89 -0
  14. package/dist/cjs/deploy.js.map +1 -0
  15. package/dist/cjs/issue.d.ts +18 -0
  16. package/dist/cjs/issue.d.ts.map +1 -0
  17. package/dist/cjs/issue.js +79 -0
  18. package/dist/cjs/issue.js.map +1 -0
  19. package/dist/cjs/logs.d.ts +7 -0
  20. package/dist/cjs/logs.d.ts.map +1 -0
  21. package/dist/cjs/logs.js +75 -0
  22. package/dist/cjs/logs.js.map +1 -0
  23. package/dist/cjs/package.json +1 -0
  24. package/dist/cjs/setup.d.ts +8 -0
  25. package/dist/cjs/setup.d.ts.map +1 -0
  26. package/dist/cjs/setup.js +110 -0
  27. package/dist/cjs/setup.js.map +1 -0
  28. package/dist/cjs/status.d.ts +6 -0
  29. package/dist/cjs/status.d.ts.map +1 -0
  30. package/dist/cjs/status.js +171 -0
  31. package/dist/cjs/status.js.map +1 -0
  32. package/dist/cjs/sync.d.ts +8 -0
  33. package/dist/cjs/sync.d.ts.map +1 -0
  34. package/dist/cjs/sync.js +201 -0
  35. package/dist/cjs/sync.js.map +1 -0
  36. package/dist/cjs/utils/brand.d.ts +5 -0
  37. package/dist/cjs/utils/brand.d.ts.map +1 -0
  38. package/dist/cjs/utils/brand.js +8 -0
  39. package/dist/cjs/utils/brand.js.map +1 -0
  40. package/dist/cjs/utils/git.d.ts +11 -0
  41. package/dist/cjs/utils/git.d.ts.map +1 -0
  42. package/dist/cjs/utils/git.js +92 -0
  43. package/dist/cjs/utils/git.js.map +1 -0
  44. package/dist/cjs/utils/logger.d.ts +2 -0
  45. package/dist/cjs/utils/logger.d.ts.map +1 -0
  46. package/dist/cjs/utils/logger.js +26 -0
  47. package/dist/cjs/utils/logger.js.map +1 -0
  48. package/dist/cjs/validate.d.ts +22 -0
  49. package/dist/cjs/validate.d.ts.map +1 -0
  50. package/dist/cjs/validate.js +169 -0
  51. package/dist/cjs/validate.js.map +1 -0
  52. package/dist/esm/auth.d.ts +4 -0
  53. package/dist/esm/auth.d.ts.map +1 -0
  54. package/dist/esm/auth.js +191 -0
  55. package/dist/esm/auth.js.map +1 -0
  56. package/dist/esm/cli.d.ts +3 -0
  57. package/dist/esm/cli.d.ts.map +1 -0
  58. package/dist/esm/cli.js +348 -0
  59. package/dist/esm/cli.js.map +1 -0
  60. package/dist/esm/config.d.ts +24 -0
  61. package/dist/esm/config.d.ts.map +1 -0
  62. package/dist/esm/config.js +55 -0
  63. package/dist/esm/config.js.map +1 -0
  64. package/dist/esm/deploy.d.ts +18 -0
  65. package/dist/esm/deploy.d.ts.map +1 -0
  66. package/dist/esm/deploy.js +89 -0
  67. package/dist/esm/deploy.js.map +1 -0
  68. package/dist/esm/issue.d.ts +18 -0
  69. package/dist/esm/issue.d.ts.map +1 -0
  70. package/dist/esm/issue.js +79 -0
  71. package/dist/esm/issue.js.map +1 -0
  72. package/dist/esm/logs.d.ts +7 -0
  73. package/dist/esm/logs.d.ts.map +1 -0
  74. package/dist/esm/logs.js +75 -0
  75. package/dist/esm/logs.js.map +1 -0
  76. package/dist/esm/setup.d.ts +8 -0
  77. package/dist/esm/setup.d.ts.map +1 -0
  78. package/dist/esm/setup.js +110 -0
  79. package/dist/esm/setup.js.map +1 -0
  80. package/dist/esm/status.d.ts +6 -0
  81. package/dist/esm/status.d.ts.map +1 -0
  82. package/dist/esm/status.js +171 -0
  83. package/dist/esm/status.js.map +1 -0
  84. package/dist/esm/sync.d.ts +8 -0
  85. package/dist/esm/sync.d.ts.map +1 -0
  86. package/dist/esm/sync.js +201 -0
  87. package/dist/esm/sync.js.map +1 -0
  88. package/dist/esm/utils/brand.d.ts +5 -0
  89. package/dist/esm/utils/brand.d.ts.map +1 -0
  90. package/dist/esm/utils/brand.js +8 -0
  91. package/dist/esm/utils/brand.js.map +1 -0
  92. package/dist/esm/utils/git.d.ts +11 -0
  93. package/dist/esm/utils/git.d.ts.map +1 -0
  94. package/dist/esm/utils/git.js +92 -0
  95. package/dist/esm/utils/git.js.map +1 -0
  96. package/dist/esm/utils/logger.d.ts +2 -0
  97. package/dist/esm/utils/logger.d.ts.map +1 -0
  98. package/dist/esm/utils/logger.js +26 -0
  99. package/dist/esm/utils/logger.js.map +1 -0
  100. package/dist/esm/validate.d.ts +22 -0
  101. package/dist/esm/validate.d.ts.map +1 -0
  102. package/dist/esm/validate.js +169 -0
  103. package/dist/esm/validate.js.map +1 -0
  104. package/dist/tsconfig.tsbuildinfo +1 -0
  105. package/package.json +54 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 GuideAI
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,85 @@
1
+ # @guidemode/cli
2
+
3
+ > **Command-line interface for GuideMode.**
4
+
5
+ A simple CLI for authenticating with GuideMode and managing sessions from your terminal.
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ npm install -g @guidemode/cli
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ### Authentication
16
+
17
+ ```bash
18
+ # Login to GuideMode
19
+ guidemode login
20
+
21
+ # Check who you're logged in as
22
+ guidemode whoami
23
+
24
+ # Logout
25
+ guidemode logout
26
+ ```
27
+
28
+ That's it! The CLI shares authentication with the desktop app, so you only need to login once.
29
+
30
+ ## What It Does
31
+
32
+ - **Login**: Opens browser for GitHub OAuth authentication
33
+ - **Session Info**: Check your authentication status
34
+ - **Logout**: Clear stored credentials
35
+
36
+ Perfect for CI/CD pipelines, scripts, or terminal-focused workflows.
37
+
38
+ ## Configuration
39
+
40
+ Shares config with desktop app: `~/.guidemode/config.json`
41
+
42
+ ```json
43
+ {
44
+ "apiKey": "your-api-key",
45
+ "serverUrl": "https://app.guidemode.dev",
46
+ "username": "your-username"
47
+ }
48
+ ```
49
+
50
+ ## For Developers
51
+
52
+ ### Build from Source
53
+
54
+ ```bash
55
+ git clone https://github.com/guidemode/cli.git
56
+ cd cli
57
+ pnpm install
58
+ pnpm build
59
+ ```
60
+
61
+ **See [CLAUDE.md](CLAUDE.md) for:**
62
+ - Development setup
63
+ - Architecture details
64
+ - Adding new commands
65
+
66
+ ### Tech Stack
67
+
68
+ - Commander.js for CLI parsing
69
+ - Dual build (ESM + CommonJS)
70
+ - TypeScript with full type safety
71
+
72
+ ## Related Packages
73
+
74
+ - [@guidemode/desktop](https://github.com/guidemode/desktop) - Desktop app
75
+ - [@guidemode/types](https://github.com/guidemode/types) - Shared types
76
+
77
+ ## License
78
+
79
+ MIT License - see [LICENSE](LICENSE)
80
+
81
+ ## Support
82
+
83
+ - 💬 [**Discussions**](https://github.com/orgs/guidemode/discussions) - Ask questions, share ideas
84
+ - 🐛 [**Issues**](https://github.com/guidemode/desktop/issues) - Report bugs, request features
85
+ - 📧 **Email**: support@guidemode.dev
@@ -0,0 +1,4 @@
1
+ export declare function loginFlow(serverUrl: string): Promise<void>;
2
+ export declare function logoutFlow(): Promise<void>;
3
+ export declare function whoAmI(): Promise<void>;
4
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAUA,wBAAsB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDhE;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAUhD;AAED,wBAAsB,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAuB5C"}
@@ -0,0 +1,191 @@
1
+ import { createServer } from 'node:http';
2
+ import { URL } from 'node:url';
3
+ import chalk from 'chalk';
4
+ import open from 'open';
5
+ import { clearConfig, loadConfig, updateConfig } from './config.js';
6
+ import { PREFIX } from './utils/brand.js';
7
+ const PORT_RANGE_START = 8765;
8
+ const PORT_RANGE_END = 8770;
9
+ export async function loginFlow(serverUrl) {
10
+ console.log(`${PREFIX} Starting authentication flow...`);
11
+ const _config = await loadConfig();
12
+ // Start local callback server (tries ports 8765-8770)
13
+ const { server, callbackUrl } = await startCallbackServer();
14
+ try {
15
+ // Open browser to auth endpoint
16
+ const authUrl = `${serverUrl}/auth/desktop?redirect_uri=${encodeURIComponent(callbackUrl)}`;
17
+ console.log(chalk.gray(`Opening browser to: ${authUrl}`));
18
+ await open(authUrl);
19
+ console.log(chalk.yellow(`${PREFIX} Waiting for authentication in browser...`));
20
+ // Wait for callback with API key and tenant info
21
+ const callbackData = await waitForCallback(server);
22
+ if (!callbackData.apiKey) {
23
+ throw new Error('No API key received from callback');
24
+ }
25
+ // Get user info to store username
26
+ const userInfo = await getUserInfo(serverUrl, callbackData.apiKey);
27
+ // Save config with tenant information
28
+ await updateConfig({
29
+ apiKey: callbackData.apiKey,
30
+ serverUrl,
31
+ username: userInfo.username,
32
+ name: userInfo.name,
33
+ avatarUrl: userInfo.avatarUrl,
34
+ tenantId: callbackData.tenantId,
35
+ tenantName: callbackData.tenantName,
36
+ });
37
+ console.log(`${PREFIX} ${chalk.green('✓ Authentication successful!')}`);
38
+ console.log(chalk.gray(`Logged in as: ${userInfo.username}`));
39
+ if (callbackData.tenantName) {
40
+ console.log(chalk.gray(`Tenant: ${callbackData.tenantName}`));
41
+ }
42
+ console.log(chalk.gray(`Server: ${serverUrl}`));
43
+ }
44
+ catch (error) {
45
+ console.error(chalk.red('✗ Authentication failed:'), error instanceof Error ? error.message : 'Unknown error');
46
+ throw error;
47
+ }
48
+ finally {
49
+ server.close();
50
+ }
51
+ }
52
+ export async function logoutFlow() {
53
+ const config = await loadConfig();
54
+ if (!config.apiKey) {
55
+ console.log(chalk.yellow(`${PREFIX} Not currently logged in`));
56
+ return;
57
+ }
58
+ await clearConfig();
59
+ console.log(`${PREFIX} ${chalk.green('✓ Logged out successfully')}`);
60
+ }
61
+ export async function whoAmI() {
62
+ const config = await loadConfig();
63
+ if (!config.apiKey || !config.username) {
64
+ console.log(chalk.yellow(`${PREFIX} Not currently logged in`));
65
+ console.log(chalk.gray('Run "guidemode login" to authenticate'));
66
+ return;
67
+ }
68
+ try {
69
+ if (!config.serverUrl) {
70
+ console.log(chalk.red(`${PREFIX} ✗ No server URL configured`));
71
+ console.log(chalk.gray('Run "guidemode login" to authenticate'));
72
+ return;
73
+ }
74
+ const userInfo = await getUserInfo(config.serverUrl, config.apiKey);
75
+ console.log(`${PREFIX} ${chalk.green(`Logged in as: ${userInfo.username}`)}`);
76
+ console.log(chalk.gray(`Server: ${config.serverUrl}`));
77
+ console.log(chalk.gray(`API Key: ${config.apiKey.substring(0, 12)}...`));
78
+ }
79
+ catch (_error) {
80
+ console.log(chalk.red('✗ Invalid credentials'));
81
+ console.log(chalk.gray('Run "guidemode login" to re-authenticate'));
82
+ }
83
+ }
84
+ async function findAvailablePort() {
85
+ for (let port = PORT_RANGE_START; port <= PORT_RANGE_END; port++) {
86
+ const available = await new Promise(resolve => {
87
+ const testServer = createServer();
88
+ testServer.once('error', () => resolve(false));
89
+ testServer.listen(port, '127.0.0.1', () => {
90
+ testServer.close(() => resolve(true));
91
+ });
92
+ });
93
+ if (available)
94
+ return port;
95
+ }
96
+ throw new Error(`No available port in range ${PORT_RANGE_START}-${PORT_RANGE_END}`);
97
+ }
98
+ async function startCallbackServer() {
99
+ const port = await findAvailablePort();
100
+ return new Promise((resolve, reject) => {
101
+ const server = createServer((req, res) => {
102
+ if (!req.url) {
103
+ res.writeHead(400);
104
+ res.end('Bad Request');
105
+ return;
106
+ }
107
+ const url = new URL(req.url, `http://127.0.0.1:${port}`);
108
+ if (url.pathname === '/callback') {
109
+ const apiKey = url.searchParams.get('key');
110
+ const tenantId = url.searchParams.get('tenant_id');
111
+ const tenantName = url.searchParams.get('tenant_name');
112
+ const error = url.searchParams.get('error');
113
+ if (error) {
114
+ res.writeHead(400, { 'Content-Type': 'text/html' });
115
+ res.end(`
116
+ <html>
117
+ <body style="font-family: system-ui; padding: 40px; text-align: center;">
118
+ <h1 style="color: #dc2626;">Authentication Failed</h1>
119
+ <p>Error: ${error}</p>
120
+ <p>You can close this browser window and try again.</p>
121
+ </body>
122
+ </html>
123
+ `);
124
+ server.emit('auth-error', error);
125
+ return;
126
+ }
127
+ if (apiKey) {
128
+ const tenantInfo = tenantName ? ` for ${tenantName}` : '';
129
+ res.writeHead(200, { 'Content-Type': 'text/html' });
130
+ res.end(`
131
+ <html>
132
+ <body style="font-family: system-ui; padding: 40px; text-align: center;">
133
+ <h1 style="color: #059669;">Authentication Successful!</h1>
134
+ <p>You have been authenticated with the GuideMode CLI${tenantInfo}.</p>
135
+ <p style="color: #6b7280;">You can close this browser window and return to your terminal.</p>
136
+ </body>
137
+ </html>
138
+ `);
139
+ server.emit('auth-success', { apiKey, tenantId, tenantName });
140
+ return;
141
+ }
142
+ }
143
+ res.writeHead(404, { 'Content-Type': 'text/plain' });
144
+ res.end('Not found');
145
+ });
146
+ server.listen(port, '127.0.0.1', () => {
147
+ resolve({
148
+ server,
149
+ callbackUrl: `http://127.0.0.1:${port}/callback`,
150
+ });
151
+ });
152
+ server.on('error', (err) => {
153
+ reject(err);
154
+ });
155
+ });
156
+ }
157
+ async function waitForCallback(server) {
158
+ return new Promise((resolve, reject) => {
159
+ const timeout = setTimeout(() => {
160
+ reject(new Error('Authentication timeout (5 minutes)'));
161
+ }, 5 * 60 * 1000); // 5 minutes
162
+ server.once('auth-success', (data) => {
163
+ clearTimeout(timeout);
164
+ resolve(data);
165
+ });
166
+ server.once('auth-error', (error) => {
167
+ clearTimeout(timeout);
168
+ reject(new Error(error));
169
+ });
170
+ });
171
+ }
172
+ async function getUserInfo(serverUrl, apiKey) {
173
+ const response = await fetch(`${serverUrl}/auth/session`, {
174
+ headers: {
175
+ Authorization: `Bearer ${apiKey}`,
176
+ },
177
+ });
178
+ if (!response.ok) {
179
+ throw new Error(`Failed to get user info: ${response.status} ${response.statusText}`);
180
+ }
181
+ const data = (await response.json());
182
+ if (!data.authenticated || !data.user) {
183
+ throw new Error('Invalid API key or user not found');
184
+ }
185
+ return {
186
+ username: data.user.username,
187
+ name: data.user.name || '',
188
+ avatarUrl: data.user.avatarUrl || '',
189
+ };
190
+ }
191
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,WAAW,CAAA;AACrD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAC7B,MAAM,cAAc,GAAG,IAAI,CAAA;AAE3B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,SAAiB;IAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,kCAAkC,CAAC,CAAA;IAExD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAA;IAElC,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,mBAAmB,EAAE,CAAA;IAE3D,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,OAAO,GAAG,GAAG,SAAS,8BAA8B,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAA;QAC3F,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,OAAO,EAAE,CAAC,CAAC,CAAA;QAEzD,MAAM,IAAI,CAAC,OAAO,CAAC,CAAA;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,2CAA2C,CAAC,CAAC,CAAA;QAE/E,iDAAiD;QACjD,MAAM,YAAY,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAA;QAElD,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;QACtD,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAA;QAElE,sCAAsC;QACtC,MAAM,YAAY,CAAC;YACjB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,SAAS,EAAE,QAAQ,CAAC,SAAS;YAC7B,QAAQ,EAAE,YAAY,CAAC,QAAQ;YAC/B,UAAU,EAAE,YAAY,CAAC,UAAU;SACpC,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,EAAE,CAAC,CAAA;QACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAC7D,IAAI,YAAY,CAAC,UAAU,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;QAC/D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,EAAE,CAAC,CAAC,CAAA;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,EACrC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CACzD,CAAA;QACD,MAAM,KAAK,CAAA;IACb,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,KAAK,EAAE,CAAA;IAChB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,0BAA0B,CAAC,CAAC,CAAA;QAC9D,OAAM;IACR,CAAC;IAED,MAAM,WAAW,EAAE,CAAA;IACnB,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,2BAA2B,CAAC,EAAE,CAAC,CAAA;AACtE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IAEjC,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,0BAA0B,CAAC,CAAC,CAAA;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAChE,OAAM;IACR,CAAC;IAED,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,MAAM,6BAA6B,CAAC,CAAC,CAAA;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAA;YAChE,OAAM;QACR,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QACnE,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAA;QAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;QACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1E,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC,CAAA;IACrE,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB;IAC9B,KAAK,IAAI,IAAI,GAAG,gBAAgB,EAAE,IAAI,IAAI,cAAc,EAAE,IAAI,EAAE,EAAE,CAAC;QACjE,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAU,OAAO,CAAC,EAAE;YACrD,MAAM,UAAU,GAAG,YAAY,EAAE,CAAA;YACjC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAA;YAC9C,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;gBACxC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YACvC,CAAC,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QACF,IAAI,SAAS;YAAE,OAAO,IAAI,CAAA;IAC5B,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,gBAAgB,IAAI,cAAc,EAAE,CAAC,CAAA;AACrF,CAAC;AAED,KAAK,UAAU,mBAAmB;IAChC,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAA;IAEtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACvC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;gBACb,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;gBAClB,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBACtB,OAAM;YACR,CAAC;YACD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,oBAAoB,IAAI,EAAE,CAAC,CAAA;YAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;gBAC1C,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;gBAClD,MAAM,UAAU,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAA;gBACtD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;gBAE3C,IAAI,KAAK,EAAE,CAAC;oBACV,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAA;oBACnD,GAAG,CAAC,GAAG,CAAC;;;;4BAIU,KAAK;;;;WAItB,CAAC,CAAA;oBACF,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAA;oBAChC,OAAM;gBACR,CAAC;gBAED,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,QAAQ,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;oBACzD,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAA;oBACnD,GAAG,CAAC,GAAG,CAAC;;;;uEAIqD,UAAU;;;;WAItE,CAAC,CAAA;oBACF,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;oBAC7D,OAAM;gBACR,CAAC;YACH,CAAC;YAED,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC,CAAA;YACpD,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QACtB,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE;YACpC,OAAO,CAAC;gBACN,MAAM;gBACN,WAAW,EAAE,oBAAoB,IAAI,WAAW;aACjD,CAAC,CAAA;QACJ,CAAC,CAAC,CAAA;QAEF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAChD,MAAM,CAAC,GAAG,CAAC,CAAA;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,MAAc;IAEd,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE;YACH,MAAM,CAAC,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC,CAAA;QACzD,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,IAAI,CACd,CAAA,CAAC,YAAY;QAEd,MAAM,CAAC,IAAI,CACT,cAAc,EACd,CAAC,IAAgE,EAAE,EAAE;YACnE,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,OAAO,CAAC,IAAI,CAAC,CAAA;QACf,CAAC,CACF,CAAA;QAED,MAAM,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,KAAa,EAAE,EAAE;YAC1C,YAAY,CAAC,OAAO,CAAC,CAAA;YACrB,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;QAC1B,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,SAAiB,EACjB,MAAc;IAEd,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,eAAe,EAAE;QACxD,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,MAAM,EAAE;SAClC;KACF,CAAC,CAAA;IAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAGlC,CAAA;IAED,IAAI,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAA;IACtD,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ;QAC5B,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;QAC1B,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE;KACrC,CAAA;AACH,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface GuideModeConfig {
2
+ apiKey?: string;
3
+ serverUrl?: string;
4
+ username?: string;
5
+ name?: string;
6
+ avatarUrl?: string;
7
+ tenantId?: string;
8
+ tenantName?: string;
9
+ syncHooks?: string[];
10
+ }
11
+ export declare const DEFAULT_SYNC_HOOKS: string[];
12
+ export declare const DEFAULT_SERVER_URL = "https://app.guidemode.dev";
13
+ export declare const CONFIG_DIR: string;
14
+ export declare const CONFIG_FILE: string;
15
+ export declare const LOG_DIR: string;
16
+ export declare const LOG_FILE: string;
17
+ export declare function ensureConfigDir(): Promise<void>;
18
+ export declare function loadConfig(): Promise<GuideModeConfig>;
19
+ export declare function saveConfig(config: GuideModeConfig): Promise<void>;
20
+ export declare function getApiKey(): Promise<string | undefined>;
21
+ export declare function getServerUrl(): Promise<string>;
22
+ export declare function clearConfig(): Promise<void>;
23
+ export declare function updateConfig(updates: Partial<GuideModeConfig>): Promise<void>;
24
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,eAAO,MAAM,kBAAkB,UAAuC,CAAA;AACtE,eAAO,MAAM,kBAAkB,8BAA8B,CAAA;AAC7D,eAAO,MAAM,UAAU,QAAgC,CAAA;AACvD,eAAO,MAAM,WAAW,QAAkC,CAAA;AAC1D,eAAO,MAAM,OAAO,QAA2B,CAAA;AAC/C,eAAO,MAAM,QAAQ,QAAqC,CAAA;AAE1D,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAED,wBAAsB,UAAU,IAAI,OAAO,CAAC,eAAe,CAAC,CAQ3D;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE;AAED,wBAAsB,SAAS,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAQ7D;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAQpD;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjD;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,eAAe,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAGnF"}
@@ -0,0 +1,55 @@
1
+ import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ export const DEFAULT_SYNC_HOOKS = ['Stop', 'PreCompact', 'SessionEnd'];
5
+ export const DEFAULT_SERVER_URL = 'https://app.guidemode.dev';
6
+ export const CONFIG_DIR = join(homedir(), '.guidemode');
7
+ export const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
8
+ export const LOG_DIR = join(CONFIG_DIR, 'logs');
9
+ export const LOG_FILE = join(LOG_DIR, 'plugin-upload.log');
10
+ export async function ensureConfigDir() {
11
+ try {
12
+ await access(CONFIG_DIR);
13
+ }
14
+ catch {
15
+ await mkdir(CONFIG_DIR, { recursive: true, mode: 0o700 });
16
+ }
17
+ }
18
+ export async function loadConfig() {
19
+ try {
20
+ await ensureConfigDir();
21
+ const content = await readFile(CONFIG_FILE, 'utf-8');
22
+ return JSON.parse(content);
23
+ }
24
+ catch {
25
+ return {};
26
+ }
27
+ }
28
+ export async function saveConfig(config) {
29
+ await ensureConfigDir();
30
+ await writeFile(CONFIG_FILE, JSON.stringify(config, null, 2), { mode: 0o600 });
31
+ }
32
+ export async function getApiKey() {
33
+ // Check environment variable first (for CI/CD)
34
+ if (process.env.GUIDEMODE_API_KEY) {
35
+ return process.env.GUIDEMODE_API_KEY;
36
+ }
37
+ const config = await loadConfig();
38
+ return config.apiKey;
39
+ }
40
+ export async function getServerUrl() {
41
+ // Check environment variable first (for CI/CD)
42
+ if (process.env.GUIDEMODE_SERVICE_URL) {
43
+ return process.env.GUIDEMODE_SERVICE_URL;
44
+ }
45
+ const config = await loadConfig();
46
+ return config.serverUrl || 'https://app.guidemode.dev';
47
+ }
48
+ export async function clearConfig() {
49
+ await saveConfig({});
50
+ }
51
+ export async function updateConfig(updates) {
52
+ const config = await loadConfig();
53
+ await saveConfig({ ...config, ...updates });
54
+ }
55
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACrE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAahC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,CAAC,CAAA;AACtE,MAAM,CAAC,MAAM,kBAAkB,GAAG,2BAA2B,CAAA;AAC7D,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAA;AACvD,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;AAC/C,MAAM,CAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;AAE1D,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,UAAU,CAAC,CAAA;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IAC3D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,eAAe,EAAE,CAAA;QACvB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAuB;IACtD,MAAM,eAAe,EAAE,CAAA;IACvB,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,+CAA+C;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAA;IACtC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,MAAM,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,+CAA+C;IAC/C,IAAI,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC;QACtC,OAAO,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAA;IAC1C,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,OAAO,MAAM,CAAC,SAAS,IAAI,2BAA2B,CAAA;AACxD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,UAAU,CAAC,EAAE,CAAC,CAAA;AACtB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAiC;IAClE,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,UAAU,CAAC,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,CAAA;AAC7C,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface DeployOptions {
2
+ ref: string;
3
+ sha: string;
4
+ env: 'production' | 'staging' | 'development' | 'qa' | 'preview' | 'other';
5
+ status: 'pending' | 'queued' | 'in_progress' | 'success' | 'failure' | 'error' | 'inactive';
6
+ repository: string;
7
+ externalId?: string;
8
+ description?: string;
9
+ url?: string;
10
+ rollback?: boolean;
11
+ rollbackFrom?: string;
12
+ json?: boolean;
13
+ }
14
+ /**
15
+ * Create or update a deployment via the GuideMode API
16
+ */
17
+ export declare function createDeployment(options: DeployOptions): Promise<void>;
18
+ //# sourceMappingURL=deploy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/deploy.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAAA;IAC1E,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAA;IAC3F,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAcD;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F5E"}
@@ -0,0 +1,89 @@
1
+ import chalk from 'chalk';
2
+ import { getApiKey, getServerUrl } from './config.js';
3
+ /**
4
+ * Create or update a deployment via the GuideMode API
5
+ */
6
+ export async function createDeployment(options) {
7
+ const apiKey = await getApiKey();
8
+ if (!apiKey) {
9
+ console.error(chalk.red('✗ Not authenticated'));
10
+ console.log(chalk.gray('Run "guidemode login" to authenticate first'));
11
+ process.exit(1);
12
+ }
13
+ const serverUrl = await getServerUrl();
14
+ // Validate SHA length (allow short SHAs of 7+ characters or full 40 character SHAs)
15
+ if (options.sha.length < 7 || options.sha.length > 40) {
16
+ console.error(chalk.red('✗ Invalid SHA: must be 7-40 characters'));
17
+ console.log(chalk.gray(` Received: ${options.sha} (${options.sha.length} characters)`));
18
+ process.exit(1);
19
+ }
20
+ // Generate external ID if not provided
21
+ const externalId = options.externalId || `manual-deploy-${crypto.randomUUID()}`;
22
+ const payload = {
23
+ projectKey: options.repository,
24
+ externalId,
25
+ ref: options.ref,
26
+ sha: options.sha,
27
+ environment: options.env,
28
+ status: options.status,
29
+ description: options.description,
30
+ url: options.url,
31
+ isRollback: options.rollback,
32
+ rollbackFromSha: options.rollbackFrom,
33
+ };
34
+ try {
35
+ const response = await fetch(`${serverUrl}/api/webhooks/v1/deployments`, {
36
+ method: 'POST',
37
+ headers: {
38
+ Authorization: `Bearer ${apiKey}`,
39
+ 'Content-Type': 'application/json',
40
+ },
41
+ body: JSON.stringify(payload),
42
+ });
43
+ if (!response.ok) {
44
+ const errorData = (await response.json());
45
+ if (response.status === 401) {
46
+ console.error(chalk.red('✗ Authentication failed'));
47
+ console.log(chalk.gray('Your API key may have expired. Run "guidemode login" to re-authenticate'));
48
+ process.exit(1);
49
+ }
50
+ if (response.status === 400 && errorData.details) {
51
+ console.error(chalk.red('✗ Validation failed:'));
52
+ for (const detail of errorData.details) {
53
+ console.error(chalk.gray(` ${detail.path}: ${detail.message}`));
54
+ }
55
+ process.exit(1);
56
+ }
57
+ console.error(chalk.red(`✗ Error: ${errorData.error}`));
58
+ process.exit(1);
59
+ }
60
+ const result = (await response.json());
61
+ if (options.json) {
62
+ console.log(JSON.stringify(result, null, 2));
63
+ }
64
+ else {
65
+ const actionVerb = result.action === 'created' ? 'Created' : 'Updated';
66
+ const deployType = options.rollback ? 'rollback' : 'deployment';
67
+ console.log(chalk.green(`✓ ${actionVerb} ${deployType} successfully`));
68
+ console.log(chalk.gray(` ID: ${result.id}`));
69
+ console.log(chalk.gray(` External ID: ${result.externalId}`));
70
+ console.log(chalk.gray(` Repository: ${options.repository}`));
71
+ console.log(chalk.gray(` Ref: ${options.ref}`));
72
+ console.log(chalk.gray(` SHA: ${options.sha.substring(0, 7)}`));
73
+ console.log(chalk.gray(` Environment: ${options.env}`));
74
+ console.log(chalk.gray(` Status: ${options.status}`));
75
+ if (options.rollback && options.rollbackFrom) {
76
+ console.log(chalk.gray(` Rollback from: ${options.rollbackFrom.substring(0, 7)}`));
77
+ }
78
+ }
79
+ }
80
+ catch (error) {
81
+ if (error instanceof TypeError && error.message.includes('fetch')) {
82
+ console.error(chalk.red('✗ Network error: Could not connect to server'));
83
+ console.log(chalk.gray(`Server URL: ${serverUrl}`));
84
+ process.exit(1);
85
+ }
86
+ throw error;
87
+ }
88
+ }
89
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/deploy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA4BrD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,OAAsB;IAC3D,MAAM,MAAM,GAAG,MAAM,SAAS,EAAE,CAAA;IAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAA;QAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAA;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,YAAY,EAAE,CAAA;IAEtC,oFAAoF;IACpF,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QACtD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAA;QAClE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,MAAM,cAAc,CAAC,CAAC,CAAA;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,uCAAuC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,iBAAiB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAE/E,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU;QACV,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,WAAW,EAAE,OAAO,CAAC,GAAG;QACxB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,WAAW,EAAE,OAAO,CAAC,WAAW;QAChC,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,UAAU,EAAE,OAAO,CAAC,QAAQ;QAC5B,eAAe,EAAE,OAAO,CAAC,YAAY;KACtC,CAAA;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,8BAA8B,EAAE;YACvE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;gBACjC,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAA;YAE1D,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAA;gBACnD,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,yEAAyE,CAAC,CACtF,CAAA;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;gBAChD,KAAK,MAAM,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;oBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;gBAClE,CAAC;gBACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YACjB,CAAC;YAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAuB,CAAA;QAE5D,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAA;YACtE,MAAM,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAA;YAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,IAAI,UAAU,eAAe,CAAC,CAAC,CAAA;YACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;YAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;YAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YAChD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;YACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACtD,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAA;YACxE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,SAAS,EAAE,CAAC,CAAC,CAAA;YACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC"}
@@ -0,0 +1,18 @@
1
+ export interface IssueOptions {
2
+ title: string;
3
+ type: 'feature' | 'bug' | 'chore' | 'discovery' | 'incident' | 'other';
4
+ state: 'open' | 'closed' | 'in_progress';
5
+ repository: string;
6
+ externalId?: string;
7
+ body?: string;
8
+ url?: string;
9
+ labels?: string;
10
+ assignee?: string;
11
+ closedAt?: string;
12
+ json?: boolean;
13
+ }
14
+ /**
15
+ * Create or update an issue via the GuideMode API
16
+ */
17
+ export declare function createIssue(options: IssueOptions): Promise<void>;
18
+ //# sourceMappingURL=issue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.d.ts","sourceRoot":"","sources":["../../src/issue.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAA;IACtE,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,aAAa,CAAA;IACxC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAcD;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFtE"}
@@ -0,0 +1,79 @@
1
+ import chalk from 'chalk';
2
+ import { getApiKey, getServerUrl } from './config.js';
3
+ /**
4
+ * Create or update an issue via the GuideMode API
5
+ */
6
+ export async function createIssue(options) {
7
+ const apiKey = await getApiKey();
8
+ if (!apiKey) {
9
+ console.error(chalk.red('✗ Not authenticated'));
10
+ console.log(chalk.gray('Run "guidemode login" to authenticate first'));
11
+ process.exit(1);
12
+ }
13
+ const serverUrl = await getServerUrl();
14
+ // Generate external ID if not provided
15
+ const externalId = options.externalId || `manual-issue-${crypto.randomUUID()}`;
16
+ // Parse labels from comma-separated string
17
+ const labels = options.labels ? options.labels.split(',').map(l => l.trim()) : undefined;
18
+ const payload = {
19
+ projectKey: options.repository,
20
+ externalId,
21
+ title: options.title,
22
+ type: options.type,
23
+ state: options.state,
24
+ body: options.body,
25
+ url: options.url,
26
+ labels,
27
+ assigneeUsername: options.assignee,
28
+ closedAt: options.closedAt,
29
+ };
30
+ try {
31
+ const response = await fetch(`${serverUrl}/api/webhooks/v1/issues`, {
32
+ method: 'POST',
33
+ headers: {
34
+ Authorization: `Bearer ${apiKey}`,
35
+ 'Content-Type': 'application/json',
36
+ },
37
+ body: JSON.stringify(payload),
38
+ });
39
+ if (!response.ok) {
40
+ const errorData = (await response.json());
41
+ if (response.status === 401) {
42
+ console.error(chalk.red('✗ Authentication failed'));
43
+ console.log(chalk.gray('Your API key may have expired. Run "guidemode login" to re-authenticate'));
44
+ process.exit(1);
45
+ }
46
+ if (response.status === 400 && errorData.details) {
47
+ console.error(chalk.red('✗ Validation failed:'));
48
+ for (const detail of errorData.details) {
49
+ console.error(chalk.gray(` ${detail.path}: ${detail.message}`));
50
+ }
51
+ process.exit(1);
52
+ }
53
+ console.error(chalk.red(`✗ Error: ${errorData.error}`));
54
+ process.exit(1);
55
+ }
56
+ const result = (await response.json());
57
+ if (options.json) {
58
+ console.log(JSON.stringify(result, null, 2));
59
+ }
60
+ else {
61
+ const actionVerb = result.action === 'created' ? 'Created' : 'Updated';
62
+ console.log(chalk.green(`✓ ${actionVerb} issue successfully`));
63
+ console.log(chalk.gray(` ID: ${result.id}`));
64
+ console.log(chalk.gray(` External ID: ${result.externalId}`));
65
+ console.log(chalk.gray(` Repository: ${options.repository}`));
66
+ console.log(chalk.gray(` Type: ${options.type}`));
67
+ console.log(chalk.gray(` State: ${options.state}`));
68
+ }
69
+ }
70
+ catch (error) {
71
+ if (error instanceof TypeError && error.message.includes('fetch')) {
72
+ console.error(chalk.red('✗ Network error: Could not connect to server'));
73
+ console.log(chalk.gray(`Server URL: ${serverUrl}`));
74
+ process.exit(1);
75
+ }
76
+ throw error;
77
+ }
78
+ }
79
+ //# sourceMappingURL=issue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"issue.js","sourceRoot":"","sources":["../../src/issue.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export interface LogsOptions {
2
+ lines?: number;
3
+ errors?: boolean;
4
+ follow?: boolean;
5
+ }
6
+ export declare function runLogs(options?: LogsOptions): Promise<void>;
7
+ //# sourceMappingURL=logs.d.ts.map