@tryaura/aura-cli 0.3.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin/aura.js +3 -3
- package/dist/index.js +1 -1
- package/dist/plugins/index.js +1 -1
- package/dist/{plugins-BEuoEUo_.js → plugins-C-b2qvpr.js} +94 -258
- package/dist/{run.boundary-NVWIwGgg.js → run.boundary-fZhCH0bP.js} +145 -240
- package/dist/{shared-link-plan-AcSkw9bO.js → shared-link-plan-DMijyUdG.js} +25 -16
- package/package.json +5 -5
|
@@ -37,7 +37,7 @@ const contentSource = (path) => ({
|
|
|
37
37
|
url: pluginContentUrl(import.meta.url, path)
|
|
38
38
|
});
|
|
39
39
|
var src_default = definePlugin({
|
|
40
|
-
apiVersion:
|
|
40
|
+
apiVersion: 2,
|
|
41
41
|
id: "official",
|
|
42
42
|
name: "Aura Official Content",
|
|
43
43
|
mcpCatalog: [
|
|
@@ -312,19 +312,18 @@ function mcpServer(candidate, path, claimed) {
|
|
|
312
312
|
const name = requiredString(server, "name", path);
|
|
313
313
|
const nameProblem = mcpServerNameProblem(name);
|
|
314
314
|
if (nameProblem !== void 0) throw invalid(`${path}.name`, nameProblem);
|
|
315
|
-
const scope = server
|
|
316
|
-
|
|
317
|
-
const apps = targetApps(server["apps"], `${path}.apps`, name,
|
|
315
|
+
const { scope, ...rest } = server;
|
|
316
|
+
const legacyScope = typeof scope === "string" ? scope : void 0;
|
|
317
|
+
const apps = targetApps(server["apps"], `${path}.apps`, name, claimed, legacyScope);
|
|
318
318
|
const transport = parseMcpServerDefinition(server["transport"], `${path}.transport`);
|
|
319
319
|
if ("error" in transport) throw invalid(transport.error.path, transport.error.message);
|
|
320
320
|
const catalogId = server["catalogId"];
|
|
321
321
|
if (catalogId !== void 0 && (typeof catalogId !== "string" || catalogId.length === 0)) throw invalid(`${path}.catalogId`, "must be a non-empty string");
|
|
322
322
|
return Object.freeze({
|
|
323
|
-
...
|
|
323
|
+
...rest,
|
|
324
324
|
apps,
|
|
325
325
|
...catalogId === void 0 ? {} : { catalogId },
|
|
326
326
|
name,
|
|
327
|
-
scope,
|
|
328
327
|
transport: transport.value
|
|
329
328
|
});
|
|
330
329
|
}
|
|
@@ -332,27 +331,38 @@ function mcpServer(candidate, path, claimed) {
|
|
|
332
331
|
* Reads the applications one entry targets, refusing any that already has this server.
|
|
333
332
|
*
|
|
334
333
|
* `name` is the key written into each application's own configuration, so two entries claiming it
|
|
335
|
-
* for the same application
|
|
334
|
+
* for the same application describe two different desired states for one key. Convergence
|
|
336
335
|
* would resolve that by writing whichever came last, which is not a decision a manifest should
|
|
337
336
|
* leave to iteration order. An entry that targets nothing is refused for a plainer reason: it
|
|
338
337
|
* converges nowhere, and the user who wrote it is watching for it to take effect.
|
|
339
338
|
*/
|
|
340
|
-
function targetApps(value, path, name,
|
|
339
|
+
function targetApps(value, path, name, claimed, legacyScope) {
|
|
341
340
|
const entries = stringArray(value, path);
|
|
342
341
|
if (entries.length === 0) throw invalid(path, "must name at least one application");
|
|
343
|
-
const
|
|
344
|
-
|
|
345
|
-
claimed.set(key, owners);
|
|
342
|
+
const owners = claimed.get(name) ?? /* @__PURE__ */ new Set();
|
|
343
|
+
claimed.set(name, owners);
|
|
346
344
|
const seen = /* @__PURE__ */ new Set();
|
|
347
345
|
for (const [index, entry] of entries.entries()) {
|
|
348
346
|
if (entry.length === 0) throw invalid(`${path}[${String(index)}]`, "must be non-empty");
|
|
349
347
|
if (seen.has(entry)) throw invalid(`${path}[${String(index)}]`, `duplicates ${entry}`);
|
|
350
|
-
if (owners.has(entry)) throw invalid(`${path}[${String(index)}]`,
|
|
348
|
+
if (owners.has(entry)) throw invalid(`${path}[${String(index)}]`, duplicateReason(name, entry, legacyScope));
|
|
351
349
|
seen.add(entry);
|
|
352
350
|
owners.add(entry);
|
|
353
351
|
}
|
|
354
352
|
return entries;
|
|
355
353
|
}
|
|
354
|
+
/**
|
|
355
|
+
* Why two entries claiming one name for one application cannot both stand.
|
|
356
|
+
*
|
|
357
|
+
* A manifest written before Aura went global-only could hold the same name twice for one
|
|
358
|
+
* application, once per scope, and those two entries are the one collision a person did not
|
|
359
|
+
* introduce themselves. Naming the removed property is what turns "duplicates" into something they
|
|
360
|
+
* can act on, because the entries look identical once it is gone.
|
|
361
|
+
*/
|
|
362
|
+
function duplicateReason(name, appId, legacyScope) {
|
|
363
|
+
const duplicate = `duplicates the global server "${name}" already declared for ${appId}`;
|
|
364
|
+
return legacyScope === void 0 ? duplicate : `${duplicate}. Aura no longer separates MCP servers by scope, so a manifest holding this name at both global and project scope now declares it twice. Keep the entry you want and delete the other, along with its "scope" property`;
|
|
365
|
+
}
|
|
356
366
|
//#endregion
|
|
357
367
|
//#region ../core/src/manifest/schema-snippets.ts
|
|
358
368
|
/**
|
|
@@ -1145,7 +1155,7 @@ function convergedPlan$1(app, skillId) {
|
|
|
1145
1155
|
//#endregion
|
|
1146
1156
|
//#region ../core/src/workspace/mcp-plan-manifest.ts
|
|
1147
1157
|
/**
|
|
1148
|
-
* Merges preset-required servers under the manifest's own, keyed by
|
|
1158
|
+
* Merges preset-required servers under the manifest's own, keyed by name.
|
|
1149
1159
|
*
|
|
1150
1160
|
* The manifest is written last and wins, matching the layer precedence everywhere else. A preset
|
|
1151
1161
|
* that requires a server the user already configured must not silently repoint its transport:
|
|
@@ -1153,9 +1163,8 @@ function convergedPlan$1(app, skillId) {
|
|
|
1153
1163
|
*/
|
|
1154
1164
|
function desiredEntries(model, manifest, appId) {
|
|
1155
1165
|
const result = /* @__PURE__ */ new Map();
|
|
1156
|
-
for (const server of [...model.requiredMcpServers ?? [], ...manifest.mcpServers]) if (server.apps.includes(appId)) result.set(
|
|
1166
|
+
for (const server of [...model.requiredMcpServers ?? [], ...manifest.mcpServers]) if (server.apps.includes(appId)) result.set(server.name, {
|
|
1157
1167
|
name: server.name,
|
|
1158
|
-
scope: server.scope,
|
|
1159
1168
|
transport: server.transport
|
|
1160
1169
|
});
|
|
1161
1170
|
return Object.freeze([...result.values()]);
|
|
@@ -1179,7 +1188,7 @@ function withOwnership(manifest, appId, mcpServerNames) {
|
|
|
1179
1188
|
/** Drops one application from a desired server, and the entry entirely once nobody wants it. */
|
|
1180
1189
|
function withoutServer(manifest, server) {
|
|
1181
1190
|
const mcpServers = manifest.mcpServers.flatMap((entry) => {
|
|
1182
|
-
if (entry.name !== server.name
|
|
1191
|
+
if (entry.name !== server.name) return [entry];
|
|
1183
1192
|
const apps = entry.apps.filter((appId) => appId !== server.appId);
|
|
1184
1193
|
return apps.length === 0 ? [] : [{
|
|
1185
1194
|
...entry,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tryaura/aura-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "The composable Aura CLI runtime and official plugin distribution.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -50,18 +50,18 @@
|
|
|
50
50
|
"toml-eslint-parser": "^1.0.3",
|
|
51
51
|
"typanion": "3.14.0",
|
|
52
52
|
"undici": "7.29.0",
|
|
53
|
-
"@tryaura/aura-sdk": "0.
|
|
53
|
+
"@tryaura/aura-sdk": "0.4.0"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@types/node": "24.13.3",
|
|
57
57
|
"ajv": "8.20.0",
|
|
58
58
|
"vitest": "4.1.10",
|
|
59
59
|
"@tryaura/adapter-claude-code": "0.0.0",
|
|
60
|
+
"@tryaura/adapter-codex": "0.0.0",
|
|
60
61
|
"@tryaura/adapter-cursor": "0.0.0",
|
|
62
|
+
"@tryaura/checks-core": "0.0.0",
|
|
61
63
|
"@tryaura/content-official": "0.0.0",
|
|
62
|
-
"@tryaura/core": "0.0.0"
|
|
63
|
-
"@tryaura/adapter-codex": "0.0.0",
|
|
64
|
-
"@tryaura/checks-core": "0.0.0"
|
|
64
|
+
"@tryaura/core": "0.0.0"
|
|
65
65
|
},
|
|
66
66
|
"engines": {
|
|
67
67
|
"node": ">=24"
|