specweave 0.17.16 → 0.18.0

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 (161) hide show
  1. package/CLAUDE.md +405 -2495
  2. package/README.md +92 -2
  3. package/dist/plugins/specweave/lib/hooks/sync-living-docs.d.ts.map +1 -1
  4. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js +188 -36
  5. package/dist/plugins/specweave/lib/hooks/sync-living-docs.js.map +1 -1
  6. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts +54 -0
  7. package/dist/plugins/specweave-ado/lib/ado-status-sync.d.ts.map +1 -0
  8. package/dist/plugins/specweave-ado/lib/ado-status-sync.js +86 -0
  9. package/dist/plugins/specweave-ado/lib/ado-status-sync.js.map +1 -0
  10. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts +139 -0
  11. package/dist/plugins/specweave-github/lib/duplicate-detector.d.ts.map +1 -0
  12. package/dist/plugins/specweave-github/lib/duplicate-detector.js +389 -0
  13. package/dist/plugins/specweave-github/lib/duplicate-detector.js.map +1 -0
  14. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts +26 -0
  15. package/dist/plugins/specweave-github/lib/enhanced-github-sync.d.ts.map +1 -0
  16. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js +249 -0
  17. package/dist/plugins/specweave-github/lib/enhanced-github-sync.js.map +1 -0
  18. package/dist/plugins/specweave-github/lib/github-client.d.ts +1 -1
  19. package/dist/plugins/specweave-github/lib/github-client.d.ts.map +1 -1
  20. package/dist/plugins/specweave-github/lib/github-client.js +25 -13
  21. package/dist/plugins/specweave-github/lib/github-client.js.map +1 -1
  22. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts +83 -0
  23. package/dist/plugins/specweave-github/lib/github-epic-sync.d.ts.map +1 -0
  24. package/dist/plugins/specweave-github/lib/github-epic-sync.js +451 -0
  25. package/dist/plugins/specweave-github/lib/github-epic-sync.js.map +1 -0
  26. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts +43 -0
  27. package/dist/plugins/specweave-github/lib/github-status-sync.d.ts.map +1 -0
  28. package/dist/plugins/specweave-github/lib/github-status-sync.js +82 -0
  29. package/dist/plugins/specweave-github/lib/github-status-sync.js.map +1 -0
  30. package/dist/plugins/specweave-github/lib/task-sync.d.ts +5 -0
  31. package/dist/plugins/specweave-github/lib/task-sync.d.ts.map +1 -1
  32. package/dist/plugins/specweave-github/lib/task-sync.js +38 -2
  33. package/dist/plugins/specweave-github/lib/task-sync.js.map +1 -1
  34. package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts +66 -0
  35. package/dist/plugins/specweave-jira/lib/jira-epic-sync.d.ts.map +1 -0
  36. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js +274 -0
  37. package/dist/plugins/specweave-jira/lib/jira-epic-sync.js.map +1 -0
  38. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts +56 -0
  39. package/dist/plugins/specweave-jira/lib/jira-status-sync.d.ts.map +1 -0
  40. package/dist/plugins/specweave-jira/lib/jira-status-sync.js +93 -0
  41. package/dist/plugins/specweave-jira/lib/jira-status-sync.js.map +1 -0
  42. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  43. package/dist/src/cli/helpers/issue-tracker/index.js +48 -3
  44. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  45. package/dist/src/core/living-docs/hierarchy-mapper.d.ts +142 -0
  46. package/dist/src/core/living-docs/hierarchy-mapper.d.ts.map +1 -0
  47. package/dist/src/core/living-docs/hierarchy-mapper.js +453 -0
  48. package/dist/src/core/living-docs/hierarchy-mapper.js.map +1 -0
  49. package/dist/src/core/living-docs/index.d.ts +10 -84
  50. package/dist/src/core/living-docs/index.d.ts.map +1 -1
  51. package/dist/src/core/living-docs/index.js +10 -164
  52. package/dist/src/core/living-docs/index.js.map +1 -1
  53. package/dist/src/core/living-docs/spec-distributor.d.ts +106 -0
  54. package/dist/src/core/living-docs/spec-distributor.d.ts.map +1 -0
  55. package/dist/src/core/living-docs/spec-distributor.js +823 -0
  56. package/dist/src/core/living-docs/spec-distributor.js.map +1 -0
  57. package/dist/src/core/living-docs/types.d.ts +201 -0
  58. package/dist/src/core/living-docs/types.d.ts.map +1 -0
  59. package/dist/src/core/living-docs/types.js +15 -0
  60. package/dist/src/core/living-docs/types.js.map +1 -0
  61. package/dist/src/core/logging/prompt-logger.d.ts +70 -0
  62. package/dist/src/core/logging/prompt-logger.d.ts.map +1 -0
  63. package/dist/src/core/logging/prompt-logger.js +247 -0
  64. package/dist/src/core/logging/prompt-logger.js.map +1 -0
  65. package/dist/src/core/status-line/status-line-manager.d.ts +15 -24
  66. package/dist/src/core/status-line/status-line-manager.d.ts.map +1 -1
  67. package/dist/src/core/status-line/status-line-manager.js +33 -70
  68. package/dist/src/core/status-line/status-line-manager.js.map +1 -1
  69. package/dist/src/core/status-line/types.d.ts +19 -31
  70. package/dist/src/core/status-line/types.d.ts.map +1 -1
  71. package/dist/src/core/status-line/types.js +5 -9
  72. package/dist/src/core/status-line/types.js.map +1 -1
  73. package/dist/src/core/sync/conflict-resolver.d.ts +66 -0
  74. package/dist/src/core/sync/conflict-resolver.d.ts.map +1 -0
  75. package/dist/src/core/sync/conflict-resolver.js +108 -0
  76. package/dist/src/core/sync/conflict-resolver.js.map +1 -0
  77. package/dist/src/core/sync/enhanced-content-builder.d.ts +77 -0
  78. package/dist/src/core/sync/enhanced-content-builder.d.ts.map +1 -0
  79. package/dist/src/core/sync/enhanced-content-builder.js +199 -0
  80. package/dist/src/core/sync/enhanced-content-builder.js.map +1 -0
  81. package/dist/src/core/sync/label-detector.d.ts +66 -0
  82. package/dist/src/core/sync/label-detector.d.ts.map +1 -0
  83. package/dist/src/core/sync/label-detector.js +211 -0
  84. package/dist/src/core/sync/label-detector.js.map +1 -0
  85. package/dist/src/core/sync/retry-logic.d.ts +64 -0
  86. package/dist/src/core/sync/retry-logic.d.ts.map +1 -0
  87. package/dist/src/core/sync/retry-logic.js +165 -0
  88. package/dist/src/core/sync/retry-logic.js.map +1 -0
  89. package/dist/src/core/sync/spec-increment-mapper.d.ts +100 -0
  90. package/dist/src/core/sync/spec-increment-mapper.d.ts.map +1 -0
  91. package/dist/src/core/sync/spec-increment-mapper.js +424 -0
  92. package/dist/src/core/sync/spec-increment-mapper.js.map +1 -0
  93. package/dist/src/core/sync/status-cache.d.ts +91 -0
  94. package/dist/src/core/sync/status-cache.d.ts.map +1 -0
  95. package/dist/src/core/sync/status-cache.js +140 -0
  96. package/dist/src/core/sync/status-cache.js.map +1 -0
  97. package/dist/src/core/sync/status-mapper.d.ts +69 -0
  98. package/dist/src/core/sync/status-mapper.d.ts.map +1 -0
  99. package/dist/src/core/sync/status-mapper.js +90 -0
  100. package/dist/src/core/sync/status-mapper.js.map +1 -0
  101. package/dist/src/core/sync/status-sync-engine.d.ts +162 -0
  102. package/dist/src/core/sync/status-sync-engine.d.ts.map +1 -0
  103. package/dist/src/core/sync/status-sync-engine.js +347 -0
  104. package/dist/src/core/sync/status-sync-engine.js.map +1 -0
  105. package/dist/src/core/sync/sync-event-logger.d.ts +99 -0
  106. package/dist/src/core/sync/sync-event-logger.d.ts.map +1 -0
  107. package/dist/src/core/sync/sync-event-logger.js +103 -0
  108. package/dist/src/core/sync/sync-event-logger.js.map +1 -0
  109. package/dist/src/core/sync/workflow-detector.d.ts +95 -0
  110. package/dist/src/core/sync/workflow-detector.d.ts.map +1 -0
  111. package/dist/src/core/sync/workflow-detector.js +175 -0
  112. package/dist/src/core/sync/workflow-detector.js.map +1 -0
  113. package/dist/src/core/types/config.d.ts.map +1 -1
  114. package/dist/src/core/types/config.js +31 -0
  115. package/dist/src/core/types/config.js.map +1 -1
  116. package/dist/src/utils/github-url.d.ts +53 -0
  117. package/dist/src/utils/github-url.d.ts.map +1 -0
  118. package/dist/src/utils/github-url.js +90 -0
  119. package/dist/src/utils/github-url.js.map +1 -0
  120. package/dist/src/utils/spec-parser.d.ts +145 -0
  121. package/dist/src/utils/spec-parser.d.ts.map +1 -0
  122. package/dist/src/utils/spec-parser.js +640 -0
  123. package/dist/src/utils/spec-parser.js.map +1 -0
  124. package/package.json +1 -1
  125. package/plugins/specweave/agents/pm/AGENT.md +1 -1
  126. package/plugins/specweave/agents/pm/templates/increment-spec.md +158 -0
  127. package/plugins/specweave/agents/pm/templates/living-docs-spec.md +113 -0
  128. package/plugins/specweave/commands/specweave-done.md +163 -0
  129. package/plugins/specweave/hooks/lib/update-status-line.sh +79 -111
  130. package/plugins/specweave/hooks/post-increment-planning.sh +107 -35
  131. package/plugins/specweave/lib/hooks/sync-living-docs.js +139 -34
  132. package/plugins/specweave/lib/hooks/sync-living-docs.ts +234 -38
  133. package/plugins/specweave/skills/SKILLS-INDEX.md +4 -24
  134. package/plugins/specweave/skills/increment-planner/SKILL.md +94 -0
  135. package/plugins/specweave/skills/increment-work-router/SKILL.md +466 -0
  136. package/plugins/specweave-ado/lib/ado-status-sync.js +80 -0
  137. package/plugins/specweave-ado/lib/ado-status-sync.ts +121 -0
  138. package/plugins/specweave-github/commands/specweave-github-cleanup-duplicates.md +205 -0
  139. package/plugins/specweave-github/commands/specweave-github-sync-epic.md +248 -0
  140. package/plugins/specweave-github/lib/duplicate-detector.js +370 -0
  141. package/plugins/specweave-github/lib/duplicate-detector.ts +525 -0
  142. package/plugins/specweave-github/lib/enhanced-github-sync.js +220 -0
  143. package/plugins/specweave-github/lib/enhanced-github-sync.ts +322 -0
  144. package/plugins/specweave-github/lib/github-client.js +21 -10
  145. package/plugins/specweave-github/lib/github-client.ts +27 -16
  146. package/plugins/specweave-github/lib/github-epic-sync.js +489 -0
  147. package/plugins/specweave-github/lib/github-epic-sync.ts +690 -0
  148. package/plugins/specweave-github/lib/github-status-sync.js +71 -0
  149. package/plugins/specweave-github/lib/github-status-sync.ts +107 -0
  150. package/plugins/specweave-github/lib/task-sync.js +33 -2
  151. package/plugins/specweave-github/lib/task-sync.ts +44 -2
  152. package/plugins/specweave-jira/commands/specweave-jira-sync-epic.md +267 -0
  153. package/plugins/specweave-jira/lib/enhanced-jira-sync.ts.disabled +222 -0
  154. package/plugins/specweave-jira/lib/jira-epic-sync.js +304 -0
  155. package/plugins/specweave-jira/lib/jira-epic-sync.ts +459 -0
  156. package/plugins/specweave-jira/lib/jira-status-sync.js +79 -0
  157. package/plugins/specweave-jira/lib/jira-status-sync.ts +139 -0
  158. package/src/templates/AGENTS.md.template +88 -1
  159. package/src/templates/CLAUDE.md.template +49 -0
  160. package/plugins/specweave/skills/increment-quality-judge/SKILL.md +0 -524
  161. package/plugins/specweave/skills/plugin-installer/SKILL.md +0 -353
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Status Line Manager
2
+ * Status Line Manager (Simplified)
3
3
  *
