specweave 0.29.0 → 0.29.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 (87) hide show
  1. package/package.json +3 -1
  2. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +12 -0
  3. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +18 -0
  4. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +0 -26
  5. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +0 -1
  6. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +0 -249
  7. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +0 -1
  8. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts +0 -28
  9. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.d.ts.map +0 -1
  10. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -156
  11. package/dist/plugins/specweave-jira/lib/enhanced-jira-sync.js.map +0 -1
  12. package/dist/src/core/sync/bidirectional-engine.d.ts +0 -119
  13. package/dist/src/core/sync/bidirectional-engine.d.ts.map +0 -1
  14. package/dist/src/core/sync/bidirectional-engine.js +0 -359
  15. package/dist/src/core/sync/bidirectional-engine.js.map +0 -1
  16. package/dist/src/core/sync/conflict-resolver.d.ts +0 -66
  17. package/dist/src/core/sync/conflict-resolver.d.ts.map +0 -1
  18. package/dist/src/core/sync/conflict-resolver.js +0 -108
  19. package/dist/src/core/sync/conflict-resolver.js.map +0 -1
  20. package/dist/src/core/sync/enhanced-content-builder.d.ts +0 -55
  21. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +0 -1
  22. package/dist/src/core/sync/enhanced-content-builder.js +0 -203
  23. package/dist/src/core/sync/enhanced-content-builder.js.map +0 -1
  24. package/dist/src/core/sync/folder-mapper.d.ts +0 -71
  25. package/dist/src/core/sync/folder-mapper.d.ts.map +0 -1
  26. package/dist/src/core/sync/folder-mapper.js +0 -203
  27. package/dist/src/core/sync/folder-mapper.js.map +0 -1
  28. package/dist/src/core/sync/label-detector.d.ts +0 -66
  29. package/dist/src/core/sync/label-detector.d.ts.map +0 -1
  30. package/dist/src/core/sync/label-detector.js +0 -224
  31. package/dist/src/core/sync/label-detector.js.map +0 -1
  32. package/dist/src/core/sync/performance-optimizer.d.ts +0 -153
  33. package/dist/src/core/sync/performance-optimizer.d.ts.map +0 -1
  34. package/dist/src/core/sync/performance-optimizer.js +0 -220
  35. package/dist/src/core/sync/performance-optimizer.js.map +0 -1
  36. package/dist/src/core/sync/profile-selector.d.ts +0 -52
  37. package/dist/src/core/sync/profile-selector.d.ts.map +0 -1
  38. package/dist/src/core/sync/profile-selector.js +0 -179
  39. package/dist/src/core/sync/profile-selector.js.map +0 -1
  40. package/dist/src/core/sync/profile-validator.d.ts +0 -52
  41. package/dist/src/core/sync/profile-validator.d.ts.map +0 -1
  42. package/dist/src/core/sync/profile-validator.js +0 -170
  43. package/dist/src/core/sync/profile-validator.js.map +0 -1
  44. package/dist/src/core/sync/rate-limiter.d.ts +0 -116
  45. package/dist/src/core/sync/rate-limiter.d.ts.map +0 -1
  46. package/dist/src/core/sync/rate-limiter.js +0 -308
  47. package/dist/src/core/sync/rate-limiter.js.map +0 -1
  48. package/dist/src/core/sync/retry-handler.d.ts +0 -98
  49. package/dist/src/core/sync/retry-handler.d.ts.map +0 -1
  50. package/dist/src/core/sync/retry-handler.js +0 -196
  51. package/dist/src/core/sync/retry-handler.js.map +0 -1
  52. package/dist/src/core/sync/retry-logic.d.ts +0 -64
  53. package/dist/src/core/sync/retry-logic.d.ts.map +0 -1
  54. package/dist/src/core/sync/retry-logic.js +0 -165
  55. package/dist/src/core/sync/retry-logic.js.map +0 -1
  56. package/dist/src/core/sync/status-cache.d.ts +0 -91
  57. package/dist/src/core/sync/status-cache.d.ts.map +0 -1
  58. package/dist/src/core/sync/status-cache.js +0 -140
  59. package/dist/src/core/sync/status-cache.js.map +0 -1
  60. package/dist/src/core/sync/status-mapper.d.ts +0 -69
  61. package/dist/src/core/sync/status-mapper.d.ts.map +0 -1
  62. package/dist/src/core/sync/status-mapper.js +0 -90
  63. package/dist/src/core/sync/status-mapper.js.map +0 -1
  64. package/dist/src/core/sync/status-sync-engine.d.ts +0 -162
  65. package/dist/src/core/sync/status-sync-engine.d.ts.map +0 -1
  66. package/dist/src/core/sync/status-sync-engine.js +0 -347
  67. package/dist/src/core/sync/status-sync-engine.js.map +0 -1
  68. package/dist/src/core/sync/sync-event-logger.d.ts +0 -113
  69. package/dist/src/core/sync/sync-event-logger.d.ts.map +0 -1
  70. package/dist/src/core/sync/sync-event-logger.js +0 -141
  71. package/dist/src/core/sync/sync-event-logger.js.map +0 -1
  72. package/dist/src/core/sync/time-range-selector.d.ts +0 -48
  73. package/dist/src/core/sync/time-range-selector.d.ts.map +0 -1
  74. package/dist/src/core/sync/time-range-selector.js +0 -224
  75. package/dist/src/core/sync/time-range-selector.js.map +0 -1
  76. package/dist/src/core/sync/types.d.ts +0 -52
  77. package/dist/src/core/sync/types.d.ts.map +0 -1
  78. package/dist/src/core/sync/types.js +0 -5
  79. package/dist/src/core/sync/types.js.map +0 -1
  80. package/dist/src/core/sync/workflow-detector.d.ts +0 -95
  81. package/dist/src/core/sync/workflow-detector.d.ts.map +0 -1
  82. package/dist/src/core/sync/workflow-detector.js +0 -175
  83. package/dist/src/core/sync/workflow-detector.js.map +0 -1
  84. package/plugins/specweave-github/lib/enhanced-github-sync.js +0 -220
  85. package/plugins/specweave-github/lib/enhanced-github-sync.ts +0 -322
  86. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +0 -134
  87. package/plugins/specweave-jira/lib/enhanced-jira-sync.ts +0 -196
