specweave 0.24.8 → 0.24.9

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 (130) hide show
  1. package/dist/src/cli/commands/init.d.ts.map +1 -1
  2. package/dist/src/cli/commands/init.js +3 -1
  3. package/dist/src/cli/commands/init.js.map +1 -1
  4. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
  5. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +18 -2
  6. package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
  7. package/dist/src/core/repo-structure/git-error-handler.d.ts +1 -1
  8. package/dist/src/core/repo-structure/git-error-handler.d.ts.map +1 -1
  9. package/dist/src/core/repo-structure/git-provider.d.ts +1 -1
  10. package/dist/src/core/repo-structure/git-provider.d.ts.map +1 -1
  11. package/dist/src/core/repo-structure/platform-registry.d.ts.map +1 -1
  12. package/dist/src/core/repo-structure/platform-registry.js +20 -9
  13. package/dist/src/core/repo-structure/platform-registry.js.map +1 -1
  14. package/dist/src/core/repo-structure/prompt-consolidator.d.ts +13 -1
  15. package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
  16. package/dist/src/core/repo-structure/prompt-consolidator.js +38 -5
  17. package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
  18. package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts +64 -0
  19. package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts.map +1 -0
  20. package/dist/src/core/repo-structure/providers/azure-devops-provider.js +263 -0
  21. package/dist/src/core/repo-structure/providers/azure-devops-provider.js.map +1 -0
  22. package/dist/src/core/repo-structure/providers/bitbucket-provider.d.ts +12 -11
  23. package/dist/src/core/repo-structure/providers/bitbucket-provider.d.ts.map +1 -1
  24. package/dist/src/core/repo-structure/providers/bitbucket-provider.js +164 -30
  25. package/dist/src/core/repo-structure/providers/bitbucket-provider.js.map +1 -1
  26. package/dist/src/core/repo-structure/providers/gitlab-provider.d.ts +10 -9
  27. package/dist/src/core/repo-structure/providers/gitlab-provider.d.ts.map +1 -1
  28. package/dist/src/core/repo-structure/providers/gitlab-provider.js +182 -28
  29. package/dist/src/core/repo-structure/providers/gitlab-provider.js.map +1 -1
  30. package/dist/src/core/repo-structure/providers/index.d.ts +3 -1
  31. package/dist/src/core/repo-structure/providers/index.d.ts.map +1 -1
  32. package/dist/src/core/repo-structure/providers/index.js +10 -2
  33. package/dist/src/core/repo-structure/providers/index.js.map +1 -1
  34. package/dist/src/core/repo-structure/providers/local-provider.d.ts +61 -0
  35. package/dist/src/core/repo-structure/providers/local-provider.d.ts.map +1 -0
  36. package/dist/src/core/repo-structure/providers/local-provider.js +148 -0
  37. package/dist/src/core/repo-structure/providers/local-provider.js.map +1 -0
  38. package/dist/src/core/repo-structure/repo-structure-manager.d.ts +11 -1
  39. package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
  40. package/dist/src/core/repo-structure/repo-structure-manager.js +268 -84
  41. package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
  42. package/package.json +1 -1
  43. package/plugins/specweave/agents/pm/AGENT.md.bak +1893 -0
  44. package/plugins/specweave/hooks/docs-changed.sh.backup +79 -0
  45. package/plugins/specweave/hooks/human-input-required.sh.backup +75 -0
  46. package/plugins/specweave/hooks/lib/migrate-increment-work.sh.bak +245 -0
  47. package/plugins/specweave/hooks/lib/sync-spec-content.sh.bak +149 -0
  48. package/plugins/specweave/hooks/lib/validate-spec-status.sh.bak +163 -0
  49. package/plugins/specweave/hooks/post-first-increment.sh.backup +61 -0
  50. package/plugins/specweave/hooks/post-first-increment.sh.bak +61 -0
  51. package/plugins/specweave/hooks/post-increment-change.sh.backup +98 -0
  52. package/plugins/specweave/hooks/post-increment-completion.sh.backup +231 -0
  53. package/plugins/specweave/hooks/post-increment-planning.sh.backup +1048 -0
  54. package/plugins/specweave/hooks/post-increment-status-change.sh.backup +147 -0
  55. package/plugins/specweave/hooks/post-spec-update.sh.backup +158 -0
  56. package/plugins/specweave/hooks/post-spec-update.sh.bak +158 -0
  57. package/plugins/specweave/hooks/post-task-completion.sh +69 -175
  58. package/plugins/specweave/hooks/post-user-story-complete.sh.backup +179 -0
  59. package/plugins/specweave/hooks/post-user-story-complete.sh.bak +179 -0
  60. package/plugins/specweave/hooks/pre-command-deduplication.sh.backup +83 -0
  61. package/plugins/specweave/hooks/pre-command-deduplication.sh.bak +83 -0
  62. package/plugins/specweave/hooks/pre-implementation.sh.backup +67 -0
  63. package/plugins/specweave/hooks/pre-task-completion.sh.backup +194 -0
  64. package/plugins/specweave/hooks/pre-tool-use.sh.backup +133 -0
  65. package/plugins/specweave/hooks/user-prompt-submit.sh.backup +386 -0
  66. package/plugins/specweave/hooks/user-prompt-submit.sh.bak +386 -0
  67. package/plugins/specweave/lib/hooks/auto-transition.js.bak +50 -0
  68. package/plugins/specweave/lib/hooks/auto-transition.ts.bak +84 -0
  69. package/plugins/specweave/lib/hooks/consolidated-sync.js +183 -0
  70. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.js.bak +0 -0
  71. package/plugins/specweave/lib/hooks/git-diff-analyzer.d.ts.bak +89 -0
  72. package/plugins/specweave/lib/hooks/git-diff-analyzer.js.bak +142 -0
  73. package/plugins/specweave/lib/hooks/git-diff-analyzer.ts.bak +269 -0
  74. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.js.bak +0 -0
  75. package/plugins/specweave/lib/hooks/invoke-translator-skill.d.ts.bak +60 -0
  76. package/plugins/specweave/lib/hooks/invoke-translator-skill.js.bak +155 -0
  77. package/plugins/specweave/lib/hooks/invoke-translator-skill.ts.bak +264 -0
  78. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.js.bak +0 -0
  79. package/plugins/specweave/lib/hooks/prepare-reflection-context.d.ts.bak +42 -0
  80. package/plugins/specweave/lib/hooks/prepare-reflection-context.js.bak +110 -0
  81. package/plugins/specweave/lib/hooks/prepare-reflection-context.ts.bak +178 -0
  82. package/plugins/specweave/lib/hooks/reflection-config-loader.d.js.bak +0 -0
  83. package/plugins/specweave/lib/hooks/reflection-config-loader.d.ts.bak +45 -0
  84. package/plugins/specweave/lib/hooks/reflection-config-loader.js.bak +92 -0
  85. package/plugins/specweave/lib/hooks/reflection-config-loader.ts.bak +156 -0
  86. package/plugins/specweave/lib/hooks/reflection-parser.d.js.bak +0 -0
  87. package/plugins/specweave/lib/hooks/reflection-parser.d.ts.bak +33 -0
  88. package/plugins/specweave/lib/hooks/reflection-parser.js.bak +301 -0
  89. package/plugins/specweave/lib/hooks/reflection-parser.ts.bak +484 -0
  90. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.js.bak +0 -0
  91. package/plugins/specweave/lib/hooks/reflection-prompt-builder.d.ts.bak +56 -0
  92. package/plugins/specweave/lib/hooks/reflection-prompt-builder.js.bak +182 -0
  93. package/plugins/specweave/lib/hooks/reflection-prompt-builder.ts.bak +306 -0
  94. package/plugins/specweave/lib/hooks/reflection-storage.d.js.bak +0 -0
  95. package/plugins/specweave/lib/hooks/reflection-storage.d.ts.bak +64 -0
  96. package/plugins/specweave/lib/hooks/reflection-storage.js.bak +231 -0
  97. package/plugins/specweave/lib/hooks/reflection-storage.ts.bak +369 -0
  98. package/plugins/specweave/lib/hooks/run-self-reflection.d.js.bak +0 -0
  99. package/plugins/specweave/lib/hooks/run-self-reflection.d.ts.bak +43 -0
  100. package/plugins/specweave/lib/hooks/run-self-reflection.js.bak +132 -0
  101. package/plugins/specweave/lib/hooks/run-self-reflection.ts.bak +258 -0
  102. package/plugins/specweave/lib/hooks/sync-cache.js.bak +294 -0
  103. package/plugins/specweave/lib/hooks/sync-living-docs.d.js.bak +1 -0
  104. package/plugins/specweave/lib/hooks/sync-living-docs.d.ts.bak +27 -0
  105. package/plugins/specweave/lib/hooks/sync-living-docs.js.bak +339 -0
  106. package/plugins/specweave/lib/hooks/sync-us-tasks.js.bak +476 -0
  107. package/plugins/specweave/lib/hooks/translate-file.d.js.bak +0 -0
  108. package/plugins/specweave/lib/hooks/translate-file.d.ts.bak +59 -0
  109. package/plugins/specweave/lib/hooks/translate-file.js.bak +289 -0
  110. package/plugins/specweave/lib/hooks/translate-file.ts.bak +428 -0
  111. package/plugins/specweave/lib/hooks/translate-living-docs.d.js.bak +0 -0
  112. package/plugins/specweave/lib/hooks/translate-living-docs.d.ts.bak +13 -0
  113. package/plugins/specweave/lib/hooks/translate-living-docs.js.bak +119 -0
  114. package/plugins/specweave/lib/hooks/translate-living-docs.ts.bak +224 -0
  115. package/plugins/specweave/lib/hooks/update-ac-status.js.bak +51 -0
  116. package/plugins/specweave/lib/hooks/update-ac-status.ts.bak +103 -0
  117. package/plugins/specweave/lib/hooks/update-tasks-md.d.js.bak +1 -0
  118. package/plugins/specweave/lib/hooks/update-tasks-md.d.ts.bak +29 -0
  119. package/plugins/specweave/lib/hooks/update-tasks-md.js.bak +296 -0
  120. package/plugins/specweave/lib/hooks/update-tasks-md.ts.bak +489 -0
  121. package/plugins/specweave-ado/hooks/post-living-docs-update.sh.backup +353 -0
  122. package/plugins/specweave-ado/hooks/post-task-completion.sh.backup +172 -0
  123. package/plugins/specweave-ado/lib/ado-multi-project-sync.js +1 -0
  124. package/plugins/specweave-ado/lib/enhanced-ado-sync.js +170 -0
  125. package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +424 -0
  126. package/plugins/specweave-github/hooks/post-task-completion.sh.backup +258 -0
  127. package/plugins/specweave-jira/hooks/post-task-completion.sh.backup +172 -0
  128. package/plugins/specweave-jira/lib/enhanced-jira-sync.js +3 -3
  129. package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +540 -0
  130. package/plugins/specweave-release/hooks/post-task-completion.sh.backup +110 -0
