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.
@@ -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"}
@@ -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.2.12";
2
+ export declare const VERSION = "0.2.14";
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.2.12';
2
+ export const VERSION = '0.2.14';
3
3
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-fast",
3
- "version": "0.2.12",
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-storage": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
107
- "@deepseek-ai/dsh-storage-domain": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
108
- "@deepseek-ai/dsh-storage-json": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
109
- "@deepseek-ai/dsh-tools": ">=0.1.2-rc.1 <0.2.0 || >=0.1.5-alpha.1 <0.2.0",
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 session - the session to read.
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(session: Session): SystemMessage | undefined {
52
+ export function effectiveSystemMessage(surfaceEvents: readonly SessionEvent[]): SystemMessage | undefined {
52
53
  let effective: SystemMessage | undefined
53
- for (const seq of session.surface.nodes) {
54
- const event = session.eventAt(seq)
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
- import type {} from '@deepseek-ai/dsh-commands'
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) return 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) return 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
- ctx.commands.register({
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 — ctx.tools.register mounts the fast_report tool (the
231
+ // Service Provider — the lifecycle effect mounts the fast_report tool (the
150
232
  // /fast slash command above registers on ctx.commands).
151
- ctx.tools.register(defineTool({
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
- // Async sampling: one effect owns the timer and the domain teardown.
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.12'
2
+ export const VERSION = '0.2.14'