@jini-ai/agent-plugins 0.4.7 → 0.6.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/CHANGELOG.md +24 -2
- package/README.md +46 -0
- package/dist/admin-surfaces/action-dispatcher.d.ts +37 -0
- package/dist/admin-surfaces/action-dispatcher.d.ts.map +1 -0
- package/dist/admin-surfaces/action-dispatcher.js +69 -0
- package/dist/admin-surfaces/action-dispatcher.js.map +1 -0
- package/dist/admin-surfaces/action-schema.d.ts +56 -0
- package/dist/admin-surfaces/action-schema.d.ts.map +1 -0
- package/dist/admin-surfaces/action-schema.js +167 -0
- package/dist/admin-surfaces/action-schema.js.map +1 -0
- package/dist/admin-surfaces/action-tools.d.ts +40 -0
- package/dist/admin-surfaces/action-tools.d.ts.map +1 -0
- package/dist/admin-surfaces/action-tools.js +52 -0
- package/dist/admin-surfaces/action-tools.js.map +1 -0
- package/dist/admin-surfaces/callback-field-inbox.d.ts +35 -0
- package/dist/admin-surfaces/callback-field-inbox.d.ts.map +1 -0
- package/dist/admin-surfaces/callback-field-inbox.js +53 -0
- package/dist/admin-surfaces/callback-field-inbox.js.map +1 -0
- package/dist/admin-surfaces/capability-declarations.d.ts +41 -0
- package/dist/admin-surfaces/capability-declarations.d.ts.map +1 -0
- package/dist/admin-surfaces/capability-declarations.js +102 -0
- package/dist/admin-surfaces/capability-declarations.js.map +1 -0
- package/dist/admin-surfaces/contribution.d.ts +49 -0
- package/dist/admin-surfaces/contribution.d.ts.map +1 -0
- package/dist/admin-surfaces/contribution.js +30 -0
- package/dist/admin-surfaces/contribution.js.map +1 -0
- package/dist/admin-surfaces/delivery-bindings.d.ts +76 -0
- package/dist/admin-surfaces/delivery-bindings.d.ts.map +1 -0
- package/dist/admin-surfaces/delivery-bindings.js +99 -0
- package/dist/admin-surfaces/delivery-bindings.js.map +1 -0
- package/dist/admin-surfaces/descriptor.d.ts +69 -0
- package/dist/admin-surfaces/descriptor.d.ts.map +1 -0
- package/dist/admin-surfaces/descriptor.js +196 -0
- package/dist/admin-surfaces/descriptor.js.map +1 -0
- package/dist/admin-surfaces/external-links.d.ts +45 -0
- package/dist/admin-surfaces/external-links.d.ts.map +1 -0
- package/dist/admin-surfaces/external-links.js +70 -0
- package/dist/admin-surfaces/external-links.js.map +1 -0
- package/dist/admin-surfaces/host-validator.d.ts +62 -0
- package/dist/admin-surfaces/host-validator.d.ts.map +1 -0
- package/dist/admin-surfaces/host-validator.js +87 -0
- package/dist/admin-surfaces/host-validator.js.map +1 -0
- package/dist/admin-surfaces/index.d.ts +23 -0
- package/dist/admin-surfaces/index.d.ts.map +1 -0
- package/dist/admin-surfaces/index.js +21 -0
- package/dist/admin-surfaces/index.js.map +1 -0
- package/dist/admin-surfaces/protocol.d.ts +103 -0
- package/dist/admin-surfaces/protocol.d.ts.map +1 -0
- package/dist/admin-surfaces/protocol.js +25 -0
- package/dist/admin-surfaces/protocol.js.map +1 -0
- package/dist/admin-surfaces/sandbox.d.ts +78 -0
- package/dist/admin-surfaces/sandbox.d.ts.map +1 -0
- package/dist/admin-surfaces/sandbox.js +92 -0
- package/dist/admin-surfaces/sandbox.js.map +1 -0
- package/dist/admin-surfaces/settings-value.d.ts +28 -0
- package/dist/admin-surfaces/settings-value.d.ts.map +1 -0
- package/dist/admin-surfaces/settings-value.js +45 -0
- package/dist/admin-surfaces/settings-value.js.map +1 -0
- package/dist/admin-surfaces/surface-capabilities.d.ts +167 -0
- package/dist/admin-surfaces/surface-capabilities.d.ts.map +1 -0
- package/dist/admin-surfaces/surface-capabilities.js +215 -0
- package/dist/admin-surfaces/surface-capabilities.js.map +1 -0
- package/dist/admin-surfaces/surface-client.d.ts +116 -0
- package/dist/admin-surfaces/surface-client.d.ts.map +1 -0
- package/dist/admin-surfaces/surface-client.js +219 -0
- package/dist/admin-surfaces/surface-client.js.map +1 -0
- package/dist/admin-surfaces/surface-handlers.d.ts +111 -0
- package/dist/admin-surfaces/surface-handlers.d.ts.map +1 -0
- package/dist/admin-surfaces/surface-handlers.js +172 -0
- package/dist/admin-surfaces/surface-handlers.js.map +1 -0
- package/dist/admin-surfaces/theme.d.ts +59 -0
- package/dist/admin-surfaces/theme.d.ts.map +1 -0
- package/dist/admin-surfaces/theme.js +57 -0
- package/dist/admin-surfaces/theme.js.map +1 -0
- package/dist/folder-zip-node.d.ts.map +1 -0
- package/dist/folder-zip-node.js +59 -49
- package/dist/folder-zip-node.js.map +1 -0
- package/dist/folder-zip.d.ts.map +1 -0
- package/dist/folder-zip.js +9 -7
- package/dist/folder-zip.js.map +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle/activation.d.ts.map +1 -0
- package/dist/lifecycle/activation.js.map +1 -0
- package/dist/lifecycle/automatic-use.d.ts +79 -0
- package/dist/lifecycle/automatic-use.d.ts.map +1 -0
- package/dist/lifecycle/automatic-use.js +165 -0
- package/dist/lifecycle/automatic-use.js.map +1 -0
- package/dist/lifecycle/bundled-digests.d.ts.map +1 -0
- package/dist/lifecycle/bundled-digests.js.map +1 -0
- package/dist/lifecycle/bundled-source-archive.d.ts.map +1 -0
- package/dist/lifecycle/bundled-source-archive.js.map +1 -0
- package/dist/lifecycle/capability-projection.d.ts.map +1 -0
- package/dist/lifecycle/capability-projection.js.map +1 -0
- package/dist/lifecycle/compatibility-metadata.d.ts +19 -0
- package/dist/lifecycle/compatibility-metadata.d.ts.map +1 -0
- package/dist/lifecycle/compatibility-metadata.js +45 -0
- package/dist/lifecycle/compatibility-metadata.js.map +1 -0
- package/dist/lifecycle/compatibility.d.ts +52 -0
- package/dist/lifecycle/compatibility.d.ts.map +1 -0
- package/dist/lifecycle/compatibility.js +60 -0
- package/dist/lifecycle/compatibility.js.map +1 -0
- package/dist/lifecycle/contribution-loader.d.ts.map +1 -0
- package/dist/lifecycle/contribution-loader.js.map +1 -0
- package/dist/lifecycle/fetch-archive.d.ts.map +1 -0
- package/dist/lifecycle/fetch-archive.js +26 -24
- package/dist/lifecycle/fetch-archive.js.map +1 -0
- package/dist/lifecycle/index.d.ts +14 -2
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +8 -1
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/install-errors.d.ts.map +1 -0
- package/dist/lifecycle/install-errors.js.map +1 -0
- package/dist/lifecycle/install-from-url.d.ts.map +1 -0
- package/dist/lifecycle/install-from-url.js.map +1 -0
- package/dist/lifecycle/install.d.ts.map +1 -0
- package/dist/lifecycle/install.js +7 -0
- package/dist/lifecycle/install.js.map +1 -0
- package/dist/lifecycle/installed-package-index.d.ts.map +1 -0
- package/dist/lifecycle/installed-package-index.js +41 -29
- package/dist/lifecycle/installed-package-index.js.map +1 -0
- package/dist/lifecycle/installed-package-roots.d.ts.map +1 -0
- package/dist/lifecycle/installed-package-roots.js +28 -20
- package/dist/lifecycle/installed-package-roots.js.map +1 -0
- package/dist/lifecycle/layout.d.ts.map +1 -0
- package/dist/lifecycle/layout.js.map +1 -0
- package/dist/lifecycle/manifest.d.ts +13 -0
- package/dist/lifecycle/manifest.d.ts.map +1 -0
- package/dist/lifecycle/manifest.js +115 -101
- package/dist/lifecycle/manifest.js.map +1 -0
- package/dist/lifecycle/mcp-provisioning.d.ts.map +1 -0
- package/dist/lifecycle/mcp-provisioning.js.map +1 -0
- package/dist/lifecycle/node.d.ts.map +1 -0
- package/dist/lifecycle/node.js.map +1 -0
- package/dist/lifecycle/package-paths.d.ts.map +1 -0
- package/dist/lifecycle/package-paths.js +3 -3
- package/dist/lifecycle/package-paths.js.map +1 -0
- package/dist/lifecycle/persistent-state.d.ts.map +1 -0
- package/dist/lifecycle/persistent-state.js.map +1 -0
- package/dist/lifecycle/ports.d.ts +1 -1
- package/dist/lifecycle/ports.d.ts.map +1 -0
- package/dist/lifecycle/ports.js.map +1 -0
- package/dist/lifecycle/provider-contribution.d.ts +65 -0
- package/dist/lifecycle/provider-contribution.d.ts.map +1 -0
- package/dist/lifecycle/provider-contribution.js +93 -0
- package/dist/lifecycle/provider-contribution.js.map +1 -0
- package/dist/lifecycle/resolve-agent-plugin-refs.d.ts.map +1 -0
- package/dist/lifecycle/resolve-agent-plugin-refs.js +15 -2
- package/dist/lifecycle/resolve-agent-plugin-refs.js.map +1 -0
- package/dist/lifecycle/retire-bundled.d.ts.map +1 -0
- package/dist/lifecycle/retire-bundled.js +20 -18
- package/dist/lifecycle/retire-bundled.js.map +1 -0
- package/dist/lifecycle/search.d.ts +6 -1
- package/dist/lifecycle/search.d.ts.map +1 -0
- package/dist/lifecycle/search.js +45 -7
- package/dist/lifecycle/search.js.map +1 -0
- package/dist/lifecycle/seed-bundled.d.ts.map +1 -0
- package/dist/lifecycle/seed-bundled.js.map +1 -0
- package/dist/lifecycle/set-enabled.d.ts +2 -1
- package/dist/lifecycle/set-enabled.d.ts.map +1 -0
- package/dist/lifecycle/set-enabled.js +52 -8
- package/dist/lifecycle/set-enabled.js.map +1 -0
- package/dist/lifecycle/skill-file-reader.d.ts.map +1 -0
- package/dist/lifecycle/skill-file-reader.js +85 -71
- package/dist/lifecycle/skill-file-reader.js.map +1 -0
- package/dist/lifecycle/tools/capabilities.d.ts +199 -0
- package/dist/lifecycle/tools/capabilities.d.ts.map +1 -0
- package/dist/lifecycle/tools/capabilities.js +213 -0
- package/dist/lifecycle/tools/capabilities.js.map +1 -0
- package/dist/lifecycle/tools/definition.d.ts +32 -0
- package/dist/lifecycle/tools/definition.d.ts.map +1 -0
- package/dist/lifecycle/tools/definition.js +33 -0
- package/dist/lifecycle/tools/definition.js.map +1 -0
- package/dist/lifecycle/tools/index.d.ts +10 -0
- package/dist/lifecycle/tools/index.d.ts.map +1 -0
- package/dist/lifecycle/tools/index.js +10 -0
- package/dist/lifecycle/tools/index.js.map +1 -0
- package/dist/lifecycle/tools/manifest.d.ts +33 -0
- package/dist/lifecycle/tools/manifest.d.ts.map +1 -0
- package/dist/lifecycle/tools/manifest.js +89 -0
- package/dist/lifecycle/tools/manifest.js.map +1 -0
- package/dist/lifecycle/tools/projection.d.ts +90 -0
- package/dist/lifecycle/tools/projection.d.ts.map +1 -0
- package/dist/lifecycle/tools/projection.js +283 -0
- package/dist/lifecycle/tools/projection.js.map +1 -0
- package/dist/lifecycle/trusted-plugin-files.d.ts.map +1 -0
- package/dist/lifecycle/trusted-plugin-files.js.map +1 -0
- package/dist/lifecycle/types.d.ts +2 -0
- package/dist/lifecycle/types.d.ts.map +1 -0
- package/dist/lifecycle/types.js.map +1 -0
- package/dist/lifecycle/uninstall.d.ts +3 -1
- package/dist/lifecycle/uninstall.d.ts.map +1 -0
- package/dist/lifecycle/uninstall.js +51 -27
- package/dist/lifecycle/uninstall.js.map +1 -0
- package/dist/lifecycle/update-plan.d.ts +18 -0
- package/dist/lifecycle/update-plan.d.ts.map +1 -0
- package/dist/lifecycle/update-plan.js +22 -0
- package/dist/lifecycle/update-plan.js.map +1 -0
- package/dist/lifecycle/update-store.d.ts +71 -0
- package/dist/lifecycle/update-store.d.ts.map +1 -0
- package/dist/lifecycle/update-store.js +150 -0
- package/dist/lifecycle/update-store.js.map +1 -0
- package/dist/lifecycle/update.d.ts +55 -0
- package/dist/lifecycle/update.d.ts.map +1 -0
- package/dist/lifecycle/update.js +321 -0
- package/dist/lifecycle/update.js.map +1 -0
- package/dist/lifecycle/yauzl-archive-reader.d.ts.map +1 -0
- package/dist/lifecycle/yauzl-archive-reader.js.map +1 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js.map +1 -0
- package/package.json +39 -7
- package/ui-ux-design/plugin.json +7 -2
|
@@ -54,6 +54,7 @@
|
|
|
54
54
|
* own "receives a JS value, never a file path or raw bytes" contract. `install.ts` is the only
|
|
55
55
|
* caller that reads the file and hands the parsed value here.
|
|
56
56
|
*/
|
|
57
|
+
import { readAgentPluginCompatibilityMetadata } from "./compatibility-metadata.js";
|
|
57
58
|
import { readPluginIdentity, validatePluginIdentity } from "@jini-ai/core/plugin-directory";
|
|
58
59
|
export { validatePluginManifest, validateMcpManifest } from '../manifest.js';
|
|
59
60
|
/**
|
|
@@ -104,6 +105,15 @@ function readSpecVersion(value, file) {
|
|
|
104
105
|
*/
|
|
105
106
|
const NAME_PATTERN = /^[a-z0-9]+(?:[-.][a-z0-9]+)*$/;
|
|
106
107
|
const MAX_NAME_LENGTH = 64;
|
|
108
|
+
/**
|
|
109
|
+
* True when `value` is a valid Agent Plugin id: `plugin.json`'s `name` grammar (§5.5, see
|
|
110
|
+
* `NAME_PATTERN`), 1-64 characters. The one owner of that grammar: a host checks an id taken from a
|
|
111
|
+
* URL or a tool input here before it names anything on disk, instead of restating the pattern.
|
|
112
|
+
* @complexity O(n) in the value's length.
|
|
113
|
+
*/
|
|
114
|
+
export function isAgentPluginName({ value }, _optional = {}) {
|
|
115
|
+
return typeof value === "string" && value.length <= MAX_NAME_LENGTH && NAME_PATTERN.test(value);
|
|
116
|
+
}
|
|
107
117
|
const KNOWN_MANIFEST_KEYS = new Set(["$schema", "name", "version", "description", "author", "license", "keywords", "extensions"]);
|
|
108
118
|
/**
|
|
109
119
|
* True for a non-null, non-array plain object — the "is this actually a JSON object" gate both
|
|
@@ -112,6 +122,17 @@ const KNOWN_MANIFEST_KEYS = new Set(["$schema", "name", "version", "description"
|
|
|
112
122
|
function isJsonObject(value) {
|
|
113
123
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
114
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* `undefined` for an absent optional field, otherwise whatever `parse` makes of it — `null` meaning
|
|
127
|
+
* present but malformed, which every caller folds into rejecting the whole entry.
|
|
128
|
+
*/
|
|
129
|
+
function parseOptional({ value, parse }) {
|
|
130
|
+
return value === undefined ? undefined : parse(value);
|
|
131
|
+
}
|
|
132
|
+
/** Drops `undefined` members, so an absent optional field stays absent rather than present-as-undefined. */
|
|
133
|
+
function definedFields(fields) {
|
|
134
|
+
return Object.fromEntries(Object.entries(fields).filter(([, value]) => value !== undefined));
|
|
135
|
+
}
|
|
115
136
|
/**
|
|
116
137
|
* `value` narrowed to a `string`, or `undefined` — every optional string field below coerces
|
|
117
138
|
* through this one check instead of repeating its own `typeof ... === "string" ? ... : undefined`
|
|
@@ -125,11 +146,7 @@ function parseManifestAuthor(value) {
|
|
|
125
146
|
return value; // Existing installed manifests may carry a string.
|
|
126
147
|
if (!isJsonObject(value))
|
|
127
148
|
return undefined;
|
|
128
|
-
return {
|
|
129
|
-
...(typeof value.name === 'string' ? { name: value.name } : {}),
|
|
130
|
-
...(typeof value.email === 'string' ? { email: value.email } : {}),
|
|
131
|
-
...(typeof value.url === 'string' ? { url: value.url } : {}),
|
|
132
|
-
};
|
|
149
|
+
return definedFields({ name: coerceOptionalString(value.name), email: coerceOptionalString(value.email), url: coerceOptionalString(value.url) });
|
|
133
150
|
}
|
|
134
151
|
/**
|
|
135
152
|
* Validates `plugin.json`'s `name` field per §5.5's grammar (see `NAME_PATTERN`'s own header for
|
|
@@ -141,26 +158,15 @@ function resolveManifestName(raw) {
|
|
|
141
158
|
const name = coerceOptionalString(raw.name);
|
|
142
159
|
if (name === undefined)
|
|
143
160
|
return { error: "plugin.json 'name' is required and must be a string" };
|
|
144
|
-
if (
|
|
161
|
+
if (!isAgentPluginName({ value: name })) {
|
|
145
162
|
return {
|
|
146
163
|
error: `plugin.json 'name' ('${name}') must be 1-${MAX_NAME_LENGTH} lowercase alphanumeric/hyphen/period characters, start and end alphanumeric, with no consecutive delimiters`,
|
|
147
164
|
};
|
|
148
165
|
}
|
|
149
166
|
return { name };
|
|
150
167
|
}
|
|
151
|
-
/**
|
|
152
|
-
|
|
153
|
-
* Hosts inject identityNamespace; the default retains the existing plugin extension format.
|
|
154
|
-
*
|
|
155
|
-
* @throws Nothing — every failure is reported via the returned `errors`, matching this codebase's
|
|
156
|
-
* own convention for expected validation outcomes (`plugin-runtime/manifest.ts`,
|
|
157
|
-
* `plugin-runtime/discovery.ts`).
|
|
158
|
-
* @complexity O(k + n) time and space in the input keys and keyword entries.
|
|
159
|
-
*/
|
|
160
|
-
export function parseAgentPluginManifest({ value }, { identityNamespace = "tovu" } = {}) {
|
|
161
|
-
if (!isJsonObject(value))
|
|
162
|
-
return { ok: false, errors: ["plugin.json must be a JSON object"] };
|
|
163
|
-
const raw = value;
|
|
168
|
+
/** Every `plugin.json` error and warning, in report order: spec version, extensions, name, unknown keys, identity. */
|
|
169
|
+
function collectManifestProblems({ raw, identityNamespace }, { nameError } = {}) {
|
|
164
170
|
const errors = [];
|
|
165
171
|
const warnings = [];
|
|
166
172
|
const specVersion = readSpecVersion(raw.$schema, "plugin");
|
|
@@ -170,19 +176,39 @@ export function parseAgentPluginManifest({ value }, { identityNamespace = "tovu"
|
|
|
170
176
|
warnings.push(specVersion.warning);
|
|
171
177
|
if (raw.extensions !== undefined && !isJsonObject(raw.extensions))
|
|
172
178
|
errors.push("plugin.json extensions must be an object");
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
errors.push(nameResult.error);
|
|
179
|
+
if (nameError)
|
|
180
|
+
errors.push(nameError);
|
|
176
181
|
for (const key of Object.keys(raw)) {
|
|
177
182
|
if (!KNOWN_MANIFEST_KEYS.has(key))
|
|
178
183
|
warnings.push(`unrecognized plugin.json field '${key}' (ignored per spec)`);
|
|
179
184
|
}
|
|
180
185
|
errors.push(...validatePluginIdentity({ manifest: raw, namespace: identityNamespace }).errors);
|
|
186
|
+
return { errors, warnings };
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Validates an already-`JSON.parse`d `plugin.json` value against the 1.0.0/1.1.0 grammar.
|
|
190
|
+
* Hosts inject identityNamespace; the default retains the existing plugin extension format.
|
|
191
|
+
*
|
|
192
|
+
* @throws Nothing — every failure is reported via the returned `errors`, matching this codebase's
|
|
193
|
+
* own convention for expected validation outcomes (`plugin-runtime/manifest.ts`,
|
|
194
|
+
* `plugin-runtime/discovery.ts`).
|
|
195
|
+
* @complexity O(k + n) time and space in the input keys and keyword entries.
|
|
196
|
+
*/
|
|
197
|
+
export function parseAgentPluginManifest({ value }, { identityNamespace = "tovu" } = {}) {
|
|
198
|
+
if (!isJsonObject(value))
|
|
199
|
+
return { ok: false, errors: ["plugin.json must be a JSON object"] };
|
|
200
|
+
const raw = value;
|
|
201
|
+
const nameResult = resolveManifestName(raw);
|
|
202
|
+
const { errors, warnings } = collectManifestProblems({ raw, identityNamespace }, { nameError: nameResult.error });
|
|
181
203
|
if (errors.length > 0)
|
|
182
204
|
return { ok: false, errors };
|
|
183
205
|
const identity = readPluginIdentity({ manifest: raw, namespace: identityNamespace });
|
|
184
206
|
warnings.push(...identity.warnings);
|
|
207
|
+
const extension = isJsonObject(raw.extensions) && isJsonObject(raw.extensions[identityNamespace]) ? raw.extensions[identityNamespace] : {};
|
|
208
|
+
const { warnings: compatibilityWarnings, ...compatibility } = readAgentPluginCompatibilityMetadata({ extension });
|
|
209
|
+
warnings.push(...compatibilityWarnings);
|
|
185
210
|
const manifest = {
|
|
211
|
+
...compatibility,
|
|
186
212
|
name: nameResult.name,
|
|
187
213
|
id: identity.id,
|
|
188
214
|
provides: identity.provides,
|
|
@@ -224,20 +250,12 @@ function isStringRecord(value) {
|
|
|
224
250
|
function parseStdioServerConfig(raw) {
|
|
225
251
|
if (typeof raw.command !== "string" || raw.command.length === 0)
|
|
226
252
|
return null;
|
|
227
|
-
const { args,
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
if (
|
|
253
|
+
const args = parseOptional({ value: raw.args, parse: (value) => Array.isArray(value) && value.every((entry) => typeof entry === "string") ? value : null });
|
|
254
|
+
const env = parseOptional({ value: raw.env, parse: (value) => isStringRecord(value) && !RESERVED_STDIO_ENV_KEYS.some((key) => Object.hasOwn(value, key)) ? value : null });
|
|
255
|
+
const cwd = parseOptional({ value: raw.cwd, parse: (value) => typeof value === "string" ? value : null });
|
|
256
|
+
if (args === null || env === null || cwd === null)
|
|
231
257
|
return null;
|
|
232
|
-
|
|
233
|
-
return null;
|
|
234
|
-
return {
|
|
235
|
-
type: "stdio",
|
|
236
|
-
command: raw.command,
|
|
237
|
-
...(args !== undefined ? { args: args } : {}),
|
|
238
|
-
...(env !== undefined ? { env } : {}),
|
|
239
|
-
...(cwd !== undefined ? { cwd } : {}),
|
|
240
|
-
};
|
|
258
|
+
return { type: "stdio", command: raw.command, ...definedFields({ args, env, cwd }) };
|
|
241
259
|
}
|
|
242
260
|
/**
|
|
243
261
|
* Same bound and grammar as `external-mcp-store.ts`'s `MAX_ALLOWED_TOOLS`/`REMOTE_TOOL_NAME_PATTERN`,
|
|
@@ -253,6 +271,10 @@ function parseDefaultToolNames(value) {
|
|
|
253
271
|
return null;
|
|
254
272
|
return value.every((name) => typeof name === "string" && DEFAULT_TOOL_NAME_PATTERN.test(name)) ? value : null;
|
|
255
273
|
}
|
|
274
|
+
/** `read` and `write` default to `[]` when absent. */
|
|
275
|
+
function parseGrantList(value) {
|
|
276
|
+
return value === undefined ? [] : parseDefaultToolNames(value);
|
|
277
|
+
}
|
|
256
278
|
/**
|
|
257
279
|
* Validates bounded sign-in and read lists. `read` and `write` default to `[]`.
|
|
258
280
|
* A provided `allow` bounds both lists; without it only a read declaration is meaningful,
|
|
@@ -264,15 +286,15 @@ function parseDefaultToolNames(value) {
|
|
|
264
286
|
function parseDefaultTools(value) {
|
|
265
287
|
if (!isJsonObject(value))
|
|
266
288
|
return null;
|
|
267
|
-
const allow = value.allow
|
|
268
|
-
const write =
|
|
269
|
-
const read =
|
|
289
|
+
const allow = parseOptional({ value: value.allow, parse: parseDefaultToolNames });
|
|
290
|
+
const write = parseGrantList(value.write);
|
|
291
|
+
const read = parseGrantList(value.read);
|
|
270
292
|
if (allow === null || write === null || read === null)
|
|
271
293
|
return null;
|
|
272
294
|
if (allow === undefined)
|
|
273
295
|
return value.read !== undefined && write.length === 0 ? { write, read } : null;
|
|
274
296
|
const allowed = new Set(allow);
|
|
275
|
-
return write
|
|
297
|
+
return [...write, ...read].every((name) => allowed.has(name)) ? { allow, write, read } : null;
|
|
276
298
|
}
|
|
277
299
|
const MAX_TOKEN_AUTH_URL_LENGTH = 2048;
|
|
278
300
|
function isHttpsUrl(value) {
|
|
@@ -320,18 +342,11 @@ function parseRenamedTools(value) {
|
|
|
320
342
|
function parseTokenAuth(value) {
|
|
321
343
|
if (!isJsonObject(value) || !isHttpsUrl(value.helpUrl) || !isHttpsUrl(value.probeUrl))
|
|
322
344
|
return null;
|
|
323
|
-
const { importFromEnv
|
|
324
|
-
|
|
345
|
+
const importFromEnv = parseOptional({ value: value.importFromEnv, parse: (name) => isEnvVarName(name) ? name : null });
|
|
346
|
+
const retiredEnv = parseOptional({ value: value.retiredEnv, parse: parseRetiredEnv });
|
|
347
|
+
if (importFromEnv === null || retiredEnv === null)
|
|
325
348
|
return null;
|
|
326
|
-
|
|
327
|
-
if (retiredEnv === null)
|
|
328
|
-
return null;
|
|
329
|
-
return {
|
|
330
|
-
helpUrl: value.helpUrl,
|
|
331
|
-
probeUrl: value.probeUrl,
|
|
332
|
-
...(importFromEnv !== undefined ? { importFromEnv } : {}),
|
|
333
|
-
...(retiredEnv !== undefined ? { retiredEnv } : {}),
|
|
334
|
-
};
|
|
349
|
+
return { helpUrl: value.helpUrl, probeUrl: value.probeUrl, ...definedFields({ importFromEnv, retiredEnv }) };
|
|
335
350
|
}
|
|
336
351
|
/**
|
|
337
352
|
* Validates one `type: "streamable-http"` or `type: "sse"` server entry — the two remote transports
|
|
@@ -346,45 +361,64 @@ function parseTokenAuth(value) {
|
|
|
346
361
|
function parseRemoteServerConfig(type, raw, extension) {
|
|
347
362
|
if (typeof raw.url !== "string" || raw.url.length === 0)
|
|
348
363
|
return null;
|
|
349
|
-
const { headers
|
|
350
|
-
const
|
|
351
|
-
if (headers
|
|
364
|
+
const headers = parseOptional({ value: raw.headers, parse: (value) => isStringRecord(value) ? value : null });
|
|
365
|
+
const metadata = parseServerMetadata(extension ?? {});
|
|
366
|
+
if (headers === null || metadata === null)
|
|
352
367
|
return null;
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
const tokenAuth = extension
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
const renamedTools = extension?.renamedTools === undefined ? undefined : parseRenamedTools(extension?.renamedTools);
|
|
363
|
-
if (renamedTools === null)
|
|
368
|
+
return { type, url: raw.url, ...definedFields({ headers }), ...metadata };
|
|
369
|
+
}
|
|
370
|
+
/** A remote entry's extension metadata, or `null` when any declared member is malformed. */
|
|
371
|
+
function parseServerMetadata(extension) {
|
|
372
|
+
const authMode = parseOptional({ value: extension.authMode, parse: (mode) => mode === "oauth" || mode === "none" ? mode : null });
|
|
373
|
+
const defaultTools = parseOptional({ value: extension.defaultTools, parse: parseDefaultTools });
|
|
374
|
+
const tokenAuth = parseOptional({ value: extension.tokenAuth, parse: parseTokenAuth });
|
|
375
|
+
const renamedTools = parseOptional({ value: extension.renamedTools, parse: parseRenamedTools });
|
|
376
|
+
if (authMode === null || defaultTools === null || tokenAuth === null || renamedTools === null)
|
|
364
377
|
return null;
|
|
365
|
-
return {
|
|
366
|
-
type,
|
|
367
|
-
url: raw.url,
|
|
368
|
-
...(headers !== undefined ? { headers } : {}),
|
|
369
|
-
...(authMode !== undefined ? { authMode } : {}),
|
|
370
|
-
...(defaultTools !== undefined ? { defaultTools } : {}),
|
|
371
|
-
...(tokenAuth !== undefined ? { tokenAuth } : {}),
|
|
372
|
-
...(renamedTools !== undefined ? { renamedTools } : {}),
|
|
373
|
-
};
|
|
378
|
+
return definedFields({ authMode, defaultTools, tokenAuth, renamedTools });
|
|
374
379
|
}
|
|
375
380
|
/**
|
|
376
|
-
* Dispatches one
|
|
377
|
-
*
|
|
381
|
+
* Dispatches one `mcpServers` object entry to its transport's validator by `type`, or `null` for a
|
|
382
|
+
* `type` outside {@link MCP_SERVER_TRANSPORTS}.
|
|
378
383
|
*/
|
|
379
384
|
function parseMcpServerConfig(value, extension) {
|
|
380
|
-
if (!isJsonObject(value))
|
|
381
|
-
return null;
|
|
382
385
|
if (value.type === "stdio")
|
|
383
386
|
return parseStdioServerConfig(value);
|
|
384
387
|
if (value.type === "streamable-http" || value.type === "sse")
|
|
385
388
|
return parseRemoteServerConfig(value.type, value, extension);
|
|
386
389
|
return null;
|
|
387
390
|
}
|
|
391
|
+
/** One declared server, or `null` for a non-object entry, a malformed extension, or an invalid transport shape. */
|
|
392
|
+
function parseDeclaredServer({ serverId, rawServer, extension }, { readServerMetadata } = {}) {
|
|
393
|
+
// A malformed declared extension excludes the server before the translator can hide it.
|
|
394
|
+
if (!isJsonObject(rawServer) || (extension !== undefined && !isJsonObject(extension)))
|
|
395
|
+
return null;
|
|
396
|
+
const metadata = readServerMetadata?.({ serverId, value: extension ?? {}, server: rawServer }) ?? extension;
|
|
397
|
+
return parseMcpServerConfig(rawServer, metadata);
|
|
398
|
+
}
|
|
399
|
+
/** `mcp.json`'s top-level errors: its own `$schema`, a version mismatch with `plugin.json` (§10), and `mcpServers`' shape. */
|
|
400
|
+
function collectMcpConfigErrors({ raw }, { pluginManifest } = {}) {
|
|
401
|
+
const errors = [];
|
|
402
|
+
// plugin.json already reports an unknown-1.x warning; mcp.json adds none of its own.
|
|
403
|
+
const mcpSpec = readSpecVersion(raw.$schema, "mcp");
|
|
404
|
+
const mcpVersion = mcpSpec.version;
|
|
405
|
+
const pluginVersion = isJsonObject(pluginManifest) ? readSpecVersion(pluginManifest.$schema, "plugin").version : undefined;
|
|
406
|
+
if (mcpSpec.error)
|
|
407
|
+
errors.push(mcpSpec.error);
|
|
408
|
+
else if (pluginVersion !== undefined && pluginVersion !== mcpVersion) {
|
|
409
|
+
errors.push(`mcp.json targets Agent Plugins ${mcpVersion} but plugin.json targets ${pluginVersion}; the versions must match`);
|
|
410
|
+
}
|
|
411
|
+
if (!isJsonObject(raw.mcpServers))
|
|
412
|
+
errors.push("mcp.json 'mcpServers' is required and must be an object");
|
|
413
|
+
return errors;
|
|
414
|
+
}
|
|
415
|
+
/** The per-server metadata `plugin.json` declares under `extensionNamespace`, or `{}` when it declares none. */
|
|
416
|
+
function readExtensionServers({ pluginManifest, extensionNamespace }) {
|
|
417
|
+
const manifest = parseAgentPluginManifest({ value: pluginManifest });
|
|
418
|
+
if (!manifest.ok)
|
|
419
|
+
return {};
|
|
420
|
+
return readAgentPluginExtension({ manifest: manifest.manifest, namespace: extensionNamespace, read: ({ value }) => isJsonObject(value.mcpServers) ? value.mcpServers : {} }) ?? {};
|
|
421
|
+
}
|
|
388
422
|
/**
|
|
389
423
|
* Validates an already-`JSON.parse`d `mcp.json` value against the 1.0.0/1.1.0 top-level shape:
|
|
390
424
|
* `{ "$schema": ..., "mcpServers": { "<server-id>": {...} } }`, then validates each declared
|
|
@@ -399,35 +433,15 @@ export function parseAgentPluginMcpConfig({ value, extensionNamespace }, optiona
|
|
|
399
433
|
throw new Error("An extension namespace is required");
|
|
400
434
|
if (!isJsonObject(value))
|
|
401
435
|
return { ok: false, errors: ["mcp.json must be a JSON object"] };
|
|
402
|
-
const
|
|
403
|
-
const errors = [];
|
|
404
|
-
// plugin.json already reports an unknown-1.x warning; mcp.json adds none of its own.
|
|
405
|
-
const mcpSpec = readSpecVersion(raw.$schema, "mcp");
|
|
406
|
-
const mcpVersion = mcpSpec.version;
|
|
407
|
-
const pluginVersion = isJsonObject(optional.pluginManifest) ? readSpecVersion(optional.pluginManifest.$schema, "plugin").version : undefined;
|
|
408
|
-
if (mcpSpec.error)
|
|
409
|
-
errors.push(mcpSpec.error);
|
|
410
|
-
else if (pluginVersion !== undefined && pluginVersion !== mcpVersion) {
|
|
411
|
-
errors.push(`mcp.json targets Agent Plugins ${mcpVersion} but plugin.json targets ${pluginVersion}; the versions must match`);
|
|
412
|
-
}
|
|
413
|
-
const mcpServers = raw.mcpServers;
|
|
414
|
-
if (typeof mcpServers !== "object" || mcpServers === null || Array.isArray(mcpServers)) {
|
|
415
|
-
errors.push("mcp.json 'mcpServers' is required and must be an object");
|
|
416
|
-
}
|
|
436
|
+
const errors = collectMcpConfigErrors({ raw: value }, { pluginManifest: optional.pluginManifest });
|
|
417
437
|
if (errors.length > 0)
|
|
418
438
|
return { ok: false, errors };
|
|
419
|
-
const
|
|
420
|
-
const
|
|
421
|
-
const extensionServers = extension ?? {};
|
|
422
|
-
const entries = Object.entries(mcpServers);
|
|
439
|
+
const extensionServers = readExtensionServers({ pluginManifest: optional.pluginManifest, extensionNamespace });
|
|
440
|
+
const entries = Object.entries(value.mcpServers);
|
|
423
441
|
const servers = Object.create(null);
|
|
424
442
|
for (const [serverId, rawServer] of entries) {
|
|
425
443
|
const extension = Object.hasOwn(extensionServers, serverId) ? extensionServers[serverId] : undefined;
|
|
426
|
-
|
|
427
|
-
const metadata = isJsonObject(rawServer) && (extension === undefined || isJsonObject(extension))
|
|
428
|
-
? optional.readServerMetadata?.({ serverId, value: extension ?? {}, server: rawServer }) ?? extension
|
|
429
|
-
: undefined;
|
|
430
|
-
const parsed = extension !== undefined && !isJsonObject(extension) ? null : parseMcpServerConfig(rawServer, metadata);
|
|
444
|
+
const parsed = parseDeclaredServer({ serverId, rawServer, extension }, { readServerMetadata: optional.readServerMetadata });
|
|
431
445
|
if (parsed)
|
|
432
446
|
servers[serverId] = parsed;
|
|
433
447
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/lifecycle/manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-provisioning.d.ts","sourceRoot":"","sources":["../../src/lifecycle/mcp-provisioning.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAEzD,gGAAgG;AAChG,wBAAsB,uBAAuB,CAAC,QAAQ,EAAE;IACtD,QAAQ,CAAC,eAAe,EAAE,8BAA8B,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;CAC1C,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB;AACD,wBAAsB,yBAAyB,CAAC,QAAQ,EAAE;IACxD,QAAQ,CAAC,eAAe,EAAE,8BAA8B,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB;AACD,wBAAsB,oBAAoB,CAAC,QAAQ,EAAE;IACnD,QAAQ,CAAC,eAAe,EAAE,8BAA8B,CAAC;IACzD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-provisioning.js","sourceRoot":"","sources":["../../src/lifecycle/mcp-provisioning.ts"],"names":[],"mappings":"AAGA,gGAAgG;AAChG,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,QAI7C;IACC,MAAM,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/G,MAAM,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,QAK/C;IACC,MAAM,QAAQ,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACzI,MAAM,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5F,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,QAI1C;IACC,MAAM,QAAQ,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC1G,MAAM,QAAQ,CAAC,eAAe,CAAC,mBAAmB,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;AAC5F,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../../src/lifecycle/node.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEnH,iGAAiG;AACjG,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,QAAQ,GAAE;IAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,cAAc,CAAA;CAAO,GAAG;IACvI,UAAU,EAAE,cAAc,CAAC;IAC3B,KAAK,EAAE,oBAAoB,CAAC;IAC5B,GAAG,EAAE,kBAAkB,CAAC;IACxB,OAAO,EAAE,sBAAsB,CAAC;CACjC,CAoBA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node.js","sourceRoot":"","sources":["../../src/lifecycle/node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAGlD,iGAAiG;AACjG,MAAM,UAAU,4BAA4B,CAAC,SAAgC,EAAE,WAAqD,EAAE;IAMpI,OAAO;QACL,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,gBAAgB;QACnD,KAAK,EAAE;YACL,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE;YACvB,WAAW,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;YACpC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC;SAClC;QACD,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE;QAC/D,OAAO,EAAE;YACP,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,QAAQ,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE;YAC7B,OAAO,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE;gBACnB,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;oBAAE,OAAO,KAAK,CAAC;gBACzD,IAAI,CAAC;oBAAC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;oBAAC,OAAO,IAAI,CAAC;gBAAC,CAAC;gBAC1C,OAAO,KAAK,EAAE,CAAC;oBAAC,OAAO,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC;gBAAC,CAAC;YACvH,CAAC;SACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-paths.d.ts","sourceRoot":"","sources":["../../src/lifecycle/package-paths.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D;sFACsF;AACtF,qBAAa,oBAAqB,SAAQ,KAAK;gBACjC,EAAE,OAAO,EAAE,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,GAAE,YAAiB;CACnF;AAgHD,gFAAgF;AAChF,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,YAAY,CAAC;8CA/F1C,MAAM,KAAG,MAAM;yCA2Cd,MAAM,aAAa,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC;EAwD9F"}
|
|
@@ -81,10 +81,10 @@ function buildModule(ports) {
|
|
|
81
81
|
async function assertContainedOnDisk(packageRoot, entryPath) {
|
|
82
82
|
const normalized = normalizePackageEntryPath(entryPath);
|
|
83
83
|
const realRoot = await realpath(packageRoot);
|
|
84
|
+
// No separate lexical-escape check: normalizePackageEntryPath already refused absolute, drive-
|
|
85
|
+
// letter and `..`-leading paths, so resolving its relative output always stays under realRoot,
|
|
86
|
+
// and the filesystem-resolved check below would refuse any escape regardless.
|
|
84
87
|
const lexicalCandidate = path.resolve(realRoot, normalized);
|
|
85
|
-
if (!isWithin(realRoot, lexicalCandidate)) {
|
|
86
|
-
throw new PackagePathViolation({ message: `package entry resolves outside the package root: '${entryPath}'` });
|
|
87
|
-
}
|
|
88
88
|
let realCandidate;
|
|
89
89
|
try {
|
|
90
90
|
realCandidate = await realpath(lexicalCandidate);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"package-paths.js","sourceRoot":"","sources":["../../src/lifecycle/package-paths.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-state.d.ts","sourceRoot":"","sources":["../../src/lifecycle/persistent-state.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAE5D,6FAA6F;AAC7F,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,yBAAyB,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM;uBAa5F,CAAC,YAAY;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE;qBAE3D,CAAC,YAAY;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE;uBACzE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE;gCAClC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;wBACpD;QAAE,aAAa,EAAE,MAAM,CAAA;KAAE;;;;EAQhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-state.js","sourceRoot":"","sources":["../../src/lifecycle/persistent-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ import type { AgentPluginLayoutPort } from './layout.js';
|
|
|
4
4
|
import type { AgentPluginDeliveryMode, InstalledAgentPlugin } from './types.js';
|
|
5
5
|
/** Native Node filesystem ABI, narrowed to the operations used by lifecycle.
|
|
6
6
|
* Inject instrumented fs/promises effects directly; native handles are never rewrapped. */
|
|
7
|
-
export type FilesystemPort = Pick<typeof import('node:fs/promises'), 'chmod' | 'mkdir' | 'mkdtemp' | 'open' | 'readdir' | 'readFile' | 'rename' | 'rm' | 'rmdir' | 'stat' | 'realpath' | 'unlink'>;
|
|
7
|
+
export type FilesystemPort = Pick<typeof import('node:fs/promises'), 'chmod' | 'mkdir' | 'mkdtemp' | 'open' | 'readdir' | 'readFile' | 'rename' | 'rm' | 'rmdir' | 'stat' | 'lstat' | 'realpath' | 'unlink'>;
|
|
8
8
|
export type AgentPluginFetchPort = (required: {
|
|
9
9
|
readonly url: string;
|
|
10
10
|
}, optional?: RequestInit) => Promise<Response>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/lifecycle/ports.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/lifecycle/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Plugin-contributed providers for `@jini-ai/core`'s `createProviderRegistry` (FROZEN CONTRACT,
|
|
3
|
+
* 2026-10-21). Lives here rather than in core because core cannot import agent-plugins (agent-plugins
|
|
4
|
+
* already depends on core). Defined on the one executable loader (`defineExecutablePluginContribution`)
|
|
5
|
+
* so a provider module passes the same gates as every other seam that runs plugin code: active
|
|
6
|
+
* plugin, bundled digest, contained `.mjs` path. No second loader.
|
|
7
|
+
*
|
|
8
|
+
* Every failure is a refusal line, never a throw: a broken or duplicate plugin provider must not
|
|
9
|
+
* crash boot (core/built-in registrations keep the registry's throwing policy).
|
|
10
|
+
*/
|
|
11
|
+
import { type ProviderDefinition, type ProviderRegistry } from '@jini-ai/core/provider-registry';
|
|
12
|
+
import { type PluginContributionDefinition, type PluginContributionResult } from './contribution-loader.js';
|
|
13
|
+
/** The minimum a provider manifest entry declares; a seam's parser may add fields. */
|
|
14
|
+
export interface ProviderContributionDescriptor {
|
|
15
|
+
readonly id: string;
|
|
16
|
+
/** Plain-JS module inside the plugin root (`.mjs`); containment is checked on disk at import. */
|
|
17
|
+
readonly module: string;
|
|
18
|
+
readonly label?: string;
|
|
19
|
+
}
|
|
20
|
+
export interface LoadedProviderContribution<T> {
|
|
21
|
+
readonly contract: string;
|
|
22
|
+
readonly pluginId: string;
|
|
23
|
+
readonly definition: ProviderDefinition<T>;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Defines the contribution of providers for one contract (e.g. `mail`) from a host-chosen file.
|
|
27
|
+
* The id is checked before the module is imported, so a malformed entry never runs code.
|
|
28
|
+
* @param required.contract - Must equal the target registry's `contract`.
|
|
29
|
+
* @param required.filename - The file a plugin ships at its package root to contribute providers.
|
|
30
|
+
* @param required.parse - The seam's manifest parser.
|
|
31
|
+
* @param required.validate - The module export as a provider of this contract, or why not.
|
|
32
|
+
* @param optional - The loader's read/import recovery policy. Unlike the bare executable loader, absent
|
|
33
|
+
* policies default to refusal lines (`could not be read`, `its module failed to load`) instead of
|
|
34
|
+
* propagating the fault, so one unreadable manifest or throwing module never discards the healthy
|
|
35
|
+
* contributions loaded alongside it. Pass `onReadError: () => []` to tolerate a missing manifest.
|
|
36
|
+
* @returns A definition for `loadPluginContributions`; executable, so activation is always required.
|
|
37
|
+
* @complexity O(1); each load is one contained import per declared provider.
|
|
38
|
+
*/
|
|
39
|
+
export declare function defineProviderContribution<D extends ProviderContributionDescriptor, T>(required: {
|
|
40
|
+
readonly contract: string;
|
|
41
|
+
readonly filename: string;
|
|
42
|
+
readonly parse: PluginContributionDefinition<D, LoadedProviderContribution<T>>['parse'];
|
|
43
|
+
readonly validate: (required: {
|
|
44
|
+
readonly exported: unknown;
|
|
45
|
+
}) => T | string;
|
|
46
|
+
}, optional?: {
|
|
47
|
+
readonly onReadError?: PluginContributionDefinition<D, LoadedProviderContribution<T>>['onReadError'];
|
|
48
|
+
readonly importRefusalReason?: string;
|
|
49
|
+
readonly importErrorReason?: string;
|
|
50
|
+
}): PluginContributionDefinition<D, LoadedProviderContribution<T>>;
|
|
51
|
+
/**
|
|
52
|
+
* Offer loaded plugin providers to a registry and merge every refusal into one host-facing list:
|
|
53
|
+
* the loader's (gate, manifest, import, validation) first, then the registry's (contract mismatch,
|
|
54
|
+
* duplicate, invalid provider) in contribution order.
|
|
55
|
+
* @returns The ids the registry accepted and every refusal line; never throws.
|
|
56
|
+
* @complexity O(n) contributions.
|
|
57
|
+
*/
|
|
58
|
+
export declare function contributeProviders<T>(required: {
|
|
59
|
+
readonly registry: ProviderRegistry<T>;
|
|
60
|
+
readonly loaded: PluginContributionResult<LoadedProviderContribution<T>>;
|
|
61
|
+
}, _optional?: Record<string, never>): {
|
|
62
|
+
readonly accepted: readonly string[];
|
|
63
|
+
readonly refusals: readonly string[];
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=provider-contribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-contribution.d.ts","sourceRoot":"","sources":["../../src/lifecycle/provider-contribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAuB,KAAK,kBAAkB,EAAE,KAAK,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACtH,OAAO,EAC+B,KAAK,4BAA4B,EAAE,KAAK,wBAAwB,EACrG,MAAM,0BAA0B,CAAC;AAElC,sFAAsF;AACtF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,iGAAiG;IACjG,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B,CAAC,CAAC;IAC3C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,8BAA8B,EAAE,CAAC,EACpF,QAAQ,EAAE;IACR,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,4BAA4B,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACxF,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,KAAK,CAAC,GAAG,MAAM,CAAC;CAC7E,EACD,QAAQ,GAAE;IACR,QAAQ,CAAC,WAAW,CAAC,EAAE,4BAA4B,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC;IACrG,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAChC,GACL,4BAA4B,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAgChE;AAaD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,QAAQ,EAAE;IAAE,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,EAC9H,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAM,GACpC;IAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAShF"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Plugin-contributed providers for `@jini-ai/core`'s `createProviderRegistry` (FROZEN CONTRACT,
|
|
3
|
+
* 2026-10-21). Lives here rather than in core because core cannot import agent-plugins (agent-plugins
|
|
4
|
+
* already depends on core). Defined on the one executable loader (`defineExecutablePluginContribution`)
|
|
5
|
+
* so a provider module passes the same gates as every other seam that runs plugin code: active
|
|
6
|
+
* plugin, bundled digest, contained `.mjs` path. No second loader.
|
|
7
|
+
*
|
|
8
|
+
* Every failure is a refusal line, never a throw: a broken or duplicate plugin provider must not
|
|
9
|
+
* crash boot (core/built-in registrations keep the registry's throwing policy).
|
|
10
|
+
*/
|
|
11
|
+
import { PROVIDER_ID_PATTERN } from '@jini-ai/core/provider-registry';
|
|
12
|
+
import { defineExecutablePluginContribution, } from './contribution-loader.js';
|
|
13
|
+
/**
|
|
14
|
+
* Defines the contribution of providers for one contract (e.g. `mail`) from a host-chosen file.
|
|
15
|
+
* The id is checked before the module is imported, so a malformed entry never runs code.
|
|
16
|
+
* @param required.contract - Must equal the target registry's `contract`.
|
|
17
|
+
* @param required.filename - The file a plugin ships at its package root to contribute providers.
|
|
18
|
+
* @param required.parse - The seam's manifest parser.
|
|
19
|
+
* @param required.validate - The module export as a provider of this contract, or why not.
|
|
20
|
+
* @param optional - The loader's read/import recovery policy. Unlike the bare executable loader, absent
|
|
21
|
+
* policies default to refusal lines (`could not be read`, `its module failed to load`) instead of
|
|
22
|
+
* propagating the fault, so one unreadable manifest or throwing module never discards the healthy
|
|
23
|
+
* contributions loaded alongside it. Pass `onReadError: () => []` to tolerate a missing manifest.
|
|
24
|
+
* @returns A definition for `loadPluginContributions`; executable, so activation is always required.
|
|
25
|
+
* @complexity O(1); each load is one contained import per declared provider.
|
|
26
|
+
*/
|
|
27
|
+
export function defineProviderContribution(required, optional = {}) {
|
|
28
|
+
const { contract } = required;
|
|
29
|
+
const refusal = ({ plugin, descriptor, reason }) => `${contract} provider '${String(descriptor.id)}' from '${plugin.pluginId}' was not loaded: ${reason}`;
|
|
30
|
+
const { filename } = required;
|
|
31
|
+
const executable = defineExecutablePluginContribution({
|
|
32
|
+
filename, contribution: `${contract} providers`, parse: guardedParse({ parse: required.parse }),
|
|
33
|
+
modulePath: ({ descriptor }) => descriptor.module, validate: required.validate, refusal,
|
|
34
|
+
}, {
|
|
35
|
+
onReadError: optional.onReadError ?? (({ plugin }) => [`${contract} providers from '${plugin.pluginId}' were not loaded: ${filename} could not be read`]),
|
|
36
|
+
importErrorReason: optional.importErrorReason ?? 'its module failed to load',
|
|
37
|
+
...(optional.importRefusalReason === undefined ? {} : { importRefusalReason: optional.importRefusalReason }),
|
|
38
|
+
});
|
|
39
|
+
const loadOne = async (input) => {
|
|
40
|
+
const { plugin, descriptor } = input;
|
|
41
|
+
if (typeof descriptor.id !== 'string' || !PROVIDER_ID_PATTERN.test(descriptor.id)) {
|
|
42
|
+
return refusal({ plugin, descriptor, reason: `its id must match ${PROVIDER_ID_PATTERN.source}` });
|
|
43
|
+
}
|
|
44
|
+
const loaded = await executable.load(input);
|
|
45
|
+
if (typeof loaded === 'string')
|
|
46
|
+
return loaded;
|
|
47
|
+
const { id, label } = descriptor;
|
|
48
|
+
return { contract, pluginId: loaded.pluginId, definition: { id, provider: loaded.module, ...(label === undefined ? {} : { label }) } };
|
|
49
|
+
};
|
|
50
|
+
return {
|
|
51
|
+
...executable,
|
|
52
|
+
// Per-descriptor boundary: a hostile descriptor (e.g. a throwing getter) becomes one refusal and
|
|
53
|
+
// the loader moves on to the next declaration.
|
|
54
|
+
load: async (input) => {
|
|
55
|
+
try {
|
|
56
|
+
return await loadOne(input);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return `${contract} provider from '${input.plugin.pluginId}' was not loaded: its declaration could not be read`;
|
|
60
|
+
}
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/** A throwing seam parser is a refused manifest, not a boot fault. */
|
|
65
|
+
function guardedParse(required, _optional = {}) {
|
|
66
|
+
return (input) => {
|
|
67
|
+
try {
|
|
68
|
+
return required.parse(input);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return { ok: false, reason: 'its parser failed' };
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Offer loaded plugin providers to a registry and merge every refusal into one host-facing list:
|
|
77
|
+
* the loader's (gate, manifest, import, validation) first, then the registry's (contract mismatch,
|
|
78
|
+
* duplicate, invalid provider) in contribution order.
|
|
79
|
+
* @returns The ids the registry accepted and every refusal line; never throws.
|
|
80
|
+
* @complexity O(n) contributions.
|
|
81
|
+
*/
|
|
82
|
+
export function contributeProviders(required, _optional = {}) {
|
|
83
|
+
const { registry, loaded } = required;
|
|
84
|
+
const before = registry.refusals().length;
|
|
85
|
+
const accepted = [];
|
|
86
|
+
for (const item of loaded.items) {
|
|
87
|
+
if (registry.contribute({ definition: item.definition, pluginId: item.pluginId, contract: item.contract }))
|
|
88
|
+
accepted.push(item.definition.id);
|
|
89
|
+
}
|
|
90
|
+
const registryRefusals = registry.refusals().slice(before).map(refusal => refusal.message);
|
|
91
|
+
return { accepted, refusals: [...loaded.refusals, ...registryRefusals] };
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=provider-contribution.js.map
|