@schnick371/devsteps-shared 1.1.0-next.2 → 1.1.0-next.4
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 +29 -0
- package/dist/agents.test.d.ts +18 -0
- package/dist/agents.test.d.ts.map +1 -0
- package/dist/agents.test.js +96 -0
- package/dist/agents.test.js.map +1 -0
- package/dist/constants/index.d.ts +2 -2
- package/dist/constants/index.d.ts.map +1 -1
- package/dist/constants/index.js +2 -2
- package/dist/constants/index.js.map +1 -1
- package/dist/core/add.d.ts.map +1 -1
- package/dist/core/add.js +4 -3
- package/dist/core/add.js.map +1 -1
- package/dist/core/context.d.ts +44 -0
- package/dist/core/context.d.ts.map +1 -1
- package/dist/core/context.js +326 -1
- package/dist/core/context.js.map +1 -1
- package/dist/core/context.test.d.ts +10 -0
- package/dist/core/context.test.d.ts.map +1 -0
- package/dist/core/context.test.js +239 -0
- package/dist/core/context.test.js.map +1 -0
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/update.js +4 -4
- package/dist/core/update.js.map +1 -1
- package/dist/schemas/cbp-mandate.d.ts +141 -6
- package/dist/schemas/cbp-mandate.d.ts.map +1 -1
- package/dist/schemas/cbp-mandate.js +121 -18
- package/dist/schemas/cbp-mandate.js.map +1 -1
- package/dist/schemas/cbp-mandate.test.d.ts +2 -1
- package/dist/schemas/cbp-mandate.test.d.ts.map +1 -1
- package/dist/schemas/cbp-mandate.test.js +130 -6
- package/dist/schemas/cbp-mandate.test.js.map +1 -1
- package/dist/utils/backup-github-files.d.ts +34 -0
- package/dist/utils/backup-github-files.d.ts.map +1 -0
- package/dist/utils/backup-github-files.js +137 -0
- package/dist/utils/backup-github-files.js.map +1 -0
- package/dist/utils/index.d.ts +25 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +36 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/init-helpers.d.ts +14 -1
- package/dist/utils/init-helpers.d.ts.map +1 -1
- package/dist/utils/init-helpers.js +37 -2
- package/dist/utils/init-helpers.js.map +1 -1
- package/dist/utils/normalize.test.d.ts +15 -0
- package/dist/utils/normalize.test.d.ts.map +1 -0
- package/dist/utils/normalize.test.js +101 -0
- package/dist/utils/normalize.test.js.map +1 -0
- package/dist/utils/update-copilot-files.d.ts +59 -0
- package/dist/utils/update-copilot-files.d.ts.map +1 -0
- package/dist/utils/update-copilot-files.js +183 -0
- package/dist/utils/update-copilot-files.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unit Tests for CBP Tier-2 Mandate Schemas
|
|
3
3
|
*
|
|
4
|
-
* Tests: MandateSchema, MandateResultSchema
|
|
4
|
+
* Tests: MandateSchema, MandateResultSchema, ReadMandateResultSchema, WriteMandateResultSchema
|
|
5
5
|
*
|
|
6
6
|
* @see STORY-108 MandateResult CBP Extension
|
|
7
7
|
* @see TASK-233 MandateSchema + MandateResultSchema
|
|
8
|
+
* @see TASK-334 Strengthen Zod validation in MandateResultSchema
|
|
8
9
|
*/
|
|
9
10
|
import { describe, expect, it } from 'vitest';
|
|
10
|
-
import { MandateResultSchema, MandateResultStatus, MandateSchema, MandateType, TriageTier, } from './cbp-mandate.js';
|
|
11
|
+
import { MandateResultSchema, MandateResultStatus, MandateSchema, MandateType, ReadMandateResultSchema, TriageTier, WriteMandateResultSchema, } from './cbp-mandate.js';
|
|
11
12
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
12
13
|
function validMandate() {
|
|
13
14
|
return {
|
|
@@ -125,10 +126,13 @@ describe('MandateResultSchema', () => {
|
|
|
125
126
|
expect(MandateResultSchema.safeParse({ ...validMandateResult(), confidence: 1.1 }).success).toBe(false);
|
|
126
127
|
expect(MandateResultSchema.safeParse({ ...validMandateResult(), confidence: -0.1 }).success).toBe(false);
|
|
127
128
|
});
|
|
128
|
-
it('
|
|
129
|
+
it('accepts findings exceeding 6000 characters (lenient read schema — no max enforced)', () => {
|
|
130
|
+
// ReadMandateResultSchema (alias: MandateResultSchema) is intentionally lenient.
|
|
131
|
+
// The 6000-char limit is enforced at the handler level for new writes only.
|
|
132
|
+
// See TASK-334: WriteMandateResultSchema / ReadMandateResultSchema split.
|
|
129
133
|
const tooLong = 'x'.repeat(6001);
|
|
130
134
|
const result = MandateResultSchema.safeParse({ ...validMandateResult(), findings: tooLong });
|
|
131
|
-
expect(result.success).toBe(
|
|
135
|
+
expect(result.success).toBe(true);
|
|
132
136
|
});
|
|
133
137
|
it('accepts findings at exactly 6000 characters', () => {
|
|
134
138
|
const exact = 'x'.repeat(6000);
|
|
@@ -143,13 +147,16 @@ describe('MandateResultSchema', () => {
|
|
|
143
147
|
});
|
|
144
148
|
expect(result.success).toBe(false);
|
|
145
149
|
});
|
|
146
|
-
it('
|
|
150
|
+
it('accepts a recommendation exceeding 200 characters (lenient read schema)', () => {
|
|
151
|
+
// ReadMandateResultSchema (alias: MandateResultSchema) is intentionally lenient.
|
|
152
|
+
// Per-item character limits are no longer enforced at schema level for reads.
|
|
153
|
+
// See TASK-334: WriteMandateResultSchema / ReadMandateResultSchema split.
|
|
147
154
|
const tooLong = ['x'.repeat(201)];
|
|
148
155
|
const result = MandateResultSchema.safeParse({
|
|
149
156
|
...validMandateResult(),
|
|
150
157
|
recommendations: tooLong,
|
|
151
158
|
});
|
|
152
|
-
expect(result.success).toBe(
|
|
159
|
+
expect(result.success).toBe(true);
|
|
153
160
|
});
|
|
154
161
|
it('accepts all valid status values', () => {
|
|
155
162
|
for (const status of ['complete', 'partial', 'escalated']) {
|
|
@@ -185,4 +192,121 @@ describe('MandateResultSchema', () => {
|
|
|
185
192
|
expect(() => MandateResultStatus.parse('failed')).toThrow();
|
|
186
193
|
});
|
|
187
194
|
});
|
|
195
|
+
// ─── TASK-334 Regression Gate: Read/Write Schema Split ────────────────────────
|
|
196
|
+
/**
|
|
197
|
+
* Regression gate for TASK-334: ReadMandateResultSchema / WriteMandateResultSchema split.
|
|
198
|
+
*
|
|
199
|
+
* Invariants:
|
|
200
|
+
* 1. ReadMandateResultSchema tolerates item_ids:[] (historical files MUST not break)
|
|
201
|
+
* 2. WriteMandateResultSchema rejects item_ids:[] (new writes MUST have at least 1)
|
|
202
|
+
* 3. WriteMandateResultSchema rejects analyst names not matching devsteps-R{N}-{name}
|
|
203
|
+
* 4. MandateResultSchema (backward-compat alias) behaves like ReadMandateResultSchema
|
|
204
|
+
*/
|
|
205
|
+
describe('TASK-334 — ReadMandateResultSchema / WriteMandateResultSchema regression gate', () => {
|
|
206
|
+
/** Minimal valid fields shared by both schemas */
|
|
207
|
+
function minimalBase() {
|
|
208
|
+
return {
|
|
209
|
+
mandate_id: 'a1b2c3d4-e5f6-7890-abcd-ef1234567890',
|
|
210
|
+
sprint_id: 'sprint-2026-03-05',
|
|
211
|
+
analyst: 'devsteps-R1-archaeology',
|
|
212
|
+
status: 'complete',
|
|
213
|
+
findings: 'Minimal test findings.',
|
|
214
|
+
recommendations: ['Rec 1'],
|
|
215
|
+
confidence: 0.8,
|
|
216
|
+
token_cost: 500,
|
|
217
|
+
completed_at: '2026-03-05T12:00:00.000Z',
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
// ── ReadMandateResultSchema ──────────────────────────────────────────────────
|
|
221
|
+
it('RC-1: ReadMandateResultSchema accepts item_ids:[] (tolerates historical files)', () => {
|
|
222
|
+
const result = ReadMandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
|
|
223
|
+
expect(result.success).toBe(true);
|
|
224
|
+
});
|
|
225
|
+
it('RC-2: ReadMandateResultSchema accepts item_ids with entries', () => {
|
|
226
|
+
const result = ReadMandateResultSchema.safeParse({ ...minimalBase(), item_ids: ['TASK-334'] });
|
|
227
|
+
expect(result.success).toBe(true);
|
|
228
|
+
});
|
|
229
|
+
it('RC-3: ReadMandateResultSchema accepts short analyst names (historical compat)', () => {
|
|
230
|
+
const result = ReadMandateResultSchema.safeParse({
|
|
231
|
+
...minimalBase(),
|
|
232
|
+
item_ids: [],
|
|
233
|
+
analyst: 'devsteps-t2-archaeology', // old naming — must be tolerated
|
|
234
|
+
});
|
|
235
|
+
expect(result.success).toBe(true);
|
|
236
|
+
});
|
|
237
|
+
it('RC-4: ReadMandateResultSchema defaults schema_version to "1.0"', () => {
|
|
238
|
+
const result = ReadMandateResultSchema.parse({ ...minimalBase(), item_ids: [] });
|
|
239
|
+
expect(result.schema_version).toBe('1.0');
|
|
240
|
+
});
|
|
241
|
+
it('RC-5: ReadMandateResultSchema accepts optional extension fields (TASK-326)', () => {
|
|
242
|
+
const result = ReadMandateResultSchema.safeParse({
|
|
243
|
+
...minimalBase(),
|
|
244
|
+
item_ids: ['TASK-334'],
|
|
245
|
+
t3_recommendations: { 'analyst-risk': 'Check impact on shared schemas' },
|
|
246
|
+
n_aspects_recommended: 3,
|
|
247
|
+
failed_approaches: ['inline-approach-1'],
|
|
248
|
+
});
|
|
249
|
+
expect(result.success).toBe(true);
|
|
250
|
+
});
|
|
251
|
+
// ── WriteMandateResultSchema ─────────────────────────────────────────────────
|
|
252
|
+
it('WC-1: WriteMandateResultSchema REJECTS item_ids:[] (new writes need >=1 item)', () => {
|
|
253
|
+
const result = WriteMandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
|
|
254
|
+
expect(result.success).toBe(false);
|
|
255
|
+
});
|
|
256
|
+
it('WC-2: WriteMandateResultSchema REJECTS short analyst names', () => {
|
|
257
|
+
const result = WriteMandateResultSchema.safeParse({
|
|
258
|
+
...minimalBase(),
|
|
259
|
+
item_ids: ['TASK-334'],
|
|
260
|
+
analyst: 'devsteps-t2-archaeology', // does not match devsteps-R{N}- prefix
|
|
261
|
+
});
|
|
262
|
+
expect(result.success).toBe(false);
|
|
263
|
+
});
|
|
264
|
+
it('WC-3: WriteMandateResultSchema REJECTS plain analyst names', () => {
|
|
265
|
+
const result = WriteMandateResultSchema.safeParse({
|
|
266
|
+
...minimalBase(),
|
|
267
|
+
item_ids: ['TASK-334'],
|
|
268
|
+
analyst: 'short-name',
|
|
269
|
+
});
|
|
270
|
+
expect(result.success).toBe(false);
|
|
271
|
+
});
|
|
272
|
+
it('WC-4: WriteMandateResultSchema accepts valid R{N} analyst names', () => {
|
|
273
|
+
for (const analyst of [
|
|
274
|
+
'devsteps-R1-archaeology',
|
|
275
|
+
'devsteps-R2-aspect-impact',
|
|
276
|
+
'devsteps-R4-exec-impl',
|
|
277
|
+
]) {
|
|
278
|
+
const result = WriteMandateResultSchema.safeParse({
|
|
279
|
+
...minimalBase(),
|
|
280
|
+
item_ids: ['TASK-334'],
|
|
281
|
+
analyst,
|
|
282
|
+
});
|
|
283
|
+
expect(result.success, `Expected success for analyst: ${analyst}`).toBe(true);
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
it('WC-5: WriteMandateResultSchema accepts item_ids with multiple entries', () => {
|
|
287
|
+
const result = WriteMandateResultSchema.safeParse({
|
|
288
|
+
...minimalBase(),
|
|
289
|
+
item_ids: ['TASK-334', 'STORY-050'],
|
|
290
|
+
});
|
|
291
|
+
expect(result.success).toBe(true);
|
|
292
|
+
});
|
|
293
|
+
// ── Backward-compat alias ────────────────────────────────────────────────────
|
|
294
|
+
it('BC-1: MandateResultSchema (alias) behaves like ReadMandateResultSchema — accepts item_ids:[]', () => {
|
|
295
|
+
const result = MandateResultSchema.safeParse({ ...minimalBase(), item_ids: [] });
|
|
296
|
+
expect(result.success).toBe(true);
|
|
297
|
+
});
|
|
298
|
+
it('BC-2: MandateResultSchema (alias) accepts short analyst names', () => {
|
|
299
|
+
const result = MandateResultSchema.safeParse({
|
|
300
|
+
...minimalBase(),
|
|
301
|
+
item_ids: [],
|
|
302
|
+
analyst: 'devsteps-t2-archaeology',
|
|
303
|
+
});
|
|
304
|
+
expect(result.success).toBe(true);
|
|
305
|
+
});
|
|
306
|
+
// ── MandateType enum consistency (TASK-334) ──────────────────────────────────
|
|
307
|
+
it('MT-1: MandateType accepts both "quality" and "quality-review"', () => {
|
|
308
|
+
expect(() => MandateType.parse('quality')).not.toThrow();
|
|
309
|
+
expect(() => MandateType.parse('quality-review')).not.toThrow();
|
|
310
|
+
});
|
|
311
|
+
});
|
|
188
312
|
//# sourceMappingURL=cbp-mandate.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cbp-mandate.test.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"cbp-mandate.test.js","sourceRoot":"","sources":["../../src/schemas/cbp-mandate.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2025 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* GitHub Copilot file backup utilities
|
|
6
|
+
* Creates timestamped backups of devsteps-managed .github files before updates.
|
|
7
|
+
*/
|
|
8
|
+
export interface BackupResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
backupDir: string;
|
|
11
|
+
timestamp: string;
|
|
12
|
+
fileCount: number;
|
|
13
|
+
files: string[];
|
|
14
|
+
error?: Error;
|
|
15
|
+
}
|
|
16
|
+
export interface BackupOptions {
|
|
17
|
+
/** Maximum number of backups to retain (default: 5) */
|
|
18
|
+
maxBackups?: number;
|
|
19
|
+
/** DevSteps package version for manifest */
|
|
20
|
+
packageVersion?: string;
|
|
21
|
+
/** Skip backup entirely (dry-run / test mode) */
|
|
22
|
+
skip?: boolean;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Create a timestamped backup of all devsteps-managed .github files.
|
|
26
|
+
*
|
|
27
|
+
* Backup location: `<devstepsDir>/backups/github-<timestamp>/`
|
|
28
|
+
* A `manifest.json` is written alongside the backed-up files.
|
|
29
|
+
*
|
|
30
|
+
* On any error the partially-created backup directory is cleaned up
|
|
31
|
+
* and `success: false` is returned — callers must abort the update.
|
|
32
|
+
*/
|
|
33
|
+
export declare function backupGithubFiles(githubDir: string, devstepsDir: string, options?: BackupOptions): BackupResult;
|
|
34
|
+
//# sourceMappingURL=backup-github-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-github-files.d.ts","sourceRoot":"","sources":["../../src/utils/backup-github-files.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AA8DD;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,aAAa,GACtB,YAAY,CA6Ed"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright © 2025 Thomas Hertel (the@devsteps.dev)
|
|
3
|
+
* Licensed under the Apache License, Version 2.0
|
|
4
|
+
*
|
|
5
|
+
* GitHub Copilot file backup utilities
|
|
6
|
+
* Creates timestamped backups of devsteps-managed .github files before updates.
|
|
7
|
+
*/
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
9
|
+
import { copyFileSync, existsSync, mkdirSync, readdirSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
const DEFAULT_MAX_BACKUPS = 5;
|
|
12
|
+
const BACKUP_DIR_PREFIX = 'github-';
|
|
13
|
+
/**
|
|
14
|
+
* Compute sha256 hex digest of a string.
|
|
15
|
+
*/
|
|
16
|
+
function sha256(content) {
|
|
17
|
+
return createHash('sha256').update(content, 'utf8').digest('hex');
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Format a Date as a filesystem-safe ISO timestamp: YYYY-MM-DDTHH-MM-SS
|
|
21
|
+
*/
|
|
22
|
+
function formatTimestamp(date) {
|
|
23
|
+
return date
|
|
24
|
+
.toISOString()
|
|
25
|
+
.replace(/\.\d{3}Z$/, '')
|
|
26
|
+
.replace(/:/g, '-');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Collect all devsteps-managed .github files from the three subdirectories.
|
|
30
|
+
* Returns an array of { rel, abs } objects where rel is the subdirectory-relative path.
|
|
31
|
+
*/
|
|
32
|
+
function collectManagedFiles(githubDir) {
|
|
33
|
+
const subdirs = ['agents', 'instructions', 'prompts'];
|
|
34
|
+
const collected = [];
|
|
35
|
+
for (const sub of subdirs) {
|
|
36
|
+
const dir = join(githubDir, sub);
|
|
37
|
+
if (!existsSync(dir))
|
|
38
|
+
continue;
|
|
39
|
+
const files = readdirSync(dir).filter((f) => f.startsWith('devsteps') && (f.endsWith('.agent.md') || f.endsWith('.instructions.md') || f.endsWith('.prompt.md')));
|
|
40
|
+
for (const file of files) {
|
|
41
|
+
collected.push({ rel: join(sub, file), abs: join(dir, file) });
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return collected;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Remove oldest backup directories, keeping only `maxBackups` most recent.
|
|
48
|
+
*/
|
|
49
|
+
function pruneOldBackups(backupsRoot, maxBackups) {
|
|
50
|
+
if (!existsSync(backupsRoot))
|
|
51
|
+
return;
|
|
52
|
+
const entries = readdirSync(backupsRoot)
|
|
53
|
+
.filter((d) => d.startsWith(BACKUP_DIR_PREFIX))
|
|
54
|
+
.sort(); // ISO-ish timestamps sort lexicographically
|
|
55
|
+
const toRemove = entries.slice(0, Math.max(0, entries.length - maxBackups));
|
|
56
|
+
for (const dir of toRemove) {
|
|
57
|
+
rmSync(join(backupsRoot, dir), { recursive: true, force: true });
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Create a timestamped backup of all devsteps-managed .github files.
|
|
62
|
+
*
|
|
63
|
+
* Backup location: `<devstepsDir>/backups/github-<timestamp>/`
|
|
64
|
+
* A `manifest.json` is written alongside the backed-up files.
|
|
65
|
+
*
|
|
66
|
+
* On any error the partially-created backup directory is cleaned up
|
|
67
|
+
* and `success: false` is returned — callers must abort the update.
|
|
68
|
+
*/
|
|
69
|
+
export function backupGithubFiles(githubDir, devstepsDir, options) {
|
|
70
|
+
const maxBackups = options?.maxBackups ?? DEFAULT_MAX_BACKUPS;
|
|
71
|
+
const packageVersion = options?.packageVersion ?? 'unknown';
|
|
72
|
+
const timestamp = formatTimestamp(new Date());
|
|
73
|
+
if (options?.skip) {
|
|
74
|
+
return { success: true, backupDir: '', timestamp, fileCount: 0, files: [] };
|
|
75
|
+
}
|
|
76
|
+
const backupsRoot = join(devstepsDir, 'backups');
|
|
77
|
+
const backupDir = join(backupsRoot, `${BACKUP_DIR_PREFIX}${timestamp}`);
|
|
78
|
+
let partiallyCreated = false;
|
|
79
|
+
try {
|
|
80
|
+
const managedFiles = collectManagedFiles(githubDir);
|
|
81
|
+
if (managedFiles.length === 0) {
|
|
82
|
+
// Nothing to back up — not an error
|
|
83
|
+
return { success: true, backupDir: '', timestamp, fileCount: 0, files: [] };
|
|
84
|
+
}
|
|
85
|
+
// Create backup directory structure
|
|
86
|
+
mkdirSync(join(backupDir, 'agents'), { recursive: true });
|
|
87
|
+
mkdirSync(join(backupDir, 'instructions'), { recursive: true });
|
|
88
|
+
mkdirSync(join(backupDir, 'prompts'), { recursive: true });
|
|
89
|
+
partiallyCreated = true;
|
|
90
|
+
const manifestEntries = [];
|
|
91
|
+
const copiedFiles = [];
|
|
92
|
+
for (const { rel, abs } of managedFiles) {
|
|
93
|
+
const dest = join(backupDir, rel);
|
|
94
|
+
copyFileSync(abs, dest);
|
|
95
|
+
const content = readFileSync(abs, 'utf8');
|
|
96
|
+
manifestEntries.push({ file: rel, sha256: sha256(content) });
|
|
97
|
+
copiedFiles.push(rel);
|
|
98
|
+
}
|
|
99
|
+
// Write manifest
|
|
100
|
+
const manifest = {
|
|
101
|
+
timestamp,
|
|
102
|
+
packageVersion,
|
|
103
|
+
githubDir,
|
|
104
|
+
files: manifestEntries,
|
|
105
|
+
};
|
|
106
|
+
writeFileSync(join(backupDir, 'manifest.json'), JSON.stringify(manifest, null, 2));
|
|
107
|
+
// Prune old backups AFTER successful write
|
|
108
|
+
pruneOldBackups(backupsRoot, maxBackups);
|
|
109
|
+
return {
|
|
110
|
+
success: true,
|
|
111
|
+
backupDir,
|
|
112
|
+
timestamp,
|
|
113
|
+
fileCount: copiedFiles.length,
|
|
114
|
+
files: copiedFiles,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
// Clean up partial backup to avoid corrupted state
|
|
119
|
+
if (partiallyCreated) {
|
|
120
|
+
try {
|
|
121
|
+
rmSync(backupDir, { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
catch {
|
|
124
|
+
// Best-effort cleanup — ignore secondary errors
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return {
|
|
128
|
+
success: false,
|
|
129
|
+
backupDir,
|
|
130
|
+
timestamp,
|
|
131
|
+
fileCount: 0,
|
|
132
|
+
files: [],
|
|
133
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
//# sourceMappingURL=backup-github-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backup-github-files.js","sourceRoot":"","sources":["../../src/utils/backup-github-files.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { ItemType, Methodology } from '../schemas/index.js';
|
|
9
9
|
export { CACHE_CONFIG, type CacheStats, ContextCache, clearGlobalCache, getCache, } from './cache.js';
|
|
10
|
-
export { type
|
|
10
|
+
export { type BackupOptions, type BackupResult, backupGithubFiles, } from './backup-github-files.js';
|
|
11
|
+
export { type CopiedGithubFiles, copyDevstepsDocs, copyGithubFiles, injectDevstepsComment, writeSetupMd, } from './init-helpers.js';
|
|
12
|
+
export { type UpdateCopilotFilesOptions, type UpdateCopilotFilesResult, updateCopilotFiles, } from './update-copilot-files.js';
|
|
11
13
|
/**
|
|
12
14
|
* Type to plural directory mapping
|
|
13
15
|
* Uses items/ subdirectory for git-inspired object store (SPIKE-008)
|
|
@@ -84,4 +86,26 @@ export declare function isValidEmail(email: string): boolean;
|
|
|
84
86
|
* Sanitizes a string for use in filenames
|
|
85
87
|
*/
|
|
86
88
|
export declare function sanitizeFilename(name: string): string;
|
|
89
|
+
/**
|
|
90
|
+
* Normalizes escape sequences in description strings received from MCP tool calls.
|
|
91
|
+
*
|
|
92
|
+
* **Problem:** MCP clients (GitHub Copilot ≥ v1.0.0, Claude Code, etc.) transmit
|
|
93
|
+
* multiline strings with literal two-character sequences `\n`, `\t` instead of
|
|
94
|
+
* actual Unicode control characters. `JSON.parse` delivers these sequences unchanged,
|
|
95
|
+
* so `writeFileSync` writes them verbatim — producing unreadable `.md` files.
|
|
96
|
+
*
|
|
97
|
+
* **Heuristic:** If the incoming string already contains real newlines (U+000A),
|
|
98
|
+
* it is already properly formatted and returned unchanged. This makes the function
|
|
99
|
+
* safe to call on both MCP-origin strings and CLI-origin strings, and prevents
|
|
100
|
+
* double-conversion.
|
|
101
|
+
*
|
|
102
|
+
* **Handles:**
|
|
103
|
+
* - `\n` (backslash + n) → real newline (LF)
|
|
104
|
+
* - `\t` (backslash + t) → real tab
|
|
105
|
+
* - `\r` (backslash + r) → removed (stray CR from Windows-style `\r\n` literals)
|
|
106
|
+
*
|
|
107
|
+
* @param value - The raw description string from an MCP tool argument
|
|
108
|
+
* @returns A string with proper newline characters suitable for file I/O
|
|
109
|
+
*/
|
|
110
|
+
export declare function normalizeMarkdown(value: string): string;
|
|
87
111
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,YAAY,EACZ,KAAK,UAAU,EACf,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAStD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW;gBAGU,QAAQ,EAAE;;;;;;;;;;;gBAmBD,QAAQ,EAAE;;;;;;;;;;;gBA4B/E,QAAQ,EAAE;;;;;;;;;;;;EAyBpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmBjF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGjE,OAAO,EACL,YAAY,EACZ,KAAK,UAAU,EACf,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACL,KAAK,iBAAiB,EACtB,gBAAgB,EAChB,eAAe,EACf,qBAAqB,EACrB,YAAY,GACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EACL,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,kBAAkB,GACnB,MAAM,2BAA2B,CAAC;AAEnC;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAStD,CAAC;AAEF;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,WAAW;gBAGU,QAAQ,EAAE;;;;;;;;;;;gBAmBD,QAAQ,EAAE;;;;;;;;;;;gBA4B/E,QAAQ,EAAE;;;;;;;;;;;;EAyBpB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC,MAAM,CAgBR;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAmBjF;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGtD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CASvD"}
|
package/dist/utils/index.js
CHANGED
|
@@ -7,8 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
// Export cache utilities
|
|
9
9
|
export { CACHE_CONFIG, ContextCache, clearGlobalCache, getCache, } from './cache.js';
|
|
10
|
+
// Export backup utilities
|
|
11
|
+
export { backupGithubFiles, } from './backup-github-files.js';
|
|
10
12
|
// Export init helpers
|
|
11
|
-
export { copyDevstepsDocs, copyGithubFiles, writeSetupMd, } from './init-helpers.js';
|
|
13
|
+
export { copyDevstepsDocs, copyGithubFiles, injectDevstepsComment, writeSetupMd, } from './init-helpers.js';
|
|
14
|
+
// Export update helpers
|
|
15
|
+
export { updateCopilotFiles, } from './update-copilot-files.js';
|
|
12
16
|
/**
|
|
13
17
|
* Type to plural directory mapping
|
|
14
18
|
* Uses items/ subdirectory for git-inspired object store (SPIKE-008)
|
|
@@ -187,4 +191,35 @@ export function sanitizeFilename(name) {
|
|
|
187
191
|
.replace(/[^a-z0-9]+/g, '-')
|
|
188
192
|
.replace(/^-|-$/g, '');
|
|
189
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Normalizes escape sequences in description strings received from MCP tool calls.
|
|
196
|
+
*
|
|
197
|
+
* **Problem:** MCP clients (GitHub Copilot ≥ v1.0.0, Claude Code, etc.) transmit
|
|
198
|
+
* multiline strings with literal two-character sequences `\n`, `\t` instead of
|
|
199
|
+
* actual Unicode control characters. `JSON.parse` delivers these sequences unchanged,
|
|
200
|
+
* so `writeFileSync` writes them verbatim — producing unreadable `.md` files.
|
|
201
|
+
*
|
|
202
|
+
* **Heuristic:** If the incoming string already contains real newlines (U+000A),
|
|
203
|
+
* it is already properly formatted and returned unchanged. This makes the function
|
|
204
|
+
* safe to call on both MCP-origin strings and CLI-origin strings, and prevents
|
|
205
|
+
* double-conversion.
|
|
206
|
+
*
|
|
207
|
+
* **Handles:**
|
|
208
|
+
* - `\n` (backslash + n) → real newline (LF)
|
|
209
|
+
* - `\t` (backslash + t) → real tab
|
|
210
|
+
* - `\r` (backslash + r) → removed (stray CR from Windows-style `\r\n` literals)
|
|
211
|
+
*
|
|
212
|
+
* @param value - The raw description string from an MCP tool argument
|
|
213
|
+
* @returns A string with proper newline characters suitable for file I/O
|
|
214
|
+
*/
|
|
215
|
+
export function normalizeMarkdown(value) {
|
|
216
|
+
// Fast path: real newlines are present → already properly formatted
|
|
217
|
+
if (value.includes('\n'))
|
|
218
|
+
return value;
|
|
219
|
+
// Slow path: convert MCP-style escape sequences to real control characters
|
|
220
|
+
return value
|
|
221
|
+
.replace(/\\n/g, '\n')
|
|
222
|
+
.replace(/\\t/g, '\t')
|
|
223
|
+
.replace(/\\r/g, '');
|
|
224
|
+
}
|
|
190
225
|
//# sourceMappingURL=index.js.map
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,yBAAyB;AACzB,OAAO,EACL,YAAY,EAEZ,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,sBAAsB;AACtB,OAAO,EAEL,gBAAgB,EAChB,eAAe,EACf,YAAY,GACb,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,17 @@
|
|
|
5
5
|
* Project initialization helpers
|
|
6
6
|
* Creates default .devsteps structure, copies GitHub Copilot templates.
|
|
7
7
|
*/
|
|
8
|
+
/**
|
|
9
|
+
* Inject (or replace) the devsteps management comment directly after the YAML
|
|
10
|
+
* frontmatter closing `---` line. The marker is placed in an HTML comment so
|
|
11
|
+
* it is invisible in rendered Markdown and does NOT affect YAML parsing.
|
|
12
|
+
*
|
|
13
|
+
* Format:
|
|
14
|
+
* <!-- devsteps-managed: true | version: <ver> | hash: sha256:<hex> -->
|
|
15
|
+
*
|
|
16
|
+
* If the file has no frontmatter the comment is prepended to the top.
|
|
17
|
+
*/
|
|
18
|
+
export declare function injectDevstepsComment(rawContent: string, hash: string, version: string): string;
|
|
8
19
|
export interface CopiedGithubFiles {
|
|
9
20
|
agents: string[];
|
|
10
21
|
instructions: string[];
|
|
@@ -14,9 +25,11 @@ export interface CopiedGithubFiles {
|
|
|
14
25
|
* Dynamically copy all devsteps-prefixed agent/instruction/prompt files
|
|
15
26
|
* from a source .github directory into target directories.
|
|
16
27
|
* Creates target directories if they don't exist.
|
|
28
|
+
* Injects a `<!-- devsteps-managed -->` HTML comment after the YAML frontmatter
|
|
29
|
+
* so that the canonical content hash is stored without touching the YAML block.
|
|
17
30
|
* Returns lists of copied filenames for output/reporting.
|
|
18
31
|
*/
|
|
19
|
-
export declare function copyGithubFiles(sourceGithubDir: string, githubAgentsDir: string, githubInstructionsDir: string, githubPromptsDir: string): CopiedGithubFiles;
|
|
32
|
+
export declare function copyGithubFiles(sourceGithubDir: string, githubAgentsDir: string, githubInstructionsDir: string, githubPromptsDir: string, packageVersion?: string): CopiedGithubFiles;
|
|
20
33
|
/**
|
|
21
34
|
* Copy HIERARCHY.md and AI-GUIDE.md from the package root .devsteps/ dir
|
|
22
35
|
* into the target project's .devsteps/ directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/init-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;
|
|
1
|
+
{"version":3,"file":"init-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/init-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAaH;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAc/F;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,EAAE,MAAM,EACxB,cAAc,SAAY,GACzB,iBAAiB,CAsCnB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAO/E;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAkF3E"}
|
|
@@ -5,15 +5,47 @@
|
|
|
5
5
|
* Project initialization helpers
|
|
6
6
|
* Creates default .devsteps structure, copies GitHub Copilot templates.
|
|
7
7
|
*/
|
|
8
|
+
import { createHash } from 'node:crypto';
|
|
8
9
|
import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
9
10
|
import { join } from 'node:path';
|
|
11
|
+
/**
|
|
12
|
+
* Compute sha256 hex digest of content (UTF-8).
|
|
13
|
+
*/
|
|
14
|
+
function sha256(content) {
|
|
15
|
+
return createHash('sha256').update(content, 'utf8').digest('hex');
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Inject (or replace) the devsteps management comment directly after the YAML
|
|
19
|
+
* frontmatter closing `---` line. The marker is placed in an HTML comment so
|
|
20
|
+
* it is invisible in rendered Markdown and does NOT affect YAML parsing.
|
|
21
|
+
*
|
|
22
|
+
* Format:
|
|
23
|
+
* <!-- devsteps-managed: true | version: <ver> | hash: sha256:<hex> -->
|
|
24
|
+
*
|
|
25
|
+
* If the file has no frontmatter the comment is prepended to the top.
|
|
26
|
+
*/
|
|
27
|
+
export function injectDevstepsComment(rawContent, hash, version) {
|
|
28
|
+
const marker = `<!-- devsteps-managed: true | version: ${version} | hash: sha256:${hash} -->`;
|
|
29
|
+
// Remove old marker if present
|
|
30
|
+
const withoutOld = rawContent.replace(/<!--\s*devsteps-managed:.*?-->\n?/g, '');
|
|
31
|
+
// Find YAML frontmatter (starts and ends with ---)
|
|
32
|
+
const frontmatterEnd = withoutOld.match(/^---\n[\s\S]*?\n---\n/);
|
|
33
|
+
if (frontmatterEnd) {
|
|
34
|
+
const endIdx = (frontmatterEnd.index ?? 0) + frontmatterEnd[0].length;
|
|
35
|
+
return withoutOld.slice(0, endIdx) + marker + '\n' + withoutOld.slice(endIdx);
|
|
36
|
+
}
|
|
37
|
+
// No frontmatter — prepend
|
|
38
|
+
return marker + '\n' + withoutOld;
|
|
39
|
+
}
|
|
10
40
|
/**
|
|
11
41
|
* Dynamically copy all devsteps-prefixed agent/instruction/prompt files
|
|
12
42
|
* from a source .github directory into target directories.
|
|
13
43
|
* Creates target directories if they don't exist.
|
|
44
|
+
* Injects a `<!-- devsteps-managed -->` HTML comment after the YAML frontmatter
|
|
45
|
+
* so that the canonical content hash is stored without touching the YAML block.
|
|
14
46
|
* Returns lists of copied filenames for output/reporting.
|
|
15
47
|
*/
|
|
16
|
-
export function copyGithubFiles(sourceGithubDir, githubAgentsDir, githubInstructionsDir, githubPromptsDir) {
|
|
48
|
+
export function copyGithubFiles(sourceGithubDir, githubAgentsDir, githubInstructionsDir, githubPromptsDir, packageVersion = 'unknown') {
|
|
17
49
|
mkdirSync(githubAgentsDir, { recursive: true });
|
|
18
50
|
mkdirSync(githubInstructionsDir, { recursive: true });
|
|
19
51
|
mkdirSync(githubPromptsDir, { recursive: true });
|
|
@@ -22,7 +54,10 @@ export function copyGithubFiles(sourceGithubDir, githubAgentsDir, githubInstruct
|
|
|
22
54
|
return [];
|
|
23
55
|
const files = readdirSync(sourceDir).filter(filter);
|
|
24
56
|
for (const file of files) {
|
|
25
|
-
|
|
57
|
+
const rawContent = readFileSync(join(sourceDir, file), 'utf8');
|
|
58
|
+
const hash = sha256(rawContent);
|
|
59
|
+
const annotated = injectDevstepsComment(rawContent, hash, packageVersion);
|
|
60
|
+
writeFileSync(join(targetDir, file), annotated);
|
|
26
61
|
}
|
|
27
62
|
return files;
|
|
28
63
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init-helpers.js","sourceRoot":"","sources":["../../src/utils/init-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1F,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"init-helpers.js","sourceRoot":"","sources":["../../src/utils/init-helpers.ts"],"names":[],"mappings":"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"}
|