specweave 1.0.447 → 1.0.450
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/bin/specweave.js +18 -0
- package/dist/plugins/specweave-ado/lib/ado-client.d.ts +6 -0
- package/dist/plugins/specweave-ado/lib/ado-client.d.ts.map +1 -1
- package/dist/plugins/specweave-ado/lib/ado-client.js +22 -0
- package/dist/plugins/specweave-ado/lib/ado-client.js.map +1 -1
- package/dist/src/adapters/adapter-base.d.ts +15 -0
- package/dist/src/adapters/adapter-base.d.ts.map +1 -1
- package/dist/src/adapters/adapter-base.js +56 -0
- package/dist/src/adapters/adapter-base.js.map +1 -1
- package/dist/src/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/src/adapters/adapter-loader.js +20 -2
- package/dist/src/adapters/adapter-loader.js.map +1 -1
- package/dist/src/adapters/aider/adapter.d.ts +21 -0
- package/dist/src/adapters/aider/adapter.d.ts.map +1 -0
- package/dist/src/adapters/aider/adapter.js +57 -0
- package/dist/src/adapters/aider/adapter.js.map +1 -0
- package/dist/src/adapters/amazonq/adapter.d.ts +21 -0
- package/dist/src/adapters/amazonq/adapter.d.ts.map +1 -0
- package/dist/src/adapters/amazonq/adapter.js +57 -0
- package/dist/src/adapters/amazonq/adapter.js.map +1 -0
- package/dist/src/adapters/cline/adapter.d.ts +21 -0
- package/dist/src/adapters/cline/adapter.d.ts.map +1 -0
- package/dist/src/adapters/cline/adapter.js +57 -0
- package/dist/src/adapters/cline/adapter.js.map +1 -0
- package/dist/src/adapters/codex/adapter.d.ts +18 -0
- package/dist/src/adapters/codex/adapter.d.ts.map +1 -1
- package/dist/src/adapters/codex/adapter.js +32 -0
- package/dist/src/adapters/codex/adapter.js.map +1 -1
- package/dist/src/adapters/continue/adapter.d.ts +63 -0
- package/dist/src/adapters/continue/adapter.d.ts.map +1 -0
- package/dist/src/adapters/continue/adapter.js +103 -0
- package/dist/src/adapters/continue/adapter.js.map +1 -0
- package/dist/src/adapters/copilot/adapter.d.ts +65 -0
- package/dist/src/adapters/copilot/adapter.d.ts.map +1 -0
- package/dist/src/adapters/copilot/adapter.js +106 -0
- package/dist/src/adapters/copilot/adapter.js.map +1 -0
- package/dist/src/adapters/cursor/adapter.d.ts +4 -20
- package/dist/src/adapters/cursor/adapter.d.ts.map +1 -1
- package/dist/src/adapters/cursor/adapter.js +12 -129
- package/dist/src/adapters/cursor/adapter.js.map +1 -1
- package/dist/src/adapters/gemini/adapter.d.ts +18 -0
- package/dist/src/adapters/gemini/adapter.d.ts.map +1 -1
- package/dist/src/adapters/gemini/adapter.js +32 -0
- package/dist/src/adapters/gemini/adapter.js.map +1 -1
- package/dist/src/adapters/jetbrains/adapter.d.ts +21 -0
- package/dist/src/adapters/jetbrains/adapter.d.ts.map +1 -0
- package/dist/src/adapters/jetbrains/adapter.js +57 -0
- package/dist/src/adapters/jetbrains/adapter.js.map +1 -0
- package/dist/src/adapters/registry.yaml +166 -20
- package/dist/src/adapters/tabnine/adapter.d.ts +21 -0
- package/dist/src/adapters/tabnine/adapter.d.ts.map +1 -0
- package/dist/src/adapters/tabnine/adapter.js +57 -0
- package/dist/src/adapters/tabnine/adapter.js.map +1 -0
- package/dist/src/adapters/windsurf/adapter.d.ts +64 -0
- package/dist/src/adapters/windsurf/adapter.d.ts.map +1 -0
- package/dist/src/adapters/windsurf/adapter.js +106 -0
- package/dist/src/adapters/windsurf/adapter.js.map +1 -0
- package/dist/src/adapters/zed/adapter.d.ts +21 -0
- package/dist/src/adapters/zed/adapter.d.ts.map +1 -0
- package/dist/src/adapters/zed/adapter.js +57 -0
- package/dist/src/adapters/zed/adapter.js.map +1 -0
- package/dist/src/cli/commands/get.d.ts +17 -1
- package/dist/src/cli/commands/get.d.ts.map +1 -1
- package/dist/src/cli/commands/get.js +51 -1
- package/dist/src/cli/commands/get.js.map +1 -1
- package/dist/src/cli/commands/link-pr.d.ts +17 -0
- package/dist/src/cli/commands/link-pr.d.ts.map +1 -0
- package/dist/src/cli/commands/link-pr.js +45 -0
- package/dist/src/cli/commands/link-pr.js.map +1 -0
- package/dist/src/cli/helpers/get/bulk-get.d.ts +41 -0
- package/dist/src/cli/helpers/get/bulk-get.d.ts.map +1 -0
- package/dist/src/cli/helpers/get/bulk-get.js +88 -0
- package/dist/src/cli/helpers/get/bulk-get.js.map +1 -0
- package/dist/src/cli/helpers/init/github-repo-cloning.d.ts +50 -0
- package/dist/src/cli/helpers/init/github-repo-cloning.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/github-repo-cloning.js +1 -1
- package/dist/src/cli/helpers/init/github-repo-cloning.js.map +1 -1
- package/dist/src/core/skills/skill-judge.d.ts.map +1 -1
- package/dist/src/core/skills/skill-judge.js +2 -1
- package/dist/src/core/skills/skill-judge.js.map +1 -1
- package/dist/src/integrations/jira/jira-client.d.ts +12 -0
- package/dist/src/integrations/jira/jira-client.d.ts.map +1 -1
- package/dist/src/integrations/jira/jira-client.js +37 -0
- package/dist/src/integrations/jira/jira-client.js.map +1 -1
- package/dist/src/metrics/dora-calculator.d.ts.map +1 -1
- package/dist/src/metrics/dora-calculator.js +3 -2
- package/dist/src/metrics/dora-calculator.js.map +1 -1
- package/dist/src/sync/format-preservation-sync.d.ts +3 -0
- package/dist/src/sync/format-preservation-sync.d.ts.map +1 -1
- package/dist/src/sync/format-preservation-sync.js +9 -0
- package/dist/src/sync/format-preservation-sync.js.map +1 -1
- package/dist/src/sync/integration-health-check.d.ts +45 -0
- package/dist/src/sync/integration-health-check.d.ts.map +1 -0
- package/dist/src/sync/integration-health-check.js +186 -0
- package/dist/src/sync/integration-health-check.js.map +1 -0
- package/dist/src/sync/pr-linker.d.ts +38 -0
- package/dist/src/sync/pr-linker.d.ts.map +1 -0
- package/dist/src/sync/pr-linker.js +157 -0
- package/dist/src/sync/pr-linker.js.map +1 -0
- package/package.json +1 -1
- package/plugins/specweave/commands/sync-setup.md +24 -1
- package/plugins/specweave/skills/get/SKILL.md +38 -6
- package/plugins/specweave/skills/pr/SKILL.md +39 -2
- package/plugins/specweave-ado/lib/ado-client.js +22 -0
- package/plugins/specweave-ado/lib/ado-client.ts +25 -0
- package/src/templates/AGENTS.md.template +19 -5
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Windsurf Adapter
|
|
3
|
+
*
|
|
4
|
+
* Semi-automation adapter for Windsurf (by Codeium).
|
|
5
|
+
* Uses rule files in .windsurf/rules/ for context-specific instructions.
|
|
6
|
+
*/
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as fs from '../../utils/fs-native.js';
|
|
9
|
+
import { AdapterBase } from '../adapter-base.js';
|
|
10
|
+
export class WindsurfAdapter extends AdapterBase {
|
|
11
|
+
constructor() {
|
|
12
|
+
super(...arguments);
|
|
13
|
+
this.name = 'windsurf';
|
|
14
|
+
this.description = 'Windsurf adapter - Semi-automation with rules in .windsurf/rules/';
|
|
15
|
+
this.automationLevel = 'semi';
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Detect if Windsurf is available
|
|
19
|
+
*
|
|
20
|
+
* Checks for:
|
|
21
|
+
* - windsurf command in PATH
|
|
22
|
+
* - .windsurf/ directory exists
|
|
23
|
+
*/
|
|
24
|
+
async detect() {
|
|
25
|
+
const hasCLI = await this.commandExists('windsurf');
|
|
26
|
+
const hasDir = await this.fileExists('.windsurf');
|
|
27
|
+
return hasCLI || hasDir;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get files to install for Windsurf adapter
|
|
31
|
+
*/
|
|
32
|
+
getFiles() {
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Install Windsurf adapter
|
|
37
|
+
*/
|
|
38
|
+
async install(options) {
|
|
39
|
+
console.log('\n📦 Installing Windsurf Adapter\n');
|
|
40
|
+
const rulesDir = path.join(options.projectPath, '.windsurf', 'rules');
|
|
41
|
+
await fs.ensureDir(rulesDir);
|
|
42
|
+
console.log('\n✨ Windsurf adapter installed!');
|
|
43
|
+
console.log(' Run `specweave refresh-plugins` to install skills.');
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if Windsurf adapter supports plugins
|
|
47
|
+
*/
|
|
48
|
+
supportsPlugins() {
|
|
49
|
+
return true;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Compile and install a plugin for Windsurf
|
|
53
|
+
*
|
|
54
|
+
* Writes skill SKILL.md files as <plugin>-<skill>.md
|
|
55
|
+
* into .windsurf/rules/ for auto-loading by Windsurf.
|
|
56
|
+
*
|
|
57
|
+
* @param plugin Plugin to install
|
|
58
|
+
*/
|
|
59
|
+
async compilePlugin(plugin) {
|
|
60
|
+
const rulesDir = '.windsurf/rules';
|
|
61
|
+
console.log(`\n📦 Installing plugin skills for Windsurf: ${plugin.manifest.name}`);
|
|
62
|
+
await this.writeSkillFiles(plugin, rulesDir, '.md');
|
|
63
|
+
console.log(` ✓ ${plugin.skills.length} skill(s) written to ${rulesDir}/`);
|
|
64
|
+
console.log(`\n✅ Plugin ${plugin.manifest.name} installed for Windsurf!`);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Unload a plugin from Windsurf
|
|
68
|
+
*
|
|
69
|
+
* Removes <pluginName>-*.md files from .windsurf/rules/
|
|
70
|
+
*
|
|
71
|
+
* @param pluginName Name of plugin to unload
|
|
72
|
+
*/
|
|
73
|
+
async unloadPlugin(pluginName) {
|
|
74
|
+
console.log(`\n🗑️ Unloading plugin from Windsurf: ${pluginName}`);
|
|
75
|
+
await this.removeSkillFiles(pluginName, '.windsurf/rules', '.md');
|
|
76
|
+
console.log(` ✓ Removed from .windsurf/rules/`);
|
|
77
|
+
console.log(`\n✅ Plugin ${pluginName} unloaded!`);
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Get list of installed plugins for Windsurf
|
|
81
|
+
*/
|
|
82
|
+
async getInstalledPlugins() {
|
|
83
|
+
return await this.listInstalledPluginsInDir('.windsurf/rules');
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Post-installation instructions
|
|
87
|
+
*/
|
|
88
|
+
async postInstall(options) {
|
|
89
|
+
console.log(this.getInstructions());
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get usage instructions for Windsurf adapter
|
|
93
|
+
*/
|
|
94
|
+
getInstructions() {
|
|
95
|
+
return `
|
|
96
|
+
Windsurf Adapter
|
|
97
|
+
|
|
98
|
+
Skills are installed in .windsurf/rules/ — Windsurf loads *.md rule files automatically.
|
|
99
|
+
|
|
100
|
+
Quick Start:
|
|
101
|
+
Run: specweave refresh-plugins
|
|
102
|
+
Then use Windsurf normally — skills are auto-loaded.
|
|
103
|
+
`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/windsurf/adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAAhD;;QACE,SAAI,GAAG,UAAU,CAAC;QAClB,gBAAW,GAAG,mEAAmE,CAAC;QAClF,oBAAe,GAAG,MAAe,CAAC;IAkGpC,CAAC;IAhGC;;;;;;OAMG;IACH,KAAK,CAAC,MAAM;QACV,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAClD,OAAO,MAAM,IAAI,MAAM,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QACtE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,QAAQ,GAAG,iBAAiB,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,+CAA+C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACnF,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,wBAAwB,QAAQ,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,0BAA0B,CAAC,CAAC;IAC5E,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,OAAO,CAAC,GAAG,CAAC,0CAA0C,UAAU,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,EAAE,KAAK,CAAC,CAAC;QAClE,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,YAAY,CAAC,CAAC;IACpD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,iBAAiB,CAAC,CAAC;IACjE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAuB;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,eAAe;QACb,OAAO;;;;;;;;KAQN,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zed Adapter
|
|
3
|
+
*/
|
|
4
|
+
import { AdapterBase } from '../adapter-base.js';
|
|
5
|
+
import { AdapterOptions, AdapterFile } from '../adapter-interface.js';
|
|
6
|
+
import type { Plugin } from '../../core/types/plugin.js';
|
|
7
|
+
export declare class ZedAdapter extends AdapterBase {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
automationLevel: "semi";
|
|
11
|
+
detect(): Promise<boolean>;
|
|
12
|
+
getFiles(): AdapterFile[];
|
|
13
|
+
install(options: AdapterOptions): Promise<void>;
|
|
14
|
+
supportsPlugins(): boolean;
|
|
15
|
+
compilePlugin(plugin: Plugin): Promise<void>;
|
|
16
|
+
unloadPlugin(pluginName: string): Promise<void>;
|
|
17
|
+
getInstalledPlugins(): Promise<string[]>;
|
|
18
|
+
postInstall(options: AdapterOptions): Promise<void>;
|
|
19
|
+
getInstructions(): string;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../src/adapters/zed/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AAEzD,qBAAa,UAAW,SAAQ,WAAW;IACzC,IAAI,SAAS;IACb,WAAW,SAA+C;IAC1D,eAAe,EAAG,MAAM,CAAU;IAE5B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC;IAIhC,QAAQ,IAAI,WAAW,EAAE;IAInB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrD,eAAe,IAAI,OAAO;IAIpB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ5C,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C,mBAAmB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAIxC,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzD,eAAe,IAAI,MAAM;CAQ1B"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zed Adapter
|
|
3
|
+
*/
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import * as fs from '../../utils/fs-native.js';
|
|
6
|
+
import { AdapterBase } from '../adapter-base.js';
|
|
7
|
+
export class ZedAdapter extends AdapterBase {
|
|
8
|
+
constructor() {
|
|
9
|
+
super(...arguments);
|
|
10
|
+
this.name = 'zed';
|
|
11
|
+
this.description = 'Zed adapter — skills installed in .rules/';
|
|
12
|
+
this.automationLevel = 'semi';
|
|
13
|
+
}
|
|
14
|
+
async detect() {
|
|
15
|
+
return await this.commandExists('zed') || await this.fileExists('.zed');
|
|
16
|
+
}
|
|
17
|
+
getFiles() {
|
|
18
|
+
return [];
|
|
19
|
+
}
|
|
20
|
+
async install(options) {
|
|
21
|
+
console.log('\n📦 Installing Zed Adapter\n');
|
|
22
|
+
await fs.ensureDir(path.join(options.projectPath, '.rules'));
|
|
23
|
+
console.log('\n✨ Zed adapter installed!');
|
|
24
|
+
console.log(' Run `specweave refresh-plugins` to install skills.');
|
|
25
|
+
}
|
|
26
|
+
supportsPlugins() {
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
async compilePlugin(plugin) {
|
|
30
|
+
const rulesDir = '.rules';
|
|
31
|
+
console.log(`\n📦 Installing plugin skills for Zed: ${plugin.manifest.name}`);
|
|
32
|
+
await this.writeSkillFiles(plugin, rulesDir);
|
|
33
|
+
console.log(` ✓ ${plugin.skills.length} skill(s) written to ${rulesDir}/`);
|
|
34
|
+
console.log(`\n✅ Plugin ${plugin.manifest.name} installed for Zed!`);
|
|
35
|
+
}
|
|
36
|
+
async unloadPlugin(pluginName) {
|
|
37
|
+
console.log(`\n🗑️ Unloading plugin from Zed: ${pluginName}`);
|
|
38
|
+
await this.removeSkillFiles(pluginName, '.rules');
|
|
39
|
+
console.log(` ✓ Removed from .rules/`);
|
|
40
|
+
console.log(`\n✅ Plugin ${pluginName} unloaded!`);
|
|
41
|
+
}
|
|
42
|
+
async getInstalledPlugins() {
|
|
43
|
+
return await this.listInstalledPluginsInDir('.rules');
|
|
44
|
+
}
|
|
45
|
+
async postInstall(options) {
|
|
46
|
+
console.log(this.getInstructions());
|
|
47
|
+
}
|
|
48
|
+
getInstructions() {
|
|
49
|
+
return `
|
|
50
|
+
Zed Adapter
|
|
51
|
+
|
|
52
|
+
Skills installed in .rules/.
|
|
53
|
+
Run: specweave refresh-plugins
|
|
54
|
+
`;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../../src/adapters/zed/adapter.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,0BAA0B,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,OAAO,UAAW,SAAQ,WAAW;IAA3C;;QACE,SAAI,GAAG,KAAK,CAAC;QACb,gBAAW,GAAG,2CAA2C,CAAC;QAC1D,oBAAe,GAAG,MAAe,CAAC;IAoDpC,CAAC;IAlDC,KAAK,CAAC,MAAM;QACV,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC1E,CAAC;IAED,QAAQ;QACN,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QAC1C,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;IACvE,CAAC;IAED,eAAe;QACb,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,MAAc;QAChC,MAAM,QAAQ,GAAG,QAAQ,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,0CAA0C,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9E,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,MAAM,CAAC,MAAM,wBAAwB,QAAQ,GAAG,CAAC,CAAC;QAC7E,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,CAAC,QAAQ,CAAC,IAAI,qBAAqB,CAAC,CAAC;IACvE,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,UAAkB;QACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,UAAU,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAClD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,cAAc,UAAU,YAAY,CAAC,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,OAAO,MAAM,IAAI,CAAC,yBAAyB,CAAC,QAAQ,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,OAAuB;QACvC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;IACtC,CAAC;IAED,eAAe;QACb,OAAO;;;;;KAKN,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Clone an existing repository into the workspace and register it.
|
|
5
5
|
*
|
|
6
|
-
* Usage:
|
|
6
|
+
* Usage (single repo):
|
|
7
7
|
* specweave get owner/repo
|
|
8
8
|
* specweave get https://github.com/org/repo
|
|
9
9
|
* specweave get git@github.com:org/repo
|
|
10
10
|
* specweave get ./path/to/local-repo
|
|
11
|
+
*
|
|
12
|
+
* Usage (bulk):
|
|
13
|
+
* specweave get "org/service-*" # glob
|
|
14
|
+
* specweave get "org/*" # all repos in org
|
|
15
|
+
* specweave get --all org # all repos in org (flag form)
|
|
16
|
+
* specweave get --all org --pattern "svc-*"
|
|
11
17
|
*/
|
|
12
18
|
export interface GetOptions {
|
|
13
19
|
branch?: string;
|
|
@@ -16,6 +22,16 @@ export interface GetOptions {
|
|
|
16
22
|
/** true by default, false when --no-init is passed */
|
|
17
23
|
init?: boolean;
|
|
18
24
|
yes?: boolean;
|
|
25
|
+
/** Bulk: clone all repos in org */
|
|
26
|
+
all?: boolean;
|
|
27
|
+
/** Bulk: glob pattern filter (used with --all) */
|
|
28
|
+
pattern?: string;
|
|
29
|
+
/** Bulk: max repos to fetch (default 1000) */
|
|
30
|
+
limit?: number;
|
|
31
|
+
/** Bulk: skip archived repos */
|
|
32
|
+
noArchived?: boolean;
|
|
33
|
+
/** Bulk: skip forked repos */
|
|
34
|
+
noForks?: boolean;
|
|
19
35
|
}
|
|
20
36
|
export declare function getCommand(source: string, options?: GetOptions): Promise<void>;
|
|
21
37
|
//# sourceMappingURL=get.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,sDAAsD;IACtD,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,mCAAmC;IACnC,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gCAAgC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHxF"}
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Clone an existing repository into the workspace and register it.
|
|
5
5
|
*
|
|
6
|
-
* Usage:
|
|
6
|
+
* Usage (single repo):
|
|
7
7
|
* specweave get owner/repo
|
|
8
8
|
* specweave get https://github.com/org/repo
|
|
9
9
|
* specweave get git@github.com:org/repo
|
|
10
10
|
* specweave get ./path/to/local-repo
|
|
11
|
+
*
|
|
12
|
+
* Usage (bulk):
|
|
13
|
+
* specweave get "org/service-*" # glob
|
|
14
|
+
* specweave get "org/*" # all repos in org
|
|
15
|
+
* specweave get --all org # all repos in org (flag form)
|
|
16
|
+
* specweave get --all org --pattern "svc-*"
|
|
11
17
|
*/
|
|
12
18
|
import chalk from 'chalk';
|
|
13
19
|
import * as fs from 'fs';
|
|
@@ -15,6 +21,8 @@ import * as path from 'path';
|
|
|
15
21
|
import { parseSource } from '../helpers/get/source-parser.js';
|
|
16
22
|
import { cloneRepo } from '../helpers/get/clone-repo.js';
|
|
17
23
|
import { registerRepo } from '../helpers/get/register-repo.js';
|
|
24
|
+
import { parseBulkSource, getAuthToken, buildBulkRepoList } from '../helpers/get/bulk-get.js';
|
|
25
|
+
import { launchCloneJob } from '../../core/background/job-launcher.js';
|
|
18
26
|
import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
|
|
19
27
|
import { detectRepository } from '../../utils/git-utils.js';
|
|
20
28
|
export async function getCommand(source, options = {}) {
|
|
@@ -35,6 +43,12 @@ export async function getCommand(source, options = {}) {
|
|
|
35
43
|
process.exit(1);
|
|
36
44
|
return;
|
|
37
45
|
}
|
|
46
|
+
// Bulk mode: detect glob/--all before single-repo path
|
|
47
|
+
const bulkSource = parseBulkSource(source, { all: options.all, pattern: options.pattern });
|
|
48
|
+
if (bulkSource) {
|
|
49
|
+
await _handleBulkGet(projectRoot, bulkSource, options);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
38
52
|
const isUmbrella = config.umbrella?.enabled === true;
|
|
39
53
|
// Parse source
|
|
40
54
|
let parsed;
|
|
@@ -118,6 +132,42 @@ export async function getCommand(source, options = {}) {
|
|
|
118
132
|
console.log(chalk.green(`\n Done! Repository available at ./${repo}/\n`));
|
|
119
133
|
}
|
|
120
134
|
}
|
|
135
|
+
async function _handleBulkGet(projectRoot, bulkSource, options) {
|
|
136
|
+
const { org, pattern } = bulkSource;
|
|
137
|
+
const patternDisplay = pattern ?? '*';
|
|
138
|
+
console.log(chalk.blue(`\n Fetching repos from ${org} (pattern: ${patternDisplay})...\n`));
|
|
139
|
+
let token;
|
|
140
|
+
try {
|
|
141
|
+
token = await getAuthToken();
|
|
142
|
+
}
|
|
143
|
+
catch (err) {
|
|
144
|
+
console.log(chalk.red(`\n ${err instanceof Error ? err.message : String(err)}\n`));
|
|
145
|
+
process.exit(1);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let repositories;
|
|
149
|
+
try {
|
|
150
|
+
repositories = await buildBulkRepoList(org, token, pattern, {
|
|
151
|
+
noArchived: options.noArchived,
|
|
152
|
+
noForks: options.noForks,
|
|
153
|
+
limit: options.limit,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
console.log(chalk.red(`\n Failed to fetch repos: ${err instanceof Error ? err.message : String(err)}\n`));
|
|
158
|
+
process.exit(1);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
if (repositories.length === 0) {
|
|
162
|
+
console.log(chalk.yellow(` No repos found matching "${patternDisplay}" in ${org}.\n`));
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
console.log(chalk.green(` Found ${repositories.length} repo(s) matching "${patternDisplay}". Launching background clone job...\n`));
|
|
166
|
+
const result = await launchCloneJob({ projectPath: projectRoot, repositories });
|
|
167
|
+
const jobId = result.job?.id ?? 'unknown';
|
|
168
|
+
console.log(chalk.green(` Job ${jobId} started.`));
|
|
169
|
+
console.log(chalk.dim(` Monitor: specweave jobs\n`));
|
|
170
|
+
}
|
|
121
171
|
async function _registerAndInit(projectRoot, owner, repo, relPath, absPath, options, showPath, githubUrl) {
|
|
122
172
|
const regResult = await registerRepo(projectRoot, owner, repo, relPath, {
|
|
123
173
|
prefix: options.prefix,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC9F,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAqB5D,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc,EAAE,UAAsB,EAAE;IACvE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAEvE,qCAAqC;IACrC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,GAAwB,EAAE,CAAC;IACrC,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,uDAAuD;IACvD,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IAC3F,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC;IAErD,eAAe;IACf,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;IACzB,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IAEvB,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC5B,MAAM,YAAY,GAAG,MAAM,CAAC,YAAa,CAAC;QAE1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,4BAA4B,YAAY,IAAI,CAAC,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,YAAY,IAAI,CAAC,CAAC,CAAC;YACtE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO;QACT,CAAC;QAED,oCAAoC;QACpC,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChE,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC;YACvB,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;aAAM,CAAC;YACN,8BAA8B;YAC9B,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;YACnC,KAAK,GAAG,EAAE,CAAC;QACb,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,YAAY,IAAI,CAAC,CAAC,CAAC;QAEzE,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC7E,MAAM,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QAC1F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACtF,CAAC;QACD,OAAO;IACT,CAAC;IAED,4CAA4C;IAC5C,6EAA6E;IAC7E,MAAM,QAAQ,GAAG,KAAK,IAAI,UAAU,CAAC;IACrC,MAAM,SAAS,GAAG,UAAU;QAC1B,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,CAAC;QACxD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAEjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC;IAE7D,QAAQ;IACR,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QACnF,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,wBAAwB,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAC,CAAC;QACrH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,kBAAkB;IAClB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,sBAAsB,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,MAAM,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACjG,CAAC;SAAM,CAAC;QACN,2CAA2C;QAC3C,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;YAC3B,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,IAAI,KAAK,CAAC,CAAC,CAAC;IAC7E,CAAC;AACH,CAAC;AAED,KAAK,UAAU,cAAc,CAC3B,WAAmB,EACnB,UAAmD,EACnD,OAAmB;IAEnB,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC;IACpC,MAAM,cAAc,GAAG,OAAO,IAAI,GAAG,CAAC;IAEtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,2BAA2B,GAAG,cAAc,cAAc,QAAQ,CAAC,CAAC,CAAC;IAE5F,IAAI,KAAa,CAAC;IAClB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,YAAY,EAAE,CAAC;IAC/B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,YAAoF,CAAC;IACzF,IAAI,CAAC;QACH,YAAY,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE;YAC1D,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;SACrB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChB,OAAO;IACT,CAAC;IAED,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,8BAA8B,cAAc,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;QACxF,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,YAAY,CAAC,MAAM,sBAAsB,cAAc,wCAAwC,CAAC,CAAC,CAAC;IAEtI,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,EAAE,WAAW,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC,CAAC;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,EAAE,EAAE,IAAI,SAAS,CAAC;IAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC;IACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,KAAa,EACb,IAAY,EACZ,OAAe,EACf,OAAe,EACf,OAAmB,EACnB,QAAiB,EACjB,SAAkB;IAElB,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE;QACtE,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,SAAS;KACV,CAAC,CAAC;IAEH,IAAI,SAAS,CAAC,iBAAiB,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,6CAA6C,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;IACjI,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC3B,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC;IACtC,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,OAAO,EAAE,CAAC,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,0CAA0C,IAAI,IAAI,CAAC,CAAC,CAAC;AAC7E,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAAe;IACrC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACvD,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC,CAAC;IACnF,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Command: link-pr
|
|
3
|
+
*
|
|
4
|
+
* Links a pull request to external tickets (JIRA remote links, ADO hyperlinks)
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave link-pr --increment <id> --pr-url <url> --pr-number <num> [--branch <name>]
|
|
8
|
+
*
|
|
9
|
+
* @module cli/commands/link-pr
|
|
10
|
+
*/
|
|
11
|
+
export declare function runLinkPr(options: {
|
|
12
|
+
increment: string;
|
|
13
|
+
prUrl: string;
|
|
14
|
+
prNumber: string;
|
|
15
|
+
branch?: string;
|
|
16
|
+
}): Promise<void>;
|
|
17
|
+
//# sourceMappingURL=link-pr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-pr.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/link-pr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,wBAAsB,SAAS,CAAC,OAAO,EAAE;IACvC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsChB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CLI Command: link-pr
|
|
3
|
+
*
|
|
4
|
+
* Links a pull request to external tickets (JIRA remote links, ADO hyperlinks)
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave link-pr --increment <id> --pr-url <url> --pr-number <num> [--branch <name>]
|
|
8
|
+
*
|
|
9
|
+
* @module cli/commands/link-pr
|
|
10
|
+
*/
|
|
11
|
+
import chalk from 'chalk';
|
|
12
|
+
import { linkPrToExternalTickets } from '../../sync/pr-linker.js';
|
|
13
|
+
export async function runLinkPr(options) {
|
|
14
|
+
const projectRoot = process.cwd();
|
|
15
|
+
if (!options.increment || !options.prUrl || !options.prNumber) {
|
|
16
|
+
console.error(chalk.red('Missing required options: --increment, --pr-url, --pr-number'));
|
|
17
|
+
process.exit(1);
|
|
18
|
+
}
|
|
19
|
+
console.log(chalk.cyan(`\n🔗 Linking PR #${options.prNumber} to external tickets...`));
|
|
20
|
+
const result = await linkPrToExternalTickets({
|
|
21
|
+
projectRoot,
|
|
22
|
+
incrementId: options.increment,
|
|
23
|
+
prUrl: options.prUrl,
|
|
24
|
+
prNumber: parseInt(options.prNumber, 10),
|
|
25
|
+
branch: options.branch || '',
|
|
26
|
+
});
|
|
27
|
+
// Report results
|
|
28
|
+
if (result.linked.length > 0) {
|
|
29
|
+
console.log(chalk.green(`\n✅ Linked to ${result.linked.length} ticket(s):`));
|
|
30
|
+
for (const link of result.linked) {
|
|
31
|
+
console.log(chalk.green(` • ${link.provider.toUpperCase()}: ${link.key}`));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if (result.errors.length > 0) {
|
|
35
|
+
console.log(chalk.yellow(`\n⚠️ ${result.errors.length} linking error(s):`));
|
|
36
|
+
for (const err of result.errors) {
|
|
37
|
+
console.log(chalk.yellow(` • ${err.provider.toUpperCase()} ${err.key}: ${err.error}`));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
if (result.linked.length === 0 && result.errors.length === 0) {
|
|
41
|
+
console.log(chalk.gray('\n No external tickets found in metadata — nothing to link'));
|
|
42
|
+
}
|
|
43
|
+
console.log('');
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=link-pr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-pr.js","sourceRoot":"","sources":["../../../../src/cli/commands/link-pr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,OAK/B;IACC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;QAC9D,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,QAAQ,yBAAyB,CAAC,CAAC,CAAC;IAEvF,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC;QAC3C,WAAW;QACX,WAAW,EAAE,OAAO,CAAC,SAAS;QAC9B,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;QACxC,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE;KAC7B,CAAC,CAAC;IAEH,iBAAiB;IACjB,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,MAAM,oBAAoB,CAAC,CAAC,CAAC;QAC7E,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;IAC1F,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk Get Helpers for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Wires fetchGitHubRepos + matchByGlob + launchCloneJob into a bulk clone path.
|
|
5
|
+
*/
|
|
6
|
+
export interface BulkSource {
|
|
7
|
+
org: string;
|
|
8
|
+
/** null = all repos in org, string = glob pattern to filter by */
|
|
9
|
+
pattern: string | null;
|
|
10
|
+
}
|
|
11
|
+
export interface BulkRepoEntry {
|
|
12
|
+
owner: string;
|
|
13
|
+
name: string;
|
|
14
|
+
/** Relative path within umbrella: repositories/{owner}/{name} */
|
|
15
|
+
path: string;
|
|
16
|
+
cloneUrl: string;
|
|
17
|
+
}
|
|
18
|
+
export interface BuildBulkOptions {
|
|
19
|
+
noArchived?: boolean;
|
|
20
|
+
noForks?: boolean;
|
|
21
|
+
limit?: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse source into org + optional glob pattern.
|
|
25
|
+
* Returns null if source should be handled by the single-repo path.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseBulkSource(source: string, options: {
|
|
28
|
+
all?: boolean;
|
|
29
|
+
pattern?: string;
|
|
30
|
+
}): BulkSource | null;
|
|
31
|
+
/**
|
|
32
|
+
* Resolve GitHub auth token.
|
|
33
|
+
* Priority: GH_TOKEN env → `gh auth token` CLI → throw helpful error.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getAuthToken(): Promise<string>;
|
|
36
|
+
/**
|
|
37
|
+
* Fetch repos from a GitHub org, apply pattern + filters, and return
|
|
38
|
+
* the CloneLaunchOptions.repositories array ready for launchCloneJob().
|
|
39
|
+
*/
|
|
40
|
+
export declare function buildBulkRepoList(org: string, token: string, pattern: string | null, options: BuildBulkOptions): Promise<BulkRepoEntry[]>;
|
|
41
|
+
//# sourceMappingURL=bulk-get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-get.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/bulk-get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,kEAAkE;IAClE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,UAAU,GAAG,IAAI,CAsCnB;AAED;;;GAGG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAYpD;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,aAAa,EAAE,CAAC,CA+B1B"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk Get Helpers for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Wires fetchGitHubRepos + matchByGlob + launchCloneJob into a bulk clone path.
|
|
5
|
+
*/
|
|
6
|
+
import { execFileNoThrow } from '../../../utils/execFileNoThrow.js';
|
|
7
|
+
import { fetchGitHubRepos } from '../init/github-repo-cloning.js';
|
|
8
|
+
import { matchByGlob } from '../selection-strategy.js';
|
|
9
|
+
import { REPO_FETCH_LIMITS } from '../init/types.js';
|
|
10
|
+
/**
|
|
11
|
+
* Parse source into org + optional glob pattern.
|
|
12
|
+
* Returns null if source should be handled by the single-repo path.
|
|
13
|
+
*/
|
|
14
|
+
export function parseBulkSource(source, options) {
|
|
15
|
+
const trimmed = source.trim();
|
|
16
|
+
// Skip local paths and full URLs — not bulk targets
|
|
17
|
+
if (trimmed.startsWith('./') ||
|
|
18
|
+
trimmed.startsWith('../') ||
|
|
19
|
+
trimmed.startsWith('/') ||
|
|
20
|
+
trimmed.startsWith('~') ||
|
|
21
|
+
trimmed.startsWith('http') ||
|
|
22
|
+
trimmed.startsWith('git@')) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const slashIdx = trimmed.indexOf('/');
|
|
26
|
+
if (slashIdx === -1) {
|
|
27
|
+
// Bare org name — only bulk if --all is set
|
|
28
|
+
if (!options.all)
|
|
29
|
+
return null;
|
|
30
|
+
return { org: trimmed, pattern: options.pattern ?? null };
|
|
31
|
+
}
|
|
32
|
+
const org = trimmed.slice(0, slashIdx);
|
|
33
|
+
const repoOrPattern = trimmed.slice(slashIdx + 1);
|
|
34
|
+
// Contains glob chars → bulk mode
|
|
35
|
+
if (repoOrPattern.includes('*') || repoOrPattern.includes('?')) {
|
|
36
|
+
const pattern = repoOrPattern === '*' ? null : repoOrPattern;
|
|
37
|
+
return { org, pattern };
|
|
38
|
+
}
|
|
39
|
+
// --all flag with org/something form — treat something as pattern override
|
|
40
|
+
if (options.all) {
|
|
41
|
+
return { org, pattern: options.pattern ?? repoOrPattern };
|
|
42
|
+
}
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Resolve GitHub auth token.
|
|
47
|
+
* Priority: GH_TOKEN env → `gh auth token` CLI → throw helpful error.
|
|
48
|
+
*/
|
|
49
|
+
export async function getAuthToken() {
|
|
50
|
+
if (process.env.GH_TOKEN?.trim())
|
|
51
|
+
return process.env.GH_TOKEN.trim();
|
|
52
|
+
const result = await execFileNoThrow('gh', ['auth', 'token'], {});
|
|
53
|
+
if (result.exitCode === 0 && result.stdout.trim()) {
|
|
54
|
+
return result.stdout.trim();
|
|
55
|
+
}
|
|
56
|
+
throw new Error('GitHub auth required for bulk clone.\n' +
|
|
57
|
+
'Fix: run `gh auth login` or set the GH_TOKEN environment variable.');
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Fetch repos from a GitHub org, apply pattern + filters, and return
|
|
61
|
+
* the CloneLaunchOptions.repositories array ready for launchCloneJob().
|
|
62
|
+
*/
|
|
63
|
+
export async function buildBulkRepoList(org, token, pattern, options) {
|
|
64
|
+
const limit = options.limit ?? REPO_FETCH_LIMITS.DEFAULT_MAX_REPOS;
|
|
65
|
+
const fetchResult = await fetchGitHubRepos(org, token, limit);
|
|
66
|
+
if (fetchResult.error) {
|
|
67
|
+
throw new Error(fetchResult.error);
|
|
68
|
+
}
|
|
69
|
+
let repos = fetchResult.repos;
|
|
70
|
+
// Apply pre-filter on archived/forks before pattern matching
|
|
71
|
+
if (options.noArchived)
|
|
72
|
+
repos = repos.filter(r => !r.archived);
|
|
73
|
+
if (options.noForks)
|
|
74
|
+
repos = repos.filter(r => !r.fork);
|
|
75
|
+
// Apply glob pattern
|
|
76
|
+
if (pattern !== null) {
|
|
77
|
+
const matched = matchByGlob(repos.map(r => ({ name: r.name, value: r.name })), pattern, 'name');
|
|
78
|
+
const matchedNames = new Set(matched.map(m => m.name));
|
|
79
|
+
repos = repos.filter(r => matchedNames.has(r.name));
|
|
80
|
+
}
|
|
81
|
+
return repos.map(r => ({
|
|
82
|
+
owner: r.owner.login,
|
|
83
|
+
name: r.name,
|
|
84
|
+
path: `repositories/${r.owner.login}/${r.name}`,
|
|
85
|
+
cloneUrl: r.clone_url,
|
|
86
|
+
}));
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=bulk-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bulk-get.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/bulk-get.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAsBrD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAc,EACd,OAA4C;IAE5C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAE9B,oDAAoD;IACpD,IACE,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QACxB,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC;QACzB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACvB,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;QACvB,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC;QAC1B,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAC1B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAEtC,IAAI,QAAQ,KAAK,CAAC,CAAC,EAAE,CAAC;QACpB,4CAA4C;QAC5C,IAAI,CAAC,OAAO,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,EAAE,CAAC;IAC5D,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC;IAElD,kCAAkC;IAClC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,aAAa,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/D,MAAM,OAAO,GAAG,aAAa,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa,CAAC;QAC7D,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,2EAA2E;IAC3E,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,aAAa,EAAE,CAAC;IAC5D,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IAErE,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,MAAM,IAAI,KAAK,CACb,wCAAwC;QACxC,oEAAoE,CACrE,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,GAAW,EACX,KAAa,EACb,OAAsB,EACtB,OAAyB;IAEzB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,iBAAiB,CAAC,iBAAiB,CAAC;IACnE,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IAE9D,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IACrC,CAAC;IAED,IAAI,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;IAE9B,6DAA6D;IAC7D,IAAI,OAAO,CAAC,UAAU;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,IAAI,OAAO,CAAC,OAAO;QAAE,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAExD,qBAAqB;IACrB,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;QACrB,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EACjD,OAAO,EACP,MAAM,CACP,CAAC;QACF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACvD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACrB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK;QACpB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,IAAI,EAAE,gBAAgB,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,IAAI,EAAE;QAC/C,QAAQ,EAAE,CAAC,CAAC,SAAS;KACtB,CAAC,CAAC,CAAC;AACN,CAAC"}
|
|
@@ -22,6 +22,55 @@ export interface GitHubRepoSelection {
|
|
|
22
22
|
/** Personal Access Token */
|
|
23
23
|
pat: string;
|
|
24
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Repository info from GitHub API
|
|
27
|
+
*
|
|
28
|
+
* @see https://docs.github.com/en/rest/repos/repos#list-repositories-for-the-authenticated-user
|
|
29
|
+
*/
|
|
30
|
+
interface GitHubRepository {
|
|
31
|
+
id: number;
|
|
32
|
+
name: string;
|
|
33
|
+
full_name: string;
|
|
34
|
+
clone_url: string;
|
|
35
|
+
html_url: string;
|
|
36
|
+
owner: {
|
|
37
|
+
login: string;
|
|
38
|
+
};
|
|
39
|
+
/** Whether the repository is archived (read-only, may be stale) */
|
|
40
|
+
archived: boolean;
|
|
41
|
+
/** Whether the repository is a fork of another repo */
|
|
42
|
+
fork: boolean;
|
|
43
|
+
/** Whether the repository is private */
|
|
44
|
+
private: boolean;
|
|
45
|
+
/** Visibility: public, private, or internal (GitHub Enterprise) */
|
|
46
|
+
visibility?: string;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Rate limit info from GitHub API headers
|
|
50
|
+
*/
|
|
51
|
+
interface RateLimitInfo {
|
|
52
|
+
remaining: number;
|
|
53
|
+
limit: number;
|
|
54
|
+
reset: Date;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Fetch result with repos and rate limit info
|
|
58
|
+
*/
|
|
59
|
+
interface FetchResult {
|
|
60
|
+
repos: GitHubRepository[];
|
|
61
|
+
rateLimit?: RateLimitInfo;
|
|
62
|
+
partial: boolean;
|
|
63
|
+
error?: string;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetch repositories from GitHub organization with pagination and rate limit handling
|
|
67
|
+
*
|
|
68
|
+
* @param org - GitHub organization or owner
|
|
69
|
+
* @param pat - Personal Access Token
|
|
70
|
+
* @param maxRepos - Maximum repos to fetch (default 1000, configurable via REPO_FETCH_LIMITS)
|
|
71
|
+
* @returns Fetch result with repos and metadata
|
|
72
|
+
*/
|
|
73
|
+
export declare function fetchGitHubRepos(org: string, pat: string, maxRepos?: number): Promise<FetchResult>;
|
|
25
74
|
/**
|
|
26
75
|
* Result of GitHub repo cloning trigger
|
|
27
76
|
*/
|
|
@@ -98,4 +147,5 @@ export interface SingleRepoCloneResult {
|
|
|
98
147
|
* @returns Result with clone status, job ID, or error
|
|
99
148
|
*/
|
|
100
149
|
export declare function cloneSingleGitHubRepo(options: SingleRepoCloneOptions): Promise<SingleRepoCloneResult>;
|
|
150
|
+
export {};
|
|
101
151
|
//# sourceMappingURL=github-repo-cloning.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"github-repo-cloning.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/github-repo-cloning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,EAA+B,KAAK,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAKhG;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,mCAAmC;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,4BAA4B;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;
|
|
1
|
+
{"version":3,"file":"github-repo-cloning.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/init/github-repo-cloning.ts"],"names":[],"mappings":"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"}
|