@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.
Files changed (212) hide show
  1. package/CHANGELOG.md +24 -2
  2. package/README.md +46 -0
  3. package/dist/admin-surfaces/action-dispatcher.d.ts +37 -0
  4. package/dist/admin-surfaces/action-dispatcher.d.ts.map +1 -0
  5. package/dist/admin-surfaces/action-dispatcher.js +69 -0
  6. package/dist/admin-surfaces/action-dispatcher.js.map +1 -0
  7. package/dist/admin-surfaces/action-schema.d.ts +56 -0
  8. package/dist/admin-surfaces/action-schema.d.ts.map +1 -0
  9. package/dist/admin-surfaces/action-schema.js +167 -0
  10. package/dist/admin-surfaces/action-schema.js.map +1 -0
  11. package/dist/admin-surfaces/action-tools.d.ts +40 -0
  12. package/dist/admin-surfaces/action-tools.d.ts.map +1 -0
  13. package/dist/admin-surfaces/action-tools.js +52 -0
  14. package/dist/admin-surfaces/action-tools.js.map +1 -0
  15. package/dist/admin-surfaces/callback-field-inbox.d.ts +35 -0
  16. package/dist/admin-surfaces/callback-field-inbox.d.ts.map +1 -0
  17. package/dist/admin-surfaces/callback-field-inbox.js +53 -0
  18. package/dist/admin-surfaces/callback-field-inbox.js.map +1 -0
  19. package/dist/admin-surfaces/capability-declarations.d.ts +41 -0
  20. package/dist/admin-surfaces/capability-declarations.d.ts.map +1 -0
  21. package/dist/admin-surfaces/capability-declarations.js +102 -0
  22. package/dist/admin-surfaces/capability-declarations.js.map +1 -0
  23. package/dist/admin-surfaces/contribution.d.ts +49 -0
  24. package/dist/admin-surfaces/contribution.d.ts.map +1 -0
  25. package/dist/admin-surfaces/contribution.js +30 -0
  26. package/dist/admin-surfaces/contribution.js.map +1 -0
  27. package/dist/admin-surfaces/delivery-bindings.d.ts +76 -0
  28. package/dist/admin-surfaces/delivery-bindings.d.ts.map +1 -0
  29. package/dist/admin-surfaces/delivery-bindings.js +99 -0
  30. package/dist/admin-surfaces/delivery-bindings.js.map +1 -0
  31. package/dist/admin-surfaces/descriptor.d.ts +69 -0
  32. package/dist/admin-surfaces/descriptor.d.ts.map +1 -0
  33. package/dist/admin-surfaces/descriptor.js +196 -0
  34. package/dist/admin-surfaces/descriptor.js.map +1 -0
  35. package/dist/admin-surfaces/external-links.d.ts +45 -0
  36. package/dist/admin-surfaces/external-links.d.ts.map +1 -0
  37. package/dist/admin-surfaces/external-links.js +70 -0
  38. package/dist/admin-surfaces/external-links.js.map +1 -0
  39. package/dist/admin-surfaces/host-validator.d.ts +62 -0
  40. package/dist/admin-surfaces/host-validator.d.ts.map +1 -0
  41. package/dist/admin-surfaces/host-validator.js +87 -0
  42. package/dist/admin-surfaces/host-validator.js.map +1 -0
  43. package/dist/admin-surfaces/index.d.ts +23 -0
  44. package/dist/admin-surfaces/index.d.ts.map +1 -0
  45. package/dist/admin-surfaces/index.js +21 -0
  46. package/dist/admin-surfaces/index.js.map +1 -0
  47. package/dist/admin-surfaces/protocol.d.ts +103 -0
  48. package/dist/admin-surfaces/protocol.d.ts.map +1 -0
  49. package/dist/admin-surfaces/protocol.js +25 -0
  50. package/dist/admin-surfaces/protocol.js.map +1 -0
  51. package/dist/admin-surfaces/sandbox.d.ts +78 -0
  52. package/dist/admin-surfaces/sandbox.d.ts.map +1 -0
  53. package/dist/admin-surfaces/sandbox.js +92 -0
  54. package/dist/admin-surfaces/sandbox.js.map +1 -0
  55. package/dist/admin-surfaces/settings-value.d.ts +28 -0
  56. package/dist/admin-surfaces/settings-value.d.ts.map +1 -0
  57. package/dist/admin-surfaces/settings-value.js +45 -0
  58. package/dist/admin-surfaces/settings-value.js.map +1 -0
  59. package/dist/admin-surfaces/surface-capabilities.d.ts +167 -0
  60. package/dist/admin-surfaces/surface-capabilities.d.ts.map +1 -0
  61. package/dist/admin-surfaces/surface-capabilities.js +215 -0
  62. package/dist/admin-surfaces/surface-capabilities.js.map +1 -0
  63. package/dist/admin-surfaces/surface-client.d.ts +116 -0
  64. package/dist/admin-surfaces/surface-client.d.ts.map +1 -0
  65. package/dist/admin-surfaces/surface-client.js +219 -0
  66. package/dist/admin-surfaces/surface-client.js.map +1 -0
  67. package/dist/admin-surfaces/surface-handlers.d.ts +111 -0
  68. package/dist/admin-surfaces/surface-handlers.d.ts.map +1 -0
  69. package/dist/admin-surfaces/surface-handlers.js +172 -0
  70. package/dist/admin-surfaces/surface-handlers.js.map +1 -0
  71. package/dist/admin-surfaces/theme.d.ts +59 -0
  72. package/dist/admin-surfaces/theme.d.ts.map +1 -0
  73. package/dist/admin-surfaces/theme.js +57 -0
  74. package/dist/admin-surfaces/theme.js.map +1 -0
  75. package/dist/folder-zip-node.d.ts.map +1 -0
  76. package/dist/folder-zip-node.js +59 -49
  77. package/dist/folder-zip-node.js.map +1 -0
  78. package/dist/folder-zip.d.ts.map +1 -0
  79. package/dist/folder-zip.js +9 -7
  80. package/dist/folder-zip.js.map +1 -0
  81. package/dist/index.d.ts.map +1 -0
  82. package/dist/index.js.map +1 -0
  83. package/dist/lifecycle/activation.d.ts.map +1 -0
  84. package/dist/lifecycle/activation.js.map +1 -0
  85. package/dist/lifecycle/automatic-use.d.ts +79 -0
  86. package/dist/lifecycle/automatic-use.d.ts.map +1 -0
  87. package/dist/lifecycle/automatic-use.js +165 -0
  88. package/dist/lifecycle/automatic-use.js.map +1 -0
  89. package/dist/lifecycle/bundled-digests.d.ts.map +1 -0
  90. package/dist/lifecycle/bundled-digests.js.map +1 -0
  91. package/dist/lifecycle/bundled-source-archive.d.ts.map +1 -0
  92. package/dist/lifecycle/bundled-source-archive.js.map +1 -0
  93. package/dist/lifecycle/capability-projection.d.ts.map +1 -0
  94. package/dist/lifecycle/capability-projection.js.map +1 -0
  95. package/dist/lifecycle/compatibility-metadata.d.ts +19 -0
  96. package/dist/lifecycle/compatibility-metadata.d.ts.map +1 -0
  97. package/dist/lifecycle/compatibility-metadata.js +45 -0
  98. package/dist/lifecycle/compatibility-metadata.js.map +1 -0
  99. package/dist/lifecycle/compatibility.d.ts +52 -0
  100. package/dist/lifecycle/compatibility.d.ts.map +1 -0
  101. package/dist/lifecycle/compatibility.js +60 -0
  102. package/dist/lifecycle/compatibility.js.map +1 -0
  103. package/dist/lifecycle/contribution-loader.d.ts.map +1 -0
  104. package/dist/lifecycle/contribution-loader.js.map +1 -0
  105. package/dist/lifecycle/fetch-archive.d.ts.map +1 -0
  106. package/dist/lifecycle/fetch-archive.js +26 -24
  107. package/dist/lifecycle/fetch-archive.js.map +1 -0
  108. package/dist/lifecycle/index.d.ts +14 -2
  109. package/dist/lifecycle/index.d.ts.map +1 -0
  110. package/dist/lifecycle/index.js +8 -1
  111. package/dist/lifecycle/index.js.map +1 -0
  112. package/dist/lifecycle/install-errors.d.ts.map +1 -0
  113. package/dist/lifecycle/install-errors.js.map +1 -0
  114. package/dist/lifecycle/install-from-url.d.ts.map +1 -0
  115. package/dist/lifecycle/install-from-url.js.map +1 -0
  116. package/dist/lifecycle/install.d.ts.map +1 -0
  117. package/dist/lifecycle/install.js +7 -0
  118. package/dist/lifecycle/install.js.map +1 -0
  119. package/dist/lifecycle/installed-package-index.d.ts.map +1 -0
  120. package/dist/lifecycle/installed-package-index.js +41 -29
  121. package/dist/lifecycle/installed-package-index.js.map +1 -0
  122. package/dist/lifecycle/installed-package-roots.d.ts.map +1 -0
  123. package/dist/lifecycle/installed-package-roots.js +28 -20
  124. package/dist/lifecycle/installed-package-roots.js.map +1 -0
  125. package/dist/lifecycle/layout.d.ts.map +1 -0
  126. package/dist/lifecycle/layout.js.map +1 -0
  127. package/dist/lifecycle/manifest.d.ts +13 -0
  128. package/dist/lifecycle/manifest.d.ts.map +1 -0
  129. package/dist/lifecycle/manifest.js +115 -101
  130. package/dist/lifecycle/manifest.js.map +1 -0
  131. package/dist/lifecycle/mcp-provisioning.d.ts.map +1 -0
  132. package/dist/lifecycle/mcp-provisioning.js.map +1 -0
  133. package/dist/lifecycle/node.d.ts.map +1 -0
  134. package/dist/lifecycle/node.js.map +1 -0
  135. package/dist/lifecycle/package-paths.d.ts.map +1 -0
  136. package/dist/lifecycle/package-paths.js +3 -3
  137. package/dist/lifecycle/package-paths.js.map +1 -0
  138. package/dist/lifecycle/persistent-state.d.ts.map +1 -0
  139. package/dist/lifecycle/persistent-state.js.map +1 -0
  140. package/dist/lifecycle/ports.d.ts +1 -1
  141. package/dist/lifecycle/ports.d.ts.map +1 -0
  142. package/dist/lifecycle/ports.js.map +1 -0
  143. package/dist/lifecycle/provider-contribution.d.ts +65 -0
  144. package/dist/lifecycle/provider-contribution.d.ts.map +1 -0
  145. package/dist/lifecycle/provider-contribution.js +93 -0
  146. package/dist/lifecycle/provider-contribution.js.map +1 -0
  147. package/dist/lifecycle/resolve-agent-plugin-refs.d.ts.map +1 -0
  148. package/dist/lifecycle/resolve-agent-plugin-refs.js +15 -2
  149. package/dist/lifecycle/resolve-agent-plugin-refs.js.map +1 -0
  150. package/dist/lifecycle/retire-bundled.d.ts.map +1 -0
  151. package/dist/lifecycle/retire-bundled.js +20 -18
  152. package/dist/lifecycle/retire-bundled.js.map +1 -0
  153. package/dist/lifecycle/search.d.ts +6 -1
  154. package/dist/lifecycle/search.d.ts.map +1 -0
  155. package/dist/lifecycle/search.js +45 -7
  156. package/dist/lifecycle/search.js.map +1 -0
  157. package/dist/lifecycle/seed-bundled.d.ts.map +1 -0
  158. package/dist/lifecycle/seed-bundled.js.map +1 -0
  159. package/dist/lifecycle/set-enabled.d.ts +2 -1
  160. package/dist/lifecycle/set-enabled.d.ts.map +1 -0
  161. package/dist/lifecycle/set-enabled.js +52 -8
  162. package/dist/lifecycle/set-enabled.js.map +1 -0
  163. package/dist/lifecycle/skill-file-reader.d.ts.map +1 -0
  164. package/dist/lifecycle/skill-file-reader.js +85 -71
  165. package/dist/lifecycle/skill-file-reader.js.map +1 -0
  166. package/dist/lifecycle/tools/capabilities.d.ts +199 -0
  167. package/dist/lifecycle/tools/capabilities.d.ts.map +1 -0
  168. package/dist/lifecycle/tools/capabilities.js +213 -0
  169. package/dist/lifecycle/tools/capabilities.js.map +1 -0
  170. package/dist/lifecycle/tools/definition.d.ts +32 -0
  171. package/dist/lifecycle/tools/definition.d.ts.map +1 -0
  172. package/dist/lifecycle/tools/definition.js +33 -0
  173. package/dist/lifecycle/tools/definition.js.map +1 -0
  174. package/dist/lifecycle/tools/index.d.ts +10 -0
  175. package/dist/lifecycle/tools/index.d.ts.map +1 -0
  176. package/dist/lifecycle/tools/index.js +10 -0
  177. package/dist/lifecycle/tools/index.js.map +1 -0
  178. package/dist/lifecycle/tools/manifest.d.ts +33 -0
  179. package/dist/lifecycle/tools/manifest.d.ts.map +1 -0
  180. package/dist/lifecycle/tools/manifest.js +89 -0
  181. package/dist/lifecycle/tools/manifest.js.map +1 -0
  182. package/dist/lifecycle/tools/projection.d.ts +90 -0
  183. package/dist/lifecycle/tools/projection.d.ts.map +1 -0
  184. package/dist/lifecycle/tools/projection.js +283 -0
  185. package/dist/lifecycle/tools/projection.js.map +1 -0
  186. package/dist/lifecycle/trusted-plugin-files.d.ts.map +1 -0
  187. package/dist/lifecycle/trusted-plugin-files.js.map +1 -0
  188. package/dist/lifecycle/types.d.ts +2 -0
  189. package/dist/lifecycle/types.d.ts.map +1 -0
  190. package/dist/lifecycle/types.js.map +1 -0
  191. package/dist/lifecycle/uninstall.d.ts +3 -1
  192. package/dist/lifecycle/uninstall.d.ts.map +1 -0
  193. package/dist/lifecycle/uninstall.js +51 -27
  194. package/dist/lifecycle/uninstall.js.map +1 -0
  195. package/dist/lifecycle/update-plan.d.ts +18 -0
  196. package/dist/lifecycle/update-plan.d.ts.map +1 -0
  197. package/dist/lifecycle/update-plan.js +22 -0
  198. package/dist/lifecycle/update-plan.js.map +1 -0
  199. package/dist/lifecycle/update-store.d.ts +71 -0
  200. package/dist/lifecycle/update-store.d.ts.map +1 -0
  201. package/dist/lifecycle/update-store.js +150 -0
  202. package/dist/lifecycle/update-store.js.map +1 -0
  203. package/dist/lifecycle/update.d.ts +55 -0
  204. package/dist/lifecycle/update.d.ts.map +1 -0
  205. package/dist/lifecycle/update.js +321 -0
  206. package/dist/lifecycle/update.js.map +1 -0
  207. package/dist/lifecycle/yauzl-archive-reader.d.ts.map +1 -0
  208. package/dist/lifecycle/yauzl-archive-reader.js.map +1 -0
  209. package/dist/manifest.d.ts.map +1 -0
  210. package/dist/manifest.js.map +1 -0
  211. package/package.json +39 -7
  212. 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 (name.length === 0 || name.length > MAX_NAME_LENGTH || !NAME_PATTERN.test(name)) {
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
- * Validates an already-`JSON.parse`d `plugin.json` value against the 1.0.0/1.1.0 grammar.
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
- const nameResult = resolveManifestName(raw);
174
- if (nameResult.error)
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, env, cwd } = raw;
228
- if (args !== undefined && !(Array.isArray(args) && args.every((entry) => typeof entry === "string")))
229
- return null;
230
- if (env !== undefined && (!isStringRecord(env) || RESERVED_STDIO_ENV_KEYS.some((key) => Object.hasOwn(env, key))))
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
- if (cwd !== undefined && typeof cwd !== "string")
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 === undefined ? undefined : parseDefaultToolNames(value.allow);
268
- const write = value.write === undefined ? [] : parseDefaultToolNames(value.write);
269
- const read = value.read === undefined ? [] : parseDefaultToolNames(value.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.every((name) => allowed.has(name)) && read.every((name) => allowed.has(name)) ? { allow, write, read } : null;
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 } = value;
324
- if (importFromEnv !== undefined && !isEnvVarName(importFromEnv))
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
- const retiredEnv = value.retiredEnv === undefined ? undefined : parseRetiredEnv(value.retiredEnv);
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 } = raw;
350
- const authMode = extension?.authMode;
351
- if (headers !== undefined && !isStringRecord(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
- if (authMode !== undefined && authMode !== "oauth" && authMode !== "none")
354
- return null;
355
- const defaults = extension?.defaultTools;
356
- const defaultTools = defaults === undefined ? undefined : parseDefaultTools(defaults);
357
- if (defaultTools === null)
358
- return null;
359
- const tokenAuth = extension?.tokenAuth === undefined ? undefined : parseTokenAuth(extension?.tokenAuth);
360
- if (tokenAuth === null)
361
- return null;
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 raw `mcpServers` entry to its transport's validator by `type`, or `null` for a
377
- * non-object entry or a `type` outside {@link MCP_SERVER_TRANSPORTS}.
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 raw = value;
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 manifest = parseAgentPluginManifest({ value: optional.pluginManifest });
420
- const extension = manifest.ok ? readAgentPluginExtension({ manifest: manifest.manifest, namespace: extensionNamespace, read: ({ value }) => isJsonObject(value.mcpServers) ? value.mcpServers : {} }) : undefined;
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
- // A malformed declared extension excludes the server before the translator can hide it.
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