kaimon-cli 0.1.41 → 0.1.44

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 (74) hide show
  1. package/README.md +56 -0
  2. package/dist/__tests__/commands/pull.test.d.ts +2 -0
  3. package/dist/__tests__/commands/pull.test.d.ts.map +1 -0
  4. package/dist/__tests__/commands/pull.test.js +182 -0
  5. package/dist/__tests__/commands/pull.test.js.map +1 -0
  6. package/dist/__tests__/commands/push.test.d.ts +2 -0
  7. package/dist/__tests__/commands/push.test.d.ts.map +1 -0
  8. package/dist/__tests__/commands/push.test.js +255 -0
  9. package/dist/__tests__/commands/push.test.js.map +1 -0
  10. package/dist/__tests__/helpers.d.ts +49 -0
  11. package/dist/__tests__/helpers.d.ts.map +1 -0
  12. package/dist/__tests__/helpers.js +151 -0
  13. package/dist/__tests__/helpers.js.map +1 -0
  14. package/dist/__tests__/integration/full-workflow.test.d.ts +2 -0
  15. package/dist/__tests__/integration/full-workflow.test.d.ts.map +1 -0
  16. package/dist/__tests__/integration/full-workflow.test.js +213 -0
  17. package/dist/__tests__/integration/full-workflow.test.js.map +1 -0
  18. package/dist/__tests__/setup.d.ts +2 -0
  19. package/dist/__tests__/setup.d.ts.map +1 -0
  20. package/dist/__tests__/setup.js +24 -0
  21. package/dist/__tests__/setup.js.map +1 -0
  22. package/dist/__tests__/unit/utils/config.test.d.ts +2 -0
  23. package/dist/__tests__/unit/utils/config.test.d.ts.map +1 -0
  24. package/dist/__tests__/unit/utils/config.test.js +171 -0
  25. package/dist/__tests__/unit/utils/config.test.js.map +1 -0
  26. package/dist/__tests__/unit/utils/frontmatter.test.d.ts +2 -0
  27. package/dist/__tests__/unit/utils/frontmatter.test.d.ts.map +1 -0
  28. package/dist/__tests__/unit/utils/frontmatter.test.js +231 -0
  29. package/dist/__tests__/unit/utils/frontmatter.test.js.map +1 -0
  30. package/dist/__tests__/unit/utils/markdown.test.d.ts +2 -0
  31. package/dist/__tests__/unit/utils/markdown.test.d.ts.map +1 -0
  32. package/dist/__tests__/unit/utils/markdown.test.js +296 -0
  33. package/dist/__tests__/unit/utils/markdown.test.js.map +1 -0
  34. package/dist/__tests__/unit/utils/projectConfig.test.d.ts +2 -0
  35. package/dist/__tests__/unit/utils/projectConfig.test.d.ts.map +1 -0
  36. package/dist/__tests__/unit/utils/projectConfig.test.js +160 -0
  37. package/dist/__tests__/unit/utils/projectConfig.test.js.map +1 -0
  38. package/dist/__tests__/unit/utils/requireAuth.test.d.ts +2 -0
  39. package/dist/__tests__/unit/utils/requireAuth.test.d.ts.map +1 -0
  40. package/dist/__tests__/unit/utils/requireAuth.test.js +96 -0
  41. package/dist/__tests__/unit/utils/requireAuth.test.js.map +1 -0
  42. package/dist/__tests__/unit/utils/tokenRefresh.test.d.ts +2 -0
  43. package/dist/__tests__/unit/utils/tokenRefresh.test.d.ts.map +1 -0
  44. package/dist/__tests__/unit/utils/tokenRefresh.test.js +170 -0
  45. package/dist/__tests__/unit/utils/tokenRefresh.test.js.map +1 -0
  46. package/dist/__tests__/unit/utils/versionCheck.test.d.ts +2 -0
  47. package/dist/__tests__/unit/utils/versionCheck.test.d.ts.map +1 -0
  48. package/dist/__tests__/unit/utils/versionCheck.test.js +105 -0
  49. package/dist/__tests__/unit/utils/versionCheck.test.js.map +1 -0
  50. package/dist/commands/pull.d.ts.map +1 -1
  51. package/dist/commands/pull.js +2 -1
  52. package/dist/commands/pull.js.map +1 -1
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +9 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/utils/frontmatter.d.ts +28 -0
  57. package/dist/utils/frontmatter.d.ts.map +1 -0
  58. package/dist/utils/frontmatter.js +79 -0
  59. package/dist/utils/frontmatter.js.map +1 -0
  60. package/dist/utils/projectConfig.d.ts.map +1 -1
  61. package/dist/utils/projectConfig.js +9 -1
  62. package/dist/utils/projectConfig.js.map +1 -1
  63. package/dist/utils/pushOperations.d.ts.map +1 -1
  64. package/dist/utils/pushOperations.js +242 -19
  65. package/dist/utils/pushOperations.js.map +1 -1
  66. package/dist/utils/syncOperations.d.ts +2 -1
  67. package/dist/utils/syncOperations.d.ts.map +1 -1
  68. package/dist/utils/syncOperations.js +153 -43
  69. package/dist/utils/syncOperations.js.map +1 -1
  70. package/dist/utils/versionCheck.d.ts +6 -0
  71. package/dist/utils/versionCheck.d.ts.map +1 -0
  72. package/dist/utils/versionCheck.js +61 -0
  73. package/dist/utils/versionCheck.js.map +1 -0
  74. package/package.json +2 -1
