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
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/logs.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAQD,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAiElE"}
|
package/dist/esm/logs.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { readFile, stat, watch } from 'node:fs/promises';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { LOG_FILE } from './config.js';
|
|
4
|
+
import { PREFIX } from './utils/brand.js';
|
|
5
|
+
function colorizeLine(line) {
|
|
6
|
+
if (line.includes('ERROR'))
|
|
7
|
+
return chalk.red(line);
|
|
8
|
+
if (line.includes('WARN'))
|
|
9
|
+
return chalk.yellow(line);
|
|
10
|
+
return line;
|
|
11
|
+
}
|
|
12
|
+
export async function runLogs(options) {
|
|
13
|
+
const lineCount = options?.lines ?? 30;
|
|
14
|
+
const errorsOnly = options?.errors ?? false;
|
|
15
|
+
try {
|
|
16
|
+
await stat(LOG_FILE);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
console.log(chalk.yellow(`${PREFIX} No log file found at:`), LOG_FILE);
|
|
20
|
+
console.log(chalk.gray('Logs will appear after your first sync.'));
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const content = await readFile(LOG_FILE, 'utf-8');
|
|
24
|
+
let lines = content.split('\n').filter(Boolean);
|
|
25
|
+
if (errorsOnly) {
|
|
26
|
+
lines = lines.filter(l => l.includes('ERROR') || l.includes('WARN'));
|
|
27
|
+
}
|
|
28
|
+
const tail = lines.slice(-lineCount);
|
|
29
|
+
if (tail.length === 0) {
|
|
30
|
+
if (errorsOnly) {
|
|
31
|
+
console.log(`${PREFIX} ${chalk.green('No errors or warnings found.')}`);
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
console.log(chalk.yellow(`${PREFIX} Log file is empty.`));
|
|
35
|
+
}
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
for (const line of tail) {
|
|
39
|
+
console.log(colorizeLine(line));
|
|
40
|
+
}
|
|
41
|
+
if (options?.follow) {
|
|
42
|
+
console.log(chalk.gray('\n--- Following log file (Ctrl+C to stop) ---\n'));
|
|
43
|
+
let lastSize = (await stat(LOG_FILE)).size;
|
|
44
|
+
try {
|
|
45
|
+
const watcher = watch(LOG_FILE);
|
|
46
|
+
for await (const _event of watcher) {
|
|
47
|
+
try {
|
|
48
|
+
const currentStat = await stat(LOG_FILE);
|
|
49
|
+
if (currentStat.size > lastSize) {
|
|
50
|
+
const fd = await import('node:fs/promises');
|
|
51
|
+
const fh = await fd.open(LOG_FILE, 'r');
|
|
52
|
+
const buf = Buffer.alloc(currentStat.size - lastSize);
|
|
53
|
+
await fh.read(buf, 0, buf.length, lastSize);
|
|
54
|
+
await fh.close();
|
|
55
|
+
const newContent = buf.toString('utf-8');
|
|
56
|
+
const newLines = newContent.split('\n').filter(Boolean);
|
|
57
|
+
for (const line of newLines) {
|
|
58
|
+
if (errorsOnly && !line.includes('ERROR') && !line.includes('WARN'))
|
|
59
|
+
continue;
|
|
60
|
+
console.log(colorizeLine(line));
|
|
61
|
+
}
|
|
62
|
+
lastSize = currentStat.size;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// File might be rotated or deleted - keep watching
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
// Watcher error - exit gracefully
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function detectHooksTarget(): Promise<string>;
|
|
2
|
+
export declare function installHooks(targetPath: string): Promise<void>;
|
|
3
|
+
export interface SetupOptions {
|
|
4
|
+
server?: string;
|
|
5
|
+
force?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function runSetup(options?: SetupOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=setup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"AA2BA,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CASzD;AAgBD,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmCpE;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAED,wBAAsB,QAAQ,CAAC,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCpE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { access, mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { homedir } from 'node:os';
|
|
3
|
+
import { join } from 'node:path';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { DEFAULT_SYNC_HOOKS, loadConfig } from './config.js';
|
|
6
|
+
import { loginFlow } from './auth.js';
|
|
7
|
+
import { runStatus } from './status.js';
|
|
8
|
+
import { brandTitle } from './utils/brand.js';
|
|
9
|
+
const GUIDEMODE_HOOK = { type: 'command', command: 'guidemode sync', timeout: 60 };
|
|
10
|
+
const HOOKS_CONFIG = {
|
|
11
|
+
hooks: {
|
|
12
|
+
Stop: [{ hooks: [GUIDEMODE_HOOK] }],
|
|
13
|
+
PreCompact: [{ hooks: [GUIDEMODE_HOOK] }],
|
|
14
|
+
SessionEnd: [{ hooks: [GUIDEMODE_HOOK] }],
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
async function fileExists(path) {
|
|
18
|
+
try {
|
|
19
|
+
await access(path);
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export async function detectHooksTarget() {
|
|
27
|
+
// Check if .claude/ exists in cwd (local project)
|
|
28
|
+
const localClaudeDir = join(process.cwd(), '.claude');
|
|
29
|
+
if (await fileExists(localClaudeDir)) {
|
|
30
|
+
return join(localClaudeDir, 'settings.local.json');
|
|
31
|
+
}
|
|
32
|
+
// Default to global
|
|
33
|
+
return join(homedir(), '.claude', 'settings.local.json');
|
|
34
|
+
}
|
|
35
|
+
function hasGuidemodeHook(entry) {
|
|
36
|
+
// New format: { hooks: [{ command: "guidemode sync" }] }
|
|
37
|
+
if (Array.isArray(entry.hooks)) {
|
|
38
|
+
return entry.hooks.some((h) => typeof h.command === 'string' && h.command.includes('guidemode sync'));
|
|
39
|
+
}
|
|
40
|
+
// Old format: { command: "guidemode sync" }
|
|
41
|
+
return typeof entry.command === 'string' && entry.command.includes('guidemode sync');
|
|
42
|
+
}
|
|
43
|
+
export async function installHooks(targetPath) {
|
|
44
|
+
const targetDir = join(targetPath, '..');
|
|
45
|
+
await mkdir(targetDir, { recursive: true });
|
|
46
|
+
// Read existing settings if present
|
|
47
|
+
let settings = {};
|
|
48
|
+
try {
|
|
49
|
+
const content = await readFile(targetPath, 'utf-8');
|
|
50
|
+
settings = JSON.parse(content);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// No existing settings file
|
|
54
|
+
}
|
|
55
|
+
// Merge hooks into settings
|
|
56
|
+
const existingHooks = (settings.hooks || {});
|
|
57
|
+
const newHooks = { ...existingHooks };
|
|
58
|
+
for (const [event, newEntries] of Object.entries(HOOKS_CONFIG.hooks)) {
|
|
59
|
+
const existing = (existingHooks[event] || []);
|
|
60
|
+
// Remove any old-format guidemode entries
|
|
61
|
+
const filtered = existing.filter(entry => !hasGuidemodeHook(entry));
|
|
62
|
+
// Check if new-format guidemode hook is already present
|
|
63
|
+
const alreadyInstalled = filtered.some(entry => hasGuidemodeHook(entry));
|
|
64
|
+
if (!alreadyInstalled) {
|
|
65
|
+
newHooks[event] = [...filtered, ...newEntries];
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
newHooks[event] = filtered;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
settings.hooks = newHooks;
|
|
72
|
+
await writeFile(targetPath, JSON.stringify(settings, null, 2), { mode: 0o600 });
|
|
73
|
+
}
|
|
74
|
+
export async function runSetup(options) {
|
|
75
|
+
const serverUrl = options?.server || 'https://app.guidemode.dev';
|
|
76
|
+
console.log(brandTitle(chalk.bold('GuideMode Setup\n')));
|
|
77
|
+
// Step 1: Check if already logged in
|
|
78
|
+
const config = await loadConfig();
|
|
79
|
+
if (config.apiKey && !options?.force) {
|
|
80
|
+
const username = config.username || config.name || 'Unknown';
|
|
81
|
+
console.log(chalk.green(`✓ Already logged in as ${username}`));
|
|
82
|
+
if (config.tenantName) {
|
|
83
|
+
console.log(chalk.gray(` Tenant: ${config.tenantName}`));
|
|
84
|
+
}
|
|
85
|
+
console.log(chalk.gray(' Use --force to re-authenticate\n'));
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// Step 2: Run login flow
|
|
89
|
+
console.log(brandTitle(chalk.bold('Step 1: Authentication\n')));
|
|
90
|
+
await loginFlow(serverUrl);
|
|
91
|
+
console.log();
|
|
92
|
+
}
|
|
93
|
+
// Step 3: Install Claude Code hooks
|
|
94
|
+
console.log(brandTitle(chalk.bold('Step 2: Install Claude Code hooks\n')));
|
|
95
|
+
const targetPath = await detectHooksTarget();
|
|
96
|
+
console.log(chalk.gray(` Target: ${targetPath}`));
|
|
97
|
+
try {
|
|
98
|
+
await installHooks(targetPath);
|
|
99
|
+
const hookEvents = DEFAULT_SYNC_HOOKS.join(', ');
|
|
100
|
+
console.log(chalk.green(`✓ Hooks installed for: ${hookEvents}`));
|
|
101
|
+
}
|
|
102
|
+
catch (err) {
|
|
103
|
+
console.error(chalk.red('✗ Failed to install hooks:'), err instanceof Error ? err.message : String(err));
|
|
104
|
+
console.log(chalk.gray(' You can manually add hooks to your Claude Code settings.'));
|
|
105
|
+
}
|
|
106
|
+
// Step 4: Verify
|
|
107
|
+
console.log(brandTitle(chalk.bold('Step 3: Verification\n')));
|
|
108
|
+
await runStatus({ verbose: true });
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/setup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAmFD,wBAAsB,SAAS,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAgGtE"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { execFile as execFileCb } from 'node:child_process';
|
|
2
|
+
import { readFile, stat } from 'node:fs/promises';
|
|
3
|
+
import { promisify } from 'node:util';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
import { CONFIG_FILE, DEFAULT_SYNC_HOOKS, LOG_FILE, loadConfig } from './config.js';
|
|
6
|
+
import { PREFIX } from './utils/brand.js';
|
|
7
|
+
const execFile = promisify(execFileCb);
|
|
8
|
+
async function checkDependencies() {
|
|
9
|
+
const missing = [];
|
|
10
|
+
try {
|
|
11
|
+
await execFile('git', ['--version'], { timeout: 5000 });
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
missing.push('git');
|
|
15
|
+
}
|
|
16
|
+
if (missing.length > 0) {
|
|
17
|
+
return { name: 'Dependencies', passed: false, detail: `missing: ${missing.join(' ')}` };
|
|
18
|
+
}
|
|
19
|
+
return { name: 'Dependencies', passed: true };
|
|
20
|
+
}
|
|
21
|
+
async function checkConfig() {
|
|
22
|
+
try {
|
|
23
|
+
await stat(CONFIG_FILE);
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return {
|
|
27
|
+
name: 'Config',
|
|
28
|
+
passed: false,
|
|
29
|
+
detail: 'not found — run "guidemode setup" to configure',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const config = await loadConfig();
|
|
33
|
+
if (!config.serverUrl) {
|
|
34
|
+
return { name: 'Config', passed: false, detail: 'server URL not configured' };
|
|
35
|
+
}
|
|
36
|
+
if (!config.apiKey) {
|
|
37
|
+
return { name: 'Config', passed: false, detail: 'API key not configured' };
|
|
38
|
+
}
|
|
39
|
+
return { name: 'Config', passed: true, config: Promise.resolve(config) };
|
|
40
|
+
}
|
|
41
|
+
async function checkConnectivity(serverUrl, apiKey) {
|
|
42
|
+
try {
|
|
43
|
+
const controller = new AbortController();
|
|
44
|
+
const timer = setTimeout(() => controller.abort(), 10_000);
|
|
45
|
+
const response = await fetch(`${serverUrl}/auth/session`, {
|
|
46
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
47
|
+
signal: controller.signal,
|
|
48
|
+
});
|
|
49
|
+
clearTimeout(timer);
|
|
50
|
+
if (response.ok) {
|
|
51
|
+
return { name: 'Server', passed: true };
|
|
52
|
+
}
|
|
53
|
+
if (response.status === 401 || response.status === 403) {
|
|
54
|
+
return {
|
|
55
|
+
name: 'Server',
|
|
56
|
+
passed: false,
|
|
57
|
+
detail: `API key invalid (HTTP ${response.status})`,
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
return { name: 'Server', passed: false, detail: `HTTP ${response.status}` };
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
64
|
+
if (message.includes('abort')) {
|
|
65
|
+
return { name: 'Server', passed: false, detail: `cannot reach ${serverUrl}` };
|
|
66
|
+
}
|
|
67
|
+
return { name: 'Server', passed: false, detail: `cannot reach ${serverUrl}: ${message}` };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
async function checkLogs() {
|
|
71
|
+
try {
|
|
72
|
+
const content = await readFile(LOG_FILE, 'utf-8');
|
|
73
|
+
const lines = content.split('\n').slice(-50);
|
|
74
|
+
const errorCount = lines.filter(l => l.includes('ERROR')).length;
|
|
75
|
+
if (errorCount > 0) {
|
|
76
|
+
return { name: 'Logs', passed: true, warning: `${errorCount} recent errors` };
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
// No log file, that's fine
|
|
81
|
+
}
|
|
82
|
+
return { name: 'Logs', passed: true };
|
|
83
|
+
}
|
|
84
|
+
export async function runStatus(options) {
|
|
85
|
+
const checks = [];
|
|
86
|
+
// Check dependencies
|
|
87
|
+
checks.push(await checkDependencies());
|
|
88
|
+
// Check config
|
|
89
|
+
const configCheck = await checkConfig();
|
|
90
|
+
checks.push(configCheck);
|
|
91
|
+
let config = null;
|
|
92
|
+
if (configCheck.passed) {
|
|
93
|
+
config = await loadConfig();
|
|
94
|
+
}
|
|
95
|
+
// Check connectivity (only if config is valid)
|
|
96
|
+
if (config?.apiKey && config?.serverUrl) {
|
|
97
|
+
checks.push(await checkConnectivity(config.serverUrl, config.apiKey));
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
checks.push({ name: 'Server', passed: false, detail: 'cannot test (missing config)' });
|
|
101
|
+
}
|
|
102
|
+
// Check logs
|
|
103
|
+
checks.push(await checkLogs());
|
|
104
|
+
const allOk = checks.every(c => c.passed);
|
|
105
|
+
if (options?.json) {
|
|
106
|
+
const output = {
|
|
107
|
+
ok: allOk,
|
|
108
|
+
checks: checks.map(c => ({
|
|
109
|
+
name: c.name,
|
|
110
|
+
passed: c.passed,
|
|
111
|
+
...(c.detail && { detail: c.detail }),
|
|
112
|
+
...(c.warning && { warning: c.warning }),
|
|
113
|
+
})),
|
|
114
|
+
...(config && {
|
|
115
|
+
user: config.username || config.name,
|
|
116
|
+
tenant: config.tenantName,
|
|
117
|
+
server: config.serverUrl,
|
|
118
|
+
hooks: config.syncHooks || DEFAULT_SYNC_HOOKS,
|
|
119
|
+
}),
|
|
120
|
+
};
|
|
121
|
+
console.log(JSON.stringify(output, null, 2));
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
// Print check line
|
|
125
|
+
const symbols = checks.map(c => (c.passed ? chalk.green(`✓ ${c.name}`) : chalk.red(`✗ ${c.name}`)));
|
|
126
|
+
console.log(`${PREFIX} ${symbols.join(' ')}`);
|
|
127
|
+
// Show details if issues found
|
|
128
|
+
if (!allOk) {
|
|
129
|
+
for (const c of checks) {
|
|
130
|
+
if (!c.passed && c.detail) {
|
|
131
|
+
console.log(chalk.red(` ✗ ${c.name}: ${c.detail}`));
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
// Show warnings
|
|
136
|
+
for (const c of checks) {
|
|
137
|
+
if (c.warning) {
|
|
138
|
+
console.log(chalk.yellow(` ! ${c.name}: ${c.warning}`));
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
// Verbose mode
|
|
142
|
+
if (allOk && options?.verbose && config) {
|
|
143
|
+
const username = config.username || config.name || '?';
|
|
144
|
+
const tenant = config.tenantName || '?';
|
|
145
|
+
console.log(` User: ${username}@${tenant} → ${config.serverUrl}`);
|
|
146
|
+
const hooks = config.syncHooks || DEFAULT_SYNC_HOOKS;
|
|
147
|
+
console.log(` Hooks: ${hooks.join(', ')}`);
|
|
148
|
+
try {
|
|
149
|
+
const content = await readFile(LOG_FILE, 'utf-8');
|
|
150
|
+
const lines = content.split('\n').filter(Boolean);
|
|
151
|
+
const lastUpload = lines
|
|
152
|
+
.filter(l => l.includes('Successfully uploaded') || l.includes('Upload failed') || l.includes('unchanged'))
|
|
153
|
+
.pop();
|
|
154
|
+
if (lastUpload) {
|
|
155
|
+
const stripped = lastUpload.replace(/^.*?\] /, '');
|
|
156
|
+
console.log(` Last: ${stripped}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
catch {
|
|
160
|
+
// No log file
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
// Summary line
|
|
164
|
+
if (allOk) {
|
|
165
|
+
console.log(`${PREFIX} ${chalk.green('✓ ALL OK')} — Sessions are syncing to GuideMode`);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
console.log(`${PREFIX} ${chalk.red('✗ ISSUES FOUND')} — See above for details`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=status.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/sync.ts"],"names":[],"mappings":"AA+FA,MAAM,WAAW,WAAW;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,OAAO,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAoKlE"}
|