@lovelybunch/core 1.0.3
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/dist/change-proposal.d.ts +71 -0
- package/dist/change-proposal.d.ts.map +1 -0
- package/dist/change-proposal.js +205 -0
- package/dist/change-proposal.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown-storage.d.ts +34 -0
- package/dist/markdown-storage.d.ts.map +1 -0
- package/dist/markdown-storage.js +356 -0
- package/dist/markdown-storage.js.map +1 -0
- package/dist/migration.d.ts +57 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +250 -0
- package/dist/migration.js.map +1 -0
- package/dist/storage.d.ts +57 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +403 -0
- package/dist/storage.js.map +1 -0
- package/dist/unified-storage.d.ts +59 -0
- package/dist/unified-storage.d.ts.map +1 -0
- package/dist/unified-storage.js +199 -0
- package/dist/unified-storage.js.map +1 -0
- package/dist/validation.d.ts +62 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +500 -0
- package/dist/validation.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
import { promises as fs } from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import { FileStorageAdapter } from './storage.js';
|
|
4
|
+
import { MarkdownStorageAdapter } from './markdown-storage.js';
|
|
5
|
+
export class MigrationManager {
|
|
6
|
+
jsonStorage;
|
|
7
|
+
markdownStorage;
|
|
8
|
+
constructor(basePath = '.gait') {
|
|
9
|
+
this.jsonStorage = new FileStorageAdapter(basePath);
|
|
10
|
+
this.markdownStorage = new MarkdownStorageAdapter(basePath);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Migrate all JSON proposals to markdown format
|
|
14
|
+
*/
|
|
15
|
+
async migrateToMarkdown(options = {}) {
|
|
16
|
+
const { backupOriginals = true, dryRun = false } = options;
|
|
17
|
+
const result = {
|
|
18
|
+
success: true,
|
|
19
|
+
migratedCount: 0,
|
|
20
|
+
errors: []
|
|
21
|
+
};
|
|
22
|
+
try {
|
|
23
|
+
// Load all existing JSON proposals
|
|
24
|
+
const jsonProposals = await this.jsonStorage.loadAllProposals();
|
|
25
|
+
if (jsonProposals.length === 0) {
|
|
26
|
+
return result;
|
|
27
|
+
}
|
|
28
|
+
// Create backup if requested
|
|
29
|
+
if (backupOriginals && !dryRun) {
|
|
30
|
+
result.backupPath = await this.createBackup();
|
|
31
|
+
}
|
|
32
|
+
// Initialize markdown storage
|
|
33
|
+
if (!dryRun) {
|
|
34
|
+
await this.markdownStorage.init();
|
|
35
|
+
}
|
|
36
|
+
// Migrate each proposal
|
|
37
|
+
for (const proposal of jsonProposals) {
|
|
38
|
+
try {
|
|
39
|
+
if (dryRun) {
|
|
40
|
+
console.log(`Would migrate: ${proposal.id}`);
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// Save as markdown
|
|
44
|
+
await this.markdownStorage.saveProposal(proposal);
|
|
45
|
+
// Remove original JSON file
|
|
46
|
+
await this.jsonStorage.deleteProposal(proposal.id);
|
|
47
|
+
}
|
|
48
|
+
result.migratedCount++;
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
result.errors.push({
|
|
52
|
+
id: proposal.id,
|
|
53
|
+
error: error instanceof Error ? error.message : String(error)
|
|
54
|
+
});
|
|
55
|
+
result.success = false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
result.success = false;
|
|
62
|
+
result.errors.push({
|
|
63
|
+
id: 'migration',
|
|
64
|
+
error: error instanceof Error ? error.message : String(error)
|
|
65
|
+
});
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Migrate from markdown back to JSON (rollback)
|
|
71
|
+
*/
|
|
72
|
+
async migrateToJson(options = {}) {
|
|
73
|
+
const { backupOriginals = true, dryRun = false } = options;
|
|
74
|
+
const result = {
|
|
75
|
+
success: true,
|
|
76
|
+
migratedCount: 0,
|
|
77
|
+
errors: []
|
|
78
|
+
};
|
|
79
|
+
try {
|
|
80
|
+
// Load all existing markdown proposals
|
|
81
|
+
const markdownProposals = await this.markdownStorage.loadAllProposals();
|
|
82
|
+
if (markdownProposals.length === 0) {
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
// Create backup if requested
|
|
86
|
+
if (backupOriginals && !dryRun) {
|
|
87
|
+
result.backupPath = await this.createMarkdownBackup();
|
|
88
|
+
}
|
|
89
|
+
// Initialize JSON storage
|
|
90
|
+
if (!dryRun) {
|
|
91
|
+
await this.jsonStorage.init();
|
|
92
|
+
}
|
|
93
|
+
// Migrate each proposal
|
|
94
|
+
for (const proposal of markdownProposals) {
|
|
95
|
+
try {
|
|
96
|
+
if (dryRun) {
|
|
97
|
+
console.log(`Would migrate: ${proposal.id}`);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
// Save as JSON
|
|
101
|
+
await this.jsonStorage.saveProposal(proposal);
|
|
102
|
+
// Remove original markdown file
|
|
103
|
+
await this.markdownStorage.deleteProposal(proposal.id);
|
|
104
|
+
}
|
|
105
|
+
result.migratedCount++;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
result.errors.push({
|
|
109
|
+
id: proposal.id,
|
|
110
|
+
error: error instanceof Error ? error.message : String(error)
|
|
111
|
+
});
|
|
112
|
+
result.success = false;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
result.success = false;
|
|
119
|
+
result.errors.push({
|
|
120
|
+
id: 'migration',
|
|
121
|
+
error: error instanceof Error ? error.message : String(error)
|
|
122
|
+
});
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Check what format is currently being used
|
|
128
|
+
*/
|
|
129
|
+
async detectCurrentFormat() {
|
|
130
|
+
const proposalsPath = path.join(this.jsonStorage.getBasePath(), 'proposals');
|
|
131
|
+
try {
|
|
132
|
+
const files = await fs.readdir(proposalsPath);
|
|
133
|
+
const jsonFiles = files.filter(f => f.endsWith('.json'));
|
|
134
|
+
const markdownFiles = files.filter(f => f.endsWith('.md'));
|
|
135
|
+
if (jsonFiles.length > 0 && markdownFiles.length > 0) {
|
|
136
|
+
return 'mixed';
|
|
137
|
+
}
|
|
138
|
+
else if (jsonFiles.length > 0) {
|
|
139
|
+
return 'json';
|
|
140
|
+
}
|
|
141
|
+
else if (markdownFiles.length > 0) {
|
|
142
|
+
return 'markdown';
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
return 'none';
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return 'none';
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Validate that all proposals can be successfully migrated
|
|
154
|
+
*/
|
|
155
|
+
async validateMigration() {
|
|
156
|
+
const issues = [];
|
|
157
|
+
try {
|
|
158
|
+
const proposals = await this.jsonStorage.loadAllProposals();
|
|
159
|
+
for (const proposal of proposals) {
|
|
160
|
+
// Test serialization to markdown
|
|
161
|
+
try {
|
|
162
|
+
await this.markdownStorage.saveProposal(proposal);
|
|
163
|
+
// Test deserialization back
|
|
164
|
+
const loaded = await this.markdownStorage.loadProposal(proposal.id);
|
|
165
|
+
if (!loaded) {
|
|
166
|
+
issues.push(`Failed to load proposal ${proposal.id} after markdown conversion`);
|
|
167
|
+
}
|
|
168
|
+
// Clean up test file
|
|
169
|
+
await this.markdownStorage.deleteProposal(proposal.id);
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
issues.push(`Failed to convert proposal ${proposal.id}: ${error}`);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return {
|
|
176
|
+
valid: issues.length === 0,
|
|
177
|
+
issues
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
return {
|
|
182
|
+
valid: false,
|
|
183
|
+
issues: [`Validation failed: ${error}`]
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Create a backup of all JSON proposals
|
|
189
|
+
*/
|
|
190
|
+
async createBackup() {
|
|
191
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
192
|
+
const backupDir = path.join(this.jsonStorage.getBasePath(), `backup-json-${timestamp}`);
|
|
193
|
+
const proposalsPath = path.join(this.jsonStorage.getBasePath(), 'proposals');
|
|
194
|
+
await fs.mkdir(backupDir, { recursive: true });
|
|
195
|
+
const files = await fs.readdir(proposalsPath);
|
|
196
|
+
const jsonFiles = files.filter(f => f.endsWith('.json'));
|
|
197
|
+
for (const file of jsonFiles) {
|
|
198
|
+
const sourcePath = path.join(proposalsPath, file);
|
|
199
|
+
const destPath = path.join(backupDir, file);
|
|
200
|
+
await fs.copyFile(sourcePath, destPath);
|
|
201
|
+
}
|
|
202
|
+
return backupDir;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Create a backup of all markdown proposals
|
|
206
|
+
*/
|
|
207
|
+
async createMarkdownBackup() {
|
|
208
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
209
|
+
const backupDir = path.join(this.markdownStorage.getBasePath(), `backup-markdown-${timestamp}`);
|
|
210
|
+
const proposalsPath = path.join(this.markdownStorage.getBasePath(), 'proposals');
|
|
211
|
+
await fs.mkdir(backupDir, { recursive: true });
|
|
212
|
+
const files = await fs.readdir(proposalsPath);
|
|
213
|
+
const markdownFiles = files.filter(f => f.endsWith('.md'));
|
|
214
|
+
for (const file of markdownFiles) {
|
|
215
|
+
const sourcePath = path.join(proposalsPath, file);
|
|
216
|
+
const destPath = path.join(backupDir, file);
|
|
217
|
+
await fs.copyFile(sourcePath, destPath);
|
|
218
|
+
}
|
|
219
|
+
return backupDir;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Get migration statistics
|
|
223
|
+
*/
|
|
224
|
+
async getMigrationStats() {
|
|
225
|
+
const format = await this.detectCurrentFormat();
|
|
226
|
+
const proposalsPath = path.join(this.jsonStorage.getBasePath(), 'proposals');
|
|
227
|
+
try {
|
|
228
|
+
const files = await fs.readdir(proposalsPath);
|
|
229
|
+
const jsonCount = files.filter(f => f.endsWith('.json')).length;
|
|
230
|
+
const markdownCount = files.filter(f => f.endsWith('.md')).length;
|
|
231
|
+
return {
|
|
232
|
+
format,
|
|
233
|
+
jsonCount,
|
|
234
|
+
markdownCount,
|
|
235
|
+
totalCount: jsonCount + markdownCount
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
catch {
|
|
239
|
+
return {
|
|
240
|
+
format: 'none',
|
|
241
|
+
jsonCount: 0,
|
|
242
|
+
markdownCount: 0,
|
|
243
|
+
totalCount: 0
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
// Export a singleton instance
|
|
249
|
+
export const migrationManager = new MigrationManager();
|
|
250
|
+
//# sourceMappingURL=migration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["../src/migration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { ChangeProposal, GaitConfig, Agent } from '@lovelybunch/types';
|
|
2
|
+
import { MarkdownStorageAdapter } from './markdown-storage.js';
|
|
3
|
+
export interface StorageAdapter {
|
|
4
|
+
init(): Promise<void>;
|
|
5
|
+
saveProposal(proposal: ChangeProposal): Promise<void>;
|
|
6
|
+
loadProposal(id: string): Promise<ChangeProposal | null>;
|
|
7
|
+
loadAllProposals(): Promise<ChangeProposal[]>;
|
|
8
|
+
deleteProposal(id: string): Promise<boolean>;
|
|
9
|
+
saveConfig(config: GaitConfig): Promise<void>;
|
|
10
|
+
loadConfig(): Promise<GaitConfig | null>;
|
|
11
|
+
saveAgent(agent: Agent): Promise<void>;
|
|
12
|
+
loadAgent(id: string): Promise<Agent | null>;
|
|
13
|
+
loadAllAgents(): Promise<Agent[]>;
|
|
14
|
+
deleteAgent(id: string): Promise<boolean>;
|
|
15
|
+
}
|
|
16
|
+
export declare class FileStorageAdapter implements StorageAdapter {
|
|
17
|
+
private basePath;
|
|
18
|
+
private proposalsPath;
|
|
19
|
+
private configPath;
|
|
20
|
+
private agentsPath;
|
|
21
|
+
constructor(basePath?: string);
|
|
22
|
+
init(): Promise<void>;
|
|
23
|
+
private createContextSystem;
|
|
24
|
+
private copyTemplateFiles;
|
|
25
|
+
private getTemplatePath;
|
|
26
|
+
private copyTemplateDirectory;
|
|
27
|
+
private processTemplateContent;
|
|
28
|
+
private createMinimalContext;
|
|
29
|
+
private createContextFile;
|
|
30
|
+
saveProposal(proposal: ChangeProposal): Promise<void>;
|
|
31
|
+
loadProposal(id: string): Promise<ChangeProposal | null>;
|
|
32
|
+
loadAllProposals(): Promise<ChangeProposal[]>;
|
|
33
|
+
deleteProposal(id: string): Promise<boolean>;
|
|
34
|
+
saveConfig(config: GaitConfig): Promise<void>;
|
|
35
|
+
loadConfig(): Promise<GaitConfig | null>;
|
|
36
|
+
private fileExists;
|
|
37
|
+
private hydrateDates;
|
|
38
|
+
/**
|
|
39
|
+
* Check if GAIT is initialized in the current directory
|
|
40
|
+
*/
|
|
41
|
+
isInitialized(): Promise<boolean>;
|
|
42
|
+
/**
|
|
43
|
+
* Get the base path for storage
|
|
44
|
+
*/
|
|
45
|
+
getBasePath(): string;
|
|
46
|
+
saveAgent(agent: Agent): Promise<void>;
|
|
47
|
+
private findAgentPath;
|
|
48
|
+
private pathToId;
|
|
49
|
+
loadAgent(id: string): Promise<Agent | null>;
|
|
50
|
+
loadAllAgents(): Promise<Agent[]>;
|
|
51
|
+
private findAgentFiles;
|
|
52
|
+
deleteAgent(id: string): Promise<boolean>;
|
|
53
|
+
private agentToMarkdown;
|
|
54
|
+
private markdownToAgent;
|
|
55
|
+
}
|
|
56
|
+
export declare const fileStorage: MarkdownStorageAdapter;
|
|
57
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,WAAW,cAAc;IAC7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACzD,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9C,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IACzC,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;IAC7C,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3C;AAED,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,UAAU,CAAS;gBAEf,QAAQ,GAAE,MAAgB;IAOhC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA0Cb,mBAAmB;YAKnB,iBAAiB;IAe/B,OAAO,CAAC,eAAe;YAQT,qBAAqB;IAuBnC,OAAO,CAAC,sBAAsB;YAShB,oBAAoB;YAsBpB,iBAAiB;IAUzB,YAAY,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAMrD,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAgBxD,gBAAgB,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IAiB7C,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW5C,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAK7C,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;YAShC,UAAU;IASxB,OAAO,CAAC,YAAY;IAmDpB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC;IAIvC;;OAEG;IACH,WAAW,IAAI,MAAM;IAKf,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;YAqB9B,aAAa;IAsB3B,OAAO,CAAC,QAAQ;IAIV,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAyB5C,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAiBzB,cAAc;IAyBtB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAyB/C,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,eAAe;CAkCxB;AAGD,eAAO,MAAM,WAAW,wBAA+B,CAAC"}
|