@@ -1,16 +1,18 @@
1
1
  /**
2
- * Bitbucket Provider Implementation (STUB)
2
+ * Bitbucket Provider Implementation
3
3
  *
4
- * Stub implementation for Bitbucket.org and Bitbucket Server/Data Center.
5
- * Full implementation coming soon!
4
+ * Implements GitProvider interface for Bitbucket.org and Bitbucket Server/Data Center.
5
+ * Handles repository validation, creation, and management via Bitbucket API 2.0.
6
6
  *
7
7
  * @module providers/bitbucket-provider
8
8
  */
9
9
  import { BaseGitProvider } from '../git-provider.js';
10
+ import { getActionableError, formatActionableError } from '../git-error-handler.js';
10
11
  /**
11
- * Bitbucket Provider (Stub)
12
+ * Bitbucket Provider
12
13
  *
13
- * Placeholder implementation for Bitbucket support.
14
+ * Implements Git operations for Bitbucket platform.
15
+ * Supports both Bitbucket.org and Bitbucket Server/Data Center.
14
16
  */
15
17
  export class BitbucketProvider extends BaseGitProvider {
16
18
  constructor(config) {
@@ -24,42 +26,175 @@ export class BitbucketProvider extends BaseGitProvider {
24
26
  });
25
27
  }
