@theia/ai-core 1.72.0-next.42 → 1.72.0-next.46
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/lib/browser/generic-capabilities-variable-contribution.d.ts +2 -1
- package/lib/browser/generic-capabilities-variable-contribution.d.ts.map +1 -1
- package/lib/browser/generic-capabilities-variable-contribution.js +13 -2
- package/lib/browser/generic-capabilities-variable-contribution.js.map +1 -1
- package/lib/browser/generic-capabilities-variable-contribution.spec.js +70 -0
- package/lib/browser/generic-capabilities-variable-contribution.spec.js.map +1 -1
- package/package.json +9 -9
- package/src/browser/generic-capabilities-variable-contribution.spec.ts +108 -0
- package/src/browser/generic-capabilities-variable-contribution.ts +15 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MaybePromise } from '@theia/core';
|
|
2
|
-
import { AIVariable, AIVariableArg, AIVariableContext, AIVariableContribution, AIVariableResolutionRequest, AIVariableResolverWithVariableDependencies, AIVariableService, ResolvedAIVariable, AgentService, AgentsVariableContribution } from '../common';
|
|
2
|
+
import { AIVariable, AIVariableArg, AIVariableContext, AIVariableContribution, AIVariableResolutionRequest, AIVariableResolverWithVariableDependencies, AIVariableService, ResolvedAIVariable, AgentService, AgentsVariableContribution, ToolInvocationRegistry } from '../common';
|
|
3
3
|
import { PromptVariableContribution } from './prompt-variable-contribution';
|
|
4
4
|
import { SkillService } from './skill-service';
|
|
5
5
|
import { SkillsVariableContribution } from './skills-variable-contribution';
|
|
@@ -24,6 +24,7 @@ export declare class GenericCapabilitiesVariableContribution implements AIVariab
|
|
|
24
24
|
protected readonly variableService: AIVariableService | undefined;
|
|
25
25
|
protected readonly agentService: AgentService | undefined;
|
|
26
26
|
protected readonly agentsContribution: AgentsVariableContribution | undefined;
|
|
27
|
+
protected readonly toolInvocationRegistry: ToolInvocationRegistry | undefined;
|
|
27
28
|
protected readonly promptContribution: PromptVariableContribution | undefined;
|
|
28
29
|
registerVariables(service: AIVariableService): void;
|
|
29
30
|
canResolve(request: AIVariableResolutionRequest, _context: AIVariableContext): MaybePromise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-capabilities-variable-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACH,UAAU,EACV,aAAa,EACb,iBAAiB,EACjB,sBAAsB,EACtB,2BAA2B,EAC3B,0CAA0C,EAC1C,iBAAiB,EACjB,kBAAkB,EAElB,YAAY,EACZ,0BAA0B,
|
|
1
|
+
{"version":3,"file":"generic-capabilities-variable-contribution.d.ts","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,11 +120,17 @@ let GenericCapabilitiesVariableContribution = class GenericCapabilitiesVariableC
|
|
|
120
120
|
* The chat request parser will pick these up and add them to the toolRequests map.
|
|
121
121
|
*/
|
|
122
122
|
resolveSelectedFunctions(variable, functionIds) {
|
|
123
|
-
if (!functionIds || functionIds.length === 0) {
|
|
123
|
+
if (!functionIds || functionIds.length === 0 || !this.toolInvocationRegistry) {
|
|
124
|
+
return { variable, value: '' };
|
|
125
|
+
}
|
|
126
|
+
// Filter out stale/orphaned tool IDs that no longer exist in the registry
|
|
127
|
+
const validIds = functionIds
|
|
128
|
+
.filter(id => this.toolInvocationRegistry.getFunction(id) !== undefined);
|
|
129
|
+
if (validIds.length === 0) {
|
|
124
130
|
return { variable, value: '' };
|
|
125
131
|
}
|
|
126
132
|
// Output function references in ~{id} format so the chat parser picks them up
|
|
127
|
-
const functionRefs =
|
|
133
|
+
const functionRefs = validIds.map(id => `~{${id}}`).join('\n');
|
|
128
134
|
return { variable, value: functionRefs };
|
|
129
135
|
}
|
|
130
136
|
/**
|
|
@@ -207,6 +213,11 @@ tslib_1.__decorate([
|
|
|
207
213
|
(0, inversify_1.optional)(),
|
|
208
214
|
tslib_1.__metadata("design:type", Object)
|
|
209
215
|
], GenericCapabilitiesVariableContribution.prototype, "agentsContribution", void 0);
|
|
216
|
+
tslib_1.__decorate([
|
|
217
|
+
(0, inversify_1.inject)(common_1.ToolInvocationRegistry),
|
|
218
|
+
(0, inversify_1.optional)(),
|
|
219
|
+
tslib_1.__metadata("design:type", Object)
|
|
220
|
+
], GenericCapabilitiesVariableContribution.prototype, "toolInvocationRegistry", void 0);
|
|
210
221
|
tslib_1.__decorate([
|
|
211
222
|
(0, inversify_1.inject)(prompt_variable_contribution_1.PromptVariableContribution),
|
|
212
223
|
(0, inversify_1.optional)(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-capabilities-variable-contribution.js","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,yCAAyC;AACzC,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;;;AAEhF,4DAA4E;AAE5E,
|
|
1
|
+
{"version":3,"file":"generic-capabilities-variable-contribution.js","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.ts"],"names":[],"mappings":"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"}
|
|
@@ -29,6 +29,21 @@ describe('GenericCapabilitiesVariableContribution', () => {
|
|
|
29
29
|
after(() => disableJSDOM());
|
|
30
30
|
let contribution;
|
|
31
31
|
let container;
|
|
32
|
+
function createMockToolInvocationRegistry(registeredToolIds) {
|
|
33
|
+
const tools = new Map();
|
|
34
|
+
for (const id of registeredToolIds) {
|
|
35
|
+
tools.set(id, { id, providerName: 'test', parameters: {}, handler: async () => '' });
|
|
36
|
+
}
|
|
37
|
+
return {
|
|
38
|
+
getFunction: (toolId) => tools.get(toolId),
|
|
39
|
+
getFunctions: (...toolIds) => toolIds.map(id => tools.get(id)).filter((t) => t !== undefined),
|
|
40
|
+
registerTool: () => { },
|
|
41
|
+
unregisterTool: () => { },
|
|
42
|
+
unregisterAllTools: () => { },
|
|
43
|
+
getAllFunctions: () => Array.from(tools.values()),
|
|
44
|
+
onDidChange: () => ({ dispose: () => { } }),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
32
47
|
beforeEach(() => {
|
|
33
48
|
container = new inversify_1.Container();
|
|
34
49
|
container.bind(generic_capabilities_variable_contribution_1.GenericCapabilitiesVariableContribution).toSelf().inSingletonScope();
|
|
@@ -53,6 +68,61 @@ describe('GenericCapabilitiesVariableContribution', () => {
|
|
|
53
68
|
});
|
|
54
69
|
});
|
|
55
70
|
describe('resolve', () => {
|
|
71
|
+
describe('resolveSelectedFunctions filtering', () => {
|
|
72
|
+
it('returns empty string when toolInvocationRegistry is not available', async () => {
|
|
73
|
+
const context = {
|
|
74
|
+
genericCapabilitySelections: {
|
|
75
|
+
functions: ['tool1', 'tool2']
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_FUNCTIONS_VARIABLE }, context);
|
|
79
|
+
(0, chai_1.expect)(result?.value).to.equal('');
|
|
80
|
+
});
|
|
81
|
+
it('filters out stale tool IDs that are not in the registry', async () => {
|
|
82
|
+
const mockRegistry = createMockToolInvocationRegistry(['tool1', 'tool3']);
|
|
83
|
+
contribution.toolInvocationRegistry = mockRegistry;
|
|
84
|
+
const context = {
|
|
85
|
+
genericCapabilitySelections: {
|
|
86
|
+
functions: ['tool1', 'tool2_stale', 'tool3']
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_FUNCTIONS_VARIABLE }, context);
|
|
90
|
+
(0, chai_1.expect)(result?.value).to.equal('~{tool1}\n~{tool3}');
|
|
91
|
+
});
|
|
92
|
+
it('returns empty string when all tool IDs are stale', async () => {
|
|
93
|
+
const mockRegistry = createMockToolInvocationRegistry([]);
|
|
94
|
+
contribution.toolInvocationRegistry = mockRegistry;
|
|
95
|
+
const context = {
|
|
96
|
+
genericCapabilitySelections: {
|
|
97
|
+
functions: ['stale1', 'stale2']
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_FUNCTIONS_VARIABLE }, context);
|
|
101
|
+
(0, chai_1.expect)(result?.value).to.equal('');
|
|
102
|
+
});
|
|
103
|
+
it('returns all tool references when all IDs are valid', async () => {
|
|
104
|
+
const mockRegistry = createMockToolInvocationRegistry(['tool1', 'tool2']);
|
|
105
|
+
contribution.toolInvocationRegistry = mockRegistry;
|
|
106
|
+
const context = {
|
|
107
|
+
genericCapabilitySelections: {
|
|
108
|
+
functions: ['tool1', 'tool2']
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_FUNCTIONS_VARIABLE }, context);
|
|
112
|
+
(0, chai_1.expect)(result?.value).to.equal('~{tool1}\n~{tool2}');
|
|
113
|
+
});
|
|
114
|
+
it('filters stale MCP function IDs the same way', async () => {
|
|
115
|
+
const mockRegistry = createMockToolInvocationRegistry(['mcp_fetch_fetch']);
|
|
116
|
+
contribution.toolInvocationRegistry = mockRegistry;
|
|
117
|
+
const context = {
|
|
118
|
+
genericCapabilitySelections: {
|
|
119
|
+
mcpFunctions: ['mcp_fetch_fetch', 'mcp_removed_server_tool']
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_MCP_FUNCTIONS_VARIABLE }, context);
|
|
123
|
+
(0, chai_1.expect)(result?.value).to.equal('~{mcp_fetch_fetch}');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
56
126
|
it('returns empty string when no selections exist', async () => {
|
|
57
127
|
const context = {};
|
|
58
128
|
const result = await contribution.resolve({ variable: generic_capabilities_variable_contribution_1.SELECTED_SKILLS_VARIABLE }, context);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-capabilities-variable-contribution.spec.js","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.spec.ts"],"names":[],"mappings":";AAAA,gFAAgF;AAChF,+CAA+C;AAC/C,EAAE;AACF,2EAA2E;AAC3E,mEAAmE;AACnE,wCAAwC;AACxC,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,6EAA6E;AAC7E,yDAAyD;AACzD,uDAAuD;AACvD,EAAE;AACF,gFAAgF;AAChF,gFAAgF;;AAEhF,8DAAiE;AACjE,IAAI,YAAY,GAAG,IAAA,mBAAW,GAAE,CAAC;AACjC,uHAAiH;AACjH,wEAAiC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAE1C,4BAA0B;AAE1B,+BAA8B;AAC9B,yCAAsC;AACtC,
|
|
1
|
+
{"version":3,"file":"generic-capabilities-variable-contribution.spec.js","sourceRoot":"","sources":["../../src/browser/generic-capabilities-variable-contribution.spec.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theia/ai-core",
|
|
3
|
-
"version": "1.72.0-next.
|
|
3
|
+
"version": "1.72.0-next.46+128342e9b",
|
|
4
4
|
"description": "Theia - AI Core",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@theia/core": "1.72.0-next.
|
|
7
|
-
"@theia/editor": "1.72.0-next.
|
|
8
|
-
"@theia/filesystem": "1.72.0-next.
|
|
9
|
-
"@theia/monaco": "1.72.0-next.
|
|
6
|
+
"@theia/core": "1.72.0-next.46+128342e9b",
|
|
7
|
+
"@theia/editor": "1.72.0-next.46+128342e9b",
|
|
8
|
+
"@theia/filesystem": "1.72.0-next.46+128342e9b",
|
|
9
|
+
"@theia/monaco": "1.72.0-next.46+128342e9b",
|
|
10
10
|
"@theia/monaco-editor-core": "1.108.201",
|
|
11
|
-
"@theia/output": "1.72.0-next.
|
|
12
|
-
"@theia/variable-resolver": "1.72.0-next.
|
|
13
|
-
"@theia/workspace": "1.72.0-next.
|
|
11
|
+
"@theia/output": "1.72.0-next.46+128342e9b",
|
|
12
|
+
"@theia/variable-resolver": "1.72.0-next.46+128342e9b",
|
|
13
|
+
"@theia/workspace": "1.72.0-next.46+128342e9b",
|
|
14
14
|
"@types/js-yaml": "^4.0.9",
|
|
15
15
|
"fast-deep-equal": "^3.1.3",
|
|
16
16
|
"js-yaml": "^4.1.1",
|
|
@@ -58,5 +58,5 @@
|
|
|
58
58
|
"nyc": {
|
|
59
59
|
"extends": "../../configs/nyc.json"
|
|
60
60
|
},
|
|
61
|
-
"gitHead": "
|
|
61
|
+
"gitHead": "128342e9ba53c273de5ef8a5bc9b93dbc0b931d4"
|
|
62
62
|
}
|
|
@@ -27,9 +27,12 @@ import {
|
|
|
27
27
|
GenericCapabilitiesVariableContribution,
|
|
28
28
|
SELECTED_SKILLS_VARIABLE,
|
|
29
29
|
SELECTED_FUNCTIONS_VARIABLE,
|
|
30
|
+
SELECTED_MCP_FUNCTIONS_VARIABLE,
|
|
30
31
|
SELECTED_VARIABLES_VARIABLE
|
|
31
32
|
} from './generic-capabilities-variable-contribution';
|
|
32
33
|
import { CapabilityAwareContext } from '../common/capability-utils';
|
|
34
|
+
import { ToolInvocationRegistry } from '../common/tool-invocation-registry';
|
|
35
|
+
import { ToolRequest } from '../common/language-model';
|
|
33
36
|
|
|
34
37
|
disableJSDOM();
|
|
35
38
|
|
|
@@ -39,6 +42,22 @@ describe('GenericCapabilitiesVariableContribution', () => {
|
|
|
39
42
|
let contribution: GenericCapabilitiesVariableContribution;
|
|
40
43
|
let container: Container;
|
|
41
44
|
|
|
45
|
+
function createMockToolInvocationRegistry(registeredToolIds: string[]): ToolInvocationRegistry {
|
|
46
|
+
const tools = new Map<string, ToolRequest>();
|
|
47
|
+
for (const id of registeredToolIds) {
|
|
48
|
+
tools.set(id, { id, providerName: 'test', parameters: {}, handler: async () => '' } as unknown as ToolRequest);
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
getFunction: (toolId: string) => tools.get(toolId),
|
|
52
|
+
getFunctions: (...toolIds: string[]) => toolIds.map(id => tools.get(id)).filter((t): t is ToolRequest => t !== undefined),
|
|
53
|
+
registerTool: () => { },
|
|
54
|
+
unregisterTool: () => { },
|
|
55
|
+
unregisterAllTools: () => { },
|
|
56
|
+
getAllFunctions: () => Array.from(tools.values()),
|
|
57
|
+
onDidChange: () => ({ dispose: () => { } }),
|
|
58
|
+
} as unknown as ToolInvocationRegistry;
|
|
59
|
+
}
|
|
60
|
+
|
|
42
61
|
beforeEach(() => {
|
|
43
62
|
container = new Container();
|
|
44
63
|
container.bind<GenericCapabilitiesVariableContribution>(GenericCapabilitiesVariableContribution).toSelf().inSingletonScope();
|
|
@@ -80,6 +99,95 @@ describe('GenericCapabilitiesVariableContribution', () => {
|
|
|
80
99
|
});
|
|
81
100
|
|
|
82
101
|
describe('resolve', () => {
|
|
102
|
+
describe('resolveSelectedFunctions filtering', () => {
|
|
103
|
+
it('returns empty string when toolInvocationRegistry is not available', async () => {
|
|
104
|
+
const context: CapabilityAwareContext = {
|
|
105
|
+
genericCapabilitySelections: {
|
|
106
|
+
functions: ['tool1', 'tool2']
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
const result = await contribution.resolve(
|
|
111
|
+
{ variable: SELECTED_FUNCTIONS_VARIABLE },
|
|
112
|
+
context
|
|
113
|
+
);
|
|
114
|
+
|
|
115
|
+
expect(result?.value).to.equal('');
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
it('filters out stale tool IDs that are not in the registry', async () => {
|
|
119
|
+
const mockRegistry = createMockToolInvocationRegistry(['tool1', 'tool3']);
|
|
120
|
+
(contribution as unknown as { toolInvocationRegistry: ToolInvocationRegistry }).toolInvocationRegistry = mockRegistry;
|
|
121
|
+
|
|
122
|
+
const context: CapabilityAwareContext = {
|
|
123
|
+
genericCapabilitySelections: {
|
|
124
|
+
functions: ['tool1', 'tool2_stale', 'tool3']
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const result = await contribution.resolve(
|
|
129
|
+
{ variable: SELECTED_FUNCTIONS_VARIABLE },
|
|
130
|
+
context
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
expect(result?.value).to.equal('~{tool1}\n~{tool3}');
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it('returns empty string when all tool IDs are stale', async () => {
|
|
137
|
+
const mockRegistry = createMockToolInvocationRegistry([]);
|
|
138
|
+
(contribution as unknown as { toolInvocationRegistry: ToolInvocationRegistry }).toolInvocationRegistry = mockRegistry;
|
|
139
|
+
|
|
140
|
+
const context: CapabilityAwareContext = {
|
|
141
|
+
genericCapabilitySelections: {
|
|
142
|
+
functions: ['stale1', 'stale2']
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
const result = await contribution.resolve(
|
|
147
|
+
{ variable: SELECTED_FUNCTIONS_VARIABLE },
|
|
148
|
+
context
|
|
149
|
+
);
|
|
150
|
+
|
|
151
|
+
expect(result?.value).to.equal('');
|
|
152
|
+
});
|
|
153
|
+
|
|
154
|
+
it('returns all tool references when all IDs are valid', async () => {
|
|
155
|
+
const mockRegistry = createMockToolInvocationRegistry(['tool1', 'tool2']);
|
|
156
|
+
(contribution as unknown as { toolInvocationRegistry: ToolInvocationRegistry }).toolInvocationRegistry = mockRegistry;
|
|
157
|
+
|
|
158
|
+
const context: CapabilityAwareContext = {
|
|
159
|
+
genericCapabilitySelections: {
|
|
160
|
+
functions: ['tool1', 'tool2']
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
|
|
164
|
+
const result = await contribution.resolve(
|
|
165
|
+
{ variable: SELECTED_FUNCTIONS_VARIABLE },
|
|
166
|
+
context
|
|
167
|
+
);
|
|
168
|
+
|
|
169
|
+
expect(result?.value).to.equal('~{tool1}\n~{tool2}');
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
it('filters stale MCP function IDs the same way', async () => {
|
|
173
|
+
const mockRegistry = createMockToolInvocationRegistry(['mcp_fetch_fetch']);
|
|
174
|
+
(contribution as unknown as { toolInvocationRegistry: ToolInvocationRegistry }).toolInvocationRegistry = mockRegistry;
|
|
175
|
+
|
|
176
|
+
const context: CapabilityAwareContext = {
|
|
177
|
+
genericCapabilitySelections: {
|
|
178
|
+
mcpFunctions: ['mcp_fetch_fetch', 'mcp_removed_server_tool']
|
|
179
|
+
}
|
|
180
|
+
};
|
|
181
|
+
|
|
182
|
+
const result = await contribution.resolve(
|
|
183
|
+
{ variable: SELECTED_MCP_FUNCTIONS_VARIABLE },
|
|
184
|
+
context
|
|
185
|
+
);
|
|
186
|
+
|
|
187
|
+
expect(result?.value).to.equal('~{mcp_fetch_fetch}');
|
|
188
|
+
});
|
|
189
|
+
});
|
|
190
|
+
|
|
83
191
|
it('returns empty string when no selections exist', async () => {
|
|
84
192
|
const context: CapabilityAwareContext = {};
|
|
85
193
|
|
|
@@ -27,7 +27,8 @@ import {
|
|
|
27
27
|
ResolvedAIVariable,
|
|
28
28
|
CapabilityAwareContext,
|
|
29
29
|
AgentService,
|
|
30
|
-
AgentsVariableContribution
|
|
30
|
+
AgentsVariableContribution,
|
|
31
|
+
ToolInvocationRegistry
|
|
31
32
|
} from '../common';
|
|
32
33
|
import { PromptVariableContribution } from './prompt-variable-contribution';
|
|
33
34
|
import { SkillService } from './skill-service';
|
|
@@ -105,6 +106,9 @@ export class GenericCapabilitiesVariableContribution implements AIVariableContri
|
|
|
105
106
|
@inject(AgentsVariableContribution) @optional()
|
|
106
107
|
protected readonly agentsContribution: AgentsVariableContribution | undefined;
|
|
107
108
|
|
|
109
|
+
@inject(ToolInvocationRegistry) @optional()
|
|
110
|
+
protected readonly toolInvocationRegistry: ToolInvocationRegistry | undefined;
|
|
111
|
+
|
|
108
112
|
@inject(PromptVariableContribution) @optional()
|
|
109
113
|
protected readonly promptContribution: PromptVariableContribution | undefined;
|
|
110
114
|
|
|
@@ -170,12 +174,20 @@ export class GenericCapabilitiesVariableContribution implements AIVariableContri
|
|
|
170
174
|
* The chat request parser will pick these up and add them to the toolRequests map.
|
|
171
175
|
*/
|
|
172
176
|
protected resolveSelectedFunctions(variable: AIVariable, functionIds: string[] | undefined): ResolvedAIVariable {
|
|
173
|
-
if (!functionIds || functionIds.length === 0) {
|
|
177
|
+
if (!functionIds || functionIds.length === 0 || !this.toolInvocationRegistry) {
|
|
178
|
+
return { variable, value: '' };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Filter out stale/orphaned tool IDs that no longer exist in the registry
|
|
182
|
+
const validIds = functionIds
|
|
183
|
+
.filter(id => this.toolInvocationRegistry!.getFunction(id) !== undefined);
|
|
184
|
+
|
|
185
|
+
if (validIds.length === 0) {
|
|
174
186
|
return { variable, value: '' };
|
|
175
187
|
}
|
|
176
188
|
|
|
177
189
|
// Output function references in ~{id} format so the chat parser picks them up
|
|
178
|
-
const functionRefs =
|
|
190
|
+
const functionRefs = validIds.map(id => `~{${id}}`).join('\n');
|
|
179
191
|
return { variable, value: functionRefs };
|
|
180
192
|
}
|
|
181
193
|
|