@a5c-ai/agent-catalog 5.0.1-staging.b41a545e

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 (135) hide show
  1. package/README.md +117 -0
  2. package/dist/assets.d.ts +4 -0
  3. package/dist/assets.d.ts.map +1 -0
  4. package/dist/assets.js +76 -0
  5. package/dist/cli.d.ts +168 -0
  6. package/dist/cli.d.ts.map +1 -0
  7. package/dist/cli.js +336 -0
  8. package/dist/data.d.ts +54 -0
  9. package/dist/data.d.ts.map +1 -0
  10. package/dist/data.js +636 -0
  11. package/dist/discovery-snapshot.json +319345 -0
  12. package/dist/discovery.d.ts +143 -0
  13. package/dist/discovery.d.ts.map +1 -0
  14. package/dist/discovery.js +728 -0
  15. package/dist/evidence-projection.d.ts +4 -0
  16. package/dist/evidence-projection.d.ts.map +1 -0
  17. package/dist/evidence-projection.js +34 -0
  18. package/dist/evidence.d.ts +13 -0
  19. package/dist/evidence.d.ts.map +1 -0
  20. package/dist/evidence.js +227 -0
  21. package/dist/graph.d.ts +20 -0
  22. package/dist/graph.d.ts.map +1 -0
  23. package/dist/graph.js +194 -0
  24. package/dist/index.d.ts +11 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +28 -0
  27. package/dist/models.d.ts +559 -0
  28. package/dist/models.d.ts.map +1 -0
  29. package/dist/models.js +2 -0
  30. package/dist/sdk.d.ts +48 -0
  31. package/dist/sdk.d.ts.map +1 -0
  32. package/dist/sdk.js +902 -0
  33. package/dist/transport-mux-cutover.d.ts +9 -0
  34. package/dist/transport-mux-cutover.d.ts.map +1 -0
  35. package/dist/transport-mux-cutover.js +158 -0
  36. package/dist/ui.d.ts +2 -0
  37. package/dist/ui.d.ts.map +1 -0
  38. package/dist/ui.js +8 -0
  39. package/docs/ontology-evidence.md +82 -0
  40. package/evidence/ontology-evidence/claims/catalog-processes-and-packaging.json +89 -0
  41. package/evidence/ontology-evidence/claims/plugins-hooks-discovery.json +136 -0
  42. package/evidence/ontology-evidence/claims/runtime-core.json +113 -0
  43. package/evidence/ontology-evidence/claims/vendor-web.json +977 -0
  44. package/evidence/ontology-evidence/evidence-sources/catalog-processes-and-packaging.json +48 -0
  45. package/evidence/ontology-evidence/evidence-sources/plugins-hooks-discovery.json +88 -0
  46. package/evidence/ontology-evidence/evidence-sources/runtime-core.json +78 -0
  47. package/evidence/ontology-evidence/evidence-sources/vendor-web.json +918 -0
  48. package/evidence/ontology-evidence/manifest.json +56 -0
  49. package/graph/agent-catalog.graph.yaml +43 -0
  50. package/graph/edges/relations/agent-runtime/babysitter-agent.yaml +31 -0
  51. package/graph/edges/relations/agent-runtime/discovery-and-paths.yaml +433 -0
  52. package/graph/edges/relations/agent-runtime/session-and-lifecycle.yaml +137 -0
  53. package/graph/edges/relations/agent-runtime/transports-and-modalities.yaml +387 -0
  54. package/graph/edges/relations/capabilities/babysitter-agent-links.yaml +46 -0
  55. package/graph/edges/relations/capabilities/capability-vocabulary-links-agents.yaml +478 -0
  56. package/graph/edges/relations/capabilities/capability-vocabulary-links-providers.yaml +40 -0
  57. package/graph/edges/relations/capabilities/capability-vocabulary-links-transports.yaml +70 -0
  58. package/graph/edges/relations/capabilities/support-record-links-agents.yaml +478 -0
  59. package/graph/edges/relations/capabilities/support-record-links-providers.yaml +40 -0
  60. package/graph/edges/relations/capabilities/support-record-links-transports.yaml +70 -0
  61. package/graph/edges/relations/evolution.yaml +16 -0
  62. package/graph/edges/relations/hooks-and-plugins.yaml +462 -0
  63. package/graph/edges/relations/identity-babysitter-agent.yaml +11 -0
  64. package/graph/edges/relations/identity.yaml +218 -0
  65. package/graph/edges/relations/processes-and-packages.yaml +71 -0
  66. package/graph/edges/relations/provenance/babysitter-agent-and-claude-web.yaml +102 -0
  67. package/graph/edges/relations/provenance/catalog-core-agents.yaml +370 -0
  68. package/graph/edges/relations/provenance/catalog-core-models.yaml +88 -0
  69. package/graph/edges/relations/provenance/catalog-core-providers.yaml +220 -0
  70. package/graph/edges/relations/provenance/evidence-sources.yaml +136 -0
  71. package/graph/edges/relations/provenance/hooks-plugins-and-discovery-discovery.yaml +124 -0
  72. package/graph/edges/relations/provenance/hooks-plugins-and-discovery-hooks.yaml +244 -0
  73. package/graph/edges/relations/provenance/hooks-plugins-and-discovery-plugins.yaml +166 -0
  74. package/graph/edges/relations/provenance/processes-packages-and-paths.yaml +490 -0
  75. package/graph/edges/relations/provenance/runtime-and-capabilities-capability.yaml +202 -0
  76. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-claude.yaml +210 -0
  77. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-codex.yaml +302 -0
  78. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-copilot.yaml +170 -0
  79. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-cursor.yaml +146 -0
  80. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-gemini.yaml +143 -0
  81. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-omp.yaml +76 -0
  82. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-openclaw.yaml +112 -0
  83. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-opencode.yaml +139 -0
  84. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-agents-pi.yaml +40 -0
  85. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-providers.yaml +112 -0
  86. package/graph/edges/relations/provenance/runtime-and-capabilities-capabilitySupport-transports.yaml +190 -0
  87. package/graph/edges/relations/provenance/runtime-and-capabilities-modality.yaml +88 -0
  88. package/graph/edges/relations/provenance/runtime-and-capabilities-transport.yaml +172 -0
  89. package/graph/nodes/agents/babysitter-agent.yaml +43 -0
  90. package/graph/nodes/agents/products.yaml +163 -0
  91. package/graph/nodes/agents/versions.yaml +282 -0
  92. package/graph/nodes/capabilities/capabilities.yaml +234 -0
  93. package/graph/nodes/capabilities/modalities.yaml +74 -0
  94. package/graph/nodes/capabilities/supports/agents/babysitter-agent.yaml +46 -0
  95. package/graph/nodes/capabilities/supports/agents/claude.yaml +166 -0
  96. package/graph/nodes/capabilities/supports/agents/codex.yaml +190 -0
  97. package/graph/nodes/capabilities/supports/agents/copilot.yaml +121 -0
  98. package/graph/nodes/capabilities/supports/agents/cursor.yaml +104 -0
  99. package/graph/nodes/capabilities/supports/agents/gemini.yaml +104 -0
  100. package/graph/nodes/capabilities/supports/agents/omp.yaml +74 -0
  101. package/graph/nodes/capabilities/supports/agents/openclaw.yaml +67 -0
  102. package/graph/nodes/capabilities/supports/agents/opencode.yaml +103 -0
  103. package/graph/nodes/capabilities/supports/agents/pi.yaml +65 -0
  104. package/graph/nodes/capabilities/supports/provider-versions.yaml +73 -0
  105. package/graph/nodes/capabilities/supports/transport-runtimes.yaml +122 -0
  106. package/graph/nodes/evidence/babysitter-agent-and-claude-web.yaml +83 -0
  107. package/graph/nodes/evidence/claims.yaml +315 -0
  108. package/graph/nodes/evidence/claude-code-capability-claims.yaml +170 -0
  109. package/graph/nodes/evidence/claude-code-docs-core.yaml +103 -0
  110. package/graph/nodes/evidence/claude-code-docs-extensions.yaml +114 -0
  111. package/graph/nodes/evidence/codex-web.yaml +155 -0
  112. package/graph/nodes/evidence/copilot-web.yaml +213 -0
  113. package/graph/nodes/evidence/cursor-web.yaml +191 -0
  114. package/graph/nodes/evidence/evidence-sources.yaml +206 -0
  115. package/graph/nodes/evidence/gemini-cli-web.yaml +177 -0
  116. package/graph/nodes/evidence/omp-web.yaml +129 -0
  117. package/graph/nodes/evidence/opencode-web.yaml +144 -0
  118. package/graph/nodes/hooks-and-plugins/hook-mappings.yaml +399 -0
  119. package/graph/nodes/hooks-and-plugins/hook-surfaces.yaml +160 -0
  120. package/graph/nodes/hooks-and-plugins/plugin-artifacts.yaml +229 -0
  121. package/graph/nodes/hooks-and-plugins/plugin-targets.yaml +330 -0
  122. package/graph/nodes/models.yaml +103 -0
  123. package/graph/nodes/processes-and-packages/ci-surfaces.yaml +45 -0
  124. package/graph/nodes/processes-and-packages/packages.yaml +89 -0
  125. package/graph/nodes/processes-and-packages/processes.yaml +44 -0
  126. package/graph/nodes/providers/products.yaml +102 -0
  127. package/graph/nodes/providers/versions.yaml +108 -0
  128. package/graph/nodes/runtime-semantics/discovery-signals-hooks.yaml +185 -0
  129. package/graph/nodes/runtime-semantics/discovery-signals-host.yaml +254 -0
  130. package/graph/nodes/runtime-semantics/lifecycle-semantics.yaml +151 -0
  131. package/graph/nodes/runtime-semantics/paths.yaml +289 -0
  132. package/graph/nodes/runtime-semantics/session-semantics.yaml +214 -0
  133. package/graph/nodes/transports.yaml +202 -0
  134. package/graph/schema/ontology-schema.yaml +529 -0
  135. package/package.json +65 -0