26
28
  /**
27
- * Validate repository (stub)
29
+ * Validate if a repository exists on Bitbucket
28
30
  */
29
31
  async validateRepository(owner, repo, token) {
30
- throw new Error(`
31
- Bitbucket Support Coming Soon!
32
-
33
- Bitbucket integration is not yet implemented.
34
- Currently, only GitHub is fully supported.
35
-
36
- 🔜 What's coming:
37
- Bitbucket.org and Bitbucket Server/Data Center support
38
- Repository validation and creation
39
- Workspace support
40
- SSH and HTTPS remote URLs
41
-
42
- For now, please use GitHub or wait for the next SpecWeave release.
43
-
44
- 📖 Track progress: https://github.com/anton-abyzov/specweave/issues
45
- `.trim());
32
+ try {
33
+ const headers = {
34
+ 'Accept': 'application/json'
35
+ };
36
+ if (token) {
37
+ headers['Authorization'] = `Bearer ${token}`;
38
+ }
39
+ const response = await fetch(this.getApiUrl(`/repositories/${owner}/${repo}`), { headers });
40
+ if (response.status === 404) {
41
+ // Repository does not exist (good for creation)
42
+ return { exists: false, valid: true };
43
+ }
44
+ if (response.status === 200) {
45
+ // Repository already exists
46
+ const data = await response.json();
47
+ return {
48
+ exists: true,
49
+ valid: true,
50
+ url: data.links.html.href
51
+ };
52
+ }
53
+ if (response.status === 401 || response.status === 403) {
54
+ // Authentication or permission error
55
+ const apiError = {
56
+ status: response.status,
57
+ message: response.statusText,
58
+ platform: 'bitbucket',
59
+ operation: 'validate_repo',
60
+ resourceType: 'repository',
61
+ resourceName: `${owner}/${repo}`
62
+ };
63
+ const actionable = getActionableError(apiError);
64
+ return { exists: false, valid: false, error: formatActionableError(actionable) };
65
+ }
66
+ // Other error
67
+ const apiError = {
68
+ status: response.status,
69
+ message: response.statusText,
70
+ platform: 'bitbucket',
71
+ operation: 'validate_repo',
72
+ resourceType: 'repository',
73
+ resourceName: `${owner}/${repo}`
74
+ };
75
+ const actionable = getActionableError(apiError);
76
+ return {
77
+ exists: false,
78
+ valid: false,
79
+ error: formatActionableError(actionable)
80
+ };
81
+ }
82
+ catch (error) {
83
+ return {
84
+ exists: false,
85
+ valid: false,
86
+ error: `Network error: ${error instanceof Error ? error.message : String(error)}`
87
+ };
88
+ }
46
89
  }
47
90
  /**
48
- * Validate owner (stub)
91
+ * Validate if a Bitbucket workspace (user or team) exists
49
92
  */
50
93
  async validateOwner(owner, token) {
51
- throw new Error('Bitbucket support coming soon! Please use GitHub for now.');
94
+ const headers = {
95
+ 'Accept': 'application/json'
96
+ };
97
+ if (token) {
98
+ headers['Authorization'] = `Bearer ${token}`;
99
+ }
100
+ try {
101
+ // Try as workspace (can be user or team)
102
+ const workspaceResponse = await fetch(this.getApiUrl(`/workspaces/${owner}`), { headers });
103
+ if (workspaceResponse.status === 200) {
104
+ const data = await workspaceResponse.json();
105
+ // Workspace can be either user or team
106
+ const type = data.type === 'team' ? 'organization' : 'user';
107
+ return { valid: true, type };
108
+ }
109
+ // Try as user
110
+ const userResponse = await fetch(this.getApiUrl(`/users/${owner}`), { headers });
111
+ if (userResponse.status === 200) {
112
+ return { valid: true, type: 'user' };
113
+ }
114
+ // Not found
115
+ const apiError = {
116
+ status: 404,
117
+ message: 'Not Found',
118
+ platform: 'bitbucket',
119
+ operation: 'validate_owner',
120
+ resourceType: 'workspace',
121
+ resourceName: owner
122
+ };
123
+ const actionable = getActionableError(apiError);
124
+ return { valid: false, error: formatActionableError(actionable) };
125
+ }
126
+ catch (error) {
127
+ return {
128
+ valid: false,
129
+ error: `Network error: ${error instanceof Error ? error.message : String(error)}`
130
+ };
131
+ }
52
132
  }
53
133
  /**
54
- * Create repository (stub)
134
+ * Create a new repository on Bitbucket
55
135
  */
