@a5c-ai/agent-catalog 5.0.1-staging.88ee6beee → 5.0.1-staging.8993636db
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/atlas-bridge.d.ts.map +1 -1
- package/dist/atlas-bridge.js +5 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +15 -3
- package/dist/data.d.ts.map +1 -1
- package/dist/data.js +284 -14
- package/dist/discovery-snapshot.json +58121 -26275
- package/dist/models.d.ts +94 -1
- package/dist/models.d.ts.map +1 -1
- package/dist/sdk.d.ts +92 -2
- package/dist/sdk.d.ts.map +1 -1
- package/dist/sdk.js +512 -14
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"atlas-bridge.d.ts","sourceRoot":"","sources":["../src/atlas-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,cAAc,EACf,MAAM,UAAU,CAAC;AAuElB,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAEpE;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,EAC7D,MAAM,EAAE,MAAM,GACb,KAAK,GAAG,SAAS,CAGnB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,GACf,iBAAiB,EAAE,CAErB;AAED,wBAAgB,cAAc,IAAI,iBAAiB,EAAE,CAEpD;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAOb;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAOb;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAI5E;AAMD,wBAAgB,gBAAgB,IAAI,aAAa,CAYhD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"atlas-bridge.d.ts","sourceRoot":"","sources":["../src/atlas-bridge.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,KAAK,EACV,YAAY,EACZ,aAAa,EACb,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,cAAc,EACf,MAAM,UAAU,CAAC;AAuElB,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAE5C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,EAAE,CAEpE;AAED,wBAAgB,WAAW,CAAC,KAAK,SAAS,SAAS,GAAG,SAAS,EAC7D,MAAM,EAAE,MAAM,GACb,KAAK,GAAG,SAAS,CAGnB;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,GACf,iBAAiB,EAAE,CAErB;AAED,wBAAgB,cAAc,IAAI,iBAAiB,EAAE,CAEpD;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAOb;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAOb;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,GAAG,iBAAiB,EAAE,CAI5E;AAMD,wBAAgB,gBAAgB,IAAI,aAAa,CAYhD;AAED,wBAAgB,iBAAiB,IAAI,cAAc,CAmBlD;AAED,wBAAgB,eAAe,IAAI,YAAY,CAO9C;AAMD,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,EAC/B,MAAM,EAAE,MAAM,GACb,SAAS,EAAE,CAIb;AAED,wBAAgB,mBAAmB,CACjC,OAAO,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,EAC/B,QAAQ,EAAE,MAAM,GACf,SAAS,EAAE,CAEb;AAED,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAMD,wBAAgB,qBAAqB,IAAI,IAAI,CAI5C"}
|
package/dist/atlas-bridge.js
CHANGED
|
@@ -32,7 +32,7 @@ const AGENT_CATALOG_KINDS = new Set([
|
|
|
32
32
|
"HookMapping", "HookSurface", "LifecycleSemantics", "Modality",
|
|
33
33
|
"ModelFamily", "ModelProviderProduct", "ModelProviderVersion", "ModelVersion",
|
|
34
34
|
"PackageSurface", "PathDescriptor", "PluginArtifact", "PluginTarget",
|
|
35
|
-
"ProcessDescriptor", "SessionSemantics", "TransportProtocol", "TransportRuntime",
|
|
35
|
+
"ProcessDescriptor", "ProviderTranslation", "SessionSemantics", "TransportProtocol", "TransportRuntime",
|
|
36
36
|
]);
|
|
37
37
|
function isAgentCatalogRecord(record) {
|
|
38
38
|
return AGENT_CATALOG_KINDS.has(record._kind);
|
|
@@ -144,8 +144,12 @@ function getOntologySchema() {
|
|
|
144
144
|
return {
|
|
145
145
|
kind: "OntologySchema",
|
|
146
146
|
id: "schema:agent-catalog-ontology",
|
|
147
|
+
schemaId: "schema:agent-catalog-ontology",
|
|
148
|
+
version: "2026.04.agent-catalog-v2",
|
|
147
149
|
nodeKinds,
|
|
148
150
|
edgeKinds,
|
|
151
|
+
versionScopingRules: [],
|
|
152
|
+
deprecationRules: [],
|
|
149
153
|
};
|
|
150
154
|
}
|
|
151
155
|
function getCatalogGraph() {
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -12,6 +12,7 @@ exports.listCliCapabilitySupport = listCliCapabilitySupport;
|
|
|
12
12
|
exports.listCliAgentRelations = listCliAgentRelations;
|
|
13
13
|
exports.listCliPackageRelations = listCliPackageRelations;
|
|
14
14
|
exports.listCliProcessRelations = listCliProcessRelations;
|
|
15
|
+
const atlas_1 = require("@a5c-ai/atlas");
|
|
15
16
|
const data_1 = require("./data");
|
|
16
17
|
const atlas_bridge_1 = require("./atlas-bridge");
|
|
17
18
|
const transport_mux_cutover_1 = require("./transport-mux-cutover");
|
|
@@ -87,7 +88,18 @@ function toCliGraphEdgeRow(edge) {
|
|
|
87
88
|
};
|
|
88
89
|
}
|
|
89
90
|
function claimNodesFor(nodeId) {
|
|
90
|
-
|
|
91
|
+
const edgeBased = (0, atlas_bridge_1.listOutgoingTargets)(nodeId, "supported_by_claim").filter((node) => node.kind === "Claim");
|
|
92
|
+
if (edgeBased.length > 0)
|
|
93
|
+
return edgeBased;
|
|
94
|
+
// Fallback: find Claim nodes whose evidenceIds overlap with the node's evidenceRefs
|
|
95
|
+
const node = (0, atlas_bridge_1.getNodeById)(nodeId);
|
|
96
|
+
if (!node)
|
|
97
|
+
return [];
|
|
98
|
+
const evidenceIds = stringArray(node.evidenceRefs);
|
|
99
|
+
if (evidenceIds.length === 0)
|
|
100
|
+
return [];
|
|
101
|
+
return (0, atlas_bridge_1.listGraphNodes)()
|
|
102
|
+
.filter((candidate) => candidate.kind === "Claim" && stringArray(candidate.evidenceIds).some((id) => evidenceIds.includes(id)));
|
|
91
103
|
}
|
|
92
104
|
function sourceNodesForClaim(claimNodeId) {
|
|
93
105
|
const claimNode = (0, atlas_bridge_1.getNodeById)(claimNodeId);
|
|
@@ -294,8 +306,8 @@ function listCliPackageRelations(packageId) {
|
|
|
294
306
|
const processes = (0, atlas_bridge_1.listOutgoingTargets)(node.id, "surfaces_process");
|
|
295
307
|
const paths = (0, atlas_bridge_1.listOutgoingTargets)(node.id, "references_path");
|
|
296
308
|
const ciSurfaces = (0, atlas_bridge_1.listOutgoingTargets)(node.id, "validated_by_ci");
|
|
297
|
-
const graphIds = (
|
|
298
|
-
.filter((edge) => edge.
|
|
309
|
+
const graphIds = atlas_1.atlas.getOutgoing(node.id)
|
|
310
|
+
.filter((edge) => edge.kind === "wraps_graph")
|
|
299
311
|
.map((edge) => edge.to);
|
|
300
312
|
return {
|
|
301
313
|
nodeId: node.id,
|
package/dist/data.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../src/data.ts"],"names":[],"mappings":"AAiDA,OAAO,KAAK,EACV,YAAY,EACZ,YAAY,EAEZ,YAAY,EACZ,mBAAmB,EACnB,oBAAoB,EAIpB,WAAW,EAEX,cAAc,EAEd,aAAa,EAKb,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,kBAAkB,EAGlB,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EAEb,mBAAmB,EACnB,cAAc,EACf,MAAM,UAAU,CAAC;AAq3BlB,UAAU,qBAAqB;IAC7B,KAAK,EAAE,YAAY,CAAC;IACpB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,SAAS,EAAE,oBAAoB,EAAE,CAAC;IAClC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,UAAU,EAAE,mBAAmB,EAAE,CAAC;IAClC,YAAY,EAAE,oBAAoB,EAAE,CAAC;IACrC,UAAU,EAAE,kBAAkB,EAAE,CAAC;IACjC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IACxC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACxC,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACxD,sBAAsB,EAAE,qBAAqB,EAAE,CAAC;IAChD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAAC;IAC1D,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,aAAa,EAAE,sBAAsB,EAAE,CAAC;IACxC,oBAAoB,EAAE,mBAAmB,EAAE,CAAC;IAC5C,YAAY,EAAE,YAAY,CAAC;CAC5B;AA2FD,wBAAgB,0BAA0B,IAAI,IAAI,CAGjD;AAED,wBAAgB,mBAAmB,IAAI,qBAAqB,CAK3D;AAoDD,eAAO,MAAM,cAAc,eAA8D,CAAC;AAC1F,eAAO,MAAM,eAAe,gBAA+D,CAAC;AAC5F,eAAO,MAAM,QAAQ,kBAAwD,CAAC;AAC9E,eAAO,MAAM,MAAM,eAAsD,CAAC;AAC1E,eAAO,MAAM,SAAS,wBAAyD,CAAC;AAChF,eAAO,MAAM,MAAM,gBAAsD,CAAC;AAC1E,eAAO,MAAM,UAAU,uBAA0D,CAAC;AAClF,eAAO,MAAM,YAAY,wBAA4D,CAAC;AACtF,eAAO,MAAM,UAAU,sBAA0D,CAAC;AAClF,eAAO,MAAM,KAAK,kBAAqD,CAAC;AACxE,eAAO,MAAM,eAAe,iBAA8D,CAAC;AAC3F,eAAO,MAAM,iBAAiB,mBAAgE,CAAC;AAC/F,eAAO,MAAM,SAAS,qBAAyD,CAAC;AAChF,eAAO,MAAM,oBAAoB,qBAAkE,CAAC;AACpG,eAAO,MAAM,MAAM,gBAAsD,CAAC;AAC1E,eAAO,MAAM,eAAe,0BAA8D,CAAC;AAC3F,eAAO,MAAM,oBAAoB,qCAAmE,CAAC;AACrG,eAAO,MAAM,yBAAyB,yBAAsE,CAAC;AAC7G,eAAO,MAAM,iBAAiB,yCAAiE,CAAC;AAChG,eAAO,MAAM,cAAc,qBAA6D,CAAC;AACzF,eAAO,MAAM,cAAc,0BAA6D,CAAC;AACzF,eAAO,MAAM,qBAAqB,uBAAoE,CAAC;AACvG,eAAO,MAAM,aAAa,cAA6D,CAAC"}
|
package/dist/data.js
CHANGED
|
@@ -5,6 +5,9 @@ exports.clearAgentCatalogDataCache = clearAgentCatalogDataCache;
|
|
|
5
5
|
exports.getCatalogDataState = getCatalogDataState;
|
|
6
6
|
const atlas_bridge_1 = require("./atlas-bridge");
|
|
7
7
|
// Evidence projection — inlined from deleted evidence-projection.ts
|
|
8
|
+
function evidenceIdFromNodeId(nodeId) {
|
|
9
|
+
return nodeId.startsWith("evidence:") ? nodeId.slice("evidence:".length) : nodeId;
|
|
10
|
+
}
|
|
8
11
|
function buildClaimsByEvidence(claimNodes, evidenceNodes, relationships) {
|
|
9
12
|
const claimsByGraphId = new Map(Array.from(claimNodes, (node) => [String(node.id), node]));
|
|
10
13
|
const evidenceByGraphId = new Map(Array.from(evidenceNodes, (node) => [String(node.id), node]));
|
|
@@ -16,7 +19,7 @@ function buildClaimsByEvidence(claimNodes, evidenceNodes, relationships) {
|
|
|
16
19
|
const evidenceNode = evidenceByGraphId.get(rel.to);
|
|
17
20
|
if (!claimNode || !evidenceNode)
|
|
18
21
|
continue;
|
|
19
|
-
const evidenceId = valueAsString(evidenceNode.evidenceId);
|
|
22
|
+
const evidenceId = valueAsString(evidenceNode.evidenceId) || evidenceIdFromNodeId(String(evidenceNode.id));
|
|
20
23
|
const bucket = claimsByEvidence.get(evidenceId);
|
|
21
24
|
if (bucket)
|
|
22
25
|
bucket.push(claimNode);
|
|
@@ -111,19 +114,20 @@ function toModelVersion(node) {
|
|
|
111
114
|
}
|
|
112
115
|
function toTransportDescriptor(node) {
|
|
113
116
|
return {
|
|
114
|
-
transportId:
|
|
117
|
+
transportId: transportRuntimeId(node),
|
|
115
118
|
label: valueAsString(node.label),
|
|
116
119
|
status: (0, transport_mux_cutover_1.effectiveTransportMuxClaimStatus)(valueAsString(node.status), nodeEvidenceIds(node)),
|
|
117
120
|
interactive: Boolean(node.persistentSession) || Boolean(node.stdinInjection),
|
|
118
121
|
persistentSession: Boolean(node.persistentSession),
|
|
119
122
|
stdinInjection: Boolean(node.stdinInjection),
|
|
120
123
|
blockingStopHook: Boolean(node.blockingStopHook),
|
|
124
|
+
codecCapabilities: parseCodecCapabilities(node.codecCapabilities),
|
|
121
125
|
evidenceIds: nodeEvidenceIds(node),
|
|
122
126
|
};
|
|
123
127
|
}
|
|
124
128
|
function toCapabilityDescriptor(node) {
|
|
125
129
|
return {
|
|
126
|
-
capabilityId: valueAsString(node.capabilityId),
|
|
130
|
+
capabilityId: valueAsString(node.capabilityId) || String(node.id).replace(/^capability:/, ""),
|
|
127
131
|
namespace: valueAsString(node.namespace),
|
|
128
132
|
label: valueAsString(node.label),
|
|
129
133
|
description: valueAsString(node.description),
|
|
@@ -196,19 +200,49 @@ function toProcessDescriptor(node) {
|
|
|
196
200
|
};
|
|
197
201
|
}
|
|
198
202
|
function agentCapabilityIds(agentNodeId) {
|
|
199
|
-
|
|
203
|
+
// First try graph edges
|
|
204
|
+
const edgeBased = (0, atlas_bridge_1.listOutgoingTargets)(agentNodeId, "supports_capability")
|
|
200
205
|
.map((supportNode) => valueAsString(supportNode.capabilityId) || valueAsString((0, atlas_bridge_1.listOutgoingTargets)(supportNode.id, "for_capability")[0]?.capabilityId))
|
|
201
206
|
.filter(Boolean);
|
|
207
|
+
if (edgeBased.length > 0)
|
|
208
|
+
return edgeBased;
|
|
209
|
+
// Fallback: find CapabilitySupport nodes whose subjectId matches
|
|
210
|
+
return Array.from(new Set((0, atlas_bridge_1.listNodesByKind)("CapabilitySupport")
|
|
211
|
+
.filter((node) => valueAsString(node.subjectId) === agentNodeId)
|
|
212
|
+
.map((node) => valueAsString(node.capabilityId))
|
|
213
|
+
.filter(Boolean)));
|
|
202
214
|
}
|
|
203
215
|
function agentHookIds(agentNodeId) {
|
|
204
|
-
|
|
216
|
+
const edgeBased = (0, atlas_bridge_1.listOutgoingTargets)(agentNodeId, "emits_hook")
|
|
205
217
|
.map((mapping) => valueAsString(mapping.hookId))
|
|
206
218
|
.filter(Boolean);
|
|
219
|
+
if (edgeBased.length > 0)
|
|
220
|
+
return edgeBased;
|
|
221
|
+
// Fallback: derive from agent's plugin targets and their hook mappings
|
|
222
|
+
const targetIds = agentPluginTargetIds(agentNodeId);
|
|
223
|
+
const hookFamilies = new Set();
|
|
224
|
+
for (const node of (0, atlas_bridge_1.listNodesByKind)("PluginTarget")) {
|
|
225
|
+
const targetId = pluginTargetId(node.id);
|
|
226
|
+
if (targetIds.includes(targetId)) {
|
|
227
|
+
const adapterName = valueAsString(node.adapterName);
|
|
228
|
+
if (adapterName)
|
|
229
|
+
hookFamilies.add(adapterName);
|
|
230
|
+
if (targetId !== adapterName)
|
|
231
|
+
hookFamilies.add(targetId);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
return Array.from(new Set((0, atlas_bridge_1.listNodesByKind)("HookMapping")
|
|
235
|
+
.filter((mapping) => hookFamilies.has(valueAsString(mapping.adapterFamily)))
|
|
236
|
+
.map((mapping) => valueAsString(mapping.hookId))
|
|
237
|
+
.filter(Boolean)));
|
|
238
|
+
}
|
|
239
|
+
function transportRuntimeId(node) {
|
|
240
|
+
return valueAsString(node.runtimeId) || valueAsString(node.runtimeKind) || String(node.id).replace(/^transport-runtime:/, "");
|
|
207
241
|
}
|
|
208
242
|
function agentTransportIds(agentNodeId) {
|
|
209
243
|
return (0, atlas_bridge_1.listOutgoingTargets)(agentNodeId, "uses_transport")
|
|
210
244
|
.filter((node) => node.kind === "TransportRuntime")
|
|
211
|
-
.map((node) =>
|
|
245
|
+
.map((node) => transportRuntimeId(node))
|
|
212
246
|
.filter(Boolean);
|
|
213
247
|
}
|
|
214
248
|
function agentModalityIds(agentNodeId) {
|
|
@@ -232,15 +266,162 @@ function agentPluginTargetIds(agentNodeId) {
|
|
|
232
266
|
.map((node) => valueAsString(node.targetId))
|
|
233
267
|
.filter(Boolean);
|
|
234
268
|
}
|
|
269
|
+
function matchesAgentId(nodeAgentId, targetAgentId) {
|
|
270
|
+
if (nodeAgentId === targetAgentId)
|
|
271
|
+
return true;
|
|
272
|
+
// Handle "agent:codex" matching "codex"
|
|
273
|
+
if (nodeAgentId.startsWith("agent:") && nodeAgentId.slice("agent:".length) === targetAgentId)
|
|
274
|
+
return true;
|
|
275
|
+
if (targetAgentId.startsWith("agent:") && targetAgentId.slice("agent:".length) === nodeAgentId)
|
|
276
|
+
return true;
|
|
277
|
+
return false;
|
|
278
|
+
}
|
|
235
279
|
function agentSessionNuanceIds(agentNodeId) {
|
|
236
|
-
|
|
280
|
+
const edgeBased = (0, atlas_bridge_1.listOutgoingTargets)(agentNodeId, "uses_session_semantics")
|
|
281
|
+
.map((node) => valueAsString(node.sessionSemanticsId))
|
|
282
|
+
.filter(Boolean);
|
|
283
|
+
if (edgeBased.length > 0)
|
|
284
|
+
return edgeBased;
|
|
285
|
+
// Fallback: find SessionSemantics nodes whose agentId matches
|
|
286
|
+
const agentNode = (0, atlas_bridge_1.getNodeById)(agentNodeId);
|
|
287
|
+
const agentId = valueAsString(agentNode?.agentId);
|
|
288
|
+
if (!agentId)
|
|
289
|
+
return [];
|
|
290
|
+
return (0, atlas_bridge_1.listNodesByKind)("SessionSemantics")
|
|
291
|
+
.filter((node) => matchesAgentId(valueAsString(node.agentId), agentId))
|
|
237
292
|
.map((node) => valueAsString(node.sessionSemanticsId))
|
|
238
293
|
.filter(Boolean);
|
|
239
294
|
}
|
|
240
295
|
function agentLifecycleNuanceIds(agentNodeId) {
|
|
241
|
-
|
|
296
|
+
const edgeBased = (0, atlas_bridge_1.listOutgoingTargets)(agentNodeId, "uses_lifecycle_semantics")
|
|
242
297
|
.map((node) => valueAsString(node.lifecycleSemanticsId))
|
|
243
298
|
.filter(Boolean);
|
|
299
|
+
if (edgeBased.length > 0)
|
|
300
|
+
return edgeBased;
|
|
301
|
+
// Fallback: find LifecycleSemantics nodes whose agentId and versionRange match
|
|
302
|
+
const agentNode = (0, atlas_bridge_1.getNodeById)(agentNodeId);
|
|
303
|
+
const agentId = valueAsString(agentNode?.agentId);
|
|
304
|
+
const agentVersionRange = valueAsString(agentNode?.versionRange);
|
|
305
|
+
if (!agentId)
|
|
306
|
+
return [];
|
|
307
|
+
return (0, atlas_bridge_1.listNodesByKind)("LifecycleSemantics")
|
|
308
|
+
.filter((node) => {
|
|
309
|
+
if (!matchesAgentId(valueAsString(node.agentId), agentId))
|
|
310
|
+
return false;
|
|
311
|
+
// If agent has a specific version range, match lifecycle nodes with same or broader range
|
|
312
|
+
if (agentVersionRange) {
|
|
313
|
+
const lcRange = valueAsString(node.versionRange);
|
|
314
|
+
if (lcRange && lcRange !== agentVersionRange)
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
return true;
|
|
318
|
+
})
|
|
319
|
+
.map((node) => valueAsString(node.lifecycleSemanticsId))
|
|
320
|
+
.filter(Boolean);
|
|
321
|
+
}
|
|
322
|
+
function toHookSupportLevel(value) {
|
|
323
|
+
const normalized = valueAsString(value);
|
|
324
|
+
if (normalized === 'native' || normalized === 'emulated')
|
|
325
|
+
return normalized;
|
|
326
|
+
return 'unsupported';
|
|
327
|
+
}
|
|
328
|
+
function parseHookSupportMap(value) {
|
|
329
|
+
const obj = (value && typeof value === 'object') ? value : {};
|
|
330
|
+
return {
|
|
331
|
+
sessionStart: toHookSupportLevel(obj.sessionStart),
|
|
332
|
+
stop: toHookSupportLevel(obj.stop),
|
|
333
|
+
userPromptSubmit: toHookSupportLevel(obj.userPromptSubmit),
|
|
334
|
+
preToolUse: toHookSupportLevel(obj.preToolUse),
|
|
335
|
+
sessionEnd: toHookSupportLevel(obj.sessionEnd),
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
function parsePartialHookSupportMap(value) {
|
|
339
|
+
const obj = (value && typeof value === 'object') ? value : {};
|
|
340
|
+
const result = {};
|
|
341
|
+
if (obj.sessionStart != null)
|
|
342
|
+
result.sessionStart = toHookSupportLevel(obj.sessionStart);
|
|
343
|
+
if (obj.stop != null)
|
|
344
|
+
result.stop = toHookSupportLevel(obj.stop);
|
|
345
|
+
if (obj.userPromptSubmit != null)
|
|
346
|
+
result.userPromptSubmit = toHookSupportLevel(obj.userPromptSubmit);
|
|
347
|
+
if (obj.preToolUse != null)
|
|
348
|
+
result.preToolUse = toHookSupportLevel(obj.preToolUse);
|
|
349
|
+
if (obj.sessionEnd != null)
|
|
350
|
+
result.sessionEnd = toHookSupportLevel(obj.sessionEnd);
|
|
351
|
+
return result;
|
|
352
|
+
}
|
|
353
|
+
function parseHookSupport(value) {
|
|
354
|
+
if (!value || typeof value !== 'object')
|
|
355
|
+
return undefined;
|
|
356
|
+
const obj = value;
|
|
357
|
+
if (!obj.interactive || typeof obj.interactive !== 'object')
|
|
358
|
+
return undefined;
|
|
359
|
+
return {
|
|
360
|
+
interactive: parseHookSupportMap(obj.interactive),
|
|
361
|
+
nonInteractive: parsePartialHookSupportMap(obj.nonInteractive),
|
|
362
|
+
};
|
|
363
|
+
}
|
|
364
|
+
function parseBridgeCapabilities(value) {
|
|
365
|
+
if (!value || typeof value !== 'object')
|
|
366
|
+
return undefined;
|
|
367
|
+
const obj = value;
|
|
368
|
+
return {
|
|
369
|
+
interactiveBridge: Boolean(obj.interactiveBridge),
|
|
370
|
+
sessionResume: Boolean(obj.sessionResume),
|
|
371
|
+
positionalPrompt: Boolean(obj.positionalPrompt),
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
function parseAdapterMetadata(value) {
|
|
375
|
+
if (!value || typeof value !== 'object')
|
|
376
|
+
return undefined;
|
|
377
|
+
const obj = value;
|
|
378
|
+
return {
|
|
379
|
+
installCommands: Array.isArray(obj.installCommands) ? obj.installCommands.map((c) => {
|
|
380
|
+
const cmd = c;
|
|
381
|
+
return { type: valueAsString(cmd.type), command: valueAsString(cmd.command) };
|
|
382
|
+
}) : undefined,
|
|
383
|
+
authMethods: Array.isArray(obj.authMethods) ? obj.authMethods.map((m) => {
|
|
384
|
+
const method = m;
|
|
385
|
+
return {
|
|
386
|
+
type: valueAsString(method.type),
|
|
387
|
+
name: valueAsString(method.name),
|
|
388
|
+
envVars: Array.isArray(method.envVars) ? method.envVars.map(String) : undefined,
|
|
389
|
+
};
|
|
390
|
+
}) : undefined,
|
|
391
|
+
authFiles: Array.isArray(obj.authFiles) ? obj.authFiles.map(String) : undefined,
|
|
392
|
+
hostEnvSignals: Array.isArray(obj.hostEnvSignals) ? obj.hostEnvSignals.map(String) : undefined,
|
|
393
|
+
sessionDir: valueAsString(obj.sessionDir) || undefined,
|
|
394
|
+
sessionPersistence: (['file', 'sqlite', 'none'].includes(valueAsString(obj.sessionPersistence)) ? valueAsString(obj.sessionPersistence) : undefined),
|
|
395
|
+
automationEnv: obj.automationEnv && typeof obj.automationEnv === 'object' ? Object.fromEntries(Object.entries(obj.automationEnv).map(([k, v]) => [k, String(v)])) : undefined,
|
|
396
|
+
approvalModes: Array.isArray(obj.approvalModes) ? obj.approvalModes.map(String) : undefined,
|
|
397
|
+
capabilityFlags: obj.capabilityFlags && typeof obj.capabilityFlags === 'object' ? obj.capabilityFlags : undefined,
|
|
398
|
+
runtimeHooks: obj.runtimeHooks && typeof obj.runtimeHooks === 'object' ? obj.runtimeHooks : undefined,
|
|
399
|
+
configSchema: obj.configSchema && typeof obj.configSchema === 'object' ? {
|
|
400
|
+
configFormat: valueAsString(obj.configSchema.configFormat) || undefined,
|
|
401
|
+
configFilePaths: Array.isArray(obj.configSchema.configFilePaths) ? obj.configSchema.configFilePaths.map(String) : undefined,
|
|
402
|
+
projectConfigFilePaths: Array.isArray(obj.configSchema.projectConfigFilePaths) ? obj.configSchema.projectConfigFilePaths.map(String) : undefined,
|
|
403
|
+
} : undefined,
|
|
404
|
+
displayName: valueAsString(obj.displayName) || undefined,
|
|
405
|
+
defaultModelId: valueAsString(obj.defaultModelId) || undefined,
|
|
406
|
+
};
|
|
407
|
+
}
|
|
408
|
+
function parseToolSchemaFormat(value) {
|
|
409
|
+
const normalized = valueAsString(value);
|
|
410
|
+
if (normalized === "openai" || normalized === "anthropic" || normalized === "google")
|
|
411
|
+
return normalized;
|
|
412
|
+
return "none";
|
|
413
|
+
}
|
|
414
|
+
function parseCodecCapabilities(value) {
|
|
415
|
+
if (!value || typeof value !== 'object')
|
|
416
|
+
return undefined;
|
|
417
|
+
const obj = value;
|
|
418
|
+
return {
|
|
419
|
+
supportsTools: obj.supportsTools === true || obj.supportsTools === "true",
|
|
420
|
+
supportsStreaming: obj.supportsStreaming === true || obj.supportsStreaming === "true",
|
|
421
|
+
supportsTokenCounting: obj.supportsTokenCounting === true || obj.supportsTokenCounting === "true",
|
|
422
|
+
costTracking: obj.costTracking === true || obj.costTracking === "true",
|
|
423
|
+
toolSchemaFormat: parseToolSchemaFormat(obj.toolSchemaFormat),
|
|
424
|
+
};
|
|
244
425
|
}
|
|
245
426
|
function toAgentVersion(node) {
|
|
246
427
|
return {
|
|
@@ -265,19 +446,35 @@ function toAgentVersion(node) {
|
|
|
265
446
|
sessionNuanceIds: agentSessionNuanceIds(node.id),
|
|
266
447
|
lifecycleNuanceIds: agentLifecycleNuanceIds(node.id),
|
|
267
448
|
evidenceIds: nodeEvidenceIds(node),
|
|
449
|
+
interactiveSignals: node.interactiveSignals != null ? {
|
|
450
|
+
turnCompletePattern: valueAsString(node.interactiveSignals?.turnCompletePattern) || undefined,
|
|
451
|
+
exitOnNonInteractive: node.interactiveSignals?.exitOnNonInteractive === true ? true : undefined,
|
|
452
|
+
nonInteractiveMode: valueAsString(node.interactiveSignals?.nonInteractiveMode) || undefined,
|
|
453
|
+
interactiveMode: valueAsString(node.interactiveSignals?.interactiveMode),
|
|
454
|
+
} : undefined,
|
|
455
|
+
hookSupport: parseHookSupport(node.hookSupport),
|
|
456
|
+
bridgeCapabilities: parseBridgeCapabilities(node.bridgeCapabilities),
|
|
457
|
+
adapterMetadata: parseAdapterMetadata(node.adapterMetadata),
|
|
268
458
|
};
|
|
269
459
|
}
|
|
460
|
+
function evidenceIdFromNode(node) {
|
|
461
|
+
const explicit = valueAsString(node.evidenceId);
|
|
462
|
+
if (explicit)
|
|
463
|
+
return explicit;
|
|
464
|
+
return evidenceIdFromNodeId(String(node.id));
|
|
465
|
+
}
|
|
270
466
|
function toEvidenceRecord(node, evidenceClaims) {
|
|
467
|
+
const evidenceId = evidenceIdFromNode(node);
|
|
271
468
|
const freshnessWindowDays = typeof node.freshnessWindowDays === "number" && Number.isFinite(node.freshnessWindowDays)
|
|
272
469
|
? node.freshnessWindowDays
|
|
273
470
|
: undefined;
|
|
274
471
|
return {
|
|
275
|
-
evidenceId
|
|
472
|
+
evidenceId,
|
|
276
473
|
kind: valueAsString(node.kindLabel) === "web" ? "web" : "repo",
|
|
277
|
-
sourcePathOrUrl: valueAsString(node.sourcePathOrUrl),
|
|
474
|
+
sourcePathOrUrl: valueAsString(node.sourcePathOrUrl) || valueAsString(node.filePath),
|
|
278
475
|
excerptLocator: valueAsString(node.locator),
|
|
279
|
-
claim: getEvidenceClaimStatement(
|
|
280
|
-
capturedAt: valueAsString(node.capturedAt),
|
|
476
|
+
claim: getEvidenceClaimStatement(evidenceId, evidenceClaims),
|
|
477
|
+
capturedAt: valueAsString(node.capturedAt) || valueAsString(node.observedAt),
|
|
281
478
|
trustLevel: valueAsString(node.trustLevel),
|
|
282
479
|
reviewOwner: valueAsString(node.reviewOwner),
|
|
283
480
|
reviewedAt: valueAsString(node.reviewedAt),
|
|
@@ -299,13 +496,74 @@ function toClaimRecord(node) {
|
|
|
299
496
|
unresolvedGaps: (0, transport_mux_cutover_1.effectiveTransportMuxUnresolvedGaps)(stringArray(node.unresolvedGaps), evidenceIds),
|
|
300
497
|
};
|
|
301
498
|
}
|
|
499
|
+
function synthesizeClaimsFromEvidenceRefs(node) {
|
|
500
|
+
const evidenceIds = nodeEvidenceIds(node);
|
|
501
|
+
if (evidenceIds.length === 0)
|
|
502
|
+
return [];
|
|
503
|
+
const repoIds = evidenceIds.filter((id) => id.startsWith("repo-"));
|
|
504
|
+
const webIds = evidenceIds.filter((id) => id.startsWith("web-"));
|
|
505
|
+
const claims = [];
|
|
506
|
+
if (repoIds.length > 0) {
|
|
507
|
+
// Look for an existing Claim node matching a repo evidence ID
|
|
508
|
+
const matchedRepoClaim = (0, atlas_bridge_1.listNodesByKind)("Claim").find((claimNode) => {
|
|
509
|
+
const claimEvidenceIds = stringArray(claimNode.evidenceIds);
|
|
510
|
+
return claimEvidenceIds.some((id) => repoIds.includes(id)) && valueAsString(claimNode.provenanceKind) === "repo-observation";
|
|
511
|
+
});
|
|
512
|
+
claims.push(matchedRepoClaim ? toClaimRecord(matchedRepoClaim) : {
|
|
513
|
+
claimId: repoIds[0],
|
|
514
|
+
statement: `Repo evidence supports capability: ${valueAsString(node.capabilityId)} for ${valueAsString(node.subjectId)}`,
|
|
515
|
+
subjectKind: valueAsString(node.subjectKind),
|
|
516
|
+
subjectId: valueAsString(node.subjectId),
|
|
517
|
+
confidence: "high",
|
|
518
|
+
status: "current",
|
|
519
|
+
provenanceKind: "repo-observation",
|
|
520
|
+
evidenceStrength: repoIds.length >= 2 ? "corroborated" : "partial",
|
|
521
|
+
evidenceIds: repoIds,
|
|
522
|
+
unresolvedGaps: [],
|
|
523
|
+
});
|
|
524
|
+
}
|
|
525
|
+
if (webIds.length > 0) {
|
|
526
|
+
// Look for an existing Claim node matching a web evidence ID
|
|
527
|
+
const matchedWebClaim = (0, atlas_bridge_1.listNodesByKind)("Claim").find((claimNode) => {
|
|
528
|
+
const claimEvidenceIds = stringArray(claimNode.evidenceIds);
|
|
529
|
+
return claimEvidenceIds.some((id) => webIds.includes(id)) && valueAsString(claimNode.provenanceKind) !== "repo-observation";
|
|
530
|
+
});
|
|
531
|
+
if (matchedWebClaim) {
|
|
532
|
+
const claim = toClaimRecord(matchedWebClaim);
|
|
533
|
+
// Ensure partial vendor claims always have unresolved gaps
|
|
534
|
+
if (claim.evidenceStrength !== "corroborated" && claim.unresolvedGaps.length === 0) {
|
|
535
|
+
claim.unresolvedGaps = [`Vendor evidence for ${valueAsString(node.capabilityId)} has not been fully corroborated.`];
|
|
536
|
+
}
|
|
537
|
+
claims.push(claim);
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
claims.push({
|
|
541
|
+
claimId: webIds[0],
|
|
542
|
+
statement: `Vendor documentation supports capability: ${valueAsString(node.capabilityId)} for ${valueAsString(node.subjectId)}`,
|
|
543
|
+
subjectKind: valueAsString(node.subjectKind),
|
|
544
|
+
subjectId: valueAsString(node.subjectId),
|
|
545
|
+
confidence: webIds.length >= 2 ? "high" : "medium",
|
|
546
|
+
status: "current",
|
|
547
|
+
provenanceKind: "vendor-documentation",
|
|
548
|
+
evidenceStrength: webIds.length >= 2 ? "corroborated" : "partial",
|
|
549
|
+
evidenceIds: webIds,
|
|
550
|
+
unresolvedGaps: webIds.length >= 2 ? [] : [`Only ${webIds.length} web evidence source(s) found for this capability.`],
|
|
551
|
+
});
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
return claims;
|
|
555
|
+
}
|
|
302
556
|
function buildCapabilityAssertions() {
|
|
303
557
|
return (0, atlas_bridge_1.listNodesByKind)("CapabilitySupport")
|
|
304
558
|
.filter((node) => (0, transport_mux_cutover_1.shouldSurfaceCapabilitySupport)(valueAsString(node.subjectKind), valueAsString(node.subjectId), nodeEvidenceIds(node)))
|
|
305
559
|
.map((node) => {
|
|
306
|
-
|
|
560
|
+
let supportingClaims = (0, atlas_bridge_1.listOutgoingTargets)(node.id, "supported_by_claim")
|
|
307
561
|
.filter((claim) => claim.kind === "Claim")
|
|
308
562
|
.map(toClaimRecord);
|
|
563
|
+
// Fall back to synthesized claims when no explicit claim edges exist
|
|
564
|
+
if (supportingClaims.length === 0) {
|
|
565
|
+
supportingClaims = synthesizeClaimsFromEvidenceRefs(node);
|
|
566
|
+
}
|
|
309
567
|
const vendorClaims = supportingClaims.filter((claim) => claim.provenanceKind !== "repo-observation");
|
|
310
568
|
const primaryClaims = vendorClaims.length > 0 ? vendorClaims : supportingClaims;
|
|
311
569
|
const evidenceStrength = primaryClaims.reduce((strongest, claim) => evidenceStrengthRank(claim.evidenceStrength) > evidenceStrengthRank(strongest)
|
|
@@ -475,6 +733,7 @@ const BABYSITTER_PLUGIN_TARGETS = new Set([
|
|
|
475
733
|
"plugin-target:claude-code", "plugin-target:codex", "plugin-target:cursor",
|
|
476
734
|
"plugin-target:gemini-cli", "plugin-target:copilot-cli", "plugin-target:pi",
|
|
477
735
|
"plugin-target:omp", "plugin-target:opencode", "plugin-target:openclaw",
|
|
736
|
+
"plugin-target:hermes",
|
|
478
737
|
]);
|
|
479
738
|
// Atlas uses different IDs for some targets
|
|
480
739
|
const TARGET_ID_ALIASES = {
|
|
@@ -574,6 +833,17 @@ function buildPluginTargetDescriptors(_hooks) {
|
|
|
574
833
|
defaultStepCount: typeof node.defaultStepCount === "number" ? node.defaultStepCount : undefined,
|
|
575
834
|
skillSystemLabel: valueAsString(node.skillSystemLabel) || undefined,
|
|
576
835
|
defaultTransportId: valueAsString(node.defaultTransportId) || undefined,
|
|
836
|
+
hooksMuxFamily: valueAsString(node.hooksMuxFamily) || undefined,
|
|
837
|
+
sessionIdQuality: valueAsString(node.sessionIdQuality) || undefined,
|
|
838
|
+
supportsOrderedFanout: node.supportsOrderedFanout === true || node.supportsOrderedFanout === "true" ? true : node.supportsOrderedFanout === false || node.supportsOrderedFanout === "false" ? false : undefined,
|
|
839
|
+
supportsNativeAdditionalContext: node.supportsNativeAdditionalContext === true || node.supportsNativeAdditionalContext === "true" ? true : node.supportsNativeAdditionalContext === false || node.supportsNativeAdditionalContext === "false" ? false : undefined,
|
|
840
|
+
supportsBlock: node.supportsBlock === true || node.supportsBlock === "true" ? true : node.supportsBlock === false || node.supportsBlock === "false" ? false : undefined,
|
|
841
|
+
supportsAsk: node.supportsAsk === true || node.supportsAsk === "true" ? true : node.supportsAsk === false || node.supportsAsk === "false" ? false : undefined,
|
|
842
|
+
supportsToolInputMutation: node.supportsToolInputMutation === true || node.supportsToolInputMutation === "true" ? true : node.supportsToolInputMutation === false || node.supportsToolInputMutation === "false" ? false : undefined,
|
|
843
|
+
supportsToolResultMutation: node.supportsToolResultMutation === true || node.supportsToolResultMutation === "true" ? true : node.supportsToolResultMutation === false || node.supportsToolResultMutation === "false" ? false : undefined,
|
|
844
|
+
supportsPersistedEnv: node.supportsPersistedEnv === true || node.supportsPersistedEnv === "true" ? true : node.supportsPersistedEnv === false || node.supportsPersistedEnv === "false" ? false : undefined,
|
|
845
|
+
envPersistenceMode: valueAsString(node.envPersistenceMode) || undefined,
|
|
846
|
+
toolInterceptionScope: valueAsString(node.toolInterceptionScope) || undefined,
|
|
577
847
|
supportedHooks: supportedHooksForTarget(targetId),
|
|
578
848
|
evidenceIds: [],
|
|
579
849
|
};
|
|
@@ -592,7 +862,7 @@ function buildDataState() {
|
|
|
592
862
|
const providers = (0, atlas_bridge_1.listNodesByKind)("ModelProviderVersion").map(toModelProviderVersion);
|
|
593
863
|
const models = (0, atlas_bridge_1.listNodesByKind)("ModelVersion").map(toModelVersion);
|
|
594
864
|
const transports = (0, atlas_bridge_1.listNodesByKind)("TransportRuntime")
|
|
595
|
-
.filter((node) => (0, transport_mux_cutover_1.shouldSurfaceTransportRuntime)(
|
|
865
|
+
.filter((node) => (0, transport_mux_cutover_1.shouldSurfaceTransportRuntime)(transportRuntimeId(node)))
|
|
596
866
|
.map(toTransportDescriptor);
|
|
597
867
|
const capabilities = (0, atlas_bridge_1.listNodesByKind)("Capability").map(toCapabilityDescriptor);
|
|
598
868
|
const modalities = (0, atlas_bridge_1.listNodesByKind)("Modality")
|