@@ -1,140 +0,0 @@
1
- /**
2
- * Status Cache
3
- *
4
- * Caches external tool statuses to reduce API calls.
5
- * Uses in-memory cache with TTL (default: 5 minutes).
6
- *
7
- * Performance Optimization:
8
- * - Reduces redundant API calls
9
- * - Improves sync speed
10
- * - Respects rate limits
11
- *
12
- * @module status-cache
13
- */
14
- /**
15
- * Status Cache
16
- *
17
- * Generic cache for external tool statuses.
18
- */
19
- export class StatusCache {
20
- constructor(options) {
21
- this.cache = new Map();
22
- this.defaultTtl = options?.ttl || 5 * 60 * 1000; // 5 minutes default
23
- }
24
- /**
25
- * Get value from cache
26
- *
27
- * @param key - Cache key
28
- * @returns Cached value or undefined if not found/expired
29
- */
30
- get(key) {
31
- const entry = this.cache.get(key);
32
- if (!entry) {
33
- return undefined;
34
- }
35
- // Check if expired
36
- const now = Date.now();
37
- const age = now - entry.timestamp;
38
- if (age > entry.ttl) {
39
- // Expired - remove and return undefined
40
- this.cache.delete(key);
41
- return undefined;
42
- }
43
- return entry.value;
44
- }
45
- /**
46
- * Set value in cache
47
- *
48
- * @param key - Cache key
49
- * @param value - Value to cache
50
- * @param ttl - Optional TTL override (ms)
51
- */
52
- set(key, value, ttl) {
53
- const entry = {
54
- value,
55
- timestamp: Date.now(),
56
- ttl: ttl || this.defaultTtl
57
- };
58
- this.cache.set(key, entry);
59
- }
60
- /**
61
- * Check if key exists and is not expired
62
- *
63
- * @param key - Cache key
64
- * @returns True if key exists and is not expired
65
- */
66
- has(key) {
67
- return this.get(key) !== undefined;
68
- }
69
- /**
70
- * Delete key from cache
71
- *
72
- * @param key - Cache key
73
- */
74
- delete(key) {
75
- this.cache.delete(key);
76
- }
77
- /**
78
- * Clear all cache entries
79
- */
80
- clear() {
81
- this.cache.clear();
82
- }
83
- /**
84
- * Get cache size
85
- *
86
- * @returns Number of entries in cache
87
- */
88
- size() {
89
- // Clean up expired entries first
90
- this.cleanup();
91
- return this.cache.size;
92
- }
93
- /**
94
- * Clean up expired entries
95
- *
96
- * Removes all expired entries from cache.
97
- */
98
- cleanup() {
99
- const now = Date.now();
100
- const keysToDelete = [];
101
- for (const [key, entry] of this.cache.entries()) {
102
- const age = now - entry.timestamp;
103
- if (age > entry.ttl) {
104
- keysToDelete.push(key);
105
- }
106
- }
107
- for (const key of keysToDelete) {
108
- this.cache.delete(key);
109
- }
110
- }
111
- /**
112
- * Get cache statistics
113
- *
114
- * @returns Cache statistics (size, oldest entry age)
115
- */
116
- getStats() {
117
- this.cleanup();
118
- if (this.cache.size === 0) {
119
- return { size: 0, oldestEntryAge: null };
120
- }
121
- const now = Date.now();
122
- let oldestTimestamp = now;
123
- for (const entry of this.cache.values()) {
124
- if (entry.timestamp < oldestTimestamp) {
125
- oldestTimestamp = entry.timestamp;
126
- }
127
- }
128
- return {
129
- size: this.cache.size,
130
- oldestEntryAge: now - oldestTimestamp
131
- };
132
- }
133
- }
134
- /**
135
- * Global status cache instance
136
- *
137
- * Used across all sync operations for maximum efficiency.
138
- */
139
- export const globalStatusCache = new StatusCache();
140
- //# sourceMappingURL=status-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-cache.js","sourceRoot":"","sources":["../../../../src/core/sync/status-cache.ts"],"names":[],"mappings":"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"}
@@ -1,69 +0,0 @@
1
- /**
2
- * Status Mapper
3
- *
4
- * Maps SpecWeave increment statuses to tool-specific statuses for
5
- * GitHub, JIRA, and Azure DevOps.
6
- *
7
- * Supports both simple string mappings and complex mappings with
8
- * labels/tags for more granular status representation.
9
- */
10
- export type ExternalTool = 'github' | 'jira' | 'ado';
11
- export type SpecWeaveStatus = 'planning' | 'active' | 'paused' | 'completed' | 'abandoned';
12
- export interface StatusMappingConfig {
13
- state: string;
14
- labels?: string[];
15
- tags?: string[];
16
- }
17
- export type StatusMappingValue = string | StatusMappingConfig;
18
- export interface ToolStatusMappings {
19
- planning: StatusMappingValue;
20
- active: StatusMappingValue;
21
- paused: StatusMappingValue;
22
- completed: StatusMappingValue;
23
- abandoned: StatusMappingValue;
24
- }
25
- export interface StatusSyncConfig {
26
- enabled: boolean;
27
- autoSync?: boolean;
28
- promptUser?: boolean;
29
- conflictResolution?: 'prompt' | 'last-write-wins' | 'specweave-wins' | 'external-wins';
30
- mappings: {
31
- github?: ToolStatusMappings;
32
- jira?: ToolStatusMappings;
33
- ado?: ToolStatusMappings;
34
- };
35
- }
36
- export interface ValidationResult {
37
- valid: boolean;
38
- errors: string[];
39
- }
40
- export interface SyncConfig {
41
- sync: {
42
- statusSync: StatusSyncConfig;
43
- };
44
- }
45
- export declare class StatusMapper {
46
- private config;
47
- constructor(config: SyncConfig);
48
- /**
49
- * Map SpecWeave status to external tool status
50
- */
51
- mapToExternal(specweaveStatus: string, tool: ExternalTool): StatusMappingConfig;
52
- /**
53
- * Map external tool status to SpecWeave status (reverse lookup)
54
- */
55
- mapFromExternal(externalStatus: string, tool: ExternalTool): SpecWeaveStatus | null;
56
- /**
57
- * Validate status mapping configuration
58
- */
59
- validate(): ValidationResult;
60
- /**
61
- * Get all required SpecWeave statuses
62
- */
63
- getRequiredStatuses(): SpecWeaveStatus[];
64
- /**
65
- * Get all supported external tools
66
- */
67
- getSupportedTools(): ExternalTool[];
68
- }
69
- //# sourceMappingURL=status-mapper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-mapper.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/status-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC;AAE3F,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,mBAAmB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,SAAS,EAAE,kBAAkB,CAAC;IAC9B,SAAS,EAAE,kBAAkB,CAAC;CAC/B;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,QAAQ,GAAG,iBAAiB,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACvF,QAAQ,EAAE;QACR,MAAM,CAAC,EAAE,kBAAkB,CAAC;QAC5B,IAAI,CAAC,EAAE,kBAAkB,CAAC;QAC1B,GAAG,CAAC,EAAE,kBAAkB,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE;QACJ,UAAU,EAAE,gBAAgB,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAa;gBAEf,MAAM,EAAE,UAAU;IAI9B;;OAEG;IACI,aAAa,CAClB,eAAe,EAAE,MAAM,EACvB,IAAI,EAAE,YAAY,GACjB,mBAAmB;IAqBtB;;OAEG;IACI,eAAe,CACpB,cAAc,EAAE,MAAM,EACtB,IAAI,EAAE,YAAY,GACjB,eAAe,GAAG,IAAI;IAkBzB;;OAEG;IACI,QAAQ,IAAI,gBAAgB;IA+BnC;;OAEG;IACI,mBAAmB,IAAI,eAAe,EAAE;IAI/C;;OAEG;IACI,iBAAiB,IAAI,YAAY,EAAE;CAG3C"}
@@ -1,90 +0,0 @@
1
- /**
2
- * Status Mapper
3
- *
4
- * Maps SpecWeave increment statuses to tool-specific statuses for
5
- * GitHub, JIRA, and Azure DevOps.
6
- *
7
- * Supports both simple string mappings and complex mappings with
8
- * labels/tags for more granular status representation.
9
- */
10
- export class StatusMapper {
11
- constructor(config) {
12
- this.config = config;
13
- }
14
- /**
15
- * Map SpecWeave status to external tool status
16
- */
17
- mapToExternal(specweaveStatus, tool) {
18
- const mappings = this.config.sync.statusSync.mappings[tool];
19
- if (!mappings) {
20
- throw new Error(`No status mappings configured for ${tool}`);
21
- }
22
- const mapping = mappings[specweaveStatus];
23
- if (!mapping) {
24
- throw new Error(`No mapping for status "${specweaveStatus}" in ${tool}`);
25
- }
26
- // Normalize to StatusMappingConfig
27
- if (typeof mapping === 'string') {
28
- return { state: mapping };
29
- }
30
- return mapping;
31
- }
32
- /**
33
- * Map external tool status to SpecWeave status (reverse lookup)
34
- */
35
- mapFromExternal(externalStatus, tool) {
36
- const mappings = this.config.sync.statusSync.mappings[tool];
37
- if (!mappings) {
38
- return null;
39
- }
40
- for (const [specweaveStatus, mapping] of Object.entries(mappings)) {
41
- const state = typeof mapping === 'string' ? mapping : mapping.state;
42
- if (state === externalStatus) {
43
- return specweaveStatus;
44
- }
45
- }
46
- return null; // Unknown external status
47
- }
48
- /**
49
- * Validate status mapping configuration
50
- */
51
- validate() {
52
- const errors = [];
53
- const requiredStatuses = [
54
- 'planning',
55
- 'active',
56
- 'paused',
57
- 'completed',
58
- 'abandoned'
59
- ];
60
- for (const tool of ['github', 'jira', 'ado']) {
61
- const mappings = this.config.sync.statusSync.mappings[tool];
62
- if (!mappings) {
63
- errors.push(`No mappings configured for ${tool}`);
64
- continue;
65
- }
66
- for (const status of requiredStatuses) {
67
- if (!mappings[status]) {
68
- errors.push(`Missing mapping for "${status}" in ${tool}`);
69
- }
70
- }
71
- }
72
- return {
73
- valid: errors.length === 0,
74
- errors
75
- };
76
- }
77
- /**
78
- * Get all required SpecWeave statuses
79
- */
80
- getRequiredStatuses() {
81
- return ['planning', 'active', 'paused', 'completed', 'abandoned'];
82
- }
83
- /**
84
- * Get all supported external tools
85
- */
86
- getSupportedTools() {
87
- return ['github', 'jira', 'ado'];
88
- }
89
- }
90
- //# sourceMappingURL=status-mapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-mapper.js","sourceRoot":"","sources":["../../../../src/core/sync/status-mapper.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA6CH,MAAM,OAAO,YAAY;IAGvB,YAAY,MAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,aAAa,CAClB,eAAuB,EACvB,IAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,EAAE,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,OAAO,GAAG,QAAQ,CAAC,eAAkC,CAAC,CAAC;QAE7D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,0BAA0B,eAAe,QAAQ,IAAI,EAAE,CAAC,CAAC;QAC3E,CAAC;QAED,mCAAmC;QACnC,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAChC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACI,eAAe,CACpB,cAAsB,EACtB,IAAkB;QAElB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,MAAM,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,MAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;YAEpE,IAAI,KAAK,KAAK,cAAc,EAAE,CAAC;gBAC7B,OAAO,eAAkC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC,CAAC,0BAA0B;IACzC,CAAC;IAED;;OAEG;IACI,QAAQ;QACb,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,MAAM,gBAAgB,GAAsB;YAC1C,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,WAAW;SACZ,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAU,EAAE,CAAC;YACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAE5D,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;gBAClD,SAAS;YACX,CAAC;YAED,KAAK,MAAM,MAAM,IAAI,gBAAgB,EAAE,CAAC;gBACtC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtB,MAAM,CAAC,IAAI,CAAC,wBAAwB,MAAM,QAAQ,IAAI,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;YAC1B,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,mBAAmB;QACxB,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACI,iBAAiB;QACtB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;CACF"}
@@ -1,162 +0,0 @@
1
- /**
2
- * Status Sync Engine
3
- *
4
- * Core orchestration logic for status synchronization between SpecWeave
5
- * increments and external tools (GitHub, JIRA, Azure DevOps).
6
- *
7
- * Responsibilities:
8
- * - Orchestrate bidirectional status sync
9
- * - Detect and resolve conflicts
10
- * - Map statuses between SpecWeave and external tools
11
- * - Respect user preferences (autoSync, promptUser, conflictResolution)
12
- */
13
- import { StatusMappingConfig, ExternalTool, SpecWeaveStatus } from './status-mapper.js';
14
- import { StatusConflict, ConflictResolution, ConflictResolutionStrategy } from './conflict-resolver.js';
15
- export type SyncDirection = 'to-external' | 'from-external' | 'bidirectional';
16
- export type SyncAction = 'no-sync-needed' | 'sync-to-external' | 'sync-from-external';
17
- export interface SyncInput {
18
- incrementId: string;
19
- tool: ExternalTool;
20
- localStatus: SpecWeaveStatus;
21
- remoteStatus: string;
22
- localTimestamp: string;
23
- remoteTimestamp: string;
24
- }
25
- export interface SyncResult {
26
- success: boolean;
27
- direction: SyncDirection;
28
- action: SyncAction;
29
- conflict: StatusConflict | null;
30
- resolution: ConflictResolution | null;
31
- externalMapping: StatusMappingConfig | null;
32
- error?: string;
33
- wasAutomatic?: boolean;
34
- wasPrompted?: boolean;
35
- }
36
- export interface StatusSyncConfig {
37
- sync: {
38
- statusSync: {
39
- enabled: boolean;
40
- autoSync?: boolean;
41
- promptUser?: boolean;
42
- conflictResolution?: ConflictResolutionStrategy;
43
- mappings: {
44
- github?: any;
45
- jira?: any;
46
- ado?: any;
47
- };
48
- };
49
- };
50
- }
51
- /**
52
- * Bulk sync input (multiple increments)
53
- */
54
- export type BulkSyncInput = SyncInput;
55
- /**
56
- * Bulk sync options
57
- */
58
- export interface BulkSyncOptions {
59
- batchSize?: number;
60
- delayMs?: number;
61
- }
62
- /**
63
- * Individual sync result with increment ID
64
- */
65
- export interface BulkSyncItemResult extends SyncResult {
66
- incrementId: string;
67
- }
68
- /**
69
- * Bulk sync result
70
- */
71
- export interface BulkSyncResult {
72
- totalItems: number;
73
- successCount: number;
74
- failureCount: number;
75
- results: BulkSyncItemResult[];
76
- duration: string;
77
- }
78
- export declare class StatusSyncEngine {
79
- private mapper;
80
- private resolver;
81
- private config;
82
- constructor(config: StatusSyncConfig);
83
- /**
84
- * Sync SpecWeave status to external tool (one-way: SpecWeave → External)
85
- *
86
- * @param input - Sync input with local/remote statuses
87
- * @returns Sync result with conflict resolution details
88
- */
89
- syncToExternal(input: SyncInput): Promise<SyncResult>;
90
- /**
91
- * Sync external status to SpecWeave (one-way: External → SpecWeave)
92
- *
93
- * @param input - Sync input with local/remote statuses
94
- * @returns Sync result with conflict resolution details
95
- */
96
- syncFromExternal(input: SyncInput): Promise<SyncResult>;
97
- /**
98
- * Three-permission sync (SpecWeave ↔ External)
99
- *
100
- * Detects conflict and resolves based on strategy.
101
- * Syncs in the direction indicated by resolution.
102
- *
103
- * @param input - Sync input with local/remote statuses
104
- * @returns Sync result with conflict resolution details
105
- */
106
- bidirectionalSync(input: SyncInput): Promise<SyncResult>;
107
- /**
108
- * Bulk sync multiple increments to external tools
109
- *
110
- * Batches requests to avoid rate limiting.
111
- * Adds delays between batches.
112
- * Returns aggregate results with success/failure counts.
113
- *
114
- * @param inputs - Array of sync inputs
115
- * @param options - Bulk sync options (batch size, delay)
116
- * @returns Bulk sync result
117
- */
118
- bulkSyncToExternal(inputs: BulkSyncInput[], options?: BulkSyncOptions): Promise<BulkSyncResult>;
119
- /**
120
- * Check if auto-sync is enabled
121
- *
122
- * @returns True if auto-sync is enabled
123
- */
124
- isAutoSyncEnabled(): boolean;
125
- /**
126
- * Check if user should be prompted
127
- *
128
- * @returns True if user should be prompted (default: true)
129
- */
130
- shouldPromptUser(): boolean;
131
- /**
132
- * Execute automatic sync without prompting
133
- *
134
- * Validates that auto-sync is enabled.
135
- * Handles errors gracefully (doesn't throw, returns error in result).
136
- *
137
- * @param input - Sync input
138
- * @returns Sync result with wasAutomatic flag
139
- */
140
- executeAutoSync(input: SyncInput): Promise<SyncResult>;
141
- /**
142
- * Calculate batches from input array
143
- *
144
- * @param inputs - Array of inputs
145
- * @param batchSize - Size of each batch
146
- * @returns Array of batches
147
- */
148
- private calculateBatches;
149
- /**
150
- * Delay execution for specified milliseconds
151
- *
152
- * @param ms - Milliseconds to delay
153
- */
154
- private delay;
155
- /**
156
- * Validate that status synchronization is enabled
157
- *
158
- * @throws Error if sync is disabled
159
- */
160
- private validateSyncEnabled;
161
- }
162
- //# sourceMappingURL=status-sync-engine.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"status-sync-engine.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/status-sync-engine.ts"],"names":[],"mappings":"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"}