specweave 0.24.6 → 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.
- package/CLAUDE.md +64 -0
- package/README.md +34 -0
- package/dist/src/cli/commands/init.d.ts.map +1 -1
- package/dist/src/cli/commands/init.js +3 -1
- package/dist/src/cli/commands/init.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts +5 -2
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js +90 -8
- package/dist/src/cli/helpers/issue-tracker/github-multi-repo.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts +2 -1
- package/dist/src/cli/helpers/issue-tracker/github.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/github.js +4 -3
- package/dist/src/cli/helpers/issue-tracker/github.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +26 -9
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts +1 -0
- package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
- package/dist/src/core/repo-structure/git-error-handler.d.ts +37 -0
- package/dist/src/core/repo-structure/git-error-handler.d.ts.map +1 -0
- package/dist/src/core/repo-structure/git-error-handler.js +214 -0
- package/dist/src/core/repo-structure/git-error-handler.js.map +1 -0
- package/dist/src/core/repo-structure/git-provider.d.ts +183 -0
- package/dist/src/core/repo-structure/git-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/git-provider.js +57 -0
- package/dist/src/core/repo-structure/git-provider.js.map +1 -0
- package/dist/src/core/repo-structure/github-validator.d.ts +1 -0
- package/dist/src/core/repo-structure/github-validator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/github-validator.js +35 -9
- package/dist/src/core/repo-structure/github-validator.js.map +1 -1
- package/dist/src/core/repo-structure/platform-registry.d.ts +114 -0
- package/dist/src/core/repo-structure/platform-registry.d.ts.map +1 -0
- package/dist/src/core/repo-structure/platform-registry.js +206 -0
- package/dist/src/core/repo-structure/platform-registry.js.map +1 -0
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts +42 -0
- package/dist/src/core/repo-structure/prompt-consolidator.d.ts.map +1 -1
- package/dist/src/core/repo-structure/prompt-consolidator.js +102 -0
- package/dist/src/core/repo-structure/prompt-consolidator.js.map +1 -1
- package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts +64 -0
- package/dist/src/core/repo-structure/providers/azure-devops-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/azure-devops-provider.js +263 -0
- package/dist/src/core/repo-structure/providers/azure-devops-provider.js.map +1 -0
- package/dist/src/core/repo-structure/providers/bitbucket-provider.d.ts +55 -0
- package/dist/src/core/repo-structure/providers/bitbucket-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/bitbucket-provider.js +238 -0
- package/dist/src/core/repo-structure/providers/bitbucket-provider.js.map +1 -0
- package/dist/src/core/repo-structure/providers/github-provider.d.ts +53 -0
- package/dist/src/core/repo-structure/providers/github-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/github-provider.js +239 -0
- package/dist/src/core/repo-structure/providers/github-provider.js.map +1 -0
- package/dist/src/core/repo-structure/providers/gitlab-provider.d.ts +51 -0
- package/dist/src/core/repo-structure/providers/gitlab-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/gitlab-provider.js +251 -0
- package/dist/src/core/repo-structure/providers/gitlab-provider.js.map +1 -0
- package/dist/src/core/repo-structure/providers/index.d.ts +35 -0
- package/dist/src/core/repo-structure/providers/index.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/index.js +68 -0
- package/dist/src/core/repo-structure/providers/index.js.map +1 -0
- package/dist/src/core/repo-structure/providers/local-provider.d.ts +61 -0
- package/dist/src/core/repo-structure/providers/local-provider.d.ts.map +1 -0
- package/dist/src/core/repo-structure/providers/local-provider.js +148 -0
- package/dist/src/core/repo-structure/providers/local-provider.js.map +1 -0
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts +21 -4
- package/dist/src/core/repo-structure/repo-structure-manager.d.ts.map +1 -1
- package/dist/src/core/repo-structure/repo-structure-manager.js +380 -113
- package/dist/src/core/repo-structure/repo-structure-manager.js.map +1 -1
- package/dist/src/core/repo-structure/url-generator.d.ts +80 -0
- package/dist/src/core/repo-structure/url-generator.d.ts.map +1 -0
- package/dist/src/core/repo-structure/url-generator.js +110 -0
- package/dist/src/core/repo-structure/url-generator.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/hooks/post-task-completion.sh +69 -175
- package/plugins/specweave/lib/hooks/consolidated-sync.js +183 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +64 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +96 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Git Providers Index
|
|
3
|
+
*
|
|
4
|
+
* Exports all Git provider implementations and provides
|
|
5
|
+
* initialization functions.
|
|
6
|
+
*
|
|
7
|
+
* @module providers
|
|
8
|
+
*/
|
|
9
|
+
export { GitHubProvider, createGitHubProvider } from './github-provider.js';
|
|
10
|
+
export { GitLabProvider, createGitLabProvider } from './gitlab-provider.js';
|
|
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';
|
|
14
|
+
import { getPlatformRegistry } from '../platform-registry.js';
|
|
15
|
+
import { createGitHubProvider } from './github-provider.js';
|
|
16
|
+
import { createGitLabProvider } from './gitlab-provider.js';
|
|
17
|
+
import { createBitbucketProvider } from './bitbucket-provider.js';
|
|
18
|
+
import { createAzureDevOpsProvider } from './azure-devops-provider.js';
|
|
19
|
+
import { createLocalGitProvider } from './local-provider.js';
|
|
20
|
+
/**
|
|
21
|
+
* Track whether providers have been initialized
|
|
22
|
+
* Prevents re-initialization in long-running sessions (Issue #2 fix)
|
|
23
|
+
*/
|
|
24
|
+
let providersInitialized = false;
|
|
25
|
+
/**
|
|
26
|
+
* Initialize and register all Git providers
|
|
27
|
+
*
|
|
28
|
+
* Call this once during application initialization to make
|
|
29
|
+
* all providers available through the platform registry.
|
|
30
|
+
*
|
|
31
|
+
* Idempotent: Safe to call multiple times - only initializes once.
|
|
32
|
+
*/
|
|
33
|
+
export function initializeProviders() {
|
|
34
|
+
// Idempotency guard: prevent re-initialization (Issue #2 fix)
|
|
35
|
+
if (providersInitialized) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const registry = getPlatformRegistry();
|
|
39
|
+
// Register GitHub provider (fully supported)
|
|
40
|
+
registry.registerProvider('github', createGitHubProvider());
|
|
41
|
+
// Register GitLab provider (fully supported)
|
|
42
|
+
registry.registerProvider('gitlab', createGitLabProvider());
|
|
43
|
+
// Register Bitbucket provider (fully supported)
|
|
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());
|
|
49
|
+
providersInitialized = true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Reset provider initialization state (for testing only)
|
|
53
|
+
* @internal
|
|
54
|
+
*/
|
|
55
|
+
export function resetProviders() {
|
|
56
|
+
providersInitialized = false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get provider by platform type (convenience function)
|
|
60
|
+
*
|
|
61
|
+
* @param platform - Platform type
|
|
62
|
+
* @returns Provider instance or undefined
|
|
63
|
+
*/
|
|
64
|
+
export function getProvider(platform) {
|
|
65
|
+
const registry = getPlatformRegistry();
|
|
66
|
+
return registry.getProvider(platform);
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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;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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Git Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements GitProvider interface for local-only Git repositories.
|
|
5
|
+
* Suitable for repositories without remote hosting (GitHub, GitLab, etc.).
|
|
6
|
+
*
|
|
7
|
+
* @module providers/local-provider
|
|
8
|
+
*/
|
|
9
|
+
import { BaseGitProvider, type PlatformConfig, type RepoValidationResult, type OwnerValidationResult, type CreateRepoOptions } from '../git-provider.js';
|
|
10
|
+
import type { UrlType } from '../url-generator.js';
|
|
11
|
+
/**
|
|
12
|
+
* Local Git Provider
|
|
13
|
+
*
|
|
14
|
+
* Implements Git operations for local-only repositories.
|
|
15
|
+
* Does not require API tokens or remote hosting.
|
|
16
|
+
*/
|
|
17
|
+
export declare class LocalGitProvider extends BaseGitProvider {
|
|
18
|
+
constructor(config?: Partial<PlatformConfig>);
|
|
19
|
+
/**
|
|
20
|
+
* Validate if a local repository exists
|
|
21
|
+
* owner represents the parent directory path
|
|
22
|
+
* repo represents the repository directory name
|
|
23
|
+
*/
|
|
24
|
+
validateRepository(owner: string, repo: string, token?: string): Promise<RepoValidationResult>;
|
|
25
|
+
/**
|
|
26
|
+
* Validate if a local directory (owner) exists
|
|
27
|
+
*/
|
|
28
|
+
validateOwner(owner: string, token?: string): Promise<OwnerValidationResult>;
|
|
29
|
+
/**
|
|
30
|
+
* Create a new local repository
|
|
31
|
+
* Note: This creates a bare directory, not a Git repository.
|
|
32
|
+
* Users should run `git init` separately.
|
|
33
|
+
*/
|
|
34
|
+
createRepository(options: CreateRepoOptions, token: string): Promise<string>;
|
|
35
|
+
/**
|
|
36
|
+
* Local directories are never organizations
|
|
37
|
+
*/
|
|
38
|
+
isOrganization(account: string, token?: string): Promise<boolean>;
|
|
39
|
+
/**
|
|
40
|
+
* Get token creation URL (not applicable for local Git)
|
|
41
|
+
*/
|
|
42
|
+
getTokenUrl(): string;
|
|
43
|
+
/**
|
|
44
|
+
* Get required token scopes (none for local Git)
|
|
45
|
+
*/
|
|
46
|
+
getRequiredScopes(isOrganization?: boolean): string[];
|
|
47
|
+
/**
|
|
48
|
+
* Generate Git remote URL for local repositories
|
|
49
|
+
* Local repos use file:// protocol
|
|
50
|
+
*/
|
|
51
|
+
getRemoteUrl(owner: string, repo: string, urlType: UrlType): string;
|
|
52
|
+
/**
|
|
53
|
+
* Override getAuthHeaders (not needed for local Git)
|
|
54
|
+
*/
|
|
55
|
+
protected getAuthHeaders(token: string): Record<string, string>;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Create a Local Git provider instance
|
|
59
|
+
*/
|
|
60
|
+
export declare function createLocalGitProvider(config?: Partial<PlatformConfig>): LocalGitProvider;
|
|
61
|
+
//# sourceMappingURL=local-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-provider.d.ts","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/local-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;AACzJ,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAInD;;;;;GAKG;AACH,qBAAa,gBAAiB,SAAQ,eAAe;gBACvC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC;IAW5C;;;;OAIG;IACG,kBAAkB,CACtB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC;IAqChC;;OAEG;IACG,aAAa,CACjB,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,qBAAqB,CAAC;IAsBjC;;;;OAIG;IACG,gBAAgB,CACpB,OAAO,EAAE,iBAAiB,EAC1B,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,CAAC;IAmBlB;;OAEG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIvE;;OAEG;IACH,WAAW,IAAI,MAAM;IAIrB;;OAEG;IACH,iBAAiB,CAAC,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE;IAIrD;;;OAGG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM;IAKnE;;OAEG;IACH,SAAS,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGhE;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,gBAAgB,CAEzF"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Local Git Provider Implementation
|
|
3
|
+
*
|
|
4
|
+
* Implements GitProvider interface for local-only Git repositories.
|
|
5
|
+
* Suitable for repositories without remote hosting (GitHub, GitLab, etc.).
|
|
6
|
+
*
|
|
7
|
+
* @module providers/local-provider
|
|
8
|
+
*/
|
|
9
|
+
import { BaseGitProvider } from '../git-provider.js';
|
|
10
|
+
import { existsSync } from 'fs';
|
|
11
|
+
import { resolve, join } from 'path';
|
|
12
|
+
/**
|
|
13
|
+
* Local Git Provider
|
|
14
|
+
*
|
|
15
|
+
* Implements Git operations for local-only repositories.
|
|
16
|
+
* Does not require API tokens or remote hosting.
|
|
17
|
+
*/
|
|
18
|
+
export class LocalGitProvider extends BaseGitProvider {
|
|
19
|
+
constructor(config) {
|
|
20
|
+
super({
|
|
21
|
+
type: 'custom',
|
|
22
|
+
name: 'Local Git',
|
|
23
|
+
host: 'localhost',
|
|
24
|
+
apiBaseUrl: '',
|
|
25
|
+
selfHosted: true,
|
|
26
|
+
customDomain: config?.customDomain
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate if a local repository exists
|
|
31
|
+
* owner represents the parent directory path
|
|
32
|
+
* repo represents the repository directory name
|
|
33
|
+
*/
|
|
34
|
+
async validateRepository(owner, repo, token) {
|
|
35
|
+
try {
|
|
36
|
+
// Resolve the full path
|
|
37
|
+
const repoPath = resolve(owner, repo);
|
|
38
|
+
const gitPath = join(repoPath, '.git');
|
|
39
|
+
// Check if directory exists
|
|
40
|
+
if (!existsSync(repoPath)) {
|
|
41
|
+
return { exists: false, valid: true };
|
|
42
|
+
}
|
|
43
|
+
// Check if it's a Git repository
|
|
44
|
+
const isGitRepo = existsSync(gitPath);
|
|
45
|
+
if (isGitRepo) {
|
|
46
|
+
return {
|
|
47
|
+
exists: true,
|
|
48
|
+
valid: true,
|
|
49
|
+
url: `file://${repoPath}`
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
// Directory exists but is not a Git repository
|
|
54
|
+
return {
|
|
55
|
+
exists: false,
|
|
56
|
+
valid: true
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
return {
|
|
62
|
+
exists: false,
|
|
63
|
+
valid: false,
|
|
64
|
+
error: `File system error: ${error instanceof Error ? error.message : String(error)}`
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Validate if a local directory (owner) exists
|
|
70
|
+
*/
|
|
71
|
+
async validateOwner(owner, token) {
|
|
72
|
+
try {
|
|
73
|
+
const ownerPath = resolve(owner);
|
|
74
|
+
if (!existsSync(ownerPath)) {
|
|
75
|
+
return {
|
|
76
|
+
valid: false,
|
|
77
|
+
error: `Directory does not exist: ${ownerPath}`
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// Local directories are always treated as "user" type
|
|
81
|
+
return { valid: true, type: 'user' };
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return {
|
|
85
|
+
valid: false,
|
|
86
|
+
error: `File system error: ${error instanceof Error ? error.message : String(error)}`
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Create a new local repository
|
|
92
|
+
* Note: This creates a bare directory, not a Git repository.
|
|
93
|
+
* Users should run `git init` separately.
|
|
94
|
+
*/
|
|
95
|
+
async createRepository(options, token) {
|
|
96
|
+
const repoPath = resolve(options.owner, options.name);
|
|
97
|
+
// Check if directory already exists
|
|
98
|
+
if (existsSync(repoPath)) {
|
|
99
|
+
return `file://${repoPath}`;
|
|
100
|
+
}
|
|
101
|
+
// Note: We don't actually create the directory here
|
|
102
|
+
// The repository initialization should be done separately with git init
|
|
103
|
+
throw new Error(`Local repository creation requires manual setup:\n` +
|
|
104
|
+
` mkdir -p "${repoPath}"\n` +
|
|
105
|
+
` cd "${repoPath}"\n` +
|
|
106
|
+
` git init\n\n` +
|
|
107
|
+
`SpecWeave does not automatically create local Git repositories.`);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Local directories are never organizations
|
|
111
|
+
*/
|
|
112
|
+
async isOrganization(account, token) {
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Get token creation URL (not applicable for local Git)
|
|
117
|
+
*/
|
|
118
|
+
getTokenUrl() {
|
|
119
|
+
return '';
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Get required token scopes (none for local Git)
|
|
123
|
+
*/
|
|
124
|
+
getRequiredScopes(isOrganization) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Generate Git remote URL for local repositories
|
|
129
|
+
* Local repos use file:// protocol
|
|
130
|
+
*/
|
|
131
|
+
getRemoteUrl(owner, repo, urlType) {
|
|
132
|
+
const repoPath = resolve(owner, repo);
|
|
133
|
+
return `file://${repoPath}`;
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Override getAuthHeaders (not needed for local Git)
|
|
137
|
+
*/
|
|
138
|
+
getAuthHeaders(token) {
|
|
139
|
+
return {};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Create a Local Git provider instance
|
|
144
|
+
*/
|
|
145
|
+
export function createLocalGitProvider(config) {
|
|
146
|
+
return new LocalGitProvider(config);
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=local-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-provider.js","sourceRoot":"","sources":["../../../../../src/core/repo-structure/providers/local-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,9 +14,14 @@
|
|
|
14
14
|
* - Organize specs per project/team
|
|
15
15
|
* - Split tasks between repositories
|
|
16
16
|
*/
|
|
17
|
+
import { type ArchitectureChoice } from './prompt-consolidator.js';
|
|
18
|
+
import type { GitProvider, GitPlatformType } from './git-provider.js';
|
|
17
19
|
export type RepoArchitecture = 'single' | 'multi-repo' | 'monorepo' | 'parent';
|
|
18
20
|
export interface RepoStructureConfig {
|
|
19
21
|
architecture: RepoArchitecture;
|
|
22
|
+
urlType: 'ssh' | 'https';
|
|
23
|
+
platform: GitPlatformType;
|
|
24
|
+
provider: GitProvider;
|
|
20
25
|
parentRepo?: {
|
|
21
26
|
name: string;
|
|
22
27
|
owner: string;
|
|
@@ -43,12 +48,21 @@ export declare class RepoStructureManager {
|
|
|
43
48
|
constructor(projectPath: string, githubToken?: string);
|
|
44
49
|
/**
|
|
45
50
|
* Prompt user for repository structure decisions
|
|
51
|
+
*
|
|
52
|
+
* @param preSelectedArchitecture - Optional pre-selected architecture to skip duplicate prompts
|
|
46
53
|
*/
|
|
47
|
-
promptStructure(): Promise<RepoStructureConfig>;
|
|
54
|
+
promptStructure(preSelectedArchitecture?: ArchitectureChoice): Promise<RepoStructureConfig>;
|
|
48
55
|
/**
|
|
49
56
|
* Map ArchitectureChoice to internal RepoArchitecture (2 options)
|
|
50
57
|
*/
|
|
51
58
|
private mapArchitectureChoice;
|
|
59
|
+
/**
|
|
60
|
+
* Format architecture choice for display
|
|
61
|
+
*
|
|
62
|
+
* @param choice - Architecture choice
|
|
63
|
+
* @returns Human-readable format
|
|
64
|
+
*/
|
|
65
|
+
private formatArchitectureForDisplay;
|
|
52
66
|
/**
|
|
53
67
|
* Resume setup from saved state
|
|
54
68
|
*/
|
|
@@ -61,6 +75,9 @@ export declare class RepoStructureManager {
|
|
|
61
75
|
* Configure multi-repository architecture
|
|
62
76
|
* @param useParent - Whether to use parent repository/folder
|
|
63
77
|
* @param isLocalParent - If true, parent folder is local only (NOT pushed to GitHub)
|
|
78
|
+
* @param urlType - Git remote URL format (ssh or https)
|
|
79
|
+
* @param platform - Git hosting platform type
|
|
80
|
+
* @param provider - Git provider instance for API operations
|
|
64
81
|
*
|
|
65
82
|
* NOTE: This is primarily user-facing output (console.log/console.error).
|
|
66
83
|
* All console.* calls in this method are legitimate user-facing exceptions
|
|
@@ -76,9 +93,9 @@ export declare class RepoStructureManager {
|
|
|
76
93
|
*/
|
|
77
94
|
private configureMonorepo;
|
|
78
95
|
/**
|
|
79
|
-
* Create repositories on
|
|
96
|
+
* Create repositories on Git hosting platform via API
|
|
80
97
|
*/
|
|
81
|
-
|
|
98
|
+
createRepositories(config: RepoStructureConfig): Promise<void>;
|
|
82
99
|
/**
|
|
83
100
|
* Generate .env file with GitHub configuration
|
|
84
101
|
*/
|
|
@@ -101,7 +118,7 @@ export declare class RepoStructureManager {
|
|
|
101
118
|
private repositoryExistsOnGitHub;
|
|
102
119
|
/**
|
|
103
120
|
* Clone or initialize a repository
|
|
104
|
-
* If the repo exists on
|
|
121
|
+
* If the repo exists on the platform, clone it; otherwise, init + add remote
|
|
105
122
|
*/
|
|
106
123
|
private cloneOrInitRepository;
|
|
107
124
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-structure-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/repo-structure/repo-structure-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;
|
|
1
|
+
{"version":3,"file":"repo-structure-manager.d.ts","sourceRoot":"","sources":["../../../../src/core/repo-structure/repo-structure-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAcH,OAAO,EAML,KAAK,kBAAkB,EACxB,MAAM,0BAA0B,CAAC;AAOlC,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGtE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE/E,MAAM,WAAW,mBAAmB;IAClC,YAAY,EAAE,gBAAgB,CAAC;IAC/B,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC;IACzB,QAAQ,EAAE,eAAe,CAAC;IAC1B,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;QACjC,cAAc,EAAE,OAAO,CAAC;KACzB,CAAC;IACF,YAAY,EAAE,KAAK,CAAC;QAClB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;QACjC,cAAc,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,YAAY,CAAoB;gBAE5B,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM;IASrD;;;;OAIG;IACG,eAAe,CAAC,uBAAuB,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IA8GjG;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAWpC;;OAEG;YACW,WAAW;IAgCzB;;OAEG;YACW,mBAAmB;IA8IjC;;;;;;;;;;;OAWG;YACW,kBAAkB;IA+tBhC;;OAEG;YACW,cAAc;IAQ5B;;OAEG;YACW,iBAAiB;IAuF/B;;OAEG;IACG,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAiFpE;;OAEG;YACW,eAAe;IA8C7B;;OAEG;YACW,gBAAgB;IAgC9B;;OAEG;YACW,gBAAgB;IAmC9B;;OAEG;YACW,oBAAoB;IAmBlC;;OAEG;YACW,wBAAwB;IAmBtC;;;OAGG;YACW,qBAAqB;IAmEnC;;OAEG;IACG,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoEtE;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAyBhC;;;;;OAKG;IACG,wBAAwB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;CAwC3E"}
|