specweave 0.23.7 → 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.
Files changed (46) hide show
  1. package/CLAUDE.md +118 -0
  2. package/dist/src/cli/commands/init.d.ts.map +1 -1
  3. package/dist/src/cli/commands/init.js +57 -2
  4. package/dist/src/cli/commands/init.js.map +1 -1
  5. package/dist/src/cli/commands/migrate-config.d.ts +22 -0
  6. package/dist/src/cli/commands/migrate-config.d.ts.map +1 -0
  7. package/dist/src/cli/commands/migrate-config.js +149 -0
  8. package/dist/src/cli/commands/migrate-config.js.map +1 -0
  9. package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
  10. package/dist/src/cli/helpers/issue-tracker/index.js +158 -80
  11. package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
  12. package/dist/src/cli/helpers/issue-tracker/jira.d.ts +24 -1
  13. package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
  14. package/dist/src/cli/helpers/issue-tracker/jira.js +111 -131
  15. package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
  16. package/dist/src/cli/helpers/issue-tracker/types.d.ts +5 -0
  17. package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
  18. package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
  19. package/dist/src/core/config/config-manager.d.ts +135 -0
  20. package/dist/src/core/config/config-manager.d.ts.map +1 -0
  21. package/dist/src/core/config/config-manager.js +341 -0
  22. package/dist/src/core/config/config-manager.js.map +1 -0
  23. package/dist/src/core/config/config-migrator.d.ts +102 -0
  24. package/dist/src/core/config/config-migrator.d.ts.map +1 -0
  25. package/dist/src/core/config/config-migrator.js +367 -0
  26. package/dist/src/core/config/config-migrator.js.map +1 -0
  27. package/dist/src/core/config/index.d.ts +10 -0
  28. package/dist/src/core/config/index.d.ts.map +1 -0
  29. package/dist/src/core/config/index.js +10 -0
  30. package/dist/src/core/config/index.js.map +1 -0
  31. package/dist/src/core/config/types.d.ts +216 -0
  32. package/dist/src/core/config/types.d.ts.map +1 -0
  33. package/dist/src/core/config/types.js +32 -0
  34. package/dist/src/core/config/types.js.map +1 -0
  35. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts +104 -0
  36. package/dist/src/integrations/jira/jira-hierarchy-mapper.d.ts.map +1 -0
  37. package/dist/src/integrations/jira/jira-hierarchy-mapper.js +178 -0
  38. package/dist/src/integrations/jira/jira-hierarchy-mapper.js.map +1 -0
  39. package/package.json +1 -1
  40. package/plugins/specweave/commands/migrate-config.md +104 -0
  41. package/plugins/specweave/hooks/post-task-completion.sh +1 -1
  42. package/plugins/specweave/hooks/pre-task-completion.sh +1 -1
  43. package/plugins/specweave-ado/hooks/post-task-completion.sh +1 -1
  44. package/plugins/specweave-github/hooks/post-task-completion.sh +1 -1
  45. package/plugins/specweave-jira/hooks/post-task-completion.sh +1 -1
  46. 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,10 @@
1
+ /**
2
+ * SpecWeave Configuration Module
3
+ *
4
+ * Exports configuration management utilities
5
+ *
6
+ * @module core/config
7
+ */
8
+ export * from './types.js';
9
+ export * from './config-manager.js';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -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,10 @@
1
+ /**
2
+ * SpecWeave Configuration Module
3
+ *
4
+ * Exports configuration management utilities
5
+ *
6
+ * @module core/config
7
+ */
8
+ export * from './types.js';
9
+ export * from './config-manager.js';
10
+ //# sourceMappingURL=index.js.map
@@ -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"}