specweave 0.23.10 → 0.23.14

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 (135) hide show
  1. package/.claude-plugin/marketplace.json +7 -7
  2. package/CLAUDE.md +384 -1449
  3. package/dist/src/cli/commands/cleanup-cache.d.ts +14 -0
  4. package/dist/src/cli/commands/cleanup-cache.d.ts.map +1 -0
  5. package/dist/src/cli/commands/cleanup-cache.js +63 -0
  6. package/dist/src/cli/commands/cleanup-cache.js.map +1 -0
  7. package/dist/src/cli/commands/init.js +40 -0
  8. package/dist/src/cli/commands/init.js.map +1 -1
  9. package/dist/src/cli/helpers/async-project-loader.d.ts +148 -0
  10. package/dist/src/cli/helpers/async-project-loader.d.ts.map +1 -0
  11. package/dist/src/cli/helpers/async-project-loader.js +351 -0
  12. package/dist/src/cli/helpers/async-project-loader.js.map +1 -0
  13. package/dist/src/cli/helpers/cancelation-handler.d.ts +123 -0
  14. package/dist/src/cli/helpers/cancelation-handler.d.ts.map +1 -0
  15. package/dist/src/cli/helpers/cancelation-handler.js +187 -0
  16. package/dist/src/cli/helpers/cancelation-handler.js.map +1 -0
  17. package/dist/src/cli/helpers/import-strategy-prompter.d.ts +43 -0
  18. package/dist/src/cli/helpers/import-strategy-prompter.d.ts.map +1 -0
  19. package/dist/src/cli/helpers/import-strategy-prompter.js +136 -0
  20. package/dist/src/cli/helpers/import-strategy-prompter.js.map +1 -0
  21. package/dist/src/cli/helpers/issue-tracker/ado.d.ts +5 -2
  22. package/dist/src/cli/helpers/issue-tracker/ado.d.ts.map +1 -1
  23. package/dist/src/cli/helpers/issue-tracker/ado.js +90 -40
  24. package/dist/src/cli/helpers/issue-tracker/ado.js.map +1 -1
  25. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +2 -1
  26. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  27. package/dist/src/cli/helpers/issue-tracker/jira.js +120 -35
  28. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  29. package/dist/src/cli/helpers/progress-tracker.d.ts +121 -0
  30. package/dist/src/cli/helpers/progress-tracker.d.ts.map +1 -0
  31. package/dist/src/cli/helpers/progress-tracker.js +202 -0
  32. package/dist/src/cli/helpers/progress-tracker.js.map +1 -0
  33. package/dist/src/cli/helpers/project-count-fetcher.d.ts +69 -0
  34. package/dist/src/cli/helpers/project-count-fetcher.d.ts.map +1 -0
  35. package/dist/src/cli/helpers/project-count-fetcher.js +173 -0
  36. package/dist/src/cli/helpers/project-count-fetcher.js.map +1 -0
  37. package/dist/src/config/types.d.ts +14 -14
  38. package/dist/src/core/cache/cache-manager.d.ts +119 -0
  39. package/dist/src/core/cache/cache-manager.d.ts.map +1 -0
  40. package/dist/src/core/cache/cache-manager.js +304 -0
  41. package/dist/src/core/cache/cache-manager.js.map +1 -0
  42. package/dist/src/core/cache/rate-limit-checker.d.ts +92 -0
  43. package/dist/src/core/cache/rate-limit-checker.d.ts.map +1 -0
  44. package/dist/src/core/cache/rate-limit-checker.js +160 -0
  45. package/dist/src/core/cache/rate-limit-checker.js.map +1 -0
  46. package/dist/src/core/progress/cancelation-handler.d.ts +79 -0
  47. package/dist/src/core/progress/cancelation-handler.d.ts.map +1 -0
  48. package/dist/src/core/progress/cancelation-handler.js +111 -0
  49. package/dist/src/core/progress/cancelation-handler.js.map +1 -0
  50. package/dist/src/core/progress/error-logger.d.ts +58 -0
  51. package/dist/src/core/progress/error-logger.d.ts.map +1 -0
  52. package/dist/src/core/progress/error-logger.js +99 -0
  53. package/dist/src/core/progress/error-logger.js.map +1 -0
  54. package/dist/src/core/progress/import-state.d.ts +71 -0
  55. package/dist/src/core/progress/import-state.d.ts.map +1 -0
  56. package/dist/src/core/progress/import-state.js +96 -0
  57. package/dist/src/core/progress/import-state.js.map +1 -0
  58. package/dist/src/core/progress/progress-tracker.d.ts +139 -0
  59. package/dist/src/core/progress/progress-tracker.d.ts.map +1 -0
  60. package/dist/src/core/progress/progress-tracker.js +223 -0
  61. package/dist/src/core/progress/progress-tracker.js.map +1 -0
  62. package/dist/src/init/architecture/types.d.ts +6 -6
  63. package/dist/src/integrations/ado/ado-client.d.ts +25 -0
  64. package/dist/src/integrations/ado/ado-client.d.ts.map +1 -1
  65. package/dist/src/integrations/ado/ado-client.js +67 -0
  66. package/dist/src/integrations/ado/ado-client.js.map +1 -1
  67. package/dist/src/integrations/ado/ado-dependency-loader.d.ts +99 -0
  68. package/dist/src/integrations/ado/ado-dependency-loader.d.ts.map +1 -0
  69. package/dist/src/integrations/ado/ado-dependency-loader.js +207 -0
  70. package/dist/src/integrations/ado/ado-dependency-loader.js.map +1 -0
  71. package/dist/src/integrations/jira/jira-client.d.ts +32 -0
  72. package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
  73. package/dist/src/integrations/jira/jira-client.js +81 -0
  74. package/dist/src/integrations/jira/jira-client.js.map +1 -1
  75. package/dist/src/integrations/jira/jira-dependency-loader.d.ts +101 -0
  76. package/dist/src/integrations/jira/jira-dependency-loader.d.ts.map +1 -0
  77. package/dist/src/integrations/jira/jira-dependency-loader.js +200 -0
  78. package/dist/src/integrations/jira/jira-dependency-loader.js.map +1 -0
  79. package/package.json +1 -1
  80. package/plugins/specweave/.claude-plugin/plugin.json +20 -0
  81. package/plugins/specweave/agents/architect/AGENT.md +100 -602
  82. package/plugins/specweave/agents/pm/AGENT.md +96 -597
  83. package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
  84. package/plugins/specweave/agents/pm/AGENT.md.bak2 +1754 -0
  85. package/plugins/specweave/commands/check-hooks.md +257 -0
  86. package/plugins/specweave/hooks/docs-changed.sh +9 -1
  87. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  88. package/plugins/specweave/hooks/human-input-required.sh +9 -1
  89. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  90. package/plugins/specweave/hooks/post-edit-spec.sh +202 -31
  91. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  92. package/plugins/specweave/hooks/post-increment-change.sh +6 -1
  93. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  94. package/plugins/specweave/hooks/post-increment-completion.sh +6 -1
  95. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  96. package/plugins/specweave/hooks/post-increment-planning.sh +6 -1
  97. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  98. package/plugins/specweave/hooks/post-increment-status-change.sh +6 -1
  99. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  100. package/plugins/specweave/hooks/post-metadata-change.sh +7 -1
  101. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  102. package/plugins/specweave/hooks/post-task-completion.sh +225 -228
  103. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  104. package/plugins/specweave/hooks/post-write-spec.sh +207 -31
  105. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  106. package/plugins/specweave/hooks/pre-edit-spec.sh +151 -0
  107. package/plugins/specweave/hooks/pre-implementation.sh +9 -1
  108. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  109. package/plugins/specweave/hooks/pre-task-completion.sh +14 -8
  110. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  111. package/plugins/specweave/hooks/pre-tool-use.sh +9 -1
  112. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  113. package/plugins/specweave/hooks/pre-write-spec.sh +151 -0
  114. package/plugins/specweave/hooks/test-pretooluse-env.sh +72 -0
  115. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  116. package/plugins/specweave/skills/compliance-architecture/SKILL.md +374 -0
  117. package/plugins/specweave/skills/external-sync-wizard/SKILL.md +610 -0
  118. package/plugins/specweave/skills/pm-closure-validation/SKILL.md +541 -0
  119. package/plugins/specweave/skills/roadmap-planner/SKILL.md +473 -0
  120. package/plugins/specweave-ado/commands/refresh-cache.js +25 -0
  121. package/plugins/specweave-ado/commands/refresh-cache.ts +40 -0
  122. package/plugins/specweave-ado/hooks/post-living-docs-update.sh +9 -2
  123. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  124. package/plugins/specweave-ado/hooks/post-task-completion.sh +10 -2
  125. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  126. package/plugins/specweave-github/hooks/post-task-completion.sh +10 -2
  127. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  128. package/plugins/specweave-jira/commands/refresh-cache.js +25 -0
  129. package/plugins/specweave-jira/commands/refresh-cache.ts +40 -0
  130. package/plugins/specweave-jira/hooks/post-task-completion.sh +10 -2
  131. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  132. package/plugins/specweave-kafka-streams/commands/topology.md +437 -0
  133. package/plugins/specweave-n8n/commands/workflow-template.md +262 -0
  134. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +252 -6465
  135. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
