kaimon-cli 0.1.3 → 0.1.41
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/README.md +21 -13
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +9 -4
- package/dist/commands/push.js.map +1 -1
- package/dist/utils/pushOperations.d.ts +10 -0
- package/dist/utils/pushOperations.d.ts.map +1 -0
- package/dist/utils/pushOperations.js +119 -0
- package/dist/utils/pushOperations.js.map +1 -0
- package/dist/utils/syncOperations.d.ts.map +1 -1
- package/dist/utils/syncOperations.js +11 -0
- package/dist/utils/syncOperations.js.map +1 -1
- package/dist/utils/tokenRefresh.d.ts +17 -0
- package/dist/utils/tokenRefresh.d.ts.map +1 -0
- package/dist/utils/tokenRefresh.js +80 -0
- package/dist/utils/tokenRefresh.js.map +1 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Kaimon CLI
|
|
2
2
|
|
|
3
|
-
> Sync your Kaimon
|
|
3
|
+
> Sync your Kaimon files (.md) with your codebase from the command line.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -17,11 +17,10 @@ kaimon auth login
|
|
|
17
17
|
# 2. Navigate to your project directory
|
|
18
18
|
cd my-project
|
|
19
19
|
|
|
20
|
-
# 3.
|
|
21
|
-
kaimon
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
kaimon pull
|
|
20
|
+
# 3. Pull your documents as markdown files or push to Kaimon
|
|
21
|
+
kaimon pull
|
|
22
|
+
OR
|
|
23
|
+
kaimon push
|
|
25
24
|
```
|
|
26
25
|
|
|
27
26
|
Your documents will be downloaded to `./KaimonDocs/` as markdown files with metadata frontmatter.
|
|
@@ -66,18 +65,30 @@ kaimon config show
|
|
|
66
65
|
# Download all documents from Kaimon as markdown
|
|
67
66
|
kaimon pull
|
|
68
67
|
|
|
69
|
-
# Download documents to current folder (
|
|
68
|
+
# Download documents to current folder (no KaimonDocs subfolder)
|
|
70
69
|
kaimon pull --flat
|
|
71
70
|
|
|
72
|
-
# Upload local markdown files to Kaimon
|
|
71
|
+
# Upload local markdown files to Kaimon
|
|
73
72
|
kaimon push
|
|
74
73
|
|
|
74
|
+
# Push specific files only
|
|
75
|
+
kaimon push doc1.md doc2.md
|
|
76
|
+
|
|
77
|
+
# Push without confirmation
|
|
78
|
+
kaimon push -y
|
|
79
|
+
|
|
75
80
|
# Bidirectional sync (coming soon)
|
|
76
81
|
kaimon sync
|
|
77
82
|
```
|
|
78
83
|
|
|
79
|
-
**Pull
|
|
80
|
-
-
|
|
84
|
+
**Pull behavior:**
|
|
85
|
+
- Default: Creates `./KaimonDocs/` subfolder and downloads documents there
|
|
86
|
+
- `--flat`: Downloads documents directly to current folder (no subfolder)
|
|
87
|
+
|
|
88
|
+
**Push behavior:**
|
|
89
|
+
- Default: Finds all `.md` files in current folder + subfolders, lists them, asks for confirmation
|
|
90
|
+
- `[files...]`: Push only specific files (e.g., `kaimon push doc1.md readme.md`)
|
|
91
|
+
- `-y, --yes`: Skip confirmation and push all files found
|
|
81
92
|
|
|
82
93
|
## Document Format
|
|
83
94
|
|
|
@@ -101,9 +112,6 @@ Content here...
|
|
|
101
112
|
### "Not authenticated"
|
|
102
113
|
Run `kaimon auth login` to authenticate first.
|
|
103
114
|
|
|
104
|
-
### "Not in a Kaimon project"
|
|
105
|
-
Run `kaimon config init` in your project directory first.
|
|
106
|
-
|
|
107
115
|
### "Authentication expired"
|
|
108
116
|
Run `kaimon auth login` again to refresh your token.
|
|
109
117
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"push.d.ts","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,QAAA,MAAM,IAAI,SAmBN,CAAC;AAEL,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
package/dist/commands/push.js
CHANGED
|
@@ -2,13 +2,18 @@ import { Command } from 'commander';
|
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import { requireAuth } from '../utils/requireAuth.js';
|
|
4
4
|
const push = new Command('push')
|
|
5
|
-
.description('Push local markdown files to Kaimon
|
|
6
|
-
.
|
|
5
|
+
.description('Push local markdown files to Kaimon')
|
|
6
|
+
.option('-y, --yes', 'Skip confirmation and push all files')
|
|
7
|
+
.arguments('[files...]')
|
|
8
|
+
.action(async (files, options) => {
|
|
7
9
|
try {
|
|
8
10
|
// Validate authentication first
|
|
9
11
|
await requireAuth();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
+
const { pushDocuments } = await import('../utils/pushOperations.js');
|
|
13
|
+
await pushDocuments({
|
|
14
|
+
files: files.length > 0 ? files : undefined,
|
|
15
|
+
skipConfirmation: options.yes || false
|
|
16
|
+
});
|
|
12
17
|
}
|
|
13
18
|
catch (error) {
|
|
14
19
|
console.error(chalk.red('❌ Push failed:'), error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC7B,WAAW,CAAC,
|
|
1
|
+
{"version":3,"file":"push.js","sourceRoot":"","sources":["../../src/commands/push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC7B,WAAW,CAAC,qCAAqC,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,sCAAsC,CAAC;KAC3D,SAAS,CAAC,YAAY,CAAC;KACvB,MAAM,CAAC,KAAK,EAAE,KAAe,EAAE,OAAO,EAAE,EAAE;IACzC,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,WAAW,EAAE,CAAC;QAEpB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;QACrE,MAAM,aAAa,CAAC;YAClB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;YAC3C,gBAAgB,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;SACvC,CAAC,CAAC;IAEL,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface PushOptions {
|
|
2
|
+
files?: string[];
|
|
3
|
+
skipConfirmation?: boolean;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Push markdown files to Kaimon
|
|
7
|
+
*/
|
|
8
|
+
export declare function pushDocuments(options?: PushOptions): Promise<void>;
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=pushOperations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pushOperations.d.ts","sourceRoot":"","sources":["../../src/utils/pushOperations.ts"],"names":[],"mappings":"AAUA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA+CD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgF5E"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import ora from 'ora';
|
|
5
|
+
import { loadConfig } from './config.js';
|
|
6
|
+
import { ensureValidToken } from './tokenRefresh.js';
|
|
7
|
+
const BUCKET_NAME = 'user-documents';
|
|
8
|
+
/**
|
|
9
|
+
* Find all markdown files in current directory
|
|
10
|
+
*/
|
|
11
|
+
function findMarkdownFiles(dir = process.cwd()) {
|
|
12
|
+
const mdFiles = [];
|
|
13
|
+
function walkDir(currentPath, relativeBase = '') {
|
|
14
|
+
try {
|
|
15
|
+
const entries = fs.readdirSync(currentPath, { withFileTypes: true });
|
|
16
|
+
for (const entry of entries) {
|
|
17
|
+
// Skip hidden files/folders and common exclusions
|
|
18
|
+
if (entry.name.startsWith('.') ||
|
|
19
|
+
entry.name === 'node_modules' ||
|
|
20
|
+
entry.name === 'dist' ||
|
|
21
|
+
entry.name === 'build' ||
|
|
22
|
+
entry.name === '.git') {
|
|
23
|
+
continue;
|
|
24
|
+
}
|
|
25
|
+
const fullPath = path.join(currentPath, entry.name);
|
|
26
|
+
const relativePath = relativeBase ? path.join(relativeBase, entry.name) : entry.name;
|
|
27
|
+
if (entry.isDirectory()) {
|
|
28
|
+
walkDir(fullPath, relativePath);
|
|
29
|
+
}
|
|
30
|
+
else if (entry.name.endsWith('.md')) {
|
|
31
|
+
mdFiles.push(relativePath);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
// Skip inaccessible directories
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
walkDir(dir);
|
|
40
|
+
return mdFiles.sort();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get document path in Supabase Storage
|
|
44
|
+
*/
|
|
45
|
+
function getDocumentPath(userId, documentId) {
|
|
46
|
+
return `users/${userId}/documents/${documentId}/latest.json`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Push markdown files to Kaimon
|
|
50
|
+
*/
|
|
51
|
+
export async function pushDocuments(options = {}) {
|
|
52
|
+
const spinner = ora('Preparing to push documents...').start();
|
|
53
|
+
try {
|
|
54
|
+
// Ensure token is valid (refresh if needed)
|
|
55
|
+
spinner.text = 'Checking authentication...';
|
|
56
|
+
const hasValidToken = await ensureValidToken();
|
|
57
|
+
if (!hasValidToken) {
|
|
58
|
+
spinner.fail(chalk.red('Authentication failed'));
|
|
59
|
+
console.log(chalk.yellow('\nYour session has expired or is invalid.'));
|
|
60
|
+
console.log(chalk.cyan('Please login again:\n'));
|
|
61
|
+
console.log(chalk.dim(' kaimon auth login\n'));
|
|
62
|
+
throw new Error('Not authenticated');
|
|
63
|
+
}
|
|
64
|
+
// Get authentication
|
|
65
|
+
const globalConfig = loadConfig();
|
|
66
|
+
if (!globalConfig.access_token) {
|
|
67
|
+
throw new Error('Not authenticated');
|
|
68
|
+
}
|
|
69
|
+
// Find markdown files
|
|
70
|
+
let filesToPush = options.files || [];
|
|
71
|
+
if (filesToPush.length === 0) {
|
|
72
|
+
// Auto-find all markdown files in current directory
|
|
73
|
+
filesToPush = findMarkdownFiles();
|
|
74
|
+
if (filesToPush.length === 0) {
|
|
75
|
+
spinner.warn(chalk.yellow('No markdown files found in current directory'));
|
|
76
|
+
console.log(chalk.dim('Create some .md files first\n'));
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
spinner.stop();
|
|
81
|
+
// Show files and ask for confirmation (unless -y flag)
|
|
82
|
+
if (!options.skipConfirmation) {
|
|
83
|
+
console.log(chalk.blue('\n📄 Files to push:'));
|
|
84
|
+
filesToPush.forEach((file, idx) => {
|
|
85
|
+
console.log(chalk.gray(` ${idx + 1}. ${file}`));
|
|
86
|
+
});
|
|
87
|
+
const readline = await import('readline');
|
|
88
|
+
const rl = readline.createInterface({
|
|
89
|
+
input: process.stdin,
|
|
90
|
+
output: process.stdout
|
|
91
|
+
});
|
|
92
|
+
const answer = await new Promise((resolve) => {
|
|
93
|
+
rl.question(chalk.cyan(`\nPush ${filesToPush.length} file(s)? (y/N): `), (ans) => {
|
|
94
|
+
rl.close();
|
|
95
|
+
resolve(ans);
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
99
|
+
console.log(chalk.yellow('\n⚠️ Push cancelled.\n'));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
spinner.start();
|
|
104
|
+
spinner.text = `Pushing ${filesToPush.length} file(s) to Kaimon...`;
|
|
105
|
+
// TODO: Implement actual push logic
|
|
106
|
+
// This would involve:
|
|
107
|
+
// 1. Reading each .md file
|
|
108
|
+
// 2. Creating document records in database
|
|
109
|
+
// 3. Uploading content to Supabase Storage
|
|
110
|
+
// 4. Handling conflicts (existing docs)
|
|
111
|
+
spinner.succeed(chalk.green(`✅ Push functionality coming soon!`));
|
|
112
|
+
console.log(chalk.dim(`Ready to push ${filesToPush.length} file(s) when implemented\n`));
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
spinner.fail(chalk.red('Failed to push documents'));
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=pushOperations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pushOperations.js","sourceRoot":"","sources":["../../src/utils/pushOperations.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOperations.d.ts","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"syncOperations.d.ts","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"AA8CA;;;GAGG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA+JxE;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C"}
|
|
@@ -5,6 +5,7 @@ import ora from 'ora';
|
|
|
5
5
|
import { getSupabaseClient } from './supabaseClient.js';
|
|
6
6
|
import { loadConfig } from './config.js';
|
|
7
7
|
import { blocknoteToMarkdown } from './markdown.js';
|
|
8
|
+
import { ensureValidToken } from './tokenRefresh.js';
|
|
8
9
|
const BUCKET_NAME = 'user-documents';
|
|
9
10
|
/**
|
|
10
11
|
* Get document path in Supabase Storage
|
|
@@ -29,6 +30,16 @@ function sanitizeFilename(filename) {
|
|
|
29
30
|
export async function pullDocuments(flat = false) {
|
|
30
31
|
const spinner = ora('Fetching documents from Kaimon...').start();
|
|
31
32
|
try {
|
|
33
|
+
// Ensure token is valid (refresh if needed)
|
|
34
|
+
spinner.text = 'Checking authentication...';
|
|
35
|
+
const hasValidToken = await ensureValidToken();
|
|
36
|
+
if (!hasValidToken) {
|
|
37
|
+
spinner.fail(chalk.red('Authentication failed'));
|
|
38
|
+
console.log(chalk.yellow('\nYour session has expired or is invalid.'));
|
|
39
|
+
console.log(chalk.cyan('Please login again:\n'));
|
|
40
|
+
console.log(chalk.dim(' kaimon auth login\n'));
|
|
41
|
+
throw new Error('Not authenticated');
|
|
42
|
+
}
|
|
32
43
|
// Get user ID from global config (no project config needed)
|
|
33
44
|
const globalConfig = loadConfig();
|
|
34
45
|
if (!globalConfig.access_token) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOperations.js","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"syncOperations.js","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,GAAG,gBAAgB,CAAC;AAmBrC;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,UAAkB;IACzD,OAAO,SAAS,MAAM,cAAc,UAAU,cAAc,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,QAAQ;SACZ,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC,CAAE,wBAAwB;SACvD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAa,8BAA8B;SAC/D,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAc,4BAA4B;SAC7D,IAAI,EAAE,CAAC;AACZ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAgB,KAAK;IACvD,MAAM,OAAO,GAAG,GAAG,CAAC,mCAAmC,CAAC,CAAC,KAAK,EAAE,CAAC;IAEjE,IAAI,CAAC;QACH,4CAA4C;QAC5C,OAAO,CAAC,IAAI,GAAG,4BAA4B,CAAC;QAC5C,MAAM,aAAa,GAAG,MAAM,gBAAgB,EAAE,CAAC;QAC/C,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,4DAA4D;QAC5D,MAAM,YAAY,GAAG,UAAU,EAAE,CAAC;QAClC,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,mCAAmC;QACnC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,IAAI;YAClB,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,IAAI,CAAC,CAAC,CAAC;QAExD,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;YACnD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;gBACnD,EAAE,CAAC,KAAK,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;YACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAEhB,sBAAsB;QACtB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,yCAAyC;QACzC,OAAO,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACtC,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,MAAM,QAAQ;aACvD,IAAI,CAAC,gBAAgB,CAAC;aACtB,MAAM,CAAC,GAAG,CAAC;aACX,KAAK,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAE7C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,mBAAmB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC;YAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4CAA4C,CAAC,CAAC,CAAC;YACrE,OAAO;QACT,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,SAAS,SAAS,CAAC,MAAM,8BAA8B,CAAC;QAEvE,4CAA4C;QAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,yBAAyB;QACzB,KAAK,MAAM,GAAG,IAAI,SAA6B,EAAE,CAAC;YAChD,IAAI,CAAC;gBACH,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;gBAE1D,iCAAiC;gBACjC,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;qBACpE,IAAI,CAAC,WAAW,CAAC;qBACjB,QAAQ,CAAC,YAAY,CAAC,CAAC;gBAE1B,IAAI,aAAa,EAAE,CAAC;oBAClB,iCAAiC;oBACjC,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;wBAChD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,KAAK,+BAA+B,CAAC,CAAC,CAAC;wBACtF,SAAS;oBACX,CAAC;oBACD,MAAM,aAAa,CAAC;gBACtB,CAAC;gBAED,qBAAqB;gBACrB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAoB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElD,sBAAsB;gBACtB,IAAI,QAAQ,GAAG,EAAE,CAAC;gBAClB,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnE,QAAQ,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClD,CAAC;qBAAM,IAAI,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;oBAC/C,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,GAAG,CAAC,KAAK,wBAAwB,CAAC,CAAC,CAAC;oBAC/E,SAAS;gBACX,CAAC;gBAED,oBAAoB;gBACpB,MAAM,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;gBACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAE9C,gCAAgC;gBAChC,MAAM,WAAW,GAAG;oBAClB,KAAK;oBACL,WAAW,GAAG,CAAC,KAAK,GAAG;oBACvB,eAAe,GAAG,CAAC,EAAE,GAAG;oBACxB,gBAAgB,GAAG,CAAC,UAAU,GAAG;oBACjC,gBAAgB,GAAG,CAAC,UAAU,GAAG;oBACjC,KAAK;oBACL,EAAE;oBACF,QAAQ;iBACT,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEb,gBAAgB;gBAChB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;gBACjD,YAAY,EAAE,CAAC;YAEjB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC;QACpD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,YAAY,mBAAmB,eAAe,GAAG,CAAC,CAAC,CAAC;QAEhG,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,UAAU,qBAAqB,CAAC,CAAC,CAAC;YACpE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE,IAAI,CAAC,CAAC,CAAC;IAE7E,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACpD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAC5D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface CLIConfig {
|
|
2
|
+
access_token?: string;
|
|
3
|
+
refresh_token?: string;
|
|
4
|
+
expires_at?: string;
|
|
5
|
+
user_email?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Refresh the user's access token using the refresh token
|
|
9
|
+
* Returns true if refresh was successful, false if it failed or wasn't needed
|
|
10
|
+
*/
|
|
11
|
+
export declare function refreshAccessToken(): Promise<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* Ensure user has a valid token before executing commands
|
|
14
|
+
* Will attempt to refresh if expired
|
|
15
|
+
*/
|
|
16
|
+
export declare function ensureValidToken(): Promise<boolean>;
|
|
17
|
+
//# sourceMappingURL=tokenRefresh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenRefresh.d.ts","sourceRoot":"","sources":["../../src/utils/tokenRefresh.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAoD3D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC,CAgBzD"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { getSupabaseClient } from './supabaseClient.js';
|
|
2
|
+
import { loadConfig, saveConfig } from './config.js';
|
|
3
|
+
/**
|
|
4
|
+
* Check if token is expired
|
|
5
|
+
*/
|
|
6
|
+
function isTokenExpired(expiresAt) {
|
|
7
|
+
if (!expiresAt)
|
|
8
|
+
return true;
|
|
9
|
+
const expirationTime = new Date(expiresAt).getTime();
|
|
10
|
+
const now = Date.now();
|
|
11
|
+
// Consider expired if less than 1 minute remaining
|
|
12
|
+
return now > expirationTime - 60000;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Refresh the user's access token using the refresh token
|
|
16
|
+
* Returns true if refresh was successful, false if it failed or wasn't needed
|
|
17
|
+
*/
|
|
18
|
+
export async function refreshAccessToken() {
|
|
19
|
+
try {
|
|
20
|
+
const config = loadConfig();
|
|
21
|
+
// If no tokens stored, nothing to refresh
|
|
22
|
+
if (!config.access_token) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
// Check if token is still valid
|
|
26
|
+
if (!isTokenExpired(config.expires_at)) {
|
|
27
|
+
console.log('✓ Token still valid');
|
|
28
|
+
return true; // Token is good
|
|
29
|
+
}
|
|
30
|
+
console.log('🔄 Token expired, refreshing...');
|
|
31
|
+
// If no refresh token, user needs to login again
|
|
32
|
+
if (!config.refresh_token) {
|
|
33
|
+
console.log('⚠️ No refresh token available');
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
// Get Supabase client (uses old token temporarily)
|
|
37
|
+
const supabase = getSupabaseClient();
|
|
38
|
+
// Try to refresh the session
|
|
39
|
+
const { data, error } = await supabase.auth.refreshSession({
|
|
40
|
+
refresh_token: config.refresh_token
|
|
41
|
+
});
|
|
42
|
+
if (error || !data.session) {
|
|
43
|
+
console.error('❌ Token refresh failed:', error?.message);
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
// Update config with new tokens
|
|
47
|
+
const newConfig = {
|
|
48
|
+
access_token: data.session.access_token,
|
|
49
|
+
refresh_token: data.session.refresh_token || config.refresh_token,
|
|
50
|
+
expires_at: new Date(Date.now() + (data.session.expires_in * 1000)).toISOString(),
|
|
51
|
+
user_email: config.user_email
|
|
52
|
+
};
|
|
53
|
+
saveConfig(newConfig);
|
|
54
|
+
console.log('✅ Token refreshed successfully');
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
console.error('❌ Token refresh error:', error.message);
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Ensure user has a valid token before executing commands
|
|
64
|
+
* Will attempt to refresh if expired
|
|
65
|
+
*/
|
|
66
|
+
export async function ensureValidToken() {
|
|
67
|
+
const config = loadConfig();
|
|
68
|
+
// Check if token exists
|
|
69
|
+
if (!config.access_token) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
// If token is still valid, return success
|
|
73
|
+
if (!isTokenExpired(config.expires_at)) {
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
// Token expired, try to refresh it
|
|
77
|
+
const refreshed = await refreshAccessToken();
|
|
78
|
+
return refreshed;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=tokenRefresh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenRefresh.js","sourceRoot":"","sources":["../../src/utils/tokenRefresh.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "kaimon-cli",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "CLI tool to sync Kaimon
|
|
3
|
+
"version": "0.1.41",
|
|
4
|
+
"description": "CLI tool to sync Kaimon files (.md) with your codebase",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
7
|
"kaimon": "./bin/index.js"
|