@schnick371/devsteps-shared 0.7.0-next.3 → 0.8.1-next.1

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 (74) hide show
  1. package/dist/core/add.d.ts +2 -3
  2. package/dist/core/add.d.ts.map +1 -1
  3. package/dist/core/add.js +58 -37
  4. package/dist/core/add.js.map +1 -1
  5. package/dist/core/archive.d.ts.map +1 -1
  6. package/dist/core/archive.js +35 -25
  7. package/dist/core/archive.js.map +1 -1
  8. package/dist/core/auto-migrate.d.ts +154 -0
  9. package/dist/core/auto-migrate.d.ts.map +1 -0
  10. package/dist/core/auto-migrate.js +383 -0
  11. package/dist/core/auto-migrate.js.map +1 -0
  12. package/dist/core/auto-migrate.test.d.ts +7 -0
  13. package/dist/core/auto-migrate.test.d.ts.map +1 -0
  14. package/dist/core/auto-migrate.test.js +364 -0
  15. package/dist/core/auto-migrate.test.js.map +1 -0
  16. package/dist/core/index-rebuild.d.ts +75 -0
  17. package/dist/core/index-rebuild.d.ts.map +1 -0
  18. package/dist/core/index-rebuild.js +260 -0
  19. package/dist/core/index-rebuild.js.map +1 -0
  20. package/dist/core/index-rebuild.test.d.ts +8 -0
  21. package/dist/core/index-rebuild.test.d.ts.map +1 -0
  22. package/dist/core/index-rebuild.test.js +582 -0
  23. package/dist/core/index-rebuild.test.js.map +1 -0
  24. package/dist/core/index-refs.d.ts +155 -0
  25. package/dist/core/index-refs.d.ts.map +1 -0
  26. package/dist/core/index-refs.js +442 -0
  27. package/dist/core/index-refs.js.map +1 -0
  28. package/dist/core/index-refs.test.d.ts +7 -0
  29. package/dist/core/index-refs.test.d.ts.map +1 -0
  30. package/dist/core/index-refs.test.js +367 -0
  31. package/dist/core/index-refs.test.js.map +1 -0
  32. package/dist/core/index.d.ts +3 -0
  33. package/dist/core/index.d.ts.map +1 -1
  34. package/dist/core/index.js +6 -0
  35. package/dist/core/index.js.map +1 -1
  36. package/dist/core/list.d.ts +2 -3
  37. package/dist/core/list.d.ts.map +1 -1
  38. package/dist/core/list.js +67 -12
  39. package/dist/core/list.js.map +1 -1
  40. package/dist/core/update.d.ts +1 -2
  41. package/dist/core/update.d.ts.map +1 -1
  42. package/dist/core/update.js +30 -21
  43. package/dist/core/update.js.map +1 -1
  44. package/dist/migration/fix-missing-eisenhower.d.ts +8 -0
  45. package/dist/migration/fix-missing-eisenhower.d.ts.map +1 -0
  46. package/dist/migration/fix-missing-eisenhower.js +58 -0
  47. package/dist/migration/fix-missing-eisenhower.js.map +1 -0
  48. package/dist/migration/remove-priority-field.d.ts +15 -0
  49. package/dist/migration/remove-priority-field.d.ts.map +1 -0
  50. package/dist/migration/remove-priority-field.js +113 -0
  51. package/dist/migration/remove-priority-field.js.map +1 -0
  52. package/dist/schemas/index-refs.schema.d.ts +103 -0
  53. package/dist/schemas/index-refs.schema.d.ts.map +1 -0
  54. package/dist/schemas/index-refs.schema.js +88 -0
  55. package/dist/schemas/index-refs.schema.js.map +1 -0
  56. package/dist/schemas/index.d.ts +7 -22
  57. package/dist/schemas/index.d.ts.map +1 -1
  58. package/dist/schemas/index.js +3 -7
  59. package/dist/schemas/index.js.map +1 -1
  60. package/dist/types/commands.d.ts +2 -5
  61. package/dist/types/commands.d.ts.map +1 -1
  62. package/dist/types/index-refs.types.d.ts +123 -0
  63. package/dist/types/index-refs.types.d.ts.map +1 -0
  64. package/dist/types/index-refs.types.js +71 -0
  65. package/dist/types/index-refs.types.js.map +1 -0
  66. package/dist/types/index.d.ts +2 -1
  67. package/dist/types/index.d.ts.map +1 -1
  68. package/dist/types/index.js +1 -0
  69. package/dist/types/index.js.map +1 -1
  70. package/dist/utils/index.d.ts +6 -0
  71. package/dist/utils/index.d.ts.map +1 -1
  72. package/dist/utils/index.js +26 -8
  73. package/dist/utils/index.js.map +1 -1
  74. package/package.json +1 -1