56
136
  async createRepository(options, token) {
57
- throw new Error('Bitbucket support coming soon! Please use GitHub for now.');
137
+ const payload = {
138
+ scm: 'git',
139
+ name: options.name,
140
+ description: options.description,
141
+ is_private: options.visibility === 'private',
142
+ has_issues: options.hasIssues !== false,
143
+ has_wiki: options.hasWiki || false,
144
+ fork_policy: 'no_public_forks'
145
+ };
146
+ const response = await fetch(this.getApiUrl(`/repositories/${options.owner}/${options.name}`), {
147
+ method: 'POST',
148
+ headers: {
149
+ 'Authorization': `Bearer ${token}`,
150
+ 'Accept': 'application/json',
151
+ 'Content-Type': 'application/json'
152
+ },
153
+ body: JSON.stringify(payload)
154
+ });
155
+ if (!response.ok) {
156
+ const error = await response.json();
157
+ // Handle "already exists" error
158
+ if (response.status === 400 && error.error?.message?.includes('already exists')) {
159
+ // Repository already exists, return URL
160
+ const host = this.config.customDomain || this.config.host;
161
+ return `https://${host}/${options.owner}/${options.name}`;
162
+ }
163
+ // Handle other errors with actionable messages
164
+ const apiError = {
165
+ status: response.status,
166
+ message: error.error?.message || response.statusText,
167
+ platform: 'bitbucket',
168
+ operation: 'create_repo',
169
+ resourceType: 'repository',
170
+ resourceName: `${options.owner}/${options.name}`
171
+ };
172
+ const actionable = getActionableError(apiError);
173
+ throw new Error(formatActionableError(actionable));
174
+ }
175
+ const data = await response.json();
176
+ return data.links.html.href;
58
177
  }
59
178
  /**
60
- * Check if organization (stub)
179
+ * Check if a workspace is a team (organization)
61
180
  */
62
181
  async isOrganization(account, token) {
182
+ try {
183
+ const headers = {
184
+ 'Accept': 'application/json'
185
+ };
186
+ if (token) {
187
+ headers['Authorization'] = `Bearer ${token}`;
188
+ }
189
+ const response = await fetch(this.getApiUrl(`/workspaces/${account}`), { headers });
190
+ if (response.ok) {
191
+ const data = await response.json();
192
+ return data.type === 'team';
193
+ }
194
+ }
195
+ catch {
196
+ // Assume user if we can't determine
197
+ }
63
198
  return false;
64
199
  }
65
200
  /**
@@ -78,16 +213,15 @@ For now, please use GitHub or wait for the next SpecWeave release.
78
213
  return ['repository:read', 'repository:write', 'repository:admin'];
79
214
  }
80
215
  /**
81
- * Override SSH user for Bitbucket (uses 'git' not 'hg')
216
+ * Override SSH user for Bitbucket
82
217
  */
83
218
  getSSHUser() {
84
219
  return 'git';
85
220
  }
86
221
  /**
87
- * Override getAuthHeaders for Bitbucket-specific auth
222
+ * Override getAuthHeaders for Bitbucket-specific auth (Bearer token)
88
223
  */
