@agentxm/extension-model 0.31.1 → 0.32.0
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/dist/src/unstable/extensions/archival.d.ts +16 -0
- package/dist/src/unstable/extensions/archival.js +19 -0
- package/dist/src/unstable/extensions/common.d.ts +148 -0
- package/dist/src/unstable/extensions/common.js +66 -1
- package/dist/src/unstable/extensions/index.d.ts +1 -1
- package/dist/src/unstable/extensions/index.js +1 -1
- package/dist/src/unstable/extensions/installable-types.d.ts +4 -4
- package/dist/src/unstable/extensions/installable-types.js +9 -5
- package/dist/src/unstable/extensions/refs/pack.d.ts +20 -3
- package/dist/src/unstable/extensions/refs/ref-base.d.ts +6 -2
- package/dist/src/unstable/extensions/universal-skills-dir.d.ts +2 -2
- package/dist/src/unstable/extensions/universal-skills-dir.js +8 -2
- package/dist/src/unstable/hooks/manifest-schema.js +1 -1
- package/dist/src/unstable/packs/manifest-schema.d.ts +7 -1
- package/dist/src/unstable/packs/manifest-schema.js +3 -3
- package/dist/src/unstable/recommendations/agent-extensions.d.ts +89 -0
- package/dist/src/unstable/recommendations/agent-extensions.js +79 -0
- package/dist/src/unstable/sources/parser.d.ts +2 -1
- package/dist/src/unstable/sources/parser.js +17 -7
- package/dist/src/unstable/sources/printer.js +32 -9
- package/dist/src/unstable/sources/types.d.ts +8 -48
- package/dist/src/unstable/sources/types.js +1 -9
- package/dist/src/unstable/workspace-scope.d.ts +1 -1
- package/dist/src/unstable/workspace-scope.js +1 -1
- package/package.json +13 -5
- package/dist/src/unstable/release-channel.d.ts +0 -156
- package/dist/src/unstable/release-channel.js +0 -92
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @experimental This API is unstable and may change without notice.
|
|
5
5
|
*/
|
|
6
6
|
import * as Schema from "effect/Schema";
|
|
7
|
-
import { CanonicalHookEventIdSchema, CanonicalHookToolIdSchema, HookBlockOutcomeSchema, HookModifyOperationSchema, } from "../agent-capabilities/
|
|
7
|
+
import { CanonicalHookEventIdSchema, CanonicalHookToolIdSchema, HookBlockOutcomeSchema, HookModifyOperationSchema, } from "../agent-capabilities/schema.js";
|
|
8
8
|
import { CommonManifestBaseFields, ExtensionNameSchema, NonPackManifestFields, } from "../extensions/common.js";
|
|
9
9
|
export const HOOK_MANIFEST_FILENAME = "hook.json";
|
|
10
10
|
export const HOOK_EXTENSION_DIR = "hooks";
|
|
@@ -18,7 +18,13 @@ export declare const PACK_MANIFEST_SCHEMA_URL = "https://axm.sh/schemas/pack.sch
|
|
|
18
18
|
export declare const PackManifestSchema: Schema.Struct<{
|
|
19
19
|
readonly type: Schema.Literal<"pack">;
|
|
20
20
|
readonly name: Schema.brand<Schema.NonEmptyString, "ExtensionName">;
|
|
21
|
-
readonly dependencies: Schema.$Record<Schema.String, Schema.brand<Schema.NonEmptyString, "VersionRange"
|
|
21
|
+
readonly dependencies: Schema.$Record<Schema.String, Schema.Union<readonly [Schema.brand<Schema.NonEmptyString, "VersionRange">, Schema.Struct<{
|
|
22
|
+
readonly source: Schema.Struct<{
|
|
23
|
+
readonly type: Schema.Literal<"registry">;
|
|
24
|
+
readonly url: Schema.URLFromString;
|
|
25
|
+
}>;
|
|
26
|
+
readonly versionRange: Schema.brand<Schema.NonEmptyString, "VersionRange">;
|
|
27
|
+
}>]>>;
|
|
22
28
|
readonly publish: Schema.optional<Schema.Struct<{
|
|
23
29
|
readonly visibility: Schema.optional<Schema.Literals<readonly ["public", "private"]>>;
|
|
24
30
|
readonly ignore: Schema.optional<Schema.$Array<Schema.NonEmptyString>>;
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @experimental This API is unstable and may change without notice.
|
|
5
5
|
*/
|
|
6
6
|
import * as Schema from "effect/Schema";
|
|
7
|
-
import { CommonManifestBaseFields, ExtensionNameSchema,
|
|
7
|
+
import { CommonManifestBaseFields, ExtensionNameSchema, PackMemberConstraintMapSchema, } from "../extensions/common.js";
|
|
8
8
|
export const PACK_MANIFEST_FILENAME = "pack.json";
|
|
9
9
|
export const PACK_MANIFEST_SCHEMA_URL = "https://axm.sh/schemas/pack.schema.json";
|
|
10
10
|
/**
|
|
@@ -23,8 +23,8 @@ export const PackManifestSchema = Schema.Struct({
|
|
|
23
23
|
name: ExtensionNameSchema.pipe(Schema.annotateKey({ messageMissingKey: "pack name is required" }), Schema.annotate({
|
|
24
24
|
description: "Short name for this pack within its owner namespace. Combined with owner, forms the FQN @owner/packs/<name>.",
|
|
25
25
|
})),
|
|
26
|
-
dependencies:
|
|
27
|
-
description: "Install-time extension constraints. AXM resolves and installs a member version satisfying each range; `axm packs add` writes a `>=` lower bound rooted at the current resolved version, so members track their latest release without republishing the pack. Narrow a range by hand only to exclude a known-breaking member release
|
|
26
|
+
dependencies: PackMemberConstraintMapSchema.pipe(Schema.annotateKey({ messageMissingKey: "pack dependencies are required" }), Schema.annotate({
|
|
27
|
+
description: "Install-time extension constraints. A range inherits the Pack's source; an object may name an explicit Registry URL and versionRange. AXM resolves and installs a member version satisfying each range; `axm packs add` writes a `>=` lower bound rooted at the current resolved version, so members track their latest release without republishing the pack. Narrow a range by hand only to exclude a known-breaking member release. These constraints select installed extension versions, unlike companion-package recommendation ranges in `packages`, which are metadata only.",
|
|
28
28
|
})),
|
|
29
29
|
}).annotate({
|
|
30
30
|
identifier: "PackManifest",
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable package metadata for recommending agent extensions.
|
|
3
|
+
*
|
|
4
|
+
* @experimental This API is unstable and may change without notice.
|
|
5
|
+
*/
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
/** The Registry used by portable recommendations that omit an explicit source. */
|
|
8
|
+
export declare const AGENTXM_REGISTRY_URL = "https://registry.agentxm.ai";
|
|
9
|
+
export declare const AgentExtensionGitSourceSchema: Schema.Struct<{
|
|
10
|
+
readonly type: Schema.Literal<"git">;
|
|
11
|
+
readonly url: Schema.URLFromString;
|
|
12
|
+
readonly path: Schema.optionalKey<Schema.NonEmptyString>;
|
|
13
|
+
readonly revision: Schema.optionalKey<Schema.NonEmptyString>;
|
|
14
|
+
}>;
|
|
15
|
+
export declare const AgentExtensionRegistrySourceSchema: Schema.Struct<{
|
|
16
|
+
readonly type: Schema.Literal<"registry">;
|
|
17
|
+
readonly url: Schema.URLFromString;
|
|
18
|
+
}>;
|
|
19
|
+
export declare const AgentExtensionPathSourceSchema: Schema.Struct<{
|
|
20
|
+
readonly type: Schema.Literal<"path">;
|
|
21
|
+
readonly path: Schema.NonEmptyString;
|
|
22
|
+
}>;
|
|
23
|
+
export declare const AgentExtensionSourceSchema: Schema.Union<readonly [Schema.Struct<{
|
|
24
|
+
readonly type: Schema.Literal<"git">;
|
|
25
|
+
readonly url: Schema.URLFromString;
|
|
26
|
+
readonly path: Schema.optionalKey<Schema.NonEmptyString>;
|
|
27
|
+
readonly revision: Schema.optionalKey<Schema.NonEmptyString>;
|
|
28
|
+
}>, Schema.Struct<{
|
|
29
|
+
readonly type: Schema.Literal<"registry">;
|
|
30
|
+
readonly url: Schema.URLFromString;
|
|
31
|
+
}>, Schema.Struct<{
|
|
32
|
+
readonly type: Schema.Literal<"path">;
|
|
33
|
+
readonly path: Schema.NonEmptyString;
|
|
34
|
+
}>]>;
|
|
35
|
+
export type AgentExtensionSource = Schema.Schema.Type<typeof AgentExtensionSourceSchema>;
|
|
36
|
+
export declare const AgentExtensionRecommendationSchema: Schema.Union<readonly [Schema.Struct<{
|
|
37
|
+
readonly ref: Schema.String;
|
|
38
|
+
readonly source: Schema.optionalKey<Schema.Struct<{
|
|
39
|
+
readonly type: Schema.Literal<"registry">;
|
|
40
|
+
readonly url: Schema.URLFromString;
|
|
41
|
+
}>>;
|
|
42
|
+
readonly versionRange: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "VersionRange">>;
|
|
43
|
+
}>, Schema.Struct<{
|
|
44
|
+
readonly ref: Schema.String;
|
|
45
|
+
readonly source: Schema.Struct<{
|
|
46
|
+
readonly type: Schema.Literal<"git">;
|
|
47
|
+
readonly url: Schema.URLFromString;
|
|
48
|
+
readonly path: Schema.optionalKey<Schema.NonEmptyString>;
|
|
49
|
+
readonly revision: Schema.optionalKey<Schema.NonEmptyString>;
|
|
50
|
+
}>;
|
|
51
|
+
readonly versionRange: Schema.optionalKey<Schema.Never>;
|
|
52
|
+
}>, Schema.Struct<{
|
|
53
|
+
readonly ref: Schema.String;
|
|
54
|
+
readonly source: Schema.Struct<{
|
|
55
|
+
readonly type: Schema.Literal<"path">;
|
|
56
|
+
readonly path: Schema.NonEmptyString;
|
|
57
|
+
}>;
|
|
58
|
+
readonly versionRange: Schema.optionalKey<Schema.Never>;
|
|
59
|
+
}>]>;
|
|
60
|
+
export type AgentExtensionRecommendation = Schema.Schema.Type<typeof AgentExtensionRecommendationSchema>;
|
|
61
|
+
export declare const AgentExtensionsMetadataSchema: Schema.Struct<{
|
|
62
|
+
readonly $schema: Schema.optionalKey<Schema.String>;
|
|
63
|
+
readonly agentExtensions: Schema.$Array<Schema.Union<readonly [Schema.Struct<{
|
|
64
|
+
readonly ref: Schema.String;
|
|
65
|
+
readonly source: Schema.optionalKey<Schema.Struct<{
|
|
66
|
+
readonly type: Schema.Literal<"registry">;
|
|
67
|
+
readonly url: Schema.URLFromString;
|
|
68
|
+
}>>;
|
|
69
|
+
readonly versionRange: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "VersionRange">>;
|
|
70
|
+
}>, Schema.Struct<{
|
|
71
|
+
readonly ref: Schema.String;
|
|
72
|
+
readonly source: Schema.Struct<{
|
|
73
|
+
readonly type: Schema.Literal<"git">;
|
|
74
|
+
readonly url: Schema.URLFromString;
|
|
75
|
+
readonly path: Schema.optionalKey<Schema.NonEmptyString>;
|
|
76
|
+
readonly revision: Schema.optionalKey<Schema.NonEmptyString>;
|
|
77
|
+
}>;
|
|
78
|
+
readonly versionRange: Schema.optionalKey<Schema.Never>;
|
|
79
|
+
}>, Schema.Struct<{
|
|
80
|
+
readonly ref: Schema.String;
|
|
81
|
+
readonly source: Schema.Struct<{
|
|
82
|
+
readonly type: Schema.Literal<"path">;
|
|
83
|
+
readonly path: Schema.NonEmptyString;
|
|
84
|
+
}>;
|
|
85
|
+
readonly versionRange: Schema.optionalKey<Schema.Never>;
|
|
86
|
+
}>]>>;
|
|
87
|
+
}>;
|
|
88
|
+
export type AgentExtensionsMetadata = Schema.Schema.Type<typeof AgentExtensionsMetadataSchema>;
|
|
89
|
+
//# sourceMappingURL=agent-extensions.d.ts.map
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Portable package metadata for recommending agent extensions.
|
|
3
|
+
*
|
|
4
|
+
* @experimental This API is unstable and may change without notice.
|
|
5
|
+
*/
|
|
6
|
+
import * as Schema from "effect/Schema";
|
|
7
|
+
import { ExtensionFqnSchema } from "../extensions/common.js";
|
|
8
|
+
import { SourceRefSchema, SourceSubPathSchema } from "../sources/types.js";
|
|
9
|
+
import { VersionRangeSchema } from "../version-constraints/version-constraints.js";
|
|
10
|
+
/** The Registry used by portable recommendations that omit an explicit source. */
|
|
11
|
+
export const AGENTXM_REGISTRY_URL = "https://registry.agentxm.ai";
|
|
12
|
+
export const AgentExtensionGitSourceSchema = Schema.Struct({
|
|
13
|
+
type: Schema.Literal("git"),
|
|
14
|
+
url: Schema.URLFromString,
|
|
15
|
+
path: Schema.optionalKey(SourceSubPathSchema),
|
|
16
|
+
revision: Schema.optionalKey(SourceRefSchema),
|
|
17
|
+
}).annotate({
|
|
18
|
+
identifier: "AgentExtensionGitSource",
|
|
19
|
+
title: "Git recommendation source",
|
|
20
|
+
description: "A self-describing Git locator for a recommended extension.",
|
|
21
|
+
});
|
|
22
|
+
export const AgentExtensionRegistrySourceSchema = Schema.Struct({
|
|
23
|
+
type: Schema.Literal("registry"),
|
|
24
|
+
url: Schema.URLFromString,
|
|
25
|
+
}).annotate({
|
|
26
|
+
identifier: "AgentExtensionRegistrySource",
|
|
27
|
+
title: "Registry recommendation source",
|
|
28
|
+
description: "A self-describing Registry locator for a recommended extension.",
|
|
29
|
+
});
|
|
30
|
+
export const AgentExtensionPathSourceSchema = Schema.Struct({
|
|
31
|
+
type: Schema.Literal("path"),
|
|
32
|
+
path: Schema.NonEmptyString,
|
|
33
|
+
}).annotate({
|
|
34
|
+
identifier: "AgentExtensionPathSource",
|
|
35
|
+
title: "Path recommendation source",
|
|
36
|
+
description: "A self-describing filesystem locator for a recommended extension.",
|
|
37
|
+
});
|
|
38
|
+
export const AgentExtensionSourceSchema = Schema.Union([
|
|
39
|
+
AgentExtensionGitSourceSchema,
|
|
40
|
+
AgentExtensionRegistrySourceSchema,
|
|
41
|
+
AgentExtensionPathSourceSchema,
|
|
42
|
+
]).annotate({
|
|
43
|
+
identifier: "AgentExtensionSource",
|
|
44
|
+
title: "Agent extension recommendation source",
|
|
45
|
+
description: "A self-describing Git, Registry, or filesystem locator.",
|
|
46
|
+
});
|
|
47
|
+
const RegistryAgentExtensionRecommendationSchema = Schema.Struct({
|
|
48
|
+
ref: ExtensionFqnSchema,
|
|
49
|
+
source: Schema.optionalKey(AgentExtensionRegistrySourceSchema),
|
|
50
|
+
versionRange: Schema.optionalKey(VersionRangeSchema),
|
|
51
|
+
});
|
|
52
|
+
const GitAgentExtensionRecommendationSchema = Schema.Struct({
|
|
53
|
+
ref: ExtensionFqnSchema,
|
|
54
|
+
source: AgentExtensionGitSourceSchema,
|
|
55
|
+
versionRange: Schema.optionalKey(Schema.Never),
|
|
56
|
+
});
|
|
57
|
+
const PathAgentExtensionRecommendationSchema = Schema.Struct({
|
|
58
|
+
ref: ExtensionFqnSchema,
|
|
59
|
+
source: AgentExtensionPathSourceSchema,
|
|
60
|
+
versionRange: Schema.optionalKey(Schema.Never),
|
|
61
|
+
});
|
|
62
|
+
export const AgentExtensionRecommendationSchema = Schema.Union([
|
|
63
|
+
RegistryAgentExtensionRecommendationSchema,
|
|
64
|
+
GitAgentExtensionRecommendationSchema,
|
|
65
|
+
PathAgentExtensionRecommendationSchema,
|
|
66
|
+
]).annotate({
|
|
67
|
+
identifier: "AgentExtensionRecommendation",
|
|
68
|
+
title: "Agent extension recommendation",
|
|
69
|
+
description: "A qualified extension reference with an optional self-describing source. Sourceless entries use the fixed AgentXM Registry; versionRange is valid only for Registry sources.",
|
|
70
|
+
});
|
|
71
|
+
export const AgentExtensionsMetadataSchema = Schema.Struct({
|
|
72
|
+
$schema: Schema.optionalKey(Schema.String),
|
|
73
|
+
agentExtensions: Schema.Array(AgentExtensionRecommendationSchema),
|
|
74
|
+
}).annotate({
|
|
75
|
+
identifier: "AgentExtensionsMetadata",
|
|
76
|
+
title: "Agent Extensions Metadata",
|
|
77
|
+
description: "Version 1 of the portable package metadata contract for recommended agent extensions.",
|
|
78
|
+
});
|
|
79
|
+
//# sourceMappingURL=agent-extensions.js.map
|
|
@@ -38,12 +38,13 @@ type GitScpAddress = {
|
|
|
38
38
|
readonly host: string;
|
|
39
39
|
readonly path: string;
|
|
40
40
|
};
|
|
41
|
-
/** An `owner/repo[
|
|
41
|
+
/** An `owner/repo[//path][@ref]` style pattern containing `/` (not a URL or file path). */
|
|
42
42
|
type SlashPattern = {
|
|
43
43
|
readonly pattern: "slash-pattern";
|
|
44
44
|
readonly first: string;
|
|
45
45
|
readonly second: string;
|
|
46
46
|
readonly third: Option.Option<string>;
|
|
47
|
+
readonly ref: Option.Option<string>;
|
|
47
48
|
};
|
|
48
49
|
/** A local filesystem path matching `LOCAL_PATH_PATTERN`. */
|
|
49
50
|
type FilePathPattern = {
|
|
@@ -17,7 +17,7 @@ const LOCAL_PATH_PATTERN = /^(?:\.\.?\/|\/|~\/|~\\|[A-Za-z]:[\\/])/;
|
|
|
17
17
|
/** SCP-style: `user@host:path` — no `://` scheme. */
|
|
18
18
|
const SCP_PATTERN = /^([^@]+)@([^:]+):(.+)$/;
|
|
19
19
|
/** Known shorthand prefixes. */
|
|
20
|
-
const SHORTHAND_PREFIXES = new Set(["github", "gitlab", "bitbucket"]);
|
|
20
|
+
const SHORTHAND_PREFIXES = new Set(["github", "gitlab", "bitbucket", "azurerepos"]);
|
|
21
21
|
/** Simple name: alphanumeric with hyphens, no leading/trailing hyphen. */
|
|
22
22
|
const NAME_PATTERN = /^[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?$/;
|
|
23
23
|
/**
|
|
@@ -88,23 +88,33 @@ export const parseInputPattern = (input) => {
|
|
|
88
88
|
catch {
|
|
89
89
|
// Not a URL
|
|
90
90
|
}
|
|
91
|
-
// 7. Slash pattern (`owner/repo
|
|
91
|
+
// 7. Slash pattern (`owner/repo[//path][@ref]`)
|
|
92
92
|
if (input.includes("/")) {
|
|
93
|
-
const
|
|
93
|
+
const refIndex = input.lastIndexOf("@");
|
|
94
|
+
const hasRef = refIndex > 0 && refIndex < input.length - 1;
|
|
95
|
+
const coordinate = hasRef ? input.slice(0, refIndex) : input;
|
|
96
|
+
const ref = hasRef ? input.slice(refIndex + 1) : undefined;
|
|
97
|
+
const subPathIndex = coordinate.indexOf("//");
|
|
98
|
+
const repositoryCoordinate = subPathIndex < 0 ? coordinate : coordinate.slice(0, subPathIndex);
|
|
99
|
+
const subPath = subPathIndex < 0 ? undefined : coordinate.slice(subPathIndex + 2);
|
|
100
|
+
const segments = repositoryCoordinate.split("/");
|
|
94
101
|
const first = segments.at(0);
|
|
95
102
|
const second = segments.at(1);
|
|
96
103
|
if (first !== undefined &&
|
|
97
104
|
second !== undefined &&
|
|
98
|
-
segments.length
|
|
105
|
+
segments.length === 2 &&
|
|
99
106
|
NAME_PATTERN.test(first) &&
|
|
100
107
|
NAME_PATTERN.test(second) &&
|
|
101
|
-
|
|
102
|
-
|
|
108
|
+
(ref === undefined || (ref.length > 0 && !ref.includes("/"))) &&
|
|
109
|
+
(subPath === undefined ||
|
|
110
|
+
(subPath.length > 0 &&
|
|
111
|
+
subPath.split("/").every((segment) => segment.length > 0 && segment !== "..")))) {
|
|
103
112
|
return Option.some(wrap({
|
|
104
113
|
pattern: "slash-pattern",
|
|
105
114
|
first,
|
|
106
115
|
second,
|
|
107
|
-
third:
|
|
116
|
+
third: Option.fromUndefinedOr(subPath),
|
|
117
|
+
ref: Option.fromUndefinedOr(ref),
|
|
108
118
|
}));
|
|
109
119
|
}
|
|
110
120
|
return Option.none();
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
import * as Option from "effect/Option";
|
|
8
8
|
import { formatFqn } from "../extensions/fqn.js";
|
|
9
|
-
import {
|
|
9
|
+
import { printLocalSource } from "./forge-grammar.js";
|
|
10
10
|
/**
|
|
11
11
|
* Print source params as their canonical shorthand string.
|
|
12
12
|
*
|
|
@@ -14,17 +14,40 @@ import { printAzureReposSource, printBitbucketSource, printGitHubSource, printGi
|
|
|
14
14
|
*/
|
|
15
15
|
export const printSourceParams = (source) => {
|
|
16
16
|
switch (source.type) {
|
|
17
|
-
case "github":
|
|
18
|
-
return printGitHubSource(source, source.sourceName ?? ("name" in source ? String(source.name) : "github"));
|
|
19
|
-
case "gitlab":
|
|
20
|
-
return printGitLabSource(source, source.sourceName ?? ("name" in source ? String(source.name) : "gitlab"));
|
|
21
|
-
case "bitbucket":
|
|
22
|
-
return printBitbucketSource(source, source.sourceName ?? ("name" in source ? String(source.name) : "bitbucket"));
|
|
23
|
-
case "azurerepos":
|
|
24
|
-
return printAzureReposSource(source, source.sourceName ?? ("name" in source ? String(source.name) : "azurerepos"));
|
|
25
17
|
case "local":
|
|
26
18
|
return printLocalSource(source);
|
|
27
19
|
case "git": {
|
|
20
|
+
const repositorySegments = source.url.pathname
|
|
21
|
+
.split("/")
|
|
22
|
+
.filter((segment) => segment.length > 0);
|
|
23
|
+
if (source.url.hostname === "dev.azure.com" &&
|
|
24
|
+
repositorySegments.length === 4 &&
|
|
25
|
+
repositorySegments[2] === "_git") {
|
|
26
|
+
let shorthand = `azurerepos:${repositorySegments[0]}/${repositorySegments[1]}/${repositorySegments[3]}`;
|
|
27
|
+
if (Option.isSome(source.subPath))
|
|
28
|
+
shorthand += `//${source.subPath.value}`;
|
|
29
|
+
if (Option.isSome(source.ref))
|
|
30
|
+
shorthand += `@${source.ref.value}`;
|
|
31
|
+
return shorthand;
|
|
32
|
+
}
|
|
33
|
+
const lastSegment = repositorySegments.at(-1);
|
|
34
|
+
const repo = lastSegment?.endsWith(".git") ? lastSegment.slice(0, -4) : lastSegment;
|
|
35
|
+
const sourcePrefix = source.url.hostname === "github.com"
|
|
36
|
+
? "github"
|
|
37
|
+
: source.url.hostname === "gitlab.com"
|
|
38
|
+
? "gitlab"
|
|
39
|
+
: source.url.hostname === "bitbucket.org"
|
|
40
|
+
? "bitbucket"
|
|
41
|
+
: undefined;
|
|
42
|
+
if (sourcePrefix !== undefined && repo !== undefined && repositorySegments.length >= 2) {
|
|
43
|
+
const owner = repositorySegments.slice(0, -1).join("/");
|
|
44
|
+
let shorthand = `${sourcePrefix}:${owner}/${repo}`;
|
|
45
|
+
if (Option.isSome(source.subPath))
|
|
46
|
+
shorthand += `//${source.subPath.value}`;
|
|
47
|
+
if (Option.isSome(source.ref))
|
|
48
|
+
shorthand += `@${source.ref.value}`;
|
|
49
|
+
return shorthand;
|
|
50
|
+
}
|
|
28
51
|
const url = new URL(source.url.href);
|
|
29
52
|
url.hash = Option.getOrElse(source.ref, () => "");
|
|
30
53
|
return url.href;
|
|
@@ -11,10 +11,6 @@ import type { Handle } from "../extensions/handle.js";
|
|
|
11
11
|
/**
|
|
12
12
|
* Source type discriminator for extension origins.
|
|
13
13
|
*
|
|
14
|
-
* - `"github"` - GitHub repository source
|
|
15
|
-
* - `"gitlab"` - GitLab repository source
|
|
16
|
-
* - `"bitbucket"` - Bitbucket repository source
|
|
17
|
-
* - `"azurerepos"` - Azure Repos repository source
|
|
18
14
|
* - `"git"` - Generic git repository source
|
|
19
15
|
* - `"registry"` - Package registry source
|
|
20
16
|
* - `"local"` - Local filesystem path source
|
|
@@ -23,7 +19,7 @@ import type { Handle } from "../extensions/handle.js";
|
|
|
23
19
|
*
|
|
24
20
|
* @experimental
|
|
25
21
|
*/
|
|
26
|
-
export declare const SourceTypeSchema: Schema.Literals<readonly ["
|
|
22
|
+
export declare const SourceTypeSchema: Schema.Literals<readonly ["git", "registry", "local", "inline", "workspace"]>;
|
|
27
23
|
/**
|
|
28
24
|
* Inferred type for SourceTypeSchema.
|
|
29
25
|
*
|
|
@@ -102,29 +98,6 @@ export declare const AzureReposSourceParamsSchema: Schema.Struct<{
|
|
|
102
98
|
readonly type: Schema.Literal<"azurerepos">;
|
|
103
99
|
}>;
|
|
104
100
|
/** @experimental */
|
|
105
|
-
export interface GitHubSourceHost {
|
|
106
|
-
readonly type: "github";
|
|
107
|
-
readonly name: string;
|
|
108
|
-
readonly url: URL;
|
|
109
|
-
}
|
|
110
|
-
/** @experimental */
|
|
111
|
-
export interface GitLabSourceHost {
|
|
112
|
-
readonly type: "gitlab";
|
|
113
|
-
readonly name: string;
|
|
114
|
-
readonly url: URL;
|
|
115
|
-
}
|
|
116
|
-
/** @experimental */
|
|
117
|
-
export interface BitbucketSourceHost {
|
|
118
|
-
readonly type: "bitbucket";
|
|
119
|
-
readonly name: string;
|
|
120
|
-
readonly url: URL;
|
|
121
|
-
}
|
|
122
|
-
/** @experimental */
|
|
123
|
-
export interface AzureReposSourceHost {
|
|
124
|
-
readonly type: "azurerepos";
|
|
125
|
-
readonly name: string;
|
|
126
|
-
readonly url: URL;
|
|
127
|
-
}
|
|
128
101
|
/** Self-describing — the git URL lives in SourceParams. @experimental */
|
|
129
102
|
export interface GitSourceHost {
|
|
130
103
|
readonly type: "git";
|
|
@@ -151,7 +124,7 @@ export interface WorkspaceSourceHost {
|
|
|
151
124
|
readonly type: "workspace";
|
|
152
125
|
}
|
|
153
126
|
/** @experimental */
|
|
154
|
-
export type SourceHost =
|
|
127
|
+
export type SourceHost = GitSourceHost | RegistrySourceHost | LocalSourceHost | InlineSourceHost | WorkspaceSourceHost;
|
|
155
128
|
/** @experimental */
|
|
156
129
|
export interface GitHubSourceParams {
|
|
157
130
|
readonly type: "github";
|
|
@@ -198,6 +171,7 @@ export interface GitSourceParams {
|
|
|
198
171
|
readonly type: "git";
|
|
199
172
|
readonly url: URL;
|
|
200
173
|
readonly ref: Option.Option<string>;
|
|
174
|
+
readonly subPath: Option.Option<string>;
|
|
201
175
|
}
|
|
202
176
|
/** @experimental */
|
|
203
177
|
export interface RegistrySourceParams {
|
|
@@ -226,15 +200,7 @@ export interface WorkspaceSourceParams {
|
|
|
226
200
|
readonly name: ExtensionName;
|
|
227
201
|
}
|
|
228
202
|
/** @experimental */
|
|
229
|
-
export type SourceParams =
|
|
230
|
-
/** @experimental */
|
|
231
|
-
export type GitHubSource = GitHubSourceHost & GitHubSourceParams;
|
|
232
|
-
/** @experimental */
|
|
233
|
-
export type GitLabSource = GitLabSourceHost & GitLabSourceParams;
|
|
234
|
-
/** @experimental */
|
|
235
|
-
export type BitbucketSource = BitbucketSourceHost & BitbucketSourceParams;
|
|
236
|
-
/** @experimental */
|
|
237
|
-
export type AzureReposSource = AzureReposSourceHost & AzureReposSourceParams;
|
|
203
|
+
export type SourceParams = GitSourceParams | RegistrySourceParams | LocalSourceParams | InlineSourceParams | WorkspaceSourceParams;
|
|
238
204
|
/** @experimental */
|
|
239
205
|
export type InlineSource = InlineSourceHost & InlineSourceParams;
|
|
240
206
|
/** @experimental */
|
|
@@ -246,17 +212,11 @@ export type LocalSource = LocalSourceHost & LocalSourceParams;
|
|
|
246
212
|
/** @experimental */
|
|
247
213
|
export type WorkspaceSource = WorkspaceSourceHost & WorkspaceSourceParams;
|
|
248
214
|
/** @experimental */
|
|
249
|
-
export type Source =
|
|
250
|
-
/**
|
|
251
|
-
export type
|
|
252
|
-
/** @experimental */
|
|
253
|
-
export type GitHostingSourceParams = GitHubSourceParams | GitLabSourceParams | BitbucketSourceParams | AzureReposSourceParams;
|
|
254
|
-
/** @experimental */
|
|
255
|
-
export type GitHostingSource = GitHubSource | GitLabSource | BitbucketSource | AzureReposSource;
|
|
256
|
-
/** All git-based sources (hosting providers + generic git). @experimental */
|
|
257
|
-
export type GitBasedSource = GitHostingSource | GitSource;
|
|
215
|
+
export type Source = GitSource | RegistrySource | LocalSource | WorkspaceSource;
|
|
216
|
+
/** All git-based sources. Hosted-provider syntax expands to this source. @experimental */
|
|
217
|
+
export type GitBasedSource = GitSource;
|
|
258
218
|
/** Sources that require host configuration from settings. @experimental */
|
|
259
|
-
export type ConfiguredSourceHost =
|
|
219
|
+
export type ConfiguredSourceHost = RegistrySourceHost;
|
|
260
220
|
/** Sources that are self-describing (no settings config needed). @experimental */
|
|
261
221
|
export type SelfDescribingSourceHost = GitSourceHost | LocalSourceHost;
|
|
262
222
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -11,10 +11,6 @@ import * as Schema from "effect/Schema";
|
|
|
11
11
|
/**
|
|
12
12
|
* Source type discriminator for extension origins.
|
|
13
13
|
*
|
|
14
|
-
* - `"github"` - GitHub repository source
|
|
15
|
-
* - `"gitlab"` - GitLab repository source
|
|
16
|
-
* - `"bitbucket"` - Bitbucket repository source
|
|
17
|
-
* - `"azurerepos"` - Azure Repos repository source
|
|
18
14
|
* - `"git"` - Generic git repository source
|
|
19
15
|
* - `"registry"` - Package registry source
|
|
20
16
|
* - `"local"` - Local filesystem path source
|
|
@@ -24,10 +20,6 @@ import * as Schema from "effect/Schema";
|
|
|
24
20
|
* @experimental
|
|
25
21
|
*/
|
|
26
22
|
export const SourceTypeSchema = Schema.Literals([
|
|
27
|
-
"github",
|
|
28
|
-
"gitlab",
|
|
29
|
-
"bitbucket",
|
|
30
|
-
"azurerepos",
|
|
31
23
|
"git",
|
|
32
24
|
"registry",
|
|
33
25
|
"local",
|
|
@@ -36,7 +28,7 @@ export const SourceTypeSchema = Schema.Literals([
|
|
|
36
28
|
]).annotate({
|
|
37
29
|
identifier: "SourceType",
|
|
38
30
|
title: "Source Type",
|
|
39
|
-
description: "Source type discriminator:
|
|
31
|
+
description: "Source type discriminator: git, registry, local, inline, or workspace.",
|
|
40
32
|
});
|
|
41
33
|
// -----------------------------------------------------------------------------
|
|
42
34
|
// Ref Type Schema
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
},
|
|
12
12
|
"description": "Shared AgentXM extension model: identities, manifests, version constraints, and agent capabilities. Unstable and unsupported — use the axm.sh CLI.",
|
|
13
13
|
"devDependencies": {
|
|
14
|
-
"@agentxm/specification-metadata": "0.
|
|
14
|
+
"@agentxm/specification-metadata": "0.32.0",
|
|
15
15
|
"@effect/vitest": "4.0.0-rc.115",
|
|
16
16
|
"@fast-check/vitest": "^0.5.0",
|
|
17
17
|
"@types/semver": "^7.7.1",
|
|
@@ -40,6 +40,10 @@
|
|
|
40
40
|
"types": "./dist/src/unstable/agent-capabilities/identity.d.ts",
|
|
41
41
|
"default": "./dist/src/unstable/agent-capabilities/identity.js"
|
|
42
42
|
},
|
|
43
|
+
"./unstable/agent-capabilities/schema": {
|
|
44
|
+
"types": "./dist/src/unstable/agent-capabilities/schema.d.ts",
|
|
45
|
+
"default": "./dist/src/unstable/agent-capabilities/schema.js"
|
|
46
|
+
},
|
|
43
47
|
"./unstable/agents/registry": {
|
|
44
48
|
"types": "./dist/src/unstable/agents/registry.d.ts",
|
|
45
49
|
"default": "./dist/src/unstable/agents/registry.js"
|
|
@@ -84,6 +88,10 @@
|
|
|
84
88
|
"types": "./dist/src/unstable/extensions/common.d.ts",
|
|
85
89
|
"default": "./dist/src/unstable/extensions/common.js"
|
|
86
90
|
},
|
|
91
|
+
"./unstable/extensions/archival": {
|
|
92
|
+
"types": "./dist/src/unstable/extensions/archival.d.ts",
|
|
93
|
+
"default": "./dist/src/unstable/extensions/archival.js"
|
|
94
|
+
},
|
|
87
95
|
"./unstable/extensions/deprecation": {
|
|
88
96
|
"types": "./dist/src/unstable/extensions/deprecation.d.ts",
|
|
89
97
|
"default": "./dist/src/unstable/extensions/deprecation.js"
|
|
@@ -208,9 +216,9 @@
|
|
|
208
216
|
"types": "./dist/src/unstable/path-types.d.ts",
|
|
209
217
|
"default": "./dist/src/unstable/path-types.js"
|
|
210
218
|
},
|
|
211
|
-
"./unstable/
|
|
212
|
-
"types": "./dist/src/unstable/
|
|
213
|
-
"default": "./dist/src/unstable/
|
|
219
|
+
"./unstable/recommendations/agent-extensions": {
|
|
220
|
+
"types": "./dist/src/unstable/recommendations/agent-extensions.d.ts",
|
|
221
|
+
"default": "./dist/src/unstable/recommendations/agent-extensions.js"
|
|
214
222
|
},
|
|
215
223
|
"./unstable/rules/manifest-schema": {
|
|
216
224
|
"types": "./dist/src/unstable/rules/manifest-schema.d.ts",
|
|
@@ -297,5 +305,5 @@
|
|
|
297
305
|
},
|
|
298
306
|
"sideEffects": false,
|
|
299
307
|
"type": "module",
|
|
300
|
-
"version": "0.
|
|
308
|
+
"version": "0.32.0"
|
|
301
309
|
}
|