@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.
Files changed (27) hide show
  1. package/dist/src/unstable/extensions/archival.d.ts +16 -0
  2. package/dist/src/unstable/extensions/archival.js +19 -0
  3. package/dist/src/unstable/extensions/common.d.ts +148 -0
  4. package/dist/src/unstable/extensions/common.js +66 -1
  5. package/dist/src/unstable/extensions/index.d.ts +1 -1
  6. package/dist/src/unstable/extensions/index.js +1 -1
  7. package/dist/src/unstable/extensions/installable-types.d.ts +4 -4
  8. package/dist/src/unstable/extensions/installable-types.js +9 -5
  9. package/dist/src/unstable/extensions/refs/pack.d.ts +20 -3
  10. package/dist/src/unstable/extensions/refs/ref-base.d.ts +6 -2
  11. package/dist/src/unstable/extensions/universal-skills-dir.d.ts +2 -2
  12. package/dist/src/unstable/extensions/universal-skills-dir.js +8 -2
  13. package/dist/src/unstable/hooks/manifest-schema.js +1 -1
  14. package/dist/src/unstable/packs/manifest-schema.d.ts +7 -1
  15. package/dist/src/unstable/packs/manifest-schema.js +3 -3
  16. package/dist/src/unstable/recommendations/agent-extensions.d.ts +89 -0
  17. package/dist/src/unstable/recommendations/agent-extensions.js +79 -0
  18. package/dist/src/unstable/sources/parser.d.ts +2 -1
  19. package/dist/src/unstable/sources/parser.js +17 -7
  20. package/dist/src/unstable/sources/printer.js +32 -9
  21. package/dist/src/unstable/sources/types.d.ts +8 -48
  22. package/dist/src/unstable/sources/types.js +1 -9
  23. package/dist/src/unstable/workspace-scope.d.ts +1 -1
  24. package/dist/src/unstable/workspace-scope.js +1 -1
  25. package/package.json +13 -5
  26. package/dist/src/unstable/release-channel.d.ts +0 -156
  27. 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/index.js";
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, NonPackExtensionDependencyConstraintMapSchema, } from "../extensions/common.js";
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: NonPackExtensionDependencyConstraintMapSchema.pipe(Schema.annotateKey({ messageMissingKey: "pack dependencies are required" }), Schema.annotate({
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, and note that a caret below 1.0 pins to the current patch or minor and goes stale on every later release. These constraints select installed extension versions, unlike companion-package recommendation ranges in `packages`, which are metadata only.",
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[/path]` style pattern containing `/` (not a URL or file path). */
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` or `owner/repo/path`)
91
+ // 7. Slash pattern (`owner/repo[//path][@ref]`)
92
92
  if (input.includes("/")) {
93
- const segments = input.split("/");
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 >= 2 &&
105
+ segments.length === 2 &&
99
106
  NAME_PATTERN.test(first) &&
100
107
  NAME_PATTERN.test(second) &&
101
- segments.slice(2).every((s) => s.length > 0 && s !== "..")) {
102
- const remaining = segments.slice(2).join("/");
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: remaining.length === 0 ? Option.none() : Option.some(remaining),
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 { printAzureReposSource, printBitbucketSource, printGitHubSource, printGitLabSource, printLocalSource, } from "./forge-grammar.js";
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 ["github", "gitlab", "bitbucket", "azurerepos", "git", "registry", "local", "inline", "workspace"]>;
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 = GitHubSourceHost | GitLabSourceHost | BitbucketSourceHost | AzureReposSourceHost | GitSourceHost | RegistrySourceHost | LocalSourceHost | InlineSourceHost | WorkspaceSourceHost;
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 = GitHubSourceParams | GitLabSourceParams | BitbucketSourceParams | AzureReposSourceParams | GitSourceParams | RegistrySourceParams | LocalSourceParams | InlineSourceParams | WorkspaceSourceParams;
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 = GitHubSource | GitLabSource | BitbucketSource | AzureReposSource | GitSource | RegistrySource | LocalSource | WorkspaceSource;
250
- /** Git hosting providers that require a configured URL. @experimental */
251
- export type GitHostingSourceHost = GitHubSourceHost | GitLabSourceHost | BitbucketSourceHost | AzureReposSourceHost;
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 = GitHostingSourceHost | RegistrySourceHost;
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: github, gitlab, bitbucket, azurerepos, git, registry, local, inline, or workspace.",
31
+ description: "Source type discriminator: git, registry, local, inline, or workspace.",
40
32
  });
41
33
  // -----------------------------------------------------------------------------
42
34
  // Ref Type Schema
@@ -1,5 +1,5 @@
1
1
  /**
2
- * WorkspaceMutations scope helpers for CLI flags and workspace options.
2
+ * Workspace scope helpers for CLI flags and workspace options.
3
3
  *
4
4
  * `project` uses the project root; `user` uses `~/.axm/workspace/`.
5
5
  *
@@ -1,5 +1,5 @@
1
1
  /**
2
- * WorkspaceMutations scope helpers for CLI flags and workspace options.
2
+ * Workspace scope helpers for CLI flags and workspace options.
3
3
  *
4
4
  * `project` uses the project root; `user` uses `~/.axm/workspace/`.
5
5
  *
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.31.1",
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/release-channel": {
212
- "types": "./dist/src/unstable/release-channel.d.ts",
213
- "default": "./dist/src/unstable/release-channel.js"
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.31.1"
308
+ "version": "0.32.0"
301
309
  }