resumate 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +98 -0
- package/dist/cli/commands/add.d.ts +8 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +47 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/archive.d.ts +6 -0
- package/dist/cli/commands/archive.d.ts.map +1 -0
- package/dist/cli/commands/archive.js +276 -0
- package/dist/cli/commands/archive.js.map +1 -0
- package/dist/cli/commands/draft.d.ts +2 -0
- package/dist/cli/commands/draft.d.ts.map +1 -0
- package/dist/cli/commands/draft.js +45 -0
- package/dist/cli/commands/draft.js.map +1 -0
- package/dist/cli/commands/init.d.ts +3 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +85 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +8 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +119 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/refine.d.ts +7 -0
- package/dist/cli/commands/refine.d.ts.map +1 -0
- package/dist/cli/commands/refine.js +148 -0
- package/dist/cli/commands/refine.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/utils/prompts.d.ts +10 -0
- package/dist/cli/utils/prompts.d.ts.map +1 -0
- package/dist/cli/utils/prompts.js +90 -0
- package/dist/cli/utils/prompts.js.map +1 -0
- package/dist/cli/utils/validation.d.ts +15 -0
- package/dist/cli/utils/validation.d.ts.map +1 -0
- package/dist/cli/utils/validation.js +166 -0
- package/dist/cli/utils/validation.js.map +1 -0
- package/dist/models/config.d.ts +23 -0
- package/dist/models/config.d.ts.map +1 -0
- package/dist/models/config.js +22 -0
- package/dist/models/config.js.map +1 -0
- package/dist/models/experience.d.ts +239 -0
- package/dist/models/experience.d.ts.map +1 -0
- package/dist/models/experience.js +16 -0
- package/dist/models/experience.js.map +1 -0
- package/dist/services/archive-analyzer.d.ts +13 -0
- package/dist/services/archive-analyzer.d.ts.map +1 -0
- package/dist/services/archive-analyzer.js +106 -0
- package/dist/services/archive-analyzer.js.map +1 -0
- package/dist/services/draft-analyzer.d.ts +7 -0
- package/dist/services/draft-analyzer.d.ts.map +1 -0
- package/dist/services/draft-analyzer.js +205 -0
- package/dist/services/draft-analyzer.js.map +1 -0
- package/dist/services/experience-locator.d.ts +31 -0
- package/dist/services/experience-locator.d.ts.map +1 -0
- package/dist/services/experience-locator.js +162 -0
- package/dist/services/experience-locator.js.map +1 -0
- package/dist/services/experience-manager.d.ts +52 -0
- package/dist/services/experience-manager.d.ts.map +1 -0
- package/dist/services/experience-manager.js +157 -0
- package/dist/services/experience-manager.js.map +1 -0
- package/dist/services/file-manager.d.ts +18 -0
- package/dist/services/file-manager.d.ts.map +1 -0
- package/dist/services/file-manager.js +90 -0
- package/dist/services/file-manager.js.map +1 -0
- package/dist/services/markdown-processor.d.ts +17 -0
- package/dist/services/markdown-processor.d.ts.map +1 -0
- package/dist/services/markdown-processor.js +57 -0
- package/dist/services/markdown-processor.js.map +1 -0
- package/dist/services/migration-service.d.ts +74 -0
- package/dist/services/migration-service.d.ts.map +1 -0
- package/dist/services/migration-service.js +392 -0
- package/dist/services/migration-service.js.map +1 -0
- package/dist/services/slug-generator.d.ts +5 -0
- package/dist/services/slug-generator.d.ts.map +1 -0
- package/dist/services/slug-generator.js +31 -0
- package/dist/services/slug-generator.js.map +1 -0
- package/dist/services/workflow-manager.d.ts +11 -0
- package/dist/services/workflow-manager.d.ts.map +1 -0
- package/dist/services/workflow-manager.js +33 -0
- package/dist/services/workflow-manager.js.map +1 -0
- package/dist/templates/ai-prompts.d.ts +16 -0
- package/dist/templates/ai-prompts.d.ts.map +1 -0
- package/dist/templates/ai-prompts.js +257 -0
- package/dist/templates/ai-prompts.js.map +1 -0
- package/dist/templates/skills/resumate.archive.md.template +75 -0
- package/dist/templates/skills/resumate.draft.md.template +46 -0
- package/dist/templates/skills/resumate.refine.md.template +94 -0
- package/package.json +59 -0
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import fs from 'fs-extra';
|
|
3
|
+
import crypto from 'node:crypto';
|
|
4
|
+
import { format } from 'date-fns';
|
|
5
|
+
import { directoryExists, fileExists, ensureDirectory, readFile, writeFile, listFiles, } from './file-manager.js';
|
|
6
|
+
import { validateExperienceDirName } from './file-manager.js';
|
|
7
|
+
import { generateSlug, extractDateFromFilename } from './slug-generator.js';
|
|
8
|
+
/**
|
|
9
|
+
* Handles migration from legacy workflow-based structure (drafts/in-progress/archive)
|
|
10
|
+
* to the new experience-based directory structure.
|
|
11
|
+
* Supports dry-run preview, phased execution, backup, rollback, and resume.
|
|
12
|
+
*/
|
|
13
|
+
export class MigrationService {
|
|
14
|
+
config;
|
|
15
|
+
legacyDirs;
|
|
16
|
+
migrationsDir;
|
|
17
|
+
constructor(config) {
|
|
18
|
+
this.config = config;
|
|
19
|
+
this.legacyDirs = {
|
|
20
|
+
drafts: path.join(config.rootDir, 'drafts'),
|
|
21
|
+
inProgress: path.join(config.rootDir, 'in-progress'),
|
|
22
|
+
archive: path.join(config.rootDir, 'archive'),
|
|
23
|
+
};
|
|
24
|
+
this.migrationsDir = path.join(config.resumateDir, 'migrations');
|
|
25
|
+
}
|
|
26
|
+
/** Checks if any legacy directories (drafts, in-progress, archive) exist. */
|
|
27
|
+
async hasLegacyStructure() {
|
|
28
|
+
return ((await directoryExists(this.legacyDirs.drafts)) ||
|
|
29
|
+
(await directoryExists(this.legacyDirs.inProgress)) ||
|
|
30
|
+
(await directoryExists(this.legacyDirs.archive)));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Previews the migration plan without making any changes.
|
|
34
|
+
* @throws If no legacy structure exists
|
|
35
|
+
*/
|
|
36
|
+
async previewMigration() {
|
|
37
|
+
if (!(await this.hasLegacyStructure())) {
|
|
38
|
+
throw new Error('No old structure found to migrate.\n\nThis project already uses the experience-based structure.');
|
|
39
|
+
}
|
|
40
|
+
const scanned = await this.scanPhase();
|
|
41
|
+
const { groups, conflicts, unmappedFiles } = this.groupingPhase(scanned);
|
|
42
|
+
const mappings = this.createMappings(groups);
|
|
43
|
+
return {
|
|
44
|
+
experiences: mappings,
|
|
45
|
+
conflicts,
|
|
46
|
+
unmappedFiles,
|
|
47
|
+
summary: {
|
|
48
|
+
filesTotal: scanned.length,
|
|
49
|
+
experiencesTotal: mappings.length,
|
|
50
|
+
conflictsCount: conflicts.length,
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Executes the full migration: scan, group, validate, convert, verify, and backup.
|
|
56
|
+
* Progress is saved to a manifest file after each experience, enabling resume on failure.
|
|
57
|
+
*/
|
|
58
|
+
async migrate(options = {}) {
|
|
59
|
+
const migrationId = `migration-${format(new Date(), 'yyyyMMdd-HHmmss')}`;
|
|
60
|
+
const backupDir = options.backupDir || path.join(this.config.rootDir, '.backup', migrationId);
|
|
61
|
+
const errors = [];
|
|
62
|
+
const manifest = {
|
|
63
|
+
migrationId,
|
|
64
|
+
startedAt: new Date().toISOString(),
|
|
65
|
+
phase: 'scanning',
|
|
66
|
+
progress: { filesScanned: 0, filesTotal: 0, experiencesCreated: 0, experiencesTotal: 0 },
|
|
67
|
+
experiences: [],
|
|
68
|
+
errors: [],
|
|
69
|
+
config: { rootDir: this.config.rootDir, backupDir, dryRun: options.dryRun || false },
|
|
70
|
+
};
|
|
71
|
+
try {
|
|
72
|
+
// Phase 1: Scan
|
|
73
|
+
manifest.phase = 'scanning';
|
|
74
|
+
const scanned = await this.scanPhase();
|
|
75
|
+
manifest.progress.filesScanned = scanned.length;
|
|
76
|
+
manifest.progress.filesTotal = scanned.length;
|
|
77
|
+
// Phase 2: Group
|
|
78
|
+
manifest.phase = 'grouping';
|
|
79
|
+
const { groups, unmappedFiles } = this.groupingPhase(scanned);
|
|
80
|
+
const mappings = this.createMappings(groups);
|
|
81
|
+
manifest.experiences = mappings;
|
|
82
|
+
manifest.progress.experiencesTotal = mappings.length;
|
|
83
|
+
if (options.dryRun) {
|
|
84
|
+
manifest.phase = 'completed';
|
|
85
|
+
manifest.completedAt = new Date().toISOString();
|
|
86
|
+
return {
|
|
87
|
+
success: true,
|
|
88
|
+
migrationId,
|
|
89
|
+
experiencesCreated: mappings.length,
|
|
90
|
+
errors: [],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// Phase 3: Validate
|
|
94
|
+
manifest.phase = 'validating';
|
|
95
|
+
await this.saveManifest(manifest);
|
|
96
|
+
// Phase 4: Convert
|
|
97
|
+
manifest.phase = 'converting';
|
|
98
|
+
await ensureDirectory(this.config.experiencesDir);
|
|
99
|
+
for (const mapping of mappings) {
|
|
100
|
+
try {
|
|
101
|
+
mapping.status = 'in-progress';
|
|
102
|
+
await this.convertExperience(mapping);
|
|
103
|
+
mapping.status = 'completed';
|
|
104
|
+
manifest.progress.experiencesCreated++;
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
108
|
+
mapping.status = 'failed';
|
|
109
|
+
mapping.error = message;
|
|
110
|
+
errors.push({
|
|
111
|
+
phase: 'converting',
|
|
112
|
+
filepath: mapping.experienceDir,
|
|
113
|
+
message,
|
|
114
|
+
timestamp: new Date().toISOString(),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
await this.saveManifest(manifest);
|
|
118
|
+
}
|
|
119
|
+
// Phase 5: Verify
|
|
120
|
+
manifest.phase = 'verifying';
|
|
121
|
+
for (const mapping of mappings.filter(m => m.status === 'completed')) {
|
|
122
|
+
const verified = await this.verifyExperience(mapping);
|
|
123
|
+
if (!verified) {
|
|
124
|
+
errors.push({
|
|
125
|
+
phase: 'verifying',
|
|
126
|
+
filepath: mapping.experienceDir,
|
|
127
|
+
message: 'Content verification failed',
|
|
128
|
+
timestamp: new Date().toISOString(),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
// Phase 6: Backup old directories
|
|
133
|
+
manifest.phase = 'cleanup';
|
|
134
|
+
await ensureDirectory(backupDir);
|
|
135
|
+
for (const [name, dirPath] of Object.entries(this.legacyDirs)) {
|
|
136
|
+
if (await directoryExists(dirPath)) {
|
|
137
|
+
await fs.copy(dirPath, path.join(backupDir, name));
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
manifest.phase = 'completed';
|
|
141
|
+
manifest.completedAt = new Date().toISOString();
|
|
142
|
+
manifest.errors = errors;
|
|
143
|
+
await this.saveManifest(manifest);
|
|
144
|
+
return {
|
|
145
|
+
success: errors.length === 0,
|
|
146
|
+
migrationId,
|
|
147
|
+
experiencesCreated: manifest.progress.experiencesCreated,
|
|
148
|
+
errors,
|
|
149
|
+
};
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
manifest.phase = 'failed';
|
|
153
|
+
manifest.errors = errors;
|
|
154
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
155
|
+
manifest.errors.push({
|
|
156
|
+
phase: manifest.phase,
|
|
157
|
+
message,
|
|
158
|
+
timestamp: new Date().toISOString(),
|
|
159
|
+
});
|
|
160
|
+
await this.saveManifest(manifest);
|
|
161
|
+
throw err;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Removes legacy directories after a completed migration.
|
|
166
|
+
* @throws If the migration is not found or not completed
|
|
167
|
+
*/
|
|
168
|
+
async cleanup(migrationId) {
|
|
169
|
+
const manifest = await this.loadManifest(migrationId);
|
|
170
|
+
if (!manifest) {
|
|
171
|
+
throw new Error(`Migration not found: ${migrationId}`);
|
|
172
|
+
}
|
|
173
|
+
if (manifest.phase !== 'completed') {
|
|
174
|
+
throw new Error(`Migration ${migrationId} is not completed (phase: ${manifest.phase})`);
|
|
175
|
+
}
|
|
176
|
+
// Remove old directories
|
|
177
|
+
for (const dirPath of Object.values(this.legacyDirs)) {
|
|
178
|
+
if (await directoryExists(dirPath)) {
|
|
179
|
+
await fs.remove(dirPath);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Rolls back a migration by removing created experience directories
|
|
185
|
+
* and restoring legacy directories from backup.
|
|
186
|
+
*/
|
|
187
|
+
async rollbackMigration(migrationId) {
|
|
188
|
+
const manifest = await this.loadManifest(migrationId);
|
|
189
|
+
if (!manifest) {
|
|
190
|
+
throw new Error(`Migration not found: ${migrationId}`);
|
|
191
|
+
}
|
|
192
|
+
// Remove created experience directories
|
|
193
|
+
for (const mapping of manifest.experiences.filter(m => m.status === 'completed')) {
|
|
194
|
+
const dirPath = path.join(this.config.experiencesDir, mapping.experienceDir);
|
|
195
|
+
if (await directoryExists(dirPath)) {
|
|
196
|
+
await fs.remove(dirPath);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// Restore from backup if it exists
|
|
200
|
+
if (await directoryExists(manifest.config.backupDir)) {
|
|
201
|
+
for (const [name, dirPath] of Object.entries(this.legacyDirs)) {
|
|
202
|
+
const backupPath = path.join(manifest.config.backupDir, name);
|
|
203
|
+
if (await directoryExists(backupPath)) {
|
|
204
|
+
await fs.copy(backupPath, dirPath);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
manifest.phase = 'failed';
|
|
209
|
+
await this.saveManifest(manifest);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Resumes a previously interrupted migration, retrying pending and failed experiences.
|
|
213
|
+
* @throws If the migration is not found
|
|
214
|
+
*/
|
|
215
|
+
async resumeMigration(migrationId) {
|
|
216
|
+
const manifest = await this.loadManifest(migrationId);
|
|
217
|
+
if (!manifest) {
|
|
218
|
+
throw new Error(`Migration not found: ${migrationId}`);
|
|
219
|
+
}
|
|
220
|
+
const errors = [...manifest.errors];
|
|
221
|
+
manifest.phase = 'converting';
|
|
222
|
+
for (const mapping of manifest.experiences.filter(m => m.status === 'pending' || m.status === 'failed')) {
|
|
223
|
+
try {
|
|
224
|
+
mapping.status = 'in-progress';
|
|
225
|
+
await this.convertExperience(mapping);
|
|
226
|
+
mapping.status = 'completed';
|
|
227
|
+
manifest.progress.experiencesCreated++;
|
|
228
|
+
}
|
|
229
|
+
catch (err) {
|
|
230
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
231
|
+
mapping.status = 'failed';
|
|
232
|
+
mapping.error = message;
|
|
233
|
+
errors.push({
|
|
234
|
+
phase: 'converting',
|
|
235
|
+
filepath: mapping.experienceDir,
|
|
236
|
+
message,
|
|
237
|
+
timestamp: new Date().toISOString(),
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
await this.saveManifest(manifest);
|
|
241
|
+
}
|
|
242
|
+
manifest.phase = 'completed';
|
|
243
|
+
manifest.completedAt = new Date().toISOString();
|
|
244
|
+
manifest.errors = errors;
|
|
245
|
+
await this.saveManifest(manifest);
|
|
246
|
+
return {
|
|
247
|
+
success: errors.length === 0,
|
|
248
|
+
migrationId,
|
|
249
|
+
experiencesCreated: manifest.progress.experiencesCreated,
|
|
250
|
+
errors,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
async scanPhase() {
|
|
254
|
+
const files = [];
|
|
255
|
+
const sources = [
|
|
256
|
+
{ dir: this.legacyDirs.drafts, source: 'drafts' },
|
|
257
|
+
{ dir: this.legacyDirs.inProgress, source: 'in-progress' },
|
|
258
|
+
{ dir: this.legacyDirs.archive, source: 'archive' },
|
|
259
|
+
];
|
|
260
|
+
for (const { dir, source } of sources) {
|
|
261
|
+
if (!(await directoryExists(dir)))
|
|
262
|
+
continue;
|
|
263
|
+
const mdFiles = await listFiles(dir, '.md');
|
|
264
|
+
for (const filename of mdFiles) {
|
|
265
|
+
const date = extractDateFromFilename(filename);
|
|
266
|
+
const nameWithoutExt = filename.replace('.md', '');
|
|
267
|
+
const slugPart = date
|
|
268
|
+
? nameWithoutExt.replace(/^\d{4}-\d{2}-\d{2}-?/, '')
|
|
269
|
+
: nameWithoutExt;
|
|
270
|
+
const slug = slugPart ? generateSlug(slugPart) : generateSlug(nameWithoutExt);
|
|
271
|
+
files.push({
|
|
272
|
+
source,
|
|
273
|
+
filename,
|
|
274
|
+
filepath: path.join(dir, filename),
|
|
275
|
+
date,
|
|
276
|
+
slug,
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
return files;
|
|
281
|
+
}
|
|
282
|
+
groupingPhase(files) {
|
|
283
|
+
const groups = new Map();
|
|
284
|
+
const conflicts = [];
|
|
285
|
+
const unmappedFiles = [];
|
|
286
|
+
for (const file of files) {
|
|
287
|
+
if (!file.date) {
|
|
288
|
+
unmappedFiles.push(file.filepath);
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
const key = file.slug ? `${file.date}-${file.slug}` : file.date;
|
|
292
|
+
if (!groups.has(key)) {
|
|
293
|
+
groups.set(key, {});
|
|
294
|
+
}
|
|
295
|
+
const group = groups.get(key);
|
|
296
|
+
const versionKey = file.source === 'drafts' ? 'draft'
|
|
297
|
+
: file.source === 'in-progress' ? 'refined'
|
|
298
|
+
: 'archived';
|
|
299
|
+
if (group[versionKey]) {
|
|
300
|
+
// Conflict: multiple files for same slot
|
|
301
|
+
conflicts.push({
|
|
302
|
+
type: 'duplicate-date',
|
|
303
|
+
files: [group[versionKey].filepath, file.filepath],
|
|
304
|
+
message: `Multiple ${versionKey} files found for ${key}`,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
group[versionKey] = file;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { groups, conflicts, unmappedFiles };
|
|
312
|
+
}
|
|
313
|
+
createMappings(groups) {
|
|
314
|
+
const mappings = [];
|
|
315
|
+
for (const [key, group] of groups) {
|
|
316
|
+
let dirName = key;
|
|
317
|
+
// Validate the directory name
|
|
318
|
+
const validation = validateExperienceDirName(dirName);
|
|
319
|
+
if (!validation.valid) {
|
|
320
|
+
// Try to fix: ensure slug part exists
|
|
321
|
+
const parsed = dirName.match(/^(\d{4}-\d{2}-\d{2})-?(.*)$/);
|
|
322
|
+
if (parsed) {
|
|
323
|
+
const slug = parsed[2] ? generateSlug(parsed[2]) : 'unnamed';
|
|
324
|
+
dirName = `${parsed[1]}-${slug}`;
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
dirName = `${dirName}-unnamed`;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
mappings.push({
|
|
331
|
+
experienceDir: dirName,
|
|
332
|
+
sourceFiles: {
|
|
333
|
+
draft: group.draft?.filepath,
|
|
334
|
+
refined: group.refined?.filepath,
|
|
335
|
+
archived: group.archived?.filepath,
|
|
336
|
+
},
|
|
337
|
+
status: 'pending',
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
return mappings;
|
|
341
|
+
}
|
|
342
|
+
async convertExperience(mapping) {
|
|
343
|
+
const dirPath = path.join(this.config.experiencesDir, mapping.experienceDir);
|
|
344
|
+
await ensureDirectory(dirPath);
|
|
345
|
+
const versionMap = [
|
|
346
|
+
{ source: mapping.sourceFiles.draft, dest: 'draft.md' },
|
|
347
|
+
{ source: mapping.sourceFiles.refined, dest: 'refined.md' },
|
|
348
|
+
{ source: mapping.sourceFiles.archived, dest: 'archived.md' },
|
|
349
|
+
];
|
|
350
|
+
mapping.checksums = {};
|
|
351
|
+
for (const { source, dest } of versionMap) {
|
|
352
|
+
if (!source)
|
|
353
|
+
continue;
|
|
354
|
+
const content = await readFile(source);
|
|
355
|
+
await writeFile(path.join(dirPath, dest), content);
|
|
356
|
+
// Calculate checksum
|
|
357
|
+
const hash = crypto.createHash('md5').update(content).digest('hex');
|
|
358
|
+
const key = dest.replace('.md', '');
|
|
359
|
+
mapping.checksums[key] = hash;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
async verifyExperience(mapping) {
|
|
363
|
+
if (!mapping.checksums)
|
|
364
|
+
return true;
|
|
365
|
+
const dirPath = path.join(this.config.experiencesDir, mapping.experienceDir);
|
|
366
|
+
for (const [version, expectedHash] of Object.entries(mapping.checksums)) {
|
|
367
|
+
if (!expectedHash)
|
|
368
|
+
continue;
|
|
369
|
+
const filePath = path.join(dirPath, `${version}.md`);
|
|
370
|
+
if (!(await fileExists(filePath)))
|
|
371
|
+
return false;
|
|
372
|
+
const content = await readFile(filePath);
|
|
373
|
+
const hash = crypto.createHash('md5').update(content).digest('hex');
|
|
374
|
+
if (hash !== expectedHash)
|
|
375
|
+
return false;
|
|
376
|
+
}
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
async saveManifest(manifest) {
|
|
380
|
+
await ensureDirectory(this.migrationsDir);
|
|
381
|
+
const filepath = path.join(this.migrationsDir, `${manifest.migrationId}.json`);
|
|
382
|
+
await writeFile(filepath, JSON.stringify(manifest, null, 2));
|
|
383
|
+
}
|
|
384
|
+
async loadManifest(migrationId) {
|
|
385
|
+
const filepath = path.join(this.migrationsDir, `${migrationId}.json`);
|
|
386
|
+
if (!(await fileExists(filepath)))
|
|
387
|
+
return null;
|
|
388
|
+
const content = await readFile(filepath);
|
|
389
|
+
return JSON.parse(content);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
//# sourceMappingURL=migration-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-service.js","sourceRoot":"","sources":["../../src/services/migration-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function generateSlug(title: string): string;
|
|
2
|
+
export declare function generateDatePrefix(date?: Date): string;
|
|
3
|
+
export declare function generateUniqueFilename(title: string, directory: string, date?: Date): Promise<string>;
|
|
4
|
+
export declare function extractDateFromFilename(filename: string): string | null;
|
|
5
|
+
//# sourceMappingURL=slug-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug-generator.d.ts","sourceRoot":"","sources":["../../src/services/slug-generator.ts"],"names":[],"mappings":"AAMA,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,kBAAkB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAEtD;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,IAAI,GACV,OAAO,CAAC,MAAM,CAAC,CAYjB;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAGvE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { format } from 'date-fns';
|
|
2
|
+
import slugifyModule from 'slugify';
|
|
3
|
+
const slugify = slugifyModule;
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
import { fileExists } from './file-manager.js';
|
|
6
|
+
export function generateSlug(title) {
|
|
7
|
+
return slugify(title, {
|
|
8
|
+
lower: true,
|
|
9
|
+
strict: true,
|
|
10
|
+
trim: true,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function generateDatePrefix(date) {
|
|
14
|
+
return format(date || new Date(), 'yyyy-MM-dd');
|
|
15
|
+
}
|
|
16
|
+
export async function generateUniqueFilename(title, directory, date) {
|
|
17
|
+
const datePrefix = generateDatePrefix(date);
|
|
18
|
+
const slug = generateSlug(title);
|
|
19
|
+
let filename = `${datePrefix}-${slug}.md`;
|
|
20
|
+
let counter = 1;
|
|
21
|
+
while (await fileExists(path.join(directory, filename))) {
|
|
22
|
+
filename = `${datePrefix}-${slug}-${counter}.md`;
|
|
23
|
+
counter++;
|
|
24
|
+
}
|
|
25
|
+
return filename;
|
|
26
|
+
}
|
|
27
|
+
export function extractDateFromFilename(filename) {
|
|
28
|
+
const match = filename.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
29
|
+
return match ? match[1] : null;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=slug-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slug-generator.js","sourceRoot":"","sources":["../../src/services/slug-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,aAAa,MAAM,SAAS,CAAC;AACpC,MAAM,OAAO,GAAG,aAAiH,CAAC;AAClI,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAO,OAAO,CAAC,KAAK,EAAE;QACpB,KAAK,EAAE,IAAI;QACX,MAAM,EAAE,IAAI;QACZ,IAAI,EAAE,IAAI;KACX,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAW;IAC5C,OAAO,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,EAAE,YAAY,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,SAAiB,EACjB,IAAW;IAEX,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,KAAK,CAAC;IAC1C,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,OAAO,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC;QACxD,QAAQ,GAAG,GAAG,UAAU,IAAI,IAAI,IAAI,OAAO,KAAK,CAAC;QACjD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,QAAgB;IACtD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrD,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { LegacyResumateConfig } from '../models/config.js';
|
|
2
|
+
export type LegacyWorkflowConfig = LegacyResumateConfig;
|
|
3
|
+
export type FileLocation = 'drafts' | 'in-progress' | 'archive' | 'not-found';
|
|
4
|
+
export declare function locateFile(filename: string, config: LegacyWorkflowConfig): Promise<{
|
|
5
|
+
location: FileLocation;
|
|
6
|
+
filepath: string;
|
|
7
|
+
}>;
|
|
8
|
+
export declare function moveToDrafts(filepath: string, filename: string, config: LegacyWorkflowConfig): Promise<string>;
|
|
9
|
+
export declare function moveToInProgress(filepath: string, filename: string, config: LegacyWorkflowConfig): Promise<string>;
|
|
10
|
+
export declare function moveToArchive(filepath: string, filename: string, config: LegacyWorkflowConfig): Promise<string>;
|
|
11
|
+
//# sourceMappingURL=workflow-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-manager.d.ts","sourceRoot":"","sources":["../../src/services/workflow-manager.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAEhE,MAAM,MAAM,oBAAoB,GAAG,oBAAoB,CAAC;AAExD,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAE9E,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiBvD;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIpH;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxH;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAIrH"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import { moveFile, fileExists } from './file-manager.js';
|
|
3
|
+
export async function locateFile(filename, config) {
|
|
4
|
+
const draftsPath = path.join(config.draftsDir, filename);
|
|
5
|
+
if (await fileExists(draftsPath)) {
|
|
6
|
+
return { location: 'drafts', filepath: draftsPath };
|
|
7
|
+
}
|
|
8
|
+
const inProgressPath = path.join(config.inProgressDir, filename);
|
|
9
|
+
if (await fileExists(inProgressPath)) {
|
|
10
|
+
return { location: 'in-progress', filepath: inProgressPath };
|
|
11
|
+
}
|
|
12
|
+
const archivePath = path.join(config.archiveDir, filename);
|
|
13
|
+
if (await fileExists(archivePath)) {
|
|
14
|
+
return { location: 'archive', filepath: archivePath };
|
|
15
|
+
}
|
|
16
|
+
return { location: 'not-found', filepath: '' };
|
|
17
|
+
}
|
|
18
|
+
export async function moveToDrafts(filepath, filename, config) {
|
|
19
|
+
const dest = path.join(config.draftsDir, filename);
|
|
20
|
+
await moveFile(filepath, dest);
|
|
21
|
+
return dest;
|
|
22
|
+
}
|
|
23
|
+
export async function moveToInProgress(filepath, filename, config) {
|
|
24
|
+
const dest = path.join(config.inProgressDir, filename);
|
|
25
|
+
await moveFile(filepath, dest);
|
|
26
|
+
return dest;
|
|
27
|
+
}
|
|
28
|
+
export async function moveToArchive(filepath, filename, config) {
|
|
29
|
+
const dest = path.join(config.archiveDir, filename);
|
|
30
|
+
await moveFile(filepath, dest);
|
|
31
|
+
return dest;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=workflow-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-manager.js","sourceRoot":"","sources":["../../src/services/workflow-manager.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAOzD,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,QAAgB,EAChB,MAA4B;IAE5B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACzD,IAAI,MAAM,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QACjC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;IACtD,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACjE,IAAI,MAAM,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACrC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC/D,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC3D,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxD,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAA4B;IACjG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAA4B;IACrG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IACvD,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB,EAAE,QAAgB,EAAE,MAA4B;IAClG,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACpD,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface QuestionTemplate {
|
|
2
|
+
field: string;
|
|
3
|
+
korean: string;
|
|
4
|
+
english: string;
|
|
5
|
+
required: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare const questionTemplates: QuestionTemplate[];
|
|
8
|
+
export declare const COMPLETION_SIGNALS: string[];
|
|
9
|
+
export declare function isCompletionSignal(input: string): boolean;
|
|
10
|
+
export declare function getNextQuestion(answeredFields: string[]): QuestionTemplate | null;
|
|
11
|
+
import type { DraftAnalysis, PromptOutput, ArchiveAnalysis, ArchivePromptOutput } from '../models/experience.js';
|
|
12
|
+
export declare function generateQuestionPrompt(analysis: DraftAnalysis): string;
|
|
13
|
+
export declare function buildPromptOutput(analysis: DraftAnalysis, experienceDir: string): PromptOutput;
|
|
14
|
+
export declare function generateArchivePrompt(analysis: ArchiveAnalysis): string;
|
|
15
|
+
export declare function buildArchivePromptOutput(analysis: ArchiveAnalysis, experienceName: string): ArchivePromptOutput;
|
|
16
|
+
//# sourceMappingURL=ai-prompts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-prompts.d.ts","sourceRoot":"","sources":["../../src/templates/ai-prompts.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,iBAAiB,EAAE,gBAAgB,EAuC/C,CAAC;AAEF,eAAO,MAAM,kBAAkB,UAQ9B,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGzD;AAED,wBAAgB,eAAe,CAC7B,cAAc,EAAE,MAAM,EAAE,GACvB,gBAAgB,GAAG,IAAI,CAOzB;AAED,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAkCjH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAqCtE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,aAAa,EACvB,aAAa,EAAE,MAAM,GACpB,YAAY,CA6Bd;AAID,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CA8FvE;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,MAAM,GACrB,mBAAmB,CAarB"}
|