Skip to content

Commit 3e73a2d

Browse files
dynamic capabilities
1 parent 665feee commit 3e73a2d

2 files changed

Lines changed: 28 additions & 3 deletions

File tree

packages/agent-auth/src/routes/batch-execute-capability.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,19 @@ export function batchExecuteCapability(opts: ResolvedAgentAuthOptions) {
107107
id: r.id ?? String(i),
108108
}));
109109

110-
const allCapabilities = opts.capabilities ?? [];
110+
let allCapabilities = opts.capabilities ?? [];
111+
112+
// If the static list is empty and resolveCapabilities is configured,
113+
// resolve dynamically so batch execute works with dynamic capabilities.
114+
if (allCapabilities.length === 0 && opts.resolveCapabilities) {
115+
allCapabilities = await opts.resolveCapabilities({
116+
capabilities: allCapabilities,
117+
agentSession: agentSession ?? null,
118+
hostSession: null,
119+
query: null,
120+
});
121+
}
122+
111123
const capDefMap = new Map<string, Capability>();
112124
for (const cap of allCapabilities) {
113125
capDefMap.set(cap.name, cap);

packages/agent-auth/src/routes/execute-capability.ts

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,21 @@ export function executeCapability(opts: ResolvedAgentAuthOptions) {
5959

6060
const { capability: capabilityName, arguments: args } = ctx.body;
6161

62-
const allCapabilities = opts.capabilities ?? [];
63-
const capabilityDef = allCapabilities.find((c) => c.name === capabilityName);
62+
let allCapabilities = opts.capabilities ?? [];
63+
64+
// If the static list doesn't contain the capability and
65+
// resolveCapabilities is configured, resolve dynamically.
66+
let capabilityDef = allCapabilities.find((c) => c.name === capabilityName);
67+
if (!capabilityDef && opts.resolveCapabilities) {
68+
const resolved = await opts.resolveCapabilities({
69+
capabilities: allCapabilities,
70+
agentSession: agentSession ?? null,
71+
hostSession: null,
72+
query: null,
73+
});
74+
allCapabilities = resolved;
75+
capabilityDef = resolved.find((c) => c.name === capabilityName);
76+
}
6477
if (!capabilityDef) {
6578
throw agentError(
6679
"NOT_FOUND",

0 commit comments

Comments
 (0)