package/dist/sdk.js ADDED
@@ -0,0 +1,902 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.clearAgentCatalogSdkCache = clearAgentCatalogSdkCache;
4
+ exports.getCatalogGraphSnapshot = getCatalogGraphSnapshot;
5
+ exports.getCatalogGraphDocument = getCatalogGraphDocument;
6
+ exports.getCatalogOntologySchema = getCatalogOntologySchema;
7
+ exports.getAgentCatalog = getAgentCatalog;
8
+ exports.listCatalogClaims = listCatalogClaims;
9
+ exports.getCapabilitySupportAssertions = getCapabilitySupportAssertions;
10
+ exports.listAgentVersions = listAgentVersions;
11
+ exports.getAgentVersions = getAgentVersions;
12
+ exports.getAgentVersion = getAgentVersion;
13
+ exports.listOntologyNodesByKind = listOntologyNodesByKind;
14
+ exports.listOntologyRelations = listOntologyRelations;
15
+ exports.listCapabilitySupportForSubject = listCapabilitySupportForSubject;
16
+ exports.listCapabilitySupportByAgentVersion = listCapabilitySupportByAgentVersion;
17
+ exports.getCapabilitySupportForAgentVersion = getCapabilitySupportForAgentVersion;
18
+ exports.supportsAgentCapability = supportsAgentCapability;
19
+ exports.getAgentVersionTopology = getAgentVersionTopology;
20
+ exports.getProviderModelTopology = getProviderModelTopology;
21
+ exports.listPackageSurfaces = listPackageSurfaces;
22
+ exports.getPackageSurface = getPackageSurface;
23
+ exports.listPackagesBySurfaceKind = listPackagesBySurfaceKind;
24
+ exports.findPackageSurfaceByWorkspacePath = findPackageSurfaceByWorkspacePath;
25
+ exports.listProcessDescriptors = listProcessDescriptors;
26
+ exports.listProcessesByPackage = listProcessesByPackage;
27
+ exports.listPathDescriptors = listPathDescriptors;
28
+ exports.getPathDescriptor = getPathDescriptor;
29
+ exports.listPathsByOwner = listPathsByOwner;
30
+ exports.findProcessesByPath = findProcessesByPath;
31
+ exports.getPackageTopology = getPackageTopology;
32
+ exports.getFallbackHarnessMetadata = getFallbackHarnessMetadata;
33
+ exports.listFallbackHarnessMetadata = listFallbackHarnessMetadata;
34
+ exports.getHostSignalMap = getHostSignalMap;
35
+ exports.getHostMetadataFields = getHostMetadataFields;
36
+ exports.getHostDetectionRules = getHostDetectionRules;
37
+ exports.getHooksMuxDetectionRules = getHooksMuxDetectionRules;
38
+ exports.getHarnessImages = getHarnessImages;
39
+ exports.lookupHarnessImage = lookupHarnessImage;
40
+ exports.listPluginTargets = listPluginTargets;
41
+ exports.listPluginTargetDescriptors = listPluginTargetDescriptors;
42
+ exports.getPluginTargetDescriptor = getPluginTargetDescriptor;
43
+ exports.getHookCatalog = getHookCatalog;
44
+ exports.getHookNameMap = getHookNameMap;
45
+ exports.getAgentVersionSlug = getAgentVersionSlug;
46
+ exports.getUiAgentOntologyList = getUiAgentOntologyList;
47
+ exports.getUiAgentOntologyEntry = getUiAgentOntologyEntry;
48
+ exports.getUiAgentCards = getUiAgentCards;
49
+ const data_1 = require("./data");
50
+ const graph_1 = require("./graph");
51
+ const transport_mux_cutover_1 = require("./transport-mux-cutover");
52
+ const HARNESS_ALIASES = {
53
+ claude: "claude-code",
54
+ "claude-code": "claude-code",
55
+ codex: "codex",
56
+ cursor: "cursor",
57
+ gemini: "gemini-cli",
58
+ "gemini-cli": "gemini-cli",
59
+ copilot: "github-copilot",
60
+ "github-copilot": "github-copilot",
61
+ omp: "oh-my-pi",
62
+ "oh-my-pi": "oh-my-pi",
63
+ opencode: "opencode",
64
+ openclaw: "openclaw",
65
+ pi: "pi",
66
+ };
67
+ let cachedSdkState;
68
+ function buildSdkState() {
69
+ const dataState = (0, data_1.getCatalogDataState)();
70
+ const graph = (0, graph_1.getCatalogGraph)();
71
+ return {
72
+ graph,
73
+ nodeById: new Map(graph.nodes.map((node) => [node.id, node])),
74
+ outgoingByNode: groupEdgesBy(graph.edges, "from"),
75
+ incomingByNode: groupEdgesBy(graph.edges, "to"),
76
+ agentByKey: new Map(dataState.agentCatalog.agents.map((agent) => [versionKey(agent.agentId, agent.versionRange), agent])),
77
+ providerVersionByKey: new Map(dataState.agentCatalog.providers.map((provider) => [versionKey(provider.providerId, provider.versionRange), provider])),
78
+ modelVersionByKey: new Map(dataState.agentCatalog.models.map((model) => [versionKey(model.modelId, model.versionRange), model])),
79
+ transportById: new Map(dataState.agentCatalog.transports.map((transport) => [transport.transportId, transport])),
80
+ capabilityById: new Map(dataState.agentCatalog.capabilities.map((capability) => [capability.capabilityId, capability])),
81
+ modalityById: new Map(dataState.agentCatalog.modalities.map((modality) => [modality.modalityId, modality])),
82
+ sessionById: new Map(dataState.agentCatalog.sessionNuances.map((nuance) => [nuance.nuanceId, nuance])),
83
+ lifecycleById: new Map(dataState.agentCatalog.lifecycleNuances.map((nuance) => [nuance.nuanceId, nuance])),
84
+ hookById: new Map(dataState.hooks.map((hook) => [hook.hookId, hook])),
85
+ pluginTargetById: new Map(dataState.pluginTargets.map((target) => [target.targetId, target])),
86
+ };
87
+ }
88
+ function getSdkState() {
89
+ if (!cachedSdkState) {
90
+ cachedSdkState = buildSdkState();
91
+ }
92
+ return cachedSdkState;
93
+ }
94
+ function clearAgentCatalogSdkCache() {
95
+ cachedSdkState = undefined;
96
+ }
97
+ function clone(value) {
98
+ return JSON.parse(JSON.stringify(value));
99
+ }
100
+ const AGENT_FILE_PATH = "packages/agent-catalog/graph/nodes/agents/versions.yaml";
101
+ const AGENT_DIRECTORY = "packages/agent-catalog/graph";
102
+ function slugifyVersionRange(versionRange) {
103
+ return slugify(versionRange);
104
+ }
105
+ function agentVersionNodeId(agent) {
106
+ return `agentVersion:${agent.agentId}:${slugifyVersionRange(agent.versionRange)}`;
107
+ }
108
+ function orderedByIds(ids, items, getId) {
109
+ const byId = new Map(items.map((item) => [getId(item), item]));
110
+ return ids.map((id) => byId.get(id)).filter((item) => Boolean(item));
111
+ }
112
+ function findProviderVersions(agent) {
113
+ return orderedByIds(agent.providerIds, data_1.AGENT_CATALOG.providers.filter((provider) => agent.providerIds.includes(provider.providerId)), (provider) => provider.providerId);
114
+ }
115
+ function findModelVersions(agent) {
116
+ return orderedByIds(agent.modelIds, data_1.AGENT_CATALOG.models.filter((model) => agent.modelIds.includes(model.modelId)), (model) => model.modelId);
117
+ }
118
+ function findTransports(agent) {
119
+ return orderedByIds(agent.transportIds, data_1.AGENT_CATALOG.transports.filter((transport) => agent.transportIds.includes(transport.transportId)), (transport) => transport.transportId);
120
+ }
121
+ function findModalities(agent) {
122
+ return orderedByIds(agent.modalityIds, data_1.AGENT_CATALOG.modalities.filter((modality) => agent.modalityIds.includes(modality.modalityId)), (modality) => modality.modalityId);
123
+ }
124
+ function findCapabilities(agent) {
125
+ return orderedByIds(agent.capabilityIds, data_1.AGENT_CATALOG.capabilities.filter((capability) => agent.capabilityIds.includes(capability.capabilityId)), (capability) => capability.capabilityId);
126
+ }
127
+ function groupEdgesBy(edges, key) {
128
+ const grouped = new Map();
129
+ for (const edge of edges) {
130
+ const bucket = grouped.get(edge[key]);
131
+ if (bucket) {
132
+ bucket.push(edge);
133
+ continue;
134
+ }
135
+ grouped.set(edge[key], [edge]);
136
+ }
137
+ return grouped;
138
+ }
139
+ function valueAsString(value) {
140
+ return typeof value === "string" ? value : "";
141
+ }
142
+ function stringArray(value) {
143
+ return Array.isArray(value) ? value.filter((entry) => typeof entry === "string") : [];
144
+ }
145
+ function nodeEvidenceIds(node) {
146
+ return node ? stringArray(node.evidenceRefs) : [];
147
+ }
148
+ function versionKey(subjectId, versionRange) {
149
+ return `${subjectId}@@${versionRange}`;
150
+ }
151
+ function normalizeLookup(value) {
152
+ return value.trim().toLowerCase();
153
+ }
154
+ function sortStrings(values) {
155
+ return [...values].sort((left, right) => left.localeCompare(right));
156
+ }
157
+ function uniqueBy(values, key) {
158
+ const seen = new Set();
159
+ const unique = [];
160
+ for (const value of values) {
161
+ const nextKey = key(value);
162
+ if (seen.has(nextKey)) {
163
+ continue;
164
+ }
165
+ seen.add(nextKey);
166
+ unique.push(value);
167
+ }
168
+ return unique;
169
+ }
170
+ function getNode(nodeId) {
171
+ return getSdkState().nodeById.get(nodeId);
172
+ }
173
+ function outgoingEdges(nodeId, relation) {
174
+ const edges = getSdkState().outgoingByNode.get(nodeId) ?? [];
175
+ return relation ? edges.filter((edge) => edge.relation === relation) : edges;
176
+ }
177
+ function incomingEdges(nodeId, relation) {
178
+ const edges = getSdkState().incomingByNode.get(nodeId) ?? [];
179
+ return relation ? edges.filter((edge) => edge.relation === relation) : edges;
180
+ }
181
+ function outgoingNodes(nodeId, relation) {
182
+ return outgoingEdges(nodeId, relation)
183
+ .map((edge) => getNode(edge.to))
184
+ .filter((node) => Boolean(node));
185
+ }
186
+ function incomingNodes(nodeId, relation) {
187
+ return incomingEdges(nodeId, relation)
188
+ .map((edge) => getNode(edge.from))
189
+ .filter((node) => Boolean(node));
190
+ }
191
+ function toAgentProduct(node) {
192
+ return {
193
+ agentId: valueAsString(node.agentId),
194
+ displayName: valueAsString(node.displayName),
195
+ aliases: stringArray(node.aliases),
196
+ vendor: valueAsString(node.vendor),
197
+ families: stringArray(node.families),
198
+ status: valueAsString(node.status),
199
+ evidenceIds: nodeEvidenceIds(node),
200
+ };
201
+ }
202
+ function toModelProviderProduct(node) {
203
+ const homepage = valueAsString(node.homepage);
204
+ return {
205
+ providerId: valueAsString(node.providerId),
206
+ displayName: valueAsString(node.displayName),
207
+ kindLabel: valueAsString(node.kindLabel),
208
+ vendor: valueAsString(node.vendor),
209
+ homepage: homepage || null,
210
+ apiFamilies: stringArray(node.apiFamilies),
211
+ authKinds: stringArray(node.authKinds),
212
+ evidenceIds: nodeEvidenceIds(node),
213
+ };
214
+ }
215
+ function toModelFamily(node) {
216
+ return {
217
+ modelId: valueAsString(node.modelId),
218
+ providerId: valueAsString(node.providerId),
219
+ label: valueAsString(node.label),
220
+ modalities: stringArray(node.modalities),
221
+ reasoningFamily: valueAsString(node.reasoningFamily) || undefined,
222
+ status: valueAsString(node.status),
223
+ evidenceIds: nodeEvidenceIds(node),
224
+ };
225
+ }
226
+ function toTransportProtocol(node) {
227
+ return {
228
+ transportId: valueAsString(node.transportId),
229
+ label: valueAsString(node.label),
230
+ status: (0, transport_mux_cutover_1.effectiveTransportMuxClaimStatus)(valueAsString(node.status), nodeEvidenceIds(node)),
231
+ protocolKind: valueAsString(node.protocolKind),
232
+ interactive: Boolean(node.interactive),
233
+ streaming: Boolean(node.streaming),
234
+ requestShape: valueAsString(node.requestShape),
235
+ responseShape: valueAsString(node.responseShape),
236
+ evidenceIds: nodeEvidenceIds(node),
237
+ };
238
+ }
239
+ function toCapabilitySupport(node) {
240
+ return {
241
+ supportId: valueAsString(node.supportId),
242
+ capabilityId: valueAsString(node.capabilityId),
243
+ supportLevel: valueAsString(node.supportLevel),
244
+ subjectKind: valueAsString(node.subjectKind) || "AgentVersion",
245
+ subjectId: valueAsString(node.subjectId),
246
+ versionRange: valueAsString(node.versionRange),
247
+ notes: valueAsString(node.notes) || undefined,
248
+ evidenceIds: nodeEvidenceIds(node),
249
+ };
250
+ }
251
+ function toHookMapping(node) {
252
+ return {
253
+ mappingId: valueAsString(node.mappingId),
254
+ hookId: valueAsString(node.hookId),
255
+ targetId: valueAsString(node.targetId),
256
+ nativeName: valueAsString(node.nativeName),
257
+ versionRange: valueAsString(node.versionRange),
258
+ requiresRuntimeHooks: Boolean(node.requiresRuntimeHooks),
259
+ evidenceIds: nodeEvidenceIds(node),
260
+ };
261
+ }
262
+ function toDiscoverySignal(node) {
263
+ return {
264
+ signalId: valueAsString(node.signalId),
265
+ signalKind: valueAsString(node.signalKind),
266
+ key: valueAsString(node.key),
267
+ matchMode: valueAsString(node.matchMode),
268
+ confidence: valueAsString(node.confidence) || "low",
269
+ scope: valueAsString(node.scope),
270
+ signals: stringArray(node.signals),
271
+ absentSignals: stringArray(node.absentSignals),
272
+ argvMatches: stringArray(node.argvMatches),
273
+ metadataFields: (Array.isArray(node.metadataFields) ? node.metadataFields : []).map((field) => ({
274
+ key: valueAsString(field.key),
275
+ envVars: stringArray(field.envVars),
276
+ })),
277
+ evidenceIds: nodeEvidenceIds(node),
278
+ };
279
+ }
280
+ function toPackageSurface(node) {
281
+ return {
282
+ packageId: valueAsString(node.packageId),
283
+ packageName: valueAsString(node.packageName),
284
+ workspacePath: valueAsString(node.workspacePath),
285
+ moduleType: valueAsString(node.moduleType),
286
+ surfaceKinds: stringArray(node.surfaceKinds),
287
+ sourceOfTruthRole: valueAsString(node.sourceOfTruthRole),
288
+ evidenceIds: nodeEvidenceIds(node),
289
+ };
290
+ }
291
+ function toPathDescriptor(node) {
292
+ return {
293
+ pathId: valueAsString(node.pathId),
294
+ path: valueAsString(node.path),
295
+ pathKind: valueAsString(node.pathKind),
296
+ ownerKind: valueAsString(node.ownerKind),
297
+ ownerId: valueAsString(node.ownerId),
298
+ platform: valueAsString(node.platform),
299
+ notes: valueAsString(node.notes) || undefined,
300
+ evidenceIds: nodeEvidenceIds(node),
301
+ };
302
+ }
303
+ function toCiSurface(node) {
304
+ return {
305
+ ciId: valueAsString(node.ciId),
306
+ packageId: valueAsString(node.packageId),
307
+ scripts: stringArray(node.scripts),
308
+ publishStrategy: valueAsString(node.publishStrategy),
309
+ releaseChannels: stringArray(node.releaseChannels),
310
+ validationCommands: stringArray(node.validationCommands),
311
+ evidenceIds: nodeEvidenceIds(node),
312
+ };
313
+ }
314
+ function slugify(versionRange) {
315
+ return versionRange
316
+ .replace(/>=/g, "ge-")
317
+ .replace(/<=/g, "le-")
318
+ .replace(/>/g, "gt-")
319
+ .replace(/</g, "lt-")
320
+ .replace(/=/g, "eq-")
321
+ .replace(/\s+/g, "-")
322
+ .replace(/[^a-zA-Z0-9-]+/g, "-")
323
+ .replace(/-+/g, "-")
324
+ .replace(/^-|-$/g, "")
325
+ .toLowerCase();
326
+ }
327
+ function parseVersion(version) {
328
+ const match = version.trim().match(/^v?(\d+(?:\.\d+)*)/);
329
+ if (!match) {
330
+ return undefined;
331
+ }
332
+ return match[1].split(".").map((part) => Number.parseInt(part, 10));
333
+ }
334
+ function compareVersions(left, right) {
335
+ const length = Math.max(left.length, right.length);
336
+ for (let index = 0; index < length; index += 1) {
337
+ const leftPart = left[index] ?? 0;
338
+ const rightPart = right[index] ?? 0;
339
+ if (leftPart !== rightPart) {
340
+ return leftPart < rightPart ? -1 : 1;
341
+ }
342
+ }
343
+ return 0;
344
+ }
345
+ function rangeLowerBound(range) {
346
+ const tokens = range.split(/\s+/).filter(Boolean);
347
+ for (const token of tokens) {
348
+ const match = token.match(/^(>=|>|=)?(.+)$/);
349
+ if (!match) {
350
+ continue;
351
+ }
352
+ const comparator = match[1] ?? "=";
353
+ if (!["=", ">=", ">"].includes(comparator)) {
354
+ continue;
355
+ }
356
+ const parsed = parseVersion(match[2]);
357
+ if (parsed) {
358
+ return parsed;
359
+ }
360
+ }
361
+ return [0, 0, 0];
362
+ }
363
+ function satisfiesVersion(version, range) {
364
+ const parsedVersion = parseVersion(version);
365
+ if (!parsedVersion) {
366
+ return false;
367
+ }
368
+ const tokens = range.split(/\s+/).filter(Boolean);
369
+ return tokens.every((token) => {
370
+ const match = token.match(/^(>=|<=|>|<|=)?(.+)$/);
371
+ if (!match) {
372
+ return false;
373
+ }
374
+ const comparator = match[1] ?? "=";
375
+ const parsedTarget = parseVersion(match[2]);
376
+ if (!parsedTarget) {
377
+ return false;
378
+ }
379
+ const comparison = compareVersions(parsedVersion, parsedTarget);
380
+ switch (comparator) {
381
+ case ">":
382
+ return comparison > 0;
383
+ case ">=":
384
+ return comparison >= 0;
385
+ case "<":
386
+ return comparison < 0;
387
+ case "<=":
388
+ return comparison <= 0;
389
+ case "=":
390
+ default:
391
+ return comparison === 0;
392
+ }
393
+ });
394
+ }
395
+ function sortVersionScopedNodes(nodes) {
396
+ return [...nodes].sort((left, right) => {
397
+ const leftBound = rangeLowerBound(valueAsString(left.versionRange));
398
+ const rightBound = rangeLowerBound(valueAsString(right.versionRange));
399
+ const comparison = compareVersions(rightBound, leftBound);
400
+ if (comparison !== 0) {
401
+ return comparison;
402
+ }
403
+ return left.id.localeCompare(right.id);
404
+ });
405
+ }
406
+ function agentVersionNodes(agentIdOrAlias) {
407
+ const graph = getSdkState().graph;
408
+ const normalized = normalizeLookup(agentIdOrAlias);
409
+ const products = graph.nodes.filter((node) => node.kind === "AgentProduct" &&
410
+ (valueAsString(node.agentId).toLowerCase() === normalized ||
411
+ valueAsString(node.displayName).toLowerCase() === normalized ||
412
+ stringArray(node.aliases).some((alias) => alias.toLowerCase() === normalized)));
413
+ const versionNodes = uniqueBy([
414
+ ...products.flatMap((product) => outgoingNodes(product.id, "has_version").filter((node) => node.kind === "AgentVersion")),
415
+ ...graph.nodes.filter((node) => node.kind === "AgentVersion" &&
416
+ (valueAsString(node.agentId).toLowerCase() === normalized ||
417
+ valueAsString(node.displayName).toLowerCase() === normalized ||
418
+ stringArray(node.aliases).some((alias) => alias.toLowerCase() === normalized))),
419
+ ], (node) => node.id);
420
+ return sortVersionScopedNodes(versionNodes);
421
+ }
422
+ function resolveVersionNode(nodes, selector) {
423
+ if (nodes.length === 0) {
424
+ return undefined;
425
+ }
426
+ if (!selector) {
427
+ return sortVersionScopedNodes(nodes)[0];
428
+ }
429
+ const normalizedSelector = normalizeLookup(selector);
430
+ const direct = nodes.find((node) => normalizeLookup(node.id) === normalizedSelector ||
431
+ normalizeLookup(valueAsString(node.versionRange)) === normalizedSelector ||
432
+ normalizeLookup(valueAsString(node.agentVersionId)) === normalizedSelector);
433
+ if (direct) {
434
+ return direct;
435
+ }
436
+ const semanticMatches = nodes.filter((node) => satisfiesVersion(selector, valueAsString(node.versionRange)));
437
+ return sortVersionScopedNodes(semanticMatches)[0];
438
+ }
439
+ function typedAgentVersionFromNode(node) {
440
+ return getSdkState().agentByKey.get(versionKey(valueAsString(node.agentId), valueAsString(node.versionRange)));
441
+ }
442
+ function typedProviderVersionFromNode(node) {
443
+ return getSdkState().providerVersionByKey.get(versionKey(valueAsString(node.providerId), valueAsString(node.versionRange)));
444
+ }
445
+ function typedModelVersionFromNode(node) {
446
+ return getSdkState().modelVersionByKey.get(versionKey(valueAsString(node.modelId), valueAsString(node.versionRange)));
447
+ }
448
+ function typedTransportFromNode(node) {
449
+ return getSdkState().transportById.get(valueAsString(node.runtimeId));
450
+ }
451
+ function typedCapabilityFromNode(node) {
452
+ return getSdkState().capabilityById.get(valueAsString(node.capabilityId));
453
+ }
454
+ function typedModalityFromNode(node) {
455
+ return getSdkState().modalityById.get(valueAsString(node.modalityId));
456
+ }
457
+ function typedSessionFromNode(node) {
458
+ return getSdkState().sessionById.get(valueAsString(node.sessionSemanticsId));
459
+ }
460
+ function typedLifecycleFromNode(node) {
461
+ return getSdkState().lifecycleById.get(valueAsString(node.lifecycleSemanticsId));
462
+ }
463
+ function typedHookFromNode(node) {
464
+ return getSdkState().hookById.get(valueAsString(node.hookId));
465
+ }
466
+ function typedPluginTargetFromNode(node) {
467
+ return getSdkState().pluginTargetById.get(valueAsString(node.targetId));
468
+ }
469
+ function capabilitySupportNodesForSubject(subjectId) {
470
+ return outgoingNodes(subjectId, "supports_capability").filter((node) => node.kind === "CapabilitySupport");
471
+ }
472
+ function capabilitySupportForSubject(subjectId) {
473
+ return capabilitySupportNodesForSubject(subjectId).map(toCapabilitySupport);
474
+ }
475
+ function capabilitiesForSupportNodes(nodes) {
476
+ return uniqueBy(nodes
477
+ .flatMap((node) => outgoingNodes(node.id, "for_capability"))
478
+ .filter((node) => node.kind === "Capability")
479
+ .map((node) => typedCapabilityFromNode(node))
480
+ .filter((capability) => Boolean(capability)), (capability) => capability.capabilityId);
481
+ }
482
+ function findHooks(agent) {
483
+ return orderedByIds(agent.hookIds, data_1.AGENT_CATALOG.hooks.filter((hook) => agent.hookIds.includes(hook.hookId)), (hook) => hook.hookId);
484
+ }
485
+ function findPluginTargets(agent) {
486
+ return orderedByIds(agent.pluginTargetIds, data_1.PLUGIN_TARGETS.filter((target) => agent.pluginTargetIds.includes(target.targetId)), (target) => target.targetId);
487
+ }
488
+ function findSessionSemantics(agent) {
489
+ return orderedByIds(agent.sessionNuanceIds, data_1.AGENT_CATALOG.sessionNuances.filter((nuance) => agent.sessionNuanceIds.includes(nuance.nuanceId)), (nuance) => nuance.nuanceId);
490
+ }
491
+ function findLifecycleSemantics(agent) {
492
+ return orderedByIds(agent.lifecycleNuanceIds, data_1.AGENT_CATALOG.lifecycleNuances.filter((nuance) => agent.lifecycleNuanceIds.includes(nuance.nuanceId)), (nuance) => nuance.nuanceId);
493
+ }
494
+ function findCapabilityMatrix(agent) {
495
+ const subjectId = agentVersionNodeId(agent);
496
+ return data_1.CAPABILITY_ASSERTIONS.filter((assertion) => assertion.subjectKind === "AgentVersion" && assertion.subjectId === subjectId);
497
+ }
498
+ function findClaims(agent, capabilityMatrix) {
499
+ const claimMap = new Map();
500
+ for (const assertion of capabilityMatrix) {
501
+ for (const claim of assertion.supportingClaims) {
502
+ claimMap.set(claim.claimId, claim);
503
+ }
504
+ }
505
+ for (const claim of data_1.CLAIMS) {
506
+ if (claim.subjectKind === "AgentVersion" && claim.subjectId === agentVersionNodeId(agent)) {
507
+ claimMap.set(claim.claimId, claim);
508
+ }
509
+ if (agent.evidenceIds.includes(claim.claimId)) {
510
+ claimMap.set(claim.claimId, claim);
511
+ }
512
+ }
513
+ return Array.from(claimMap.values());
514
+ }
515
+ function findEvidence(agent, capabilityMatrix, claims) {
516
+ const evidenceIds = new Set([
517
+ ...agent.evidenceIds,
518
+ ...capabilityMatrix.flatMap((assertion) => assertion.evidenceIds),
519
+ ...claims.flatMap((claim) => claim.evidenceIds),
520
+ ]);
521
+ return data_1.AGENT_CATALOG.evidence.filter((evidence) => evidenceIds.has(evidence.evidenceId));
522
+ }
523
+ function buildEvidenceSummary(capabilityMatrix, claims, evidenceCount) {
524
+ return {
525
+ evidenceCount,
526
+ claimCount: claims.length,
527
+ corroboratedCount: capabilityMatrix.filter((assertion) => assertion.evidenceStrength === "corroborated").length,
528
+ partialCount: capabilityMatrix.filter((assertion) => assertion.evidenceStrength === "partial").length,
529
+ inferredCount: capabilityMatrix.filter((assertion) => assertion.evidenceStrength === "inferred").length,
530
+ unresolvedGapCount: new Set(capabilityMatrix.flatMap((assertion) => assertion.unresolvedGaps)).size,
531
+ };
532
+ }
533
+ function toAgentReference(agent) {
534
+ return {
535
+ id: agentVersionNodeId(agent),
536
+ slug: getAgentVersionSlug(agent),
537
+ agentId: agent.agentId,
538
+ name: agent.displayName,
539
+ versionRange: agent.versionRange,
540
+ };
541
+ }
542
+ function buildOntologyListItem(agent) {
543
+ const capabilityMatrix = findCapabilityMatrix(agent);
544
+ const claims = findClaims(agent, capabilityMatrix);
545
+ const evidence = findEvidence(agent, capabilityMatrix, claims);
546
+ return {
547
+ ...toAgentReference(agent),
548
+ aliases: agent.aliases,
549
+ runtimeFamily: agent.runtimeFamily,
550
+ releaseChannel: agent.releaseChannel,
551
+ since: agent.since,
552
+ until: agent.until,
553
+ osSupport: agent.osSupport,
554
+ description: agent.summary,
555
+ sourcePackage: agent.sourcePackage,
556
+ providers: findProviderVersions(agent),
557
+ models: findModelVersions(agent),
558
+ transports: findTransports(agent),
559
+ modalities: findModalities(agent),
560
+ capabilities: findCapabilities(agent),
561
+ hooks: findHooks(agent),
562
+ pluginTargets: findPluginTargets(agent),
563
+ sessionSemantics: findSessionSemantics(agent),
564
+ lifecycleSemantics: findLifecycleSemantics(agent),
565
+ evidenceSummary: buildEvidenceSummary(capabilityMatrix, claims, evidence.length),
566
+ filePath: AGENT_FILE_PATH,
567
+ directory: AGENT_DIRECTORY,
568
+ };
569
+ }
570
+ function getRelatedVersionReferences(agent, relation, direction) {
571
+ const currentNodeId = agentVersionNodeId(agent);
572
+ const matchingIds = (0, graph_1.listRelationshipsByRelation)(relation)
573
+ .filter((edge) => (direction === "from" ? edge.from === currentNodeId : edge.to === currentNodeId))
574
+ .map((edge) => (direction === "from" ? edge.to : edge.from));
575
+ return data_1.AGENT_CATALOG.agents
576
+ .filter((candidate) => matchingIds.includes(agentVersionNodeId(candidate)))
577
+ .map(toAgentReference);
578
+ }
579
+ function productNodeForVersionNode(versionNodeId) {
580
+ return incomingNodes(versionNodeId, "has_version")[0];
581
+ }
582
+ function getCatalogGraphSnapshot() {
583
+ return clone((0, graph_1.getCatalogGraph)());
584
+ }
585
+ function getCatalogGraphDocument() {
586
+ return clone(data_1.GRAPH_DOCUMENT);
587
+ }
588
+ function getCatalogOntologySchema() {
589
+ return clone(data_1.ONTOLOGY_SCHEMA);
590
+ }
591
+ function getAgentCatalog() {
592
+ return clone(data_1.AGENT_CATALOG);
593
+ }
594
+ function listCatalogClaims() {
595
+ return clone(data_1.CLAIMS);
596
+ }
597
+ function getCapabilitySupportAssertions() {
598
+ return clone(data_1.CAPABILITY_ASSERTIONS);
599
+ }
600
+ function listAgentVersions() {
601
+ return clone(data_1.AGENT_CATALOG.agents);
602
+ }
603
+ function getAgentVersions(agentIdOrAlias) {
604
+ return agentVersionNodes(agentIdOrAlias)
605
+ .map((node) => typedAgentVersionFromNode(node))
606
+ .filter((agent) => Boolean(agent))
607
+ .map(clone);
608
+ }
609
+ function getAgentVersion(agentIdOrAlias, versionSelector) {
610
+ const node = resolveVersionNode(agentVersionNodes(agentIdOrAlias), versionSelector);
611
+ const agent = node ? typedAgentVersionFromNode(node) : undefined;
612
+ return agent ? clone(agent) : undefined;
613
+ }
614
+ function listOntologyNodesByKind(kind) {
615
+ return clone((0, graph_1.listGraphNodes)().filter((node) => node.kind === kind));
616
+ }
617
+ function listOntologyRelations(relation) {
618
+ return clone((0, graph_1.listRelationshipsByRelation)(relation));
619
+ }
620
+ function listCapabilitySupportForSubject(subjectId) {
621
+ return capabilitySupportForSubject(subjectId).map(clone);
622
+ }
623
+ function listCapabilitySupportByAgentVersion(agentIdOrAlias) {
624
+ return getAgentVersions(agentIdOrAlias).map((agent) => {
625
+ const nodeId = `agentVersion:${agent.agentId}:${slugify(agent.versionRange)}`;
626
+ const supportNodes = capabilitySupportNodesForSubject(nodeId);
627
+ return {
628
+ agent,
629
+ capabilitySupport: supportNodes.map(toCapabilitySupport),
630
+ capabilities: capabilitiesForSupportNodes(supportNodes),
631
+ };
632
+ }).map(clone);
633
+ }
634
+ function getCapabilitySupportForAgentVersion(agentIdOrAlias, versionSelector) {
635
+ const agentNode = resolveVersionNode(agentVersionNodes(agentIdOrAlias), versionSelector);
636
+ return agentNode ? capabilitySupportForSubject(agentNode.id).map(clone) : [];
637
+ }
638
+ function supportsAgentCapability(agentIdOrAlias, capabilityId, versionSelector) {
639
+ return getCapabilitySupportForAgentVersion(agentIdOrAlias, versionSelector).some((record) => record.capabilityId === capabilityId);
640
+ }
641
+ function getAgentVersionTopology(agentIdOrAlias, versionSelector) {
642
+ const agentNode = resolveVersionNode(agentVersionNodes(agentIdOrAlias), versionSelector);
643
+ const agent = agentNode ? typedAgentVersionFromNode(agentNode) : undefined;
644
+ if (!agentNode || !agent) {
645
+ return undefined;
646
+ }
647
+ const productNode = productNodeForVersionNode(agentNode.id);
648
+ const supportNodes = capabilitySupportNodesForSubject(agentNode.id);
649
+ const defaultModelNodes = outgoingNodes(agentNode.id, "defaults_to_model").filter((node) => node.kind === "ModelVersion");
650
+ const providerVersionNodes = uniqueBy(defaultModelNodes.flatMap((node) => outgoingNodes(node.id, "provided_by").filter((candidate) => candidate.kind === "ModelProviderVersion")), (node) => node.id);
651
+ const providerNodes = uniqueBy(providerVersionNodes.flatMap((node) => incomingNodes(node.id, "has_version").filter((candidate) => candidate.kind === "ModelProviderProduct")), (node) => node.id);
652
+ const transportRuntimeNodes = outgoingNodes(agentNode.id, "uses_transport").filter((node) => node.kind === "TransportRuntime");
653
+ const transportProtocolNodes = uniqueBy(outgoingNodes(agentNode.id, "uses_transport").filter((node) => node.kind === "TransportProtocol" && (0, transport_mux_cutover_1.shouldSurfaceTransportProtocol)(nodeEvidenceIds(node))), (node) => node.id);
654
+ const modalityNodes = outgoingNodes(agentNode.id, "supports_modality").filter((node) => node.kind === "Modality");
655
+ const sessionNodes = outgoingNodes(agentNode.id, "uses_session_semantics").filter((node) => node.kind === "SessionSemantics");
656
+ const lifecycleNodes = outgoingNodes(agentNode.id, "uses_lifecycle_semantics").filter((node) => node.kind === "LifecycleSemantics");
657
+ const discoveryNodes = outgoingNodes(agentNode.id, "discovered_by").filter((node) => node.kind === "DiscoverySignal");
658
+ const hookMappingNodes = outgoingNodes(agentNode.id, "emits_hook").filter((node) => node.kind === "HookMapping");
659
+ const hookNodes = uniqueBy(hookMappingNodes.flatMap((node) => outgoingNodes(node.id, "maps_hook").filter((candidate) => candidate.kind === "HookSurface")), (node) => node.id);
660
+ const pluginTargetNodes = outgoingNodes(agentNode.id, "targets_plugin_surface").filter((node) => node.kind === "PluginTarget");
661
+ return clone({
662
+ agent,
663
+ product: productNode?.kind === "AgentProduct" ? toAgentProduct(productNode) : undefined,
664
+ capabilitySupport: supportNodes.map(toCapabilitySupport),
665
+ capabilities: capabilitiesForSupportNodes(supportNodes),
666
+ defaultModels: defaultModelNodes
667
+ .map((node) => typedModelVersionFromNode(node))
668
+ .filter((model) => Boolean(model)),
669
+ modelFamilies: uniqueBy(defaultModelNodes
670
+ .flatMap((node) => incomingNodes(node.id, "has_version").filter((candidate) => candidate.kind === "ModelFamily"))
671
+ .map(toModelFamily), (model) => model.modelId),
672
+ providerVersions: providerVersionNodes
673
+ .map((node) => typedProviderVersionFromNode(node))
674
+ .filter((provider) => Boolean(provider)),
675
+ providers: providerNodes.map(toModelProviderProduct),
676
+ transportRuntimes: transportRuntimeNodes
677
+ .map((node) => typedTransportFromNode(node))
678
+ .filter((transport) => Boolean(transport)),
679
+ transportProtocols: transportProtocolNodes.map(toTransportProtocol),
680
+ modalities: modalityNodes
681
+ .map((node) => typedModalityFromNode(node))
682
+ .filter((modality) => Boolean(modality)),
683
+ sessionSemantics: sessionNodes
684
+ .map((node) => typedSessionFromNode(node))
685
+ .filter((nuance) => Boolean(nuance)),
686
+ lifecycleSemantics: lifecycleNodes
687
+ .map((node) => typedLifecycleFromNode(node))
688
+ .filter((nuance) => Boolean(nuance)),
689
+ discoverySignals: discoveryNodes.map(toDiscoverySignal),
690
+ hookMappings: hookMappingNodes.map(toHookMapping),
691
+ hooks: hookNodes
692
+ .map((node) => typedHookFromNode(node))
693
+ .filter((hook) => Boolean(hook)),
694
+ pluginTargets: pluginTargetNodes
695
+ .map((node) => typedPluginTargetFromNode(node))
696
+ .filter((target) => Boolean(target)),
697
+ });
698
+ }
699
+ function getProviderModelTopology(providerId) {
700
+ const providerNode = getNode(`provider:${providerId}`);
701
+ if (!providerNode || providerNode.kind !== "ModelProviderProduct") {
702
+ return undefined;
703
+ }
704
+ const providerVersionNodes = outgoingNodes(providerNode.id, "has_version").filter((node) => node.kind === "ModelProviderVersion");
705
+ const modelVersionNodes = uniqueBy(providerVersionNodes.flatMap((node) => incomingNodes(node.id, "provided_by").filter((candidate) => candidate.kind === "ModelVersion")), (node) => node.id);
706
+ const modelFamilyNodes = uniqueBy(modelVersionNodes.flatMap((node) => incomingNodes(node.id, "has_version").filter((candidate) => candidate.kind === "ModelFamily")), (node) => node.id);
707
+ const agentNodes = uniqueBy(modelVersionNodes.flatMap((node) => incomingNodes(node.id, "defaults_to_model").filter((candidate) => candidate.kind === "AgentVersion")), (node) => node.id);
708
+ const supportNodes = uniqueBy(providerVersionNodes.flatMap((node) => capabilitySupportNodesForSubject(node.id)), (node) => node.id);
709
+ return clone({
710
+ provider: toModelProviderProduct(providerNode),
711
+ versions: providerVersionNodes
712
+ .map((node) => typedProviderVersionFromNode(node))
713
+ .filter((version) => Boolean(version)),
714
+ capabilitySupport: supportNodes.map(toCapabilitySupport),
715
+ capabilities: capabilitiesForSupportNodes(supportNodes),
716
+ models: modelVersionNodes
717
+ .map((node) => typedModelVersionFromNode(node))
718
+ .filter((model) => Boolean(model)),
719
+ modelFamilies: modelFamilyNodes.map(toModelFamily),
720
+ agents: agentNodes
721
+ .map((node) => typedAgentVersionFromNode(node))
722
+ .filter((agent) => Boolean(agent)),
723
+ });
724
+ }
725
+ function listPackageSurfaces() {
726
+ return getSdkState().graph.nodes.filter((node) => node.kind === "PackageSurface").map(toPackageSurface).map(clone);
727
+ }
728
+ function getPackageSurface(packageId) {
729
+ const node = getNode(`package:${packageId}`);
730
+ return node?.kind === "PackageSurface" ? clone(toPackageSurface(node)) : undefined;
731
+ }
732
+ function listPackagesBySurfaceKind(surfaceKind) {
733
+ return listPackageSurfaces().filter((pkg) => pkg.surfaceKinds.includes(surfaceKind));
734
+ }
735
+ function findPackageSurfaceByWorkspacePath(workspacePath) {
736
+ const normalized = workspacePath.trim();
737
+ const node = getSdkState().graph.nodes.find((candidate) => candidate.kind === "PackageSurface" && valueAsString(candidate.workspacePath) === normalized);
738
+ return node ? clone(toPackageSurface(node)) : undefined;
739
+ }
740
+ function listProcessDescriptors() {
741
+ return clone(data_1.AGENT_CATALOG.processes);
742
+ }
743
+ function listProcessesByPackage(packageId) {
744
+ const packageNode = getNode(`package:${packageId}`);
745
+ if (!packageNode || packageNode.kind !== "PackageSurface") {
746
+ return [];
747
+ }
748
+ return outgoingNodes(packageNode.id, "surfaces_process")
749
+ .filter((node) => node.kind === "ProcessDescriptor")
750
+ .map((node) => data_1.AGENT_CATALOG.processes.find((process) => process.processId === valueAsString(node.processId)))
751
+ .filter((process) => Boolean(process))
752
+ .map(clone);
753
+ }
754
+ function listPathDescriptors() {
755
+ return getSdkState().graph.nodes.filter((node) => node.kind === "PathDescriptor").map(toPathDescriptor).map(clone);
756
+ }
757
+ function getPathDescriptor(pathIdOrPath) {
758
+ const directNode = getNode(`path:${pathIdOrPath}`);
759
+ if (directNode?.kind === "PathDescriptor") {
760
+ return clone(toPathDescriptor(directNode));
761
+ }
762
+ const pathNode = getSdkState().graph.nodes.find((node) => node.kind === "PathDescriptor" && valueAsString(node.pathId) === pathIdOrPath) ?? getSdkState().graph.nodes.find((node) => node.kind === "PathDescriptor" && valueAsString(node.path) === pathIdOrPath);
763
+ return pathNode ? clone(toPathDescriptor(pathNode)) : undefined;
764
+ }
765
+ function listPathsByOwner(ownerId) {
766
+ return outgoingNodes(ownerId, "references_path")
767
+ .filter((node) => node.kind === "PathDescriptor")
768
+ .map(toPathDescriptor)
769
+ .map(clone);
770
+ }
771
+ function findProcessesByPath(pathIdOrPath) {
772
+ const pathNode = getNode(`path:${pathIdOrPath}`) ??
773
+ getSdkState().graph.nodes.find((node) => node.kind === "PathDescriptor" &&
774
+ (valueAsString(node.pathId) === pathIdOrPath || valueAsString(node.path) === pathIdOrPath));
775
+ if (!pathNode || pathNode.kind !== "PathDescriptor") {
776
+ return [];
777
+ }
778
+ return incomingNodes(pathNode.id, "references_path")
779
+ .filter((node) => node.kind === "ProcessDescriptor")
780
+ .map((node) => data_1.AGENT_CATALOG.processes.find((process) => process.processId === valueAsString(node.processId)))
781
+ .filter((process) => Boolean(process))
782
+ .map(clone);
783
+ }
784
+ function getPackageTopology(packageId) {
785
+ const packageNode = getNode(`package:${packageId}`);
786
+ if (!packageNode || packageNode.kind !== "PackageSurface") {
787
+ return undefined;
788
+ }
789
+ const processNodes = outgoingNodes(packageNode.id, "surfaces_process").filter((node) => node.kind === "ProcessDescriptor");
790
+ const ciNodes = outgoingNodes(packageNode.id, "validated_by_ci").filter((node) => node.kind === "CiSurface");
791
+ const directPathNodes = outgoingNodes(packageNode.id, "references_path").filter((node) => node.kind === "PathDescriptor");
792
+ const processPathNodes = uniqueBy(processNodes.flatMap((node) => outgoingNodes(node.id, "references_path").filter((candidate) => candidate.kind === "PathDescriptor")), (node) => node.id);
793
+ return clone({
794
+ package: toPackageSurface(packageNode),
795
+ processes: processNodes
796
+ .map((node) => data_1.AGENT_CATALOG.processes.find((process) => process.processId === valueAsString(node.processId)))
797
+ .filter((process) => Boolean(process)),
798
+ ciSurfaces: ciNodes.map(toCiSurface),
799
+ directPaths: directPathNodes.map(toPathDescriptor),
800
+ processPaths: processPathNodes.map(toPathDescriptor),
801
+ wrapsGraphIds: sortStrings(outgoingEdges(packageNode.id, "wraps_graph").map((edge) => edge.to)),
802
+ });
803
+ }
804
+ function getFallbackHarnessMetadata(harnessName) {
805
+ const key = HARNESS_ALIASES[harnessName] ?? harnessName;
806
+ const metadata = data_1.FALLBACK_METADATA[key];
807
+ return metadata ? clone(metadata) : undefined;
808
+ }
809
+ function listFallbackHarnessMetadata() {
810
+ return clone(data_1.FALLBACK_METADATA);
811
+ }
812
+ function getHostSignalMap() {
813
+ return clone(data_1.HOST_SIGNAL_MAP);
814
+ }
815
+ function getHostMetadataFields() {
816
+ return clone(data_1.HOST_METADATA_FIELDS);
817
+ }
818
+ function getHostDetectionRules() {
819
+ return clone(data_1.HOST_DETECTION_RULES);
820
+ }
821
+ function getHooksMuxDetectionRules() {
822
+ return clone(data_1.HOOKS_MUX_DETECTION_RULES);
823
+ }
824
+ function getHarnessImages() {
825
+ return clone(data_1.HARNESS_IMAGES);
826
+ }
827
+ function lookupHarnessImage(harness) {
828
+ const normalized = harness.toLowerCase();
829
+ const key = HARNESS_ALIASES[normalized] ?? normalized;
830
+ const image = data_1.HARNESS_IMAGES.find((entry) => entry.harness === key);
831
+ return image ? clone(image) : undefined;
832
+ }
833
+ function listPluginTargets() {
834
+ return data_1.PLUGIN_TARGETS.map((target) => target.targetId).sort();
835
+ }
836
+ function listPluginTargetDescriptors() {
837
+ return clone(data_1.PLUGIN_TARGETS);
838
+ }
839
+ function getPluginTargetDescriptor(targetId) {
840
+ const target = data_1.PLUGIN_TARGETS.find((entry) => entry.targetId === targetId);
841
+ return target ? clone(target) : undefined;
842
+ }
843
+ function getHookCatalog() {
844
+ return clone(data_1.HOOKS);
845
+ }
846
+ function getHookNameMap() {
847
+ const map = {};
848
+ for (const hook of data_1.HOOKS) {
849
+ map[hook.canonicalName] = { ...hook.targetNames };
850
+ }
851
+ return map;
852
+ }
853
+ function getAgentVersionSlug(agent) {
854
+ return `${agent.agentId}--${slugifyVersionRange(agent.versionRange)}`;
855
+ }
856
+ function getUiAgentOntologyList() {
857
+ return clone(data_1.AGENT_CATALOG.agents.map(buildOntologyListItem));
858
+ }
859
+ function getUiAgentOntologyEntry(slugOrId) {
860
+ const agent = data_1.AGENT_CATALOG.agents.find((candidate) => getAgentVersionSlug(candidate) === slugOrId ||
861
+ agentVersionNodeId(candidate) === slugOrId);
862
+ if (!agent) {
863
+ return undefined;
864
+ }
865
+ const capabilityMatrix = findCapabilityMatrix(agent);
866
+ const claims = findClaims(agent, capabilityMatrix);
867
+ const evidence = findEvidence(agent, capabilityMatrix, claims);
868
+ return clone({
869
+ ...buildOntologyListItem(agent),
870
+ capabilityMatrix,
871
+ evidence,
872
+ claims,
873
+ supersedes: getRelatedVersionReferences(agent, "supersedes", "from"),
874
+ supersededBy: getRelatedVersionReferences(agent, "supersedes", "to"),
875
+ schemaVersion: data_1.GRAPH_DOCUMENT.schemaVersion,
876
+ generatedAt: data_1.GRAPH_DOCUMENT.generatedAt,
877
+ });
878
+ }
879
+ function getUiAgentCards() {
880
+ return getUiAgentOntologyList().map((agent) => ({
881
+ id: agent.slug,
882
+ name: agent.name,
883
+ versionRange: agent.versionRange,
884
+ description: agent.description,
885
+ providerNames: agent.providers.map((provider) => provider.displayName),
886
+ transportLabels: agent.transports.map((transport) => transport.label),
887
+ capabilities: agent.capabilities.map((capability) => capability.label),
888
+ hookNames: agent.hooks.map((hook) => hook.canonicalName),
889
+ filePath: agent.filePath,
890
+ directory: agent.directory,
891
+ metadata: {
892
+ agentId: agent.agentId,
893
+ aliases: agent.aliases,
894
+ slug: agent.slug,
895
+ runtimeFamily: agent.runtimeFamily,
896
+ pluginTargets: agent.pluginTargets.map((target) => target.targetId),
897
+ modalities: agent.modalities.map((modality) => modality.modalityId),
898
+ evidenceSummary: agent.evidenceSummary,
899
+ schemaVersion: data_1.GRAPH_DOCUMENT.schemaVersion,
900
+ },
901
+ }));
902
+ }