@@ -1,14 +1,13 @@
1
- import type { DevStepsConfig, EisenhowerQuadrant, ItemMetadata, ItemType, Priority } from '../schemas/index.js';
1
+ import type { DevStepsConfig, EisenhowerQuadrant, ItemMetadata, ItemType } from '../schemas/index.js';
2
2
  export interface AddItemArgs {
3
3
  type: ItemType;
4
4
  title: string;
5
5
  description?: string;
6
6
  category?: string;
7
- priority?: Priority;
7
+ eisenhower?: EisenhowerQuadrant;
8
8
  tags?: string[];
9
9
  affected_paths?: string[];
10
10
  assignee?: string;
11
- eisenhower?: EisenhowerQuadrant;
12
11
  }
13
12
  export interface AddItemResult {
14
13
  itemId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACR,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAG7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CACjC;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA8G3F"}
1
+ {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,cAAc,EAEd,kBAAkB,EAClB,YAAY,EACZ,QAAQ,EACT,MAAM,qBAAqB,CAAC;AAe7B,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,kBAAkB,CAAC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,YAAY,CAAC;IACvB,MAAM,EAAE,cAAc,CAAC;CACxB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CA+H3F"}
package/dist/core/add.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { existsSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
- import { TYPE_TO_DIRECTORY, generateItemId, getCurrentTimestamp } from '../utils/index.js';
3
+ import { TYPE_TO_DIRECTORY, generateItemId, getCurrentTimestamp, getTypePrefix, } from '../utils/index.js';
4
+ import { hasRefsStyleIndex, loadCounters, updateCounters, addItemToIndex, } from './index-refs.js';
4
5
  /**
5
6
  * Core business logic for adding a new item to devsteps
6
7
  * Pure function that handles all file I/O and validation
@@ -12,32 +13,36 @@ export async function addItem(devstepsir, args) {
12
13
  }
13
14
  // Read config and index
14
15
  const configPath = join(devstepsir, 'config.json');
15
- const indexPath = join(devstepsir, 'index.json');
16
16
  const config = JSON.parse(readFileSync(configPath, 'utf-8'));
17
- const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
18
- // Migration: Initialize counters if missing (for legacy projects)
19
- if (!index.counters) {
20
- index.counters = {};
21
- // Calculate existing max IDs per type
22
- for (const item of index.items) {
23
- const match = item.id.match(/-(\d+)$/);
24
- if (match) {
25
- const num = Number.parseInt(match[1], 10);
26
- index.counters[item.type] = Math.max(index.counters[item.type] || 0, num);
17
+ // Get counter - try refs-style first, fallback to legacy
18
+ let counter;
19
+ const counterKey = getTypePrefix(args.type); // Use uppercase prefix for consistency
20
+ if (hasRefsStyleIndex(devstepsir)) {
21
+ const counters = loadCounters(devstepsir);
22
+ counter = (counters[counterKey] || 0) + 1;
23
+ }
24
+ else {
25
+ // Legacy index.json
26
+ const indexPath = join(devstepsir, 'index.json');
27
+ const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
28
+ // Migration: Initialize counters if missing (for legacy projects)
29
+ if (!index.counters) {
30
+ index.counters = {};
31
+ // Calculate existing max IDs per type
32
+ for (const item of index.items) {
33
+ const match = item.id.match(/-(\d+)$/);
34
+ if (match) {
35
+ const num = Number.parseInt(match[1], 10);
36
+ const prefix = item.id.replace(/-\d+$/, ''); // Extract prefix from ID (uppercase)
37
+ index.counters[prefix] = Math.max(index.counters[prefix] || 0, num);
38
+ }
27
39
  }
28
40
  }
41
+ counter = (index.counters[counterKey] || 0) + 1;
29
42
  }
30
43
  // Generate ID using global counter
31
44
  const typeFolder = TYPE_TO_DIRECTORY[args.type];
32
- const counter = (index.counters[args.type] || 0) + 1;
33
45
  const itemId = generateItemId(args.type, counter);
34
- // Check for duplicate ID (data integrity validation)
35
- const existingIds = index.items.map((i) => i.id);
36
- if (existingIds.includes(itemId)) {
37
- throw new Error(`Duplicate ID detected: ${itemId}. Index may be corrupted or counter was reset. Please check .devsteps/index.json`);
38
- }
39
- // Increment counter
40
- index.counters[args.type] = counter;
41
46
  // Create metadata
42
47
  const now = getCurrentTimestamp();
43
48
  const metadata = {
@@ -46,8 +51,7 @@ export async function addItem(devstepsir, args) {
46
51
  category: args.category || 'general',
47
52
  title: args.title,
48
53
  status: 'draft',
49
- priority: args.priority || 'medium',
50
- eisenhower: args.eisenhower,
54
+ eisenhower: args.eisenhower || 'not-urgent-important',
51
55
  created: now,
52
56
  updated: now,
53
57
  author: args.assignee || config.settings.default_author,
@@ -78,21 +82,38 @@ export async function addItem(devstepsir, args) {
78
82
  // Save description
79
83
  const description = args.description || `# ${args.title}\n\n<!-- Add detailed description here -->\n`;
80
84
  writeFileSync(descriptionPath, description);
81
- // Update index
82
- index.items.push({
83
- id: itemId,
84
- type: args.type,
85
- title: args.title,
86
- status: 'draft',
87
- priority: args.priority || 'medium',
88
- updated: now,
89
- });
90
- index.last_updated = now;
91
- index.stats = index.stats || { total: 0, by_type: {}, by_status: {} };
92
- index.stats.total = index.items.length;
93
- index.stats.by_type[args.type] = (index.stats.by_type[args.type] || 0) + 1;
94
- index.stats.by_status.draft = (index.stats.by_status.draft || 0) + 1;
95
- writeFileSync(indexPath, JSON.stringify(index, null, 2));
85
+ // Update index - use refs-style if available, otherwise legacy
86
+ if (hasRefsStyleIndex(devstepsir)) {
87
+ // Update counters (use uppercase prefix key for consistency)
88
+ const currentCounters = loadCounters(devstepsir);
89
+ currentCounters[counterKey] = counter;
90
+ updateCounters(devstepsir, currentCounters);
91
+ // Add to all relevant indexes (by-type, by-status, by-priority)
92
+ addItemToIndex(devstepsir, metadata);
93
+ }
94
+ else {
95
+ // Legacy index.json update
96
+ const indexPath = join(devstepsir, 'index.json');
97
+ const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
98
+ // Increment counter (use uppercase prefix key for consistency)
99
+ if (!index.counters)
100
+ index.counters = {};
101
+ index.counters[counterKey] = counter;
102
+ index.items.push({
103
+ id: itemId,
104
+ type: args.type,
105
+ title: args.title,
106
+ status: 'draft',
107
+ eisenhower: args.eisenhower || 'not-urgent-important',
108
+ updated: now,
109
+ });
110
+ index.last_updated = now;
111
+ index.stats = index.stats || { total: 0, by_type: {}, by_status: {} };
112
+ index.stats.total = index.items.length;
113
+ index.stats.by_type[args.type] = (index.stats.by_type[args.type] || 0) + 1;
114
+ index.stats.by_status.draft = (index.stats.by_status.draft || 0) + 1;
115
+ writeFileSync(indexPath, JSON.stringify(index, null, 2));
116
+ }
96
117
  return {
97
118
  itemId,
98
119
  metadata,
@@ -1 +1 @@
1
- {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/core/add.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAGrE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0EhG;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA6C3B"}
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAErE,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,UAAU,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAyFhG;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,MAAM,EAClB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,gBAAgB,CAAC,CA6C3B"}
@@ -1,6 +1,7 @@
1
1
  import { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { TYPE_TO_DIRECTORY, getCurrentTimestamp, parseItemId } from '../utils/index.js';
4
+ import { hasRefsStyleIndex, removeItemFromIndex } from './index-refs.js';
4
5
  /**
5
6
  * Core business logic for archiving a single item
6
7
  */
@@ -31,35 +32,44 @@ export async function archiveItem(devstepsir, itemId) {
31
32
  if (existsSync(descriptionPath)) {
32
33
  renameSync(descriptionPath, archiveDescriptionPath);
33
34
  }
34
- // Update index
35
- const indexPath = join(devstepsir, 'index.json');
36
- const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
37
- // Remove from items
38
- const itemIndex = index.items.findIndex((i) => i.id === itemId);
39
- if (itemIndex !== -1) {
40
- index.items.splice(itemIndex, 1);
35
+ // Update index - use refs-style if available, otherwise legacy
36
+ if (hasRefsStyleIndex(devstepsir)) {
37
+ // Remove from all indexes (by-type, by-status, by-priority)
38
+ removeItemFromIndex(devstepsir, itemId, metadata.type, metadata.status, metadata.eisenhower);
39
+ // Note: refs-style doesn't track archived_items in index
40
+ // Archive metadata already contains all needed info
41
41
  }
42
- // Add to archived_items
43
- const archivedAt = getCurrentTimestamp();
44
- index.archived_items = index.archived_items || [];
45
- index.archived_items.push({
46
- id: itemId,
47
- type: parsed.type,
48
- title: metadata.title,
49
- archived_at: archivedAt,
50
- original_status: originalStatus,
51
- });
52
- // Update stats
53
- if (index.stats) {
54
- index.stats.total = index.items.length;
55
- index.stats.by_status[originalStatus] = Math.max((index.stats.by_status[originalStatus] || 1) - 1, 0);
56
- index.stats.archived = (index.stats.archived || 0) + 1;
42
+ else {
43
+ // Legacy index.json update
44
+ const indexPath = join(devstepsir, 'index.json');
45
+ const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
46
+ // Remove from items
47
+ const itemIndex = index.items.findIndex((i) => i.id === itemId);
48
+ if (itemIndex !== -1) {
49
+ index.items.splice(itemIndex, 1);
50
+ }
51
+ // Add to archived_items
52
+ const archivedAt = getCurrentTimestamp();
53
+ index.archived_items = index.archived_items || [];
54
+ index.archived_items.push({
55
+ id: itemId,
56
+ type: parsed.type,
57
+ title: metadata.title,
58
+ archived_at: archivedAt,
59
+ original_status: originalStatus,
60
+ });
61
+ // Update stats
62
+ if (index.stats) {
63
+ index.stats.total = index.items.length;
64
+ index.stats.by_status[originalStatus] = Math.max((index.stats.by_status[originalStatus] || 1) - 1, 0);
65
+ index.stats.archived = (index.stats.archived || 0) + 1;
66
+ }
67
+ index.last_updated = archivedAt;
68
+ writeFileSync(indexPath, JSON.stringify(index, null, 2));
57
69
  }
58
- index.last_updated = archivedAt;
59
- writeFileSync(indexPath, JSON.stringify(index, null, 2));
60
70
  return {
61
71
  itemId,
62
- archivedAt,
72
+ archivedAt: getCurrentTimestamp(),
63
73
  originalStatus,
64
74
  };
65
75
  }
@@ -1 +1 @@
1
- {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/core/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Auto-Migration Module
3
+ *
4
+ * Provides auto-detection and migration for external DevSteps projects.
5
+ * Safely migrates from legacy index.json to refs-style distributed index.
6
+ *
7
+ * Safe to call repeatedly - only migrates once.
8
+ *
9
+ * @see STORY-073 External Project Migration Auto-Detection
10
+ * @see EPIC-018 Index Architecture Refactoring
11
+ */
12
+ /**
13
+ * Migration check result
14
+ */
15
+ export interface MigrationCheckResult {
16
+ /** Whether migration is needed */
17
+ needed: boolean;
18
+ /** Whether legacy index exists */
19
+ hasLegacy: boolean;
20
+ /** Whether refs-style index exists */
21
+ hasRefs: boolean;
22
+ /** Number of items in legacy index (if exists) */
23
+ itemCount?: number;
24
+ /** Human-readable status message */
25
+ message: string;
26
+ }
27
+ /**
28
+ * Auto-migration options
29
+ */
30
+ export interface AutoMigrationOptions {
31
+ /** Skip backup creation (advanced users only) */
32
+ skipBackup?: boolean;
33
+ /** Silent mode - suppress console output */
34
+ silent?: boolean;
35
+ /** Dry-run mode - check only, don't migrate */
36
+ dryRun?: boolean;
37
+ }
38
+ /**
39
+ * Migration statistics
40
+ */
41
+ export interface MigrationStats {
42
+ totalItems: number;
43
+ byType: Record<string, number>;
44
+ byStatus: Record<string, number>;
45
+ byPriority: Record<string, number>;
46
+ backupPath?: string;
47
+ archivePath?: string;
48
+ }
49
+ /**
50
+ * Check if migration is needed
51
+ *
52
+ * Migration is needed when:
53
+ * - Legacy index.json exists
54
+ * - Refs-style index/ doesn't exist
55
+ *
56
+ * @param devstepsDir Path to .devsteps directory
57
+ * @returns Migration check result with details
58
+ *
59
+ * @example
60
+ * ```typescript
61
+ * const result = checkMigrationNeeded('/path/to/.devsteps');
62
+ * if (result.needed) {
63
+ * console.log(result.message);
64
+ * await ensureIndexMigrated('/path/to/.devsteps');
65
+ * }
66
+ * ```
67
+ */
68
+ export declare function checkMigrationNeeded(devstepsDir: string): MigrationCheckResult;
69
+ /**
70
+ * Perform index migration (internal implementation)
71
+ *
72
+ * This is the core migration logic without console output.
73
+ * Use ensureIndexMigrated() for auto-migration with user feedback.
74
+ *
75
+ * @param devstepsDir Path to .devsteps directory
76
+ * @param options Migration options
77
+ * @returns Migration statistics
78
+ * @throws Error if migration fails or preconditions not met
79
+ * @internal
80
+ */
81
+ export declare function performMigration(devstepsDir: string, options?: AutoMigrationOptions): Promise<MigrationStats>;
82
+ /**
83
+ * Get user-friendly status message
84
+ *
85
+ * @param devstepsDir Path to .devsteps directory
86
+ * @returns Human-readable status message
87
+ *
88
+ * @example
89
+ * ```typescript
90
+ * console.log(getMigrationStatusMessage('/path/to/.devsteps'));
91
+ * // Output: "📦 DevSteps project using refs-style index ✓"
92
+ * ```
93
+ */
94
+ export declare function getMigrationStatusMessage(devstepsDir: string): string;
95
+ /**
96
+ * Automatically migrate if needed
97
+ *
98
+ * Safe to call repeatedly - only migrates once.
99
+ * Checks if migration is needed and runs it if necessary.
100
+ *
101
+ * @param devstepsDir Path to .devsteps directory
102
+ * @param options Migration options
103
+ * @returns True if migration was performed, false if not needed
104
+ * @throws Error if migration fails
105
+ *
106
+ * @example
107
+ * ```typescript
108
+ * // Auto-migrate with user feedback
109
+ * const migrated = await ensureIndexMigrated('/path/to/.devsteps');
110
+ * if (migrated) {
111
+ * console.log('✨ Migration complete!');
112
+ * }
113
+ *
114
+ * // Silent auto-migration (for background tasks)
115
+ * await ensureIndexMigrated('/path/to/.devsteps', { silent: true });
116
+ *
117
+ * // Dry-run (check only)
118
+ * const needed = await ensureIndexMigrated('/path/to/.devsteps', { dryRun: true });
119
+ * ```
120
+ */
121
+ export declare function ensureIndexMigrated(devstepsDir: string, options?: AutoMigrationOptions): Promise<boolean>;
122
+ /**
123
+ * Check if items/ directory migration is needed
124
+ *
125
+ * Returns true if using flat structure (epics/, stories/)
126
+ * instead of nested structure (items/epics/, items/stories/)
127
+ */
128
+ export declare function needsItemsDirectoryMigration(devstepsDir: string): boolean;
129
+ /**
130
+ * Migrate from flat directory structure to items/ subdirectory
131
+ *
132
+ * Moves files from:
133
+ * .devsteps/epics/EPIC-001.json → .devsteps/items/epics/EPIC-001.json
134
+ * .devsteps/stories/... → .devsteps/items/stories/...
135
+ *
136
+ * @param devstepsDir Path to .devsteps directory
137
+ * @param options Migration options
138
+ * @returns Migration statistics
139
+ */
140
+ export declare function migrateItemsDirectory(devstepsDir: string, options?: AutoMigrationOptions): {
141
+ moved: number;
142
+ types: Record<string, number>;
143
+ };
144
+ /**
145
+ * Ensure index is migrated AND items are in correct directory structure
146
+ *
147
+ * Combines both migrations:
148
+ * 1. Legacy index.json → refs-style index/ (if needed)
149
+ * 2. Flat structure → items/ subdirectory (if needed)
150
+ *
151
+ * Safe to call on every operation - only migrates when needed.
152
+ */
153
+ export declare function ensureFullMigration(devstepsDir: string, options?: AutoMigrationOptions): Promise<void>;
154
+ //# sourceMappingURL=auto-migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto-migrate.d.ts","sourceRoot":"","sources":["../../src/core/auto-migrate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,kCAAkC;IAClC,MAAM,EAAE,OAAO,CAAC;IAEhB,kCAAkC;IAClC,SAAS,EAAE,OAAO,CAAC;IAEnB,sCAAsC;IACtC,OAAO,EAAE,OAAO,CAAC;IAEjB,kDAAkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACpC,iDAAiD;IACjD,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,OAAO,CAAC;IAEjB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAmBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,oBAAoB,CA2D9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACrC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,cAAc,CAAC,CA4FzB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAqBrE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,mBAAmB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,OAAO,CAAC,CAoDlB;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAWzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,qBAAqB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GAChC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,CAuDlD;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CACxC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GAChC,OAAO,CAAC,IAAI,CAAC,CAQf"}