dsh-fast 0.1.3 → 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.
@@ -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 (AGENTS.md + skill directory + persona +
18
- * harness instructions).
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;AAIH,qDAAqD;AACrD,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,iEAAiE;AACjE,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB,oEAAoE;AACpE,MAAM,cAAc,GAAG,CAAC,CAAA;AAExB;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,aAAa,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,cAAc,CAAA;AAC1F,CAAC"}
1
+ {"version":3,"file":"estimate.js","sourceRoot":"","sources":["../../src/estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,qDAAqD;AACrD,MAAM,eAAe,GAAG,CAAC,CAAA;AAEzB,iEAAiE;AACjE,MAAM,aAAa,GAAG,CAAC,CAAA;AAEvB,oEAAoE;AACpE,MAAM,cAAc,GAAG,CAAC,CAAA;AAQxB,sDAAsD;AACtD,SAAS,QAAQ,CAAC,IAAY;IAC5B,IAAI,IAAI,KAAK,oBAAoB;QAAE,OAAO,SAAS,CAAA;IACnD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,QAAQ,CAAA;IACzD,IAAI,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,UAAU,CAAA;IACzD,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,+CAA+C;AAC/C,SAAS,cAAc;IACrB,OAAO;QACL,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAC3C,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QACzC,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAC1C,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACzC,CAAA;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB,CAAC,QAAkC;IACvE,MAAM,SAAS,GAAG,cAAc,EAAE,CAAA;IAClC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAA;QACjC,IAAI,KAAK,KAAK,CAAC;YAAE,SAAQ;QACzB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;QAChD,MAAM,CAAC,KAAK,IAAI,KAAK,CAAA;QACrB,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,CAAA;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAA;IACrH,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,SAAS,CAAA;IAChC,KAAK,MAAM,MAAM,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAU,EAAE,CAAC;QACzG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAA;IACtC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAA+B;IAClE,IAAI,MAAM,EAAE,MAAM,KAAK,SAAS;QAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,aAAa,CAAA;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA+B;IACjE,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAA;IACtE,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,cAAc,CAAA;AAC1F,CAAC"}
@@ -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
  /**
@@ -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;AAQnD,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,GACb,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC/G,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAOxE;;;;;GAKG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,MAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6K5E"}
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"}
@@ -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: (invocation) => {
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 () => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -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 — AGENTS.md, skill directory, persona, and harness instructions. */
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 {
@@ -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;CACrB;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"}
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"}
@@ -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;
@@ -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;AA0D5D,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"}
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"}
@@ -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({
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  /** Single-source plugin version, bumped by `scripts/release.mjs`. @module dsh-fast/version */
2
- export declare const VERSION = "0.1.3";
2
+ export declare const VERSION = "0.2.0";
3
3
  //# sourceMappingURL=version.d.ts.map
@@ -1,3 +1,3 @@
1
1
  /** Single-source plugin version, bumped by `scripts/release.mjs`. @module dsh-fast/version */
2
- export const VERSION = '0.1.3';
2
+ export const VERSION = '0.2.0';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-fast",
3
- "version": "0.1.3",
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": {
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
  }
package/src/estimate.ts CHANGED
@@ -9,6 +9,7 @@
9
9
  */
10
10
 
11
11
  import type { EpochHeader } from '@deepseek-ai/dsh-session'
12
+ import type { SystemPromptBreakdown } from './model.ts'
12
13
 
13
14
  /** Fixed text-density estimate (chars per token). */
14
15
  const CHARS_PER_TOKEN = 4
@@ -19,9 +20,60 @@ const ROLE_OVERHEAD = 4
19
20
  /** Per-block structural overhead for JSON framing and type tags. */
20
21
  const BLOCK_OVERHEAD = 4
21
22
 
23
+ /** One named system-prompt section (name + resolved text). */
24
+ export interface SystemSection {
25
+ name: string
26
+ text: string
27
+ }
28
+
29
+ /** Which tracked bucket a section name belongs to. */
30
+ function bucketOf(name: string): 'agentsMd' | 'skills' | 'persona' | 'other' {
31
+ if (name === 'deployment:persona') return 'persona'
32
+ if (name.toLowerCase().includes('skill')) return 'skills'
33
+ if (/agent|instructions?/iu.test(name)) return 'agentsMd'
34
+ return 'other'
35
+ }
36
+
37
+ /** An empty breakdown (all buckets zeroed). */
38
+ function emptyBreakdown(): SystemPromptBreakdown {
39
+ return {
40
+ agentsMd: { tokens: 0, chars: 0, share: 0 },
41
+ skills: { tokens: 0, chars: 0, share: 0 },
42
+ persona: { tokens: 0, chars: 0, share: 0 },
43
+ other: { tokens: 0, chars: 0, share: 0 },
44
+ }
45
+ }
46
+
47
+ /**
48
+ * Classify the named system-prompt sections into the AGENTS.md / skills /
49
+ * persona / other buckets, with heuristic tokens and per-bucket shares. The
50
+ * caller supplies either the real assembled sections (via the optional
51
+ * `systemPrompt` service) or a single synthetic `{ name: 'other' }` section
52
+ * carrying the rendered prompt, so the breakdown always sums to the system
53
+ * prompt.
54
+ * @param sections - named sections (never empty in practice).
55
+ * @returns the per-bucket breakdown.
56
+ */
57
+ export function classifySystemSections(sections: readonly SystemSection[]): SystemPromptBreakdown {
58
+ const breakdown = emptyBreakdown()
59
+ for (const section of sections) {
60
+ const chars = section.text.length
61
+ if (chars === 0) continue
62
+ const bucket = breakdown[bucketOf(section.name)]
63
+ bucket.chars += chars
64
+ bucket.tokens += Math.ceil(chars / CHARS_PER_TOKEN)
65
+ }
66
+ const total = breakdown.agentsMd.tokens + breakdown.skills.tokens + breakdown.persona.tokens + breakdown.other.tokens
67
+ if (total <= 0) return breakdown
68
+ for (const bucket of [breakdown.agentsMd, breakdown.skills, breakdown.persona, breakdown.other] as const) {
69
+ bucket.share = bucket.tokens / total
70
+ }
71
+ return breakdown
72
+ }
73
+
22
74
  /**
23
- * Price the assembled system prompt (AGENTS.md + skill directory + persona +
24
- * harness instructions).
75
+ * Price the assembled system prompt (harness identity + persona + tool
76
+ * guidance + plugin sections).
25
77
  * @param header - canonical request envelope, or undefined before any request.
26
78
  * @returns heuristic system-prompt tokens; 0 when absent.
27
79
  */
package/src/index.ts CHANGED
@@ -21,6 +21,7 @@ import type {} from '@deepseek-ai/dsh-commands'
21
21
  import { Config, resolveConfig } from './config.ts'
22
22
  import { FastCollector } from './collector.ts'
23
23
  import type { MeasureFn, TokenMeasurement } from './collector.ts'
24
+ import type { SystemSection } from './estimate.ts'
24
25
  import { buildReport, renderFastText } from './analyze.ts'
25
26
  import type { FastReport } from './model.ts'
26
27
  import { fastDomainSpec, appendSample } from './store.ts'
@@ -43,8 +44,11 @@ export type {
43
44
  ContextStats,
44
45
  CacheStats,
45
46
  StoredSample,
47
+ PromptBucket,
48
+ SystemPromptBreakdown,
46
49
  } from './model.ts'
47
50
  export { FastCollector, detectSpilledResult, flattenToolResultText, sharesOf, hitRateOf } from './collector.ts'
51
+ export { classifySystemSections, type SystemSection } from './estimate.ts'
48
52
  export { buildReport, buildSuggestions, renderFastText } from './analyze.ts'
49
53
  export { fastDomainSpec, appendSample, historySchema } from './store.ts'
50
54
 
@@ -53,6 +57,11 @@ interface TokenMeterService {
53
57
  measure(session: Session): TokenMeasurement
54
58
  }
55
59
 
60
+ /** The structural surface of the optional `ctx.systemPrompt` service (section assembly). */
61
+ interface SystemPromptService {
62
+ assemble(): Promise<{ sections: readonly { name: string; text: string }[] }>
63
+ }
64
+
56
65
  /**
57
66
  * Mount the diagnostics. The resolved config is validated first (fail loud);
58
67
  * with `enabled: false` the plugin registers nothing and stays inert.
@@ -84,9 +93,22 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
84
93
  }
85
94
  }
86
95
 
96
+ /** Assemble the named system-prompt sections for the per-section breakdown. */
97
+ const assembleSections = async (): Promise<readonly SystemSection[] | undefined> => {
98
+ const systemPrompt = ctx.get('systemPrompt') as unknown as SystemPromptService | undefined
99
+ if (systemPrompt === undefined) return undefined
100
+ try {
101
+ const assembly = await systemPrompt.assemble()
102
+ return assembly.sections.map(section => ({ name: section.name, text: section.text }))
103
+ } catch (error) {
104
+ logger.warn(`system-prompt section assembly failed: ${error instanceof Error ? error.message : String(error)}`)
105
+ return undefined
106
+ }
107
+ }
108
+
87
109
  /** Build the complete report for one session. */
88
- const reportFor = (session: Session): FastReport => {
89
- const snapshot = collector.snapshot(session, measure)
110
+ const reportFor = async (session: Session): Promise<FastReport> => {
111
+ const snapshot = collector.snapshot(session, measure, await assembleSections())
90
112
  return buildReport(
91
113
  snapshot,
92
114
  {
@@ -100,8 +122,8 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
100
122
  }
101
123
 
102
124
  /** Append one snapshot to the session's durable history (fire-and-forget). */
103
- const persist = (session: Session): void => {
104
- const snapshot = collector.snapshot(session, measure)
125
+ const persist = async (session: Session): Promise<void> => {
126
+ const snapshot = collector.snapshot(session, measure, await assembleSections())
105
127
  const next = appendSample(sessions.get(session.id), { at: Date.now(), snapshot }, resolved.maxHistorySamples)
106
128
  void sessions.put(session.id, next).catch((error: unknown) => {
107
129
  logger.warn(`session "${session.id}": persist failed: ${error instanceof Error ? error.message : String(error)}`)
@@ -112,8 +134,8 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
112
134
  ctx.commands.register({
113
135
  name: 'fast',
114
136
  description: 'Print the dsh-fast performance report for the active session.',
115
- handler: (invocation) => {
116
- const report = reportFor(invocation.agent.session)
137
+ async handler(invocation) {
138
+ const report = await reportFor(invocation.agent.session)
117
139
  return { kind: 'success', text: renderFastText(report) }
118
140
  },
119
141
  })
@@ -171,6 +193,17 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
171
193
  systemShare: { type: 'number', required: true },
172
194
  toolsShare: { type: 'number', required: true },
173
195
  surfaceShare: { type: 'number', required: true },
196
+ systemBreakdown: {
197
+ type: 'object',
198
+ properties: {
199
+ agentsMd: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
200
+ skills: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
201
+ persona: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
202
+ other: { type: 'object', properties: { tokens: { type: 'number', required: true }, chars: { type: 'number', required: true }, share: { type: 'number', required: true } }, additionalProperties: false, required: true },
203
+ },
204
+ additionalProperties: false,
205
+ required: true,
206
+ },
174
207
  },
175
208
  additionalProperties: false,
176
209
  required: true,
@@ -199,7 +232,7 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
199
232
  if (session === undefined) {
200
233
  throw new Error('fast_report requires an agent-owned session')
201
234
  }
202
- return reportFor(session)
235
+ return await reportFor(session)
203
236
  },
204
237
  }))
205
238
 
@@ -224,7 +257,7 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
224
257
  for (const session of collector.liveSessions()) {
225
258
  if (!collector.isDirty(session)) continue
226
259
  collector.markClean(session)
227
- persist(session)
260
+ void persist(session)
228
261
  }
229
262
  }, resolved.snapshotIntervalMs)
230
263
  return async () => {