kaimon-cli 0.1.41 → 0.1.43
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 +56 -0
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +2 -1
- package/dist/commands/pull.js.map +1 -1
- package/dist/utils/frontmatter.d.ts +28 -0
- package/dist/utils/frontmatter.d.ts.map +1 -0
- package/dist/utils/frontmatter.js +79 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/pushOperations.d.ts.map +1 -1
- package/dist/utils/pushOperations.js +242 -19
- package/dist/utils/pushOperations.js.map +1 -1
- package/dist/utils/syncOperations.d.ts +2 -1
- package/dist/utils/syncOperations.d.ts.map +1 -1
- package/dist/utils/syncOperations.js +153 -43
- package/dist/utils/syncOperations.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -68,6 +68,9 @@ kaimon pull
|
|
|
68
68
|
# Download documents to current folder (no KaimonDocs subfolder)
|
|
69
69
|
kaimon pull --flat
|
|
70
70
|
|
|
71
|
+
# Pull without confirmation
|
|
72
|
+
kaimon pull -y
|
|
73
|
+
|
|
71
74
|
# Upload local markdown files to Kaimon
|
|
72
75
|
kaimon push
|
|
73
76
|
|
|
@@ -82,13 +85,22 @@ kaimon sync
|
|
|
82
85
|
```
|
|
83
86
|
|
|
84
87
|
**Pull behavior:**
|
|
88
|
+
- **Smart sync**: Only pulls new or updated documents (compares timestamps)
|
|
89
|
+
- If local file is newer than remote → skips (no overwrite)
|
|
85
90
|
- Default: Creates `./KaimonDocs/` subfolder and downloads documents there
|
|
86
91
|
- `--flat`: Downloads documents directly to current folder (no subfolder)
|
|
92
|
+
- `-y, --yes`: Skip confirmation and pull all documents
|
|
93
|
+
- Shows preview with file counts and timestamps before pulling
|
|
87
94
|
|
|
88
95
|
**Push behavior:**
|
|
96
|
+
- **Smart sync**: Only pushes new or modified files (compares timestamps)
|
|
97
|
+
- If remote is newer than local → skips (no overwrite)
|
|
98
|
+
- Reads frontmatter `kaimon_id` to match existing documents
|
|
89
99
|
- Default: Finds all `.md` files in current folder + subfolders, lists them, asks for confirmation
|
|
90
100
|
- `[files...]`: Push only specific files (e.g., `kaimon push doc1.md readme.md`)
|
|
91
101
|
- `-y, --yes`: Skip confirmation and push all files found
|
|
102
|
+
- Shows preview with actions and timestamps before pushing
|
|
103
|
+
- Automatically updates frontmatter with `kaimon_id` for new documents
|
|
92
104
|
|
|
93
105
|
## Document Format
|
|
94
106
|
|
|
@@ -107,6 +119,50 @@ updated_at: "2024-02-21T15:00:00Z"
|
|
|
107
119
|
Content here...
|
|
108
120
|
```
|
|
109
121
|
|
|
122
|
+
**Important**: The `kaimon_id` field links local files to remote documents. Don't remove it!
|
|
123
|
+
- When pushing: Files with `kaimon_id` update existing documents
|
|
124
|
+
- When pushing: Files without `kaimon_id` create new documents
|
|
125
|
+
- The CLI automatically adds `kaimon_id` to new files after first push
|
|
126
|
+
|
|
127
|
+
## Smart Sync
|
|
128
|
+
|
|
129
|
+
Both `pull` and `push` use **timestamp-based smart sync** to avoid unnecessary transfers:
|
|
130
|
+
|
|
131
|
+
### Pull Logic
|
|
132
|
+
- **New documents**: Not in local folder → pull
|
|
133
|
+
- **Updated documents**: Remote newer than local → pull
|
|
134
|
+
- **Up-to-date**: Remote same age or older → skip
|
|
135
|
+
|
|
136
|
+
### Push Logic
|
|
137
|
+
- **New files**: No `kaimon_id` in frontmatter → create new document
|
|
138
|
+
- **Modified files**: Local newer than remote → push update
|
|
139
|
+
- **Up-to-date**: Remote same age or newer → skip
|
|
140
|
+
|
|
141
|
+
### Example Output
|
|
142
|
+
|
|
143
|
+
```bash
|
|
144
|
+
$ kaimon pull
|
|
145
|
+
|
|
146
|
+
Checking authentication... ✓
|
|
147
|
+
Analyzing documents...
|
|
148
|
+
|
|
149
|
+
📄 Found 3 document(s) to pull:
|
|
150
|
+
|
|
151
|
+
New documents:
|
|
152
|
+
1. Project Roadmap.md (created 2 hours ago)
|
|
153
|
+
|
|
154
|
+
Updated documents:
|
|
155
|
+
2. README.md (Local: 2 hours ago, Remote: 30 mins ago)
|
|
156
|
+
3. Architecture.md (Local: 5 days ago, Remote: 1 day ago)
|
|
157
|
+
|
|
158
|
+
⏭️ 12 document(s) already up to date
|
|
159
|
+
|
|
160
|
+
📁 Sync Location
|
|
161
|
+
Will sync to: ./KaimonDocs/
|
|
162
|
+
|
|
163
|
+
Continue? (y/N):
|
|
164
|
+
```
|
|
165
|
+
|
|
110
166
|
## Troubleshooting
|
|
111
167
|
|
|
112
168
|
### "Not authenticated"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,QAAA,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"pull.d.ts","sourceRoot":"","sources":["../../src/commands/pull.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,QAAA,MAAM,IAAI,SAgBN,CAAC;AAEL,OAAO,EAAE,IAAI,EAAE,CAAC"}
|
package/dist/commands/pull.js
CHANGED
|
@@ -4,12 +4,13 @@ import { requireAuth } from '../utils/requireAuth.js';
|
|
|
4
4
|
const pull = new Command('pull')
|
|
5
5
|
.description('Pull all documents from Kaimon as markdown files')
|
|
6
6
|
.option('--flat', 'Save documents directly to current folder instead of KaimonDocs/ subfolder')
|
|
7
|
+
.option('-y, --yes', 'Skip confirmation and pull all documents')
|
|
7
8
|
.action(async (options) => {
|
|
8
9
|
try {
|
|
9
10
|
// Validate authentication first
|
|
10
11
|
await requireAuth();
|
|
11
12
|
const { pullDocuments } = await import('../utils/syncOperations.js');
|
|
12
|
-
await pullDocuments(options.flat);
|
|
13
|
+
await pullDocuments(options.flat, options.yes || false);
|
|
13
14
|
}
|
|
14
15
|
catch (error) {
|
|
15
16
|
console.error(chalk.red('❌ Pull failed:'), error.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.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,kDAAkD,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,4EAA4E,CAAC;KAC9F,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,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,OAAO,CAAC,IAAI,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"pull.js","sourceRoot":"","sources":["../../src/commands/pull.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,kDAAkD,CAAC;KAC/D,MAAM,CAAC,QAAQ,EAAE,4EAA4E,CAAC;KAC9F,MAAM,CAAC,WAAW,EAAE,0CAA0C,CAAC;KAC/D,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,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,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK,CAAC,CAAC;IAE1D,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,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter parsing utilities for markdown files
|
|
3
|
+
*/
|
|
4
|
+
export interface DocumentFrontmatter {
|
|
5
|
+
title?: string;
|
|
6
|
+
kaimon_id?: string;
|
|
7
|
+
created_at?: string;
|
|
8
|
+
updated_at?: string;
|
|
9
|
+
[key: string]: any;
|
|
10
|
+
}
|
|
11
|
+
export interface ParsedMarkdown {
|
|
12
|
+
frontmatter: DocumentFrontmatter;
|
|
13
|
+
markdown: string;
|
|
14
|
+
hasFrontmatter: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse frontmatter from markdown content
|
|
18
|
+
*/
|
|
19
|
+
export declare function parseFrontmatter(content: string): ParsedMarkdown;
|
|
20
|
+
/**
|
|
21
|
+
* Generate frontmatter string
|
|
22
|
+
*/
|
|
23
|
+
export declare function generateFrontmatter(frontmatter: DocumentFrontmatter): string;
|
|
24
|
+
/**
|
|
25
|
+
* Combine frontmatter and markdown content
|
|
26
|
+
*/
|
|
27
|
+
export declare function combineFrontmatterAndMarkdown(frontmatter: DocumentFrontmatter, markdown: string): string;
|
|
28
|
+
//# sourceMappingURL=frontmatter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.d.ts","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,mBAAmB;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,mBAAmB,CAAC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAkDhE;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,CAqB5E;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,mBAAmB,EAChC,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter parsing utilities for markdown files
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse frontmatter from markdown content
|
|
6
|
+
*/
|
|
7
|
+
export function parseFrontmatter(content) {
|
|
8
|
+
const lines = content.split('\n');
|
|
9
|
+
// Check if file starts with ---
|
|
10
|
+
if (lines[0]?.trim() !== '---') {
|
|
11
|
+
return {
|
|
12
|
+
frontmatter: {},
|
|
13
|
+
markdown: content,
|
|
14
|
+
hasFrontmatter: false
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
// Find closing ---
|
|
18
|
+
let endIndex = -1;
|
|
19
|
+
for (let i = 1; i < lines.length; i++) {
|
|
20
|
+
if (lines[i]?.trim() === '---') {
|
|
21
|
+
endIndex = i;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
if (endIndex === -1) {
|
|
26
|
+
// No closing ---, treat as regular markdown
|
|
27
|
+
return {
|
|
28
|
+
frontmatter: {},
|
|
29
|
+
markdown: content,
|
|
30
|
+
hasFrontmatter: false
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Parse frontmatter (simple YAML parsing for our use case)
|
|
34
|
+
const frontmatter = {};
|
|
35
|
+
const frontmatterLines = lines.slice(1, endIndex);
|
|
36
|
+
for (const line of frontmatterLines) {
|
|
37
|
+
const match = line.match(/^(\w+):\s*"?([^"]+)"?$/);
|
|
38
|
+
if (match) {
|
|
39
|
+
const [, key, value] = match;
|
|
40
|
+
frontmatter[key] = value.replace(/^["']|["']$/g, ''); // Remove quotes
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Get markdown content (everything after closing ---)
|
|
44
|
+
const markdown = lines.slice(endIndex + 1).join('\n').trim();
|
|
45
|
+
return {
|
|
46
|
+
frontmatter,
|
|
47
|
+
markdown,
|
|
48
|
+
hasFrontmatter: true
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Generate frontmatter string
|
|
53
|
+
*/
|
|
54
|
+
export function generateFrontmatter(frontmatter) {
|
|
55
|
+
const lines = ['---'];
|
|
56
|
+
// Always put fields in consistent order
|
|
57
|
+
const orderedKeys = ['title', 'kaimon_id', 'created_at', 'updated_at'];
|
|
58
|
+
for (const key of orderedKeys) {
|
|
59
|
+
if (frontmatter[key]) {
|
|
60
|
+
lines.push(`${key}: "${frontmatter[key]}"`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Add any other custom fields
|
|
64
|
+
for (const [key, value] of Object.entries(frontmatter)) {
|
|
65
|
+
if (!orderedKeys.includes(key)) {
|
|
66
|
+
lines.push(`${key}: "${value}"`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
lines.push('---');
|
|
70
|
+
return lines.join('\n');
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Combine frontmatter and markdown content
|
|
74
|
+
*/
|
|
75
|
+
export function combineFrontmatterAndMarkdown(frontmatter, markdown) {
|
|
76
|
+
const frontmatterStr = generateFrontmatter(frontmatter);
|
|
77
|
+
return `${frontmatterStr}\n\n${markdown}`;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=frontmatter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../src/utils/frontmatter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pushOperations.d.ts","sourceRoot":"","sources":["../../src/utils/pushOperations.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pushOperations.d.ts","sourceRoot":"","sources":["../../src/utils/pushOperations.ts"],"names":[],"mappings":"AAYA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AA0FD;;GAEG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4T5E"}
|
|
@@ -2,8 +2,11 @@ import fs from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import ora from 'ora';
|
|
5
|
+
import { getSupabaseClient } from './supabaseClient.js';
|
|
5
6
|
import { loadConfig } from './config.js';
|
|
6
7
|
import { ensureValidToken } from './tokenRefresh.js';
|
|
8
|
+
import { parseFrontmatter, combineFrontmatterAndMarkdown } from './frontmatter.js';
|
|
9
|
+
import { markdownToBlocknote } from './markdown.js';
|
|
7
10
|
const BUCKET_NAME = 'user-documents';
|
|
8
11
|
/**
|
|
9
12
|
* Find all markdown files in current directory
|
|
@@ -45,6 +48,26 @@ function findMarkdownFiles(dir = process.cwd()) {
|
|
|
45
48
|
function getDocumentPath(userId, documentId) {
|
|
46
49
|
return `users/${userId}/documents/${documentId}/latest.json`;
|
|
47
50
|
}
|
|
51
|
+
/**
|
|
52
|
+
* Format relative time (e.g., "2 hours ago", "3 days ago")
|
|
53
|
+
*/
|
|
54
|
+
function formatRelativeTime(date) {
|
|
55
|
+
const now = new Date();
|
|
56
|
+
const diffMs = now.getTime() - date.getTime();
|
|
57
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
58
|
+
const diffHours = Math.floor(diffMs / 3600000);
|
|
59
|
+
const diffDays = Math.floor(diffMs / 86400000);
|
|
60
|
+
if (diffMins < 1)
|
|
61
|
+
return 'just now';
|
|
62
|
+
if (diffMins < 60)
|
|
63
|
+
return `${diffMins} min${diffMins > 1 ? 's' : ''} ago`;
|
|
64
|
+
if (diffHours < 24)
|
|
65
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
66
|
+
if (diffDays < 30)
|
|
67
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
68
|
+
const diffMonths = Math.floor(diffDays / 30);
|
|
69
|
+
return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`;
|
|
70
|
+
}
|
|
48
71
|
/**
|
|
49
72
|
* Push markdown files to Kaimon
|
|
50
73
|
*/
|
|
@@ -66,31 +89,147 @@ export async function pushDocuments(options = {}) {
|
|
|
66
89
|
if (!globalConfig.access_token) {
|
|
67
90
|
throw new Error('Not authenticated');
|
|
68
91
|
}
|
|
92
|
+
// Get Supabase client
|
|
93
|
+
const supabase = getSupabaseClient();
|
|
94
|
+
// Get current user ID
|
|
95
|
+
const { data: { user }, error: userError } = await supabase.auth.getUser();
|
|
96
|
+
if (userError || !user) {
|
|
97
|
+
throw new Error('Failed to get user info');
|
|
98
|
+
}
|
|
99
|
+
const userId = user.id;
|
|
69
100
|
// Find markdown files
|
|
70
|
-
let
|
|
71
|
-
if (
|
|
101
|
+
let filePaths = options.files || [];
|
|
102
|
+
if (filePaths.length === 0) {
|
|
72
103
|
// Auto-find all markdown files in current directory
|
|
73
|
-
|
|
74
|
-
if (
|
|
104
|
+
filePaths = findMarkdownFiles();
|
|
105
|
+
if (filePaths.length === 0) {
|
|
75
106
|
spinner.warn(chalk.yellow('No markdown files found in current directory'));
|
|
76
107
|
console.log(chalk.dim('Create some .md files first\n'));
|
|
77
108
|
return;
|
|
78
109
|
}
|
|
79
110
|
}
|
|
111
|
+
spinner.text = 'Analyzing files...';
|
|
112
|
+
// Parse all local files
|
|
113
|
+
const filesToProcess = [];
|
|
114
|
+
for (const relPath of filePaths) {
|
|
115
|
+
try {
|
|
116
|
+
const fullPath = path.resolve(relPath);
|
|
117
|
+
const content = fs.readFileSync(fullPath, 'utf-8');
|
|
118
|
+
const { frontmatter, markdown } = parseFrontmatter(content);
|
|
119
|
+
const stats = fs.statSync(fullPath);
|
|
120
|
+
const title = frontmatter.title || path.basename(fullPath, '.md');
|
|
121
|
+
filesToProcess.push({
|
|
122
|
+
path: relPath,
|
|
123
|
+
kaimonId: frontmatter.kaimon_id,
|
|
124
|
+
title,
|
|
125
|
+
mtime: stats.mtime,
|
|
126
|
+
markdown,
|
|
127
|
+
frontmatter
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
// Skip files that can't be read
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (filesToProcess.length === 0) {
|
|
136
|
+
spinner.warn(chalk.yellow('No valid markdown files to push'));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
// Fetch remote documents by kaimon_id
|
|
140
|
+
const kaimonIds = filesToProcess
|
|
141
|
+
.filter(f => f.kaimonId)
|
|
142
|
+
.map(f => f.kaimonId);
|
|
143
|
+
let remoteDocs = [];
|
|
144
|
+
if (kaimonIds.length > 0) {
|
|
145
|
+
const { data, error } = await supabase
|
|
146
|
+
.from('user_documents')
|
|
147
|
+
.select('*')
|
|
148
|
+
.in('id', kaimonIds);
|
|
149
|
+
if (!error && data) {
|
|
150
|
+
remoteDocs = data;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const remoteMap = new Map(remoteDocs.map(doc => [doc.id, doc]));
|
|
154
|
+
// Determine what to push based on timestamps
|
|
155
|
+
const toPush = [];
|
|
156
|
+
const toSkip = [];
|
|
157
|
+
for (const file of filesToProcess) {
|
|
158
|
+
if (!file.kaimonId) {
|
|
159
|
+
// No kaimon_id = new document
|
|
160
|
+
toPush.push({ ...file, action: 'create', localTime: file.mtime });
|
|
161
|
+
}
|
|
162
|
+
else {
|
|
163
|
+
const remote = remoteMap.get(file.kaimonId);
|
|
164
|
+
if (!remote) {
|
|
165
|
+
// kaimon_id exists but doc was deleted remotely - recreate
|
|
166
|
+
toPush.push({ ...file, action: 'create', localTime: file.mtime, wasDeleted: true });
|
|
167
|
+
}
|
|
168
|
+
else {
|
|
169
|
+
const remoteTime = new Date(remote.updated_at);
|
|
170
|
+
if (file.mtime > remoteTime) {
|
|
171
|
+
// Local is newer - push it
|
|
172
|
+
toPush.push({
|
|
173
|
+
...file,
|
|
174
|
+
action: 'update',
|
|
175
|
+
localTime: file.mtime,
|
|
176
|
+
remoteTime
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
// Remote is same or newer - skip
|
|
181
|
+
toSkip.push(file);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
80
186
|
spinner.stop();
|
|
81
|
-
//
|
|
82
|
-
if (
|
|
83
|
-
console.log(chalk.
|
|
84
|
-
|
|
85
|
-
|
|
187
|
+
// If nothing to push, we're done
|
|
188
|
+
if (toPush.length === 0) {
|
|
189
|
+
console.log(chalk.green(`\n✅ All ${filesToProcess.length} file(s) are up to date!`));
|
|
190
|
+
console.log(chalk.dim('No changes to push.\n'));
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
// Show preview
|
|
194
|
+
console.log(chalk.blue(`\n📄 Found ${toPush.length} file(s) to push:\n`));
|
|
195
|
+
const newFiles = toPush.filter(item => item.action === 'create' && !item.wasDeleted);
|
|
196
|
+
const updatedFiles = toPush.filter(item => item.action === 'update');
|
|
197
|
+
const recreatedFiles = toPush.filter(item => item.action === 'create' && item.wasDeleted);
|
|
198
|
+
if (newFiles.length > 0) {
|
|
199
|
+
console.log(chalk.cyan('New documents:'));
|
|
200
|
+
newFiles.forEach((item, idx) => {
|
|
201
|
+
console.log(chalk.gray(` ${idx + 1}. ${item.path} (will create)`));
|
|
202
|
+
});
|
|
203
|
+
console.log();
|
|
204
|
+
}
|
|
205
|
+
if (updatedFiles.length > 0) {
|
|
206
|
+
console.log(chalk.cyan('Updated documents:'));
|
|
207
|
+
updatedFiles.forEach((item, idx) => {
|
|
208
|
+
const localTime = formatRelativeTime(item.localTime);
|
|
209
|
+
const remoteTime = formatRelativeTime(item.remoteTime);
|
|
210
|
+
console.log(chalk.gray(` ${idx + 1}. ${item.path} (Local: ${localTime}, Remote: ${remoteTime})`));
|
|
86
211
|
});
|
|
212
|
+
console.log();
|
|
213
|
+
}
|
|
214
|
+
if (recreatedFiles.length > 0) {
|
|
215
|
+
console.log(chalk.cyan('Recreating deleted documents:'));
|
|
216
|
+
recreatedFiles.forEach((item, idx) => {
|
|
217
|
+
console.log(chalk.gray(` ${idx + 1}. ${item.path} (was deleted remotely)`));
|
|
218
|
+
});
|
|
219
|
+
console.log();
|
|
220
|
+
}
|
|
221
|
+
if (toSkip.length > 0) {
|
|
222
|
+
console.log(chalk.dim(`⏭️ ${toSkip.length} file(s) already up to date\n`));
|
|
223
|
+
}
|
|
224
|
+
// Show confirmation before pushing (unless -y flag)
|
|
225
|
+
if (!options.skipConfirmation) {
|
|
87
226
|
const readline = await import('readline');
|
|
88
227
|
const rl = readline.createInterface({
|
|
89
228
|
input: process.stdin,
|
|
90
229
|
output: process.stdout
|
|
91
230
|
});
|
|
92
231
|
const answer = await new Promise((resolve) => {
|
|
93
|
-
rl.question(chalk.cyan(
|
|
232
|
+
rl.question(chalk.cyan(`Push ${toPush.length} file(s)? (y/N): `), (ans) => {
|
|
94
233
|
rl.close();
|
|
95
234
|
resolve(ans);
|
|
96
235
|
});
|
|
@@ -101,15 +240,99 @@ export async function pushDocuments(options = {}) {
|
|
|
101
240
|
}
|
|
102
241
|
}
|
|
103
242
|
spinner.start();
|
|
104
|
-
spinner.text = `Pushing ${
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
243
|
+
spinner.text = `Pushing ${toPush.length} file(s)...`;
|
|
244
|
+
let successCount = 0;
|
|
245
|
+
let errorCount = 0;
|
|
246
|
+
const errors = [];
|
|
247
|
+
// Push each file
|
|
248
|
+
for (const item of toPush) {
|
|
249
|
+
try {
|
|
250
|
+
// Convert markdown to BlockNote JSON
|
|
251
|
+
const blocks = markdownToBlocknote(item.markdown);
|
|
252
|
+
const content = {
|
|
253
|
+
type: 'blocknote',
|
|
254
|
+
content: blocks
|
|
255
|
+
};
|
|
256
|
+
if (item.action === 'create') {
|
|
257
|
+
// Create new document
|
|
258
|
+
const { data: newDoc, error: createError } = await supabase
|
|
259
|
+
.from('user_documents')
|
|
260
|
+
.insert({
|
|
261
|
+
user_id: userId,
|
|
262
|
+
title: item.title
|
|
263
|
+
})
|
|
264
|
+
.select()
|
|
265
|
+
.single();
|
|
266
|
+
if (createError || !newDoc) {
|
|
267
|
+
throw new Error(createError?.message || 'Failed to create document');
|
|
268
|
+
}
|
|
269
|
+
// Upload content to storage
|
|
270
|
+
const documentPath = getDocumentPath(userId, newDoc.id);
|
|
271
|
+
const jsonContent = JSON.stringify(content, null, 2);
|
|
272
|
+
const { error: uploadError } = await supabase.storage
|
|
273
|
+
.from(BUCKET_NAME)
|
|
274
|
+
.upload(documentPath, new Blob([jsonContent], { type: 'application/json' }), {
|
|
275
|
+
upsert: true
|
|
276
|
+
});
|
|
277
|
+
if (uploadError) {
|
|
278
|
+
throw new Error(uploadError.message);
|
|
279
|
+
}
|
|
280
|
+
// Update local file frontmatter with new kaimon_id
|
|
281
|
+
const updatedFrontmatter = {
|
|
282
|
+
...item.frontmatter,
|
|
283
|
+
title: item.title,
|
|
284
|
+
kaimon_id: newDoc.id,
|
|
285
|
+
created_at: newDoc.created_at,
|
|
286
|
+
updated_at: newDoc.updated_at
|
|
287
|
+
};
|
|
288
|
+
const updatedContent = combineFrontmatterAndMarkdown(updatedFrontmatter, item.markdown);
|
|
289
|
+
fs.writeFileSync(item.path, updatedContent, 'utf-8');
|
|
290
|
+
}
|
|
291
|
+
else {
|
|
292
|
+
// Update existing document
|
|
293
|
+
const documentId = item.kaimonId;
|
|
294
|
+
// Update database record
|
|
295
|
+
const { error: updateError } = await supabase
|
|
296
|
+
.from('user_documents')
|
|
297
|
+
.update({
|
|
298
|
+
title: item.title,
|
|
299
|
+
updated_at: new Date().toISOString()
|
|
300
|
+
})
|
|
301
|
+
.eq('id', documentId);
|
|
302
|
+
if (updateError) {
|
|
303
|
+
throw new Error(updateError.message);
|
|
304
|
+
}
|
|
305
|
+
// Upload content to storage
|
|
306
|
+
const documentPath = getDocumentPath(userId, documentId);
|
|
307
|
+
const jsonContent = JSON.stringify(content, null, 2);
|
|
308
|
+
const { error: uploadError } = await supabase.storage
|
|
309
|
+
.from(BUCKET_NAME)
|
|
310
|
+
.upload(documentPath, new Blob([jsonContent], { type: 'application/json' }), {
|
|
311
|
+
upsert: true
|
|
312
|
+
});
|
|
313
|
+
if (uploadError) {
|
|
314
|
+
throw new Error(uploadError.message);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
successCount++;
|
|
318
|
+
}
|
|
319
|
+
catch (error) {
|
|
320
|
+
errorCount++;
|
|
321
|
+
errors.push(`${item.path}: ${error.message}`);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
// Show results
|
|
325
|
+
const createCount = toPush.filter(i => i.action === 'create').length;
|
|
326
|
+
const updateCount = toPush.filter(i => i.action === 'update').length;
|
|
327
|
+
spinner.succeed(chalk.green(`✅ Pushed ${successCount} document(s) (${createCount} new, ${updateCount} updated)`));
|
|
328
|
+
if (toSkip.length > 0) {
|
|
329
|
+
console.log(chalk.dim(`⏭️ Skipped ${toSkip.length} up-to-date file(s)`));
|
|
330
|
+
}
|
|
331
|
+
if (errorCount > 0) {
|
|
332
|
+
console.log(chalk.yellow(`\n⚠️ ${errorCount} error(s) occurred:`));
|
|
333
|
+
errors.forEach(err => console.log(chalk.dim(` - ${err}`)));
|
|
334
|
+
}
|
|
335
|
+
console.log();
|
|
113
336
|
}
|
|
114
337
|
catch (error) {
|
|
115
338
|
spinner.fail(chalk.red('Failed to push documents'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pushOperations.js","sourceRoot":"","sources":["../../src/utils/pushOperations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"pushOperations.js","sourceRoot":"","sources":["../../src/utils/pushOperations.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,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,6BAA6B,EAAuB,MAAM,kBAAkB,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,WAAW,GAAG,gBAAgB,CAAC;AA+BrC;;GAEG;AACH,SAAS,iBAAiB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,SAAS,OAAO,CAAC,WAAmB,EAAE,eAAuB,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;YAErE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,kDAAkD;gBAClD,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAC1B,KAAK,CAAC,IAAI,KAAK,cAAc;oBAC7B,KAAK,CAAC,IAAI,KAAK,MAAM;oBACrB,KAAK,CAAC,IAAI,KAAK,OAAO;oBACtB,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;oBAC1B,SAAS;gBACX,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACpD,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;gBAErF,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;oBACxB,OAAO,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAClC,CAAC;qBAAM,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;oBACtC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,gCAAgC;QAClC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAc,EAAE,UAAkB;IACzD,OAAO,SAAS,MAAM,cAAc,UAAU,cAAc,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAU;IACpC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;IAE/C,IAAI,QAAQ,GAAG,CAAC;QAAE,OAAO,UAAU,CAAC;IACpC,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAC1E,IAAI,SAAS,GAAG,EAAE;QAAE,OAAO,GAAG,SAAS,QAAQ,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAC9E,IAAI,QAAQ,GAAG,EAAE;QAAE,OAAO,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;IAE1E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,CAAC;IAC7C,OAAO,GAAG,UAAU,SAAS,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAuB,EAAE;IAC3D,MAAM,OAAO,GAAG,GAAG,CAAC,gCAAgC,CAAC,CAAC,KAAK,EAAE,CAAC;IAE9D,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,qBAAqB;QACrB,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,sBAAsB;QACtB,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;QAErC,sBAAsB;QACtB,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC3E,IAAI,SAAS,IAAI,CAAC,IAAI,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;QAEvB,sBAAsB;QACtB,IAAI,SAAS,GAAa,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAE9C,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,oDAAoD;YACpD,SAAS,GAAG,iBAAiB,EAAE,CAAC;YAEhC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC3B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,8CAA8C,CAAC,CAAC,CAAC;gBAC3E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;gBACxD,OAAO;YACT,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,GAAG,oBAAoB,CAAC;QAEpC,wBAAwB;QACxB,MAAM,cAAc,GAAoB,EAAE,CAAC;QAE3C,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACvC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEpC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAElE,cAAc,CAAC,IAAI,CAAC;oBAClB,IAAI,EAAE,OAAO;oBACb,QAAQ,EAAE,WAAW,CAAC,SAAS;oBAC/B,KAAK;oBACL,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,QAAQ;oBACR,WAAW;iBACZ,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,gCAAgC;gBAChC,SAAS;YACX,CAAC;QACH,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC;YAC9D,OAAO;QACT,CAAC;QAED,sCAAsC;QACtC,MAAM,SAAS,GAAG,cAAc;aAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAS,CAAC,CAAC;QAEzB,IAAI,UAAU,GAAqB,EAAE,CAAC;QACtC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;iBACnC,IAAI,CAAC,gBAAgB,CAAC;iBACtB,MAAM,CAAC,GAAG,CAAC;iBACX,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YAEvB,IAAI,CAAC,KAAK,IAAI,IAAI,EAAE,CAAC;gBACnB,UAAU,GAAG,IAAwB,CAAC;YACxC,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;QAEhE,6CAA6C;QAC7C,MAAM,MAAM,GAAe,EAAE,CAAC;QAC9B,MAAM,MAAM,GAAoB,EAAE,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACnB,8BAA8B;gBAC9B,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAE5C,IAAI,CAAC,MAAM,EAAE,CAAC;oBACZ,2DAA2D;oBAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtF,CAAC;qBAAM,CAAC;oBACN,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;oBAE/C,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,EAAE,CAAC;wBAC5B,2BAA2B;wBAC3B,MAAM,CAAC,IAAI,CAAC;4BACV,GAAG,IAAI;4BACP,MAAM,EAAE,QAAQ;4BAChB,SAAS,EAAE,IAAI,CAAC,KAAK;4BACrB,UAAU;yBACX,CAAC,CAAC;oBACL,CAAC;yBAAM,CAAC;wBACN,iCAAiC;wBACjC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACpB,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,EAAE,CAAC;QAEf,iCAAiC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,cAAc,CAAC,MAAM,0BAA0B,CAAC,CAAC,CAAC;YACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QAED,eAAe;QACf,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC;QAE1E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACrF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QACrE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC;QAE1F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1C,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;YACtE,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAC9C,YAAY,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACjC,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACrD,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,UAAW,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,YAAY,SAAS,aAAa,UAAU,GAAG,CAAC,CAAC,CAAC;YACrG,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;YACzD,cAAc,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;gBACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,CAAC,IAAI,yBAAyB,CAAC,CAAC,CAAC;YAC/E,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,MAAM,+BAA+B,CAAC,CAAC,CAAC;QAC9E,CAAC;QAED,oDAAoD;QACpD,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;YAC1C,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;gBAClC,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,MAAM,EAAE,OAAO,CAAC,MAAM;aACvB,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACnD,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,MAAM,mBAAmB,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE;oBACxE,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;gBACnE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,yBAAyB,CAAC,CAAC,CAAC;gBACrD,OAAO;YACT,CAAC;QACH,CAAC;QAED,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,OAAO,CAAC,IAAI,GAAG,WAAW,MAAM,CAAC,MAAM,aAAa,CAAC;QAErD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,iBAAiB;QACjB,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,qCAAqC;gBACrC,MAAM,MAAM,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClD,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,MAAM;iBAChB,CAAC;gBAEF,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBAC7B,sBAAsB;oBACtB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ;yBACxD,IAAI,CAAC,gBAAgB,CAAC;yBACtB,MAAM,CAAC;wBACN,OAAO,EAAE,MAAM;wBACf,KAAK,EAAE,IAAI,CAAC,KAAK;qBAClB,CAAC;yBACD,MAAM,EAAE;yBACR,MAAM,EAAE,CAAC;oBAEZ,IAAI,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;wBAC3B,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,OAAO,IAAI,2BAA2B,CAAC,CAAC;oBACvE,CAAC;oBAED,4BAA4B;oBAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;oBACxD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAErD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;yBAClD,IAAI,CAAC,WAAW,CAAC;yBACjB,MAAM,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE;wBAC3E,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEL,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACvC,CAAC;oBAED,mDAAmD;oBACnD,MAAM,kBAAkB,GAAG;wBACzB,GAAG,IAAI,CAAC,WAAW;wBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,SAAS,EAAE,MAAM,CAAC,EAAE;wBACpB,UAAU,EAAE,MAAM,CAAC,UAAU;wBAC7B,UAAU,EAAE,MAAM,CAAC,UAAU;qBAC9B,CAAC;oBAEF,MAAM,cAAc,GAAG,6BAA6B,CAAC,kBAAkB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;oBACxF,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;gBAEvD,CAAC;qBAAM,CAAC;oBACN,2BAA2B;oBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,QAAS,CAAC;oBAElC,yBAAyB;oBACzB,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ;yBAC1C,IAAI,CAAC,gBAAgB,CAAC;yBACtB,MAAM,CAAC;wBACN,KAAK,EAAE,IAAI,CAAC,KAAK;wBACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;qBACrC,CAAC;yBACD,EAAE,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;oBAExB,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACvC,CAAC;oBAED,4BAA4B;oBAC5B,MAAM,YAAY,GAAG,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;oBACzD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;oBAErD,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,QAAQ,CAAC,OAAO;yBAClD,IAAI,CAAC,WAAW,CAAC;yBACjB,MAAM,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,EAAE;wBAC3E,MAAM,EAAE,IAAI;qBACb,CAAC,CAAC;oBAEL,IAAI,WAAW,EAAE,CAAC;wBAChB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC;gBAED,YAAY,EAAE,CAAC;YAEjB,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,UAAU,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;QACH,CAAC;QAED,eAAe;QACf,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;QAErE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,YAAY,iBAAiB,WAAW,SAAS,WAAW,WAAW,CAAC,CAAC,CAAC;QAElH,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,qBAAqB,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,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,EAAE,CAAC;IAEhB,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"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Pull all documents from Kaimon and save as markdown files
|
|
3
3
|
* @param flat - If true, save directly to current folder; if false, create KaimonDocs/ subfolder
|
|
4
|
+
* @param skipConfirmation - If true, skip confirmation prompt
|
|
4
5
|
*/
|
|
5
|
-
export declare function pullDocuments(flat?: boolean): Promise<void>;
|
|
6
|
+
export declare function pullDocuments(flat?: boolean, skipConfirmation?: boolean): Promise<void>;
|
|
6
7
|
/**
|
|
7
8
|
* Push local markdown files to Kaimon
|
|
8
9
|
* TODO: Implement in Phase 3
|
|
@@ -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":"AAqHA;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,IAAI,GAAE,OAAe,EAAE,gBAAgB,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmO3G;AAED;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAEnD;AAED;;;GAGG;AACH,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9C"}
|
|
@@ -6,6 +6,7 @@ import { getSupabaseClient } from './supabaseClient.js';
|
|
|
6
6
|
import { loadConfig } from './config.js';
|
|
7
7
|
import { blocknoteToMarkdown } from './markdown.js';
|
|
8
8
|
import { ensureValidToken } from './tokenRefresh.js';
|
|
9
|
+
import { parseFrontmatter, combineFrontmatterAndMarkdown } from './frontmatter.js';
|
|
9
10
|
const BUCKET_NAME = 'user-documents';
|
|
10
11
|
/**
|
|
11
12
|
* Get document path in Supabase Storage
|
|
@@ -23,11 +24,64 @@ function sanitizeFilename(filename) {
|
|
|
23
24
|
.replace(/-+/g, '-') // Collapse multiple hyphens
|
|
24
25
|
.trim();
|
|
25
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Format relative time (e.g., "2 hours ago", "3 days ago")
|
|
29
|
+
*/
|
|
30
|
+
function formatRelativeTime(date) {
|
|
31
|
+
const now = new Date();
|
|
32
|
+
const diffMs = now.getTime() - date.getTime();
|
|
33
|
+
const diffMins = Math.floor(diffMs / 60000);
|
|
34
|
+
const diffHours = Math.floor(diffMs / 3600000);
|
|
35
|
+
const diffDays = Math.floor(diffMs / 86400000);
|
|
36
|
+
if (diffMins < 1)
|
|
37
|
+
return 'just now';
|
|
38
|
+
if (diffMins < 60)
|
|
39
|
+
return `${diffMins} min${diffMins > 1 ? 's' : ''} ago`;
|
|
40
|
+
if (diffHours < 24)
|
|
41
|
+
return `${diffHours} hour${diffHours > 1 ? 's' : ''} ago`;
|
|
42
|
+
if (diffDays < 30)
|
|
43
|
+
return `${diffDays} day${diffDays > 1 ? 's' : ''} ago`;
|
|
44
|
+
const diffMonths = Math.floor(diffDays / 30);
|
|
45
|
+
return `${diffMonths} month${diffMonths > 1 ? 's' : ''} ago`;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Scan local directory for markdown files and build a map by kaimon_id
|
|
49
|
+
*/
|
|
50
|
+
function scanLocalFiles(docsDir) {
|
|
51
|
+
const localMap = new Map();
|
|
52
|
+
if (!fs.existsSync(docsDir)) {
|
|
53
|
+
return localMap;
|
|
54
|
+
}
|
|
55
|
+
const files = fs.readdirSync(docsDir);
|
|
56
|
+
for (const file of files) {
|
|
57
|
+
if (!file.endsWith('.md'))
|
|
58
|
+
continue;
|
|
59
|
+
const filepath = path.join(docsDir, file);
|
|
60
|
+
try {
|
|
61
|
+
const content = fs.readFileSync(filepath, 'utf-8');
|
|
62
|
+
const { frontmatter } = parseFrontmatter(content);
|
|
63
|
+
const stats = fs.statSync(filepath);
|
|
64
|
+
if (frontmatter.kaimon_id) {
|
|
65
|
+
localMap.set(frontmatter.kaimon_id, {
|
|
66
|
+
path: filepath,
|
|
67
|
+
mtime: stats.mtime,
|
|
68
|
+
frontmatter
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
// Skip files that can't be read
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return localMap;
|
|
78
|
+
}
|
|
26
79
|
/**
|
|
27
80
|
* Pull all documents from Kaimon and save as markdown files
|
|
28
81
|
* @param flat - If true, save directly to current folder; if false, create KaimonDocs/ subfolder
|
|
82
|
+
* @param skipConfirmation - If true, skip confirmation prompt
|
|
29
83
|
*/
|
|
30
|
-
export async function pullDocuments(flat = false) {
|
|
84
|
+
export async function pullDocuments(flat = false, skipConfirmation = false) {
|
|
31
85
|
const spinner = ora('Fetching documents from Kaimon...').start();
|
|
32
86
|
try {
|
|
33
87
|
// Ensure token is valid (refresh if needed)
|
|
@@ -45,35 +99,14 @@ export async function pullDocuments(flat = false) {
|
|
|
45
99
|
if (!globalConfig.access_token) {
|
|
46
100
|
throw new Error('Not authenticated');
|
|
47
101
|
}
|
|
48
|
-
spinner.stop();
|
|
49
|
-
// Show confirmation before syncing
|
|
50
|
-
const readline = await import('readline');
|
|
51
|
-
const rl = readline.createInterface({
|
|
52
|
-
input: process.stdin,
|
|
53
|
-
output: process.stdout
|
|
54
|
-
});
|
|
55
102
|
const currentFolder = process.cwd();
|
|
56
103
|
const docsDir = flat
|
|
57
104
|
? currentFolder
|
|
58
105
|
: path.join(currentFolder, 'KaimonDocs');
|
|
59
|
-
console.log(chalk.blue('\n📁 Sync Location'));
|
|
60
|
-
console.log(chalk.gray(` Current folder: ${currentFolder}`));
|
|
61
|
-
console.log(chalk.gray(` Will sync to: ${docsDir}\n`));
|
|
62
|
-
const answer = await new Promise((resolve) => {
|
|
63
|
-
rl.question(chalk.cyan('Continue? (y/N): '), (ans) => {
|
|
64
|
-
rl.close();
|
|
65
|
-
resolve(ans);
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
69
|
-
console.log(chalk.yellow('\n⚠️ Sync cancelled.\n'));
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
spinner.start();
|
|
73
106
|
// Get Supabase client
|
|
74
107
|
const supabase = getSupabaseClient();
|
|
75
108
|
// Fetch all user documents from database
|
|
76
|
-
spinner.text = '
|
|
109
|
+
spinner.text = 'Analyzing documents...';
|
|
77
110
|
const { data: documents, error: dbError } = await supabase
|
|
78
111
|
.from('user_documents')
|
|
79
112
|
.select('*')
|
|
@@ -86,7 +119,79 @@ export async function pullDocuments(flat = false) {
|
|
|
86
119
|
console.log(chalk.dim('Create some documents first at kaimon.ai\n'));
|
|
87
120
|
return;
|
|
88
121
|
}
|
|
89
|
-
|
|
122
|
+
// Scan local files to build map
|
|
123
|
+
const localMap = scanLocalFiles(docsDir);
|
|
124
|
+
// Determine what to pull based on timestamps
|
|
125
|
+
const toPull = [];
|
|
126
|
+
const toSkip = [];
|
|
127
|
+
for (const doc of documents) {
|
|
128
|
+
const local = localMap.get(doc.id);
|
|
129
|
+
const remoteTime = new Date(doc.updated_at);
|
|
130
|
+
if (!local) {
|
|
131
|
+
// New document - pull it
|
|
132
|
+
toPull.push({ doc, reason: 'new', remoteTime });
|
|
133
|
+
}
|
|
134
|
+
else if (remoteTime > local.mtime) {
|
|
135
|
+
// Remote is newer - pull it
|
|
136
|
+
toPull.push({ doc, reason: 'updated', localTime: local.mtime, remoteTime });
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
// Local is up-to-date or newer - skip
|
|
140
|
+
toSkip.push(doc);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
spinner.stop();
|
|
144
|
+
// If nothing to pull, we're done
|
|
145
|
+
if (toPull.length === 0) {
|
|
146
|
+
console.log(chalk.green(`\n✅ All ${documents.length} document(s) are up to date!`));
|
|
147
|
+
console.log(chalk.dim('No changes to pull.\n'));
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
// Show preview
|
|
151
|
+
console.log(chalk.blue(`\n📄 Found ${toPull.length} document(s) to pull:\n`));
|
|
152
|
+
const newDocs = toPull.filter(item => item.reason === 'new');
|
|
153
|
+
const updatedDocs = toPull.filter(item => item.reason === 'updated');
|
|
154
|
+
if (newDocs.length > 0) {
|
|
155
|
+
console.log(chalk.cyan('New documents:'));
|
|
156
|
+
newDocs.forEach((item, idx) => {
|
|
157
|
+
console.log(chalk.gray(` ${idx + 1}. ${item.doc.title} (created ${formatRelativeTime(item.remoteTime)})`));
|
|
158
|
+
});
|
|
159
|
+
console.log();
|
|
160
|
+
}
|
|
161
|
+
if (updatedDocs.length > 0) {
|
|
162
|
+
console.log(chalk.cyan('Updated documents:'));
|
|
163
|
+
updatedDocs.forEach((item, idx) => {
|
|
164
|
+
const localTime = formatRelativeTime(item.localTime);
|
|
165
|
+
const remoteTime = formatRelativeTime(item.remoteTime);
|
|
166
|
+
console.log(chalk.gray(` ${idx + 1}. ${item.doc.title} (Local: ${localTime}, Remote: ${remoteTime})`));
|
|
167
|
+
});
|
|
168
|
+
console.log();
|
|
169
|
+
}
|
|
170
|
+
if (toSkip.length > 0) {
|
|
171
|
+
console.log(chalk.dim(`⏭️ ${toSkip.length} document(s) already up to date\n`));
|
|
172
|
+
}
|
|
173
|
+
console.log(chalk.blue('📁 Sync Location'));
|
|
174
|
+
console.log(chalk.gray(` Will sync to: ${flat ? '.' : './KaimonDocs'}\n`));
|
|
175
|
+
// Show confirmation before syncing (unless --yes flag)
|
|
176
|
+
if (!skipConfirmation) {
|
|
177
|
+
const readline = await import('readline');
|
|
178
|
+
const rl = readline.createInterface({
|
|
179
|
+
input: process.stdin,
|
|
180
|
+
output: process.stdout
|
|
181
|
+
});
|
|
182
|
+
const answer = await new Promise((resolve) => {
|
|
183
|
+
rl.question(chalk.cyan('Continue? (y/N): '), (ans) => {
|
|
184
|
+
rl.close();
|
|
185
|
+
resolve(ans);
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
if (answer.toLowerCase() !== 'y' && answer.toLowerCase() !== 'yes') {
|
|
189
|
+
console.log(chalk.yellow('\n⚠️ Pull cancelled.\n'));
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
spinner.start();
|
|
194
|
+
spinner.text = `Pulling ${toPull.length} document(s)...`;
|
|
90
195
|
// Create docs directory if it doesn't exist
|
|
91
196
|
if (!fs.existsSync(docsDir)) {
|
|
92
197
|
fs.mkdirSync(docsDir, { recursive: true });
|
|
@@ -94,8 +199,9 @@ export async function pullDocuments(flat = false) {
|
|
|
94
199
|
let successCount = 0;
|
|
95
200
|
let errorCount = 0;
|
|
96
201
|
const errors = [];
|
|
97
|
-
// Download
|
|
98
|
-
for (const
|
|
202
|
+
// Download only documents in toPull array
|
|
203
|
+
for (const item of toPull) {
|
|
204
|
+
const doc = item.doc;
|
|
99
205
|
try {
|
|
100
206
|
const documentPath = getDocumentPath(doc.user_id, doc.id);
|
|
101
207
|
// Download from Supabase Storage
|
|
@@ -105,7 +211,8 @@ export async function pullDocuments(flat = false) {
|
|
|
105
211
|
if (downloadError) {
|
|
106
212
|
// Handle missing file gracefully
|
|
107
213
|
if (downloadError.message.includes('not found')) {
|
|
108
|
-
|
|
214
|
+
errors.push(`${doc.title}: file not found in storage`);
|
|
215
|
+
errorCount++;
|
|
109
216
|
continue;
|
|
110
217
|
}
|
|
111
218
|
throw downloadError;
|
|
@@ -122,25 +229,26 @@ export async function pullDocuments(flat = false) {
|
|
|
122
229
|
markdown = content.content;
|
|
123
230
|
}
|
|
124
231
|
else {
|
|
125
|
-
|
|
232
|
+
errors.push(`${doc.title}: unsupported format`);
|
|
233
|
+
errorCount++;
|
|
126
234
|
continue;
|
|
127
235
|
}
|
|
128
236
|
// Generate filename
|
|
129
237
|
const filename = sanitizeFilename(doc.title) + '.md';
|
|
130
238
|
const filepath = path.join(docsDir, filename);
|
|
131
|
-
//
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
'',
|
|
140
|
-
markdown
|
|
141
|
-
].join('\n');
|
|
239
|
+
// Create frontmatter
|
|
240
|
+
const frontmatterData = {
|
|
241
|
+
title: doc.title,
|
|
242
|
+
kaimon_id: doc.id,
|
|
243
|
+
created_at: doc.created_at,
|
|
244
|
+
updated_at: doc.updated_at
|
|
245
|
+
};
|
|
246
|
+
const fullContent = combineFrontmatterAndMarkdown(frontmatterData, markdown);
|
|
142
247
|
// Write to file
|
|
143
|
-
fs.writeFileSync(filepath,
|
|
248
|
+
fs.writeFileSync(filepath, fullContent, 'utf-8');
|
|
249
|
+
// Update file mtime to match remote updated_at (for accurate next sync)
|
|
250
|
+
const remoteTime = new Date(doc.updated_at);
|
|
251
|
+
fs.utimesSync(filepath, remoteTime, remoteTime);
|
|
144
252
|
successCount++;
|
|
145
253
|
}
|
|
146
254
|
catch (error) {
|
|
@@ -149,13 +257,15 @@ export async function pullDocuments(flat = false) {
|
|
|
149
257
|
}
|
|
150
258
|
}
|
|
151
259
|
// Show results
|
|
152
|
-
|
|
153
|
-
|
|
260
|
+
spinner.succeed(chalk.green(`✅ Pulled ${successCount} document(s)`));
|
|
261
|
+
if (toSkip.length > 0) {
|
|
262
|
+
console.log(chalk.dim(`⏭️ Skipped ${toSkip.length} up-to-date document(s)`));
|
|
263
|
+
}
|
|
154
264
|
if (errorCount > 0) {
|
|
155
265
|
console.log(chalk.yellow(`\n⚠️ ${errorCount} error(s) occurred:`));
|
|
156
266
|
errors.forEach(err => console.log(chalk.dim(` - ${err}`)));
|
|
157
267
|
}
|
|
158
|
-
console.log(
|
|
268
|
+
console.log();
|
|
159
269
|
}
|
|
160
270
|
catch (error) {
|
|
161
271
|
spinner.fail(chalk.red('Failed to pull documents'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"syncOperations.js","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"syncOperations.js","sourceRoot":"","sources":["../../src/utils/syncOperations.ts"],"names":[],"mappings":"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"}
|