4
- * Ultra-fast status line rendering with intelligent caching.
5
- * Target: <1ms render time for 99% of requests.
4
+ * Simple, reliable status line rendering.
5
+ * Shows: [increment-name] ████░░░░ X/Y tasks (Z open)
6
6
  *
7
7
  * Architecture:
8
- * - Hook pre-computes cache (async, 10-50ms)
9
- * - Renderer reads cache (sync, <1ms)
10
- * - mtime-based invalidation (handles external edits)
8
+ * - Hook updates cache with current increment + open count
9
+ * - Manager reads cache and formats output
10
+ * - Simple age-based validation (no complex mtime checks)
11
11
  */
12
12
  import { StatusLineCache, StatusLineConfig } from './types.js';
13
13
  export declare class StatusLineManager {
@@ -16,38 +16,29 @@ export declare class StatusLineManager {
16
16
  private config;
17
17
  constructor(rootDir?: string, config?: Partial<StatusLineConfig>);
18
18
  /**
19
- * Render status line (FAST PATH: <1ms)
19
+ * Render status line
20
20
  *
21
- * Returns formatted status line string or null if no active increment.
21
+ * Returns formatted string or null if no active increment.
22
22
  */
23
23
  render(): string | null;
24
24
  /**
25
- * Get cache with freshness validation (0.5-1ms)
25
+ * Read cache from disk
26
26
  *
27
- * Returns null if:
28
- * - Cache file missing
29
- * - Cache too old (>maxCacheAge)
30
- * - tasks.md modified since cache update
27
+ * Simple read with basic validation.
31
28
  */
32
- private getCache;
29
+ private readCache;
33
30
  /**
34
- * Check if cache is fresh (0.2-0.5ms)
31
+ * Format status line
35
32
  *
36
- * Two-level check:
37
- * 1. Age check (ultra-fast, no I/O)
38
- * 2. mtime check (fast, single stat() call)
39
- */
40
- private isCacheFresh;
41
- /**
42
- * Format status line from cache (0.1ms)
33
+ * Format: [increment-name] ████░░░░ X/Y tasks (Z open)
43
34
  */
44
35
  private formatStatusLine;
45
36
  /**
46
- * Render ASCII progress bar (0.05ms)
37
+ * Render ASCII progress bar
47
38
  */
48
39
  private renderProgressBar;
49
40
  /**
50
- * Truncate string with ellipsis (0.01ms)
41
+ * Truncate string with ellipsis
51
42
  */
52
43
  private truncate;
53
44
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"status-line-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/status-line/status-line-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EACL,eAAe,EACf,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAmB;gBAGvB,OAAO,GAAE,MAAsB,EACvC,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAMxC;;;;OAIG;IACI,MAAM,IAAI,MAAM,GAAG,IAAI;IAa9B;;;;;;;OAOG;IACH,OAAO,CAAC,QAAQ;IA2BhB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IA0BpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsCxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACI,YAAY,IAAI,eAAe,GAAG,IAAI;IAY7C;;OAEG;IACI,UAAU,IAAI,IAAI;CAS1B"}
1
+ {"version":3,"file":"status-line-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/status-line/status-line-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,EACL,eAAe,EACf,gBAAgB,EAEjB,MAAM,YAAY,CAAC;AAEpB,qBAAa,iBAAiB;IAK1B,OAAO,CAAC,OAAO;IAJjB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAmB;gBAGvB,OAAO,GAAE,MAAsB,EACvC,MAAM,GAAE,OAAO,CAAC,gBAAgB,CAAM;IAMxC;;;;OAIG;IACI,MAAM,IAAI,MAAM,GAAG,IAAI;IAa9B;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAsBjB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAuBxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAOhB;;OAEG;IACI,YAAY,IAAI,eAAe,GAAG,IAAI;IAY7C;;OAEG;IACI,UAAU,IAAI,IAAI;CAS1B"}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * Status Line Manager
2
+ * Status Line Manager (Simplified)
3
3
  *
4
- * Ultra-fast status line rendering with intelligent caching.
5
- * Target: <1ms render time for 99% of requests.
4
+ * Simple, reliable status line rendering.
5
+ * Shows: [increment-name] ████░░░░ X/Y tasks (Z open)
6
6
  *
7
7
  * Architecture:
8
- * - Hook pre-computes cache (async, 10-50ms)
9
- * - Renderer reads cache (sync, <1ms)
10
- * - mtime-based invalidation (handles external edits)
8
+ * - Hook updates cache with current increment + open count
9
+ * - Manager reads cache and formats output
10
+ * - Simple age-based validation (no complex mtime checks)
11
11
  */
12
12
  import * as fs from 'fs';
13
13
  import * as path from 'path';
@@ -19,105 +19,68 @@ export class StatusLineManager {
19
19
  this.config = { ...DEFAULT_STATUS_LINE_CONFIG, ...config };
20
20
  }
21
21
  /**
22
- * Render status line (FAST PATH: <1ms)
22
+ * Render status line
23
23
  *
24
- * Returns formatted status line string or null if no active increment.
24
+ * Returns formatted string or null if no active increment.
25
25
  */
26
26
  render() {
27
27
  if (!this.config.enabled) {
28
28
  return null;
29
29
  }
30
- const cache = this.getCache();
31
- if (!cache) {
32
- return null; // No active increment or cache stale
30
+ const cache = this.readCache();
31
+ if (!cache || !cache.current) {
32
+ return 'No active increment';
33
33
  }
34
34
  return this.formatStatusLine(cache);
35
35
  }
36
36
  /**
37
- * Get cache with freshness validation (0.5-1ms)
37
+ * Read cache from disk
38
38
  *
39
- * Returns null if:
40
- * - Cache file missing
41
- * - Cache too old (>maxCacheAge)
42
- * - tasks.md modified since cache update
39
+ * Simple read with basic validation.
43
40
  */
44
- getCache() {
41
+ readCache() {
45
42
  try {
46
- // Step 1: Read cache file (0.3ms)
47
43
  if (!fs.existsSync(this.cacheFile)) {
48
44
  return null;
49
45
  }
50
46
  const content = fs.readFileSync(this.cacheFile, 'utf8');
51
47
  const cache = JSON.parse(content);
52
- // Step 2: Validate cache has required fields
53
- if (!cache.incrementId || cache.totalTasks === undefined) {
54
- return null;
55
- }
56
- // Step 3: Check freshness (0.2-0.5ms)
57
- if (!this.isCacheFresh(cache)) {
58
- return null;
48
+ // Simple age check (warn if stale but still show)
49
+ const age = Date.now() - new Date(cache.lastUpdate).getTime();
50
+ if (age > this.config.maxCacheAge) {
51
+ // Stale but we still show it (better than nothing)
52
+ // Hook will update it soon
59
53
  }
60
54
  return cache;
61
55
  }
62
- catch (error) {
63
- // Cache read/parse error = treat as cache miss
56
+ catch {
64
57
  return null;
65
58
  }
66
59
  }
67
60
  /**
68
- * Check if cache is fresh (0.2-0.5ms)
61
+ * Format status line
69
62
  *
70
- * Two-level check:
71
- * 1. Age check (ultra-fast, no I/O)
72
- * 2. mtime check (fast, single stat() call)
73
- */
74
- isCacheFresh(cache) {
75
- // Check 1: Recent update? (no I/O, ultra-fast)
76
- const age = Date.now() - new Date(cache.lastUpdate).getTime();
77
- if (age < this.config.maxCacheAge) {
78
- return true; // Cache is fresh (<5s old)
79
- }
80
- // Check 2: Has tasks.md changed? (single stat() call)
81
- try {
82
- const tasksFile = path.join(this.rootDir, '.specweave/increments', cache.incrementId, 'tasks.md');
83
- const stats = fs.statSync(tasksFile);
84
- const currentMtime = Math.floor(stats.mtimeMs / 1000);
85
- return currentMtime === cache.lastModified;
86
- }
87
- catch {
88
- // File missing or stat() failed = invalidate cache
89
- return false;
90
- }
91
- }
92
- /**
93
- * Format status line from cache (0.1ms)
63
+ * Format: [increment-name] ████░░░░ X/Y tasks (Z open)
94
64
  */
95
65
  formatStatusLine(cache) {
66
+ const current = cache.current;
96
67
  const parts = [];
97
68
  // Increment name (truncated)
98
- const name = this.truncate(cache.incrementName, this.config.maxIncrementNameLength);
69
+ const name = this.truncate(current.name, this.config.maxNameLength);
99
70
  parts.push(`[${name}]`);
100
71
  // Progress bar
101
- if (this.config.showProgressBar) {
102
- const bar = this.renderProgressBar(cache.completedTasks, cache.totalTasks);
103
- parts.push(bar);
104
- }
105
- // Tasks count and percentage
106
- if (this.config.showPercentage) {
107
- parts.push(`${cache.completedTasks}/${cache.totalTasks} (${cache.percentage}%)`);
108
- }
109
- else {
110
- parts.push(`${cache.completedTasks}/${cache.totalTasks}`);
111
- }
112
- // Current task
113
- if (this.config.showCurrentTask && cache.currentTask) {
114
- const taskTitle = this.truncate(cache.currentTask.title, this.config.maxTaskTitleLength);
115
- parts.push(`• ${cache.currentTask.id}: ${taskTitle}`);
72
+ const bar = this.renderProgressBar(current.completed, current.total);
73
+ parts.push(bar);
74
+ // Tasks count
75
+ parts.push(`${current.completed}/${current.total}`);
76
+ // Open count (if more than 1)
77
+ if (cache.openCount > 1) {
78
+ parts.push(`(${cache.openCount} open)`);
116
79
  }
117
80
  return parts.join(' ');
118
81
  }
119
82
  /**
120
- * Render ASCII progress bar (0.05ms)
83
+ * Render ASCII progress bar
121
84
  */
122
85
  renderProgressBar(completed, total) {
123
86
  if (total === 0) {
@@ -129,7 +92,7 @@ export class StatusLineManager {
129
92
  return '█'.repeat(filled) + '░'.repeat(empty);
130
93
  }
131
94
  /**
132
- * Truncate string with ellipsis (0.01ms)
95
+ * Truncate string with ellipsis
133
96
  */
134
97
  truncate(str, maxLength) {
135
98
  if (str.length <= maxLength) {
@@ -1 +1 @@
1
- {"version":3,"file":"status-line-manager.js","sourceRoot":"","sources":["../../../../src/core/status-line/status-line-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAGL,0BAA0B,GAC3B,MAAM,YAAY,CAAC;AAEpB,MAAM,OAAO,iBAAiB;IAI5B,YACU,UAAkB,OAAO,CAAC,GAAG,EAAE,EACvC,SAAoC,EAAE;QAD9B,YAAO,GAAP,OAAO,CAAwB;QAGvC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mCAAmC,CAAC,CAAC;QACzE,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,0BAA0B,EAAE,GAAG,MAAM,EAAE,CAAC;IAC7D,CAAC;IAED;;;;OAIG;IACI,MAAM;QACX,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,IAAI,CAAC,CAAC,qCAAqC;QACpD,CAAC;QAED,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;OAOG;IACK,QAAQ;QACd,IAAI,CAAC;YACH,kCAAkC;YAClC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAoB,CAAC;YAErD,6CAA6C;YAC7C,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;gBACzD,OAAO,IAAI,CAAC;YACd,CAAC;YAED,sCAAsC;YACtC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,+CAA+C;YAC/C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACK,YAAY,CAAC,KAAsB;QACzC,+CAA+C;QAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9D,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,CAAC,2BAA2B;QAC1C,CAAC;QAED,sDAAsD;QACtD,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CACzB,IAAI,CAAC,OAAO,EACZ,uBAAuB,EACvB,KAAK,CAAC,WAAW,EACjB,UAAU,CACX,CAAC;YAEF,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YACrC,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;YAEtD,OAAO,YAAY,KAAK,KAAK,CAAC,YAAY,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,mDAAmD;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,KAAsB;QAC7C,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,6BAA6B;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CACxB,KAAK,CAAC,aAAa,EACnB,IAAI,CAAC,MAAM,CAAC,sBAAsB,CACnC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,CAAC;QAExB,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,iBAAiB,CAChC,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,UAAU,CACjB,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QAED,6BAA6B;QAC7B,IAAI,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,KAAK,KAAK,CAAC,UAAU,IAAI,CAAC,CAAC;QACnF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,eAAe;QACf,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;YACrD,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAC7B,KAAK,CAAC,WAAW,CAAC,KAAK,EACvB,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAC/B,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,WAAW,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC,CAAC;QACxD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,SAAiB,EAAE,KAAa;QACxD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC;QAED,MAAM,UAAU,GAAG,SAAS,GAAG,KAAK,CAAC;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;QACrE,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,MAAM,CAAC;QAEpD,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,GAAW,EAAE,SAAiB;QAC7C,IAAI,GAAG,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;YAC5B,OAAO,GAAG,CAAC;QACb,CAAC;QACD,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;IAC/C,CAAC;IAED;;OAEG;IACI,YAAY;QACjB,IAAI,CAAC;YACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACI,UAAU;QACf,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;gBAClC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,gBAAgB;QAClB,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"status-line-manager.js","sourceRoot":"","sources":["../../../../src/core/status-line/status-line-manager.ts"],"names":[],"mappings":"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"}
@@ -1,50 +1,38 @@
1
1
  /**
2
- * Status Line Types
2
+ * Status Line Types (Simplified)
3
3
  *
4
- * Type definitions for the fast status line caching system.
5
- * Supports <1ms rendering with intelligent cache invalidation.
4
+ * Ultra-simple status line with cached progress.
5
+ * Shows: [increment-name] ████░░░░ X/Y tasks (Z open)
6
6
  */
7
7
  export interface StatusLineCache {
8
- /** Active increment ID (e.g., "0017-sync-architecture-fix") */
9
- incrementId: string;
10
- /** Short increment name (e.g., "sync-architecture-fix") */
11
- incrementName: string;
12
- /** Total number of tasks in tasks.md */
13
- totalTasks: number;
14
- /** Number of completed tasks ([x]) */
15
- completedTasks: number;
16
- /** Completion percentage (0-100) */
17
- percentage: number;
18
- /** Current task being worked on */
19
- currentTask: TaskInfo | null;
8
+ /** Current active/in-progress increment (null if none) */
9
+ current: CurrentIncrement | null;
10
+ /** Total number of open increments (active/in-progress/planning) */
11
+ openCount: number;
20
12
  /** ISO timestamp of last cache update */
21
13
  lastUpdate: string;
22
- /** Unix timestamp of tasks.md mtime (for invalidation) */
23
- lastModified: number;
24
14
  }
25
- export interface TaskInfo {
26
- /** Task ID (e.g., "T-016") */
15
+ export interface CurrentIncrement {
16
+ /** Increment ID (e.g., "0031-external-tool-status-sync") */
27
17
  id: string;
28
- /** Task title (e.g., "Update documentation") */
29
- title: string;
18
+ /** Short name (e.g., "external-tool-status-sync") */
19
+ name: string;
20
+ /** Number of completed tasks */
21
+ completed: number;
22
+ /** Total number of tasks */
23
+ total: number;
24
+ /** Completion percentage (0-100) */
25
+ percentage: number;
30
26
  }
31
27
  export interface StatusLineConfig {
32
28
  /** Enable status line rendering */
33
29
  enabled: boolean;
34
- /** Maximum age of cache before forcing refresh (ms) */
30
+ /** Maximum age of cache before showing stale warning (ms) */
35
31
  maxCacheAge: number;
36
32
  /** Width of progress bar (characters) */
37
33
  progressBarWidth: number;
38
34
  /** Maximum length for increment name */
39
- maxIncrementNameLength: number;
40
- /** Maximum length for task title */
41
- maxTaskTitleLength: number;
42
- /** Show progress bar */
43
- showProgressBar: boolean;
44
- /** Show percentage */
45
- showPercentage: boolean;
46
- /** Show current task */
47
- showCurrentTask: boolean;
35
+ maxNameLength: number;
48
36
  }
49
37
  export declare const DEFAULT_STATUS_LINE_CONFIG: StatusLineConfig;
50
38
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/status-line/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,WAAW,EAAE,MAAM,CAAC;IAEpB,2DAA2D;IAC3D,aAAa,EAAE,MAAM,CAAC;IAEtB,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;IAEnB,sCAAsC;IACtC,cAAc,EAAE,MAAM,CAAC;IAEvB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IAEnB,mCAAmC;IACnC,WAAW,EAAE,QAAQ,GAAG,IAAI,CAAC;IAE7B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;IAEnB,0DAA0D;IAC1D,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IAEX,gDAAgD;IAChD,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IAEjB,uDAAuD;IACvD,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,sBAAsB,EAAE,MAAM,CAAC;IAE/B,oCAAoC;IACpC,kBAAkB,EAAE,MAAM,CAAC;IAE3B,wBAAwB;IACxB,eAAe,EAAE,OAAO,CAAC;IAEzB,sBAAsB;IACtB,cAAc,EAAE,OAAO,CAAC;IAExB,wBAAwB;IACxB,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,0BAA0B,EAAE,gBASxC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/status-line/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,0DAA0D;IAC1D,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAEjC,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAElB,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;IAEX,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IAEb,gCAAgC;IAChC,SAAS,EAAE,MAAM,CAAC;IAElB,4BAA4B;IAC5B,KAAK,EAAE,MAAM,CAAC;IAEd,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,mCAAmC;IACnC,OAAO,EAAE,OAAO,CAAC;IAEjB,6DAA6D;IAC7D,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,0BAA0B,EAAE,gBAKxC,CAAC"}
@@ -1,17 +1,13 @@
1
1
  /**
2
- * Status Line Types
2
+ * Status Line Types (Simplified)
3
3
  *
4
- * Type definitions for the fast status line caching system.
5
- * Supports <1ms rendering with intelligent cache invalidation.
4
+ * Ultra-simple status line with cached progress.
5
+ * Shows: [increment-name] ████░░░░ X/Y tasks (Z open)
6
6
  */
7
7
  export const DEFAULT_STATUS_LINE_CONFIG = {
8
8
  enabled: true,
9
- maxCacheAge: 5000, // 5 seconds
9
+ maxCacheAge: 30000, // 30 seconds (much longer, simpler)
10
10
  progressBarWidth: 8,
11
- maxIncrementNameLength: 20,
12
- maxTaskTitleLength: 30,
13
- showProgressBar: true,
14
- showPercentage: true,
15
- showCurrentTask: true,
11
+ maxNameLength: 30,
16
12
  };
17
13
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/status-line/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA8DH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,IAAI,EAAE,YAAY;IAC/B,gBAAgB,EAAE,CAAC;IACnB,sBAAsB,EAAE,EAAE;IAC1B,kBAAkB,EAAE,EAAE;IACtB,eAAe,EAAE,IAAI;IACrB,cAAc,EAAE,IAAI;IACpB,eAAe,EAAE,IAAI;CACtB,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/status-line/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA4CH,MAAM,CAAC,MAAM,0BAA0B,GAAqB;IAC1D,OAAO,EAAE,IAAI;IACb,WAAW,EAAE,KAAK,EAAE,oCAAoC;IACxD,gBAAgB,EAAE,CAAC;IACnB,aAAa,EAAE,EAAE;CAClB,CAAC"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Conflict Resolver
3
+ *
4
+ * Detects and resolves status conflicts between SpecWeave increments
5
+ * and external tools (GitHub, JIRA, Azure DevOps).
6
+ *
7
+ * Supports four resolution strategies:
8
+ * - prompt: Requires user interaction (UI)
9
+ * - last-write-wins: Uses most recent timestamp
10
+ * - specweave-wins: Always uses local SpecWeave status
11
+ * - external-wins: Always uses external tool status
12
+ */
13
+ export type ConflictResolutionStrategy = 'prompt' | 'last-write-wins' | 'specweave-wins' | 'external-wins';
14
+ export interface StatusConflict {
15
+ incrementId: string;
16
+ tool: string;
17
+ localStatus: string;
18
+ remoteStatus: string;
19
+ localTimestamp: string;
20
+ remoteTimestamp: string;
21
+ }
22
+ export interface ConflictResolution {
23
+ action: 'use-local' | 'use-remote';
24
+ resolvedStatus: string;
25
+ }
26
+ export interface ConflictDetectionInput {
27
+ incrementId: string;
28
+ local: string;
29
+ remote: string;
30
+ tool: string;
31
+ localTimestamp: string;
32
+ remoteTimestamp: string;
33
+ }
34
+ export declare class ConflictResolver {
35
+ /**
36
+ * Detect status conflicts between local and remote
37
+ *
38
+ * @param input - Detection input with local/remote statuses and timestamps
39
+ * @returns StatusConflict if conflict exists, null if statuses match
40
+ */
41
+ detect(input: ConflictDetectionInput): Promise<StatusConflict | null>;
42
+ /**
43
+ * Resolve status conflict using specified strategy
44
+ *
45
+ * @param conflict - The status conflict to resolve
46
+ * @param strategy - Resolution strategy to use
47
+ * @returns Resolution with action and resolved status
48
+ * @throws Error if strategy is unknown or requires user interaction
49
+ */
50
+ resolve(conflict: StatusConflict, strategy: ConflictResolutionStrategy): Promise<ConflictResolution>;
51
+ /**
52
+ * Resolve conflict by comparing timestamps (last-write-wins)
53
+ *
54
+ * @param conflict - The status conflict to resolve
55
+ * @returns Resolution based on most recent timestamp
56
+ */
57
+ private resolveByTimestamp;
58
+ /**
59
+ * Format conflict details for display to user
60
+ *
61
+ * @param conflict - The status conflict to format
62
+ * @returns Human-readable conflict message
63
+ */
64
+ formatConflictMessage(conflict: StatusConflict): string;
65
+ }
66
+ //# sourceMappingURL=conflict-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-resolver.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/conflict-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,0BAA0B,GAClC,QAAQ,GACR,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,CAAC;AAEpB,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,WAAW,GAAG,YAAY,CAAC;IACnC,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,gBAAgB;IAC3B;;;;;OAKG;IACU,MAAM,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;IAiBlF;;;;;;;OAOG;IACU,OAAO,CAClB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,0BAA0B,GACnC,OAAO,CAAC,kBAAkB,CAAC;IAyB9B;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IAkB1B;;;;;OAKG;IACI,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM;CAiB/D"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Conflict Resolver
3
+ *
4
+ * Detects and resolves status conflicts between SpecWeave increments
5
+ * and external tools (GitHub, JIRA, Azure DevOps).
6
+ *
7
+ * Supports four resolution strategies:
8
+ * - prompt: Requires user interaction (UI)
9
+ * - last-write-wins: Uses most recent timestamp
10
+ * - specweave-wins: Always uses local SpecWeave status
11
+ * - external-wins: Always uses external tool status
12
+ */
13
+ export class ConflictResolver {
14
+ /**
15
+ * Detect status conflicts between local and remote
16
+ *
17
+ * @param input - Detection input with local/remote statuses and timestamps
18
+ * @returns StatusConflict if conflict exists, null if statuses match
19
+ */
20
+ async detect(input) {
21
+ // No conflict if statuses match
22
+ if (input.local === input.remote) {
23
+ return null;
24
+ }
25
+ // Conflict detected - return conflict object
26
+ return {
27
+ incrementId: input.incrementId,
28
+ tool: input.tool,
29
+ localStatus: input.local,
30
+ remoteStatus: input.remote,
31
+ localTimestamp: input.localTimestamp,
32
+ remoteTimestamp: input.remoteTimestamp
33
+ };
34
+ }
35
+ /**
36
+ * Resolve status conflict using specified strategy
37
+ *
38
+ * @param conflict - The status conflict to resolve
39
+ * @param strategy - Resolution strategy to use
40
+ * @returns Resolution with action and resolved status
41
+ * @throws Error if strategy is unknown or requires user interaction
42
+ */
43
+ async resolve(conflict, strategy) {
44
+ switch (strategy) {
45
+ case 'specweave-wins':
46
+ return {
47
+ action: 'use-local',
48
+ resolvedStatus: conflict.localStatus
49
+ };
50
+ case 'external-wins':
51
+ return {
52
+ action: 'use-remote',
53
+ resolvedStatus: conflict.remoteStatus
54
+ };
55
+ case 'last-write-wins':
56
+ return this.resolveByTimestamp(conflict);
57
+ case 'prompt':
58
+ throw new Error('Prompt strategy requires user interaction');
59
+ default:
60
+ throw new Error(`Unknown conflict resolution strategy: ${strategy}`);
61
+ }
62
+ }
63
+ /**
64
+ * Resolve conflict by comparing timestamps (last-write-wins)
65
+ *
66
+ * @param conflict - The status conflict to resolve
67
+ * @returns Resolution based on most recent timestamp
68
+ */
69
+ resolveByTimestamp(conflict) {
70
+ const localTime = new Date(conflict.localTimestamp).getTime();
71
+ const remoteTime = new Date(conflict.remoteTimestamp).getTime();
72
+ // If timestamps equal, tie-break favors local (SpecWeave is source of truth)
73
+ if (localTime >= remoteTime) {
74
+ return {
75
+ action: 'use-local',
76
+ resolvedStatus: conflict.localStatus
77
+ };
78
+ }
79
+ return {
80
+ action: 'use-remote',
81
+ resolvedStatus: conflict.remoteStatus
82
+ };
83
+ }
84
+ /**
85
+ * Format conflict details for display to user
86
+ *
87
+ * @param conflict - The status conflict to format
88
+ * @returns Human-readable conflict message
89
+ */
90
+ formatConflictMessage(conflict) {
91
+ return `
92
+ Status Conflict Detected for Increment ${conflict.incrementId}
93
+
94
+ Tool: ${conflict.tool}
95
+
96
+ Local (SpecWeave):
97
+ Status: ${conflict.localStatus}
98
+ Last Updated: ${conflict.localTimestamp}
99
+
100
+ Remote (${conflict.tool}):
101
+ Status: ${conflict.remoteStatus}
102
+ Last Updated: ${conflict.remoteTimestamp}
103
+
104
+ Conflict: Local and remote statuses differ.
105
+ `.trim();
106
+ }
107
+ }
108
+ //# sourceMappingURL=conflict-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conflict-resolver.js","sourceRoot":"","sources":["../../../../src/core/sync/conflict-resolver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AA+BH,MAAM,OAAO,gBAAgB;IAC3B;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CAAC,KAA6B;QAC/C,gCAAgC;QAChC,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,6CAA6C;QAC7C,OAAO;YACL,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,WAAW,EAAE,KAAK,CAAC,KAAK;YACxB,YAAY,EAAE,KAAK,CAAC,MAAM;YAC1B,cAAc,EAAE,KAAK,CAAC,cAAc;YACpC,eAAe,EAAE,KAAK,CAAC,eAAe;SACvC,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,OAAO,CAClB,QAAwB,EACxB,QAAoC;QAEpC,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,gBAAgB;gBACnB,OAAO;oBACL,MAAM,EAAE,WAAW;oBACnB,cAAc,EAAE,QAAQ,CAAC,WAAW;iBACrC,CAAC;YAEJ,KAAK,eAAe;gBAClB,OAAO;oBACL,MAAM,EAAE,YAAY;oBACpB,cAAc,EAAE,QAAQ,CAAC,YAAY;iBACtC,CAAC;YAEJ,KAAK,iBAAiB;gBACpB,OAAO,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAE3C,KAAK,QAAQ;gBACX,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;YAE/D;gBACE,MAAM,IAAI,KAAK,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,kBAAkB,CAAC,QAAwB;QACjD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,OAAO,EAAE,CAAC;QAC9D,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC;QAEhE,6EAA6E;QAC7E,IAAI,SAAS,IAAI,UAAU,EAAE,CAAC;YAC5B,OAAO;gBACL,MAAM,EAAE,WAAW;gBACnB,cAAc,EAAE,QAAQ,CAAC,WAAW;aACrC,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,YAAY;YACpB,cAAc,EAAE,QAAQ,CAAC,YAAY;SACtC,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,qBAAqB,CAAC,QAAwB;QACnD,OAAO;yCAC8B,QAAQ,CAAC,WAAW;;QAErD,QAAQ,CAAC,IAAI;;;YAGT,QAAQ,CAAC,WAAW;kBACd,QAAQ,CAAC,cAAc;;UAE/B,QAAQ,CAAC,IAAI;YACX,QAAQ,CAAC,YAAY;kBACf,QAAQ,CAAC,eAAe;;;KAGrC,CAAC,IAAI,EAAE,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * Enhanced Content Builder
3
+ *
4
+ * Builds rich external issue descriptions with full spec content including:
5
+ * - Executive summary
6
+ * - User stories with collapsible sections
7
+ * - Acceptance criteria
8
+ * - Task links with GitHub issue numbers
9
+ * - Architecture references
10
+ * - Source links
11
+ */
12
+ import { SpecContent, SpecUserStory } from '../spec-content-sync.js';
13
+ export interface TaskMapping {
14
+ incrementId: string;
15
+ tasks: Task[];
16
+ tasksUrl: string;
17
+ }
18
+ export interface Task {
19
+ id: string;
20
+ title: string;
21
+ userStories: string[];
22
+ githubIssue?: number;
23
+ jiraIssue?: string;
24
+ adoWorkItem?: number;
25
+ completed?: boolean;
26
+ status?: 'pending' | 'in-progress' | 'completed';
27
+ }
28
+ export interface ArchitectureDoc {
29
+ type: 'adr' | 'hld' | 'diagram';
30
+ path: string;
31
+ title: string;
32
+ }
33
+ export interface SourceLinks {
34
+ spec?: string;
35
+ plan?: string;
36
+ tasks?: string;
37
+ }
38
+ export interface EnhancedSpecContent extends SpecContent {
39
+ summary?: string;
40
+ taskMapping?: TaskMapping;
41
+ architectureDocs?: ArchitectureDoc[];
42
+ sourceLinks?: SourceLinks;
43
+ }
44
+ export declare class EnhancedContentBuilder {
45
+ /**
46
+ * Build complete external issue description with all spec content
47
+ */
48
+ buildExternalDescription(spec: EnhancedSpecContent): string;
49
+ /**
50
+ * Build summary section with executive overview
51
+ */
52
+ buildSummarySection(spec: EnhancedSpecContent): string;
53
+ /**
54
+ * Build user stories section with collapsible GitHub sections
55
+ */
56
+ buildUserStoriesSection(userStories: SpecUserStory[]): string;
57
+ /**
58
+ * Build tasks section with checkboxes (GitHub/Jira/ADO compatible)
59
+ *
60
+ * NEW: Shows tasks as checkboxes with completion status
61
+ */
62
+ buildTasksSection(taskMapping: TaskMapping, options?: {
63
+ showCheckboxes?: boolean;
64
+ showProgressBar?: boolean;
65
+ showCompletionStatus?: boolean;
66
+ provider?: 'github' | 'jira' | 'ado';
67
+ }): string;
68
+ /**
69
+ * Build architecture references section
70
+ */
71
+ buildArchitectureSection(architectureDocs: ArchitectureDoc[]): string;
72
+ /**
73
+ * Build source links section
74
+ */
75
+ buildSourceLinksSection(sourceLinks: SourceLinks): string;
76
+ }
77
+ //# sourceMappingURL=enhanced-content-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-content-builder.d.ts","sourceRoot":"","sources":["../../../../src/core/sync/enhanced-content-builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAA2B,MAAM,yBAAyB,CAAC;AAE9F,MAAM,WAAW,WAAW;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,GAAG,aAAa,GAAG,WAAW,CAAC;CAClD;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,mBAAoB,SAAQ,WAAW;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED,qBAAa,sBAAsB;IACjC;;OAEG;IACH,wBAAwB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IA6B3D;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,mBAAmB,GAAG,MAAM;IAItD;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,aAAa,EAAE,GAAG,MAAM;IA2B7D;;;;OAIG;IACH,iBAAiB,CACf,WAAW,EAAE,WAAW,EACxB,OAAO,CAAC,EAAE;QACR,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,oBAAoB,CAAC,EAAE,OAAO,CAAC;QAC/B,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;KACtC,GACA,MAAM;IAqFT;;OAEG;IACH,wBAAwB,CAAC,gBAAgB,EAAE,eAAe,EAAE,GAAG,MAAM;IAwCrE;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,WAAW,GAAG,MAAM;CAkB1D"}