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.
- package/LICENSE +21 -0
- package/README.md +85 -0
- package/dist/cjs/auth.d.ts +4 -0
- package/dist/cjs/auth.d.ts.map +1 -0
- package/dist/cjs/auth.js +191 -0
- package/dist/cjs/auth.js.map +1 -0
- package/dist/cjs/config.d.ts +24 -0
- package/dist/cjs/config.d.ts.map +1 -0
- package/dist/cjs/config.js +55 -0
- package/dist/cjs/config.js.map +1 -0
- package/dist/cjs/deploy.d.ts +18 -0
- package/dist/cjs/deploy.d.ts.map +1 -0
- package/dist/cjs/deploy.js +89 -0
- package/dist/cjs/deploy.js.map +1 -0
- package/dist/cjs/issue.d.ts +18 -0
- package/dist/cjs/issue.d.ts.map +1 -0
- package/dist/cjs/issue.js +79 -0
- package/dist/cjs/issue.js.map +1 -0
- package/dist/cjs/logs.d.ts +7 -0
- package/dist/cjs/logs.d.ts.map +1 -0
- package/dist/cjs/logs.js +75 -0
- package/dist/cjs/logs.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/setup.d.ts +8 -0
- package/dist/cjs/setup.d.ts.map +1 -0
- package/dist/cjs/setup.js +110 -0
- package/dist/cjs/setup.js.map +1 -0
- package/dist/cjs/status.d.ts +6 -0
- package/dist/cjs/status.d.ts.map +1 -0
- package/dist/cjs/status.js +171 -0
- package/dist/cjs/status.js.map +1 -0
- package/dist/cjs/sync.d.ts +8 -0
- package/dist/cjs/sync.d.ts.map +1 -0
- package/dist/cjs/sync.js +201 -0
- package/dist/cjs/sync.js.map +1 -0
- package/dist/cjs/utils/brand.d.ts +5 -0
- package/dist/cjs/utils/brand.d.ts.map +1 -0
- package/dist/cjs/utils/brand.js +8 -0
- package/dist/cjs/utils/brand.js.map +1 -0
- package/dist/cjs/utils/git.d.ts +11 -0
- package/dist/cjs/utils/git.d.ts.map +1 -0
- package/dist/cjs/utils/git.js +92 -0
- package/dist/cjs/utils/git.js.map +1 -0
- package/dist/cjs/utils/logger.d.ts +2 -0
- package/dist/cjs/utils/logger.d.ts.map +1 -0
- package/dist/cjs/utils/logger.js +26 -0
- package/dist/cjs/utils/logger.js.map +1 -0
- package/dist/cjs/validate.d.ts +22 -0
- package/dist/cjs/validate.d.ts.map +1 -0
- package/dist/cjs/validate.js +169 -0
- package/dist/cjs/validate.js.map +1 -0
- package/dist/esm/auth.d.ts +4 -0
- package/dist/esm/auth.d.ts.map +1 -0
- package/dist/esm/auth.js +191 -0
- package/dist/esm/auth.js.map +1 -0
- package/dist/esm/cli.d.ts +3 -0
- package/dist/esm/cli.d.ts.map +1 -0
- package/dist/esm/cli.js +348 -0
- package/dist/esm/cli.js.map +1 -0
- package/dist/esm/config.d.ts +24 -0
- package/dist/esm/config.d.ts.map +1 -0
- package/dist/esm/config.js +55 -0
- package/dist/esm/config.js.map +1 -0
- package/dist/esm/deploy.d.ts +18 -0
- package/dist/esm/deploy.d.ts.map +1 -0
- package/dist/esm/deploy.js +89 -0
- package/dist/esm/deploy.js.map +1 -0
- package/dist/esm/issue.d.ts +18 -0
- package/dist/esm/issue.d.ts.map +1 -0
- package/dist/esm/issue.js +79 -0
- package/dist/esm/issue.js.map +1 -0
- package/dist/esm/logs.d.ts +7 -0
- package/dist/esm/logs.d.ts.map +1 -0
- package/dist/esm/logs.js +75 -0
- package/dist/esm/logs.js.map +1 -0
- package/dist/esm/setup.d.ts +8 -0
- package/dist/esm/setup.d.ts.map +1 -0
- package/dist/esm/setup.js +110 -0
- package/dist/esm/setup.js.map +1 -0
- package/dist/esm/status.d.ts +6 -0
- package/dist/esm/status.d.ts.map +1 -0
- package/dist/esm/status.js +171 -0
- package/dist/esm/status.js.map +1 -0
- package/dist/esm/sync.d.ts +8 -0
- package/dist/esm/sync.d.ts.map +1 -0
- package/dist/esm/sync.js +201 -0
- package/dist/esm/sync.js.map +1 -0
- package/dist/esm/utils/brand.d.ts +5 -0
- package/dist/esm/utils/brand.d.ts.map +1 -0
- package/dist/esm/utils/brand.js +8 -0
- package/dist/esm/utils/brand.js.map +1 -0
- package/dist/esm/utils/git.d.ts +11 -0
- package/dist/esm/utils/git.d.ts.map +1 -0
- package/dist/esm/utils/git.js +92 -0
- package/dist/esm/utils/git.js.map +1 -0
- package/dist/esm/utils/logger.d.ts +2 -0
- package/dist/esm/utils/logger.d.ts.map +1 -0
- package/dist/esm/utils/logger.js +26 -0
- package/dist/esm/utils/logger.js.map +1 -0
- package/dist/esm/validate.d.ts +22 -0
- package/dist/esm/validate.d.ts.map +1 -0
- package/dist/esm/validate.js +169 -0
- package/dist/esm/validate.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- 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 @@
|
|
|
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"}
|
package/dist/cjs/auth.js
ADDED
|
@@ -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":"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"}
|
|
@@ -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":"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"}
|
|
@@ -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":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AA4BrD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAqB;IACrD,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,uCAAuC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,gBAAgB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAA;IAE9E,2CAA2C;IAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IAExF,MAAM,OAAO,GAAG;QACd,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,UAAU;QACV,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM;QACN,gBAAgB,EAAE,OAAO,CAAC,QAAQ;QAClC,QAAQ,EAAE,OAAO,CAAC,QAAQ;KAC3B,CAAA;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,SAAS,yBAAyB,EAAE;YAClE,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,CAAkB,CAAA;QAEvD,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,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,UAAU,qBAAqB,CAAC,CAAC,CAAA;YAC9D,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,WAAW,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;YAClD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAA;QACtD,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"}
|