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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.d.ts","sourceRoot":"","sources":["../../../src/utils/brand.ts"],"names":[],"mappings":"AAEA,0CAA0C;AAC1C,eAAO,MAAM,MAAM,QAA6D,CAAA;AAEhF,gDAAgD;AAChD,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C"}
@@ -0,0 +1,8 @@
1
+ import chalk from 'chalk';
2
+ /** Colored >> prefix: orange > green > */
3
+ export const PREFIX = `${chalk.hex('#FF8C00')('>')}${chalk.hex('#22C55E')('>')}`;
4
+ /** Prefix a title string with the branded >> */
5
+ export function brandTitle(text) {
6
+ return `${PREFIX} ${text}`;
7
+ }
8
+ //# sourceMappingURL=brand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brand.js","sourceRoot":"","sources":["../../../src/utils/brand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,0CAA0C;AAC1C,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,CAAA;AAEhF,gDAAgD;AAChD,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,GAAG,MAAM,IAAI,IAAI,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,11 @@
1
+ export interface GitMetadata {
2
+ remoteUrl: string | null;
3
+ branch: string | null;
4
+ commitHash: string | null;
5
+ repoName: string;
6
+ }
7
+ export declare function normalizeGitUrl(url: string): string;
8
+ export declare function extractRepoName(url: string): string;
9
+ export declare function detectProjectType(cwd: string): Promise<string>;
10
+ export declare function getGitMetadata(cwd: string): Promise<GitMetadata>;
11
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/utils/git.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,EAAE,MAAM,CAAA;CACjB;AAOD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoBpE;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA+CtE"}
@@ -0,0 +1,92 @@
1
+ import { execFile as execFileCb } from 'node:child_process';
2
+ import { access } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { promisify } from 'node:util';
5
+ const execFile = promisify(execFileCb);
6
+ const GIT_TIMEOUT = 5000;
7
+ async function gitCommand(args, cwd) {
8
+ const { stdout } = await execFile('git', args, { cwd, timeout: GIT_TIMEOUT });
9
+ return stdout.trim();
10
+ }
11
+ export function normalizeGitUrl(url) {
12
+ if (url.startsWith('git@github.com:')) {
13
+ return `https://github.com/${url.slice('git@github.com:'.length)}`;
14
+ }
15
+ if (url.startsWith('ssh://git@github.com/')) {
16
+ return `https://github.com/${url.slice('ssh://git@github.com/'.length)}`;
17
+ }
18
+ return url;
19
+ }
20
+ export function extractRepoName(url) {
21
+ const match = url.match(/[:/]([^/]+\/[^/.]+?)(?:\.git)?$/);
22
+ return match ? match[1] : '';
23
+ }
24
+ export async function detectProjectType(cwd) {
25
+ const checks = [
26
+ ['package.json', 'nodejs'],
27
+ ['Cargo.toml', 'rust'],
28
+ ['go.mod', 'go'],
29
+ ['requirements.txt', 'python'],
30
+ ['pyproject.toml', 'python'],
31
+ ['setup.py', 'python'],
32
+ ];
33
+ for (const [file, type] of checks) {
34
+ try {
35
+ await access(join(cwd, file));
36
+ return type;
37
+ }
38
+ catch {
39
+ // File doesn't exist, continue
40
+ }
41
+ }
42
+ return 'generic';
43
+ }
44
+ export async function getGitMetadata(cwd) {
45
+ const fallback = {
46
+ remoteUrl: null,
47
+ branch: null,
48
+ commitHash: null,
49
+ repoName: 'unknown',
50
+ };
51
+ if (!cwd)
52
+ return fallback;
53
+ try {
54
+ let remoteUrl = null;
55
+ try {
56
+ const raw = await gitCommand(['remote', 'get-url', 'origin'], cwd);
57
+ remoteUrl = normalizeGitUrl(raw);
58
+ }
59
+ catch {
60
+ // No git remote
61
+ }
62
+ let branch = null;
63
+ try {
64
+ branch = await gitCommand(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
65
+ }
66
+ catch {
67
+ // Not in a git repo
68
+ }
69
+ let commitHash = null;
70
+ try {
71
+ commitHash = await gitCommand(['rev-parse', 'HEAD'], cwd);
72
+ }
73
+ catch {
74
+ // Not in a git repo
75
+ }
76
+ let repoName = 'unknown';
77
+ if (remoteUrl) {
78
+ const extracted = extractRepoName(remoteUrl);
79
+ if (extracted)
80
+ repoName = extracted;
81
+ }
82
+ if (repoName === 'unknown' && cwd) {
83
+ const { basename } = await import('node:path');
84
+ repoName = basename(cwd);
85
+ }
86
+ return { remoteUrl, branch, commitHash, repoName };
87
+ }
88
+ catch {
89
+ return fallback;
90
+ }
91
+ }
92
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/utils/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logToFile(level: string, message: string): Promise<void>;
2
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAeA,wBAAsB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAS7E"}
@@ -0,0 +1,26 @@
1
+ import { appendFile, mkdir } from 'node:fs/promises';
2
+ import { LOG_DIR, LOG_FILE } from '../config.js';
3
+ let logDirEnsured = false;
4
+ async function ensureLogDir() {
5
+ if (logDirEnsured)
6
+ return;
7
+ try {
8
+ await mkdir(LOG_DIR, { recursive: true, mode: 0o700 });
9
+ logDirEnsured = true;
10
+ }
11
+ catch {
12
+ // Ignore - best effort
13
+ }
14
+ }
15
+ export async function logToFile(level, message) {
16
+ try {
17
+ await ensureLogDir();
18
+ const timestamp = new Date().toISOString().replace(/\.\d{3}Z$/, 'Z');
19
+ const line = `[${timestamp}] ${level}: ${message}\n`;
20
+ await appendFile(LOG_FILE, line, { mode: 0o600 });
21
+ }
22
+ catch {
23
+ // Never throw - logging must be silent
24
+ }
25
+ }
26
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAEhD,IAAI,aAAa,GAAG,KAAK,CAAA;AAEzB,KAAK,UAAU,YAAY;IACzB,IAAI,aAAa;QAAE,OAAM;IACzB,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,aAAa,GAAG,IAAI,CAAA;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,uBAAuB;IACzB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,KAAa,EAAE,OAAe;IAC5D,IAAI,CAAC;QACH,MAAM,YAAY,EAAE,CAAA;QACpB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,GAAG,CAAC,CAAA;QACpE,MAAM,IAAI,GAAG,IAAI,SAAS,KAAK,KAAK,KAAK,OAAO,IAAI,CAAA;QACpD,MAAM,UAAU,CAAC,QAAQ,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,uCAAuC;IACzC,CAAC;AACH,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Validate Command
3
+ *
4
+ * Validates canonical JSONL files for correctness.
5
+ */
6
+ interface ValidateOptions {
7
+ strict?: boolean;
8
+ json?: boolean;
9
+ verbose?: boolean;
10
+ watch?: boolean;
11
+ provider?: string;
12
+ }
13
+ /**
14
+ * Validate command implementation
15
+ */
16
+ export declare function validateCommand(path: string, options: ValidateOptions): Promise<void>;
17
+ /**
18
+ * Watch mode implementation
19
+ */
20
+ export declare function validateWatch(_path: string, _options: ValidateOptions): Promise<void>;
21
+ export {};
22
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAWH,UAAU,eAAe;IACvB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AA+DD;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+H3F;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAa3F"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Validate Command
3
+ *
4
+ * Validates canonical JSONL files for correctness.
5
+ */
6
+ import { readFileSync, readdirSync, statSync } from 'node:fs';
7
+ import { extname, join } from 'node:path';
8
+ import { generateValidationReport, validateJSONL, } from '@guidemode/session-processing/validation';
9
+ import chalk from 'chalk';
10
+ /**
11
+ * Find all JSONL files in a directory
12
+ */
13
+ function findJSONLFiles(path) {
14
+ const files = [];
15
+ try {
16
+ const stat = statSync(path);
17
+ if (stat.isFile()) {
18
+ if (extname(path) === '.jsonl') {
19
+ files.push(path);
20
+ }
21
+ return files;
22
+ }
23
+ if (stat.isDirectory()) {
24
+ const entries = readdirSync(path);
25
+ for (const entry of entries) {
26
+ const fullPath = join(path, entry);
27
+ files.push(...findJSONLFiles(fullPath));
28
+ }
29
+ }
30
+ }
31
+ catch (error) {
32
+ console.error(chalk.red('Error reading path:'), error instanceof Error ? error.message : String(error));
33
+ }
34
+ return files;
35
+ }
36
+ /**
37
+ * Validate a single JSONL file
38
+ */
39
+ function validateFile(filePath, options) {
40
+ if (!options.json) {
41
+ console.log(chalk.cyan(`\nValidating: ${filePath}`));
42
+ }
43
+ try {
44
+ // Read file content
45
+ const content = readFileSync(filePath, 'utf-8');
46
+ // Validate JSONL content
47
+ const result = validateJSONL(content, {
48
+ skipInvalidJSON: !options.strict,
49
+ includeWarnings: true,
50
+ });
51
+ return result;
52
+ }
53
+ catch (error) {
54
+ console.error(chalk.red('Validation error:'), error instanceof Error ? error.message : String(error));
55
+ process.exit(1);
56
+ }
57
+ }
58
+ /**
59
+ * Validate command implementation
60
+ */
61
+ export async function validateCommand(path, options) {
62
+ // Only show headers if not in JSON mode
63
+ if (!options.json) {
64
+ console.log(chalk.bold('GuideMode Canonical JSONL Validator'));
65
+ console.log(chalk.gray('─'.repeat(50)));
66
+ }
67
+ // Find all JSONL files
68
+ const files = findJSONLFiles(path);
69
+ if (files.length === 0) {
70
+ if (!options.json) {
71
+ console.log(chalk.yellow('No JSONL files found'));
72
+ }
73
+ return;
74
+ }
75
+ if (!options.json) {
76
+ console.log(chalk.cyan(`Found ${files.length} JSONL file(s)`));
77
+ }
78
+ // Filter by provider if specified
79
+ const filesToValidate = options.provider
80
+ ? files.filter(f => f.includes(`/${options.provider}/`))
81
+ : files;
82
+ if (filesToValidate.length === 0) {
83
+ if (!options.json) {
84
+ console.log(chalk.yellow(`No files found for provider: ${options.provider}`));
85
+ }
86
+ return;
87
+ }
88
+ if (options.provider && !options.json) {
89
+ console.log(chalk.cyan(`Filtering for provider "${options.provider}": ${filesToValidate.length} file(s)`));
90
+ }
91
+ // Validate each file
92
+ const results = [];
93
+ for (const file of filesToValidate) {
94
+ const result = validateFile(file, options);
95
+ results.push({ file, result });
96
+ }
97
+ // Generate reports
98
+ if (options.json) {
99
+ // JSON output
100
+ const jsonOutput = results.map(r => ({
101
+ file: r.file,
102
+ valid: r.result.valid,
103
+ totalLines: r.result.totalLines,
104
+ validMessages: r.result.validMessages,
105
+ errors: r.result.errors,
106
+ warnings: r.result.sessionResult?.warnings || [],
107
+ sessionId: r.result.sessionResult?.sessionId,
108
+ provider: r.result.sessionResult?.provider,
109
+ }));
110
+ console.log(JSON.stringify(jsonOutput, null, 2));
111
+ }
112
+ else {
113
+ // Human-readable output
114
+ for (const { file, result } of results) {
115
+ console.log(chalk.gray(`\n${'─'.repeat(50)}`));
116
+ console.log(chalk.bold(`File: ${file}`));
117
+ console.log(generateValidationReport(result, {
118
+ verbose: options.verbose,
119
+ colorize: true,
120
+ }));
121
+ }
122
+ // Summary
123
+ console.log(chalk.gray(`\n${'='.repeat(50)}`));
124
+ console.log(chalk.bold('Summary'));
125
+ console.log(chalk.gray('─'.repeat(50)));
126
+ const totalFiles = results.length;
127
+ const validFiles = results.filter(r => r.result.valid).length;
128
+ const invalidFiles = totalFiles - validFiles;
129
+ const totalMessages = results.reduce((sum, r) => sum + r.result.parsedLines, 0);
130
+ const validMessages = results.reduce((sum, r) => sum + r.result.validMessages, 0);
131
+ const totalErrors = results.reduce((sum, r) => sum + r.result.errors.length, 0);
132
+ const totalWarnings = results.reduce((sum, r) => sum + (r.result.sessionResult?.warnings.length || 0), 0);
133
+ console.log(`Total Files: ${totalFiles}`);
134
+ console.log(`Valid Files: ${chalk.green(validFiles)} / Invalid: ${invalidFiles > 0 ? chalk.red(invalidFiles) : invalidFiles}`);
135
+ console.log(`Total Messages: ${totalMessages} / Valid: ${chalk.green(validMessages)}`);
136
+ console.log(`Total Errors: ${totalErrors > 0 ? chalk.red(totalErrors) : totalErrors}`);
137
+ console.log(`Total Warnings: ${totalWarnings > 0 ? chalk.yellow(totalWarnings) : totalWarnings}`);
138
+ console.log(chalk.gray('─'.repeat(50)));
139
+ if (invalidFiles === 0 && totalErrors === 0) {
140
+ console.log(chalk.green(chalk.bold('\n✓ All validations passed!')));
141
+ }
142
+ else {
143
+ console.log(chalk.red(chalk.bold(`\n✗ Validation failed with ${totalErrors} error(s) across ${invalidFiles} file(s)`)));
144
+ }
145
+ }
146
+ // Exit code
147
+ const hasErrors = results.some(r => !r.result.valid);
148
+ const hasWarnings = results.some(r => r.result.sessionResult && r.result.sessionResult.warnings.length > 0);
149
+ if (hasErrors || (options.strict && hasWarnings)) {
150
+ process.exit(1);
151
+ }
152
+ }
153
+ /**
154
+ * Watch mode implementation
155
+ */
156
+ export async function validateWatch(_path, _options) {
157
+ console.log(chalk.cyan('Watch mode not yet implemented'));
158
+ console.log(chalk.gray('Use --help for available options'));
159
+ process.exit(1);
160
+ // TODO: Implement watch mode with chokidar
161
+ // import { watch } from 'chokidar'
162
+ // const watcher = watch(path, { ignoreInitial: false })
163
+ // watcher.on('change', async (filePath) => {
164
+ // if (extname(filePath) === '.jsonl') {
165
+ // await validateFile(filePath, options)
166
+ // }
167
+ // })
168
+ }
169
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/validate.ts"],"names":[],"mappings":"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"}
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":""}