dsh-fast 0.2.12 → 0.2.14
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 +29 -0
- package/README-es.md +16 -4
- package/README-hi.md +16 -4
- package/README-pt.md +16 -4
- package/README-zh.md +16 -4
- package/README.md +15 -4
- package/lib/index.js +121 -28
- package/lib/types/collector.d.ts +16 -3
- package/lib/types/collector.d.ts.map +1 -1
- package/lib/types/collector.js +30 -7
- package/lib/types/collector.js.map +1 -1
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +91 -25
- package/lib/types/index.js.map +1 -1
- package/lib/types/notices.d.ts +17 -0
- package/lib/types/notices.d.ts.map +1 -0
- package/lib/types/notices.js +23 -0
- package/lib/types/notices.js.map +1 -0
- package/lib/types/version.d.ts +1 -1
- package/lib/types/version.js +1 -1
- package/package.json +13 -9
- package/src/collector.ts +29 -7
- package/src/index.ts +119 -29
- package/src/notices.ts +25 -0
- package/src/version.ts +1 -1
package/lib/types/index.js.map
CHANGED
|
@@ -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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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time visible notices for degradation paths. A subsystem fallback that a
|
|
3
|
+
* report depends on (a missing token meter, a missing system-prompt service, a
|
|
4
|
+
* failing metric outlet) must be announced — but only once, because these
|
|
5
|
+
* paths are evaluated on every sample.
|
|
6
|
+
* @module dsh-fast/notices
|
|
7
|
+
*/
|
|
8
|
+
/** A notifier that emits one message per distinct key for the process lifetime. */
|
|
9
|
+
export type OnceNotifier = (key: string, message: string) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Build a {@link OnceNotifier} that forwards the first message per key to the
|
|
12
|
+
* sink and swallows every later one.
|
|
13
|
+
* @param sink - where the first message per key goes (typically `logger.warn`).
|
|
14
|
+
* @returns the notifier.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createOnceNotifier(sink: (message: string) => void): OnceNotifier;
|
|
17
|
+
//# sourceMappingURL=notices.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.d.ts","sourceRoot":"","sources":["../../src/notices.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,mFAAmF;AACnF,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;AAEjE;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,YAAY,CAOhF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time visible notices for degradation paths. A subsystem fallback that a
|
|
3
|
+
* report depends on (a missing token meter, a missing system-prompt service, a
|
|
4
|
+
* failing metric outlet) must be announced — but only once, because these
|
|
5
|
+
* paths are evaluated on every sample.
|
|
6
|
+
* @module dsh-fast/notices
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Build a {@link OnceNotifier} that forwards the first message per key to the
|
|
10
|
+
* sink and swallows every later one.
|
|
11
|
+
* @param sink - where the first message per key goes (typically `logger.warn`).
|
|
12
|
+
* @returns the notifier.
|
|
13
|
+
*/
|
|
14
|
+
export function createOnceNotifier(sink) {
|
|
15
|
+
const seen = new Set();
|
|
16
|
+
return (key, message) => {
|
|
17
|
+
if (seen.has(key))
|
|
18
|
+
return;
|
|
19
|
+
seen.add(key);
|
|
20
|
+
sink(message);
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=notices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notices.js","sourceRoot":"","sources":["../../src/notices.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAA+B;IAChE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACtB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAM;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,IAAI,CAAC,OAAO,CAAC,CAAA;IACf,CAAC,CAAA;AACH,CAAC"}
|
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.2.
|
|
3
|
+
"version": "0.2.14",
|
|
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": {
|
|
@@ -37,6 +37,7 @@
|
|
|
37
37
|
],
|
|
38
38
|
"sideEffects": false,
|
|
39
39
|
"dsh": {
|
|
40
|
+
"manifestVersion": 1,
|
|
40
41
|
"bundle": {
|
|
41
42
|
"patch": "./cordis.patch.yml"
|
|
42
43
|
}
|
|
@@ -95,18 +96,20 @@
|
|
|
95
96
|
"llm-cache"
|
|
96
97
|
],
|
|
97
98
|
"engines": {
|
|
98
|
-
"node": "^22.19.0 || >=24.0.0"
|
|
99
|
+
"node": "^22.19.0 || >=24.0.0",
|
|
100
|
+
"dsh": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0"
|
|
99
101
|
},
|
|
100
102
|
"packageManager": "pnpm@11.7.0",
|
|
101
103
|
"peerDependencies": {
|
|
102
104
|
"@deepseek-ai/cordis": "^4.0.2",
|
|
103
|
-
"@deepseek-ai/dsh-commands": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
104
|
-
"@deepseek-ai/dsh-compaction": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
105
|
-
"@deepseek-ai/dsh-session": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
|
|
106
|
-
"@deepseek-ai/dsh-
|
|
107
|
-
"@deepseek-ai/dsh-storage
|
|
108
|
-
"@deepseek-ai/dsh-storage-
|
|
109
|
-
"@deepseek-ai/dsh-
|
|
105
|
+
"@deepseek-ai/dsh-commands": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
106
|
+
"@deepseek-ai/dsh-compaction": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
107
|
+
"@deepseek-ai/dsh-session": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
108
|
+
"@deepseek-ai/dsh-session-query": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
109
|
+
"@deepseek-ai/dsh-storage": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
110
|
+
"@deepseek-ai/dsh-storage-domain": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
111
|
+
"@deepseek-ai/dsh-storage-json": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
112
|
+
"@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0 || >=0.1.6-0 <0.2.0",
|
|
110
113
|
"@deepseek-ai/schemastery": "^3.18.2"
|
|
111
114
|
},
|
|
112
115
|
"dependencies": {
|
|
@@ -146,6 +149,7 @@
|
|
|
146
149
|
"lint": "oxlint",
|
|
147
150
|
"prepare": "node scripts/prepare.mjs",
|
|
148
151
|
"verify:self-contained": "node scripts/verify-self-contained.mjs",
|
|
152
|
+
"check:lockfile": "node scripts/check-lockfile-drift.mjs",
|
|
149
153
|
"verify:artifacts": "node scripts/verify-artifacts.mjs",
|
|
150
154
|
"verify:readme-sync": "node scripts/check-readme-sync.mjs",
|
|
151
155
|
"pack:check": "node scripts/prepare.mjs && pnpm pack"
|
package/src/collector.ts
CHANGED
|
@@ -45,14 +45,14 @@ const SPILL_NOTICE_MARKERS = ['Full', 'stored at:'] as const
|
|
|
45
45
|
* surface order. 0.1.5-alpha.1 derives the prompt from surface node 0; an empty
|
|
46
46
|
* node is dormant and never restores older text. Mirrors
|
|
47
47
|
* `SystemPromptProjection` in the host agent loop.
|
|
48
|
-
* @param
|
|
48
|
+
* @param surfaceEvents - the current surface events in model-history order
|
|
49
|
+
* (from the optional `sessionQuery` service, or {@link surfaceEventsOf}).
|
|
49
50
|
* @returns the effective system message, or undefined when none is active.
|
|
50
51
|
*/
|
|
51
|
-
export function effectiveSystemMessage(
|
|
52
|
+
export function effectiveSystemMessage(surfaceEvents: readonly SessionEvent[]): SystemMessage | undefined {
|
|
52
53
|
let effective: SystemMessage | undefined
|
|
53
|
-
for (const
|
|
54
|
-
|
|
55
|
-
if (event?.type !== 'system/message') continue
|
|
54
|
+
for (const event of surfaceEvents) {
|
|
55
|
+
if (event.type !== 'system/message') continue
|
|
56
56
|
const message = event.data.message
|
|
57
57
|
if (message.content.length === 0) continue
|
|
58
58
|
effective = message
|
|
@@ -60,6 +60,26 @@ export function effectiveSystemMessage(session: Session): SystemMessage | undefi
|
|
|
60
60
|
return effective
|
|
61
61
|
}
|
|
62
62
|
|
|
63
|
+
/**
|
|
64
|
+
* The current surface events of a live session, resolved from one snapshot of
|
|
65
|
+
* the accepted log. This is the fallback read for hosts that compose no
|
|
66
|
+
* `sessionQuery` service: it replaces the deprecated `Session.eventAt(seq)`
|
|
67
|
+
* accessor (new calls are prohibited) while keeping the same surface-node
|
|
68
|
+
* order and the same log as the source of truth.
|
|
69
|
+
* @param session - the session to read.
|
|
70
|
+
* @returns the surface events in model-history order.
|
|
71
|
+
*/
|
|
72
|
+
export function surfaceEventsOf(session: Session): readonly SessionEvent[] {
|
|
73
|
+
const bySeq = new Map<number, SessionEvent>()
|
|
74
|
+
for (const event of session.snapshotEvents()) bySeq.set(event.seq, event)
|
|
75
|
+
const events: SessionEvent[] = []
|
|
76
|
+
for (const seq of session.surface.nodes) {
|
|
77
|
+
const event = bySeq.get(seq)
|
|
78
|
+
if (event !== undefined) events.push(event)
|
|
79
|
+
}
|
|
80
|
+
return events
|
|
81
|
+
}
|
|
82
|
+
|
|
63
83
|
/** The display/durable text of a system message (text blocks plus structural JSON). */
|
|
64
84
|
function systemTextOf(message: SystemMessage): string {
|
|
65
85
|
let text = ''
|
|
@@ -234,13 +254,15 @@ export class FastCollector {
|
|
|
234
254
|
* @param sections - optional named system-prompt sections (from the optional
|
|
235
255
|
* `systemPrompt` service); absent = the whole rendered system prompt is
|
|
236
256
|
* attributed to the `other` bucket.
|
|
257
|
+
* @param surfaceEvents - optional pre-read surface events (the async
|
|
258
|
+
* `sessionQuery` read path); absent = the sync fallback read.
|
|
237
259
|
* @returns the snapshot.
|
|
238
260
|
*/
|
|
239
|
-
snapshot(session: Session, measure?: MeasureFn, sections?: readonly SystemSection[]): FastSnapshot {
|
|
261
|
+
snapshot(session: Session, measure?: MeasureFn, sections?: readonly SystemSection[], surfaceEvents?: readonly SessionEvent[]): FastSnapshot {
|
|
240
262
|
const state = this.live.get(session)
|
|
241
263
|
if (state === undefined) return emptySnapshot()
|
|
242
264
|
const measurement = measure === undefined ? undefined : measure(session)
|
|
243
|
-
const systemMessage = effectiveSystemMessage(session)
|
|
265
|
+
const systemMessage = effectiveSystemMessage(surfaceEvents ?? surfaceEventsOf(session))
|
|
244
266
|
const legacySystem = systemMessage === undefined ? legacySystemText(state.lastHeader) : undefined
|
|
245
267
|
const systemTokens = systemMessage === undefined
|
|
246
268
|
? estimateLegacySystemTokens(legacySystem)
|
package/src/index.ts
CHANGED
|
@@ -16,15 +16,17 @@
|
|
|
16
16
|
import type { Context } from '@deepseek-ai/cordis'
|
|
17
17
|
import type { Session, SessionEvent } from '@deepseek-ai/dsh-session'
|
|
18
18
|
import { defineTool } from '@deepseek-ai/dsh-tools'
|
|
19
|
-
// Type-only: registers the `ctx.commands` Context merge for the inject
|
|
20
|
-
|
|
19
|
+
// Type-only: registers the `ctx.commands` Context merge for the inject, plus the
|
|
20
|
+
// command definition/invocation faces the registration below is typed against.
|
|
21
|
+
import type { CommandDefinition, CommandInvocation } from '@deepseek-ai/dsh-commands'
|
|
21
22
|
import { Config, resolveConfig } from './config.ts'
|
|
22
23
|
import { FastCollector } from './collector.ts'
|
|
23
24
|
import type { MeasureFn, TokenMeasurement } from './collector.ts'
|
|
24
25
|
import type { SystemSection } from './estimate.ts'
|
|
25
26
|
import { buildReport, renderFastText } from './analyze.ts'
|
|
26
|
-
import type { FastReport } from './model.ts'
|
|
27
|
+
import type { FastReport, FastSnapshot } from './model.ts'
|
|
27
28
|
import { fastDomainSpec, appendSample } from './store.ts'
|
|
29
|
+
import { createOnceNotifier } from './notices.ts'
|
|
28
30
|
import { VERSION } from './version.ts'
|
|
29
31
|
|
|
30
32
|
export const name = 'fast'
|
|
@@ -64,6 +66,21 @@ interface SystemPromptService {
|
|
|
64
66
|
assemble(): Promise<{ sections: readonly { name: string; text: string }[] }>
|
|
65
67
|
}
|
|
66
68
|
|
|
69
|
+
/** The structural surface of the optional `ctx.sessionQuery` service. */
|
|
70
|
+
interface SessionQueryService {
|
|
71
|
+
readSurface(sessionId: Session['id']): Promise<{ readonly events: readonly SessionEvent[] }>
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Structural face of the optional (experimental) `inspector` service. Read
|
|
76
|
+
* structurally on purpose: the service must never be injected, and it is an
|
|
77
|
+
* extra outlet beside the report surfaces — never the only one, so a host
|
|
78
|
+
* without it keeps every metric available through `/fast` and `fast_report`.
|
|
79
|
+
*/
|
|
80
|
+
interface InspectorLike {
|
|
81
|
+
publish(topic: string, payload: unknown, monotonicMs?: number): void
|
|
82
|
+
}
|
|
83
|
+
|
|
67
84
|
/**
|
|
68
85
|
* Mount the diagnostics. The resolved config is validated first (fail loud);
|
|
69
86
|
* with `enabled: false` the plugin registers nothing and stays inert.
|
|
@@ -80,15 +97,50 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
80
97
|
|
|
81
98
|
const collector = new FastCollector(resolved)
|
|
82
99
|
const domain = await ctx.storageDomain.open(fastDomainSpec)
|
|
100
|
+
// Disposal during the open await: the fiber is gone, so no effect may be
|
|
101
|
+
// registered any more — release the freshly opened handle instead of leaking
|
|
102
|
+
// it (the storage facility is single-open per name, so an unreleased handle
|
|
103
|
+
// also blocks a later remount).
|
|
104
|
+
if (ctx.fiber.uid === null) {
|
|
105
|
+
await domain.close()
|
|
106
|
+
return
|
|
107
|
+
}
|
|
83
108
|
const sessions = domain.table('sessions')
|
|
84
109
|
|
|
110
|
+
/**
|
|
111
|
+
* One-time visible degradation notices: a subsystem fallback that used to be
|
|
112
|
+
* silent now says so once per process, so a report built from heuristics is
|
|
113
|
+
* never mistaken for a measured one.
|
|
114
|
+
*/
|
|
115
|
+
const warnFallbackOnce = createOnceNotifier(message => logger.warn(message))
|
|
116
|
+
|
|
117
|
+
/** The optional metrics outlet; a no-op when the service is absent or throws. */
|
|
118
|
+
const inspector = ctx.get('inspector') as unknown as InspectorLike | undefined
|
|
119
|
+
const publishSnapshot = (session: Session, snapshot: FastSnapshot): void => {
|
|
120
|
+
if (inspector === undefined || typeof inspector.publish !== 'function') return
|
|
121
|
+
try {
|
|
122
|
+
inspector.publish('dsh-fast/snapshot', { sessionId: session.id, snapshot })
|
|
123
|
+
} catch (error) {
|
|
124
|
+
warnFallbackOnce(
|
|
125
|
+
'inspector',
|
|
126
|
+
`inspector metric outlet failed, continuing with the report surfaces only: ${error instanceof Error ? error.message : String(error)}`,
|
|
127
|
+
)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
85
131
|
// Consumer — the report paths use the optional tokenMeter/systemPrompt
|
|
86
132
|
// services at call time; the /fast handler and the fast_report execute turn
|
|
87
133
|
// the measurements into the model-visible report.
|
|
88
134
|
/** Lazy, contained lookup of the optional token meter. */
|
|
89
135
|
const measure: MeasureFn = (session) => {
|
|
90
136
|
const meter = ctx.get('tokenMeter') as unknown as TokenMeterService | undefined
|
|
91
|
-
if (meter === undefined)
|
|
137
|
+
if (meter === undefined) {
|
|
138
|
+
warnFallbackOnce(
|
|
139
|
+
'tokenMeter',
|
|
140
|
+
'tokenMeter is not composed: total/surface tokens fall back to the fixed-density heuristic (spill and compaction counters stay exact)',
|
|
141
|
+
)
|
|
142
|
+
return undefined
|
|
143
|
+
}
|
|
92
144
|
try {
|
|
93
145
|
const measurement = meter.measure(session)
|
|
94
146
|
return { totalTokens: measurement.totalTokens, surfaceTokens: measurement.surfaceTokens }
|
|
@@ -101,7 +153,13 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
101
153
|
/** Assemble the named system-prompt sections for the per-section breakdown. */
|
|
102
154
|
const assembleSections = async (): Promise<readonly SystemSection[] | undefined> => {
|
|
103
155
|
const systemPrompt = ctx.get('systemPrompt') as unknown as SystemPromptService | undefined
|
|
104
|
-
if (systemPrompt === undefined)
|
|
156
|
+
if (systemPrompt === undefined) {
|
|
157
|
+
warnFallbackOnce(
|
|
158
|
+
'systemPrompt',
|
|
159
|
+
'systemPrompt is not composed: the whole rendered prompt is attributed to the "other" bucket instead of the per-section breakdown',
|
|
160
|
+
)
|
|
161
|
+
return undefined
|
|
162
|
+
}
|
|
105
163
|
try {
|
|
106
164
|
const assembly = await systemPrompt.assemble()
|
|
107
165
|
return assembly.sections.map(section => ({ name: section.name, text: section.text }))
|
|
@@ -111,9 +169,31 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
111
169
|
}
|
|
112
170
|
}
|
|
113
171
|
|
|
172
|
+
/**
|
|
173
|
+
* Read the current surface events for one session through the optional
|
|
174
|
+
* `sessionQuery` service. This replaces the deprecated synchronous
|
|
175
|
+
* `Session.eventAt(seq)` read; a host that composes no `sessionQuery` leaves
|
|
176
|
+
* the collector on its own non-deprecated sync fallback, and a failing read
|
|
177
|
+
* degrades to that fallback with one warning instead of failing the report.
|
|
178
|
+
* @param session - the session to read.
|
|
179
|
+
* @returns the surface events in model-history order, or undefined to fall back.
|
|
180
|
+
*/
|
|
181
|
+
const readSurfaceEvents = async (session: Session): Promise<readonly SessionEvent[] | undefined> => {
|
|
182
|
+
const sessionQuery = ctx.get('sessionQuery') as unknown as SessionQueryService | undefined
|
|
183
|
+
if (sessionQuery === undefined) return undefined
|
|
184
|
+
try {
|
|
185
|
+
const surface = await sessionQuery.readSurface(session.id)
|
|
186
|
+
return surface.events
|
|
187
|
+
} catch (error) {
|
|
188
|
+
logger.warn(`session "${session.id}": surface read failed, falling back to the synchronous read: ${error instanceof Error ? error.message : String(error)}`)
|
|
189
|
+
return undefined
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
114
193
|
/** Build the complete report for one session. */
|
|
115
194
|
const reportFor = async (session: Session): Promise<FastReport> => {
|
|
116
|
-
const snapshot = collector.snapshot(session, measure, await assembleSections())
|
|
195
|
+
const snapshot = collector.snapshot(session, measure, await assembleSections(), await readSurfaceEvents(session))
|
|
196
|
+
publishSnapshot(session, snapshot)
|
|
117
197
|
return buildReport(
|
|
118
198
|
snapshot,
|
|
119
199
|
{
|
|
@@ -128,27 +208,29 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
128
208
|
|
|
129
209
|
/** Append one snapshot to the session's durable history (fire-and-forget). */
|
|
130
210
|
const persist = async (session: Session): Promise<void> => {
|
|
131
|
-
const snapshot = collector.snapshot(session, measure, await assembleSections())
|
|
211
|
+
const snapshot = collector.snapshot(session, measure, await assembleSections(), await readSurfaceEvents(session))
|
|
212
|
+
publishSnapshot(session, snapshot)
|
|
132
213
|
const next = appendSample(sessions.get(session.id), { at: Date.now(), snapshot }, resolved.maxHistorySamples)
|
|
133
214
|
void sessions.put(session.id, next).catch((error: unknown) => {
|
|
134
215
|
logger.warn(`session "${session.id}": persist failed: ${error instanceof Error ? error.message : String(error)}`)
|
|
135
216
|
})
|
|
136
217
|
}
|
|
137
218
|
|
|
138
|
-
// Human slash command: the on-demand report.
|
|
139
|
-
|
|
219
|
+
// Human slash command: the on-demand report. The definition is registered
|
|
220
|
+
// inside the single lifecycle effect below, which owns every registration.
|
|
221
|
+
const fastCommand = {
|
|
140
222
|
name: 'fast',
|
|
141
223
|
description: 'Print the dsh-fast performance report for the active session.',
|
|
142
|
-
async handler(invocation) {
|
|
224
|
+
async handler(invocation: CommandInvocation) {
|
|
143
225
|
const report = await reportFor(invocation.agent.session)
|
|
144
226
|
return { kind: 'success', text: renderFastText(report) }
|
|
145
227
|
},
|
|
146
|
-
}
|
|
228
|
+
} satisfies CommandDefinition
|
|
147
229
|
|
|
148
230
|
// Model tool: the same report as structured data.
|
|
149
|
-
// Service Provider —
|
|
231
|
+
// Service Provider — the lifecycle effect mounts the fast_report tool (the
|
|
150
232
|
// /fast slash command above registers on ctx.commands).
|
|
151
|
-
|
|
233
|
+
const fastReportTool = defineTool({
|
|
152
234
|
name: 'fast_report',
|
|
153
235
|
description: 'Return the current dsh-fast performance report for the active session: session load timing, spill hits, compaction count and trigger, context-injection volume (AGENTS.md/skills/tool-schema token share), LLM cache hit rate, and optimization suggestions.',
|
|
154
236
|
parameters: {},
|
|
@@ -241,25 +323,32 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
241
323
|
}
|
|
242
324
|
return await reportFor(session)
|
|
243
325
|
},
|
|
244
|
-
}))
|
|
245
|
-
|
|
246
|
-
// Session lifecycle: adopt and fold.
|
|
247
|
-
ctx.on('session/created', (session: Session) => {
|
|
248
|
-
collector.handleSessionCreated(session)
|
|
249
|
-
})
|
|
250
|
-
ctx.on('session/disposed', (session: Session) => {
|
|
251
|
-
collector.handleSessionDisposed(session)
|
|
252
|
-
})
|
|
253
|
-
ctx.on('session/event', (session: Session, event: SessionEvent) => {
|
|
254
|
-
try {
|
|
255
|
-
collector.handleEvent(session, event)
|
|
256
|
-
} catch (error) {
|
|
257
|
-
logger.warn(`session "${session.id}": event handling failed: ${error instanceof Error ? error.message : String(error)}`)
|
|
258
|
-
}
|
|
259
326
|
})
|
|
260
327
|
|
|
261
|
-
//
|
|
328
|
+
// One effect owns every registration and resource: the /fast command, the
|
|
329
|
+
// fast_report tool, the three session listeners, the sampling timer and the
|
|
330
|
+
// domain handle. The disposer tears them down in reverse registration order
|
|
331
|
+
// (timer → listeners → tool → command → domain close), so an unmount during
|
|
332
|
+
// apply can neither lose a registration nor leak the domain — the previous
|
|
333
|
+
// shape registered all five outside any effect and had nothing to roll back.
|
|
262
334
|
ctx.effect(() => {
|
|
335
|
+
const disposers: Array<() => void> = [
|
|
336
|
+
ctx.commands.register(fastCommand),
|
|
337
|
+
ctx.tools.register(fastReportTool),
|
|
338
|
+
ctx.on('session/created', (session: Session) => {
|
|
339
|
+
collector.handleSessionCreated(session)
|
|
340
|
+
}),
|
|
341
|
+
ctx.on('session/disposed', (session: Session) => {
|
|
342
|
+
collector.handleSessionDisposed(session)
|
|
343
|
+
}),
|
|
344
|
+
ctx.on('session/event', (session: Session, event: SessionEvent) => {
|
|
345
|
+
try {
|
|
346
|
+
collector.handleEvent(session, event)
|
|
347
|
+
} catch (error) {
|
|
348
|
+
logger.warn(`session "${session.id}": event handling failed: ${error instanceof Error ? error.message : String(error)}`)
|
|
349
|
+
}
|
|
350
|
+
}),
|
|
351
|
+
]
|
|
263
352
|
const timer = setInterval(() => {
|
|
264
353
|
for (const session of collector.liveSessions()) {
|
|
265
354
|
if (!collector.isDirty(session)) continue
|
|
@@ -269,6 +358,7 @@ export async function apply(ctx: Context, config: Config = {}): Promise<void> {
|
|
|
269
358
|
}, resolved.snapshotIntervalMs)
|
|
270
359
|
return async () => {
|
|
271
360
|
clearInterval(timer)
|
|
361
|
+
for (const dispose of disposers.reverse()) dispose()
|
|
272
362
|
await domain.close()
|
|
273
363
|
}
|
|
274
364
|
})
|
package/src/notices.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One-time visible notices for degradation paths. A subsystem fallback that a
|
|
3
|
+
* report depends on (a missing token meter, a missing system-prompt service, a
|
|
4
|
+
* failing metric outlet) must be announced — but only once, because these
|
|
5
|
+
* paths are evaluated on every sample.
|
|
6
|
+
* @module dsh-fast/notices
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
/** A notifier that emits one message per distinct key for the process lifetime. */
|
|
10
|
+
export type OnceNotifier = (key: string, message: string) => void
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Build a {@link OnceNotifier} that forwards the first message per key to the
|
|
14
|
+
* sink and swallows every later one.
|
|
15
|
+
* @param sink - where the first message per key goes (typically `logger.warn`).
|
|
16
|
+
* @returns the notifier.
|
|
17
|
+
*/
|
|
18
|
+
export function createOnceNotifier(sink: (message: string) => void): OnceNotifier {
|
|
19
|
+
const seen = new Set<string>()
|
|
20
|
+
return (key, message) => {
|
|
21
|
+
if (seen.has(key)) return
|
|
22
|
+
seen.add(key)
|
|
23
|
+
sink(message)
|
|
24
|
+
}
|
|
25
|
+
}
|
package/src/version.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
/** Single-source plugin version, bumped by `scripts/release.mjs`. @module dsh-fast/version */
|
|
2
|
-
export const VERSION = '0.2.
|
|
2
|
+
export const VERSION = '0.2.14'
|