@jcendal/opencode-digital-pet 0.2.0-dev.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/LICENSE +201 -0
  3. package/README.md +843 -0
  4. package/dist/adapters/opencode/create-server-hooks.d.ts +38 -0
  5. package/dist/adapters/opencode/digital-pet-toast.d.ts +33 -0
  6. package/dist/adapters/opencode/session-messages.d.ts +14 -0
  7. package/dist/adapters/opencode/usage-event-mapper.d.ts +4 -0
  8. package/dist/adapters/sqlite/bun-sqlite-driver.d.ts +6 -0
  9. package/dist/adapters/sqlite/sqlite-digital-pet-archive-reader.d.ts +11 -0
  10. package/dist/adapters/sqlite/sqlite-digital-pet-write-store.d.ts +11 -0
  11. package/dist/adapters/sqlite/sqlite-sidebar-snapshot-reader.d.ts +8 -0
  12. package/dist/cli/install.d.ts +8 -0
  13. package/dist/cli.d.ts +2 -0
  14. package/dist/cli.js +92 -0
  15. package/dist/commands/digital-pet-command-result.d.ts +17 -0
  16. package/dist/commands/digital-pet-freeze.d.ts +7 -0
  17. package/dist/commands/digital-pet-set.d.ts +10 -0
  18. package/dist/commands/digital-pet-spawn.d.ts +8 -0
  19. package/dist/commands/digital-pet-unfreeze.d.ts +7 -0
  20. package/dist/config/global-digital-pet-settings.d.ts +14 -0
  21. package/dist/dev/attach-dev-tools.js +6465 -0
  22. package/dist/digital-pet-animation/constants/evolution-battle.d.ts +5 -0
  23. package/dist/digital-pet-animation/constants/monster-artwork.d.ts +4 -0
  24. package/dist/digital-pet-animation/constants/presentation-timing.d.ts +19 -0
  25. package/dist/digital-pet-animation/idle/monster-action-policy.d.ts +7 -0
  26. package/dist/digital-pet-animation/idle/monster-animation.d.ts +73 -0
  27. package/dist/digital-pet-animation/idle/monster-artwork-mirror.d.ts +22 -0
  28. package/dist/digital-pet-animation/idle/monster-walking-policy.d.ts +42 -0
  29. package/dist/digital-pet-animation/render/positioned-artwork.d.ts +3 -0
  30. package/dist/digital-pet-animation/sequences/defeat-artwork.d.ts +7 -0
  31. package/dist/digital-pet-animation/sequences/evolution-artwork.d.ts +8 -0
  32. package/dist/digital-pet-animation/sequences/evolution-battle-artwork.d.ts +33 -0
  33. package/dist/digital-pet-animation/sessions/evolution-battle-session.d.ts +14 -0
  34. package/dist/digital-pet-animation/sessions/evolution-reveal-session.d.ts +9 -0
  35. package/dist/digital-pet-animation/utils/assert-never.d.ts +1 -0
  36. package/dist/digital-pet-animation/utils/random.d.ts +2 -0
  37. package/dist/digital-pet-animation/utils/sleep.d.ts +1 -0
  38. package/dist/digital-pet-core/adapters/sqlite/app-data-path.d.ts +5 -0
  39. package/dist/digital-pet-core/adapters/sqlite/sqlite-digital-pet-schema.d.ts +48 -0
  40. package/dist/digital-pet-core/adapters/sqlite/sqlite-digital-pet-types.d.ts +43 -0
  41. package/dist/digital-pet-core/adapters/sqlite/sqlite-digital-pet-write-store.d.ts +8 -0
  42. package/dist/digital-pet-core/adapters/sqlite/sqlite-migrations.d.ts +4 -0
  43. package/dist/digital-pet-core/application/models/digital-pet-archive.d.ts +21 -0
  44. package/dist/digital-pet-core/application/models/digital-pet-control.d.ts +17 -0
  45. package/dist/digital-pet-core/application/models/sidebar-card-inputs.d.ts +13 -0
  46. package/dist/digital-pet-core/application/models/spawn-partner.d.ts +9 -0
  47. package/dist/digital-pet-core/application/models/usage.d.ts +42 -0
  48. package/dist/digital-pet-core/application/ports/digital-pet-archive.d.ts +4 -0
  49. package/dist/digital-pet-core/application/ports/digital-pet-control.d.ts +6 -0
  50. package/dist/digital-pet-core/application/ports/partner-lifecycle.d.ts +5 -0
  51. package/dist/digital-pet-core/application/ports/sidebar-snapshot.d.ts +13 -0
  52. package/dist/digital-pet-core/application/ports/usage-ledger.d.ts +5 -0
  53. package/dist/digital-pet-core/application/use-cases/freeze-digital-pet.d.ts +3 -0
  54. package/dist/digital-pet-core/application/use-cases/get-sidebar-card-inputs.d.ts +4 -0
  55. package/dist/digital-pet-core/application/use-cases/reconcile-usage.d.ts +14 -0
  56. package/dist/digital-pet-core/application/use-cases/record-usage.d.ts +14 -0
  57. package/dist/digital-pet-core/application/use-cases/resolve-evolution-battle.d.ts +8 -0
  58. package/dist/digital-pet-core/application/use-cases/set-digital-pet-cheat-node.d.ts +3 -0
  59. package/dist/digital-pet-core/application/use-cases/spawn-partner.d.ts +3 -0
  60. package/dist/digital-pet-core/application/use-cases/unfreeze-digital-pet.d.ts +3 -0
  61. package/dist/digital-pet-core/config/defaults.d.ts +68 -0
  62. package/dist/digital-pet-core/config/normalize.d.ts +2 -0
  63. package/dist/digital-pet-core/config/types.d.ts +13 -0
  64. package/dist/digital-pet-core/data/catalog.d.ts +14 -0
  65. package/dist/digital-pet-core/data/digimon-data.d.ts +12 -0
  66. package/dist/digital-pet-core/data/monster-frame-catalog.d.ts +16 -0
  67. package/dist/digital-pet-core/data/monster-frame-data.d.ts +2 -0
  68. package/dist/digital-pet-core/data/stages.d.ts +16 -0
  69. package/dist/digital-pet-core/domain/digimon-node.d.ts +14 -0
  70. package/dist/digital-pet-core/domain/evolution-battle.d.ts +4 -0
  71. package/dist/digital-pet-core/domain/evolution.d.ts +23 -0
  72. package/dist/digital-pet-core/domain/partner.d.ts +18 -0
  73. package/dist/digital-pet-core/domain/stage.d.ts +3 -0
  74. package/dist/digital-pet-core/ports/sqlite-executor.d.ts +7 -0
  75. package/dist/digital-pet-core/view-models/dex-view-model.d.ts +19 -0
  76. package/dist/digital-pet-core/view-models/history-view-model.d.ts +20 -0
  77. package/dist/digital-pet-core/view-models/sidebar-view-model.d.ts +20 -0
  78. package/dist/index.d.ts +10 -0
  79. package/dist/index.js +7461 -0
  80. package/dist/tui/digital-pet-command-layer.d.ts +20 -0
  81. package/dist/tui/digital-pet-dex-dialog.d.ts +11 -0
  82. package/dist/tui/digital-pet-history-dialog.d.ts +11 -0
  83. package/dist/tui/open-in-browser.d.ts +2 -0
  84. package/dist/tui/sidebar-card.d.ts +10 -0
  85. package/dist/tui/sidebar-poll-loop.d.ts +13 -0
  86. package/dist/tui.d.ts +56 -0
  87. package/dist/tui.js +9720 -0
  88. package/package.json +106 -0
