@vibe-agent-toolkit/cli 0.1.38 → 0.1.39-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -3
- package/dist/commands/audit/git-url-clone.d.ts +1 -1
- package/dist/commands/audit/git-url-clone.d.ts.map +1 -1
- package/dist/commands/audit/git-url-clone.js +3 -67
- package/dist/commands/audit/git-url-clone.js.map +1 -1
- package/dist/commands/audit/hierarchical-output.d.ts +2 -1
- package/dist/commands/audit/hierarchical-output.d.ts.map +1 -1
- package/dist/commands/audit/hierarchical-output.js.map +1 -1
- package/dist/commands/audit.d.ts.map +1 -1
- package/dist/commands/audit.js +1 -2
- package/dist/commands/audit.js.map +1 -1
- package/dist/commands/claude/marketplace/git-publish.d.ts +5 -12
- package/dist/commands/claude/marketplace/git-publish.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/git-publish.js +7 -80
- package/dist/commands/claude/marketplace/git-publish.js.map +1 -1
- package/dist/commands/claude/marketplace/publish-tree.d.ts +12 -4
- package/dist/commands/claude/marketplace/publish-tree.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/publish-tree.js +54 -24
- package/dist/commands/claude/marketplace/publish-tree.js.map +1 -1
- package/dist/commands/claude/marketplace/publish.d.ts.map +1 -1
- package/dist/commands/claude/marketplace/publish.js +14 -39
- package/dist/commands/claude/marketplace/publish.js.map +1 -1
- package/dist/commands/claude/marketplace/validate.js.map +1 -1
- package/dist/commands/claude/plugin/build.d.ts.map +1 -1
- package/dist/commands/claude/plugin/build.js +68 -4
- package/dist/commands/claude/plugin/build.js.map +1 -1
- package/dist/commands/consistency-check.d.ts +13 -0
- package/dist/commands/consistency-check.d.ts.map +1 -1
- package/dist/commands/consistency-check.js +98 -1
- package/dist/commands/consistency-check.js.map +1 -1
- package/dist/commands/corpus/runner.d.ts.map +1 -1
- package/dist/commands/corpus/runner.js +1 -2
- package/dist/commands/corpus/runner.js.map +1 -1
- package/dist/commands/corpus/seed.d.ts +24 -0
- package/dist/commands/corpus/seed.d.ts.map +1 -1
- package/dist/commands/corpus/seed.js +5 -0
- package/dist/commands/corpus/seed.js.map +1 -1
- package/dist/commands/resources/index.d.ts.map +1 -1
- package/dist/commands/resources/index.js +4 -1
- package/dist/commands/resources/index.js.map +1 -1
- package/dist/commands/resources/validate.d.ts.map +1 -1
- package/dist/commands/resources/validate.js +155 -112
- package/dist/commands/resources/validate.js.map +1 -1
- package/dist/commands/skill/index.d.ts.map +1 -1
- package/dist/commands/skill/index.js +2 -0
- package/dist/commands/skill/index.js.map +1 -1
- package/dist/commands/skill/review.js.map +1 -1
- package/dist/commands/skill/test/configure.d.ts +22 -0
- package/dist/commands/skill/test/configure.d.ts.map +1 -0
- package/dist/commands/skill/test/configure.js +127 -0
- package/dist/commands/skill/test/configure.js.map +1 -0
- package/dist/commands/skill/test/index.d.ts +6 -0
- package/dist/commands/skill/test/index.d.ts.map +1 -0
- package/dist/commands/skill/test/index.js +16 -0
- package/dist/commands/skill/test/index.js.map +1 -0
- package/dist/commands/skill/test/run.d.ts +40 -0
- package/dist/commands/skill/test/run.d.ts.map +1 -0
- package/dist/commands/skill/test/run.js +381 -0
- package/dist/commands/skill/test/run.js.map +1 -0
- package/dist/commands/skills/skill-discovery.d.ts +9 -2
- package/dist/commands/skills/skill-discovery.d.ts.map +1 -1
- package/dist/commands/skills/skill-discovery.js +83 -18
- package/dist/commands/skills/skill-discovery.js.map +1 -1
- package/dist/utils/verdict-helpers.d.ts +2 -1
- package/dist/utils/verdict-helpers.d.ts.map +1 -1
- package/dist/utils/verdict-helpers.js +1 -1
- package/dist/utils/verdict-helpers.js.map +1 -1
- package/docs/resources.md +7 -3
- package/package.json +11 -11
- package/dist/commands/claude/marketplace/tag-utils.d.ts +0 -11
- package/dist/commands/claude/marketplace/tag-utils.d.ts.map +0 -1
- package/dist/commands/claude/marketplace/tag-utils.js +0 -17
- package/dist/commands/claude/marketplace/tag-utils.js.map +0 -1
- package/dist/utils/git-url.d.ts +0 -43
- package/dist/utils/git-url.d.ts.map +0 -1
- package/dist/utils/git-url.js +0 -135
- package/dist/utils/git-url.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"verdict-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACvF,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC/B,MAAM,kCAAkC,CAAC;AAC1C,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,OAAO,EACb,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,eAAe,CAUlF;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,SAAS,WAAW,EAAE,EACpC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAiBnB;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,SAAS,EAChD,eAAe,EAAE,MAAM,GACtB,IAAI,CAgBN"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* nor in marketplace (which knows nothing about config-level packaging
|
|
13
13
|
* options).
|
|
14
14
|
*/
|
|
15
|
-
import { CODE_REGISTRY
|
|
15
|
+
import { CODE_REGISTRY } from '@vibe-agent-toolkit/agent-schema';
|
|
16
16
|
import { computeVerdicts, resolveEffectiveTargets, } from '@vibe-agent-toolkit/claude-marketplace';
|
|
17
17
|
/**
|
|
18
18
|
* Convert a verdict into a ValidationIssue using CODE_REGISTRY for severity,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verdict-helpers.js","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"verdict-helpers.js","sourceRoot":"","sources":["../../src/utils/verdict-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,aAAa,EAAwB,MAAM,kCAAkC,CAAC;AAKvF,OAAO,EACL,eAAe,EACf,uBAAuB,GAGxB,MAAM,wCAAwC,CAAC;AAEhD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,OAAgB,EAAE,QAAgB;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,eAAe;QAC/B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ;QACR,GAAG,EAAE,KAAK,CAAC,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS;KAC3B,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,YAAoC,EACpC,aAAgD,EAChD,QAAgB;IAEhB,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,gBAAgB,GAAG,uBAAuB,CAAC;QAC/C,aAAa,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;QAC3E,aAAa,EAAE,SAAS;QACxB,kBAAkB,EAAE,SAAS;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,eAAe,CAAC;QAC/B,YAAY,EAAE,CAAC,GAAG,YAAY,CAAC;QAC/B,OAAO,EAAE,gBAAgB;KAC1B,CAAC,CAAC;IAEH,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,mBAAmB,CACjC,MAAiC,EACjC,aAAgD,EAChD,eAAuB;IAEvB,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;IACjG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO;IACT,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YAC/B,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACxC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC;IAC1B,CAAC;AACH,CAAC"}
|
package/docs/resources.md
CHANGED
|
@@ -172,10 +172,14 @@ resources:
|
|
|
172
172
|
exclude:
|
|
173
173
|
- "node_modules/**"
|
|
174
174
|
- "**/test/fixtures/**"
|
|
175
|
+
# Optional: per-code severity overrides (keys are validation codes,
|
|
176
|
+
# values are error | warning | info | ignore). External-URL findings
|
|
177
|
+
# default to `warning` (non-fatal), so a dead external link won't fail
|
|
178
|
+
# the build unless you raise its severity here.
|
|
175
179
|
validation:
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
180
|
+
severity:
|
|
181
|
+
EXTERNAL_URL_DEAD: ignore # don't fail the build on dead external links
|
|
182
|
+
FRONTMATTER_SCHEMA_ERROR: error
|
|
179
183
|
```
|
|
180
184
|
|
|
181
185
|
## Integration with vibe-validate
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.39-rc.10",
|
|
4
4
|
"description": "Command-line interface for vibe-agent-toolkit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -41,16 +41,16 @@
|
|
|
41
41
|
"//dependencies-note": "DO NOT add example agent packages or adopter packages here. Adopter packages (like vat-development-agents) depend on the CLI binary at build time — declaring them as deps creates a circular build dependency. They are built in a second turbo pass via package#task overrides in turbo.json.",
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@anthropic-ai/sdk": "^0.71.2",
|
|
44
|
-
"@vibe-agent-toolkit/agent-config": "0.1.
|
|
45
|
-
"@vibe-agent-toolkit/agent-schema": "0.1.
|
|
46
|
-
"@vibe-agent-toolkit/agent-skills": "0.1.
|
|
47
|
-
"@vibe-agent-toolkit/claude-marketplace": "0.1.
|
|
48
|
-
"@vibe-agent-toolkit/discovery": "0.1.
|
|
49
|
-
"@vibe-agent-toolkit/gateway-mcp": "0.1.
|
|
50
|
-
"@vibe-agent-toolkit/rag": "0.1.
|
|
51
|
-
"@vibe-agent-toolkit/rag-lancedb": "0.1.
|
|
52
|
-
"@vibe-agent-toolkit/resources": "0.1.
|
|
53
|
-
"@vibe-agent-toolkit/utils": "0.1.
|
|
44
|
+
"@vibe-agent-toolkit/agent-config": "0.1.39-rc.10",
|
|
45
|
+
"@vibe-agent-toolkit/agent-schema": "0.1.39-rc.10",
|
|
46
|
+
"@vibe-agent-toolkit/agent-skills": "0.1.39-rc.10",
|
|
47
|
+
"@vibe-agent-toolkit/claude-marketplace": "0.1.39-rc.10",
|
|
48
|
+
"@vibe-agent-toolkit/discovery": "0.1.39-rc.10",
|
|
49
|
+
"@vibe-agent-toolkit/gateway-mcp": "0.1.39-rc.10",
|
|
50
|
+
"@vibe-agent-toolkit/rag": "0.1.39-rc.10",
|
|
51
|
+
"@vibe-agent-toolkit/rag-lancedb": "0.1.39-rc.10",
|
|
52
|
+
"@vibe-agent-toolkit/resources": "0.1.39-rc.10",
|
|
53
|
+
"@vibe-agent-toolkit/utils": "0.1.39-rc.10",
|
|
54
54
|
"adm-zip": "^0.5.16",
|
|
55
55
|
"commander": "^12.1.0",
|
|
56
56
|
"picomatch": "^4.0.3",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format a per-plugin source-repo tag name for the multi-plugin marketplace
|
|
3
|
-
* publish flow.
|
|
4
|
-
*
|
|
5
|
-
* Plugin-name validation (`/^[a-z0-9][a-z0-9-]*$/`) is enforced upstream by
|
|
6
|
-
* `ClaudeMarketplacePluginEntrySchema`; semver validation is enforced upstream
|
|
7
|
-
* by the schema's `version` refine. This formatter only enforces non-empty
|
|
8
|
-
* inputs.
|
|
9
|
-
*/
|
|
10
|
-
export declare function pluginTagName(name: string, version: string): string;
|
|
11
|
-
//# sourceMappingURL=tag-utils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tag-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/claude/marketplace/tag-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAInE"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Format a per-plugin source-repo tag name for the multi-plugin marketplace
|
|
3
|
-
* publish flow.
|
|
4
|
-
*
|
|
5
|
-
* Plugin-name validation (`/^[a-z0-9][a-z0-9-]*$/`) is enforced upstream by
|
|
6
|
-
* `ClaudeMarketplacePluginEntrySchema`; semver validation is enforced upstream
|
|
7
|
-
* by the schema's `version` refine. This formatter only enforces non-empty
|
|
8
|
-
* inputs.
|
|
9
|
-
*/
|
|
10
|
-
export function pluginTagName(name, version) {
|
|
11
|
-
if (!name)
|
|
12
|
-
throw new Error('Plugin name is required for tag naming');
|
|
13
|
-
if (!version)
|
|
14
|
-
throw new Error('Version is required for tag naming');
|
|
15
|
-
return `${name}-v${version}`;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=tag-utils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tag-utils.js","sourceRoot":"","sources":["../../../../src/commands/claude/marketplace/tag-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAe;IACzD,IAAI,CAAC,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACrE,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACpE,OAAO,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC;AAC/B,CAAC"}
|
package/dist/utils/git-url.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Parsed representation of a git URL accepted by `vat audit`.
|
|
3
|
-
*
|
|
4
|
-
* - `cloneUrl` is the URL passed to `git clone` (after stripping ref/subpath
|
|
5
|
-
* fragments and after expanding GitHub shorthand to a full HTTPS URL).
|
|
6
|
-
* - `ref` is an optional branch or tag name (deep commit SHAs are not
|
|
7
|
-
* guaranteed to work with shallow clone — see design spec for details).
|
|
8
|
-
* - `subpath` is an optional subdirectory within the cloned repo to audit.
|
|
9
|
-
*/
|
|
10
|
-
export interface ParsedGitUrl {
|
|
11
|
-
cloneUrl: string;
|
|
12
|
-
ref?: string;
|
|
13
|
-
subpath?: string;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Parse a string into a {@link ParsedGitUrl}.
|
|
17
|
-
*
|
|
18
|
-
* Accepted forms:
|
|
19
|
-
* - `https://host/owner/repo.git`
|
|
20
|
-
* - `https://host/owner/repo.git#ref`
|
|
21
|
-
* - `https://host/owner/repo.git#ref:subpath`
|
|
22
|
-
* - `https://github.com/owner/repo/tree/<ref>/<subpath>` (GitHub web URL)
|
|
23
|
-
* - `owner/repo` (GitHub shorthand → expanded to HTTPS)
|
|
24
|
-
* - `git@host:owner/repo.git`
|
|
25
|
-
* - `ssh://git@host/owner/repo.git`
|
|
26
|
-
*
|
|
27
|
-
* Throws on malformed input.
|
|
28
|
-
*/
|
|
29
|
-
export declare function parseGitUrl(input: string): ParsedGitUrl;
|
|
30
|
-
/**
|
|
31
|
-
* Detect whether a string should be treated as a git URL (for the polymorphic
|
|
32
|
-
* `[git-url-or-path]` audit argument). True for:
|
|
33
|
-
* - http(s):// URLs
|
|
34
|
-
* - ssh:// URLs
|
|
35
|
-
* - file:// URLs (used by integration tests against local bare repos)
|
|
36
|
-
* - git@host:path scp-style URLs
|
|
37
|
-
* - GitHub shorthand `owner/repo` (strict — no extensions, no extra slashes)
|
|
38
|
-
*
|
|
39
|
-
* Everything else (including relative paths like `./foo/bar`, absolute paths,
|
|
40
|
-
* and multi-segment paths like `foo/bar/baz`) is treated as a filesystem path.
|
|
41
|
-
*/
|
|
42
|
-
export declare function isGitUrl(input: string): boolean;
|
|
43
|
-
//# sourceMappingURL=git-url.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-url.d.ts","sourceRoot":"","sources":["../../src/utils/git-url.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,CAgEvD;AASD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAmB/C"}
|
package/dist/utils/git-url.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Split a URL with an optional `#ref[:subpath]` fragment into the base URL
|
|
3
|
-
* and fragment components. Keeps the fragment-handling logic local so the
|
|
4
|
-
* per-form regexes can stay simple and anchored.
|
|
5
|
-
*/
|
|
6
|
-
function splitFragment(input) {
|
|
7
|
-
const hashIndex = input.indexOf('#');
|
|
8
|
-
if (hashIndex === -1) {
|
|
9
|
-
return { base: input };
|
|
10
|
-
}
|
|
11
|
-
const base = input.slice(0, hashIndex);
|
|
12
|
-
const fragment = input.slice(hashIndex + 1);
|
|
13
|
-
const colonIndex = fragment.indexOf(':');
|
|
14
|
-
if (colonIndex === -1) {
|
|
15
|
-
return { base, ref: fragment };
|
|
16
|
-
}
|
|
17
|
-
return {
|
|
18
|
-
base,
|
|
19
|
-
ref: fragment.slice(0, colonIndex),
|
|
20
|
-
subpath: fragment.slice(colonIndex + 1),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Parse a string into a {@link ParsedGitUrl}.
|
|
25
|
-
*
|
|
26
|
-
* Accepted forms:
|
|
27
|
-
* - `https://host/owner/repo.git`
|
|
28
|
-
* - `https://host/owner/repo.git#ref`
|
|
29
|
-
* - `https://host/owner/repo.git#ref:subpath`
|
|
30
|
-
* - `https://github.com/owner/repo/tree/<ref>/<subpath>` (GitHub web URL)
|
|
31
|
-
* - `owner/repo` (GitHub shorthand → expanded to HTTPS)
|
|
32
|
-
* - `git@host:owner/repo.git`
|
|
33
|
-
* - `ssh://git@host/owner/repo.git`
|
|
34
|
-
*
|
|
35
|
-
* Throws on malformed input.
|
|
36
|
-
*/
|
|
37
|
-
export function parseGitUrl(input) {
|
|
38
|
-
const trimmed = input.trim();
|
|
39
|
-
if (trimmed === '') {
|
|
40
|
-
throw new Error(`Invalid git URL or path: <empty>.`);
|
|
41
|
-
}
|
|
42
|
-
// file:// form: file:///path/to/repo[#ref[:subpath]] — used primarily by
|
|
43
|
-
// integration tests that clone a local bare repo. `git clone` accepts
|
|
44
|
-
// file:// natively.
|
|
45
|
-
if (trimmed.startsWith('file://')) {
|
|
46
|
-
const { base, ref, subpath } = splitFragment(trimmed);
|
|
47
|
-
return buildParsed(base, ref, subpath);
|
|
48
|
-
}
|
|
49
|
-
// HTTPS .git form: https://host/path.git[#ref[:subpath]]
|
|
50
|
-
if (/^https?:\/\//.test(trimmed)) {
|
|
51
|
-
const { base, ref, subpath } = splitFragment(trimmed);
|
|
52
|
-
if (base.endsWith('.git')) {
|
|
53
|
-
return buildParsed(base, ref, subpath);
|
|
54
|
-
}
|
|
55
|
-
// GitHub web URL: https://github.com/owner/repo/tree/<ref>[/<subpath>]
|
|
56
|
-
const ghWeb =
|
|
57
|
-
// eslint-disable-next-line security/detect-unsafe-regex -- Anchored ^...$ with bounded character classes; the only variable-length group is the trailing subpath. Safe from ReDoS.
|
|
58
|
-
/^https:\/\/github\.com\/([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)\/tree\/([^/]+)(?:\/(.+))?$/.exec(trimmed);
|
|
59
|
-
if (ghWeb) {
|
|
60
|
-
const owner = ghWeb[1] ?? '';
|
|
61
|
-
const repo = ghWeb[2] ?? '';
|
|
62
|
-
const webRef = ghWeb[3];
|
|
63
|
-
const webSubpath = ghWeb[4];
|
|
64
|
-
return buildParsed(`https://github.com/${owner}/${repo}.git`, webRef, webSubpath);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
// SSH ssh:// form: ssh://git@host/path[#ref[:subpath]]
|
|
68
|
-
if (trimmed.startsWith('ssh://')) {
|
|
69
|
-
const { base, ref, subpath } = splitFragment(trimmed);
|
|
70
|
-
return buildParsed(base, ref, subpath);
|
|
71
|
-
}
|
|
72
|
-
// SSH scp-like form: git@host:owner/repo.git[#ref[:subpath]]
|
|
73
|
-
// Anchored, no alternation with nested quantifiers — safe from ReDoS.
|
|
74
|
-
if (/^[^@\s]+@[^:\s]+:[^#\s]+/.test(trimmed)) {
|
|
75
|
-
const { base, ref, subpath } = splitFragment(trimmed);
|
|
76
|
-
return buildParsed(base, ref, subpath);
|
|
77
|
-
}
|
|
78
|
-
// GitHub shorthand: owner/repo[#ref[:subpath]] (single slash in base)
|
|
79
|
-
const { base, ref, subpath } = splitFragment(trimmed);
|
|
80
|
-
const shorthand = /^([A-Za-z0-9_.-]+)\/([A-Za-z0-9_.-]+)$/.exec(base);
|
|
81
|
-
if (shorthand) {
|
|
82
|
-
const owner = shorthand[1] ?? '';
|
|
83
|
-
const repo = shorthand[2] ?? '';
|
|
84
|
-
return buildParsed(`https://github.com/${owner}/${repo}.git`, ref, subpath);
|
|
85
|
-
}
|
|
86
|
-
throw new Error(`Invalid git URL or path: ${input}. Accepted forms: ` +
|
|
87
|
-
`https://<host>/<owner>/<repo>.git, ` +
|
|
88
|
-
`git@<host>:<owner>/<repo>.git, ` +
|
|
89
|
-
`<owner>/<repo>, or a local filesystem path.`);
|
|
90
|
-
}
|
|
91
|
-
function buildParsed(cloneUrl, ref, subpath) {
|
|
92
|
-
const result = { cloneUrl };
|
|
93
|
-
if (ref !== undefined && ref !== '')
|
|
94
|
-
result.ref = ref;
|
|
95
|
-
if (subpath !== undefined && subpath !== '')
|
|
96
|
-
result.subpath = subpath;
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
/**
|
|
100
|
-
* Detect whether a string should be treated as a git URL (for the polymorphic
|
|
101
|
-
* `[git-url-or-path]` audit argument). True for:
|
|
102
|
-
* - http(s):// URLs
|
|
103
|
-
* - ssh:// URLs
|
|
104
|
-
* - file:// URLs (used by integration tests against local bare repos)
|
|
105
|
-
* - git@host:path scp-style URLs
|
|
106
|
-
* - GitHub shorthand `owner/repo` (strict — no extensions, no extra slashes)
|
|
107
|
-
*
|
|
108
|
-
* Everything else (including relative paths like `./foo/bar`, absolute paths,
|
|
109
|
-
* and multi-segment paths like `foo/bar/baz`) is treated as a filesystem path.
|
|
110
|
-
*/
|
|
111
|
-
export function isGitUrl(input) {
|
|
112
|
-
const trimmed = input.trim();
|
|
113
|
-
if (trimmed === '')
|
|
114
|
-
return false;
|
|
115
|
-
if (/^https?:\/\//.test(trimmed))
|
|
116
|
-
return true;
|
|
117
|
-
if (trimmed.startsWith('ssh://'))
|
|
118
|
-
return true;
|
|
119
|
-
if (trimmed.startsWith('file://'))
|
|
120
|
-
return true;
|
|
121
|
-
// Match the same scp-style pattern parseGitUrl uses, including the
|
|
122
|
-
// requirement of a non-empty path segment after the colon. Without the
|
|
123
|
-
// trailing `[^#\s]+`, `isGitUrl` would accept inputs like `foo@host:`
|
|
124
|
-
// that parseGitUrl then rejects with a less-helpful error.
|
|
125
|
-
if (/^[^@\s]+@[^:\s]+:[^#\s]+/.test(trimmed))
|
|
126
|
-
return true;
|
|
127
|
-
// Strict GitHub shorthand: exactly two segments, no extension on second,
|
|
128
|
-
// no path separators beyond the single /. Strip any `#ref[:subpath]`
|
|
129
|
-
// fragment first so `owner/repo#main` and `owner/repo#main:sub` are
|
|
130
|
-
// recognized — `parseGitUrl` handles fragments uniformly across forms.
|
|
131
|
-
const hashIndex = trimmed.indexOf('#');
|
|
132
|
-
const base = hashIndex === -1 ? trimmed : trimmed.slice(0, hashIndex);
|
|
133
|
-
return /^[A-Za-z0-9_-]+\/[A-Za-z0-9_-]+$/.test(base);
|
|
134
|
-
}
|
|
135
|
-
//# sourceMappingURL=git-url.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"git-url.js","sourceRoot":"","sources":["../../src/utils/git-url.ts"],"names":[],"mappings":"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"}
|