dsh-fast 0.1.2 → 0.2.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.
- package/CHANGELOG.md +12 -0
- package/README.es.md +6 -4
- package/README.hi.md +6 -4
- package/README.md +7 -4
- package/README.pt.md +6 -4
- package/README.zh.md +6 -4
- package/THIRD_PARTY_NOTICES.md +1 -1
- package/lib/index.js +225 -16
- package/lib/types/analyze.d.ts.map +1 -1
- package/lib/types/analyze.js +6 -0
- package/lib/types/analyze.js.map +1 -1
- package/lib/types/collector.d.ts +5 -1
- package/lib/types/collector.d.ts.map +1 -1
- package/lib/types/collector.js +14 -2
- package/lib/types/collector.js.map +1 -1
- package/lib/types/estimate.d.ts +19 -2
- package/lib/types/estimate.d.ts.map +1 -1
- package/lib/types/estimate.js +49 -2
- package/lib/types/estimate.js.map +1 -1
- package/lib/types/index.d.ts +2 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +34 -8
- package/lib/types/index.js.map +1 -1
- package/lib/types/model.d.ts +23 -1
- package/lib/types/model.d.ts.map +1 -1
- package/lib/types/store.d.ts +23 -1
- package/lib/types/store.d.ts.map +1 -1
- package/lib/types/store.js +15 -1
- package/lib/types/store.js.map +1 -1
- package/lib/types/version.d.ts +1 -1
- package/lib/types/version.js +1 -1
- package/package.json +13 -13
- package/src/analyze.ts +6 -0
- package/src/collector.ts +16 -2
- package/src/estimate.ts +54 -2
- package/src/index.ts +41 -8
- package/src/model.ts +25 -1
- package/src/store.ts +17 -1
- package/src/version.ts +1 -1
package/lib/types/collector.js
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* `Map` keyed by the live Session so the timer can iterate it.
|
|
8
8
|
* @module dsh-fast/collector
|
|
9
9
|
*/
|
|
10
|
-
import { estimateSystemTokens, estimateToolsTokens } from "./estimate.js";
|
|
10
|
+
import { classifySystemSections, estimateSystemTokens, estimateToolsTokens } from "./estimate.js";
|
|
11
11
|
/** The durable marker every spill notice carries (`... Full ... stored at: <locator> ...`). */
|
|
12
12
|
const SPILL_NOTICE_MARKERS = ['Full', 'stored at:'];
|
|
13
13
|
/** Flatten a tool result's model-facing text blocks to one string. */
|
|
@@ -134,9 +134,12 @@ export class FastCollector {
|
|
|
134
134
|
* the optional token meter is consulted, so it never runs in the append path.
|
|
135
135
|
* @param session - the session to snapshot.
|
|
136
136
|
* @param measure - optional token-meter measure function.
|
|
137
|
+
* @param sections - optional named system-prompt sections (from the optional
|
|
138
|
+
* `systemPrompt` service); absent = the whole rendered system prompt is
|
|
139
|
+
* attributed to the `other` bucket.
|
|
137
140
|
* @returns the snapshot.
|
|
138
141
|
*/
|
|
139
|
-
snapshot(session, measure) {
|
|
142
|
+
snapshot(session, measure, sections) {
|
|
140
143
|
const state = this.live.get(session);
|
|
141
144
|
if (state === undefined)
|
|
142
145
|
return emptySnapshot();
|
|
@@ -145,6 +148,8 @@ export class FastCollector {
|
|
|
145
148
|
const toolSchemaTokens = estimateToolsTokens(state.lastHeader);
|
|
146
149
|
const surfaceTokens = measurement?.surfaceTokens ?? 0;
|
|
147
150
|
const totalTokens = measurement?.totalTokens ?? (systemTokens + toolSchemaTokens + surfaceTokens);
|
|
151
|
+
const systemChars = state.lastHeader?.system?.length ?? 0;
|
|
152
|
+
const systemBreakdown = classifySystemSections(sections ?? (systemChars > 0 ? [{ name: 'other', text: state.lastHeader.system }] : []));
|
|
148
153
|
return {
|
|
149
154
|
load: {
|
|
150
155
|
kind: state.kind,
|
|
@@ -164,6 +169,7 @@ export class FastCollector {
|
|
|
164
169
|
toolSchemaTokens,
|
|
165
170
|
surfaceTokens,
|
|
166
171
|
...sharesOf(totalTokens, systemTokens, toolSchemaTokens, surfaceTokens),
|
|
172
|
+
systemBreakdown,
|
|
167
173
|
},
|
|
168
174
|
cache: this.cacheStats(state),
|
|
169
175
|
};
|
|
@@ -229,6 +235,12 @@ function emptySnapshot() {
|
|
|
229
235
|
systemShare: 0,
|
|
230
236
|
toolsShare: 0,
|
|
231
237
|
surfaceShare: 0,
|
|
238
|
+
systemBreakdown: {
|
|
239
|
+
agentsMd: { tokens: 0, chars: 0, share: 0 },
|
|
240
|
+
skills: { tokens: 0, chars: 0, share: 0 },
|
|
241
|
+
persona: { tokens: 0, chars: 0, share: 0 },
|
|
242
|
+
other: { tokens: 0, chars: 0, share: 0 },
|
|
243
|
+
},
|
|
232
244
|
},
|
|
233
245
|
cache: { inputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, outputTokens: 0, hitRate: null },
|
|
234
246
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/collector.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,
|
|
1
|
+
{"version":3,"file":"collector.js","sourceRoot":"","sources":["../../src/collector.ts"],"names":[],"mappings":"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"}
|
package/lib/types/estimate.d.ts
CHANGED
|
@@ -8,9 +8,26 @@
|
|
|
8
8
|
* @module dsh-fast/estimate
|
|
9
9
|
*/
|
|
10
10
|
import type { EpochHeader } from '@deepseek-ai/dsh-session';
|
|
11
|
+
import type { SystemPromptBreakdown } from './model.js';
|
|
12
|
+
/** One named system-prompt section (name + resolved text). */
|
|
13
|
+
export interface SystemSection {
|
|
14
|
+
name: string;
|
|
15
|
+
text: string;
|
|
16
|
+
}
|
|
11
17
|
/**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
18
|
+
* Classify the named system-prompt sections into the AGENTS.md / skills /
|
|
19
|
+
* persona / other buckets, with heuristic tokens and per-bucket shares. The
|
|
20
|
+
* caller supplies either the real assembled sections (via the optional
|
|
21
|
+
* `systemPrompt` service) or a single synthetic `{ name: 'other' }` section
|
|
22
|
+
* carrying the rendered prompt, so the breakdown always sums to the system
|
|
23
|
+
* prompt.
|
|
24
|
+
* @param sections - named sections (never empty in practice).
|
|
25
|
+
* @returns the per-bucket breakdown.
|
|
26
|
+
*/
|
|
27
|
+
export declare function classifySystemSections(sections: readonly SystemSection[]): SystemPromptBreakdown;
|
|
28
|
+
/**
|
|
29
|
+
* Price the assembled system prompt (harness identity + persona + tool
|
|
30
|
+
* guidance + plugin sections).
|
|
14
31
|
* @param header - canonical request envelope, or undefined before any request.
|
|
15
32
|
* @returns heuristic system-prompt tokens; 0 when absent.
|
|
16
33
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"estimate.d.ts","sourceRoot":"","sources":["../../src/estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAC3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAA;AAWvD,8DAA8D;AAC9D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAoBD;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,GAAG,qBAAqB,CAehG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAG5E;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,CAG3E"}
|
package/lib/types/estimate.js
CHANGED
|
@@ -13,9 +13,56 @@ const CHARS_PER_TOKEN = 4;
|
|
|
13
13
|
const ROLE_OVERHEAD = 4;
|
|
14
14
|
/** Per-block structural overhead for JSON framing and type tags. */
|
|
15
15
|
const BLOCK_OVERHEAD = 4;
|
|
16
|
+
/** Which tracked bucket a section name belongs to. */
|
|
17
|
+
function bucketOf(name) {
|
|
18
|
+
if (name === 'deployment:persona')
|
|
19
|
+
return 'persona';
|
|
20
|
+
if (name.toLowerCase().includes('skill'))
|
|
21
|
+
return 'skills';
|
|
22
|
+
if (/agent|instructions?/iu.test(name))
|
|
23
|
+
return 'agentsMd';
|
|
24
|
+
return 'other';
|
|
25
|
+
}
|
|
26
|
+
/** An empty breakdown (all buckets zeroed). */
|
|
27
|
+
function emptyBreakdown() {
|
|
28
|
+
return {
|
|
29
|
+
agentsMd: { tokens: 0, chars: 0, share: 0 },
|
|
30
|
+
skills: { tokens: 0, chars: 0, share: 0 },
|
|
31
|
+
persona: { tokens: 0, chars: 0, share: 0 },
|
|
32
|
+
other: { tokens: 0, chars: 0, share: 0 },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Classify the named system-prompt sections into the AGENTS.md / skills /
|
|
37
|
+
* persona / other buckets, with heuristic tokens and per-bucket shares. The
|
|
38
|
+
* caller supplies either the real assembled sections (via the optional
|
|
39
|
+
* `systemPrompt` service) or a single synthetic `{ name: 'other' }` section
|
|
40
|
+
* carrying the rendered prompt, so the breakdown always sums to the system
|
|
41
|
+
* prompt.
|
|
42
|
+
* @param sections - named sections (never empty in practice).
|
|
43
|
+
* @returns the per-bucket breakdown.
|
|
44
|
+
*/
|
|
45
|
+
export function classifySystemSections(sections) {
|
|
46
|
+
const breakdown = emptyBreakdown();
|
|
47
|
+
for (const section of sections) {
|
|
48
|
+
const chars = section.text.length;
|
|
49
|
+
if (chars === 0)
|
|
50
|
+
continue;
|
|
51
|
+
const bucket = breakdown[bucketOf(section.name)];
|
|
52
|
+
bucket.chars += chars;
|
|
53
|
+
bucket.tokens += Math.ceil(chars / CHARS_PER_TOKEN);
|
|
54
|
+
}
|
|
55
|
+
const total = breakdown.agentsMd.tokens + breakdown.skills.tokens + breakdown.persona.tokens + breakdown.other.tokens;
|
|
56
|
+
if (total <= 0)
|
|
57
|
+
return breakdown;
|
|
58
|
+
for (const bucket of [breakdown.agentsMd, breakdown.skills, breakdown.persona, breakdown.other]) {
|
|
59
|
+
bucket.share = bucket.tokens / total;
|
|
60
|
+
}
|
|
61
|
+
return breakdown;
|
|
62
|
+
}
|
|
16
63
|
/**
|
|
17
|
-
* Price the assembled system prompt (
|
|
18
|
-
*
|
|
64
|
+
* Price the assembled system prompt (harness identity + persona + tool
|
|
65
|
+
* guidance + plugin sections).
|
|
19
66
|
* @param header - canonical request envelope, or undefined before any request.
|
|
20
67
|
* @returns heuristic system-prompt tokens; 0 when absent.
|
|
21
68
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/estimate.ts"],"names":[],"mappings":"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"}
|
package/lib/types/index.d.ts
CHANGED
|
@@ -21,8 +21,9 @@ export { Config, resolveConfig } from './config.js';
|
|
|
21
21
|
export type { Config as FastConfig, ResolvedConfig } from './config.js';
|
|
22
22
|
export { VERSION } from './version.js';
|
|
23
23
|
export { stripControl, truncate, sanitizeText, sanitizePath } from './sanitize.js';
|
|
24
|
-
export type { FastReport, FastSnapshot, LoadStats, SpillStats, CompactionStats, ContextStats, CacheStats, StoredSample, } from './model.js';
|
|
24
|
+
export type { FastReport, FastSnapshot, LoadStats, SpillStats, CompactionStats, ContextStats, CacheStats, StoredSample, PromptBucket, SystemPromptBreakdown, } from './model.js';
|
|
25
25
|
export { FastCollector, detectSpilledResult, flattenToolResultText, sharesOf, hitRateOf } from './collector.js';
|
|
26
|
+
export { classifySystemSections, type SystemSection } from './estimate.js';
|
|
26
27
|
export { buildReport, buildSuggestions, renderFastText } from './analyze.js';
|
|
27
28
|
export { fastDomainSpec, appendSample, historySchema } from './store.js';
|
|
28
29
|
/**
|
package/lib/types/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAKlD,OAAO,EAAE,MAAM,EAAiB,MAAM,aAAa,CAAA;AASnD,eAAO,MAAM,IAAI,SAAS,CAAA;AAC1B,kFAAkF;AAClF,eAAO,MAAM,MAAM,UAAyC,CAAA;AAE5D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAClF,YAAY,EACV,UAAU,EACV,YAAY,EACZ,SAAS,EACT,UAAU,EACV,eAAe,EACf,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/G,OAAO,EAAE,sBAAsB,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAA;AAC1E,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAYxE;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAqM5E"}
|
package/lib/types/index.js
CHANGED
|
@@ -25,6 +25,7 @@ export { Config, resolveConfig } from "./config.js";
|
|
|
25
25
|
export { VERSION } from "./version.js";
|
|
26
26
|
export { stripControl, truncate, sanitizeText, sanitizePath } from "./sanitize.js";
|
|
27
27
|
export { FastCollector, detectSpilledResult, flattenToolResultText, sharesOf, hitRateOf } from "./collector.js";
|
|
28
|
+
export { classifySystemSections } from "./estimate.js";
|
|
28
29
|
export { buildReport, buildSuggestions, renderFastText } from "./analyze.js";
|
|
29
30
|
export { fastDomainSpec, appendSample, historySchema } from "./store.js";
|
|
30
31
|
/**
|
|
@@ -57,9 +58,23 @@ export async function apply(ctx, config = {}) {
|
|
|
57
58
|
return undefined;
|
|
58
59
|
}
|
|
59
60
|
};
|
|
61
|
+
/** Assemble the named system-prompt sections for the per-section breakdown. */
|
|
62
|
+
const assembleSections = async () => {
|
|
63
|
+
const systemPrompt = ctx.get('systemPrompt');
|
|
64
|
+
if (systemPrompt === undefined)
|
|
65
|
+
return undefined;
|
|
66
|
+
try {
|
|
67
|
+
const assembly = await systemPrompt.assemble();
|
|
68
|
+
return assembly.sections.map(section => ({ name: section.name, text: section.text }));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
logger.warn(`system-prompt section assembly failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
72
|
+
return undefined;
|
|
73
|
+
}
|
|
74
|
+
};
|
|
60
75
|
/** Build the complete report for one session. */
|
|
61
|
-
const reportFor = (session) => {
|
|
62
|
-
const snapshot = collector.snapshot(session, measure);
|
|
76
|
+
const reportFor = async (session) => {
|
|
77
|
+
const snapshot = collector.snapshot(session, measure, await assembleSections());
|
|
63
78
|
return buildReport(snapshot, {
|
|
64
79
|
sessionId: session.id,
|
|
65
80
|
...(resolved.includeCwd && session.header.cwd !== undefined ? { cwd: session.header.cwd } : {}),
|
|
@@ -67,8 +82,8 @@ export async function apply(ctx, config = {}) {
|
|
|
67
82
|
}, resolved, VERSION);
|
|
68
83
|
};
|
|
69
84
|
/** Append one snapshot to the session's durable history (fire-and-forget). */
|
|
70
|
-
const persist = (session) => {
|
|
71
|
-
const snapshot = collector.snapshot(session, measure);
|
|
85
|
+
const persist = async (session) => {
|
|
86
|
+
const snapshot = collector.snapshot(session, measure, await assembleSections());
|
|
72
87
|
const next = appendSample(sessions.get(session.id), { at: Date.now(), snapshot }, resolved.maxHistorySamples);
|
|
73
88
|
void sessions.put(session.id, next).catch((error) => {
|
|
74
89
|
logger.warn(`session "${session.id}": persist failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
@@ -78,8 +93,8 @@ export async function apply(ctx, config = {}) {
|
|
|
78
93
|
ctx.commands.register({
|
|
79
94
|
name: 'fast',
|
|
80
95
|
description: 'Print the dsh-fast performance report for the active session.',
|
|
81
|
-
handler
|
|
82
|
-
const report = reportFor(invocation.agent.session);
|
|
96
|
+
async handler(invocation) {
|
|
97
|
+
const report = await reportFor(invocation.agent.session);
|
|
83
98
|
return { kind: 'success', text: renderFastText(report) };
|
|
84
99
|
},
|
|
85
100
|
});
|
|
@@ -136,6 +151,17 @@ export async function apply(ctx, config = {}) {
|
|
|
136
151
|
systemShare: { type: 'number', required: true },
|
|
137
152
|
toolsShare: { type: 'number', required: true },
|
|
138
153
|
surfaceShare: { type: 'number', required: true },
|
|
154
|
+
systemBreakdown: {
|
|
155
|
+
type: 'object',
|
|
156
|
+
properties: {
|
|
157
|
+
agentsMd: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
|
|
158
|
+
skills: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
|
|
159
|
+
persona: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
|
|
160
|
+
other: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
|
|
161
|
+
},
|
|
162
|
+
additionalProperties: false,
|
|
163
|
+
required: true,
|
|
164
|
+
},
|
|
139
165
|
},
|
|
140
166
|
additionalProperties: false,
|
|
141
167
|
required: true,
|
|
@@ -164,7 +190,7 @@ export async function apply(ctx, config = {}) {
|
|
|
164
190
|
if (session === undefined) {
|
|
165
191
|
throw new Error('fast_report requires an agent-owned session');
|
|
166
192
|
}
|
|
167
|
-
return reportFor(session);
|
|
193
|
+
return await reportFor(session);
|
|
168
194
|
},
|
|
169
195
|
}));
|
|
170
196
|
// Session lifecycle: adopt and fold.
|
|
@@ -189,7 +215,7 @@ export async function apply(ctx, config = {}) {
|
|
|
189
215
|
if (!collector.isDirty(session))
|
|
190
216
|
continue;
|
|
191
217
|
collector.markClean(session);
|
|
192
|
-
persist(session);
|
|
218
|
+
void persist(session);
|
|
193
219
|
}
|
|
194
220
|
}, resolved.snapshotIntervalMs);
|
|
195
221
|
return async () => {
|
package/lib/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAGnD,OAAO,EAAU,aAAa,EAAE,MAAM,aAAa,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types/model.d.ts
CHANGED
|
@@ -39,11 +39,31 @@ export interface CompactionStats {
|
|
|
39
39
|
/** Sum of `shadowedTokenCount` across completed summaries. */
|
|
40
40
|
shadowedTokens: number;
|
|
41
41
|
}
|
|
42
|
+
/** One named bucket of the injected system prompt. */
|
|
43
|
+
export interface PromptBucket {
|
|
44
|
+
/** Heuristic token estimate for this bucket (`ceil(chars / 4)`). */
|
|
45
|
+
tokens: number;
|
|
46
|
+
/** Raw character count of the bucket's sections. */
|
|
47
|
+
chars: number;
|
|
48
|
+
/** Fraction of the total system-prompt bucket tokens (0 when the total is 0). */
|
|
49
|
+
share: number;
|
|
50
|
+
}
|
|
51
|
+
/** The system-prompt breakdown: AGENTS.md / skills / persona / other named sections. */
|
|
52
|
+
export interface SystemPromptBreakdown {
|
|
53
|
+
/** Sections that carry agent instructions (AGENTS.md-style). */
|
|
54
|
+
agentsMd: PromptBucket;
|
|
55
|
+
/** Sections that carry skill content. */
|
|
56
|
+
skills: PromptBucket;
|
|
57
|
+
/** The `deployment:persona` section. */
|
|
58
|
+
persona: PromptBucket;
|
|
59
|
+
/** Harness identity, tool guidance, and any unclassified sections. */
|
|
60
|
+
other: PromptBucket;
|
|
61
|
+
}
|
|
42
62
|
/** Context-injection volume: where the request context's tokens live. */
|
|
43
63
|
export interface ContextStats {
|
|
44
64
|
/** Canonical current pressure (token-meter total), or the heuristic header+surface sum. */
|
|
45
65
|
totalTokens: number;
|
|
46
|
-
/** Assembled system-prompt tokens —
|
|
66
|
+
/** Assembled system-prompt tokens — harness identity, persona, tool guidance, and plugin sections. */
|
|
47
67
|
systemTokens: number;
|
|
48
68
|
/** Tool-schema tokens. */
|
|
49
69
|
toolSchemaTokens: number;
|
|
@@ -55,6 +75,8 @@ export interface ContextStats {
|
|
|
55
75
|
toolsShare: number;
|
|
56
76
|
/** `surfaceTokens / totalTokens` (0 when the total is 0). */
|
|
57
77
|
surfaceShare: number;
|
|
78
|
+
/** Per-section system-prompt breakdown (AGENTS.md / skills / persona / other). */
|
|
79
|
+
systemBreakdown: SystemPromptBreakdown;
|
|
58
80
|
}
|
|
59
81
|
/** LLM cache accounting aggregated from `assistant/message` usage. */
|
|
60
82
|
export interface CacheStats {
|
package/lib/types/model.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAA;IAClB,6FAA6F;IAC7F,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,sBAAsB,EAAE,MAAM,CAAA;IAC9B,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAA;IACnB,sGAAsG;IACtG,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,yEAAyE;AACzE,MAAM,WAAW,SAAS;IACxB,sEAAsE;IACtE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACxB,oFAAoF;IACpF,UAAU,EAAE,MAAM,CAAA;IAClB,6FAA6F;IAC7F,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAA;CACpC;AAED,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,EAAE,YAAY,CAAA;CACvB;AAED,kEAAkE;AAClE,MAAM,WAAW,UAAU;IACzB,6FAA6F;IAC7F,sBAAsB,EAAE,MAAM,CAAA;IAC9B,2FAA2F;IAC3F,SAAS,EAAE,OAAO,CAAA;CACnB;AAED,qEAAqE;AACrE,MAAM,WAAW,eAAe;IAC9B,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAA;IACb,0EAA0E;IAC1E,MAAM,EAAE,MAAM,CAAA;IACd,4EAA4E;IAC5E,SAAS,EAAE,MAAM,CAAA;IACjB,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,sDAAsD;AACtD,MAAM,WAAW,YAAY;IAC3B,oEAAoE;IACpE,MAAM,EAAE,MAAM,CAAA;IACd,oDAAoD;IACpD,KAAK,EAAE,MAAM,CAAA;IACb,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wFAAwF;AACxF,MAAM,WAAW,qBAAqB;IACpC,gEAAgE;IAChE,QAAQ,EAAE,YAAY,CAAA;IACtB,yCAAyC;IACzC,MAAM,EAAE,YAAY,CAAA;IACpB,wCAAwC;IACxC,OAAO,EAAE,YAAY,CAAA;IACrB,sEAAsE;IACtE,KAAK,EAAE,YAAY,CAAA;CACpB;AAED,yEAAyE;AACzE,MAAM,WAAW,YAAY;IAC3B,2FAA2F;IAC3F,WAAW,EAAE,MAAM,CAAA;IACnB,sGAAsG;IACtG,YAAY,EAAE,MAAM,CAAA;IACpB,0BAA0B;IAC1B,gBAAgB,EAAE,MAAM,CAAA;IACxB,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAA;IACrB,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,YAAY,EAAE,MAAM,CAAA;IACpB,kFAAkF;IAClF,eAAe,EAAE,qBAAqB,CAAA;CACvC;AAED,sEAAsE;AACtE,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAA;IACnB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;IACpB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,oEAAoE;AACpE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAA;IACf,KAAK,EAAE,UAAU,CAAA;IACjB,UAAU,EAAE,eAAe,CAAA;IAC3B,OAAO,EAAE,YAAY,CAAA;IACrB,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,+EAA+E;AAC/E,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,kBAAkB;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,sBAAsB;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,kCAAkC;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAA;IACnB,oEAAoE;IACpE,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,8FAA8F;IAC9F,GAAG,CAAC,EAAE,MAAM,CAAA;CACb"}
|
package/lib/types/store.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Durable metric storage over the harness storage domain. The `dsh-fast`
|
|
3
3
|
* domain keeps one bounded history per session, so `/fast` and `fast_report`
|
|
4
4
|
* metrics survive a restart and the trend stays queryable without touching the
|
|
5
|
-
* session log (the rc.
|
|
5
|
+
* session log (the rc.2 `Session.append` offers no `ignorable` marker and no
|
|
6
6
|
* external event-registration surface, so a custom session event would make
|
|
7
7
|
* the persistence coordinator refuse the log on restore).
|
|
8
8
|
* @module dsh-fast/store
|
|
@@ -40,6 +40,28 @@ export declare const historySchema: z.ZodObject<{
|
|
|
40
40
|
systemShare: z.ZodNumber;
|
|
41
41
|
toolsShare: z.ZodNumber;
|
|
42
42
|
surfaceShare: z.ZodNumber;
|
|
43
|
+
systemBreakdown: z.ZodObject<{
|
|
44
|
+
agentsMd: z.ZodObject<{
|
|
45
|
+
tokens: z.ZodNumber;
|
|
46
|
+
chars: z.ZodNumber;
|
|
47
|
+
share: z.ZodNumber;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
skills: z.ZodObject<{
|
|
50
|
+
tokens: z.ZodNumber;
|
|
51
|
+
chars: z.ZodNumber;
|
|
52
|
+
share: z.ZodNumber;
|
|
53
|
+
}, z.core.$strip>;
|
|
54
|
+
persona: z.ZodObject<{
|
|
55
|
+
tokens: z.ZodNumber;
|
|
56
|
+
chars: z.ZodNumber;
|
|
57
|
+
share: z.ZodNumber;
|
|
58
|
+
}, z.core.$strip>;
|
|
59
|
+
other: z.ZodObject<{
|
|
60
|
+
tokens: z.ZodNumber;
|
|
61
|
+
chars: z.ZodNumber;
|
|
62
|
+
share: z.ZodNumber;
|
|
63
|
+
}, z.core.$strip>;
|
|
64
|
+
}, z.core.$strip>;
|
|
43
65
|
}, z.core.$strip>;
|
|
44
66
|
cache: z.ZodObject<{
|
|
45
67
|
inputTokens: z.ZodNumber;
|
package/lib/types/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,YAAY,CAAA;AA0E5D,2DAA2D;AAC3D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAExB,CAAA;AAEF,0CAA0C;AAC1C,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,YAAY,EAAE,CAAA;CACxB;AAED,iDAAiD;AACjD,eAAO,MAAM,cAAc;;;;;;CAMzB,CAAA;AAEF;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,YAAY,GAAG,SAAS,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CAGtH"}
|
package/lib/types/store.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Durable metric storage over the harness storage domain. The `dsh-fast`
|
|
3
3
|
* domain keeps one bounded history per session, so `/fast` and `fast_report`
|
|
4
4
|
* metrics survive a restart and the trend stays queryable without touching the
|
|
5
|
-
* session log (the rc.
|
|
5
|
+
* session log (the rc.2 `Session.append` offers no `ignorable` marker and no
|
|
6
6
|
* external event-registration surface, so a custom session event would make
|
|
7
7
|
* the persistence coordinator refuse the log on restore).
|
|
8
8
|
* @module dsh-fast/store
|
|
@@ -27,6 +27,19 @@ const compactionSchema = z.object({
|
|
|
27
27
|
automatic: z.number().int().nonnegative(),
|
|
28
28
|
shadowedTokens: z.number().int().nonnegative(),
|
|
29
29
|
});
|
|
30
|
+
/** Zod schema for one prompt bucket. */
|
|
31
|
+
const bucketSchema = z.object({
|
|
32
|
+
tokens: z.number().nonnegative(),
|
|
33
|
+
chars: z.number().nonnegative(),
|
|
34
|
+
share: z.number(),
|
|
35
|
+
});
|
|
36
|
+
/** Zod schema for the system-prompt breakdown. */
|
|
37
|
+
const breakdownSchema = z.object({
|
|
38
|
+
agentsMd: bucketSchema,
|
|
39
|
+
skills: bucketSchema,
|
|
40
|
+
persona: bucketSchema,
|
|
41
|
+
other: bucketSchema,
|
|
42
|
+
});
|
|
30
43
|
/** Zod schema for the context section. */
|
|
31
44
|
const contextSchema = z.object({
|
|
32
45
|
totalTokens: z.number().nonnegative(),
|
|
@@ -36,6 +49,7 @@ const contextSchema = z.object({
|
|
|
36
49
|
systemShare: z.number(),
|
|
37
50
|
toolsShare: z.number(),
|
|
38
51
|
surfaceShare: z.number(),
|
|
52
|
+
systemBreakdown: breakdownSchema,
|
|
39
53
|
});
|
|
40
54
|
/** Zod schema for the cache section. */
|
|
41
55
|
const cacheSchema = z.object({
|
package/lib/types/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,CAAC,MAAM,KAAK,CAAA;AACnB,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAG3E,uCAAuC;AACvC,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC1C,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;CAChE,CAAC,CAAA;AAEF,wCAAwC;AACxC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,sBAAsB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtD,SAAS,EAAE,CAAC,CAAC,OAAO,EAAE;CACvB,CAAC,CAAA;AAEF,6CAA6C;AAC7C,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACrC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACtC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IACzC,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;CAC/C,CAAC,CAAA;AAEF,0CAA0C;AAC1C,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7B,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACrC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACtC,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IAC1C,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE;IACvC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;IACvB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;IACtB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
|
package/lib/types/version.d.ts
CHANGED
package/lib/types/version.js
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-fast",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Read-only performance diagnostics for DeepSeek Harness: session load (open/restore) timing, spill-hit counts, compaction count and trigger, context-injection volume (AGENTS.md/skills/tool-schema token share), and LLM cache hit rate — surfaced via the /fast command and the fast_report tool, persisted as reconstructable fast/* session events with async sampling off the model path.",
|
|
5
5
|
"author": "dsh-fast contributors",
|
|
6
6
|
"repository": {
|
|
@@ -65,7 +65,7 @@
|
|
|
65
65
|
],
|
|
66
66
|
"compatibility": {
|
|
67
67
|
"dshVersions": [
|
|
68
|
-
"0.1.
|
|
68
|
+
"0.1.1-rc.2"
|
|
69
69
|
]
|
|
70
70
|
},
|
|
71
71
|
"capability": {
|
|
@@ -117,17 +117,17 @@
|
|
|
117
117
|
"@deepseek-ai/cordis": "^4.0.1",
|
|
118
118
|
"@deepseek-ai/cordis-plugin-include": "1.0.6",
|
|
119
119
|
"@deepseek-ai/cordis-plugin-loader": "1.0.2",
|
|
120
|
-
"@deepseek-ai/dsh-agent": "0.1.
|
|
121
|
-
"@deepseek-ai/dsh-commands": "0.1.
|
|
122
|
-
"@deepseek-ai/dsh-compaction": "0.1.
|
|
123
|
-
"@deepseek-ai/dsh-llm": "0.1.
|
|
124
|
-
"@deepseek-ai/dsh-session": "0.1.
|
|
125
|
-
"@deepseek-ai/dsh-storage": "0.1.
|
|
126
|
-
"@deepseek-ai/dsh-storage-domain": "0.1.
|
|
127
|
-
"@deepseek-ai/dsh-storage-json": "0.1.
|
|
128
|
-
"@deepseek-ai/dsh-system-prompt": "0.1.
|
|
129
|
-
"@deepseek-ai/dsh-token-meter": "0.1.
|
|
130
|
-
"@deepseek-ai/dsh-tools": "0.1.
|
|
120
|
+
"@deepseek-ai/dsh-agent": "0.1.1-rc.2",
|
|
121
|
+
"@deepseek-ai/dsh-commands": "0.1.1-rc.2",
|
|
122
|
+
"@deepseek-ai/dsh-compaction": "0.1.1-rc.2",
|
|
123
|
+
"@deepseek-ai/dsh-llm": "0.1.1-rc.2",
|
|
124
|
+
"@deepseek-ai/dsh-session": "0.1.1-rc.2",
|
|
125
|
+
"@deepseek-ai/dsh-storage": "0.1.1-rc.2",
|
|
126
|
+
"@deepseek-ai/dsh-storage-domain": "0.1.1-rc.2",
|
|
127
|
+
"@deepseek-ai/dsh-storage-json": "0.1.1-rc.2",
|
|
128
|
+
"@deepseek-ai/dsh-system-prompt": "0.1.1-rc.2",
|
|
129
|
+
"@deepseek-ai/dsh-token-meter": "0.1.1-rc.2",
|
|
130
|
+
"@deepseek-ai/dsh-tools": "0.1.1-rc.2",
|
|
131
131
|
"@deepseek-ai/schemastery": "^3.18.0",
|
|
132
132
|
"@types/node": "^22.19.0",
|
|
133
133
|
"@vitest/coverage-v8": "^3.2.0",
|
package/src/analyze.ts
CHANGED
|
@@ -109,6 +109,12 @@ export function renderFastText(report: FastReport): string {
|
|
|
109
109
|
`tool schema: ${context.toolSchemaTokens} (${formatPercent(context.toolsShare)})`,
|
|
110
110
|
`surface: ${context.surfaceTokens} (${formatPercent(context.surfaceShare)})`,
|
|
111
111
|
'',
|
|
112
|
+
'## System prompt breakdown',
|
|
113
|
+
`persona: ${context.systemBreakdown.persona.tokens} tokens / ${context.systemBreakdown.persona.chars} chars (${formatPercent(context.systemBreakdown.persona.share)})`,
|
|
114
|
+
`skills: ${context.systemBreakdown.skills.tokens} tokens / ${context.systemBreakdown.skills.chars} chars (${formatPercent(context.systemBreakdown.skills.share)})`,
|
|
115
|
+
`AGENTS.md: ${context.systemBreakdown.agentsMd.tokens} tokens / ${context.systemBreakdown.agentsMd.chars} chars (${formatPercent(context.systemBreakdown.agentsMd.share)})`,
|
|
116
|
+
`other (harness identity + tool guidance): ${context.systemBreakdown.other.tokens} tokens / ${context.systemBreakdown.other.chars} chars (${formatPercent(context.systemBreakdown.other.share)})`,
|
|
117
|
+
'',
|
|
112
118
|
'## LLM cache',
|
|
113
119
|
`input: ${cache.inputTokens}, cache read: ${cache.cacheReadTokens}, cache write: ${cache.cacheWriteTokens}, output: ${cache.outputTokens}`,
|
|
114
120
|
`hit rate: ${formatPercent(cache.hitRate)}`,
|
package/src/collector.ts
CHANGED
|
@@ -13,7 +13,7 @@ import type { Session, SessionEvent, ToolResultMessage } from '@deepseek-ai/dsh-
|
|
|
13
13
|
import type {} from '@deepseek-ai/dsh-compaction'
|
|
14
14
|
import type { FastSnapshot, CacheStats, ContextStats } from './model.ts'
|
|
15
15
|
import type { ResolvedConfig } from './config.ts'
|
|
16
|
-
import { estimateSystemTokens, estimateToolsTokens } from './estimate.ts'
|
|
16
|
+
import { classifySystemSections, estimateSystemTokens, estimateToolsTokens, type SystemSection } from './estimate.ts'
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* The structural surface of the optional `ctx.tokenMeter` service. Only the
|
|
@@ -184,9 +184,12 @@ export class FastCollector {
|
|
|
184
184
|
* the optional token meter is consulted, so it never runs in the append path.
|
|
185
185
|
* @param session - the session to snapshot.
|
|
186
186
|
* @param measure - optional token-meter measure function.
|
|
187
|
+
* @param sections - optional named system-prompt sections (from the optional
|
|
188
|
+
* `systemPrompt` service); absent = the whole rendered system prompt is
|
|
189
|
+
* attributed to the `other` bucket.
|
|
187
190
|
* @returns the snapshot.
|
|
188
191
|
*/
|
|
189
|
-
snapshot(session: Session, measure?: MeasureFn): FastSnapshot {
|
|
192
|
+
snapshot(session: Session, measure?: MeasureFn, sections?: readonly SystemSection[]): FastSnapshot {
|
|
190
193
|
const state = this.live.get(session)
|
|
191
194
|
if (state === undefined) return emptySnapshot()
|
|
192
195
|
const measurement = measure === undefined ? undefined : measure(session)
|
|
@@ -194,6 +197,10 @@ export class FastCollector {
|
|
|
194
197
|
const toolSchemaTokens = estimateToolsTokens(state.lastHeader)
|
|
195
198
|
const surfaceTokens = measurement?.surfaceTokens ?? 0
|
|
196
199
|
const totalTokens = measurement?.totalTokens ?? (systemTokens + toolSchemaTokens + surfaceTokens)
|
|
200
|
+
const systemChars = state.lastHeader?.system?.length ?? 0
|
|
201
|
+
const systemBreakdown = classifySystemSections(
|
|
202
|
+
sections ?? (systemChars > 0 ? [{ name: 'other', text: state.lastHeader!.system! }] : []),
|
|
203
|
+
)
|
|
197
204
|
return {
|
|
198
205
|
load: {
|
|
199
206
|
kind: state.kind,
|
|
@@ -213,6 +220,7 @@ export class FastCollector {
|
|
|
213
220
|
toolSchemaTokens,
|
|
214
221
|
surfaceTokens,
|
|
215
222
|
...sharesOf(totalTokens, systemTokens, toolSchemaTokens, surfaceTokens),
|
|
223
|
+
systemBreakdown,
|
|
216
224
|
},
|
|
217
225
|
cache: this.cacheStats(state),
|
|
218
226
|
}
|
|
@@ -283,6 +291,12 @@ function emptySnapshot(): FastSnapshot {
|
|
|
283
291
|
systemShare: 0,
|
|
284
292
|
toolsShare: 0,
|
|
285
293
|
surfaceShare: 0,
|
|
294
|
+
systemBreakdown: {
|
|
295
|
+
agentsMd: { tokens: 0, chars: 0, share: 0 },
|
|
296
|
+
skills: { tokens: 0, chars: 0, share: 0 },
|
|
297
|
+
persona: { tokens: 0, chars: 0, share: 0 },
|
|
298
|
+
other: { tokens: 0, chars: 0, share: 0 },
|
|
299
|
+
},
|
|
286
300
|
},
|
|
287
301
|
cache: { inputTokens: 0, cacheReadTokens: 0, cacheWriteTokens: 0, outputTokens: 0, hitRate: null },
|
|
288
302
|
}
|