@ramtinj95/opencode-tokenscope 1.5.2 → 1.6.0

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 (48) hide show
  1. package/README.md +38 -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 +68 -23
  5. package/dist/tokenscope-lib/analyzer.js.map +1 -1
  6. package/dist/tokenscope-lib/config.d.ts.map +1 -1
  7. package/dist/tokenscope-lib/config.js +21 -11
  8. package/dist/tokenscope-lib/config.js.map +1 -1
  9. package/dist/tokenscope-lib/context.d.ts +4 -1
  10. package/dist/tokenscope-lib/context.d.ts.map +1 -1
  11. package/dist/tokenscope-lib/context.js +47 -25
  12. package/dist/tokenscope-lib/context.js.map +1 -1
  13. package/dist/tokenscope-lib/cost.d.ts +4 -0
  14. package/dist/tokenscope-lib/cost.d.ts.map +1 -1
  15. package/dist/tokenscope-lib/cost.js +38 -8
  16. package/dist/tokenscope-lib/cost.js.map +1 -1
  17. package/dist/tokenscope-lib/formatter.d.ts +3 -0
  18. package/dist/tokenscope-lib/formatter.d.ts.map +1 -1
  19. package/dist/tokenscope-lib/formatter.js +91 -21
  20. package/dist/tokenscope-lib/formatter.js.map +1 -1
  21. package/dist/tokenscope-lib/opencode.d.ts +4 -0
  22. package/dist/tokenscope-lib/opencode.d.ts.map +1 -0
  23. package/dist/tokenscope-lib/opencode.js +25 -0
  24. package/dist/tokenscope-lib/opencode.js.map +1 -0
  25. package/dist/tokenscope-lib/skill.d.ts +43 -5
  26. package/dist/tokenscope-lib/skill.d.ts.map +1 -1
  27. package/dist/tokenscope-lib/skill.js +435 -50
  28. package/dist/tokenscope-lib/skill.js.map +1 -1
  29. package/dist/tokenscope-lib/subagent.d.ts +3 -1
  30. package/dist/tokenscope-lib/subagent.d.ts.map +1 -1
  31. package/dist/tokenscope-lib/subagent.js +29 -11
  32. package/dist/tokenscope-lib/subagent.js.map +1 -1
  33. package/dist/tokenscope-lib/tokenizer.d.ts +3 -0
  34. package/dist/tokenscope-lib/tokenizer.d.ts.map +1 -1
  35. package/dist/tokenscope-lib/tokenizer.js +8 -2
  36. package/dist/tokenscope-lib/tokenizer.js.map +1 -1
  37. package/dist/tokenscope-lib/types.d.ts +30 -2
  38. package/dist/tokenscope-lib/types.d.ts.map +1 -1
  39. package/dist/tokenscope-lib/types.js.map +1 -1
  40. package/dist/tokenscope-lib/warnings.d.ts +8 -0
  41. package/dist/tokenscope-lib/warnings.d.ts.map +1 -0
  42. package/dist/tokenscope-lib/warnings.js +31 -0
  43. package/dist/tokenscope-lib/warnings.js.map +1 -0
  44. package/dist/tokenscope.d.ts.map +1 -1
  45. package/dist/tokenscope.js +125 -57
  46. package/dist/tokenscope.js.map +1 -1
  47. package/models.json +30922 -232
  48. package/package.json +1 -1
@@ -10,20 +10,52 @@ import { SubagentAnalyzer } from "./tokenscope-lib/subagent";
10
10
  import { OutputFormatter } from "./tokenscope-lib/formatter";
11
11
  import { ContextAnalyzer } from "./tokenscope-lib/context";
12
12
  import { SkillAnalyzer } from "./tokenscope-lib/skill";
