specweave 0.23.8 → 0.23.10
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.
- package/CLAUDE.md +118 -0
- package/dist/src/cli/commands/migrate-config.d.ts +22 -0
- package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
- package/dist/src/cli/commands/migrate-config.js +149 -0
- package/dist/src/cli/commands/migrate-config.js.map +1 -0
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +112 -60
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts +24 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +111 -131
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/core/config/config-manager.d.ts +135 -0
- package/dist/src/core/config/config-manager.d.ts.map +1 -0
- package/dist/src/core/config/config-manager.js +341 -0
- package/dist/src/core/config/config-manager.js.map +1 -0
- package/dist/src/core/config/config-migrator.d.ts +102 -0
- package/dist/src/core/config/config-migrator.d.ts.map +1 -0
- package/dist/src/core/config/config-migrator.js +367 -0
- package/dist/src/core/config/config-migrator.js.map +1 -0
- package/dist/src/core/config/index.d.ts +10 -0
- package/dist/src/core/config/index.d.ts.map +1 -0
- package/dist/src/core/config/index.js +10 -0
- package/dist/src/core/config/index.js.map +1 -0
- package/dist/src/core/config/types.d.ts +216 -0
- package/dist/src/core/config/types.d.ts.map +1 -0
- package/dist/src/core/config/types.js +32 -0
- package/dist/src/core/config/types.js.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
- package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/migrate-config.md +104 -0
- package/plugins/specweave/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave/hooks/pre-task-completion.sh +1 -1
- package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +132 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Migration Tool
|
|
3
|
+
*
|
|
4
|
+
* Migrates old .env-only format to split secrets/config format
|
|
5
|
+
*
|
|
6
|
+
* @module core/config/config-migrator
|
|
7
|
+
*/
|
|
8
|
+
import { promises as fs } from 'fs';
|
|
9
|
+
import path from 'path';
|
|
10
|
+
import { ConfigManager } from './config-manager.js';
|
|
11
|
+
import { parseEnvFile } from '../../utils/env-file.js';
|
|
12
|
+
/**
|
|
13
|
+
* Migrates .env-only configuration to split format
|
|
14
|
+
*/
|
|
15
|
+
export class ConfigMigrator {
|
|
16
|
+
constructor(projectRoot = process.cwd()) {
|
|
17
|
+
this.projectRoot = projectRoot;
|
|
18
|
+
this.envPath = path.join(projectRoot, '.env');
|
|
19
|
+
this.configManager = new ConfigManager(projectRoot);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Check if migration is needed
|
|
23
|
+
*
|
|
24
|
+
* @returns True if project needs migration
|
|
25
|
+
*/
|
|
26
|
+
async needsMigration() {
|
|
27
|
+
try {
|
|
28
|
+
// Check if .env exists
|
|
29
|
+
await fs.access(this.envPath);
|
|
30
|
+
// Check if config.json already has full config (already migrated)
|
|
31
|
+
const hasConfig = await this.configManager.exists();
|
|
32
|
+
if (hasConfig) {
|
|
33
|
+
const config = await this.configManager.read();
|
|
34
|
+
// If config has issue tracker or sync settings, likely already migrated
|
|
35
|
+
if (config.issueTracker?.domain || config.sync?.enabled) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
// Check if .env has config variables (not just secrets)
|
|
40
|
+
const envContent = await fs.readFile(this.envPath, 'utf-8');
|
|
41
|
+
const parsed = parseEnvFile(envContent);
|
|
42
|
+
const classified = this.classifyVariables(parsed);
|
|
43
|
+
// Needs migration if there are config variables in .env
|
|
44
|
+
return classified.some(c => c.type === 'config');
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return false;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Classify environment variables as secrets or config
|
|
52
|
+
*
|
|
53
|
+
* @param envVars - Parsed environment variables
|
|
54
|
+
* @returns Classification results
|
|
55
|
+
*/
|
|
56
|
+
classifyVariables(envVars) {
|
|
57
|
+
const results = [];
|
|
58
|
+
for (const [key, value] of Object.entries(envVars)) {
|
|
59
|
+
const classification = this.classifyVariable(key, value);
|
|
60
|
+
results.push(classification);
|
|
61
|
+
}
|
|
62
|
+
return results;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Classify a single variable
|
|
66
|
+
*
|
|
67
|
+
* @param key - Environment variable key
|
|
68
|
+
* @param value - Environment variable value
|
|
69
|
+
* @returns Classification result
|
|
70
|
+
*/
|
|
71
|
+
classifyVariable(key, value) {
|
|
72
|
+
const lowerKey = key.toLowerCase();
|
|
73
|
+
// Check for secret keywords
|
|
74
|
+
for (const keyword of ConfigMigrator.SECRET_KEYWORDS) {
|
|
75
|
+
if (lowerKey.includes(keyword)) {
|
|
76
|
+
return {
|
|
77
|
+
key,
|
|
78
|
+
value,
|
|
79
|
+
type: 'secret',
|
|
80
|
+
reason: `Contains keyword: ${keyword}`
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Check for email pattern (used for auth)
|
|
85
|
+
if (ConfigMigrator.EMAIL_PATTERN.test(value)) {
|
|
86
|
+
return {
|
|
87
|
+
key,
|
|
88
|
+
value,
|
|
89
|
+
type: 'secret',
|
|
90
|
+
reason: 'Email address (used for authentication)'
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
// Everything else is configuration
|
|
94
|
+
return {
|
|
95
|
+
key,
|
|
96
|
+
value,
|
|
97
|
+
type: 'config',
|
|
98
|
+
reason: 'Non-sensitive configuration data'
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Build config object from classified variables
|
|
103
|
+
*
|
|
104
|
+
* @param classified - Classified variables
|
|
105
|
+
* @returns Configuration object
|
|
106
|
+
*/
|
|
107
|
+
buildConfigFromVars(classified) {
|
|
108
|
+
const config = {
|
|
109
|
+
version: '2.0'
|
|
110
|
+
};
|
|
111
|
+
const configVars = classified.filter(c => c.type === 'config');
|
|
112
|
+
for (const { key, value } of configVars) {
|
|
113
|
+
// Jira configuration
|
|
114
|
+
if (key.startsWith('JIRA_')) {
|
|
115
|
+
if (!config.issueTracker) {
|
|
116
|
+
config.issueTracker = { provider: 'jira' };
|
|
117
|
+
}
|
|
118
|
+
if (key === 'JIRA_DOMAIN') {
|
|
119
|
+
config.issueTracker.domain = value;
|
|
120
|
+
}
|
|
121
|
+
else if (key === 'JIRA_INSTANCE_TYPE') {
|
|
122
|
+
config.issueTracker.instanceType = value;
|
|
123
|
+
}
|
|
124
|
+
else if (key === 'JIRA_STRATEGY') {
|
|
125
|
+
config.issueTracker.strategy = value;
|
|
126
|
+
}
|
|
127
|
+
else if (key === 'JIRA_PROJECT' || key === 'JIRA_PROJECT_KEY') {
|
|
128
|
+
config.issueTracker.project = value;
|
|
129
|
+
}
|
|
130
|
+
else if (key === 'JIRA_PROJECTS') {
|
|
131
|
+
// Comma-separated list
|
|
132
|
+
config.issueTracker.projects = value.split(',').map(k => ({ key: k.trim() }));
|
|
133
|
+
}
|
|
134
|
+
else if (key === 'JIRA_COMPONENTS') {
|
|
135
|
+
config.issueTracker.components = value.split(',').map(c => c.trim());
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// GitHub configuration
|
|
139
|
+
if (key.startsWith('GITHUB_')) {
|
|
140
|
+
if (key === 'GITHUB_OWNER') {
|
|
141
|
+
// Only set provider if not already set (prioritize first provider)
|
|
142
|
+
if (!config.issueTracker) {
|
|
143
|
+
config.issueTracker = { provider: 'github' };
|
|
144
|
+
}
|
|
145
|
+
else if (config.issueTracker.provider === 'jira') {
|
|
146
|
+
// Skip GitHub config if Jira provider already set
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
config.issueTracker.owner = value;
|
|
150
|
+
}
|
|
151
|
+
else if (key === 'GITHUB_REPO') {
|
|
152
|
+
if (!config.issueTracker) {
|
|
153
|
+
config.issueTracker = { provider: 'github' };
|
|
154
|
+
}
|
|
155
|
+
else if (config.issueTracker.provider === 'jira') {
|
|
156
|
+
// Skip GitHub config if Jira provider already set
|
|
157
|
+
continue;
|
|
158
|
+
}
|
|
159
|
+
config.issueTracker.repo = value;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// Azure DevOps configuration
|
|
163
|
+
if (key.startsWith('ADO_')) {
|
|
164
|
+
if (key === 'ADO_ORGANIZATION') {
|
|
165
|
+
// Only set provider if not already set (prioritize first provider)
|
|
166
|
+
if (!config.issueTracker) {
|
|
167
|
+
config.issueTracker = { provider: 'ado' };
|
|
168
|
+
}
|
|
169
|
+
else if (config.issueTracker.provider !== 'ado') {
|
|
170
|
+
// Skip ADO config if different provider already set
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
config.issueTracker.organization_ado = value;
|
|
174
|
+
}
|
|
175
|
+
else if (key === 'ADO_PROJECT') {
|
|
176
|
+
if (!config.issueTracker) {
|
|
177
|
+
config.issueTracker = { provider: 'ado' };
|
|
178
|
+
}
|
|
179
|
+
else if (config.issueTracker.provider !== 'ado') {
|
|
180
|
+
// Skip ADO config if different provider already set
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
config.issueTracker.project = value;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Sync configuration
|
|
187
|
+
if (key.startsWith('SYNC_')) {
|
|
188
|
+
if (!config.sync) {
|
|
189
|
+
config.sync = {
|
|
190
|
+
enabled: false,
|
|
191
|
+
direction: 'bidirectional',
|
|
192
|
+
autoSync: false,
|
|
193
|
+
includeStatus: true,
|
|
194
|
+
autoApplyLabels: true
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
if (key === 'SYNC_ENABLED') {
|
|
198
|
+
config.sync.enabled = value.toLowerCase() === 'true';
|
|
199
|
+
}
|
|
200
|
+
else if (key === 'SYNC_DIRECTION') {
|
|
201
|
+
config.sync.direction = value;
|
|
202
|
+
}
|
|
203
|
+
else if (key === 'SYNC_AUTO') {
|
|
204
|
+
config.sync.autoSync = value.toLowerCase() === 'true';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return config;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Migrate configuration
|
|
212
|
+
*
|
|
213
|
+
* @param options - Migration options
|
|
214
|
+
* @returns Migration result
|
|
215
|
+
*/
|
|
216
|
+
async migrate(options = {}) {
|
|
217
|
+
const { dryRun = false, backup = true, force = false } = options;
|
|
218
|
+
const errors = [];
|
|
219
|
+
const warnings = [];
|
|
220
|
+
try {
|
|
221
|
+
// Check if migration is needed
|
|
222
|
+
if (!force) {
|
|
223
|
+
const needed = await this.needsMigration();
|
|
224
|
+
if (!needed) {
|
|
225
|
+
return {
|
|
226
|
+
success: false,
|
|
227
|
+
secretsCount: 0,
|
|
228
|
+
configCount: 0,
|
|
229
|
+
errors: ['Migration not needed - project already uses split format or no .env found'],
|
|
230
|
+
warnings: [],
|
|
231
|
+
classified: []
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Read .env file
|
|
236
|
+
const envContent = await fs.readFile(this.envPath, 'utf-8');
|
|
237
|
+
const parsed = parseEnvFile(envContent);
|
|
238
|
+
// Classify variables
|
|
239
|
+
const classified = this.classifyVariables(parsed);
|
|
240
|
+
const secrets = classified.filter(c => c.type === 'secret');
|
|
241
|
+
const configs = classified.filter(c => c.type === 'config');
|
|
242
|
+
if (configs.length === 0) {
|
|
243
|
+
warnings.push('No configuration variables found in .env - only secrets detected');
|
|
244
|
+
}
|
|
245
|
+
if (dryRun) {
|
|
246
|
+
return {
|
|
247
|
+
success: true,
|
|
248
|
+
secretsCount: secrets.length,
|
|
249
|
+
configCount: configs.length,
|
|
250
|
+
errors: [],
|
|
251
|
+
warnings,
|
|
252
|
+
classified
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
// Backup original .env if requested
|
|
256
|
+
let backupPath;
|
|
257
|
+
if (backup) {
|
|
258
|
+
backupPath = `${this.envPath}.backup.${Date.now()}`;
|
|
259
|
+
await fs.copyFile(this.envPath, backupPath);
|
|
260
|
+
}
|
|
261
|
+
// Build new config.json content
|
|
262
|
+
const newConfig = this.buildConfigFromVars(classified);
|
|
263
|
+
// Write config.json
|
|
264
|
+
await this.configManager.update(newConfig);
|
|
265
|
+
// Create new .env with only secrets
|
|
266
|
+
const newEnvLines = [
|
|
267
|
+
'# SpecWeave Environment Variables',
|
|
268
|
+
'#',
|
|
269
|
+
'# IMPORTANT: This file contains ONLY secrets (tokens, passwords)',
|
|
270
|
+
'# Configuration is now in .specweave/config.json (committed to git)',
|
|
271
|
+
'#',
|
|
272
|
+
'# NEVER commit .env to git! It\'s already in .gitignore',
|
|
273
|
+
'',
|
|
274
|
+
...secrets.map(s => `${s.key}=${s.value}`)
|
|
275
|
+
];
|
|
276
|
+
await fs.writeFile(this.envPath, newEnvLines.join('\n'), 'utf-8');
|
|
277
|
+
// Generate .env.example
|
|
278
|
+
const exampleLines = [
|
|
279
|
+
'# SpecWeave Environment Variables',
|
|
280
|
+
'#',
|
|
281
|
+
'# IMPORTANT: Copy this file to .env and replace placeholder values',
|
|
282
|
+
'# NEVER commit .env to git!',
|
|
283
|
+
'#',
|
|
284
|
+
'# Setup: cp .env.example .env',
|
|
285
|
+
'',
|
|
286
|
+
...secrets.map(s => {
|
|
287
|
+
const placeholder = this.generatePlaceholder(s.key);
|
|
288
|
+
return `${s.key}=${placeholder}`;
|
|
289
|
+
}),
|
|
290
|
+
'',
|
|
291
|
+
'# NOTE: Configuration (domain, strategy, projects) is now in .specweave/config.json',
|
|
292
|
+
'# (This makes it shareable across the team via git)'
|
|
293
|
+
];
|
|
294
|
+
const examplePath = path.join(this.projectRoot, '.env.example');
|
|
295
|
+
await fs.writeFile(examplePath, exampleLines.join('\n'), 'utf-8');
|
|
296
|
+
return {
|
|
297
|
+
success: true,
|
|
298
|
+
secretsCount: secrets.length,
|
|
299
|
+
configCount: configs.length,
|
|
300
|
+
backupPath,
|
|
301
|
+
errors: [],
|
|
302
|
+
warnings,
|
|
303
|
+
classified
|
|
304
|
+
};
|
|
305
|
+
}
|
|
306
|
+
catch (error) {
|
|
307
|
+
errors.push(`Migration failed: ${error.message}`);
|
|
308
|
+
return {
|
|
309
|
+
success: false,
|
|
310
|
+
secretsCount: 0,
|
|
311
|
+
configCount: 0,
|
|
312
|
+
errors,
|
|
313
|
+
warnings,
|
|
314
|
+
classified: []
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
/**
|
|
319
|
+
* Generate placeholder value for .env.example
|
|
320
|
+
*
|
|
321
|
+
* @param key - Environment variable key
|
|
322
|
+
* @returns Placeholder value
|
|
323
|
+
*/
|
|
324
|
+
generatePlaceholder(key) {
|
|
325
|
+
const lowerKey = key.toLowerCase();
|
|
326
|
+
if (lowerKey.includes('email')) {
|
|
327
|
+
return 'your_email@company.com';
|
|
328
|
+
}
|
|
329
|
+
if (lowerKey.includes('jira') && lowerKey.includes('token')) {
|
|
330
|
+
return 'your_jira_api_token_here';
|
|
331
|
+
}
|
|
332
|
+
if (lowerKey.includes('github') && lowerKey.includes('token')) {
|
|
333
|
+
return 'your_github_token_here';
|
|
334
|
+
}
|
|
335
|
+
if (lowerKey.includes('ado') && lowerKey.includes('pat')) {
|
|
336
|
+
return 'your_ado_pat_here';
|
|
337
|
+
}
|
|
338
|
+
// Generic placeholder
|
|
339
|
+
return `your_${key.toLowerCase()}_here`;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Preview migration (dry run)
|
|
343
|
+
*
|
|
344
|
+
* @returns Migration preview
|
|
345
|
+
*/
|
|
346
|
+
async preview() {
|
|
347
|
+
return this.migrate({ dryRun: true, force: true });
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
/**
|
|
351
|
+
* Secret keywords (case-insensitive)
|
|
352
|
+
*/
|
|
353
|
+
ConfigMigrator.SECRET_KEYWORDS = [
|
|
354
|
+
'token',
|
|
355
|
+
'api_token',
|
|
356
|
+
'pat',
|
|
357
|
+
'secret',
|
|
358
|
+
'key',
|
|
359
|
+
'password',
|
|
360
|
+
'credential',
|
|
361
|
+
'auth'
|
|
362
|
+
];
|
|
363
|
+
/**
|
|
364
|
+
* Email patterns (for auth purposes, considered secrets)
|
|
365
|
+
*/
|
|
366
|
+
ConfigMigrator.EMAIL_PATTERN = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
367
|
+
//# sourceMappingURL=config-migrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-migrator.js","sourceRoot":"","sources":["../../../../src/core/config/config-migrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecWeave Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure for .specweave/config.json
|
|
5
|
+
*
|
|
6
|
+
* @module core/config/types
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Repository provider types
|
|
10
|
+
*/
|
|
11
|
+
export type RepositoryProvider = 'local' | 'github' | 'bitbucket' | 'ado' | 'gitlab' | 'generic';
|
|
12
|
+
/**
|
|
13
|
+
* Issue tracker provider types
|
|
14
|
+
*/
|
|
15
|
+
export type IssueTrackerProvider = 'none' | 'jira' | 'github' | 'ado';
|
|
16
|
+
/**
|
|
17
|
+
* Jira instance types
|
|
18
|
+
*/
|
|
19
|
+
export type JiraInstanceType = 'cloud' | 'server';
|
|
20
|
+
/**
|
|
21
|
+
* Jira organization strategies
|
|
22
|
+
*/
|
|
23
|
+
export type JiraStrategy = 'single-project' | 'project-per-team' | 'component-based' | 'board-based';
|
|
24
|
+
/**
|
|
25
|
+
* Sync direction types
|
|
26
|
+
*/
|
|
27
|
+
export type SyncDirection = 'import' | 'export' | 'bidirectional';
|
|
28
|
+
/**
|
|
29
|
+
* Repository configuration
|
|
30
|
+
*/
|
|
31
|
+
export interface RepoConfig {
|
|
32
|
+
name: string;
|
|
33
|
+
url: string;
|
|
34
|
+
path?: string;
|
|
35
|
+
branch?: string;
|
|
36
|
+
specweaveProject?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Jira project configuration
|
|
40
|
+
*/
|
|
41
|
+
export interface JiraProjectConfig {
|
|
42
|
+
key: string;
|
|
43
|
+
id?: string;
|
|
44
|
+
name?: string;
|
|
45
|
+
specweaveProject?: string;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Jira board configuration
|
|
49
|
+
*/
|
|
50
|
+
export interface JiraBoardConfig {
|
|
51
|
+
id: string;
|
|
52
|
+
name?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Repository configuration section
|
|
56
|
+
*/
|
|
57
|
+
export interface RepositoryConfiguration {
|
|
58
|
+
provider: RepositoryProvider;
|
|
59
|
+
organization?: string;
|
|
60
|
+
repos?: RepoConfig[];
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Issue tracker configuration section
|
|
64
|
+
*/
|
|
65
|
+
export interface IssueTrackerConfiguration {
|
|
66
|
+
provider: IssueTrackerProvider;
|
|
67
|
+
domain?: string;
|
|
68
|
+
instanceType?: JiraInstanceType;
|
|
69
|
+
strategy?: JiraStrategy;
|
|
70
|
+
projects?: JiraProjectConfig[];
|
|
71
|
+
components?: string[];
|
|
72
|
+
boards?: JiraBoardConfig[];
|
|
73
|
+
owner?: string;
|
|
74
|
+
repo?: string;
|
|
75
|
+
repos?: string[];
|
|
76
|
+
organization_ado?: string;
|
|
77
|
+
project?: string;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Sync profile configuration
|
|
81
|
+
*/
|
|
82
|
+
export interface SyncProfile {
|
|
83
|
+
provider: string;
|
|
84
|
+
displayName: string;
|
|
85
|
+
config: {
|
|
86
|
+
owner?: string;
|
|
87
|
+
repo?: string;
|
|
88
|
+
domain?: string;
|
|
89
|
+
projectKey?: string;
|
|
90
|
+
projects?: string[];
|
|
91
|
+
organization?: string;
|
|
92
|
+
project?: string;
|
|
93
|
+
monorepoProjects?: string[];
|
|
94
|
+
};
|
|
95
|
+
timeRange: {
|
|
96
|
+
default: string;
|
|
97
|
+
max: string;
|
|
98
|
+
};
|
|
99
|
+
rateLimits?: {
|
|
100
|
+
maxItemsPerSync: number;
|
|
101
|
+
warnThreshold: number;
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Sync settings
|
|
106
|
+
*/
|
|
107
|
+
export interface SyncSettings {
|
|
108
|
+
canUpsertInternalItems: boolean;
|
|
109
|
+
canUpdateExternalItems: boolean;
|
|
110
|
+
canUpdateStatus: boolean;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Sync configuration section
|
|
114
|
+
*/
|
|
115
|
+
export interface SyncConfiguration {
|
|
116
|
+
enabled: boolean;
|
|
117
|
+
direction: SyncDirection;
|
|
118
|
+
autoSync: boolean;
|
|
119
|
+
includeStatus: boolean;
|
|
120
|
+
autoApplyLabels: boolean;
|
|
121
|
+
provider?: string;
|
|
122
|
+
activeProfile?: string;
|
|
123
|
+
settings?: SyncSettings;
|
|
124
|
+
profiles?: Record<string, SyncProfile>;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Permission configuration section
|
|
128
|
+
*/
|
|
129
|
+
export interface PermissionsConfiguration {
|
|
130
|
+
canCreate: boolean;
|
|
131
|
+
canUpdate: boolean;
|
|
132
|
+
canUpdateStatus: boolean;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Hook configuration
|
|
136
|
+
*/
|
|
137
|
+
export interface HookConfiguration {
|
|
138
|
+
post_task_completion?: {
|
|
139
|
+
sync_living_docs?: boolean;
|
|
140
|
+
sync_tasks_md?: boolean;
|
|
141
|
+
external_tracker_sync?: boolean;
|
|
142
|
+
};
|
|
143
|
+
post_increment_planning?: {
|
|
144
|
+
auto_create_github_issue?: boolean;
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Project metadata
|
|
149
|
+
*/
|
|
150
|
+
export interface ProjectMetadata {
|
|
151
|
+
name: string;
|
|
152
|
+
version: string;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Adapter configuration
|
|
156
|
+
*/
|
|
157
|
+
export interface AdapterConfiguration {
|
|
158
|
+
default: string;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Main SpecWeave configuration
|
|
162
|
+
*/
|
|
163
|
+
export interface SpecWeaveConfig {
|
|
164
|
+
/**
|
|
165
|
+
* Config version for migration support
|
|
166
|
+
*/
|
|
167
|
+
version: string;
|
|
168
|
+
/**
|
|
169
|
+
* Project metadata (optional, for backward compatibility)
|
|
170
|
+
*/
|
|
171
|
+
project?: ProjectMetadata;
|
|
172
|
+
/**
|
|
173
|
+
* Adapter configuration (optional, for backward compatibility)
|
|
174
|
+
*/
|
|
175
|
+
adapters?: AdapterConfiguration;
|
|
176
|
+
/**
|
|
177
|
+
* Hook configuration (optional)
|
|
178
|
+
*/
|
|
179
|
+
hooks?: HookConfiguration;
|
|
180
|
+
/**
|
|
181
|
+
* Repository provider configuration
|
|
182
|
+
*/
|
|
183
|
+
repository?: RepositoryConfiguration;
|
|
184
|
+
/**
|
|
185
|
+
* Issue tracker configuration
|
|
186
|
+
*/
|
|
187
|
+
issueTracker?: IssueTrackerConfiguration;
|
|
188
|
+
/**
|
|
189
|
+
* Sync configuration
|
|
190
|
+
*/
|
|
191
|
+
sync?: SyncConfiguration;
|
|
192
|
+
/**
|
|
193
|
+
* Permissions configuration
|
|
194
|
+
*/
|
|
195
|
+
permissions?: PermissionsConfiguration;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Default configuration values
|
|
199
|
+
*/
|
|
200
|
+
export declare const DEFAULT_CONFIG: SpecWeaveConfig;
|
|
201
|
+
/**
|
|
202
|
+
* Validation error
|
|
203
|
+
*/
|
|
204
|
+
export interface ValidationError {
|
|
205
|
+
path: string;
|
|
206
|
+
message: string;
|
|
207
|
+
value?: any;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Validation result
|
|
211
|
+
*/
|
|
212
|
+
export interface ValidationResult {
|
|
213
|
+
valid: boolean;
|
|
214
|
+
errors: ValidationError[];
|
|
215
|
+
}
|
|
216
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/core/config/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpecWeave Configuration Types
|
|
3
|
+
*
|
|
4
|
+
* Defines the structure for .specweave/config.json
|
|
5
|
+
*
|
|
6
|
+
* @module core/config/types
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Default configuration values
|
|
10
|
+
*/
|
|
11
|
+
export const DEFAULT_CONFIG = {
|
|
12
|
+
version: '2.0',
|
|
13
|
+
repository: {
|
|
14
|
+
provider: 'local'
|
|
15
|
+
},
|
|
16
|
+
issueTracker: {
|
|
17
|
+
provider: 'none'
|
|
18
|
+
},
|
|
19
|
+
sync: {
|
|
20
|
+
enabled: false,
|
|
21
|
+
direction: 'bidirectional',
|
|
22
|
+
autoSync: false,
|
|
23
|
+
includeStatus: true,
|
|
24
|
+
autoApplyLabels: true
|
|
25
|
+
},
|
|
26
|
+
permissions: {
|
|
27
|
+
canCreate: true,
|
|
28
|
+
canUpdate: true,
|
|
29
|
+
canUpdateStatus: true
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/core/config/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA8NH;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAoB;IAC7C,OAAO,EAAE,KAAK;IACd,UAAU,EAAE;QACV,QAAQ,EAAE,OAAO;KAClB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,MAAM;KACjB;IACD,IAAI,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,SAAS,EAAE,eAAe;QAC1B,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,IAAI;QACnB,eAAe,EAAE,IAAI;KACtB;IACD,WAAW,EAAE;QACX,SAAS,EAAE,IAAI;QACf,SAAS,EAAE,IAAI;QACf,eAAe,EAAE,IAAI;KACtB;CACF,CAAC"}
|