@@ -0,0 +1,20 @@
1
+ /** @jsxImportSource @opentui/solid */
2
+ import type { TuiDialogStack, TuiKeymap, TuiTheme } from "@opencode-ai/plugin/tui";
3
+ import type { DigitalPetArchiveReader } from "../digital-pet-core/application/ports/digital-pet-archive.js";
4
+ import type { ResolvedDigitalPetSettings } from "../digital-pet-core/config/types.js";
5
+ import type { DigimonCatalog } from "../digital-pet-core/data/catalog.js";
6
+ export type DigitalPetCommandLayerApi = {
7
+ readonly keymap: Pick<TuiKeymap, "registerLayer">;
8
+ readonly ui: {
9
+ readonly dialog: Pick<TuiDialogStack, "replace" | "clear" | "setSize">;
10
+ };
11
+ readonly theme: TuiTheme;
12
+ };
13
+ export type DigitalPetCommandLayerDependencies = {
14
+ readonly api: DigitalPetCommandLayerApi;
15
+ readonly reader: DigitalPetArchiveReader;
16
+ readonly catalog: DigimonCatalog;
17
+ readonly settings: ResolvedDigitalPetSettings;
18
+ readonly isDisposed: () => boolean;
19
+ };
20
+ export declare const registerDigitalPetCommandLayer: ({ api, reader, catalog, settings, isDisposed, }: DigitalPetCommandLayerDependencies) => ReturnType<TuiKeymap["registerLayer"]>;
@@ -0,0 +1,11 @@
1
+ import type { TuiTheme } from "@opencode-ai/plugin/tui";
2
+ import type { DexViewModel } from "../digital-pet-core/view-models/dex-view-model.js";
3
+ export type DigitalPetDexDialogTheme = {
4
+ readonly current: Pick<TuiTheme["current"], "primary" | "success" | "textMuted">;
5
+ };
6
+ export type DigitalPetDexDialogProps = {
7
+ readonly theme: DigitalPetDexDialogTheme;
8
+ readonly model: DexViewModel;
9
+ readonly onClose: () => void;
10
+ };
11
+ export declare function DigitalPetDexDialog(props: DigitalPetDexDialogProps): import("solid-js").JSX.Element;
@@ -0,0 +1,11 @@
1
+ import type { TuiTheme } from "@opencode-ai/plugin/tui";
2
+ import type { HistoryViewModel } from "../digital-pet-core/view-models/history-view-model.js";
3
+ export type DigitalPetHistoryDialogTheme = {
4
+ readonly current: Pick<TuiTheme["current"], "primary">;
5
+ };
6
+ export type DigitalPetHistoryDialogProps = {
7
+ readonly theme: DigitalPetHistoryDialogTheme;
8
+ readonly model: HistoryViewModel;
9
+ readonly onClose: () => void;
10
+ };
11
+ export declare function DigitalPetHistoryDialog(props: DigitalPetHistoryDialogProps): import("solid-js").JSX.Element;
@@ -0,0 +1,2 @@
1
+ export type ProcessSpawner = (command: readonly string[]) => void;
2
+ export declare const openInBrowser: (url: string, spawner?: ProcessSpawner) => void;
@@ -0,0 +1,10 @@
1
+ import { type Accessor } from "solid-js";
2
+ import type { SidebarCardModel } from "../digital-pet-core/view-models/sidebar-view-model.js";
3
+ import type { MonsterAnimationOutput, MonsterAnimationResult } from "../digital-pet-animation/idle/monster-animation.js";
4
+ export declare const DigitalPetSidebarCard: (props: {
5
+ readonly model: Accessor<SidebarCardModel>;
6
+ readonly animation: Accessor<MonsterAnimationOutput | MonsterAnimationResult>;
7
+ readonly customArtwork?: Accessor<string | undefined>;
8
+ readonly onArtworkWidthChange?: (width: number) => void;
9
+ readonly onUrlClick?: (url: string) => void;
10
+ }) => import("solid-js").JSX.Element;
@@ -0,0 +1,13 @@
1
+ export type SidebarPollLoopOptions<TModel, THandle> = {
2
+ readonly intervalMs: number;
3
+ readonly load: () => Promise<TModel>;
4
+ readonly apply: (model: TModel) => void;
5
+ readonly schedule: (callback: () => void, intervalMs: number) => THandle;
6
+ readonly clear: (handle: THandle) => void;
7
+ };
8
+ export type SidebarPollLoop = {
9
+ readonly start: () => void;
10
+ readonly refresh: () => void;
11
+ readonly dispose: () => void;
12
+ };
13
+ export declare const createSidebarPollLoop: <TModel, THandle>(options: SidebarPollLoopOptions<TModel, THandle>) => SidebarPollLoop;
package/dist/tui.d.ts ADDED
@@ -0,0 +1,56 @@
1
+ import type { EventMessagePartUpdated, EventMessageUpdated, EventSessionStatus } from "@opencode-ai/sdk/v2";
2
+ import type { TuiPlugin, TuiDialogProps, TuiDialogStack, TuiTheme, TuiKeymap } from "@opencode-ai/plugin/tui";
3
+ import type { JSX } from "@opentui/solid";
4
+ import type { SidebarCardInputs } from "./digital-pet-core/application/models/sidebar-card-inputs.js";
5
+ import type { SidebarSnapshot } from "./digital-pet-core/application/ports/sidebar-snapshot.js";
6
+ import type { DigitalPetArchiveReader } from "./digital-pet-core/application/ports/digital-pet-archive.js";
7
+ import type { EvolutionBattleRepository } from "./digital-pet-core/application/use-cases/resolve-evolution-battle.js";
8
+ import type { ResolvedDigitalPetSettings } from "./digital-pet-core/config/types.js";
9
+ import { type MonsterAnimationOutput } from "./digital-pet-animation/idle/monster-animation.js";
10
+ import { type DigitalPetToastNotifier } from "./adapters/opencode/digital-pet-toast.js";
11
+ export type TuiCompositionApi = {
12
+ readonly event: {
13
+ readonly on: (...subscription: ActivitySubscription) => () => void;
14
+ };
15
+ readonly renderer: {
16
+ readonly requestRender: () => void;
17
+ };
18
+ readonly lifecycle: {
19
+ readonly onDispose: (callback: () => void) => () => void;
20
+ };
21
+ readonly slots: {
22
+ readonly register: (plugin: {
23
+ readonly slots: {
24
+ readonly sidebar_content: () => JSX.Element;
25
+ };
26
+ }) => string;
27
+ };
28
+ readonly keymap?: {
29
+ readonly registerLayer: TuiKeymap["registerLayer"];
30
+ };
31
+ readonly ui?: {
32
+ readonly dialog: Pick<TuiDialogStack, "replace" | "clear" | "setSize">;
33
+ readonly Dialog: (props: TuiDialogProps) => JSX.Element;
34
+ };
35
+ readonly theme?: TuiTheme;
36
+ };
37
+ type ActivitySubscription = readonly [type: "message.updated", handler: (event: EventMessageUpdated) => void] | readonly [type: "message.part.updated", handler: (event: EventMessagePartUpdated) => void] | readonly [type: "session.status", handler: (event: EventSessionStatus) => void];
38
+ type TuiSchedulingOptions = {
39
+ readonly scheduleVisualInterval?: (callback: () => void, intervalMs: number) => () => void;
40
+ readonly schedulePollTimeout?: (callback: () => void, intervalMs: number) => () => void;
41
+ readonly nowMs?: () => number;
42
+ readonly random?: () => number;
43
+ readonly onAnimation?: (output: MonsterAnimationOutput) => void;
44
+ readonly archiveReader?: DigitalPetArchiveReader;
45
+ readonly battleRepository?: EvolutionBattleRepository;
46
+ readonly getSnapshot?: () => SidebarSnapshot | null;
47
+ readonly notify?: DigitalPetToastNotifier;
48
+ readonly closeBattleRepository?: () => Promise<void>;
49
+ };
50
+ export declare const createTui: (loadInputs: () => SidebarCardInputs | Promise<SidebarCardInputs>, settings: ResolvedDigitalPetSettings, scheduling?: TuiSchedulingOptions) => (api: TuiCompositionApi) => Promise<void>;
51
+ export declare const tui: TuiPlugin;
52
+ declare const plugin: {
53
+ readonly id: "opencode-digital-pet";
54
+ readonly tui: TuiPlugin;
55
+ };
56
+ export default plugin;