@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.
Files changed (53) hide show
  1. package/README.md +40 -12
  2. package/dist/tokenscope-lib/analyzer.d.ts +2 -0
  3. package/dist/tokenscope-lib/analyzer.d.ts.map +1 -1
  4. package/dist/tokenscope-lib/analyzer.js +73 -70
  5. package/dist/tokenscope-lib/analyzer.js.map +1 -1
  6. package/dist/tokenscope-lib/config.d.ts +0 -1
  7. package/dist/tokenscope-lib/config.d.ts.map +1 -1
  8. package/dist/tokenscope-lib/config.js +20 -11
  9. package/dist/tokenscope-lib/config.js.map +1 -1
  10. package/dist/tokenscope-lib/context.d.ts +4 -1
  11. package/dist/tokenscope-lib/context.d.ts.map +1 -1
  12. package/dist/tokenscope-lib/context.js +54 -44
  13. package/dist/tokenscope-lib/context.js.map +1 -1
  14. package/dist/tokenscope-lib/cost.d.ts +4 -0
  15. package/dist/tokenscope-lib/cost.d.ts.map +1 -1
  16. package/dist/tokenscope-lib/cost.js +43 -8
  17. package/dist/tokenscope-lib/cost.js.map +1 -1
  18. package/dist/tokenscope-lib/formatter.d.ts +3 -0
  19. package/dist/tokenscope-lib/formatter.d.ts.map +1 -1
  20. package/dist/tokenscope-lib/formatter.js +101 -21
  21. package/dist/tokenscope-lib/formatter.js.map +1 -1
  22. package/dist/tokenscope-lib/opencode.d.ts +4 -0
  23. package/dist/tokenscope-lib/opencode.d.ts.map +1 -0
  24. package/dist/tokenscope-lib/opencode.js +25 -0
  25. package/dist/tokenscope-lib/opencode.js.map +1 -0
  26. package/dist/tokenscope-lib/skill.d.ts +43 -5
  27. package/dist/tokenscope-lib/skill.d.ts.map +1 -1
  28. package/dist/tokenscope-lib/skill.js +435 -50
  29. package/dist/tokenscope-lib/skill.js.map +1 -1
  30. package/dist/tokenscope-lib/subagent.d.ts +3 -1
  31. package/dist/tokenscope-lib/subagent.d.ts.map +1 -1
  32. package/dist/tokenscope-lib/subagent.js +34 -27
  33. package/dist/tokenscope-lib/subagent.js.map +1 -1
  34. package/dist/tokenscope-lib/telemetry.d.ts +47 -0
  35. package/dist/tokenscope-lib/telemetry.d.ts.map +1 -0
  36. package/dist/tokenscope-lib/telemetry.js +105 -0
  37. package/dist/tokenscope-lib/telemetry.js.map +1 -0
  38. package/dist/tokenscope-lib/tokenizer.d.ts +4 -1
  39. package/dist/tokenscope-lib/tokenizer.d.ts.map +1 -1
  40. package/dist/tokenscope-lib/tokenizer.js +16 -20
  41. package/dist/tokenscope-lib/tokenizer.js.map +1 -1
  42. package/dist/tokenscope-lib/types.d.ts +34 -2
  43. package/dist/tokenscope-lib/types.d.ts.map +1 -1
  44. package/dist/tokenscope-lib/types.js.map +1 -1
  45. package/dist/tokenscope-lib/warnings.d.ts +8 -0
  46. package/dist/tokenscope-lib/warnings.d.ts.map +1 -0
  47. package/dist/tokenscope-lib/warnings.js +31 -0
  48. package/dist/tokenscope-lib/warnings.js.map +1 -0
  49. package/dist/tokenscope.d.ts.map +1 -1
  50. package/dist/tokenscope.js +135 -57
  51. package/dist/tokenscope.js.map +1 -1
  52. package/models.json +30922 -232
  53. 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
- constructor(client, tokenizerManager) {
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
- // 1. Get available skills from tool.list() API
26
- const availableResult = await this.getAvailableSkills(providerID, modelID, tokenModel);
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 loaded skills from session messages
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
- console.error("Skill analysis failed:", error);
59
+ this.warnings?.add(`Skill analysis was skipped: ${formatErrorMessage(error)}`, "skill-analysis");
37
60
  }
38
61
  return result;
39
62
  }
40
63
  /**
41
- * Fetch available skills from the tool.list() API and parse them
64
+ * Fetch current tool definitions for the provider/model
42
65
  */
43
- async getAvailableSkills(providerID, modelID, tokenModel) {
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
- // Find the skill tool
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 || !skillTool.description) {
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
- // Parse the <available_skills> XML from the description
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
- // Reconstruct the XML for this skill to get accurate token count
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
- console.error("Failed to fetch available skills:", error);
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 { skills, totalTokens, descriptionTokens };
231
+ return subagents;
82
232
  }
83
233
  /**
84
- * Parse the <available_skills> XML from skill tool description
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
- // Parse each <skill> entry
95
- const skillRegex = /<skill>\s*<name>([^<]+)<\/name>\s*<description>([^<]*)<\/description>\s*<\/skill>/gi;
96
- let match;
97
- while ((match = skillRegex.exec(xmlContent)) !== null) {
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: match[1].trim(),
100
- description: match[2].trim(),
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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"}