@agentxm/extension-authoring 0.29.4 → 0.30.2
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/adopt/adopt-extension.d.ts +21 -8
- package/dist/src/adopt/adopt-extension.js +108 -37
- package/dist/src/create/create-extension.d.ts +2 -1
- package/dist/src/create/create-extension.js +4 -2
- package/dist/src/fork/fork-extension.d.ts +2 -1
- package/dist/src/fork/fork-extension.js +3 -1
- package/dist/src/import/import-native-extension.d.ts +2 -1
- package/dist/src/import/import-native-extension.js +3 -1
- package/package.json +19 -20
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
* was never declared becomes enabled — adopting content you cannot see would
|
|
9
9
|
* leave the workspace holding authored work it never materializes.
|
|
10
10
|
*
|
|
11
|
+
* A package already at its authoring location that nothing declares is
|
|
12
|
+
* adopted in place: the workspace declares it, enabled, and nothing moves.
|
|
13
|
+
* In-place adoption refuses when an installed copy of the same identity also
|
|
14
|
+
* exists, when the workspace already declares the name, and when the authored
|
|
15
|
+
* manifest is invalid or names a different identity.
|
|
16
|
+
*
|
|
11
17
|
* `prepare` settles the identity, the destination, and the activation, and
|
|
12
18
|
* writes nothing. `previewOrApply` resolves that same candidate inside the
|
|
13
19
|
* workspace transaction, so a failed move restores both directories.
|
|
@@ -17,13 +23,15 @@
|
|
|
17
23
|
import * as Effect from "effect/Effect";
|
|
18
24
|
import * as FileSystem from "effect/FileSystem";
|
|
19
25
|
import type * as HttpClient from "effect/unstable/http/HttpClient";
|
|
26
|
+
import * as Option from "effect/Option";
|
|
20
27
|
import * as Path from "effect/Path";
|
|
21
|
-
import { ExtensionManagers, McpSecretStore, type ManagerRequirements
|
|
28
|
+
import { ExtensionManagers, McpSecretStore, type ManagerRequirements } from "@agentxm/extension-materialization";
|
|
29
|
+
import { type RecipeRequirements } from "@agentxm/workspace-reconciliation";
|
|
22
30
|
import { type ExtensionType, type FqnInvalidError, type Handle } from "@agentxm/extension-model/unstable/extensions";
|
|
23
31
|
import { type CandidateFingerprintFailed, type ExecutionCandidate, type PlanExecution } from "@agentxm/workspace-operations";
|
|
24
32
|
import type { CodingAgentRepository } from "@agentxm/workspace-projection";
|
|
25
|
-
import { WorkspaceMutations, type ConfiguredAgentOutcomesProvider, type LockfileValidationError, type WorkspaceLockfileReadFailure, type WorkspaceSettingsReadFailure } from "@agentxm/workspace-state";
|
|
26
|
-
import type
|
|
33
|
+
import { LockfileReader, WorkspaceMutations, type ConfiguredAgentOutcomesProvider, type LockfileValidationError, type WorkspaceLockfileReadFailure, type WorkspaceSettingsReadFailure, type WorkspaceStateReadFailure } from "@agentxm/workspace-state";
|
|
34
|
+
import { type AuthoredPackageError } from "../authored-package-errors.js";
|
|
27
35
|
import { AuthoringFailed } from "../errors.js";
|
|
28
36
|
import { AuthoringScopeUnsupported, type AuthoringOwnerMismatch, type AuthoringOwnerRequired } from "../create/errors.js";
|
|
29
37
|
export interface AdoptExtensionRequest {
|
|
@@ -43,9 +51,14 @@ export interface AdoptExtensionCandidate {
|
|
|
43
51
|
readonly fqn: string;
|
|
44
52
|
readonly owner: Handle;
|
|
45
53
|
readonly name: string;
|
|
46
|
-
/**
|
|
47
|
-
|
|
48
|
-
|
|
54
|
+
/**
|
|
55
|
+
* `move` relocates an installed copy into authorship; `in-place` declares a
|
|
56
|
+
* package already at its authoring location and moves nothing.
|
|
57
|
+
*/
|
|
58
|
+
readonly mode: "move" | "in-place";
|
|
59
|
+
/** Workspace-relative directory the package is moved out of, when it moves. */
|
|
60
|
+
readonly acquiredPath: Option.Option<string>;
|
|
61
|
+
/** Workspace-relative authoring directory the adopted package occupies. */
|
|
49
62
|
readonly authoredPath: string;
|
|
50
63
|
/** Workspace-relative settings file the declaration is rewritten in. */
|
|
51
64
|
readonly settingsPath: string;
|
|
@@ -54,9 +67,9 @@ export interface AdoptExtensionCandidate {
|
|
|
54
67
|
readonly execution: ExecutionCandidate<AdoptExtensionRequirements>;
|
|
55
68
|
}
|
|
56
69
|
/** Every failure settling an adoption can surface before anything is written. */
|
|
57
|
-
export type AdoptExtensionFailure = AuthoringFailed | AuthoredPackageError | AuthoringOwnerRequired | AuthoringOwnerMismatch | AuthoringScopeUnsupported | LockfileValidationError | WorkspaceLockfileReadFailure | WorkspaceSettingsReadFailure | CandidateFingerprintFailed | FqnInvalidError;
|
|
70
|
+
export type AdoptExtensionFailure = AuthoringFailed | AuthoredPackageError | AuthoringOwnerRequired | AuthoringOwnerMismatch | AuthoringScopeUnsupported | LockfileValidationError | WorkspaceLockfileReadFailure | WorkspaceSettingsReadFailure | WorkspaceStateReadFailure | CandidateFingerprintFailed | FqnInvalidError;
|
|
58
71
|
/** Everything settling an adoption reads before it freezes a candidate. */
|
|
59
|
-
export type PrepareAdoptExtensionRequirements = FileSystem.FileSystem | Path.Path | HttpClient.HttpClient | WorkspaceMutations | ExtensionManagers | ConfiguredAgentOutcomesProvider;
|
|
72
|
+
export type PrepareAdoptExtensionRequirements = FileSystem.FileSystem | Path.Path | HttpClient.HttpClient | WorkspaceMutations | LockfileReader | ExtensionManagers | ConfiguredAgentOutcomesProvider;
|
|
60
73
|
/** The plan an adoption resolves. */
|
|
61
74
|
export declare const adoptExtensionPlanName = "Adopt workspace extension";
|
|
62
75
|
/** Settle an adoption without writing anything. */
|
|
@@ -8,6 +8,12 @@
|
|
|
8
8
|
* was never declared becomes enabled — adopting content you cannot see would
|
|
9
9
|
* leave the workspace holding authored work it never materializes.
|
|
10
10
|
*
|
|
11
|
+
* A package already at its authoring location that nothing declares is
|
|
12
|
+
* adopted in place: the workspace declares it, enabled, and nothing moves.
|
|
13
|
+
* In-place adoption refuses when an installed copy of the same identity also
|
|
14
|
+
* exists, when the workspace already declares the name, and when the authored
|
|
15
|
+
* manifest is invalid or names a different identity.
|
|
16
|
+
*
|
|
11
17
|
* `prepare` settles the identity, the destination, and the activation, and
|
|
12
18
|
* writes nothing. `previewOrApply` resolves that same candidate inside the
|
|
13
19
|
* workspace transaction, so a failed move restores both directories.
|
|
@@ -18,12 +24,16 @@ import * as Effect from "effect/Effect";
|
|
|
18
24
|
import * as FileSystem from "effect/FileSystem";
|
|
19
25
|
import * as Option from "effect/Option";
|
|
20
26
|
import * as Path from "effect/Path";
|
|
21
|
-
import { ExtensionManagers, McpSecretStore,
|
|
27
|
+
import { ExtensionManagers, McpSecretStore, } from "@agentxm/extension-materialization";
|
|
28
|
+
import { materializeAuthoredMcpServer } from "@agentxm/workspace-reconciliation";
|
|
29
|
+
import { buildAuthoredExtensionStep, } from "@agentxm/workspace-reconciliation";
|
|
22
30
|
import { extensionTypeToPlural, formatFqn, parseFqn, } from "@agentxm/extension-model/unstable/extensions";
|
|
23
31
|
import { operationPresentation, prepareExecutionCandidate, resolveExecutionCandidate, } from "@agentxm/workspace-operations";
|
|
24
|
-
import { WorkspaceMutations, resolveWorkspaceExtensionRef, } from "@agentxm/workspace-state";
|
|
32
|
+
import { LockfileReader, WorkspaceMutations, observeInstallRoot, resolveWorkspaceExtensionRef, } from "@agentxm/workspace-state";
|
|
25
33
|
import { protectCreatedAncestors } from "@agentxm/workspace-transactions";
|
|
34
|
+
import { CreateDestinationExists } from "@agentxm/extension-materialization";
|
|
26
35
|
import { authoredDeclaration } from "../authored-declaration.js";
|
|
36
|
+
import { CreateDestinationInspectionFailed, } from "../authored-package-errors.js";
|
|
27
37
|
import { preflightCreateOnly } from "../create-preflight.js";
|
|
28
38
|
import { AuthoringFailed } from "../errors.js";
|
|
29
39
|
import { requireAuthoredOwner, settingsRelativePath } from "../create/authoring-owner.js";
|
|
@@ -44,6 +54,7 @@ export const prepareAdoptExtension = Effect.fn("AdoptExtension.prepare")(functio
|
|
|
44
54
|
const fs = yield* FileSystem.FileSystem;
|
|
45
55
|
const path = yield* Path.Path;
|
|
46
56
|
const managers = yield* ExtensionManagers;
|
|
57
|
+
const locks = yield* LockfileReader;
|
|
47
58
|
const parsed = yield* Effect.fromResult(parseFqn(request.fqn));
|
|
48
59
|
if (ws.layout.scope !== "project") {
|
|
49
60
|
return yield* new AuthoringScopeUnsupported({ subject: "adoption", scope: ws.layout.scope });
|
|
@@ -56,6 +67,8 @@ export const prepareAdoptExtension = Effect.fn("AdoptExtension.prepare")(functio
|
|
|
56
67
|
const acquiredPath = path.relative(ws.baseDir, sourceDir);
|
|
57
68
|
const authoredPath = path.relative(ws.baseDir, targetDir);
|
|
58
69
|
const settingsPath = settingsRelativePath(path, ws);
|
|
70
|
+
const declaration = authoredDeclaration(ws, parsed.type, name);
|
|
71
|
+
const current = yield* declaration.read;
|
|
59
72
|
// Refuse an occupied authoring destination here, so a preview refuses it
|
|
60
73
|
// too; the closure repeats the check under the transaction lock.
|
|
61
74
|
const createOnly = preflightCreateOnly({
|
|
@@ -64,13 +77,50 @@ export const prepareAdoptExtension = Effect.fn("AdoptExtension.prepare")(functio
|
|
|
64
77
|
configured: false,
|
|
65
78
|
destinations: [targetDir],
|
|
66
79
|
});
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
80
|
+
// In-place adoption is decided from what is on disk now and repeated under
|
|
81
|
+
// the transaction lock, so preview and apply refuse the same states.
|
|
82
|
+
const inPlaceRefusals = Effect.gen(function* () {
|
|
83
|
+
const inventory = yield* observeInstallRoot({
|
|
84
|
+
layout: ws.layout,
|
|
85
|
+
graph: yield* ws.getDesiredStateGraph(),
|
|
86
|
+
locks,
|
|
87
|
+
});
|
|
88
|
+
const installedCopy = inventory.packages.find((entry) => entry.type === parsed.type &&
|
|
89
|
+
entry.name === name &&
|
|
90
|
+
(entry.owner === undefined || entry.owner === parsed.owner));
|
|
91
|
+
// Two copies of one identity leave adoption no single content to author.
|
|
92
|
+
if (installedCopy !== undefined) {
|
|
93
|
+
return yield* new CreateDestinationExists({ subject: "Adopt target", path: targetDir });
|
|
94
|
+
}
|
|
95
|
+
const declared = yield* declaration.read;
|
|
96
|
+
if (declared.configured) {
|
|
97
|
+
return yield* new AuthoringFailed({
|
|
98
|
+
category: "conflict",
|
|
99
|
+
detail: `${fqn} is already declared in ${settingsPath}`,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
yield* resolveWorkspaceExtensionRef({
|
|
103
|
+
settingsName: name,
|
|
104
|
+
source: "workspace",
|
|
105
|
+
expectedType: parsed.type,
|
|
106
|
+
layout: ws.layout,
|
|
107
|
+
scope: ws.scope,
|
|
108
|
+
staticPackage: { owner: parsed.owner, name, root: targetDir },
|
|
109
|
+
}).pipe(Effect.mapError((cause) => new AuthoringFailed({
|
|
110
|
+
category: "validation",
|
|
111
|
+
detail: `The authored package at ${authoredPath} is not a valid ${fqn} package`,
|
|
112
|
+
cause,
|
|
113
|
+
})));
|
|
114
|
+
});
|
|
115
|
+
const authoredExists = yield* fs
|
|
116
|
+
.exists(targetDir)
|
|
117
|
+
.pipe(Effect.mapError((cause) => new CreateDestinationInspectionFailed({ path: targetDir, cause })));
|
|
118
|
+
const mode = authoredExists ? "in-place" : "move";
|
|
119
|
+
yield* mode === "in-place" ? inPlaceRefusals : createOnly;
|
|
70
120
|
// A package the workspace never declared becomes enabled: adopting content
|
|
71
121
|
// that stays invisible is not what adoption was asked for.
|
|
72
|
-
const enabled = Option.getOrElse(current.enabled, () => true);
|
|
73
|
-
const
|
|
122
|
+
const enabled = mode === "in-place" ? true : Option.getOrElse(current.enabled, () => true);
|
|
123
|
+
const moveArtifact = {
|
|
74
124
|
path: authoredPath,
|
|
75
125
|
scope: ws.scope,
|
|
76
126
|
change: "created",
|
|
@@ -80,43 +130,63 @@ export const prepareAdoptExtension = Effect.fn("AdoptExtension.prepare")(functio
|
|
|
80
130
|
{ path: settingsPath, change: "updated" },
|
|
81
131
|
],
|
|
82
132
|
};
|
|
83
|
-
|
|
133
|
+
// In-place adoption writes only the declaration; the authored package keeps
|
|
134
|
+
// every byte, so it is not reported as a changed path.
|
|
135
|
+
const inPlaceArtifact = {
|
|
136
|
+
path: settingsPath,
|
|
137
|
+
scope: ws.scope,
|
|
138
|
+
change: "updated",
|
|
139
|
+
targets: [{ path: settingsPath, change: "updated" }],
|
|
140
|
+
};
|
|
141
|
+
const shared = {
|
|
84
142
|
toStepFailure: authoringStepFailure,
|
|
85
143
|
location: targetDir,
|
|
86
|
-
transactionTargets: [sourceDir],
|
|
87
144
|
versionRange: Option.none(),
|
|
88
145
|
label: `Adopt ${fqn}`,
|
|
89
|
-
message: `Adopted ${fqn}`,
|
|
90
146
|
enabled,
|
|
91
|
-
allowConfiguredSourceTransition: true,
|
|
92
147
|
markAuthored: Effect.andThen(declaration.retireExternalResolution, declaration.declare({ enabled: true, env: current.env })),
|
|
93
148
|
finalizeAuthored: declaration.declare({ enabled, env: current.env }),
|
|
94
|
-
plannedArtifact: artifact,
|
|
95
|
-
buildArtifact: () => Effect.succeed(artifact),
|
|
96
|
-
preflight: Effect.gen(function* () {
|
|
97
|
-
yield* createOnly;
|
|
98
|
-
// The acquired directory must already hold a resolvable package: a move
|
|
99
|
-
// that lands unreadable content would leave the workspace authoring
|
|
100
|
-
// something it cannot materialize.
|
|
101
|
-
yield* resolveWorkspaceExtensionRef({
|
|
102
|
-
settingsName: name,
|
|
103
|
-
source: "workspace",
|
|
104
|
-
expectedType: parsed.type,
|
|
105
|
-
layout: ws.layout,
|
|
106
|
-
scope: ws.scope,
|
|
107
|
-
staticPackage: { owner: parsed.owner, name, root: sourceDir },
|
|
108
|
-
});
|
|
109
|
-
}).pipe(Effect.asVoid),
|
|
110
|
-
scaffold: Effect.gen(function* () {
|
|
111
|
-
yield* protectCreatedAncestors(fs, path, path.dirname(targetDir));
|
|
112
|
-
yield* fs.makeDirectory(path.dirname(targetDir), { recursive: true });
|
|
113
|
-
yield* fs.rename(sourceDir, targetDir);
|
|
114
|
-
}).pipe(Effect.mapError((cause) => new AuthoringFailed({
|
|
115
|
-
category: "internal",
|
|
116
|
-
detail: `Could not move ${fqn} into authored package storage`,
|
|
117
|
-
cause,
|
|
118
|
-
}))),
|
|
119
149
|
};
|
|
150
|
+
const common = mode === "in-place"
|
|
151
|
+
? {
|
|
152
|
+
...shared,
|
|
153
|
+
message: `Adopted ${fqn} in place`,
|
|
154
|
+
plannedArtifact: inPlaceArtifact,
|
|
155
|
+
buildArtifact: () => Effect.succeed(inPlaceArtifact),
|
|
156
|
+
preflight: inPlaceRefusals,
|
|
157
|
+
scaffold: Effect.void,
|
|
158
|
+
}
|
|
159
|
+
: {
|
|
160
|
+
...shared,
|
|
161
|
+
message: `Adopted ${fqn}`,
|
|
162
|
+
transactionTargets: [sourceDir],
|
|
163
|
+
allowConfiguredSourceTransition: true,
|
|
164
|
+
plannedArtifact: moveArtifact,
|
|
165
|
+
buildArtifact: () => Effect.succeed(moveArtifact),
|
|
166
|
+
preflight: Effect.gen(function* () {
|
|
167
|
+
yield* createOnly;
|
|
168
|
+
// The acquired directory must already hold a resolvable package: a move
|
|
169
|
+
// that lands unreadable content would leave the workspace authoring
|
|
170
|
+
// something it cannot materialize.
|
|
171
|
+
yield* resolveWorkspaceExtensionRef({
|
|
172
|
+
settingsName: name,
|
|
173
|
+
source: "workspace",
|
|
174
|
+
expectedType: parsed.type,
|
|
175
|
+
layout: ws.layout,
|
|
176
|
+
scope: ws.scope,
|
|
177
|
+
staticPackage: { owner: parsed.owner, name, root: sourceDir },
|
|
178
|
+
});
|
|
179
|
+
}).pipe(Effect.asVoid),
|
|
180
|
+
scaffold: Effect.gen(function* () {
|
|
181
|
+
yield* protectCreatedAncestors(fs, path, path.dirname(targetDir));
|
|
182
|
+
yield* fs.makeDirectory(path.dirname(targetDir), { recursive: true });
|
|
183
|
+
yield* fs.rename(sourceDir, targetDir);
|
|
184
|
+
}).pipe(Effect.mapError((cause) => new AuthoringFailed({
|
|
185
|
+
category: "internal",
|
|
186
|
+
detail: `Could not move ${fqn} into authored package storage`,
|
|
187
|
+
cause,
|
|
188
|
+
}))),
|
|
189
|
+
};
|
|
120
190
|
const step = (() => {
|
|
121
191
|
switch (parsed.type) {
|
|
122
192
|
case "skill":
|
|
@@ -154,7 +224,8 @@ export const prepareAdoptExtension = Effect.fn("AdoptExtension.prepare")(functio
|
|
|
154
224
|
fqn,
|
|
155
225
|
owner: parsed.owner,
|
|
156
226
|
name,
|
|
157
|
-
|
|
227
|
+
mode,
|
|
228
|
+
acquiredPath: mode === "move" ? Option.some(acquiredPath) : Option.none(),
|
|
158
229
|
authoredPath,
|
|
159
230
|
settingsPath,
|
|
160
231
|
enabled,
|
|
@@ -20,7 +20,8 @@ import * as Effect from "effect/Effect";
|
|
|
20
20
|
import type * as FileSystem from "effect/FileSystem";
|
|
21
21
|
import * as Option from "effect/Option";
|
|
22
22
|
import * as Path from "effect/Path";
|
|
23
|
-
import { ExtensionManagers, type ManagerRequirements
|
|
23
|
+
import { ExtensionManagers, type ManagerRequirements } from "@agentxm/extension-materialization";
|
|
24
|
+
import { type RecipeRequirements } from "@agentxm/workspace-reconciliation";
|
|
24
25
|
import { McpSecretStore } from "@agentxm/extension-materialization";
|
|
25
26
|
import { type Handle } from "@agentxm/extension-model/unstable/extensions";
|
|
26
27
|
import type { HookEvent, HookRuntime } from "@agentxm/extension-model/unstable/hooks/manifest-schema";
|
|
@@ -19,8 +19,10 @@
|
|
|
19
19
|
import * as Effect from "effect/Effect";
|
|
20
20
|
import * as Option from "effect/Option";
|
|
21
21
|
import * as Path from "effect/Path";
|
|
22
|
-
import { ExtensionManagers,
|
|
23
|
-
import {
|
|
22
|
+
import { ExtensionManagers, createCanonicalDirectory, groupInstallTargetsByDirectory, recoverCanonicalDirectory, artifactAgentIdsFromTargets, artifactTargetAgentIds, } from "@agentxm/extension-materialization";
|
|
23
|
+
import { buildAuthoredExtensionStep, buildNewExtensionStep, } from "@agentxm/workspace-reconciliation";
|
|
24
|
+
import { McpSecretStore } from "@agentxm/extension-materialization";
|
|
25
|
+
import { materializeAuthoredMcpServer } from "@agentxm/workspace-reconciliation";
|
|
24
26
|
import { CONFIGURABLE_AGENTS_BY_ID } from "@agentxm/extension-model/unstable/agent-capabilities";
|
|
25
27
|
import { toExtensionTypePlural, formatFqn, decodeExtensionNameSync, } from "@agentxm/extension-model/unstable/extensions";
|
|
26
28
|
import { operationPresentation, prepareExecutionCandidate, resolveExecutionCandidate, } from "@agentxm/workspace-operations";
|
|
@@ -23,7 +23,8 @@ import type * as HttpClient from "effect/unstable/http/HttpClient";
|
|
|
23
23
|
import * as Option from "effect/Option";
|
|
24
24
|
import * as Path from "effect/Path";
|
|
25
25
|
import type * as Scope from "effect/Scope";
|
|
26
|
-
import { ExtensionManagers, McpSecretStore, type ManagerRequirements
|
|
26
|
+
import { ExtensionManagers, McpSecretStore, type ManagerRequirements } from "@agentxm/extension-materialization";
|
|
27
|
+
import { type RecipeRequirements } from "@agentxm/workspace-reconciliation";
|
|
27
28
|
import { type ExtensionType, type FqnInvalidError, type Handle } from "@agentxm/extension-model/unstable/extensions";
|
|
28
29
|
import { SourceHostProviders, WorkspaceCatalog, type SourceResolutionFailure } from "@agentxm/extension-sources";
|
|
29
30
|
import { type CandidateFingerprintFailed, type ExecutionCandidate, type PlanExecution } from "@agentxm/workspace-operations";
|
|
@@ -21,7 +21,9 @@ import * as Effect from "effect/Effect";
|
|
|
21
21
|
import * as FileSystem from "effect/FileSystem";
|
|
22
22
|
import * as Option from "effect/Option";
|
|
23
23
|
import * as Path from "effect/Path";
|
|
24
|
-
import { ExtensionManagers, McpSecretStore,
|
|
24
|
+
import { ExtensionManagers, McpSecretStore, copyExtensionDirectory, createCanonicalDirectory, recoverCanonicalDirectory, } from "@agentxm/extension-materialization";
|
|
25
|
+
import { materializeAuthoredMcpServer } from "@agentxm/workspace-reconciliation";
|
|
26
|
+
import { buildAuthoredExtensionStep, } from "@agentxm/workspace-reconciliation";
|
|
25
27
|
import { extensionTypeFromPlural, extensionTypeToPlural, formatFqn, parseFqn, parseSourceQualifiedRegistrySourcePatternParts, } from "@agentxm/extension-model/unstable/extensions";
|
|
26
28
|
import { SourceHostProviders, WorkspaceCatalog, findExtensionPackagesFromSource, inspectExtensionPackage, resolveSource, } from "@agentxm/extension-sources";
|
|
27
29
|
import { operationPresentation, prepareExecutionCandidate, resolveExecutionCandidate, } from "@agentxm/workspace-operations";
|
|
@@ -21,7 +21,8 @@ import type * as HttpClient from "effect/unstable/http/HttpClient";
|
|
|
21
21
|
import * as Option from "effect/Option";
|
|
22
22
|
import * as Path from "effect/Path";
|
|
23
23
|
import type * as Scope from "effect/Scope";
|
|
24
|
-
import { ExtensionManagers, McpSecretStore, type ManagerRequirements, type NativeMcpEntryRef
|
|
24
|
+
import { ExtensionManagers, McpSecretStore, type ManagerRequirements, type NativeMcpEntryRef } from "@agentxm/extension-materialization";
|
|
25
|
+
import { type RecipeRequirements } from "@agentxm/workspace-reconciliation";
|
|
25
26
|
import { type FqnInvalidError, type Handle } from "@agentxm/extension-model/unstable/extensions";
|
|
26
27
|
import { SourceHostProviders, WorkspaceCatalog, type SourceResolutionFailure } from "@agentxm/extension-sources";
|
|
27
28
|
import { type CandidateFingerprintFailed, type ExecutionCandidate, type PlanExecution } from "@agentxm/workspace-operations";
|
|
@@ -19,7 +19,9 @@ import * as Effect from "effect/Effect";
|
|
|
19
19
|
import * as FileSystem from "effect/FileSystem";
|
|
20
20
|
import * as Option from "effect/Option";
|
|
21
21
|
import * as Path from "effect/Path";
|
|
22
|
-
import { ExtensionManagers, McpSecretStore,
|
|
22
|
+
import { ExtensionManagers, McpSecretStore, copyExtensionDirectory, createCanonicalDirectory, recoverCanonicalDirectory, retireNativeMcpEntry, } from "@agentxm/extension-materialization";
|
|
23
|
+
import { materializeAuthoredMcpServer } from "@agentxm/workspace-reconciliation";
|
|
24
|
+
import { buildAuthoredExtensionStep, } from "@agentxm/workspace-reconciliation";
|
|
23
25
|
import { extensionTypeToPlural, formatFqn, parseFqn, } from "@agentxm/extension-model/unstable/extensions";
|
|
24
26
|
import { MCP_SERVER_MANIFEST_FILENAME, MCP_SERVER_MANIFEST_SCHEMA_URL, MCP_SERVER_REGISTRY_SERVER_SCHEMA_URL, } from "@agentxm/extension-model/unstable/mcps/manifest-schema";
|
|
25
27
|
import { decodeVersionSync } from "@agentxm/extension-model/unstable/version-constraints";
|
package/package.json
CHANGED
|
@@ -4,25 +4,26 @@
|
|
|
4
4
|
"url": "https://github.com/agentxm/axm/issues"
|
|
5
5
|
},
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@agentxm/extension-content": "^0.
|
|
8
|
-
"@agentxm/extension-materialization": "^0.
|
|
9
|
-
"@agentxm/extension-model": "^0.
|
|
10
|
-
"@agentxm/extension-sources": "^0.
|
|
11
|
-
"@agentxm/registry-auth": "^0.
|
|
12
|
-
"@agentxm/registry-client": "^0.
|
|
13
|
-
"@agentxm/workspace-operations": "^0.
|
|
14
|
-
"@agentxm/workspace-projection": "^0.
|
|
15
|
-
"@agentxm/workspace-
|
|
16
|
-
"@agentxm/workspace-
|
|
7
|
+
"@agentxm/extension-content": "^0.30.2",
|
|
8
|
+
"@agentxm/extension-materialization": "^0.30.2",
|
|
9
|
+
"@agentxm/extension-model": "^0.30.2",
|
|
10
|
+
"@agentxm/extension-sources": "^0.30.2",
|
|
11
|
+
"@agentxm/registry-auth": "^0.30.2",
|
|
12
|
+
"@agentxm/registry-client": "^0.30.2",
|
|
13
|
+
"@agentxm/workspace-operations": "^0.30.2",
|
|
14
|
+
"@agentxm/workspace-projection": "^0.30.2",
|
|
15
|
+
"@agentxm/workspace-reconciliation": "^0.30.2",
|
|
16
|
+
"@agentxm/workspace-state": "^0.30.2",
|
|
17
|
+
"@agentxm/workspace-transactions": "^0.30.2",
|
|
17
18
|
"effect": "4.0.0-rc.115",
|
|
18
19
|
"semver": "^7.8.5",
|
|
19
20
|
"yaml": "^2.9.0"
|
|
20
21
|
},
|
|
21
22
|
"description": "AXM extension-authoring feature: new-extension scaffolding, fork, native import, adopt/demote identity policy, and authored pack membership for the axm CLI. Unstable and unsupported — use the axm.sh CLI.",
|
|
22
23
|
"devDependencies": {
|
|
23
|
-
"@agentxm/agent-integration": "^0.
|
|
24
|
-
"@agentxm/extension-resolution": "^0.
|
|
25
|
-
"@agentxm/specification-metadata": "^0.
|
|
24
|
+
"@agentxm/agent-integration": "^0.30.2",
|
|
25
|
+
"@agentxm/extension-resolution": "^0.30.2",
|
|
26
|
+
"@agentxm/specification-metadata": "^0.30.2",
|
|
26
27
|
"@effect/platform-node": "4.0.0-rc.115",
|
|
27
28
|
"@effect/vitest": "4.0.0-rc.115",
|
|
28
29
|
"@types/bun": "^1.3.14",
|
|
@@ -36,14 +37,12 @@
|
|
|
36
37
|
},
|
|
37
38
|
"exports": {
|
|
38
39
|
".": {
|
|
39
|
-
"
|
|
40
|
-
"default": "./dist/src/index.js"
|
|
41
|
-
"types": "./dist/src/index.d.ts"
|
|
40
|
+
"types": "./dist/src/index.d.ts",
|
|
41
|
+
"default": "./dist/src/index.js"
|
|
42
42
|
},
|
|
43
43
|
"./testing": {
|
|
44
|
-
"
|
|
45
|
-
"default": "./dist/src/testing.js"
|
|
46
|
-
"types": "./dist/src/testing.d.ts"
|
|
44
|
+
"types": "./dist/src/testing.d.ts",
|
|
45
|
+
"default": "./dist/src/testing.js"
|
|
47
46
|
}
|
|
48
47
|
},
|
|
49
48
|
"files": [
|
|
@@ -66,5 +65,5 @@
|
|
|
66
65
|
},
|
|
67
66
|
"sideEffects": false,
|
|
68
67
|
"type": "module",
|
|
69
|
-
"version": "0.
|
|
68
|
+
"version": "0.30.2"
|
|
70
69
|
}
|