89
224
  getAuthHeaders(token) {
90
- // Bitbucket uses HTTP Basic Auth or App Passwords
91
225
  return {
92
226
  'Authorization': `Bearer ${token}`,
93
227
  'Accept': 'application/json',
@@ -1 +1 @@
1
- {"version":3,"file":"bitbucket-provider.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/bitbucket-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAsG,MAAM,oBAAoB,CAAC;AAEzJ;;;;GAIG;AACH,MAAM,OAAO,iBAAkB,SAAQ,eAAe;IACpD,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,eAAe;YACrC,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,+BAA+B;YACjE,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;YACvC,YAAY,EAAE,MAAM,EAAE,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,IAAY,EACZ,KAAc;QAEd,MAAM,IAAI,KAAK,CAAC;;;;;;;;;;;;;;;KAef,CAAC,IAAI,EAAE,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,KAAc;QAEd,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAA0B,EAC1B,KAAa;QAEb,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC/E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,KAAc;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,kCAAkC,CAAC;QACnG,CAAC;QACD,OAAO,uDAAuD,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,cAAwB;QACxC,OAAO,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;IACrE,CAAC;IAED;;OAEG;IACO,UAAU;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,KAAa;QACpC,kDAAkD;QAClD,OAAO;YACL,eAAe,EAAE,UAAU,KAAK,EAAE;YAClC,QAAQ,EAAE,kBAAkB;YAC5B,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAgC;IACtE,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"bitbucket-provider.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/bitbucket-provider.ts"],"names":[],"mappings":"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"}
@@ -1,33 +1,34 @@
1
1
  /**
2
- * GitLab Provider Implementation (STUB)
2
+ * GitLab Provider Implementation
3
3
  *
4
- * Stub implementation for GitLab.com and self-hosted GitLab instances.
5
- * Full implementation coming soon!
4
+ * Implements GitProvider interface for GitLab.com and self-hosted GitLab instances.
5
+ * Handles project validation, creation, and management via GitLab API v4.
6
6
  *
7
7
  * @module providers/gitlab-provider
8
8
  */
9
9
  import { BaseGitProvider, type PlatformConfig, type RepoValidationResult, type OwnerValidationResult, type CreateRepoOptions } from '../git-provider.js';
10
10
  /**
11
- * GitLab Provider (Stub)
11
+ * GitLab Provider
12
12
  *
13
- * Placeholder implementation for GitLab support.
13
+ * Implements Git operations for GitLab platform.
14
+ * Supports both GitLab.com and self-hosted GitLab instances.
14
15
  */
15
16
  export declare class GitLabProvider extends BaseGitProvider {
16
17
  constructor(config?: Partial<PlatformConfig>);
17
18
  /**
18
- * Validate repository (stub)
19
+ * Validate if a project exists on GitLab
19
20
  */
20
21
  validateRepository(owner: string, repo: string, token?: string): Promise<RepoValidationResult>;
21
22
  /**
22
- * Validate owner (stub)
23
+ * Validate if a GitLab namespace (user or group) exists
23
24
  */
24
25
  validateOwner(owner: string, token?: string): Promise<OwnerValidationResult>;
25
26
  /**
26
- * Create repository (stub)
27
+ * Create a new project on GitLab
27
28
  */
28
29
  createRepository(options: CreateRepoOptions, token: string): Promise<string>;
29
30
  /**
30
- * Check if organization (stub)
31
+ * Check if a namespace is a group (organization)
31
32
  */
32
33
  isOrganization(account: string, token?: string): Promise<boolean>;
33
34
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/gitlab-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAEzJ;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAW5C;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IAmBhC;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAIlB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE;;OAEG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,iBAAiB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAOhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAErF"}
1
+ {"version":3,"file":"gitlab-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/gitlab-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,qBAAqB,EAAE,KAAK,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGzJ;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,eAAe;gBACrC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAW5C;;OAEG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IA0EhC;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC;IAsDjC;;OAEG;IACG,gBAAgB,CACpB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IA6ElB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBvE;;OAEG;IACH,WAAW,IAAI,MAAM;IAOrB;;OAEG;IACH,iBAAiB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE;IAIrD;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAOhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAErF"}
@@ -1,16 +1,18 @@
1
1
  /**
2
- * GitLab Provider Implementation (STUB)
2
+ * GitLab Provider Implementation
3
3
  *
4
- * Stub implementation for GitLab.com and self-hosted GitLab instances.
5
- * Full implementation coming soon!
4
+ * Implements GitProvider interface for GitLab.com and self-hosted GitLab instances.
5
+ * Handles project validation, creation, and management via GitLab API v4.
6
6
  *
7
7
  * @module providers/gitlab-provider
8
8
  */
9
9
  import { BaseGitProvider } from '../git-provider.js';
10
+ import { getActionableError, formatActionableError } from '../git-error-handler.js';
10
11
  /**
11
- * GitLab Provider (Stub)
12
+ * GitLab Provider
12
13
  *
13
- * Placeholder implementation for GitLab support.
14
+ * Implements Git operations for GitLab platform.
15
+ * Supports both GitLab.com and self-hosted GitLab instances.
14
16
  */
15
17
  export class GitLabProvider extends BaseGitProvider {
16
18
  constructor(config) {
@@ -24,43 +26,195 @@ export class GitLabProvider extends BaseGitProvider {
24
26
  });
25
27
  }
26
28
  /**
27
- * Validate repository (stub)
29
+ * Validate if a project exists on GitLab
28
30
  */
29
31
  async validateRepository(owner, repo, token) {
30
- throw new Error(`
31
- GitLab Support Coming Soon!
32
-
33
- GitLab integration is not yet implemented.
34
- Currently, only GitHub is fully supported.
35
-
36
- 🔜 What's coming:
37
- GitLab.com and self-hosted GitLab support
38
- Project validation and creation
39
- Group/namespace support
40
- SSH and HTTPS remote URLs
41
-
42
- For now, please use GitHub or wait for the next SpecWeave release.
43
-
44
- 📖 Track progress: https://github.com/anton-abyzov/specweave/issues
45
- `.trim());
32
+ try {
33
+ const headers = {
34
+ 'Accept': 'application/json'
35
+ };
36
+ if (token) {
37
+ headers['PRIVATE-TOKEN'] = token;
38
+ }
39
+ // GitLab uses namespace/project format for project IDs
40
+ const projectPath = encodeURIComponent(`${owner}/${repo}`);
41
+ const response = await fetch(this.getApiUrl(`/projects/${projectPath}`), { headers });
42
+ if (response.status === 404) {
43
+ // Project does not exist (good for creation)
44
+ return { exists: false, valid: true };
45
+ }
46
+ if (response.status === 200) {
47
+ // Project already exists
48
+ const data = await response.json();
49
+ return {
50
+ exists: true,
51
+ valid: true,
52
+ url: data.web_url
53
+ };
54
+ }
55
+ if (response.status === 401 || response.status === 403) {
56
+ // Authentication or permission error
57
+ const apiError = {
58
+ status: response.status,
59
+ message: response.statusText,
60
+ platform: 'gitlab',
61
+ operation: 'validate_repo',
62
+ resourceType: 'project',
63
+ resourceName: `${owner}/${repo}`
64
+ };
65
+ const actionable = getActionableError(apiError);
66
+ return { exists: false, valid: false, error: formatActionableError(actionable) };
67
+ }
68
+ // Other error
69
+ const apiError = {
70
+ status: response.status,
71
+ message: response.statusText,
72
+ platform: 'gitlab',
73
+ operation: 'validate_repo',
74
+ resourceType: 'project',
75
+ resourceName: `${owner}/${repo}`
76
+ };
77
+ const actionable = getActionableError(apiError);
78
+ return {
79
+ exists: false,
80
+ valid: false,
81
+ error: formatActionableError(actionable)
82
+ };
83
+ }
84
+ catch (error) {
85
+ return {
86
+ exists: false,
87
+ valid: false,
88
+ error: `Network error: ${error instanceof Error ? error.message : String(error)}`
89
+ };
90
+ }
46
91
  }
47
92
  /**
48
- * Validate owner (stub)
93
+ * Validate if a GitLab namespace (user or group) exists
49
94
  */
50
95
  async validateOwner(owner, token) {
51
- throw new Error('GitLab support coming soon! Please use GitHub for now.');
96
+ const headers = {
97
+ 'Accept': 'application/json'
98
+ };
99
+ if (token) {
100
+ headers['PRIVATE-TOKEN'] = token;
101
+ }
102
+ try {
103
+ // Try as user first
104
+ const userResponse = await fetch(this.getApiUrl(`/users?username=${encodeURIComponent(owner)}`), { headers });
105
+ if (userResponse.status === 200) {
106
+ const users = await userResponse.json();
107
+ if (users.length > 0) {
108
+ return { valid: true, type: 'user' };
109
+ }
110
+ }
111
+ // Try as group
112
+ const groupResponse = await fetch(this.getApiUrl(`/groups/${encodeURIComponent(owner)}`), { headers });
113
+ if (groupResponse.status === 200) {
114
+ return { valid: true, type: 'organization' };
115
+ }
116
+ // Not found
117
+ const apiError = {
118
+ status: 404,
119
+ message: 'Not Found',
120
+ platform: 'gitlab',
121
+ operation: 'validate_owner',
122
+ resourceType: 'namespace',
123
+ resourceName: owner
124
+ };
125
+ const actionable = getActionableError(apiError);
126
+ return { valid: false, error: formatActionableError(actionable) };
127
+ }
128
+ catch (error) {
129
+ return {
130
+ valid: false,
131
+ error: `Network error: ${error instanceof Error ? error.message : String(error)}`
132
+ };
133
+ }
52
134
  }
53
135
  /**
54
- * Create repository (stub)
136
+ * Create a new project on GitLab
55
137
  */
56
138
  async createRepository(options, token) {
57
- throw new Error('GitLab support coming soon! Please use GitHub for now.');
139
+ // Check if it's a group or user namespace
140
+ const isGroup = await this.isOrganization(options.owner, token);
141
+ const payload = {
142
+ name: options.name,
143
+ description: options.description,
144
+ visibility: options.visibility === 'private' ? 'private' :
145
+ options.visibility === 'internal' ? 'internal' : 'public',
146
+ initialize_with_readme: options.autoInit || false,
147
+ issues_enabled: options.hasIssues !== false,
148
+ wiki_enabled: options.hasWiki || false
149
+ };
150
+ // For group projects, specify the namespace_id
151
+ if (isGroup) {
152
+ try {
153
+ const groupResponse = await fetch(this.getApiUrl(`/groups/${encodeURIComponent(options.owner)}`), {
154
+ headers: {
155
+ 'PRIVATE-TOKEN': token,
156
+ 'Accept': 'application/json'
157
+ }
158
+ });
159
+ if (groupResponse.ok) {
160
+ const group = await groupResponse.json();
161
+ payload.namespace_id = group.id;
162
+ }
163
+ }
164
+ catch {
165
+ // Continue without namespace_id, will use user's namespace
166
+ }
167
+ }
168
+ const response = await fetch(this.getApiUrl('/projects'), {
169
+ method: 'POST',
170
+ headers: {
171
+ 'PRIVATE-TOKEN': token,
172
+ 'Accept': 'application/json',
173
+ 'Content-Type': 'application/json'
174
+ },
175
+ body: JSON.stringify(payload)
176
+ });
177
+ if (!response.ok) {
178
+ const error = await response.json();
179
+ // Handle "already exists" error
180
+ if (error.message?.name?.[0]?.includes('has already been taken')) {
181
+ // Project already exists, return URL
182
+ const host = this.config.customDomain || this.config.host;
183
+ return `https://${host}/${options.owner}/${options.name}`;
184
+ }
185
+ // Handle other errors with actionable messages
186
+ const apiError = {
187
+ status: response.status,
188
+ message: error.message || response.statusText,
189
+ platform: 'gitlab',
190
+ operation: 'create_repo',
191
+ resourceType: 'project',
192
+ resourceName: `${options.owner}/${options.name}`
193
+ };
194
+ const actionable = getActionableError(apiError);
195
+ throw new Error(formatActionableError(actionable));
196
+ }
197
+ const data = await response.json();
198
+ return data.web_url;
58
199
  }
59
200
  /**
60
- * Check if organization (stub)
201
+ * Check if a namespace is a group (organization)
61
202
  */
62
203
  async isOrganization(account, token) {
63
- return false;
204
+ try {
205
+ const headers = {
206
+ 'Accept': 'application/json'
207
+ };
208
+ if (token) {
209
+ headers['PRIVATE-TOKEN'] = token;
210
+ }
211
+ const response = await fetch(this.getApiUrl(`/groups/${encodeURIComponent(account)}`), { headers });
212
+ return response.ok;
213
+ }
214
+ catch {
215
+ // Assume user if we can't determine
216
+ return false;
217
+ }
64
218
  }
65
219
  /**
66
220
  * Get token creation URL
@@ -1 +1 @@
1
- {"version":3,"file":"gitlab-provider.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/gitlab-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAsG,MAAM,oBAAoB,CAAC;AAEzJ;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY;YAClC,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,2BAA2B;YAC7D,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;YACvC,YAAY,EAAE,MAAM,EAAE,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,IAAY,EACZ,KAAc;QAEd,MAAM,IAAI,KAAK,CAAC;;;;;;;;;;;;;;;KAef,CAAC,IAAI,EAAE,CAAC,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,KAAc;QAEd,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAA0B,EAC1B,KAAa;QAEb,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,KAAc;QAClD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,mCAAmC,CAAC;QACpG,CAAC;QACD,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,cAAwB;QACxC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,KAAa;QACpC,OAAO;YACL,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACnE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"gitlab-provider.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/gitlab-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,eAAe,EAAsG,MAAM,oBAAoB,CAAC;AACzJ,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAoB,MAAM,yBAAyB,CAAC;AAEtG;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,eAAe;IACjD,YAAY,MAAgC;QAC1C,KAAK,CAAC;YACJ,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,YAAY;YAClC,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,2BAA2B;YAC7D,UAAU,EAAE,MAAM,EAAE,UAAU,IAAI,KAAK;YACvC,YAAY,EAAE,MAAM,EAAE,YAAY;SACnC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,KAAa,EACb,IAAY,EACZ,KAAc;QAEd,IAAI,CAAC;YACH,MAAM,OAAO,GAA2B;gBACtC,QAAQ,EAAE,kBAAkB;aAC7B,CAAC;YAEF,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;YAED,uDAAuD;YACvD,MAAM,WAAW,GAAG,kBAAkB,CAAC,GAAG,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;YAE3D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,IAAI,CAAC,SAAS,CAAC,aAAa,WAAW,EAAE,CAAC,EAC1C,EAAE,OAAO,EAAE,CACZ,CAAC;YAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,6CAA6C;gBAC7C,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACxC,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,yBAAyB;gBACzB,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO;oBACL,MAAM,EAAE,IAAI;oBACZ,KAAK,EAAE,IAAI;oBACX,GAAG,EAAE,IAAI,CAAC,OAAO;iBAClB,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACvD,qCAAqC;gBACrC,MAAM,QAAQ,GAAgB;oBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,QAAQ,CAAC,UAAU;oBAC5B,QAAQ,EAAE,QAAQ;oBAClB,SAAS,EAAE,eAAe;oBAC1B,YAAY,EAAE,SAAS;oBACvB,YAAY,EAAE,GAAG,KAAK,IAAI,IAAI,EAAE;iBACjC,CAAC;gBAEF,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;gBAChD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACnF,CAAC;YAED,cAAc;YACd,MAAM,QAAQ,GAAgB;gBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,QAAQ,CAAC,UAAU;gBAC5B,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,eAAe;gBAC1B,YAAY,EAAE,SAAS;gBACvB,YAAY,EAAE,GAAG,KAAK,IAAI,IAAI,EAAE;aACjC,CAAC;YAEF,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,qBAAqB,CAAC,UAAU,CAAC;aACzC,CAAC;QAEJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CACjB,KAAa,EACb,KAAc;QAEd,MAAM,OAAO,GAA2B;YACtC,QAAQ,EAAE,kBAAkB;SAC7B,CAAC;QAEF,IAAI,KAAK,EAAE,CAAC;YACV,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;QACnC,CAAC;QAED,IAAI,CAAC;YACH,oBAAoB;YACpB,MAAM,YAAY,GAAG,MAAM,KAAK,CAC9B,IAAI,CAAC,SAAS,CAAC,mBAAmB,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EAC9D,EAAE,OAAO,EAAE,CACZ,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAChC,MAAM,KAAK,GAAU,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACrB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;gBACvC,CAAC;YACH,CAAC;YAED,eAAe;YACf,MAAM,aAAa,GAAG,MAAM,KAAK,CAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,EACtD,EAAE,OAAO,EAAE,CACZ,CAAC;YAEF,IAAI,aAAa,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBACjC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;YAC/C,CAAC;YAED,YAAY;YACZ,MAAM,QAAQ,GAAgB;gBAC5B,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,WAAW;gBACpB,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,gBAAgB;gBAC3B,YAAY,EAAE,WAAW;gBACzB,YAAY,EAAE,KAAK;aACpB,CAAC;YAEF,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAChD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;QAEpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,KAAK,EAAE,kBAAkB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAClF,CAAC;QACJ,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CACpB,OAA0B,EAC1B,KAAa;QAEb,0CAA0C;QAC1C,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAEhE,MAAM,OAAO,GAAQ;YACnB,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;gBAC9C,OAAO,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;YACrE,sBAAsB,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;YACjD,cAAc,EAAE,OAAO,CAAC,SAAS,KAAK,KAAK;YAC3C,YAAY,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK;SACvC,CAAC;QAEF,+CAA+C;QAC/C,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC;gBACH,MAAM,aAAa,GAAG,MAAM,KAAK,CAC/B,IAAI,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,EAC9D;oBACE,OAAO,EAAE;wBACP,eAAe,EAAE,KAAK;wBACtB,QAAQ,EAAE,kBAAkB;qBAC7B;iBACF,CACF,CAAC;gBAEF,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC;oBACrB,MAAM,KAAK,GAAQ,MAAM,aAAa,CAAC,IAAI,EAAE,CAAC;oBAC9C,OAAO,CAAC,YAAY,GAAG,KAAK,CAAC,EAAE,CAAC;gBAClC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,2DAA2D;YAC7D,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAC3B;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,eAAe,EAAE,KAAK;gBACtB,QAAQ,EAAE,kBAAkB;gBAC5B,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;SAC9B,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAS,CAAC;YAE3C,gCAAgC;YAChC,IAAI,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACjE,qCAAqC;gBACrC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBAC1D,OAAO,WAAW,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YAC5D,CAAC;YAED,+CAA+C;YAC/C,MAAM,QAAQ,GAAgB;gBAC5B,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,UAAU;gBAC7C,QAAQ,EAAE,QAAQ;gBAClB,SAAS,EAAE,aAAa;gBACxB,YAAY,EAAE,SAAS;gBACvB,YAAY,EAAE,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,EAAE;aACjD,CAAC;YAEF,MAAM,UAAU,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe,EAAE,KAAc;QAClD,IAAI,CAAC;YACH,MAAM,OAAO,GAA2B;gBACtC,QAAQ,EAAE,kBAAkB;aAC7B,CAAC;YAEF,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,CAAC,eAAe,CAAC,GAAG,KAAK,CAAC;YACnC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,IAAI,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,EACxD,EAAE,OAAO,EAAE,CACZ,CAAC;YAEF,OAAO,QAAQ,CAAC,EAAE,CAAC;QACrB,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,OAAO,WAAW,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,mCAAmC,CAAC;QACpG,CAAC;QACD,OAAO,qDAAqD,CAAC;IAC/D,CAAC;IAED;;OAEG;IACH,iBAAiB,CAAC,cAAwB;QACxC,OAAO,CAAC,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;IACxD,CAAC;IAED;;OAEG;IACO,cAAc,CAAC,KAAa;QACpC,OAAO;YACL,eAAe,EAAE,KAAK;YACtB,QAAQ,EAAE,kBAAkB;YAC5B,cAAc,EAAE,kBAAkB;SACnC,CAAC;IACJ,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAgC;IACnE,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC"}
@@ -9,6 +9,8 @@
9
9
  export { GitHubProvider, createGitHubProvider } from './github-provider.js';
10
10
  export { GitLabProvider, createGitLabProvider } from './gitlab-provider.js';
11
11
  export { BitbucketProvider, createBitbucketProvider } from './bitbucket-provider.js';
12
+ export { AzureDevOpsProvider, createAzureDevOpsProvider } from './azure-devops-provider.js';
13
+ export { LocalGitProvider, createLocalGitProvider } from './local-provider.js';
12
14
  /**
13
15
  * Initialize and register all Git providers
14
16
  *
@@ -29,5 +31,5 @@ export declare function resetProviders(): void;
29
31
  * @param platform - Platform type
30
32
  * @returns Provider instance or undefined
31
33
  */
32
- export declare function getProvider(platform: 'github' | 'gitlab' | 'bitbucket'): import("../git-provider.js").GitProvider;
34
+ export declare function getProvider(platform: 'github' | 'gitlab' | 'bitbucket' | 'azure-devops' | 'local'): import("../git-provider.js").GitProvider;
33
35
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAarF;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAkB1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,4CAGtE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAe/E;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAwB1C;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,cAAc,GAAG,OAAO,4CAGjG"}
@@ -9,10 +9,14 @@
9
9
  export { GitHubProvider, createGitHubProvider } from './github-provider.js';
10
10
  export { GitLabProvider, createGitLabProvider } from './gitlab-provider.js';
11
11
  export { BitbucketProvider, createBitbucketProvider } from './bitbucket-provider.js';
12
+ export { AzureDevOpsProvider, createAzureDevOpsProvider } from './azure-devops-provider.js';
13
+ export { LocalGitProvider, createLocalGitProvider } from './local-provider.js';
12
14
  import { getPlatformRegistry } from '../platform-registry.js';
13
15
  import { createGitHubProvider } from './github-provider.js';
14
16
  import { createGitLabProvider } from './gitlab-provider.js';
15
17
  import { createBitbucketProvider } from './bitbucket-provider.js';
18
+ import { createAzureDevOpsProvider } from './azure-devops-provider.js';
19
+ import { createLocalGitProvider } from './local-provider.js';
16
20
  /**
17
21
  * Track whether providers have been initialized
18
22
  * Prevents re-initialization in long-running sessions (Issue #2 fix)
@@ -34,10 +38,14 @@ export function initializeProviders() {
34
38
  const registry = getPlatformRegistry();
35
39
  // Register GitHub provider (fully supported)
36
40
  registry.registerProvider('github', createGitHubProvider());
37
- // Register GitLab provider (stub - coming soon)
41
+ // Register GitLab provider (fully supported)
38
42
  registry.registerProvider('gitlab', createGitLabProvider());
39
- // Register Bitbucket provider (stub - coming soon)
43
+ // Register Bitbucket provider (fully supported)
40
44
  registry.registerProvider('bitbucket', createBitbucketProvider());
45
+ // Register Azure DevOps provider (fully supported)
46
+ registry.registerProvider('azure-devops', createAzureDevOpsProvider());
47
+ // Register Local Git provider (fully supported)
48
+ registry.registerProvider('local', createLocalGitProvider());
41
49
  providersInitialized = true;
42
50
  }
43
51
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAErF,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE;;;GAGG;AACH,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,8DAA8D;IAC9D,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE5D,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE5D,mDAAmD;IACnD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAElE,oBAAoB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,oBAAoB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,QAA2C;IACrE,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5E,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,mBAAmB,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAE7D;;;GAGG;AACH,IAAI,oBAAoB,GAAG,KAAK,CAAC;AAEjC;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB;IACjC,8DAA8D;IAC9D,IAAI,oBAAoB,EAAE,CAAC;QACzB,OAAO;IACT,CAAC;IAED,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IAEvC,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE5D,6CAA6C;IAC7C,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAE5D,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,CAAC,WAAW,EAAE,uBAAuB,EAAE,CAAC,CAAC;IAElE,mDAAmD;IACnD,QAAQ,CAAC,gBAAgB,CAAC,cAAc,EAAE,yBAAyB,EAAE,CAAC,CAAC;IAEvE,gDAAgD;IAChD,QAAQ,CAAC,gBAAgB,CAAC,OAAO,EAAE,sBAAsB,EAAE,CAAC,CAAC;IAE7D,oBAAoB,GAAG,IAAI,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,oBAAoB,GAAG,KAAK,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,QAAsE;IAChG,MAAM,QAAQ,GAAG,mBAAmB,EAAE,CAAC;IACvC,OAAO,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACxC,CAAC"}