13
- export const TokenAnalyzerPlugin = async ({ client }) => {
13
+ import { fetchSessionMessages, unwrapResponseData } from "./tokenscope-lib/opencode";
14
+ import { WarningCollector, formatErrorMessage } from "./tokenscope-lib/warnings";
15
+ const REPORT_FILENAME = "token-usage-output.txt";
16
+ async function writeReport(outputPath, output) {
17
+ try {
18
+ try {
19
+ await fs.unlink(outputPath);
20
+ }
21
+ catch { }
22
+ await fs.writeFile(outputPath, output, { encoding: "utf8", flag: "w" });
23
+ return null;
24
+ }
25
+ catch (error) {
26
+ return `Failed to write token analysis to ${outputPath}: ${formatErrorMessage(error)}`;
27
+ }
28
+ }
29
+ function buildFailureReport(sessionID, warnings, fatalMessage) {
30
+ const lines = [];
31
+ const timestamp = new Date().toISOString();
32
+ lines.push("═══════════════════════════════════════════════════════════════════════════");
33
+ lines.push(`Token Analysis: Session ${sessionID ?? "unknown"}`);
34
+ lines.push("Status: Partial / failed analysis");
35
+ lines.push("═══════════════════════════════════════════════════════════════════════════");
36
+ lines.push("");
37
+ lines.push(`Timestamp: ${timestamp}`);
38
+ lines.push("");
39
+ lines.push("TokenScope hit a non-fatal error and returned this fallback report so the OpenCode session stays usable.");
40
+ lines.push("");
41
+ lines.push(`Fatal error: ${fatalMessage}`);
42
+ if (warnings.length > 0) {
43
+ lines.push("");
44
+ lines.push("Warnings:");
45
+ for (const warning of warnings) {
46
+ lines.push(`- ${warning}`);
47
+ }
48
+ }
49
+ lines.push("");
50
+ lines.push("Try again after switching to a supported model or updating the plugin.");
51
+ return lines.join("\n");
52
+ }
53
+ export const TokenAnalyzerPlugin = async ({ client, serverUrl, directory }) => {
14
54
  const pricingData = await loadModelPricing();
15
55
  const config = await loadTokenscopeConfig();
16
- const tokenizerManager = new TokenizerManager();
17
56
  const modelResolver = new ModelResolver();
18
57
  const contentCollector = new ContentCollector();
19
- const analysisEngine = new TokenAnalysisEngine(tokenizerManager, contentCollector);
20
58
  const costCalculator = new CostCalculator(pricingData);
21
- const subagentAnalyzer = new SubagentAnalyzer(client, costCalculator);
22
- const contextAnalyzer = new ContextAnalyzer(tokenizerManager);
23
- const skillAnalyzer = new SkillAnalyzer(client, tokenizerManager);
24
- const formatter = new OutputFormatter(costCalculator);
25
- // Set config on formatter to control section rendering
26
- formatter.setConfig(config);
27
59
  return {
28
60
  tool: {
29
61
  tokenscope: tool({
@@ -38,62 +70,98 @@ export const TokenAnalyzerPlugin = async ({ client }) => {
38
70
  .describe("Include token costs from subagent child sessions (default: true)"),
39
71
  },
40
72
  async execute(args, context) {
73
+ const outputPath = path.join(process.cwd(), REPORT_FILENAME);
74
+ const warnings = new WarningCollector();
75
+ const tokenizerManager = new TokenizerManager(warnings);
76
+ const analysisEngine = new TokenAnalysisEngine(tokenizerManager, contentCollector);
77
+ const subagentAnalyzer = new SubagentAnalyzer(client, costCalculator, warnings);
78
+ const contextAnalyzer = new ContextAnalyzer(tokenizerManager, warnings);
79
+ const skillAnalyzer = new SkillAnalyzer(client, tokenizerManager, serverUrl, directory, warnings);
80
+ const formatter = new OutputFormatter(costCalculator);
81
+ formatter.setConfig(config);
41
82
  const sessionID = args.sessionID ?? context.sessionID;
42
83
  if (!sessionID) {
43
- throw new Error("No session ID available for token analysis");
44
- }
45
- const response = await client.session.messages({ path: { id: sessionID } });
46
- const messages = (response?.data ?? response ?? []);
47
- if (!Array.isArray(messages) || messages.length === 0) {
48
- return `Session ${sessionID} has no messages yet.`;
49
- }
50
- const { model: tokenModel, providerID, modelID } = modelResolver.resolveModelAndProvider(messages);
51
- const analysis = await analysisEngine.analyze(sessionID, messages, tokenModel, args.limitMessages ?? DEFAULT_ENTRY_LIMIT);
52
- // Subagent analysis (respects config)
53
- const shouldIncludeSubagents = args.includeSubagents !== false && config.enableSubagentAnalysis;
54
- if (shouldIncludeSubagents) {
55
- analysis.subagentAnalysis = await subagentAnalyzer.analyzeChildSessions(sessionID);
56
- }
57
- // Context analysis (context breakdown, tool estimates, cache efficiency)
58
- const pricing = costCalculator.getPricing(tokenModel.name);
59
- const contextResult = await contextAnalyzer.analyze(sessionID, tokenModel, pricing, config);
60
- // Merge context analysis results into main analysis
61
- if (contextResult.contextBreakdown) {
62
- analysis.contextBreakdown = contextResult.contextBreakdown;
63
- }
64
- if (contextResult.toolEstimates) {
65
- analysis.toolEstimates = contextResult.toolEstimates;
66
- }
67
- if (contextResult.cacheEfficiency) {
68
- analysis.cacheEfficiency = contextResult.cacheEfficiency;
69
- }
70
- // Skill analysis (respects config)
71
- if (config.enableSkillAnalysis) {
72
- analysis.skillAnalysis = await skillAnalyzer.analyze(messages, providerID, modelID, tokenModel, config);
84
+ const output = buildFailureReport(undefined, warnings.list(), "No session ID available for token analysis");
85
+ const writeError = await writeReport(outputPath, output);
86
+ if (writeError) {
87
+ return `TokenScope could not run: no session ID was available, and the fallback report could not be written. ${writeError}`;
88
+ }
89
+ return `TokenScope could not run because no session ID was available. A fallback report was saved to: ${outputPath}`;
73
90
  }
74
- const output = formatter.format(analysis);
75
- const outputPath = path.join(process.cwd(), "token-usage-output.txt");
76
91
  try {
77
- try {
78
- await fs.unlink(outputPath);
92
+ const response = await fetchSessionMessages(client, sessionID);
93
+ const messages = unwrapResponseData(response ?? []);
94
+ if (!Array.isArray(messages) || messages.length === 0) {
95
+ const output = buildFailureReport(sessionID, warnings.list(), `Session ${sessionID} has no messages yet.`);
96
+ const writeError = await writeReport(outputPath, output);
97
+ if (writeError) {
98
+ return `Session ${sessionID} has no messages yet, and TokenScope also failed to write ${outputPath}. ${writeError}`;
99
+ }
100
+ return `Session ${sessionID} has no messages yet. A short report was saved to: ${outputPath}`;
101
+ }
102
+ const { model: tokenModel, providerID, modelID } = modelResolver.resolveModelAndProvider(messages);
103
+ const pricingModelName = costCalculator.buildLookupKey(providerID, modelID) || tokenModel.name;
104
+ if (tokenModel.spec.kind === "approx") {
105
+ warnings.add(`Model '${providerID}/${modelID}' is not currently supported by a model-specific tokenizer. Token counts use an approximate character-based fallback.`, `unsupported-tokenizer:${providerID}:${modelID}`);
106
+ }
107
+ if (!costCalculator.hasPricing(pricingModelName)) {
108
+ warnings.add(`Pricing for '${pricingModelName}' was not found in models.json. Cost estimates use the default fallback rates ($1/M input, $3/M output, no cache pricing).`, `missing-pricing:${pricingModelName}`);
109
+ }
110
+ const analysis = await analysisEngine.analyze(sessionID, messages, tokenModel, args.limitMessages ?? DEFAULT_ENTRY_LIMIT);
111
+ analysis.pricingModelName = pricingModelName;
112
+ // Subagent analysis (respects config)
113
+ const shouldIncludeSubagents = args.includeSubagents !== false && config.enableSubagentAnalysis;
114
+ if (shouldIncludeSubagents) {
115
+ analysis.subagentAnalysis = await subagentAnalyzer.analyzeChildSessions(sessionID);
79
116
  }
80
- catch { }
81
- await fs.writeFile(outputPath, output, { encoding: "utf8", flag: "w" });
117
+ // Context analysis (context breakdown, tool estimates, cache efficiency)
118
+ const pricing = costCalculator.getPricing(pricingModelName);
119
+ const contextResult = await contextAnalyzer.analyze(sessionID, tokenModel, pricing, config);
120
+ // Merge context analysis results into main analysis
121
+ if (contextResult.contextBreakdown) {
122
+ analysis.contextBreakdown = contextResult.contextBreakdown;
123
+ }
124
+ if (contextResult.toolEstimates) {
125
+ analysis.toolEstimates = contextResult.toolEstimates;
126
+ }
127
+ if (contextResult.cacheEfficiency) {
128
+ analysis.cacheEfficiency = contextResult.cacheEfficiency;
129
+ }
130
+ // Skill analysis (respects config)
131
+ if (config.enableSkillAnalysis) {
132
+ analysis.skillAnalysis = await skillAnalyzer.analyze(messages, providerID, modelID, tokenModel, config);
133
+ }
134
+ analysis.warnings = warnings.list();
135
+ const output = formatter.format(analysis);
136
+ const writeError = await writeReport(outputPath, output);
137
+ if (writeError) {
138
+ return writeError;
139
+ }
140
+ const timestamp = new Date().toISOString();
141
+ const formattedTotal = new Intl.NumberFormat("en-US").format(analysis.totalTokens);
142
+ let summaryMsg = `Token analysis complete! Full report saved to: ${outputPath}\n\nTimestamp: ${timestamp}\nMain session tokens: ${formattedTotal}`;
143
+ if (analysis.subagentAnalysis && analysis.subagentAnalysis.subagents.length > 0) {
144
+ const subagentTokens = new Intl.NumberFormat("en-US").format(analysis.subagentAnalysis.totalTokens);
145
+ const grandTotal = new Intl.NumberFormat("en-US").format(analysis.totalTokens + analysis.subagentAnalysis.totalTokens);
146
+ summaryMsg += `\nSubagent sessions: ${analysis.subagentAnalysis.subagents.length} (${subagentTokens} tokens)`;
147
+ summaryMsg += `\nGrand total: ${grandTotal} tokens`;
148
+ }
149
+ if (analysis.warnings.length > 0) {
150
+ summaryMsg += `\nWarnings: ${analysis.warnings.length} (see report for details)`;
151
+ }
152
+ summaryMsg += `\n\nUse: cat ${REPORT_FILENAME} (or read the file) to view the complete analysis.`;
153
+ return summaryMsg;
82
154
  }
83
155
  catch (error) {
84
- throw new Error(`Failed to write token analysis to ${outputPath}: ${error}`);
85
- }
86
- const timestamp = new Date().toISOString();
87
- const formattedTotal = new Intl.NumberFormat("en-US").format(analysis.totalTokens);
88
- let summaryMsg = `Token analysis complete! Full report saved to: ${outputPath}\n\nTimestamp: ${timestamp}\nMain session tokens: ${formattedTotal}`;
89
- if (analysis.subagentAnalysis && analysis.subagentAnalysis.subagents.length > 0) {
90
- const subagentTokens = new Intl.NumberFormat("en-US").format(analysis.subagentAnalysis.totalTokens);
91
- const grandTotal = new Intl.NumberFormat("en-US").format(analysis.totalTokens + analysis.subagentAnalysis.totalTokens);
92
- summaryMsg += `\nSubagent sessions: ${analysis.subagentAnalysis.subagents.length} (${subagentTokens} tokens)`;
93
- summaryMsg += `\nGrand total: ${grandTotal} tokens`;
156
+ const fatalMessage = formatErrorMessage(error);
157
+ warnings.add(`TokenScope returned a fallback report instead of aborting the session: ${fatalMessage}`, `fatal:${sessionID}`);
158
+ const output = buildFailureReport(sessionID, warnings.list(), fatalMessage);
159
+ const writeError = await writeReport(outputPath, output);
160
+ if (writeError) {
161
+ return `TokenScope hit an error but avoided crashing the session. It also failed to write ${outputPath}. ${writeError}`;
162
+ }
163
+ return `TokenScope hit an error but avoided crashing the session. A fallback report was saved to: ${outputPath}`;
94
164
  }
95
- summaryMsg += `\n\nUse: cat token-usage-output.txt (or read the file) to view the complete analysis.`;
96
- return summaryMsg;
97
165
  },
98
166
  }),
99
167
  },
@@ -1 +1 @@
1
- {"version":3,"file":"tokenscope.js","sourceRoot":"","sources":["../tokenscope.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tokenscope.js","sourceRoot":"","sources":["../tokenscope.ts"],"names":[],"mappings":"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"}