@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.
@@ -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":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAe/D,MAAM,OAAO,gBAAgB;IACnB,WAAW,CAAqB;IAChC,eAAe,CAAyB;IAEhD,YAAY,WAAmB,OAAO;QACpC,IAAI,CAAC,WAAW,GAAG,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACpD,IAAI,CAAC,eAAe,GAAG,IAAI,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CAAC,UAA4B,EAAE;QACpD,MAAM,EACJ,eAAe,GAAG,IAAI,EACtB,MAAM,GAAG,KAAK,EACf,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;YAEhE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,6BAA6B;YAC7B,IAAI,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAChD,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YACpC,CAAC;YAED,wBAAwB;YACxB,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC;oBACH,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,mBAAmB;wBACnB,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;wBAElD,4BAA4B;wBAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACrD,CAAC;oBAED,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;wBACjB,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CAAC;oBACH,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,UAA4B,EAAE;QAChD,MAAM,EACJ,eAAe,GAAG,IAAI,EACtB,MAAM,GAAG,KAAK,EACf,GAAG,OAAO,CAAC;QAEZ,MAAM,MAAM,GAAoB;YAC9B,OAAO,EAAE,IAAI;YACb,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,EAAE;SACX,CAAC;QAEF,IAAI,CAAC;YACH,uCAAuC;YACvC,MAAM,iBAAiB,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,gBAAgB,EAAE,CAAC;YAExE,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACnC,OAAO,MAAM,CAAC;YAChB,CAAC;YAED,6BAA6B;YAC7B,IAAI,eAAe,IAAI,CAAC,MAAM,EAAE,CAAC;gBAC/B,MAAM,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACxD,CAAC;YAED,0BAA0B;YAC1B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAChC,CAAC;YAED,wBAAwB;YACxB,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE,CAAC;gBACzC,IAAI,CAAC;oBACH,IAAI,MAAM,EAAE,CAAC;wBACX,OAAO,CAAC,GAAG,CAAC,kBAAkB,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC/C,CAAC;yBAAM,CAAC;wBACN,eAAe;wBACf,MAAM,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;wBAE9C,gCAAgC;wBAChC,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACzD,CAAC;oBAED,MAAM,CAAC,aAAa,EAAE,CAAC;gBACzB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;wBACjB,EAAE,EAAE,QAAQ,CAAC,EAAE;wBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;qBAC9D,CAAC,CAAC;oBACH,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;gBACzB,CAAC;YACH,CAAC;YAED,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;YACvB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;gBACjB,EAAE,EAAE,WAAW;gBACf,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;aAC9D,CAAC,CAAC;YACH,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;QAE7E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;YACzD,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAE3D,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrD,OAAO,OAAO,CAAC;YACjB,CAAC;iBAAM,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO,MAAM,CAAC;YAChB,CAAC;iBAAM,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACpC,OAAO,UAAU,CAAC;YACpB,CAAC;iBAAM,CAAC;gBACN,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QACrB,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;YAE5D,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,iCAAiC;gBACjC,IAAI,CAAC;oBACH,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;oBAElD,4BAA4B;oBAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;oBACpE,IAAI,CAAC,MAAM,EAAE,CAAC;wBACZ,MAAM,CAAC,IAAI,CAAC,2BAA2B,QAAQ,CAAC,EAAE,4BAA4B,CAAC,CAAC;oBAClF,CAAC;oBAED,qBAAqB;oBACrB,MAAM,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,MAAM,CAAC,IAAI,CAAC,8BAA8B,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC,CAAC;gBACrE,CAAC;YACH,CAAC;YAED,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;gBAC1B,MAAM;aACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,MAAM,EAAE,CAAC,sBAAsB,KAAK,EAAE,CAAC;aACxC,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,YAAY;QACxB,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,eAAe,SAAS,EAAE,CAAC,CAAC;QACxF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;QAE7E,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAEzD,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,oBAAoB;QAChC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,mBAAmB,SAAS,EAAE,CAAC,CAAC;QAChG,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;QAEjF,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE/C,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QAC9C,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAE3D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;YAC5C,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC1C,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB;QAMrB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,EAAE,WAAW,CAAC,CAAC;QAE7E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC9C,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;YAChE,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YAElE,OAAO;gBACL,MAAM;gBACN,SAAS;gBACT,aAAa;gBACb,UAAU,EAAE,SAAS,GAAG,aAAa;aACtC,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;gBACL,MAAM,EAAE,MAAM;gBACd,SAAS,EAAE,CAAC;gBACZ,aAAa,EAAE,CAAC;gBAChB,UAAU,EAAE,CAAC;aACd,CAAC;QACJ,CAAC;IACH,CAAC;CACF;AAED,8BAA8B;AAC9B,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC"}
@@ -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"}