specweave 1.0.443 → 1.0.445
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 +14 -0
- package/dist/src/cli/commands/get.d.ts +21 -0
- package/dist/src/cli/commands/get.d.ts.map +1 -0
- package/dist/src/cli/commands/get.js +148 -0
- package/dist/src/cli/commands/get.js.map +1 -0
- package/dist/src/cli/commands/plan/agent-invoker.d.ts +4 -4
- package/dist/src/cli/commands/plan/agent-invoker.d.ts.map +1 -1
- package/dist/src/cli/commands/plan/agent-invoker.js +7 -7
- package/dist/src/cli/commands/plan/agent-invoker.js.map +1 -1
- package/dist/src/cli/commands/plan/plan-orchestrator.js +1 -1
- package/dist/src/cli/commands/plan/plan-orchestrator.js.map +1 -1
- package/dist/src/cli/helpers/get/clone-repo.d.ts +23 -0
- package/dist/src/cli/helpers/get/clone-repo.d.ts.map +1 -0
- package/dist/src/cli/helpers/get/clone-repo.js +52 -0
- package/dist/src/cli/helpers/get/clone-repo.js.map +1 -0
- package/dist/src/cli/helpers/get/register-repo.d.ts +21 -0
- package/dist/src/cli/helpers/get/register-repo.d.ts.map +1 -0
- package/dist/src/cli/helpers/get/register-repo.js +61 -0
- package/dist/src/cli/helpers/get/register-repo.js.map +1 -0
- package/dist/src/cli/helpers/get/source-parser.d.ts +28 -0
- package/dist/src/cli/helpers/get/source-parser.d.ts.map +1 -0
- package/dist/src/cli/helpers/get/source-parser.js +97 -0
- package/dist/src/cli/helpers/get/source-parser.js.map +1 -0
- package/dist/src/core/hooks/LifecycleHookDispatcher.js +1 -1
- package/dist/src/core/hooks/LifecycleHookDispatcher.js.map +1 -1
- package/dist/src/core/increment/spec-sync-manager.js +1 -1
- package/dist/src/core/workflow/cost-estimator.d.ts +1 -1
- package/dist/src/core/workflow/cost-estimator.js +1 -1
- package/package.json +1 -1
- package/plugins/FINAL-AUDIT-RECOMMENDATIONS.md +1 -1
- package/plugins/SKILLS-VS-AGENTS.md +1 -3
- package/plugins/specweave/PLUGIN.md +0 -3
- package/plugins/specweave/agents/sw-planner.md +40 -4
- package/plugins/specweave/hooks/.specweave/logs/auto-iterations.log +1 -0
- package/plugins/specweave/hooks/.specweave/logs/auto-stop-reasons.log +1 -0
- package/plugins/specweave/hooks/v2/guards/skill-chain-enforcement-guard.sh +4 -4
- package/plugins/specweave/skills/.specweave/logs/reflect/auto-reflect.log +15 -0
- package/plugins/specweave/skills/.specweave/logs/reflect/reflect.log +3 -0
- package/plugins/specweave/skills/.specweave/logs/stop-auto.log +1 -0
- package/plugins/specweave/skills/done/SKILL.md +6 -7
- package/plugins/specweave/skills/get/SKILL.md +80 -0
- package/plugins/specweave/skills/increment/SKILL.md +1 -1
- package/plugins/specweave/skills/plan/SKILL.md +3 -3
- package/plugins/specweave-ado/lib/ado-multi-project-sync.js +0 -1
- package/plugins/specweave-ado/lib/enhanced-ado-sync.js +180 -0
- package/plugins/specweave-github/hooks/.specweave/logs/hooks-debug.log +1266 -0
- package/plugins/specweave-github/lib/enhanced-github-sync.js +249 -0
- package/plugins/specweave-jira/lib/enhanced-jira-sync.js +150 -0
- package/plugins/specweave-release/hooks/.specweave/logs/dora-tracking.log +1260 -0
- package/src/templates/AGENTS.md.template +2 -2
- package/src/templates/CLAUDE.md.template +1 -1
- package/plugins/specweave/commands/docs-updater.md +0 -66
- package/plugins/specweave/skills/docs-updater/SKILL.md +0 -84
- package/plugins/specweave/skills/spec-generator/SKILL.md +0 -92
- package/plugins/specweave/skills/test-aware-planner/SKILL.md +0 -117
package/bin/specweave.js
CHANGED
|
@@ -1439,6 +1439,20 @@ hooksCmd
|
|
|
1439
1439
|
console.log('Hooks settings written to .claude/settings.json');
|
|
1440
1440
|
});
|
|
1441
1441
|
|
|
1442
|
+
// Get command - Clone and register an existing repository into the workspace
|
|
1443
|
+
program
|
|
1444
|
+
.command('get <source>')
|
|
1445
|
+
.description('Clone and register an existing repository into the workspace')
|
|
1446
|
+
.option('--branch <branch>', 'Clone a specific branch')
|
|
1447
|
+
.option('--prefix <prefix>', 'User story prefix (default: first 3 chars uppercase)')
|
|
1448
|
+
.option('--role <role>', 'Repository role (frontend, backend, mobile, infra, shared)')
|
|
1449
|
+
.option('--no-init', 'Skip specweave init on cloned repo')
|
|
1450
|
+
.option('--yes', 'Skip confirmation prompts')
|
|
1451
|
+
.action(async (source, opts) => {
|
|
1452
|
+
const { getCommand } = await import('../dist/src/cli/commands/get.js');
|
|
1453
|
+
await getCommand(source, opts);
|
|
1454
|
+
});
|
|
1455
|
+
|
|
1442
1456
|
// Migrate-to-umbrella command - Convert single-repo to umbrella workspace
|
|
1443
1457
|
program
|
|
1444
1458
|
.command('migrate-to-umbrella')
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `specweave get` Command
|
|
3
|
+
*
|
|
4
|
+
* Clone an existing repository into the workspace and register it.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave get owner/repo
|
|
8
|
+
* specweave get https://github.com/org/repo
|
|
9
|
+
* specweave get git@github.com:org/repo
|
|
10
|
+
* specweave get ./path/to/local-repo
|
|
11
|
+
*/
|
|
12
|
+
export interface GetOptions {
|
|
13
|
+
branch?: string;
|
|
14
|
+
prefix?: string;
|
|
15
|
+
role?: string;
|
|
16
|
+
/** true by default, false when --no-init is passed */
|
|
17
|
+
init?: boolean;
|
|
18
|
+
yes?: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare function getCommand(source: string, options?: GetOptions): Promise<void>;
|
|
21
|
+
//# sourceMappingURL=get.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,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;CACf;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmGxF"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `specweave get` Command
|
|
3
|
+
*
|
|
4
|
+
* Clone an existing repository into the workspace and register it.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* specweave get owner/repo
|
|
8
|
+
* specweave get https://github.com/org/repo
|
|
9
|
+
* specweave get git@github.com:org/repo
|
|
10
|
+
* specweave get ./path/to/local-repo
|
|
11
|
+
*/
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
import * as fs from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import { parseSource } from '../helpers/get/source-parser.js';
|
|
16
|
+
import { cloneRepo } from '../helpers/get/clone-repo.js';
|
|
17
|
+
import { registerRepo } from '../helpers/get/register-repo.js';
|
|
18
|
+
import { execFileNoThrow } from '../../utils/execFileNoThrow.js';
|
|
19
|
+
import { detectRepository } from '../../utils/git-utils.js';
|
|
20
|
+
export async function getCommand(source, options = {}) {
|
|
21
|
+
const projectRoot = process.cwd();
|
|
22
|
+
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
23
|
+
// Guard: must be a SpecWeave project
|
|
24
|
+
if (!fs.existsSync(configPath)) {
|
|
25
|
+
console.log(chalk.red('\n Not a SpecWeave project. Run `specweave init` first.\n'));
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
28
|
+
let config = {};
|
|
29
|
+
try {
|
|
30
|
+
config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
console.log(chalk.red('\n Could not read .specweave/config.json\n'));
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const isUmbrella = config.umbrella?.enabled === true;
|
|
37
|
+
// Parse source
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = parseSource(source);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.log(chalk.red(`\n ${err instanceof Error ? err.message : String(err)}\n`));
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
// Resolve owner/repo for local paths
|
|
47
|
+
let owner = parsed.owner;
|
|
48
|
+
let repo = parsed.repo;
|
|
49
|
+
if (parsed.type === 'local') {
|
|
50
|
+
const absolutePath = parsed.absolutePath;
|
|
51
|
+
if (!fs.existsSync(absolutePath)) {
|
|
52
|
+
console.log(chalk.red(`\n Path does not exist: ${absolutePath}\n`));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
if (!fs.existsSync(path.join(absolutePath, '.git'))) {
|
|
56
|
+
console.log(chalk.red(`\n Not a git repository: ${absolutePath}\n`));
|
|
57
|
+
process.exit(1);
|
|
58
|
+
}
|
|
59
|
+
// Detect owner/repo from git remote
|
|
60
|
+
const detected = await detectRepository('origin', absolutePath);
|
|
61
|
+
if (detected) {
|
|
62
|
+
owner = detected.owner;
|
|
63
|
+
repo = detected.repo;
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
// Fall back to directory name
|
|
67
|
+
repo = path.basename(absolutePath);
|
|
68
|
+
owner = '';
|
|
69
|
+
}
|
|
70
|
+
console.log(chalk.blue(`\n Registering local repo: ${absolutePath}\n`));
|
|
71
|
+
if (isUmbrella) {
|
|
72
|
+
const relPath = path.relative(projectRoot, absolutePath);
|
|
73
|
+
await _registerAndInit(projectRoot, owner, repo, relPath, absolutePath, options, false);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(chalk.yellow(' Not an umbrella workspace — skipping registration.\n'));
|
|
77
|
+
}
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
// Remote source: determine target directory
|
|
81
|
+
const targetDir = isUmbrella
|
|
82
|
+
? path.join(projectRoot, 'repositories', owner, repo)
|
|
83
|
+
: path.join(projectRoot, repo);
|
|
84
|
+
console.log(chalk.blue(`\n Getting ${owner}/${repo}...\n`));
|
|
85
|
+
// Clone
|
|
86
|
+
try {
|
|
87
|
+
const cloneResult = await cloneRepo(parsed, targetDir, { branch: options.branch });
|
|
88
|
+
if (cloneResult.cloned) {
|
|
89
|
+
console.log(chalk.green(` Cloned → ${path.relative(projectRoot, cloneResult.repoPath)}`));
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
console.log(chalk.dim(` Already exists at ${path.relative(projectRoot, cloneResult.repoPath)}, skipping clone`));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch (err) {
|
|
96
|
+
console.log(chalk.red(`\n Clone failed: ${err instanceof Error ? err.message : String(err)}\n`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
// Register + init
|
|
100
|
+
if (isUmbrella) {
|
|
101
|
+
const relPath = path.relative(projectRoot, targetDir).replace(/\\/g, '/');
|
|
102
|
+
const githubUrl = parsed.type === 'github' ? `https://github.com/${owner}/${repo}` : undefined;
|
|
103
|
+
await _registerAndInit(projectRoot, owner, repo, relPath, targetDir, options, true, githubUrl);
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// Non-umbrella: just run init if requested
|
|
107
|
+
if (options.init !== false) {
|
|
108
|
+
await _runInit(targetDir);
|
|
109
|
+
}
|
|
110
|
+
console.log(chalk.green(`\n Done! Repository available at ./${repo}/\n`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
async function _registerAndInit(projectRoot, owner, repo, relPath, absPath, options, showPath, githubUrl) {
|
|
114
|
+
const regResult = await registerRepo(projectRoot, owner, repo, relPath, {
|
|
115
|
+
prefix: options.prefix,
|
|
116
|
+
role: options.role,
|
|
117
|
+
githubUrl,
|
|
118
|
+
});
|
|
119
|
+
if (regResult.alreadyRegistered) {
|
|
120
|
+
console.log(chalk.dim(` Already registered in umbrella config`));
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
console.log(chalk.green(` Registered in umbrella config (prefix: ${options.prefix || repo.substring(0, 3).toUpperCase()})`));
|
|
124
|
+
}
|
|
125
|
+
if (options.init !== false) {
|
|
126
|
+
await _runInit(absPath);
|
|
127
|
+
}
|
|
128
|
+
console.log(chalk.green(`\n Done!`));
|
|
129
|
+
if (showPath) {
|
|
130
|
+
console.log(chalk.dim(` Path: ${relPath}`));
|
|
131
|
+
}
|
|
132
|
+
console.log(chalk.dim(` Next: /sw:increment to plan work in ${repo}\n`));
|
|
133
|
+
}
|
|
134
|
+
async function _runInit(repoDir) {
|
|
135
|
+
if (fs.existsSync(path.join(repoDir, '.specweave'))) {
|
|
136
|
+
console.log(chalk.dim(' Already has .specweave/, skipping init'));
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
console.log(chalk.dim(' Running specweave init...'));
|
|
140
|
+
const result = await execFileNoThrow('specweave', ['init', '.'], { cwd: repoDir });
|
|
141
|
+
if (result.exitCode === 0) {
|
|
142
|
+
console.log(chalk.green(' Initialized with specweave'));
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
console.log(chalk.yellow(' specweave init had warnings (you can run it manually)'));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get.js","sourceRoot":"","sources":["../../../../src/cli/commands/get.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent Invoker - Orchestrates AI agent invocations for plan generation
|
|
3
3
|
*
|
|
4
|
-
* This module provides utilities to invoke the Architect and
|
|
4
|
+
* This module provides utilities to invoke the Architect and Planner
|
|
5
5
|
* agents within the Claude Code ecosystem.
|
|
6
6
|
*
|
|
7
7
|
* @module cli/commands/plan/agent-invoker
|
|
@@ -30,12 +30,12 @@ export declare class AgentInvoker {
|
|
|
30
30
|
*/
|
|
31
31
|
invokeArchitectAgent(context: PlanPipelineContext): Promise<AgentInvocationResult>;
|
|
32
32
|
/**
|
|
33
|
-
* Invoke
|
|
33
|
+
* Invoke Planner Agent to generate tasks.md
|
|
34
34
|
*
|
|
35
35
|
* @param context - Pipeline context with spec.md and plan.md content
|
|
36
36
|
* @returns Agent invocation result with generated tasks.md content
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
invokePlannerAgent(context: PlanPipelineContext): Promise<AgentInvocationResult>;
|
|
39
39
|
/**
|
|
40
40
|
* Extract requirements from spec.md
|
|
41
41
|
*/
|
|
@@ -61,7 +61,7 @@ export declare class AgentInvoker {
|
|
|
61
61
|
*/
|
|
62
62
|
private buildArchitectPrompt;
|
|
63
63
|
/**
|
|
64
|
-
* Build prompt for
|
|
64
|
+
* Build prompt for Planner Agent
|
|
65
65
|
*/
|
|
66
66
|
private buildPlannerPrompt;
|
|
67
67
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-invoker.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/agent-invoker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA2BxF;;;;;OAKG;IACG,
|
|
1
|
+
{"version":3,"file":"agent-invoker.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/agent-invoker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,aAAa,GAAG,aAAa,CAAC;CAC9C;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;;;;OAKG;IACG,oBAAoB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA2BxF;;;;;OAKG;IACG,kBAAkB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA0BtF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAY3B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAY1B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAYrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAYzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAkE5B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAgF1B;;;;;OAKG;IACH,qBAAqB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;IAoE3D;;OAEG;IACH,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,MAAM;CA2C7D"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Agent Invoker - Orchestrates AI agent invocations for plan generation
|
|
3
3
|
*
|
|
4
|
-
* This module provides utilities to invoke the Architect and
|
|
4
|
+
* This module provides utilities to invoke the Architect and Planner
|
|
5
5
|
* agents within the Claude Code ecosystem.
|
|
6
6
|
*
|
|
7
7
|
* @module cli/commands/plan/agent-invoker
|
|
@@ -36,12 +36,12 @@ export class AgentInvoker {
|
|
|
36
36
|
};
|
|
37
37
|
}
|
|
38
38
|
/**
|
|
39
|
-
* Invoke
|
|
39
|
+
* Invoke Planner Agent to generate tasks.md
|
|
40
40
|
*
|
|
41
41
|
* @param context - Pipeline context with spec.md and plan.md content
|
|
42
42
|
* @returns Agent invocation result with generated tasks.md content
|
|
43
43
|
*/
|
|
44
|
-
async
|
|
44
|
+
async invokePlannerAgent(context) {
|
|
45
45
|
const specContent = context.specContent;
|
|
46
46
|
const planContent = context.generatedPlanContent;
|
|
47
47
|
const incrementId = context.incrementId;
|
|
@@ -54,7 +54,7 @@ export class AgentInvoker {
|
|
|
54
54
|
return {
|
|
55
55
|
success: true,
|
|
56
56
|
content: plannerPrompt,
|
|
57
|
-
agentName: '
|
|
57
|
+
agentName: 'planner',
|
|
58
58
|
executionMode: 'instruction'
|
|
59
59
|
};
|
|
60
60
|
}
|
|
@@ -187,11 +187,11 @@ Follow the standard SpecWeave plan.md format with:
|
|
|
187
187
|
`;
|
|
188
188
|
}
|
|
189
189
|
/**
|
|
190
|
-
* Build prompt for
|
|
190
|
+
* Build prompt for Planner Agent
|
|
191
191
|
*/
|
|
192
192
|
buildPlannerPrompt(incrementId, acceptanceCriteria, phases, components) {
|
|
193
193
|
const acList = Array.from(acceptanceCriteria.keys());
|
|
194
|
-
return `#
|
|
194
|
+
return `# Planner Agent Invocation for ${incrementId}
|
|
195
195
|
|
|
196
196
|
## Task
|
|
197
197
|
Generate a tasks.md file with embedded test plans for increment ${incrementId}.
|
|
@@ -372,7 +372,7 @@ coverage_target: 95%
|
|
|
372
372
|
|
|
373
373
|
---
|
|
374
374
|
|
|
375
|
-
**Note**: This is a placeholder tasks file. Run the
|
|
375
|
+
**Note**: This is a placeholder tasks file. Run the Planner agent (sw-planner) to generate the complete task breakdown with embedded test plans.
|
|
376
376
|
|
|
377
377
|
**Total Acceptance Criteria**: ${acceptanceCriteria.size}
|
|
378
378
|
**Mapped to Tasks**: 1 (placeholder)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-invoker.js","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/agent-invoker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAiBH;;GAEG;AACH,MAAM,OAAO,YAAY;IACvB;;;;;OAKG;IACH,KAAK,CAAC,oBAAoB,CAAC,OAA4B;QACrD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QACxC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;QAExC,uCAAuC;QACvC,MAAM,YAAY,GAAG,IAAI,CAAC,mBAAmB,CAAC,WAAW,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,kBAAkB,GAAG,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC,CAAC;QAEvE,2CAA2C;QAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,oBAAoB,CAC/C,WAAW,EACX,YAAY,EACZ,WAAW,EACX,kBAAkB,CACnB,CAAC;QAEF,yEAAyE;QACzE,0DAA0D;QAC1D,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,eAAe;YACxB,SAAS,EAAE,WAAW;YACtB,aAAa,EAAE,aAAa;SAC7B,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-invoker.js","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/agent-invoker.ts"],"names":[],"mappings":"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"}
|
|
@@ -61,7 +61,7 @@ export class PlanCommandOrchestrator {
|
|
|
61
61
|
throw new Error(`Architect agent invocation failed: ${architectResult.error}`);
|
|
62
62
|
}
|
|
63
63
|
// Step 5: Invoke Task Generator
|
|
64
|
-
const plannerResult = await this.agentInvoker.
|
|
64
|
+
const plannerResult = await this.agentInvoker.invokePlannerAgent(context);
|
|
65
65
|
if (plannerResult.success) {
|
|
66
66
|
// Use AgentInvoker's temporary task generation
|
|
67
67
|
// In production Claude Code context, this would be replaced by actual agent output
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan-orchestrator.js","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/plan-orchestrator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plan-orchestrator.js","sourceRoot":"","sources":["../../../../../src/cli/commands/plan/plan-orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clone Helper for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Foreground git clone with idempotency and helpful auth error messages.
|
|
5
|
+
*/
|
|
6
|
+
import type { ParsedSource } from './source-parser.js';
|
|
7
|
+
export interface CloneOptions {
|
|
8
|
+
branch?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface CloneResult {
|
|
11
|
+
/** true if clone happened, false if skipped */
|
|
12
|
+
cloned: boolean;
|
|
13
|
+
/** absolute path to the repo directory */
|
|
14
|
+
repoPath: string;
|
|
15
|
+
/** reason clone was skipped, if applicable */
|
|
16
|
+
skippedReason?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Clone a repository to targetDir.
|
|
20
|
+
* Idempotent: if targetDir/.git already exists, skips clone.
|
|
21
|
+
*/
|
|
22
|
+
export declare function cloneRepo(source: ParsedSource, targetDir: string, options?: CloneOptions): Promise<CloneResult>;
|
|
23
|
+
//# sourceMappingURL=clone-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-repo.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/clone-repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,+CAA+C;IAC/C,MAAM,EAAE,OAAO,CAAC;IAChB,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAWD;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,YAAY,EACpB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,WAAW,CAAC,CA0CtB"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Clone Helper for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Foreground git clone with idempotency and helpful auth error messages.
|
|
5
|
+
*/
|
|
6
|
+
import * as path from 'path';
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import { execFileNoThrow } from '../../../utils/execFileNoThrow.js';
|
|
9
|
+
const AUTH_ERROR_PATTERNS = [
|
|
10
|
+
'Permission denied (publickey)',
|
|
11
|
+
'Authentication failed',
|
|
12
|
+
'Repository not found',
|
|
13
|
+
'could not read Username',
|
|
14
|
+
'Invalid username or password',
|
|
15
|
+
'remote: Repository not found',
|
|
16
|
+
];
|
|
17
|
+
/**
|
|
18
|
+
* Clone a repository to targetDir.
|
|
19
|
+
* Idempotent: if targetDir/.git already exists, skips clone.
|
|
20
|
+
*/
|
|
21
|
+
export async function cloneRepo(source, targetDir, options = {}) {
|
|
22
|
+
// Idempotency check
|
|
23
|
+
if (fs.existsSync(path.join(targetDir, '.git'))) {
|
|
24
|
+
return {
|
|
25
|
+
cloned: false,
|
|
26
|
+
repoPath: targetDir,
|
|
27
|
+
skippedReason: 'already exists',
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
const parentDir = path.dirname(targetDir);
|
|
31
|
+
const repoName = path.basename(targetDir);
|
|
32
|
+
await fs.promises.mkdir(parentDir, { recursive: true });
|
|
33
|
+
const args = ['clone', source.cloneUrl, repoName];
|
|
34
|
+
if (options.branch) {
|
|
35
|
+
args.push('--branch', options.branch);
|
|
36
|
+
}
|
|
37
|
+
const result = await execFileNoThrow('git', args, { cwd: parentDir });
|
|
38
|
+
if (result.exitCode !== 0) {
|
|
39
|
+
const stderr = result.stderr || '';
|
|
40
|
+
const isAuthError = AUTH_ERROR_PATTERNS.some(p => stderr.includes(p));
|
|
41
|
+
if (isAuthError) {
|
|
42
|
+
throw new Error(`Authentication failed cloning ${source.cloneUrl}\n\n` +
|
|
43
|
+
'To fix:\n' +
|
|
44
|
+
' • HTTPS: run `gh auth login` or set GH_TOKEN env var\n' +
|
|
45
|
+
' • SSH: ensure your SSH key is added to GitHub\n' +
|
|
46
|
+
`\nGit output: ${stderr.trim()}`);
|
|
47
|
+
}
|
|
48
|
+
throw new Error(`Failed to clone ${source.cloneUrl}\n${stderr.trim() || result.stdout.trim()}`);
|
|
49
|
+
}
|
|
50
|
+
return { cloned: true, repoPath: targetDir };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=clone-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clone-repo.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/clone-repo.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAgBpE,MAAM,mBAAmB,GAAG;IAC1B,+BAA+B;IAC/B,uBAAuB;IACvB,sBAAsB;IACtB,yBAAyB;IACzB,8BAA8B;IAC9B,8BAA8B;CAC/B,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,MAAoB,EACpB,SAAiB,EACjB,UAAwB,EAAE;IAE1B,oBAAoB;IACpB,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QAChD,OAAO;YACL,MAAM,EAAE,KAAK;YACb,QAAQ,EAAE,SAAS;YACnB,aAAa,EAAE,gBAAgB;SAChC,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAE1C,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAExD,MAAM,IAAI,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,QAAS,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC,CAAC;IAEtE,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QAEtE,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CACb,iCAAiC,MAAM,CAAC,QAAQ,MAAM;gBACtD,WAAW;gBACX,0DAA0D;gBAC1D,mDAAmD;gBACnD,iBAAiB,MAAM,CAAC,IAAI,EAAE,EAAE,CACjC,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,KAAK,CACb,mBAAmB,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAC/E,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AAC/C,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register Helper for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Registers a repository in the umbrella config.json.
|
|
5
|
+
* Uses persistUmbrellaConfig for dedup-safe merges.
|
|
6
|
+
*/
|
|
7
|
+
export interface RegisterOptions {
|
|
8
|
+
prefix?: string;
|
|
9
|
+
role?: string;
|
|
10
|
+
githubUrl?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RegisterResult {
|
|
13
|
+
registered: boolean;
|
|
14
|
+
alreadyRegistered: boolean;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Register a repository in the umbrella config.
|
|
18
|
+
* Idempotent: if repo is already in childRepos by id, returns alreadyRegistered=true.
|
|
19
|
+
*/
|
|
20
|
+
export declare function registerRepo(projectRoot: string, owner: string, repoName: string, repoPath: string, options?: RegisterOptions): Promise<RegisterResult>;
|
|
21
|
+
//# sourceMappingURL=register-repo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-repo.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/register-repo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAsB,YAAY,CAChC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,eAAoB,GAC5B,OAAO,CAAC,cAAc,CAAC,CA+CzB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register Helper for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Registers a repository in the umbrella config.json.
|
|
5
|
+
* Uses persistUmbrellaConfig for dedup-safe merges.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'fs';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
import { persistUmbrellaConfig } from '../../../core/living-docs/umbrella-detector.js';
|
|
10
|
+
/**
|
|
11
|
+
* Register a repository in the umbrella config.
|
|
12
|
+
* Idempotent: if repo is already in childRepos by id, returns alreadyRegistered=true.
|
|
13
|
+
*/
|
|
14
|
+
export async function registerRepo(projectRoot, owner, repoName, repoPath, options = {}) {
|
|
15
|
+
const configPath = path.join(projectRoot, '.specweave', 'config.json');
|
|
16
|
+
// Check for existing entry
|
|
17
|
+
if (fs.existsSync(configPath)) {
|
|
18
|
+
try {
|
|
19
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
20
|
+
const existing = config.umbrella?.childRepos?.find((r) => r.id === repoName);
|
|
21
|
+
if (existing) {
|
|
22
|
+
return { registered: false, alreadyRegistered: true };
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Proceed with registration if config is unreadable
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const prefix = options.prefix || repoName.substring(0, 3).toUpperCase();
|
|
30
|
+
// Normalize path separators to forward slashes for config.json
|
|
31
|
+
const normalizedPath = repoPath.replace(/\\/g, '/');
|
|
32
|
+
// Base registration via persistUmbrellaConfig (handles dedup-safe merge).
|
|
33
|
+
// persistUmbrellaConfig uses a minimal ChildRepoConfig without prefix/role/githubUrl;
|
|
34
|
+
// those are patched via read-modify-write below (same pattern as addRepoToUmbrella).
|
|
35
|
+
await persistUmbrellaConfig(projectRoot, {
|
|
36
|
+
enabled: true,
|
|
37
|
+
childRepos: [{
|
|
38
|
+
id: repoName,
|
|
39
|
+
path: normalizedPath,
|
|
40
|
+
name: repoName,
|
|
41
|
+
}],
|
|
42
|
+
});
|
|
43
|
+
// Post-patch prefix, role, and githubUrl
|
|
44
|
+
try {
|
|
45
|
+
const rawConfig = JSON.parse(fs.readFileSync(configPath, 'utf-8'));
|
|
46
|
+
const repo = rawConfig.umbrella?.childRepos?.find((r) => r.id === repoName);
|
|
47
|
+
if (repo) {
|
|
48
|
+
repo.prefix = prefix;
|
|
49
|
+
if (options.role)
|
|
50
|
+
repo.role = options.role;
|
|
51
|
+
if (options.githubUrl)
|
|
52
|
+
repo.githubUrl = options.githubUrl;
|
|
53
|
+
await fs.promises.writeFile(configPath, JSON.stringify(rawConfig, null, 2));
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Non-fatal: base registration succeeded
|
|
58
|
+
}
|
|
59
|
+
return { registered: true, alreadyRegistered: false };
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=register-repo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-repo.js","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/register-repo.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAavF;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,WAAmB,EACnB,KAAa,EACb,QAAgB,EAChB,QAAgB,EAChB,UAA2B,EAAE;IAE7B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,EAAE,aAAa,CAAC,CAAC;IAEvE,2BAA2B;IAC3B,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;YAClF,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;YACxD,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,oDAAoD;QACtD,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxE,+DAA+D;IAC/D,MAAM,cAAc,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEpD,0EAA0E;IAC1E,sFAAsF;IACtF,qFAAqF;IACrF,MAAM,qBAAqB,CAAC,WAAW,EAAE;QACvC,OAAO,EAAE,IAAI;QACb,UAAU,EAAE,CAAC;gBACX,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,QAAQ;aACf,CAAC;KACH,CAAC,CAAC;IAEH,yCAAyC;IACzC,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;QACnE,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACjF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;YACrB,IAAI,OAAO,CAAC,IAAI;gBAAE,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;YAC3C,IAAI,OAAO,CAAC,SAAS;gBAAE,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;YAC1D,MAAM,EAAE,CAAC,QAAQ,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAC9E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yCAAyC;IAC3C,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,iBAAiB,EAAE,KAAK,EAAE,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source Parser for `specweave get`
|
|
3
|
+
*
|
|
4
|
+
* Parses the <source> argument into a structured type:
|
|
5
|
+
* - GitHub shorthand: owner/repo
|
|
6
|
+
* - GitHub HTTPS URL: https://github.com/owner/repo[.git]
|
|
7
|
+
* - GitHub SSH URL: git@github.com:owner/repo[.git]
|
|
8
|
+
* - Generic git URL: https://other-host.com/org/repo
|
|
9
|
+
* - Local path: ./path, /absolute/path, ../relative
|
|
10
|
+
*/
|
|
11
|
+
export type SourceType = 'github' | 'git' | 'local';
|
|
12
|
+
export interface ParsedSource {
|
|
13
|
+
type: SourceType;
|
|
14
|
+
/** GitHub owner or org, extracted from URL or git remote */
|
|
15
|
+
owner: string;
|
|
16
|
+
/** Repository name (no .git suffix) */
|
|
17
|
+
repo: string;
|
|
18
|
+
/** Full clone URL (undefined for local) */
|
|
19
|
+
cloneUrl?: string;
|
|
20
|
+
/** Resolved absolute path (only for local) */
|
|
21
|
+
absolutePath?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Parse <source> argument into a structured ParsedSource.
|
|
25
|
+
* Throws with a descriptive message if the input is unrecognizable.
|
|
26
|
+
*/
|
|
27
|
+
export declare function parseSource(source: string): ParsedSource;
|
|
28
|
+
//# sourceMappingURL=source-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-parser.d.ts","sourceRoot":"","sources":["../../../../../src/cli/helpers/get/source-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,KAAK,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,UAAU,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CA0FxD"}
|