@@ -0,0 +1,200 @@
1
+ /**
2
+ * JiraDependencyLoader - Three-Tier Dependency Loading for JIRA
3
+ *
4
+ * Architecture (ADR-0056):
5
+ * - Tier 1 (Init): Metadata only (< 5 seconds, 1 API call)
6
+ * - Tier 2 (On-Demand): Lazy loading per project (2-5 seconds, 4-7 API calls)
7
+ * - Tier 3 (Bulk): Optional pre-load command (1-2 minutes for 50 projects)
8
+ *
9
+ * Features:
10
+ * - 24-hour TTL caching via CacheManager
11
+ * - Rate limit detection and stale cache fallback
12
+ * - Per-project dependency caching
13
+ * - Automatic cache invalidation on 404 errors
14
+ *
15
+ * @module integrations/jira/jira-dependency-loader
16
+ */
17
+ import { RateLimitChecker } from '../../core/cache/rate-limit-checker.js';
18
+ import { consoleLogger } from '../../utils/logger.js';
19
+ /**
20
+ * JiraDependencyLoader - Three-tier dependency loading with smart caching
21
+ */
22
+ export class JiraDependencyLoader {
23
+ constructor(options) {
24
+ this.jiraClient = options.jiraClient;
25
+ this.cacheManager = options.cacheManager;
26
+ this.rateLimitChecker = options.rateLimitChecker ?? new RateLimitChecker();
27
+ this.logger = options.logger ?? consoleLogger;
28
+ }
29
+ /**
30
+ * Tier 1: Load project metadata only (init)
31
+ *
32
+ * Performance: < 5 seconds for 50 projects (1 API call)
33
+ * Cache: 24-hour TTL in `jira-projects.json`
34
+ *
35
+ * @param maxProjects Maximum projects to load (default: 50)
36
+ * @returns Array of project metadata
37
+ */
38
+ async loadProjectMetadata(maxProjects = 50) {
39
+ const cacheKey = 'jira-projects';
40
+ // Check cache first
41
+ const cached = await this.cacheManager.get(cacheKey);
42
+ if (cached) {
43
+ this.logger.log(`Cache hit: ${cacheKey} (${cached.projects.length} projects)`);
44
+ return cached.projects;
45
+ }
46
+ // Cache miss - fetch from API
47
+ this.logger.log(`Cache miss: ${cacheKey}, fetching from JIRA API...`);
48
+ try {
49
+ // Use JIRA search API for batch loading
50
+ const response = await this.jiraClient.searchProjects({
51
+ maxResults: maxProjects,
52
+ orderBy: 'name',
53
+ });
54
+ // Extract rate limit headers
55
+ const rateLimitHeaders = this.rateLimitChecker.extractHeaders(response);
56
+ const rateLimitCheck = this.rateLimitChecker.shouldProceed(rateLimitHeaders);
57
+ if (!rateLimitCheck.canProceed) {
58
+ this.logger.warn(`Rate limit warning: ${rateLimitCheck.reason}. Consider using cached data.`);
59
+ }
60
+ // Parse projects
61
+ const projects = response.values.map((project) => ({
62
+ key: project.key,
63
+ name: project.name,
64
+ type: project.projectTypeKey || 'software',
65
+ lead: project.lead
66
+ ? {
67
+ displayName: project.lead.displayName,
68
+ }
69
+ : undefined,
70
+ }));
71
+ // Cache result
72
+ await this.cacheManager.set(cacheKey, { projects });
73
+ this.logger.log(`Cached ${projects.length} projects with 24-hour TTL`);
74
+ return projects;
75
+ }
76
+ catch (error) {
77
+ // Check for rate limit error (429)
78
+ if (this.rateLimitChecker.isRateLimitError(error)) {
79
+ await this.rateLimitChecker.handleRateLimitError(error);
80
+ // Try to use stale cache
81
+ const staleCache = await this.cacheManager.getStale(cacheKey);
82
+ if (staleCache) {
83
+ return staleCache.projects;
84
+ }
85
+ }
86
+ // Re-throw if not rate limit or no stale cache available
87
+ throw error;
88
+ }
89
+ }
90
+ /**
91
+ * Tier 2: Load dependencies for specific project (on-demand)
92
+ *
93
+ * Performance: 2-5 seconds per project (4-7 API calls, cached)
94
+ * Cache: 24-hour TTL in `jira-{PROJECT}-deps.json`
95
+ *
96
+ * @param projectKey Project key (e.g., "BACKEND")
97
+ * @returns Project dependencies
98
+ */
99
+ async loadProjectDependencies(projectKey) {
100
+ const cacheKey = `jira-${projectKey}-deps`;
101
+ // Check cache first
102
+ const cached = await this.cacheManager.get(cacheKey);
103
+ if (cached) {
104
+ this.logger.log(`Cache hit: ${cacheKey}`);
105
+ return cached;
106
+ }
107
+ // Cache miss - fetch from API
108
+ this.logger.log(`Cache miss: ${cacheKey}, fetching from JIRA API...`);
109
+ try {
110
+ // Fetch boards, components, versions in parallel
111
+ const [boardsResponse, componentsResponse, versionsResponse] = await Promise.all([
112
+ this.jiraClient.getBoards(projectKey),
113
+ this.jiraClient.getComponents(projectKey),
114
+ this.jiraClient.getVersions(projectKey),
115
+ ]);
116
+ // Build dependencies object
117
+ const dependencies = {
118
+ projectKey,
119
+ boards: boardsResponse.values?.map((board) => ({
120
+ id: board.id,
121
+ name: board.name,
122
+ type: board.type,
123
+ })) || [],
124
+ components: componentsResponse.map((component) => ({
125
+ id: component.id,
126
+ name: component.name,
127
+ })),
128
+ versions: versionsResponse.map((version) => ({
129
+ id: version.id,
130
+ name: version.name,
131
+ released: version.released,
132
+ })),
133
+ lastUpdated: new Date().toISOString(),
134
+ };
135
+ // Cache result
136
+ await this.cacheManager.set(cacheKey, dependencies);
137
+ this.logger.log(`Cached dependencies for ${projectKey}: ${dependencies.boards.length} boards, ${dependencies.components.length} components, ${dependencies.versions.length} versions`);
138
+ return dependencies;
139
+ }
140
+ catch (error) {
141
+ // Handle 404 (project not found) - invalidate cache
142
+ if (error.response?.status === 404) {
143
+ this.logger.warn(`Project ${projectKey} not found (404), invalidating cache...`);
144
+ await this.cacheManager.delete(cacheKey);
145
+ throw new Error(`Project ${projectKey} not found`);
146
+ }
147
+ // Handle rate limit errors
148
+ if (this.rateLimitChecker.isRateLimitError(error)) {
149
+ await this.rateLimitChecker.handleRateLimitError(error);
150
+ // Try to use stale cache
151
+ const staleCache = await this.cacheManager.getStale(cacheKey);
152
+ if (staleCache) {
153
+ return staleCache;
154
+ }
155
+ }
156
+ // Re-throw if not handled
157
+ throw error;
158
+ }
159
+ }
160
+ /**
161
+ * Tier 3: Bulk pre-load all dependencies (optional command)
162
+ *
163
+ * Performance: 1-2 minutes for 50 projects (200-350 API calls, batched)
164
+ * Progress: Real-time progress tracking, cancelation support
165
+ *
166
+ * @param projectKeys Array of project keys to preload
167
+ * @returns void (results cached)
168
+ */
169
+ async preloadAllDependencies(projectKeys, options = {}) {
170
+ const { onProgress, signal } = options;
171
+ const total = projectKeys.length;
172
+ this.logger.log(`Preloading dependencies for ${total} projects...`);
173
+ for (let i = 0; i < total; i++) {
174
+ // Check for cancelation
175
+ if (signal?.aborted) {
176
+ this.logger.warn('Preload canceled by user');
177
+ throw new Error('Preload canceled');
178
+ }
179
+ const projectKey = projectKeys[i];
180
+ this.logger.log(`[${i + 1}/${total}] Preloading ${projectKey}...`);
181
+ try {
182
+ await this.loadProjectDependencies(projectKey);
183
+ // Report progress
184
+ if (onProgress) {
185
+ onProgress(i + 1, total);
186
+ }
187
+ }
188
+ catch (error) {
189
+ this.logger.error(`Failed to preload ${projectKey}: ${error.message}`);
190
+ // Continue with next project (don't fail entire batch)
191
+ }
192
+ // Add delay to avoid rate limiting (200ms between requests)
193
+ if (i < total - 1) {
194
+ await new Promise((resolve) => setTimeout(resolve, 200));
195
+ }
196
+ }
197
+ this.logger.log('Preload complete!');
198
+ }
199
+ }
200
+ //# sourceMappingURL=jira-dependency-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jira-dependency-loader.js","sourceRoot":"","sources":["../../../../src/integrations/jira/jira-dependency-loader.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "specweave",
3
- "version": "0.23.10",
3
+ "version": "0.23.14",
4
4
  "description": "Spec-driven development framework for Claude Code. AI-native workflow with living documentation, intelligent agents, and multilingual support (9 languages). Enterprise-grade traceability with permanent specs and temporary increments.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -30,6 +30,26 @@
30
30
  "timeout": 60
31
31
  }
32
32
  ]
33
+ },
34
+ {
35
+ "matcher": "Edit",
36
+ "hooks": [
37
+ {
38
+ "type": "command",
39
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/pre-edit-spec.sh",
40
+ "timeout": 2
41
+ }
42
+ ]
43
+ },
44
+ {
45
+ "matcher": "Write",
46
+ "hooks": [
47
+ {
48
+ "type": "command",
49
+ "command": "${CLAUDE_PLUGIN_ROOT}/hooks/pre-write-spec.sh",
50
+ "timeout": 2
51
+ }
52
+ ]
33
53
  }
34
54
  ],
35
55
  "PostToolUse": [