@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.
Files changed (55) hide show
  1. package/README.md +29 -0
  2. package/dist/agents.test.d.ts +18 -0
  3. package/dist/agents.test.d.ts.map +1 -0
  4. package/dist/agents.test.js +96 -0
  5. package/dist/agents.test.js.map +1 -0
  6. package/dist/constants/index.d.ts +2 -2
  7. package/dist/constants/index.d.ts.map +1 -1
  8. package/dist/constants/index.js +2 -2
  9. package/dist/constants/index.js.map +1 -1
  10. package/dist/core/add.d.ts.map +1 -1
  11. package/dist/core/add.js +4 -3
  12. package/dist/core/add.js.map +1 -1
  13. package/dist/core/context.d.ts +44 -0
  14. package/dist/core/context.d.ts.map +1 -1
  15. package/dist/core/context.js +326 -1
  16. package/dist/core/context.js.map +1 -1
  17. package/dist/core/context.test.d.ts +10 -0
  18. package/dist/core/context.test.d.ts.map +1 -0
  19. package/dist/core/context.test.js +239 -0
  20. package/dist/core/context.test.js.map +1 -0
  21. package/dist/core/index.d.ts +1 -1
  22. package/dist/core/index.d.ts.map +1 -1
  23. package/dist/core/index.js +1 -1
  24. package/dist/core/index.js.map +1 -1
  25. package/dist/core/update.js +4 -4
  26. package/dist/core/update.js.map +1 -1
  27. package/dist/schemas/cbp-mandate.d.ts +141 -6
  28. package/dist/schemas/cbp-mandate.d.ts.map +1 -1
  29. package/dist/schemas/cbp-mandate.js +121 -18
  30. package/dist/schemas/cbp-mandate.js.map +1 -1
  31. package/dist/schemas/cbp-mandate.test.d.ts +2 -1
  32. package/dist/schemas/cbp-mandate.test.d.ts.map +1 -1
  33. package/dist/schemas/cbp-mandate.test.js +130 -6
  34. package/dist/schemas/cbp-mandate.test.js.map +1 -1
  35. package/dist/utils/backup-github-files.d.ts +34 -0
  36. package/dist/utils/backup-github-files.d.ts.map +1 -0
  37. package/dist/utils/backup-github-files.js +137 -0
  38. package/dist/utils/backup-github-files.js.map +1 -0
  39. package/dist/utils/index.d.ts +25 -1
  40. package/dist/utils/index.d.ts.map +1 -1
  41. package/dist/utils/index.js +36 -1
  42. package/dist/utils/index.js.map +1 -1
  43. package/dist/utils/init-helpers.d.ts +14 -1
  44. package/dist/utils/init-helpers.d.ts.map +1 -1
  45. package/dist/utils/init-helpers.js +37 -2
  46. package/dist/utils/init-helpers.js.map +1 -1
  47. package/dist/utils/normalize.test.d.ts +15 -0
  48. package/dist/utils/normalize.test.d.ts.map +1 -0
  49. package/dist/utils/normalize.test.js +101 -0
  50. package/dist/utils/normalize.test.js.map +1 -0
  51. package/dist/utils/update-copilot-files.d.ts +59 -0
  52. package/dist/utils/update-copilot-files.d.ts.map +1 -0
  53. package/dist/utils/update-copilot-files.js +183 -0
  54. package/dist/utils/update-copilot-files.js.map +1 -0
  55. 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('rejects findings exceeding 6000 characters', () => {
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(false);
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('rejects a recommendation exceeding 200 characters', () => {
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(false);
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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"}
@@ -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 CopiedGithubFiles, copyDevstepsDocs, copyGithubFiles, writeSetupMd, } from './init-helpers.js';
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"}
@@ -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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
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;AAKH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,eAAe,EAAE,MAAM,EACvB,eAAe,EAAE,MAAM,EACvB,qBAAqB,EAAE,MAAM,EAC7B,gBAAgB,EAAE,MAAM,GACvB,iBAAiB,CAmCnB;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"}
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
- writeFileSync(join(targetDir, file), readFileSync(join(sourceDir, file), 'utf8'));
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;AAQjC;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAC7B,eAAuB,EACvB,eAAuB,EACvB,qBAA6B,EAC7B,gBAAwB;IAExB,SAAS,CAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,SAAS,CAAC,qBAAqB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,gBAAgB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,CACd,SAAiB,EACjB,SAAiB,EACjB,MAA8B,EACpB,EAAE;QACZ,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;IAEF,OAAO;QACL,MAAM,EAAE,OAAO,CACb,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,EAC/B,eAAe,EACf,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAC3D;QACD,YAAY,EAAE,OAAO,CACnB,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,EACrC,qBAAqB,EACrB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAClE;QACD,OAAO,EAAE,OAAO,CACd,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAChC,gBAAgB,EAChB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC5D;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,WAAmB;IACvE,KAAK,MAAM,IAAI,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB,EAAE,WAAmB;IACnE,MAAM,OAAO,GAAG,KAAK,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAwChC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuCZ,CAAC;IACA,aAAa,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,EAAE,OAAO,CAAC,CAAC;AACxD,CAAC"}
1
+ {"version":3,"file":"init-helpers.js","sourceRoot":"","sources":["../../src/utils/init-helpers.ts"],"names":[],"mappings":"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"}