@linxin666/dsh-pet 0.3.6 → 0.3.9
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/README.i18n.yaml +2 -2
- package/README.md +4 -0
- package/README.zh.md +4 -0
- package/lib/client.js +187 -88
- package/lib/client.js.map +1 -1
- package/lib/index.js +89 -11
- package/lib/live2d-vendor.js +106 -95
- package/lib/live2d-vendor.js.map +1 -1
- package/lib/types/announce.d.ts +53 -0
- package/lib/types/announce.d.ts.map +1 -0
- package/lib/types/announce.js +80 -0
- package/lib/types/client/PetDockEntry.d.ts +14 -5
- package/lib/types/client/PetDockEntry.d.ts.map +1 -1
- package/lib/types/client/PetDockEntry.js +6 -5
- package/lib/types/client/PetSettingsCard.d.ts +2 -1
- package/lib/types/client/PetSettingsCard.d.ts.map +1 -1
- package/lib/types/client/PetSprite.d.ts +8 -0
- package/lib/types/client/PetSprite.d.ts.map +1 -1
- package/lib/types/client/PetSprite.js +29 -4
- package/lib/types/client/index.d.ts +8 -5
- package/lib/types/client/index.d.ts.map +1 -1
- package/lib/types/client/index.js +11 -5
- package/lib/types/client/locales.d.ts +2 -2
- package/lib/types/client/locales.js +2 -2
- package/lib/types/client/pet-store.d.ts +1 -1
- package/lib/types/client/pet-store.d.ts.map +1 -1
- package/lib/types/client/pet-store.js +1 -1
- package/lib/types/client/settings-form.d.ts +35 -43
- package/lib/types/client/settings-form.d.ts.map +1 -1
- package/lib/types/client/settings-form.js +60 -53
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +10 -9
- package/lib/types/service.d.ts +18 -0
- package/lib/types/service.d.ts.map +1 -1
- package/lib/types/service.js +22 -0
- package/package.json +17 -13
- package/src/announce.ts +103 -0
- package/src/client/PetDockEntry.test.tsx +1 -1
- package/src/client/PetDockEntry.tsx +15 -4
- package/src/client/PetSettingsCard.tsx +2 -1
- package/src/client/PetSprite.test.tsx +18 -0
- package/src/client/PetSprite.tsx +66 -3
- package/src/client/gameplay-hud.test.tsx +1 -1
- package/src/client/index.test.tsx +2 -2
- package/src/client/index.ts +17 -6
- package/src/client/locales.ts +2 -2
- package/src/client/pet-store.ts +2 -2
- package/src/client/pet.module.css +104 -0
- package/src/client/settings-form.ts +78 -92
- package/src/dsh-home.ts +1 -1
- package/src/index.ts +17 -15
- package/src/service.ts +28 -1
package/src/service.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { Context, Service } from '@deepseek-ai/cordis'
|
|
16
16
|
import type { Session, SessionEvent } from '@deepseek-ai/dsh-session'
|
|
17
17
|
import type { AffinityConfig, PetAffinityView, PetInteraction } from './affinity.ts'
|
|
18
|
+
import { announcementFresh, parseAnnouncement, type PetAnnouncement } from './announce.ts'
|
|
18
19
|
import type { TreatConfig } from './treats.ts'
|
|
19
20
|
import {
|
|
20
21
|
emptyProjectionRuntime,
|
|
@@ -191,6 +192,12 @@ export interface PetStateView {
|
|
|
191
192
|
* settles the view in memory but never writes pet.json.
|
|
192
193
|
*/
|
|
193
194
|
gameplay?: PetGameplayStateView
|
|
195
|
+
/**
|
|
196
|
+
* The freshest plugin-authored announcement (dsh-usage linkage), within
|
|
197
|
+
* its TTL; absent when none is fresh. Rendered as a dedicated styled
|
|
198
|
+
* bubble above the session stack.
|
|
199
|
+
*/
|
|
200
|
+
announcement?: PetAnnouncement
|
|
194
201
|
}
|
|
195
202
|
|
|
196
203
|
/** Result of `pet.interact`. */
|
|
@@ -224,7 +231,6 @@ declare module '@deepseek-ai/cordis' {
|
|
|
224
231
|
pet: PetService
|
|
225
232
|
}
|
|
226
233
|
}
|
|
227
|
-
|
|
228
234
|
/** Per-session pet activity: projection runtime plus the session's own machine. */
|
|
229
235
|
interface SessionActivity {
|
|
230
236
|
runtime: ProjectionRuntime
|
|
@@ -257,6 +263,8 @@ export class PetService extends Service {
|
|
|
257
263
|
private enabled: boolean
|
|
258
264
|
/** Status-decoration master switch (M5, #567); mirrored from settings. */
|
|
259
265
|
private decorationEnabled: boolean
|
|
266
|
+
/** The freshest plugin-authored announcement (dsh-usage linkage). */
|
|
267
|
+
private announcement: PetAnnouncement | undefined
|
|
260
268
|
private disposeActivity: (() => void) | undefined
|
|
261
269
|
/** Session whose most recent meaningful event currently drives the global pet. */
|
|
262
270
|
private displaySession: Session | undefined
|
|
@@ -340,6 +348,19 @@ export class PetService extends Service {
|
|
|
340
348
|
return this.view(currentSessionId)
|
|
341
349
|
}
|
|
342
350
|
|
|
351
|
+
/**
|
|
352
|
+
* RPC: one plugin-authored announcement bubble (dsh-usage linkage). The
|
|
353
|
+
* payload is validated into a bounded PetAnnouncement; a malformed one is
|
|
354
|
+
* dropped silently — a sibling plugin's bug must never surface as pet
|
|
355
|
+
* breakage. The announcement is in-memory only.
|
|
356
|
+
*/
|
|
357
|
+
announce(input: unknown): { ok: boolean } {
|
|
358
|
+
const parsed = parseAnnouncement(input, Date.now())
|
|
359
|
+
if (parsed === undefined) return { ok: false }
|
|
360
|
+
this.announcement = parsed
|
|
361
|
+
return { ok: true }
|
|
362
|
+
}
|
|
363
|
+
|
|
343
364
|
/** Current persisted display config (read-only view). */
|
|
344
365
|
display(): PetDisplayConfig {
|
|
345
366
|
return { ...this.ledger.snapshot.display }
|
|
@@ -813,6 +834,11 @@ export class PetService extends Service {
|
|
|
813
834
|
}
|
|
814
835
|
// Read-only: the ledger settles on economic events only, never on a read,
|
|
815
836
|
// so polling the state cannot trigger pet.json writes.
|
|
837
|
+
// An expired announcement simply stops appearing (the client's 2 s poll
|
|
838
|
+
// drops it); no timer owns its removal.
|
|
839
|
+
const announcement = this.announcement !== undefined && announcementFresh(this.announcement, Date.now())
|
|
840
|
+
? this.announcement
|
|
841
|
+
: undefined
|
|
816
842
|
return {
|
|
817
843
|
animation: snapshot.animation,
|
|
818
844
|
...(snapshot.bubble === undefined ? {} : { bubble: snapshot.bubble }),
|
|
@@ -820,6 +846,7 @@ export class PetService extends Service {
|
|
|
820
846
|
sessionActive: snapshot.sessionActive,
|
|
821
847
|
sessions,
|
|
822
848
|
...(decoration === undefined ? {} : { decoration }),
|
|
849
|
+
...(announcement === undefined ? {} : { announcement }),
|
|
823
850
|
affinity: this.ledger.affinityView(Date.now()),
|
|
824
851
|
display: { ...this.ledger.snapshot.display },
|
|
825
852
|
pet: {
|