@ramtinj95/opencode-tokenscope 1.5.2 → 1.6.1
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/README.md +40 -12
- package/dist/tokenscope-lib/analyzer.d.ts +2 -0
- package/dist/tokenscope-lib/analyzer.d.ts.map +1 -1
- package/dist/tokenscope-lib/analyzer.js +73 -70
- package/dist/tokenscope-lib/analyzer.js.map +1 -1
- package/dist/tokenscope-lib/config.d.ts +0 -1
- package/dist/tokenscope-lib/config.d.ts.map +1 -1
- package/dist/tokenscope-lib/config.js +20 -11
- package/dist/tokenscope-lib/config.js.map +1 -1
- package/dist/tokenscope-lib/context.d.ts +4 -1
- package/dist/tokenscope-lib/context.d.ts.map +1 -1
- package/dist/tokenscope-lib/context.js +54 -44
- package/dist/tokenscope-lib/context.js.map +1 -1
- package/dist/tokenscope-lib/cost.d.ts +4 -0
- package/dist/tokenscope-lib/cost.d.ts.map +1 -1
- package/dist/tokenscope-lib/cost.js +43 -8
- package/dist/tokenscope-lib/cost.js.map +1 -1
- package/dist/tokenscope-lib/formatter.d.ts +3 -0
- package/dist/tokenscope-lib/formatter.d.ts.map +1 -1
- package/dist/tokenscope-lib/formatter.js +101 -21
- package/dist/tokenscope-lib/formatter.js.map +1 -1
- package/dist/tokenscope-lib/opencode.d.ts +4 -0
- package/dist/tokenscope-lib/opencode.d.ts.map +1 -0
- package/dist/tokenscope-lib/opencode.js +25 -0
- package/dist/tokenscope-lib/opencode.js.map +1 -0
- package/dist/tokenscope-lib/skill.d.ts +43 -5
- package/dist/tokenscope-lib/skill.d.ts.map +1 -1
- package/dist/tokenscope-lib/skill.js +435 -50
- package/dist/tokenscope-lib/skill.js.map +1 -1
- package/dist/tokenscope-lib/subagent.d.ts +3 -1
- package/dist/tokenscope-lib/subagent.d.ts.map +1 -1
- package/dist/tokenscope-lib/subagent.js +34 -27
- package/dist/tokenscope-lib/subagent.js.map +1 -1
- package/dist/tokenscope-lib/telemetry.d.ts +47 -0
- package/dist/tokenscope-lib/telemetry.d.ts.map +1 -0
- package/dist/tokenscope-lib/telemetry.js +105 -0
- package/dist/tokenscope-lib/telemetry.js.map +1 -0
- package/dist/tokenscope-lib/tokenizer.d.ts +4 -1
- package/dist/tokenscope-lib/tokenizer.d.ts.map +1 -1
- package/dist/tokenscope-lib/tokenizer.js +16 -20
- package/dist/tokenscope-lib/tokenizer.js.map +1 -1
- package/dist/tokenscope-lib/types.d.ts +34 -2
- package/dist/tokenscope-lib/types.d.ts.map +1 -1
- package/dist/tokenscope-lib/types.js.map +1 -1
- package/dist/tokenscope-lib/warnings.d.ts +8 -0
- package/dist/tokenscope-lib/warnings.d.ts.map +1 -0
- package/dist/tokenscope-lib/warnings.js +31 -0
- package/dist/tokenscope-lib/warnings.js.map +1 -0
- package/dist/tokenscope.d.ts.map +1 -1
- package/dist/tokenscope.js +135 -57
- package/dist/tokenscope.js.map +1 -1
- package/models.json +30922 -232
- package/package.json +1 -1
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
// SkillAnalyzer - analyzes skill usage and token consumption
|
|
2
|
+
import { pathToFileURL } from "url";
|
|
2
3
|
import { isToolPart } from "./types";
|
|
4
|
+
import { formatErrorMessage } from "./warnings";
|
|
3
5
|
export class SkillAnalyzer {
|
|
4
6
|
client;
|
|
5
7
|
tokenizerManager;
|
|
6
|
-
|
|
8
|
+
serverUrl;
|
|
9
|
+
directory;
|
|
10
|
+
warnings;
|
|
11
|
+
constructor(client, tokenizerManager, serverUrl, directory, warnings) {
|
|
7
12
|
this.client = client;
|
|
8
13
|
this.tokenizerManager = tokenizerManager;
|
|
14
|
+
this.serverUrl = serverUrl;
|
|
15
|
+
this.directory = directory;
|
|
16
|
+
this.warnings = warnings;
|
|
9
17
|
}
|
|
10
18
|
/**
|
|
11
19
|
* Main entry point - analyzes skill usage in a session
|
|
@@ -16,36 +24,47 @@ export class SkillAnalyzer {
|
|
|
16
24
|
}
|
|
17
25
|
const result = {
|
|
18
26
|
availableSkills: [],
|
|
27
|
+
availableSubagents: [],
|
|
19
28
|
loadedSkills: [],
|
|
20
29
|
totalAvailableTokens: 0,
|
|
30
|
+
totalAvailableSubagentTokens: 0,
|
|
21
31
|
totalLoadedTokens: 0,
|
|
32
|
+
availableSkillsContextTokens: 0,
|
|
22
33
|
skillToolDescriptionTokens: 0,
|
|
34
|
+
taskToolDescriptionTokens: 0,
|
|
23
35
|
};
|
|
24
36
|
try {
|
|
25
|
-
|
|
26
|
-
const
|
|
37
|
+
const tools = await this.listTools(providerID, modelID);
|
|
38
|
+
const [agents, skills] = await Promise.all([this.fetchAgents(), this.fetchSkills()]);
|
|
39
|
+
const currentAgent = this.resolveCurrentAgent(messages, agents);
|
|
40
|
+
const accessibleSkills = this.filterAccessibleSkills(skills, currentAgent);
|
|
41
|
+
const accessibleSubagents = this.filterAccessibleSubagents(agents, currentAgent);
|
|
42
|
+
// 1. Get available skills from current OpenCode catalogs / tool metadata
|
|
43
|
+
const availableResult = await this.getAvailableSkills(tools, accessibleSkills, tokenModel);
|
|
27
44
|
result.availableSkills = availableResult.skills;
|
|
28
45
|
result.totalAvailableTokens = availableResult.totalTokens;
|
|
46
|
+
result.availableSkillsContextTokens = availableResult.contextTokens;
|
|
29
47
|
result.skillToolDescriptionTokens = availableResult.descriptionTokens;
|
|
30
|
-
// 2. Get
|
|
48
|
+
// 2. Get available subagents from current OpenCode catalogs / task tool description
|
|
49
|
+
const subagentResult = await this.getAvailableSubagents(tools, accessibleSubagents, tokenModel);
|
|
50
|
+
result.availableSubagents = subagentResult.subagents;
|
|
51
|
+
result.totalAvailableSubagentTokens = subagentResult.totalTokens;
|
|
52
|
+
result.taskToolDescriptionTokens = subagentResult.descriptionTokens;
|
|
53
|
+
// 3. Get loaded skills from session messages
|
|
31
54
|
const loadedResult = await this.getLoadedSkills(messages, tokenModel);
|
|
32
55
|
result.loadedSkills = loadedResult.skills;
|
|
33
56
|
result.totalLoadedTokens = loadedResult.totalTokens;
|
|
34
57
|
}
|
|
35
58
|
catch (error) {
|
|
36
|
-
|
|
59
|
+
this.warnings?.add(`Skill analysis was skipped: ${formatErrorMessage(error)}`, "skill-analysis");
|
|
37
60
|
}
|
|
38
61
|
return result;
|
|
39
62
|
}
|
|
40
63
|
/**
|
|
41
|
-
* Fetch
|
|
64
|
+
* Fetch current tool definitions for the provider/model
|
|
42
65
|
*/
|
|
43
|
-
async
|
|
44
|
-
const skills = [];
|
|
45
|
-
let totalTokens = 0;
|
|
46
|
-
let descriptionTokens = 0;
|
|
66
|
+
async listTools(providerID, modelID) {
|
|
47
67
|
try {
|
|
48
|
-
// Call the experimental tool list API
|
|
49
68
|
const response = await this.client.tool.list({
|
|
50
69
|
query: {
|
|
51
70
|
provider: providerID,
|
|
@@ -53,20 +72,49 @@ export class SkillAnalyzer {
|
|
|
53
72
|
},
|
|
54
73
|
});
|
|
55
74
|
const tools = response?.data ?? response ?? [];
|
|
56
|
-
|
|
75
|
+
return Array.isArray(tools) ? tools : [];
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
this.warnings?.add(`Could not fetch tool metadata for ${providerID}/${modelID}. Skill and subagent catalog sections were skipped: ${formatErrorMessage(error)}`, `tool-list:${providerID}:${modelID}`);
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Fetch available skills from current OpenCode APIs when possible.
|
|
84
|
+
* Falls back to parsing the tool description for older versions.
|
|
85
|
+
*/
|
|
86
|
+
async getAvailableSkills(tools, availableSkills, tokenModel) {
|
|
87
|
+
const skills = [];
|
|
88
|
+
let totalTokens = 0;
|
|
89
|
+
let contextTokens = 0;
|
|
90
|
+
let descriptionTokens = 0;
|
|
91
|
+
try {
|
|
92
|
+
if (availableSkills) {
|
|
93
|
+
const sortedSkills = [...availableSkills].sort((a, b) => a.name.localeCompare(b.name));
|
|
94
|
+
const skillToolDescription = this.buildSkillToolDescription(sortedSkills);
|
|
95
|
+
descriptionTokens = await this.tokenizerManager.countTokens(skillToolDescription, tokenModel);
|
|
96
|
+
const systemPromptCatalog = this.buildSkillSystemPrompt(sortedSkills);
|
|
97
|
+
contextTokens = await this.tokenizerManager.countTokens(systemPromptCatalog, tokenModel);
|
|
98
|
+
for (const skill of sortedSkills) {
|
|
99
|
+
const entry = this.buildVerboseSkillEntry(skill);
|
|
100
|
+
const tokens = await this.tokenizerManager.countTokens(entry, tokenModel);
|
|
101
|
+
skills.push({
|
|
102
|
+
name: skill.name,
|
|
103
|
+
description: skill.description,
|
|
104
|
+
tokens,
|
|
105
|
+
});
|
|
106
|
+
totalTokens += tokens;
|
|
107
|
+
}
|
|
108
|
+
return { skills, totalTokens, contextTokens, descriptionTokens };
|
|
109
|
+
}
|
|
57
110
|
const skillTool = tools.find((t) => t.id === "skill");
|
|
58
|
-
if (!skillTool
|
|
59
|
-
return { skills, totalTokens, descriptionTokens };
|
|
111
|
+
if (!skillTool?.description) {
|
|
112
|
+
return { skills, totalTokens, contextTokens, descriptionTokens };
|
|
60
113
|
}
|
|
61
|
-
// Tokenize the full skill tool description
|
|
62
114
|
descriptionTokens = await this.tokenizerManager.countTokens(skillTool.description, tokenModel);
|
|
63
|
-
|
|
64
|
-
const parsedSkills = this.parseAvailableSkillsXml(skillTool.description);
|
|
65
|
-
// Tokenize each skill's contribution
|
|
115
|
+
const parsedSkills = this.parseAvailableSkills(skillTool.description);
|
|
66
116
|
for (const skill of parsedSkills) {
|
|
67
|
-
|
|
68
|
-
const skillXml = ` <skill> <name>${skill.name}</name> <description>${skill.description}</description> </skill>`;
|
|
69
|
-
const tokens = await this.tokenizerManager.countTokens(skillXml, tokenModel);
|
|
117
|
+
const tokens = await this.tokenizerManager.countTokens(skill.rawText, tokenModel);
|
|
70
118
|
skills.push({
|
|
71
119
|
name: skill.name,
|
|
72
120
|
description: skill.description,
|
|
@@ -76,42 +124,211 @@ export class SkillAnalyzer {
|
|
|
76
124
|
}
|
|
77
125
|
}
|
|
78
126
|
catch (error) {
|
|
79
|
-
|
|
127
|
+
this.warnings?.add(`Available skill estimates were skipped: ${formatErrorMessage(error)}`, "available-skills");
|
|
128
|
+
}
|
|
129
|
+
return { skills, totalTokens, contextTokens, descriptionTokens };
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Fetch available subagents from current OpenCode APIs when possible.
|
|
133
|
+
* Falls back to parsing the task tool description for older versions.
|
|
134
|
+
*/
|
|
135
|
+
async getAvailableSubagents(tools, availableSubagents, tokenModel) {
|
|
136
|
+
const subagents = [];
|
|
137
|
+
let totalTokens = 0;
|
|
138
|
+
let descriptionTokens = 0;
|
|
139
|
+
try {
|
|
140
|
+
const taskTool = tools.find((t) => t.id === "task");
|
|
141
|
+
if (availableSubagents) {
|
|
142
|
+
const sortedSubagents = [...availableSubagents].sort((a, b) => a.name.localeCompare(b.name));
|
|
143
|
+
if (taskTool?.description) {
|
|
144
|
+
const filteredDescription = this.buildFilteredTaskDescription(taskTool.description, sortedSubagents);
|
|
145
|
+
descriptionTokens = await this.tokenizerManager.countTokens(filteredDescription, tokenModel);
|
|
146
|
+
}
|
|
147
|
+
for (const subagent of sortedSubagents) {
|
|
148
|
+
const rawText = this.buildSubagentBullet(subagent);
|
|
149
|
+
const tokens = await this.tokenizerManager.countTokens(rawText, tokenModel);
|
|
150
|
+
subagents.push({
|
|
151
|
+
name: subagent.name,
|
|
152
|
+
description: this.getSubagentDescription(subagent),
|
|
153
|
+
tokens,
|
|
154
|
+
});
|
|
155
|
+
totalTokens += tokens;
|
|
156
|
+
}
|
|
157
|
+
return { subagents, totalTokens, descriptionTokens };
|
|
158
|
+
}
|
|
159
|
+
if (!taskTool?.description) {
|
|
160
|
+
return { subagents, totalTokens, descriptionTokens };
|
|
161
|
+
}
|
|
162
|
+
descriptionTokens = await this.tokenizerManager.countTokens(taskTool.description, tokenModel);
|
|
163
|
+
const parsedSubagents = this.parseAvailableSubagents(taskTool.description);
|
|
164
|
+
for (const subagent of parsedSubagents) {
|
|
165
|
+
const tokens = await this.tokenizerManager.countTokens(subagent.rawText, tokenModel);
|
|
166
|
+
subagents.push({
|
|
167
|
+
name: subagent.name,
|
|
168
|
+
description: subagent.description,
|
|
169
|
+
tokens,
|
|
170
|
+
});
|
|
171
|
+
totalTokens += tokens;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
this.warnings?.add(`Available subagent estimates were skipped: ${formatErrorMessage(error)}`, "available-subagents");
|
|
176
|
+
}
|
|
177
|
+
return { subagents, totalTokens, descriptionTokens };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Parse available subagents from the task tool description.
|
|
181
|
+
*/
|
|
182
|
+
parseAvailableSubagents(description) {
|
|
183
|
+
const subagents = [];
|
|
184
|
+
const lines = description.split(/\r?\n/);
|
|
185
|
+
const startIndex = lines.findIndex((line) => /available agent types/i.test(line));
|
|
186
|
+
if (startIndex === -1) {
|
|
187
|
+
return subagents;
|
|
188
|
+
}
|
|
189
|
+
let parsedAnyEntries = false;
|
|
190
|
+
let sawBlankAfterEntries = false;
|
|
191
|
+
for (let i = startIndex + 1; i < lines.length; i++) {
|
|
192
|
+
const trimmed = lines[i].trim();
|
|
193
|
+
if (this.isSubagentSectionBoundary(trimmed)) {
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
if (trimmed.length === 0) {
|
|
197
|
+
if (parsedAnyEntries) {
|
|
198
|
+
sawBlankAfterEntries = true;
|
|
199
|
+
}
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (!trimmed.startsWith("- ")) {
|
|
203
|
+
if (parsedAnyEntries) {
|
|
204
|
+
break;
|
|
205
|
+
}
|
|
206
|
+
continue;
|
|
207
|
+
}
|
|
208
|
+
if (sawBlankAfterEntries) {
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
const content = trimmed.slice(2).trim();
|
|
212
|
+
const firstColon = content.indexOf(":");
|
|
213
|
+
if (firstColon <= 0) {
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
const name = content.slice(0, firstColon).trim();
|
|
217
|
+
const rawDescription = content.slice(firstColon + 1).trim();
|
|
218
|
+
if (!name || !rawDescription) {
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (!this.isLikelyIdentifier(name)) {
|
|
222
|
+
continue;
|
|
223
|
+
}
|
|
224
|
+
subagents.push({
|
|
225
|
+
name,
|
|
226
|
+
description: rawDescription.replace(/\s+/g, " ").trim(),
|
|
227
|
+
rawText: `- ${name}: ${rawDescription}`,
|
|
228
|
+
});
|
|
229
|
+
parsedAnyEntries = true;
|
|
80
230
|
}
|
|
81
|
-
return
|
|
231
|
+
return subagents;
|
|
82
232
|
}
|
|
83
233
|
/**
|
|
84
|
-
* Parse the
|
|
234
|
+
* Parse the available skills list from both current markdown and legacy XML formats.
|
|
85
235
|
*/
|
|
236
|
+
parseAvailableSkills(description) {
|
|
237
|
+
const xmlSkills = this.parseAvailableSkillsXml(description);
|
|
238
|
+
if (xmlSkills.length > 0) {
|
|
239
|
+
return xmlSkills;
|
|
240
|
+
}
|
|
241
|
+
return this.parseAvailableSkillsMarkdown(description);
|
|
242
|
+
}
|
|
86
243
|
parseAvailableSkillsXml(description) {
|
|
87
244
|
const skills = [];
|
|
88
|
-
// Find the <available_skills> section
|
|
89
245
|
const availableSkillsMatch = description.match(/<available_skills>([\s\S]*?)<\/available_skills>/i);
|
|
90
246
|
if (!availableSkillsMatch) {
|
|
91
247
|
return skills;
|
|
92
248
|
}
|
|
93
249
|
const xmlContent = availableSkillsMatch[1];
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
250
|
+
const skillBlockRegex = /<skill>([\s\S]*?)<\/skill>/gi;
|
|
251
|
+
let blockMatch;
|
|
252
|
+
while ((blockMatch = skillBlockRegex.exec(xmlContent)) !== null) {
|
|
253
|
+
const block = blockMatch[0];
|
|
254
|
+
const body = blockMatch[1];
|
|
255
|
+
const nameMatch = body.match(/<name>([\s\S]*?)<\/name>/i);
|
|
256
|
+
const descriptionMatch = body.match(/<description>([\s\S]*?)<\/description>/i);
|
|
257
|
+
const name = nameMatch?.[1]?.trim() ?? "";
|
|
258
|
+
const skillDescription = descriptionMatch?.[1]?.trim() ?? "";
|
|
259
|
+
if (!name || !skillDescription) {
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
98
262
|
skills.push({
|
|
99
|
-
name
|
|
100
|
-
description:
|
|
263
|
+
name,
|
|
264
|
+
description: skillDescription,
|
|
265
|
+
rawText: block,
|
|
101
266
|
});
|
|
102
267
|
}
|
|
103
268
|
return skills;
|
|
104
269
|
}
|
|
270
|
+
parseAvailableSkillsMarkdown(description) {
|
|
271
|
+
const skills = [];
|
|
272
|
+
const lines = description.split(/\r?\n/);
|
|
273
|
+
const startIndex = lines.findIndex((line) => /^##\s+available skills\s*$/i.test(line.trim()));
|
|
274
|
+
if (startIndex === -1) {
|
|
275
|
+
return skills;
|
|
276
|
+
}
|
|
277
|
+
let parsedAnyEntries = false;
|
|
278
|
+
for (let i = startIndex + 1; i < lines.length; i++) {
|
|
279
|
+
const trimmed = lines[i].trim();
|
|
280
|
+
if (!trimmed) {
|
|
281
|
+
if (parsedAnyEntries) {
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
continue;
|
|
285
|
+
}
|
|
286
|
+
if (/^#{1,6}\s/.test(trimmed)) {
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
const match = trimmed.match(/^-\s+\*\*([^*]+)\*\*:\s*(.+)$/) ?? trimmed.match(/^-\s+([^:]+):\s*(.+)$/);
|
|
290
|
+
if (!match) {
|
|
291
|
+
if (parsedAnyEntries) {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
continue;
|
|
295
|
+
}
|
|
296
|
+
const name = match[1]?.trim() ?? "";
|
|
297
|
+
const skillDescription = match[2]?.trim() ?? "";
|
|
298
|
+
if (!name || !skillDescription || !this.isLikelyIdentifier(name)) {
|
|
299
|
+
continue;
|
|
300
|
+
}
|
|
301
|
+
skills.push({
|
|
302
|
+
name,
|
|
303
|
+
description: skillDescription.replace(/\s+/g, " ").trim(),
|
|
304
|
+
rawText: trimmed,
|
|
305
|
+
});
|
|
306
|
+
parsedAnyEntries = true;
|
|
307
|
+
}
|
|
308
|
+
return skills;
|
|
309
|
+
}
|
|
310
|
+
isLikelyIdentifier(name) {
|
|
311
|
+
return /^[A-Za-z0-9][A-Za-z0-9._-]{0,80}$/.test(name);
|
|
312
|
+
}
|
|
313
|
+
isSubagentSectionBoundary(line) {
|
|
314
|
+
if (!line) {
|
|
315
|
+
return false;
|
|
316
|
+
}
|
|
317
|
+
return (/^#{1,6}\s/.test(line) ||
|
|
318
|
+
/^<example>/i.test(line) ||
|
|
319
|
+
/^when\s+using\s+the\s+task\s+tool/i.test(line) ||
|
|
320
|
+
/^when\s+to\s+use\s+the\s+task\s+tool/i.test(line) ||
|
|
321
|
+
/^usage\s+notes:/i.test(line) ||
|
|
322
|
+
/^examples?:/i.test(line));
|
|
323
|
+
}
|
|
105
324
|
/**
|
|
106
|
-
* Collect loaded skills from session messages with call count tracking
|
|
325
|
+
* Collect loaded skills from session messages with call count tracking.
|
|
107
326
|
*/
|
|
108
327
|
async getLoadedSkills(messages, tokenModel) {
|
|
109
|
-
// Track skills by name to aggregate call counts
|
|
110
328
|
const skillMap = new Map();
|
|
111
329
|
let totalTokens = 0;
|
|
112
330
|
let messageIndex = 0;
|
|
113
331
|
for (const message of messages) {
|
|
114
|
-
// Track message index for user/assistant messages
|
|
115
332
|
if (message.info.role === "user" || message.info.role === "assistant") {
|
|
116
333
|
messageIndex++;
|
|
117
334
|
}
|
|
@@ -122,22 +339,17 @@ export class SkillAnalyzer {
|
|
|
122
339
|
continue;
|
|
123
340
|
if (part.state.status !== "completed")
|
|
124
341
|
continue;
|
|
125
|
-
// Extract skill name from input or metadata
|
|
126
342
|
const skillName = this.extractSkillName(part.state);
|
|
127
343
|
if (!skillName)
|
|
128
344
|
continue;
|
|
129
|
-
// Get the output content
|
|
130
345
|
const content = (part.state.output ?? "").toString().trim();
|
|
131
346
|
if (!content)
|
|
132
347
|
continue;
|
|
133
|
-
// Check if we've seen this skill before
|
|
134
348
|
const existing = skillMap.get(skillName);
|
|
135
349
|
if (existing) {
|
|
136
|
-
// Increment call count for existing skill
|
|
137
350
|
existing.callCount++;
|
|
138
351
|
}
|
|
139
352
|
else {
|
|
140
|
-
// Tokenize the loaded content (only once per unique skill)
|
|
141
353
|
const tokens = await this.tokenizerManager.countTokens(content, tokenModel);
|
|
142
354
|
skillMap.set(skillName, {
|
|
143
355
|
name: skillName,
|
|
@@ -149,12 +361,6 @@ export class SkillAnalyzer {
|
|
|
149
361
|
}
|
|
150
362
|
}
|
|
151
363
|
}
|
|
152
|
-
// Convert map to array and calculate totals
|
|
153
|
-
// Note: We multiply tokens by callCount because OpenCode does NOT deduplicate
|
|
154
|
-
// skill content. Each call to the skill tool adds the full content to context
|
|
155
|
-
// as a new tool result. See OpenCode source:
|
|
156
|
-
// - Skill tool execution: https://github.com/sst/opencode/blob/main/packages/opencode/src/tool/skill.ts
|
|
157
|
-
// - Tool result handling: https://github.com/sst/opencode/blob/main/packages/opencode/src/session/message-v2.ts
|
|
158
364
|
const skills = [];
|
|
159
365
|
for (const [, skillData] of skillMap) {
|
|
160
366
|
const totalSkillTokens = skillData.tokens * skillData.callCount;
|
|
@@ -168,23 +374,19 @@ export class SkillAnalyzer {
|
|
|
168
374
|
});
|
|
169
375
|
totalTokens += totalSkillTokens;
|
|
170
376
|
}
|
|
171
|
-
// Sort by total tokens descending
|
|
172
377
|
skills.sort((a, b) => b.totalTokens - a.totalTokens);
|
|
173
378
|
return { skills, totalTokens };
|
|
174
379
|
}
|
|
175
380
|
/**
|
|
176
|
-
* Extract skill name from tool state
|
|
381
|
+
* Extract skill name from tool state.
|
|
177
382
|
*/
|
|
178
383
|
extractSkillName(state) {
|
|
179
|
-
// Try input.name first
|
|
180
384
|
if (state.input && typeof state.input === "object" && state.input.name) {
|
|
181
385
|
return String(state.input.name);
|
|
182
386
|
}
|
|
183
|
-
// Try metadata.name
|
|
184
387
|
if (state.metadata && typeof state.metadata === "object" && state.metadata.name) {
|
|
185
388
|
return String(state.metadata.name);
|
|
186
389
|
}
|
|
187
|
-
// Try parsing from title "Loaded skill: {name}"
|
|
188
390
|
if (state.title && typeof state.title === "string") {
|
|
189
391
|
const match = state.title.match(/Loaded skill:\s*(.+)/i);
|
|
190
392
|
if (match) {
|
|
@@ -193,5 +395,188 @@ export class SkillAnalyzer {
|
|
|
193
395
|
}
|
|
194
396
|
return undefined;
|
|
195
397
|
}
|
|
398
|
+
resolveCurrentAgent(messages, agents) {
|
|
399
|
+
if (!agents || agents.length === 0) {
|
|
400
|
+
return undefined;
|
|
401
|
+
}
|
|
402
|
+
const agentName = [...messages]
|
|
403
|
+
.reverse()
|
|
404
|
+
.map((message) => message.info.agent)
|
|
405
|
+
.find((value) => typeof value === "string" && value.trim().length > 0);
|
|
406
|
+
if (!agentName) {
|
|
407
|
+
return undefined;
|
|
408
|
+
}
|
|
409
|
+
return agents.find((agent) => agent.name === agentName);
|
|
410
|
+
}
|
|
411
|
+
filterAccessibleSkills(skills, currentAgent) {
|
|
412
|
+
if (!skills) {
|
|
413
|
+
return undefined;
|
|
414
|
+
}
|
|
415
|
+
const rules = this.getPermissionRules(currentAgent?.permission);
|
|
416
|
+
const filtered = rules
|
|
417
|
+
? skills.filter((skill) => this.evaluatePermission("skill", skill.name, rules).action !== "deny")
|
|
418
|
+
: skills;
|
|
419
|
+
return [...filtered].sort((a, b) => a.name.localeCompare(b.name));
|
|
420
|
+
}
|
|
421
|
+
filterAccessibleSubagents(agents, currentAgent) {
|
|
422
|
+
if (!agents) {
|
|
423
|
+
return undefined;
|
|
424
|
+
}
|
|
425
|
+
const rules = this.getPermissionRules(currentAgent?.permission);
|
|
426
|
+
const subagents = agents.filter((agent) => agent.mode !== "primary");
|
|
427
|
+
const filtered = rules
|
|
428
|
+
? subagents.filter((agent) => this.evaluatePermission("task", agent.name, rules).action !== "deny")
|
|
429
|
+
: subagents;
|
|
430
|
+
return [...filtered].sort((a, b) => a.name.localeCompare(b.name));
|
|
431
|
+
}
|
|
432
|
+
getPermissionRules(value) {
|
|
433
|
+
if (!Array.isArray(value)) {
|
|
434
|
+
return undefined;
|
|
435
|
+
}
|
|
436
|
+
const rules = value.filter((item) => !!item &&
|
|
437
|
+
typeof item === "object" &&
|
|
438
|
+
typeof item.permission === "string" &&
|
|
439
|
+
typeof item.pattern === "string" &&
|
|
440
|
+
typeof item.action === "string");
|
|
441
|
+
return rules.length > 0 ? rules : undefined;
|
|
442
|
+
}
|
|
443
|
+
evaluatePermission(permission, pattern, ruleset) {
|
|
444
|
+
const match = [...ruleset]
|
|
445
|
+
.reverse()
|
|
446
|
+
.find((rule) => this.matchesWildcard(permission, rule.permission) && this.matchesWildcard(pattern, rule.pattern));
|
|
447
|
+
return match ?? { permission, pattern: "*", action: "ask" };
|
|
448
|
+
}
|
|
449
|
+
matchesWildcard(value, pattern) {
|
|
450
|
+
const normalizedValue = value.replaceAll("\\", "/");
|
|
451
|
+
const normalizedPattern = pattern.replaceAll("\\", "/");
|
|
452
|
+
let escaped = normalizedPattern
|
|
453
|
+
.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
454
|
+
.replace(/\*/g, ".*")
|
|
455
|
+
.replace(/\?/g, ".");
|
|
456
|
+
if (escaped.endsWith(" .*")) {
|
|
457
|
+
escaped = escaped.slice(0, -3) + "( .*)?";
|
|
458
|
+
}
|
|
459
|
+
const flags = process.platform === "win32" ? "si" : "s";
|
|
460
|
+
return new RegExp("^" + escaped + "$", flags).test(normalizedValue);
|
|
461
|
+
}
|
|
462
|
+
buildVerboseSkillEntry(skill) {
|
|
463
|
+
const lines = [
|
|
464
|
+
" <skill>",
|
|
465
|
+
` <name>${skill.name}</name>`,
|
|
466
|
+
` <description>${skill.description}</description>`,
|
|
467
|
+
];
|
|
468
|
+
if (skill.location) {
|
|
469
|
+
lines.push(` <location>${pathToFileURL(skill.location).href}</location>`);
|
|
470
|
+
}
|
|
471
|
+
lines.push(" </skill>");
|
|
472
|
+
return lines.join("\n");
|
|
473
|
+
}
|
|
474
|
+
buildSkillSystemPrompt(skills) {
|
|
475
|
+
return [
|
|
476
|
+
"Skills provide specialized instructions and workflows for specific tasks.",
|
|
477
|
+
"Use the skill tool to load a skill when a task matches its description.",
|
|
478
|
+
skills.length > 0 ? this.buildVerboseSkillCatalog(skills) : "No skills are currently available.",
|
|
479
|
+
].join("\n");
|
|
480
|
+
}
|
|
481
|
+
buildVerboseSkillCatalog(skills) {
|
|
482
|
+
return ["<available_skills>", ...skills.map((skill) => this.buildVerboseSkillEntry(skill)), "</available_skills>"].join("\n");
|
|
483
|
+
}
|
|
484
|
+
buildSkillToolDescription(skills) {
|
|
485
|
+
if (skills.length === 0) {
|
|
486
|
+
return "Load a specialized skill that provides domain-specific instructions and workflows. No skills are currently available.";
|
|
487
|
+
}
|
|
488
|
+
return [
|
|
489
|
+
"Load a specialized skill that provides domain-specific instructions and workflows.",
|
|
490
|
+
"",
|
|
491
|
+
"When you recognize that a task matches one of the available skills listed below, use this tool to load the full skill instructions.",
|
|
492
|
+
"",
|
|
493
|
+
"The skill will inject detailed instructions, workflows, and access to bundled resources (scripts, references, templates) into the conversation context.",
|
|
494
|
+
"",
|
|
495
|
+
'Tool output includes a `<skill_content name="...">` block with the loaded content.',
|
|
496
|
+
"",
|
|
497
|
+
"The following skills provide specialized sets of instructions for particular tasks",
|
|
498
|
+
"Invoke this tool to load a skill when a task matches one of the available skills listed below:",
|
|
499
|
+
"",
|
|
500
|
+
[
|
|
501
|
+
"## Available Skills",
|
|
502
|
+
...skills.map((skill) => `- **${skill.name}**: ${skill.description}`),
|
|
503
|
+
].join("\n"),
|
|
504
|
+
].join("\n");
|
|
505
|
+
}
|
|
506
|
+
buildSubagentBullet(agent) {
|
|
507
|
+
return `- ${agent.name}: ${this.getSubagentDescription(agent)}`;
|
|
508
|
+
}
|
|
509
|
+
getSubagentDescription(agent) {
|
|
510
|
+
return agent.description ?? "This subagent should only be called manually by the user.";
|
|
511
|
+
}
|
|
512
|
+
buildFilteredTaskDescription(description, agents) {
|
|
513
|
+
const lines = description.split(/\r?\n/);
|
|
514
|
+
const headerIndex = lines.findIndex((line) => /available agent types/i.test(line));
|
|
515
|
+
const nextSectionIndex = lines.findIndex((line, index) => index > headerIndex && /^When using the Task tool:/i.test(line.trim()));
|
|
516
|
+
if (headerIndex === -1 || nextSectionIndex === -1) {
|
|
517
|
+
return description;
|
|
518
|
+
}
|
|
519
|
+
return [
|
|
520
|
+
...lines.slice(0, headerIndex + 1),
|
|
521
|
+
...agents.map((agent) => this.buildSubagentBullet(agent)),
|
|
522
|
+
"",
|
|
523
|
+
...lines.slice(nextSectionIndex),
|
|
524
|
+
].join("\n");
|
|
525
|
+
}
|
|
526
|
+
async fetchAgents() {
|
|
527
|
+
try {
|
|
528
|
+
const agents = await this.fetchInternalJson("agent");
|
|
529
|
+
if (Array.isArray(agents)) {
|
|
530
|
+
return agents;
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
catch { }
|
|
534
|
+
try {
|
|
535
|
+
const appAgents = this.client?.app?.agents;
|
|
536
|
+
if (typeof appAgents === "function") {
|
|
537
|
+
const response = await appAgents.call(this.client.app);
|
|
538
|
+
const agents = response?.data ?? response;
|
|
539
|
+
if (Array.isArray(agents)) {
|
|
540
|
+
return agents;
|
|
541
|
+
}
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
catch { }
|
|
545
|
+
return undefined;
|
|
546
|
+
}
|
|
547
|
+
async fetchSkills() {
|
|
548
|
+
try {
|
|
549
|
+
const skills = await this.fetchInternalJson("skill");
|
|
550
|
+
if (Array.isArray(skills)) {
|
|
551
|
+
return skills;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
catch { }
|
|
555
|
+
try {
|
|
556
|
+
const appSkills = this.client?.app?.skills;
|
|
557
|
+
if (typeof appSkills === "function") {
|
|
558
|
+
const response = await appSkills.call(this.client.app);
|
|
559
|
+
const skills = response?.data ?? response;
|
|
560
|
+
if (Array.isArray(skills)) {
|
|
561
|
+
return skills;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
catch { }
|
|
566
|
+
return undefined;
|
|
567
|
+
}
|
|
568
|
+
async fetchInternalJson(pathname) {
|
|
569
|
+
const base = new URL(this.serverUrl);
|
|
570
|
+
if (!base.pathname.endsWith("/")) {
|
|
571
|
+
base.pathname += "/";
|
|
572
|
+
}
|
|
573
|
+
const url = new URL(pathname.replace(/^\//, ""), base);
|
|
574
|
+
url.searchParams.set("directory", this.directory);
|
|
575
|
+
const response = await fetch(url);
|
|
576
|
+
if (!response.ok) {
|
|
577
|
+
throw new Error(`Request failed (${response.status} ${response.statusText})`);
|
|
578
|
+
}
|
|
579
|
+
return (await response.json());
|
|
580
|
+
}
|
|
196
581
|
}
|
|
197
582
|
//# sourceMappingURL=skill.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../tokenscope-lib/skill.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../tokenscope-lib/skill.ts"],"names":[],"mappings":"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"}
|