@@ -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 = 'Querying database...';
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
- spinner.text = `Found ${documents.length} document(s), downloading...`;
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 each document
98
- for (const doc of documents) {
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
- spinner.warn(chalk.yellow(`⚠️ Skipping "${doc.title}" - file not found in storage`));
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
- spinner.warn(chalk.yellow(`⚠️ Skipping "${doc.title}" - unsupported format`));
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
- // Add frontmatter with metadata
132
- const frontmatter = [
133
- '---',
134
- `title: "${doc.title}"`,
135
- `kaimon_id: "${doc.id}"`,
136
- `created_at: "${doc.created_at}"`,
137
- `updated_at: "${doc.updated_at}"`,
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, frontmatter, 'utf-8');
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
- const relativeDocsDir = flat ? '.' : './KaimonDocs';
153
- spinner.succeed(chalk.green(`✅ Downloaded ${successCount} document(s) to ${relativeDocsDir}/`));
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(chalk.gray(`\nLast synced: ${new Date().toLocaleString()}\n`));
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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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Check if current version is outdated and warn user
3
+ * Minimum version is read from package.json
4
+ */
5
+ export declare function checkVersion(): Promise<void>;
6
+ //# sourceMappingURL=versionCheck.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCheck.d.ts","sourceRoot":"","sources":["../../src/utils/versionCheck.ts"],"names":[],"mappings":"AAsCA;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBlD"}
@@ -0,0 +1,61 @@
1
+ import { readFileSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import chalk from 'chalk';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = dirname(__filename);
7
+ /**
8
+ * Compare two semantic versions
9
+ * Returns: -1 if v1 < v2, 0 if equal, 1 if v1 > v2
10
+ */
11
+ function compareVersions(v1, v2) {
12
+ const parts1 = v1.split('.').map(Number);
13
+ const parts2 = v2.split('.').map(Number);
14
+ for (let i = 0; i < Math.max(parts1.length, parts2.length); i++) {
15
+ const p1 = parts1[i] || 0;
16
+ const p2 = parts2[i] || 0;
17
+ if (p1 > p2)
18
+ return 1;
19
+ if (p1 < p2)
20
+ return -1;
21
+ }
22
+ return 0;
23
+ }
24
+ /**
25
+ * Get the current CLI version from package.json
26
+ */
27
+ function getCurrentVersion() {
28
+ try {
29
+ const packagePath = join(__dirname, '../../package.json');
30
+ const packageData = JSON.parse(readFileSync(packagePath, 'utf-8'));
31
+ return packageData.version || '0.0.0';
32
+ }
33
+ catch (error) {
34
+ return '0.0.0';
35
+ }
36
+ }
37
+ /**
38
+ * Check if current version is outdated and warn user
39
+ * Minimum version is read from package.json
40
+ */
41
+ export async function checkVersion() {
42
+ try {
43
+ const currentVersion = getCurrentVersion();
44
+ const packagePath = join(__dirname, '../../package.json');
45
+ const packageData = JSON.parse(readFileSync(packagePath, 'utf-8'));
46
+ const minimumVersion = packageData.minimumVersion || packageData.version;
47
+ if (compareVersions(currentVersion, minimumVersion) < 0) {
48
+ console.error(chalk.yellow(`\n⚠️ Update Available\n`) +
49
+ chalk.gray(`Your kaimon-cli version (${currentVersion}) is outdated.\n`) +
50
+ chalk.gray(`Please upgrade to the latest version:\n\n`) +
51
+ chalk.cyan(` npm install -g kaimon-cli@latest\n`) +
52
+ chalk.gray(`This version may have bugs or missing features.\n`));
53
+ process.exit(1);
54
+ }
55
+ }
56
+ catch (error) {
57
+ // Silently fail if version check encounters issues
58
+ // Don't block CLI execution on version check errors
59
+ }
60
+ }
61
+ //# sourceMappingURL=versionCheck.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionCheck.js","sourceRoot":"","sources":["../../src/utils/versionCheck.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;;GAGG;AACH,SAAS,eAAe,CAAC,EAAU,EAAE,EAAU;IAC7C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,CAAC,CAAC,CAAC;IACzB,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,OAAO,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,iBAAiB,EAAE,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,oBAAoB,CAAC,CAAC;QAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,cAAc,GAAG,WAAW,CAAC,cAAc,IAAI,WAAW,CAAC,OAAO,CAAC;QAEzE,IAAI,eAAe,CAAC,cAAc,EAAE,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,KAAK,CACX,KAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC;gBACtC,KAAK,CAAC,IAAI,CAAC,4BAA4B,cAAc,kBAAkB,CAAC;gBACxE,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC;gBAClD,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAClE,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mDAAmD;QACnD,oDAAoD;IACtD,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "kaimon-cli",
3
- "version": "0.1.41",
3
+ "version": "0.1.44",
4
+ "minimumVersion": "0.1.43",
4
5
  "description": "CLI tool to sync Kaimon files (.md) with your codebase",
5
6
  "type": "module",
6
7
  "bin": {