@rpgm-tools/neo-angband-core 1.18.0 → 1.19.1
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.md +2 -3
- package/dist/agent/boundary.d.ts +87 -0
- package/dist/agent/boundary.d.ts.map +1 -0
- package/dist/agent/boundary.js +116 -0
- package/dist/agent/boundary.js.map +1 -0
- package/dist/agent/entity-views.d.ts.map +1 -1
- package/dist/agent/entity-views.js +59 -28
- package/dist/agent/entity-views.js.map +1 -1
- package/dist/agent/index.d.ts +5 -0
- package/dist/agent/index.d.ts.map +1 -1
- package/dist/agent/index.js +2 -0
- package/dist/agent/index.js.map +1 -1
- package/dist/agent/inspect.d.ts +159 -0
- package/dist/agent/inspect.d.ts.map +1 -0
- package/dist/agent/inspect.js +324 -0
- package/dist/agent/inspect.js.map +1 -0
- package/dist/agent/known-level.d.ts +72 -0
- package/dist/agent/known-level.d.ts.map +1 -0
- package/dist/agent/known-level.js +114 -0
- package/dist/agent/known-level.js.map +1 -0
- package/dist/agent/loadout.d.ts.map +1 -1
- package/dist/agent/loadout.js +20 -1
- package/dist/agent/loadout.js.map +1 -1
- package/dist/agent/perceive.d.ts.map +1 -1
- package/dist/agent/perceive.js +65 -7
- package/dist/agent/perceive.js.map +1 -1
- package/dist/agent/types.d.ts +181 -11
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/color.d.ts +11 -0
- package/dist/color.d.ts.map +1 -1
- package/dist/color.js +46 -0
- package/dist/color.js.map +1 -1
- package/dist/combat/melee.d.ts +2 -0
- package/dist/combat/melee.d.ts.map +1 -1
- package/dist/combat/melee.js +8 -3
- package/dist/combat/melee.js.map +1 -1
- package/dist/combat/mon-melee.d.ts +1 -0
- package/dist/combat/mon-melee.d.ts.map +1 -1
- package/dist/combat/mon-melee.js +3 -0
- package/dist/combat/mon-melee.js.map +1 -1
- package/dist/datafile.d.ts +2 -5
- package/dist/datafile.d.ts.map +1 -1
- package/dist/datafile.js.map +1 -1
- package/dist/effects/handlers.d.ts.map +1 -1
- package/dist/effects/handlers.js +2 -0
- package/dist/effects/handlers.js.map +1 -1
- package/dist/effects/interpreter.d.ts +2 -0
- package/dist/effects/interpreter.d.ts.map +1 -1
- package/dist/effects/interpreter.js.map +1 -1
- package/dist/events.d.ts +73 -1
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +6 -1
- package/dist/events.js.map +1 -1
- package/dist/game/context.d.ts +17 -0
- package/dist/game/context.d.ts.map +1 -1
- package/dist/game/context.js +2 -0
- package/dist/game/context.js.map +1 -1
- package/dist/game/describe.d.ts +5 -1
- package/dist/game/describe.d.ts.map +1 -1
- package/dist/game/describe.js +11 -2
- package/dist/game/describe.js.map +1 -1
- package/dist/game/effect-attack.d.ts +2 -0
- package/dist/game/effect-attack.d.ts.map +1 -1
- package/dist/game/effect-attack.js +11 -9
- package/dist/game/effect-attack.js.map +1 -1
- package/dist/game/effect-env.d.ts.map +1 -1
- package/dist/game/effect-env.js +8 -1
- package/dist/game/effect-env.js.map +1 -1
- package/dist/game/effect-general.d.ts.map +1 -1
- package/dist/game/effect-general.js +7 -3
- package/dist/game/effect-general.js.map +1 -1
- package/dist/game/effect-melee.d.ts.map +1 -1
- package/dist/game/effect-melee.js +14 -0
- package/dist/game/effect-melee.js.map +1 -1
- package/dist/game/effect-mon-origin.d.ts.map +1 -1
- package/dist/game/effect-mon-origin.js +2 -0
- package/dist/game/effect-mon-origin.js.map +1 -1
- package/dist/game/effect-monster.d.ts.map +1 -1
- package/dist/game/effect-monster.js +5 -0
- package/dist/game/effect-monster.js.map +1 -1
- package/dist/game/effect-teleport.d.ts.map +1 -1
- package/dist/game/effect-teleport.js +8 -1
- package/dist/game/effect-teleport.js.map +1 -1
- package/dist/game/effect-terrain.d.ts.map +1 -1
- package/dist/game/effect-terrain.js +9 -3
- package/dist/game/effect-terrain.js.map +1 -1
- package/dist/game/loop.d.ts +4 -0
- package/dist/game/loop.d.ts.map +1 -1
- package/dist/game/loop.js +27 -3
- package/dist/game/loop.js.map +1 -1
- package/dist/game/mon-cmd.d.ts.map +1 -1
- package/dist/game/mon-cmd.js +20 -12
- package/dist/game/mon-cmd.js.map +1 -1
- package/dist/game/mon-death.d.ts +1 -1
- package/dist/game/mon-death.d.ts.map +1 -1
- package/dist/game/mon-death.js +4 -2
- package/dist/game/mon-death.js.map +1 -1
- package/dist/game/mon-group.d.ts.map +1 -1
- package/dist/game/mon-group.js +2 -1
- package/dist/game/mon-group.js.map +1 -1
- package/dist/game/mon-message.d.ts +9 -0
- package/dist/game/mon-message.d.ts.map +1 -1
- package/dist/game/mon-message.js +14 -0
- package/dist/game/mon-message.js.map +1 -1
- package/dist/game/mon-place.d.ts.map +1 -1
- package/dist/game/mon-place.js +4 -1
- package/dist/game/mon-place.js.map +1 -1
- package/dist/game/mon-side.d.ts.map +1 -1
- package/dist/game/mon-side.js +5 -0
- package/dist/game/mon-side.js.map +1 -1
- package/dist/game/monster-turn.d.ts.map +1 -1
- package/dist/game/monster-turn.js +14 -15
- package/dist/game/monster-turn.js.map +1 -1
- package/dist/game/obj-cmd.d.ts +4 -0
- package/dist/game/obj-cmd.d.ts.map +1 -1
- package/dist/game/obj-cmd.js +31 -1
- package/dist/game/obj-cmd.js.map +1 -1
- package/dist/game/object-inspect.d.ts +2 -2
- package/dist/game/object-inspect.d.ts.map +1 -1
- package/dist/game/object-inspect.js +7 -5
- package/dist/game/object-inspect.js.map +1 -1
- package/dist/game/pickup.d.ts.map +1 -1
- package/dist/game/pickup.js +10 -1
- package/dist/game/pickup.js.map +1 -1
- package/dist/game/player-turn.d.ts.map +1 -1
- package/dist/game/player-turn.js +38 -8
- package/dist/game/player-turn.js.map +1 -1
- package/dist/game/project-cast.d.ts +4 -0
- package/dist/game/project-cast.d.ts.map +1 -1
- package/dist/game/project-cast.js +11 -2
- package/dist/game/project-cast.js.map +1 -1
- package/dist/game/project-feat.d.ts.map +1 -1
- package/dist/game/project-feat.js +2 -0
- package/dist/game/project-feat.js.map +1 -1
- package/dist/game/project-monster.d.ts +1 -0
- package/dist/game/project-monster.d.ts.map +1 -1
- package/dist/game/project-monster.js +13 -1
- package/dist/game/project-monster.js.map +1 -1
- package/dist/game/project-player.d.ts +1 -0
- package/dist/game/project-player.d.ts.map +1 -1
- package/dist/game/project-player.js +4 -0
- package/dist/game/project-player.js.map +1 -1
- package/dist/game/ranged-cmd.d.ts.map +1 -1
- package/dist/game/ranged-cmd.js +7 -2
- package/dist/game/ranged-cmd.js.map +1 -1
- package/dist/game/resolved-events.d.ts +10 -0
- package/dist/game/resolved-events.d.ts.map +1 -0
- package/dist/game/resolved-events.js +28 -0
- package/dist/game/resolved-events.js.map +1 -0
- package/dist/game/scheduler.d.ts.map +1 -1
- package/dist/game/scheduler.js +9 -2
- package/dist/game/scheduler.js.map +1 -1
- package/dist/game/steal.d.ts.map +1 -1
- package/dist/game/steal.js +2 -0
- package/dist/game/steal.js.map +1 -1
- package/dist/game/target.d.ts.map +1 -1
- package/dist/game/target.js +3 -0
- package/dist/game/target.js.map +1 -1
- package/dist/game/thrust.d.ts.map +1 -1
- package/dist/game/thrust.js +7 -0
- package/dist/game/thrust.js.map +1 -1
- package/dist/game/trap.d.ts.map +1 -1
- package/dist/game/trap.js +3 -0
- package/dist/game/trap.js.map +1 -1
- package/dist/game/world.d.ts.map +1 -1
- package/dist/game/world.js +4 -0
- package/dist/game/world.js.map +1 -1
- package/dist/host/io.d.ts +1 -1
- package/dist/host/io.d.ts.map +1 -1
- package/dist/host/io.js +1 -1
- package/dist/host/io.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mod/save-blocks.d.ts +1 -1
- package/dist/mon/lore-file.d.ts +24 -2
- package/dist/mon/lore-file.d.ts.map +1 -1
- package/dist/mon/lore-file.js +115 -23
- package/dist/mon/lore-file.js.map +1 -1
- package/dist/mon/steal.d.ts +3 -0
- package/dist/mon/steal.d.ts.map +1 -1
- package/dist/mon/steal.js +3 -3
- package/dist/mon/steal.js.map +1 -1
- package/dist/mon/take-hit.d.ts +4 -1
- package/dist/mon/take-hit.d.ts.map +1 -1
- package/dist/mon/take-hit.js +3 -3
- package/dist/mon/take-hit.js.map +1 -1
- package/dist/obj/randart-file.d.ts +44 -13
- package/dist/obj/randart-file.d.ts.map +1 -1
- package/dist/obj/randart-file.js +304 -53
- package/dist/obj/randart-file.js.map +1 -1
- package/dist/obj/randart.d.ts +1 -1
- package/dist/obj/randart.d.ts.map +1 -1
- package/dist/obj/randart.js +29 -5
- package/dist/obj/randart.js.map +1 -1
- package/dist/player/options-file.d.ts +11 -29
- package/dist/player/options-file.d.ts.map +1 -1
- package/dist/player/options-file.js +98 -32
- package/dist/player/options-file.js.map +1 -1
- package/dist/player/options.d.ts +1 -1
- package/dist/player/options.js +1 -1
- package/dist/save/compress.d.ts +2 -2
- package/dist/save/compress.js +2 -2
- package/dist/session/game.d.ts.map +1 -1
- package/dist/session/game.js +50 -9
- package/dist/session/game.js.map +1 -1
- package/dist/session/save.d.ts +8 -1
- package/dist/session/save.d.ts.map +1 -1
- package/dist/session/save.js +22 -16
- package/dist/session/save.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/visuals/prefs.d.ts +2 -26
- package/dist/visuals/prefs.d.ts.map +1 -1
- package/dist/visuals/prefs.js +2 -29
- package/dist/visuals/prefs.js.map +1 -1
- package/package.json +7 -1
- package/src/agent/boundary.ts +175 -0
- package/src/agent/entity-views.ts +57 -27
- package/src/agent/index.ts +17 -0
- package/src/agent/inspect.ts +389 -0
- package/src/agent/known-level.ts +196 -0
- package/src/agent/loadout.ts +19 -0
- package/src/agent/perceive.ts +70 -6
- package/src/agent/types.ts +150 -11
- package/src/color.ts +48 -0
- package/src/combat/melee.ts +10 -1
- package/src/combat/mon-melee.ts +4 -0
- package/src/datafile.ts +2 -5
- package/src/effects/handlers.ts +2 -0
- package/src/effects/interpreter.ts +2 -0
- package/src/events.ts +68 -1
- package/src/game/context.ts +19 -0
- package/src/game/describe.ts +13 -2
- package/src/game/effect-attack.ts +11 -7
- package/src/game/effect-env.ts +8 -1
- package/src/game/effect-general.ts +7 -3
- package/src/game/effect-melee.ts +16 -0
- package/src/game/effect-mon-origin.ts +3 -0
- package/src/game/effect-monster.ts +7 -0
- package/src/game/effect-teleport.ts +8 -1
- package/src/game/effect-terrain.ts +11 -2
- package/src/game/loop.ts +32 -3
- package/src/game/mon-cmd.ts +22 -11
- package/src/game/mon-death.ts +5 -0
- package/src/game/mon-group.ts +2 -1
- package/src/game/mon-message.ts +15 -0
- package/src/game/mon-place.ts +4 -1
- package/src/game/mon-side.ts +6 -0
- package/src/game/monster-turn.ts +13 -16
- package/src/game/obj-cmd.ts +26 -0
- package/src/game/object-inspect.ts +7 -3
- package/src/game/pickup.ts +9 -1
- package/src/game/player-turn.ts +41 -8
- package/src/game/project-cast.ts +15 -2
- package/src/game/project-feat.ts +2 -0
- package/src/game/project-monster.ts +20 -1
- package/src/game/project-player.ts +5 -0
- package/src/game/ranged-cmd.ts +7 -2
- package/src/game/resolved-events.ts +49 -0
- package/src/game/scheduler.ts +10 -2
- package/src/game/steal.ts +2 -0
- package/src/game/target.ts +3 -0
- package/src/game/thrust.ts +7 -0
- package/src/game/trap.ts +3 -0
- package/src/game/world.ts +5 -0
- package/src/host/io.ts +1 -1
- package/src/index.ts +1 -0
- package/src/mon/lore-file.ts +127 -28
- package/src/mon/steal.ts +6 -4
- package/src/mon/take-hit.ts +6 -2
- package/src/obj/randart-file.ts +313 -58
- package/src/obj/randart.ts +32 -11
- package/src/player/options-file.ts +100 -42
- package/src/player/options.ts +1 -1
- package/src/save/compress.ts +2 -2
- package/src/session/game.ts +55 -8
- package/src/session/save.ts +33 -17
- package/src/version.ts +1 -1
- package/src/visuals/prefs.ts +2 -52
package/README.md
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# @rpgm-tools/neo-angband-core
|
|
2
2
|
|
|
3
|
-
The headless game engine behind [Neo Angband](https://github.com/neostryder/neo-angband),
|
|
4
|
-
a TypeScript port of [Angband](https://angband.github.io/angband/) 4.2.6.
|
|
3
|
+
The headless game engine behind [Neo Angband](https://github.com/neostryder/neo-angband), a faithful but moddable port of [Angband](https://angband.github.io/angband/), meant to be playable almost anywhere.
|
|
5
4
|
|
|
6
5
|
No renderer, no input, no DOM, no filesystem: rules, world, entities, effects,
|
|
7
6
|
generation and the save format, as plain modules. Runs in Node and in a browser.
|
|
@@ -32,7 +31,7 @@ import { Rng, ENGINE_VERSION, PARITY_BASELINE } from "@rpgm-tools/neo-angband-co
|
|
|
32
31
|
const rng = new Rng(1234);
|
|
33
32
|
console.log(rng.damroll(3, 6), rng.damroll(3, 6), rng.damroll(3, 6)); // 9 13 8
|
|
34
33
|
|
|
35
|
-
console.log(ENGINE_VERSION, PARITY_BASELINE); // 1.
|
|
34
|
+
console.log(ENGINE_VERSION, PARITY_BASELINE); // 1.19.1 4.2.6
|
|
36
35
|
```
|
|
37
36
|
|
|
38
37
|
Two entry points:
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The input boundary: one token for each input wait, and one immutable capture
|
|
3
|
+
* of the game as it stands at that wait.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. Every AgentView accessor is its own read. A presenter that
|
|
6
|
+
* draws the player from one call, the pack from a second and the monsters from a
|
|
7
|
+
* third cannot show that the three describe the same moment, and a presenter
|
|
8
|
+
* that sends an action back cannot show that the action was chosen against the
|
|
9
|
+
* game that will receive it. A whole-interface mod needs both: a single capture
|
|
10
|
+
* it can draw from, and a token it can hand back with an action so the game can
|
|
11
|
+
* refuse one aimed at a state that has since moved on.
|
|
12
|
+
*
|
|
13
|
+
* WHAT MOVES THE TOKEN. The revision is a counter on GameState, raised by
|
|
14
|
+
* `bumpInputRevision`, and it is raised exactly where the game changes between
|
|
15
|
+
* two input waits:
|
|
16
|
+
* - `runGameLoop`, when a call consumed a command or advanced the game turn. A
|
|
17
|
+
* call that returned INPUT with nothing consumed changed nothing, so a host
|
|
18
|
+
* that re-enters the loop while it waits does not age a token it gave out.
|
|
19
|
+
* - a completed level change, which the host performs after LEVEL_CHANGE and
|
|
20
|
+
* which does not pass back through the loop before the next wait.
|
|
21
|
+
* - the target setters, which change what "the target" means without a turn.
|
|
22
|
+
* Anything that changes state through a queued command is covered by the first.
|
|
23
|
+
*
|
|
24
|
+
* THE EPOCH. The revision starts at 0 for every GameState, so a token kept
|
|
25
|
+
* across a load would otherwise match the new game's first wait. Each GameState
|
|
26
|
+
* gets its own epoch from a module counter the first time it is asked for one,
|
|
27
|
+
* and a token only matches when both numbers do. Neither number is saved, and
|
|
28
|
+
* neither touches the game RNG.
|
|
29
|
+
*
|
|
30
|
+
* PURE. Reading a token or taking a capture changes no game state, no knowledge
|
|
31
|
+
* and no RNG stream; boundary.test.ts holds that against a serialized save, the
|
|
32
|
+
* RNG state, the turn and the command queue.
|
|
33
|
+
*/
|
|
34
|
+
import type { GameState } from "../game/context.js";
|
|
35
|
+
import type { AgentView, ItemView, MonsterView, PlayerView, SpellbookView, StoreView, TargetView } from "./types.js";
|
|
36
|
+
/** Identifies one input wait of one game. Compare with `tokenIsCurrent`. */
|
|
37
|
+
export interface InputToken {
|
|
38
|
+
readonly epoch: number;
|
|
39
|
+
readonly revision: number;
|
|
40
|
+
}
|
|
41
|
+
/** Mark that the game changed since the last input wait. */
|
|
42
|
+
export declare function bumpInputRevision(state: GameState): void;
|
|
43
|
+
/** The token for the game as it stands now. Frozen. */
|
|
44
|
+
export declare function inputToken(state: GameState): InputToken;
|
|
45
|
+
/**
|
|
46
|
+
* Whether `token` names the game as it stands now. Anything that is not a token
|
|
47
|
+
* of the right shape, including null, is not current.
|
|
48
|
+
*/
|
|
49
|
+
export declare function tokenIsCurrent(state: GameState, token: InputToken | null | undefined): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* The game at one input wait, as plain frozen data.
|
|
52
|
+
*
|
|
53
|
+
* Each part is what the AgentView accessor of the same name returns. A part
|
|
54
|
+
* whose `state:<domain>.read` capability the caller does not hold is null
|
|
55
|
+
* rather than a thrown error, so a capture is always available and never
|
|
56
|
+
* carries more than the caller may read.
|
|
57
|
+
*
|
|
58
|
+
* The map and the message log are not here. The map is large and has its own
|
|
59
|
+
* bulk read; messages() drains a per-decision buffer, so calling it from a
|
|
60
|
+
* capture would change what the next decision sees.
|
|
61
|
+
*/
|
|
62
|
+
export interface CoreSnapshot {
|
|
63
|
+
readonly token: InputToken;
|
|
64
|
+
readonly turn: number | null;
|
|
65
|
+
readonly player: PlayerView | null;
|
|
66
|
+
readonly inventory: readonly ItemView[] | null;
|
|
67
|
+
readonly equipment: readonly (ItemView | null)[] | null;
|
|
68
|
+
readonly equipmentSlots: readonly {
|
|
69
|
+
readonly type: string;
|
|
70
|
+
readonly name: string;
|
|
71
|
+
}[] | null;
|
|
72
|
+
readonly quiver: readonly ItemView[] | null;
|
|
73
|
+
readonly floorHere: readonly ItemView[] | null;
|
|
74
|
+
readonly monsters: readonly MonsterView[] | null;
|
|
75
|
+
readonly target: TargetView | null;
|
|
76
|
+
/** False when the target part was not readable, so null above is ambiguous. */
|
|
77
|
+
readonly targetReadable: boolean;
|
|
78
|
+
readonly stores: readonly StoreView[] | null;
|
|
79
|
+
readonly spellbooks: readonly SpellbookView[] | null;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Capture the game through `view`'s own accessors, so every capability check
|
|
83
|
+
* they make still applies. The result is a structured clone, deep-frozen: it
|
|
84
|
+
* shares no object with the live game or with a previous capture.
|
|
85
|
+
*/
|
|
86
|
+
export declare function captureCoreSnapshot(state: GameState, view: AgentView): CoreSnapshot;
|
|
87
|
+
//# sourceMappingURL=boundary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary.d.ts","sourceRoot":"","sources":["../../src/agent/boundary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EACV,SAAS,EACT,QAAQ,EACR,WAAW,EACX,UAAU,EACV,aAAa,EACb,SAAS,EACT,UAAU,EACX,MAAM,YAAY,CAAC;AAEpB,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAcD,4DAA4D;AAC5D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAExD;AAED,uDAAuD;AACvD,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAKvD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,SAAS,GACnC,OAAO,CAMT;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACxD,QAAQ,CAAC,cAAc,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,GAAG,IAAI,CAAC;IAC5F,QAAQ,CAAC,MAAM,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC5C,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,IAAI,CAAC;IAC/C,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,GAAG,IAAI,CAAC;IACjD,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,+EAA+E;IAC/E,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,UAAU,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,CAAC;CACtD;AA0BD;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,SAAS,GACd,YAAY,CAqBd"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The input boundary: one token for each input wait, and one immutable capture
|
|
3
|
+
* of the game as it stands at that wait.
|
|
4
|
+
*
|
|
5
|
+
* WHY THIS EXISTS. Every AgentView accessor is its own read. A presenter that
|
|
6
|
+
* draws the player from one call, the pack from a second and the monsters from a
|
|
7
|
+
* third cannot show that the three describe the same moment, and a presenter
|
|
8
|
+
* that sends an action back cannot show that the action was chosen against the
|
|
9
|
+
* game that will receive it. A whole-interface mod needs both: a single capture
|
|
10
|
+
* it can draw from, and a token it can hand back with an action so the game can
|
|
11
|
+
* refuse one aimed at a state that has since moved on.
|
|
12
|
+
*
|
|
13
|
+
* WHAT MOVES THE TOKEN. The revision is a counter on GameState, raised by
|
|
14
|
+
* `bumpInputRevision`, and it is raised exactly where the game changes between
|
|
15
|
+
* two input waits:
|
|
16
|
+
* - `runGameLoop`, when a call consumed a command or advanced the game turn. A
|
|
17
|
+
* call that returned INPUT with nothing consumed changed nothing, so a host
|
|
18
|
+
* that re-enters the loop while it waits does not age a token it gave out.
|
|
19
|
+
* - a completed level change, which the host performs after LEVEL_CHANGE and
|
|
20
|
+
* which does not pass back through the loop before the next wait.
|
|
21
|
+
* - the target setters, which change what "the target" means without a turn.
|
|
22
|
+
* Anything that changes state through a queued command is covered by the first.
|
|
23
|
+
*
|
|
24
|
+
* THE EPOCH. The revision starts at 0 for every GameState, so a token kept
|
|
25
|
+
* across a load would otherwise match the new game's first wait. Each GameState
|
|
26
|
+
* gets its own epoch from a module counter the first time it is asked for one,
|
|
27
|
+
* and a token only matches when both numbers do. Neither number is saved, and
|
|
28
|
+
* neither touches the game RNG.
|
|
29
|
+
*
|
|
30
|
+
* PURE. Reading a token or taking a capture changes no game state, no knowledge
|
|
31
|
+
* and no RNG stream; boundary.test.ts holds that against a serialized save, the
|
|
32
|
+
* RNG state, the turn and the command queue.
|
|
33
|
+
*/
|
|
34
|
+
import { AgentCapabilityError } from "./types.js";
|
|
35
|
+
const epochs = new WeakMap();
|
|
36
|
+
let nextEpoch = 1;
|
|
37
|
+
function epochOf(state) {
|
|
38
|
+
let e = epochs.get(state);
|
|
39
|
+
if (e === undefined) {
|
|
40
|
+
e = nextEpoch++;
|
|
41
|
+
epochs.set(state, e);
|
|
42
|
+
}
|
|
43
|
+
return e;
|
|
44
|
+
}
|
|
45
|
+
/** Mark that the game changed since the last input wait. */
|
|
46
|
+
export function bumpInputRevision(state) {
|
|
47
|
+
state.inputRevision = (state.inputRevision ?? 0) + 1;
|
|
48
|
+
}
|
|
49
|
+
/** The token for the game as it stands now. Frozen. */
|
|
50
|
+
export function inputToken(state) {
|
|
51
|
+
return Object.freeze({
|
|
52
|
+
epoch: epochOf(state),
|
|
53
|
+
revision: state.inputRevision ?? 0,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Whether `token` names the game as it stands now. Anything that is not a token
|
|
58
|
+
* of the right shape, including null, is not current.
|
|
59
|
+
*/
|
|
60
|
+
export function tokenIsCurrent(state, token) {
|
|
61
|
+
if (!token || typeof token !== "object")
|
|
62
|
+
return false;
|
|
63
|
+
return (token.epoch === epochOf(state) &&
|
|
64
|
+
token.revision === (state.inputRevision ?? 0));
|
|
65
|
+
}
|
|
66
|
+
function granted(read) {
|
|
67
|
+
try {
|
|
68
|
+
return { ok: true, value: read() };
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
if (e instanceof AgentCapabilityError)
|
|
72
|
+
return { ok: false };
|
|
73
|
+
throw e;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function part(read) {
|
|
77
|
+
const r = granted(read);
|
|
78
|
+
return r.ok ? r.value : null;
|
|
79
|
+
}
|
|
80
|
+
function deepFreeze(value) {
|
|
81
|
+
if (value && typeof value === "object" && !Object.isFrozen(value)) {
|
|
82
|
+
Object.freeze(value);
|
|
83
|
+
for (const v of Object.values(value)) {
|
|
84
|
+
deepFreeze(v);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return value;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Capture the game through `view`'s own accessors, so every capability check
|
|
91
|
+
* they make still applies. The result is a structured clone, deep-frozen: it
|
|
92
|
+
* shares no object with the live game or with a previous capture.
|
|
93
|
+
*/
|
|
94
|
+
export function captureCoreSnapshot(state, view) {
|
|
95
|
+
const target = granted(() => view.target());
|
|
96
|
+
const snap = {
|
|
97
|
+
token: inputToken(state),
|
|
98
|
+
turn: part(() => view.turn()),
|
|
99
|
+
player: part(() => view.player()),
|
|
100
|
+
inventory: part(() => view.inventory()),
|
|
101
|
+
equipment: part(() => view.equipment()),
|
|
102
|
+
equipmentSlots: part(() => {
|
|
103
|
+
view.equipment();
|
|
104
|
+
return state.actor.player.body.slots.map(({ type, name }) => ({ type, name }));
|
|
105
|
+
}),
|
|
106
|
+
quiver: part(() => view.quiver()),
|
|
107
|
+
floorHere: part(() => view.floorItems(state.actor.grid.x, state.actor.grid.y)),
|
|
108
|
+
monsters: part(() => view.monsters()),
|
|
109
|
+
target: target.ok ? target.value : null,
|
|
110
|
+
targetReadable: target.ok,
|
|
111
|
+
stores: part(() => view.stores()),
|
|
112
|
+
spellbooks: part(() => view.spellbooks()),
|
|
113
|
+
};
|
|
114
|
+
return deepFreeze(structuredClone(snap));
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=boundary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary.js","sourceRoot":"","sources":["../../src/agent/boundary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-views.d.ts","sourceRoot":"","sources":["../../src/agent/entity-views.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;
|
|
1
|
+
{"version":3,"file":"entity-views.d.ts","sourceRoot":"","sources":["../../src/agent/entity-views.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AASH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAOnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtE,gFAAgF;AAChF,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAOhD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAOhD;AAED;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,UAAU,EACf,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,aAAa,EACnB,KAAK,CAAC,EAAE,MAAM,GACb,QAAQ,CAuGV;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,WAAW,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,SAAS,EAChB,IAAI,EAAE,aAAa,EACnB,IAAI,CAAC,EAAE,iBAAiB,GACvB,UAAU,CA8EZ"}
|
|
@@ -12,9 +12,13 @@
|
|
|
12
12
|
* structural instead of a convention, and it keeps the import graph one-way
|
|
13
13
|
* (perceive and loadout both depend on this; neither depends on the other).
|
|
14
14
|
*/
|
|
15
|
-
import { ELEMENT_ENTRIES, OBJECT_FLAG_ENTRIES, PLAYER_FLAG_ENTRIES, TMD, } from "../generated/index.js";
|
|
15
|
+
import { ELEMENT_ENTRIES, OBJECT_FLAG_ENTRIES, OF, PLAYER_FLAG_ENTRIES, TMD, } from "../generated/index.js";
|
|
16
|
+
import { tvalIsBook } from "../obj/object.js";
|
|
17
|
+
import { playerObjectToBook } from "../player/spell.js";
|
|
16
18
|
import { OBJ_MOD_NAMES } from "../obj/bind.js";
|
|
17
19
|
import { objectValue } from "../obj/value.js";
|
|
20
|
+
import { objectFlagsKnown, objectKnownShadow } from "../obj/known-object.js";
|
|
21
|
+
import { knownDescOf } from "../game/describe.js";
|
|
18
22
|
/** OF_* codes for the set flags in an object-flag FlagSet (OF is 1-indexed). */
|
|
19
23
|
export function ofCodes(flags) {
|
|
20
24
|
const out = [];
|
|
@@ -50,9 +54,17 @@ export function pfCodes(flags) {
|
|
|
50
54
|
*/
|
|
51
55
|
export function itemView(handle, obj, state, deps, count) {
|
|
52
56
|
const number = count ?? obj.number;
|
|
57
|
+
/* Everything below that says what the object IS comes from its known twin
|
|
58
|
+
* (upstream obj->known, objectKnownShadow), the same record object_desc and the
|
|
59
|
+
* inspect screen read. A mod sees what the player knows: an unidentified ego
|
|
60
|
+
* reads as plain gear, and an unlearned rune adds nothing. The kind, weight and
|
|
61
|
+
* base dice and armour are known on sight. */
|
|
62
|
+
const p = state.actor.player;
|
|
63
|
+
const knownDesc = knownDescOf(state, true);
|
|
64
|
+
const known = objectKnownShadow(obj, p, state.runeEnv, knownDesc);
|
|
53
65
|
const modifiers = [];
|
|
54
|
-
for (let i = 0; i <
|
|
55
|
-
const value =
|
|
66
|
+
for (let i = 0; i < known.modifiers.length; i++) {
|
|
67
|
+
const value = known.modifiers[i] ?? 0;
|
|
56
68
|
if (value === 0)
|
|
57
69
|
continue;
|
|
58
70
|
const code = OBJ_MOD_NAMES[i];
|
|
@@ -60,9 +72,9 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
60
72
|
modifiers.push({ code, value });
|
|
61
73
|
}
|
|
62
74
|
const brands = [];
|
|
63
|
-
if (
|
|
64
|
-
for (let i = 0; i <
|
|
65
|
-
if (!
|
|
75
|
+
if (known.brands) {
|
|
76
|
+
for (let i = 0; i < known.brands.length; i++) {
|
|
77
|
+
if (!known.brands[i])
|
|
66
78
|
continue;
|
|
67
79
|
const code = state.brands[i]?.code;
|
|
68
80
|
if (code)
|
|
@@ -70,9 +82,9 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
70
82
|
}
|
|
71
83
|
}
|
|
72
84
|
const slays = [];
|
|
73
|
-
if (
|
|
74
|
-
for (let i = 0; i <
|
|
75
|
-
if (!
|
|
85
|
+
if (known.slays) {
|
|
86
|
+
for (let i = 0; i < known.slays.length; i++) {
|
|
87
|
+
if (!known.slays[i])
|
|
76
88
|
continue;
|
|
77
89
|
const code = state.slays[i]?.code;
|
|
78
90
|
if (code)
|
|
@@ -80,8 +92,8 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
80
92
|
}
|
|
81
93
|
}
|
|
82
94
|
const resists = [];
|
|
83
|
-
for (let i = 0; i <
|
|
84
|
-
const level =
|
|
95
|
+
for (let i = 0; i < known.elInfo.length; i++) {
|
|
96
|
+
const level = known.elInfo[i]?.resLevel ?? 0;
|
|
85
97
|
if (level === 0)
|
|
86
98
|
continue;
|
|
87
99
|
const name = ELEMENT_ENTRIES[i]?.name;
|
|
@@ -89,9 +101,9 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
89
101
|
resists.push({ element: name, level });
|
|
90
102
|
}
|
|
91
103
|
const curses = [];
|
|
92
|
-
if (
|
|
93
|
-
for (let i = 0; i <
|
|
94
|
-
const power =
|
|
104
|
+
if (known.curses) {
|
|
105
|
+
for (let i = 0; i < known.curses.length; i++) {
|
|
106
|
+
const power = known.curses[i]?.power ?? 0;
|
|
95
107
|
if (power <= 0)
|
|
96
108
|
continue;
|
|
97
109
|
/* Curse names resolve from the always-present RuneEnv curse table (real
|
|
@@ -104,32 +116,40 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
104
116
|
}
|
|
105
117
|
const view = {
|
|
106
118
|
handle,
|
|
119
|
+
kindKey: `kind:${obj.kind.kidx}`,
|
|
120
|
+
...(handle > 0 ? { itemKey: `gear:${handle}` } : {}),
|
|
121
|
+
nameColor: tvalIsBook(obj.tval) && !playerObjectToBook(state.actor.player, obj)
|
|
122
|
+
? "slate" : obj.kind.base.attr,
|
|
107
123
|
label: obj.kind.name,
|
|
108
124
|
tval: obj.tval,
|
|
109
125
|
sval: obj.sval,
|
|
110
|
-
pval:
|
|
126
|
+
pval: known.pval,
|
|
111
127
|
number,
|
|
112
128
|
weight: obj.weight,
|
|
113
|
-
ac:
|
|
114
|
-
toA:
|
|
115
|
-
toH:
|
|
116
|
-
toD:
|
|
117
|
-
dd:
|
|
118
|
-
ds:
|
|
119
|
-
ego:
|
|
120
|
-
artifact:
|
|
121
|
-
flags: ofCodes(obj.
|
|
129
|
+
ac: known.ac,
|
|
130
|
+
toA: known.toA,
|
|
131
|
+
toH: known.toH,
|
|
132
|
+
toD: known.toD,
|
|
133
|
+
dd: known.dd,
|
|
134
|
+
ds: known.ds,
|
|
135
|
+
ego: known.ego !== null,
|
|
136
|
+
artifact: known.artifact !== null,
|
|
137
|
+
flags: ofCodes(objectFlagsKnown(obj, p, state.runeEnv, knownDesc)),
|
|
122
138
|
modifiers,
|
|
123
139
|
brands,
|
|
124
140
|
slays,
|
|
125
141
|
resists,
|
|
126
142
|
curses,
|
|
127
|
-
egoName:
|
|
128
|
-
artifactName:
|
|
129
|
-
activation:
|
|
143
|
+
egoName: known.ego?.name ?? null,
|
|
144
|
+
artifactName: known.artifact?.name ?? null,
|
|
145
|
+
activation: known.activation !== null,
|
|
130
146
|
timeout: obj.timeout,
|
|
131
147
|
inscription: obj.note ?? null,
|
|
132
148
|
};
|
|
149
|
+
if (deps.describe)
|
|
150
|
+
view.name = deps.describe(obj);
|
|
151
|
+
if (deps.ignored)
|
|
152
|
+
view.ignored = deps.ignored(obj);
|
|
133
153
|
if (deps.resolver) {
|
|
134
154
|
const kindId = deps.resolver.kindIdOrNull(obj.kind.kidx);
|
|
135
155
|
if (kindId !== null)
|
|
@@ -137,7 +157,7 @@ export function itemView(handle, obj, state, deps, count) {
|
|
|
137
157
|
}
|
|
138
158
|
if (deps.reg) {
|
|
139
159
|
const aware = deps.aware ?? (() => true);
|
|
140
|
-
view.value = objectValue(deps.reg, obj, number, aware(obj.kind));
|
|
160
|
+
view.value = objectValue(deps.reg, obj, number, aware(obj.kind), { p, env: state.runeEnv, deps: knownDesc });
|
|
141
161
|
}
|
|
142
162
|
return view;
|
|
143
163
|
}
|
|
@@ -163,6 +183,7 @@ export function playerViewFor(state, deps, over) {
|
|
|
163
183
|
exp: p.exp,
|
|
164
184
|
maxExp: p.maxExp,
|
|
165
185
|
gold: p.au,
|
|
186
|
+
learnableSpells: p.upkeep.newSpells,
|
|
166
187
|
depth: state.chunk.depth,
|
|
167
188
|
maxDepth: p.maxDepth,
|
|
168
189
|
hp: p.chp,
|
|
@@ -200,9 +221,19 @@ export function playerViewFor(state, deps, over) {
|
|
|
200
221
|
resFire: p.timed[TMD.OPP_FIRE] ?? 0,
|
|
201
222
|
resCold: p.timed[TMD.OPP_COLD] ?? 0,
|
|
202
223
|
resPois: p.timed[TMD.OPP_POIS] ?? 0,
|
|
224
|
+
/* player_of_has(p, OF_AFRAID), the flag the melee refusal reads: the
|
|
225
|
+
* timed effects' flag synonyms are folded into playerState.flags by
|
|
226
|
+
* calc_bonuses, alongside equipment, curses and shapes. */
|
|
227
|
+
fearful: (playerState?.flags.has(OF.AFRAID) ?? false) || (p.timed[TMD.AFRAID] ?? 0) > 0,
|
|
228
|
+
terror: p.timed[TMD.TERROR] ?? 0,
|
|
229
|
+
amnesia: p.timed[TMD.AMNESIA] ?? 0,
|
|
230
|
+
image: p.timed[TMD.IMAGE] ?? 0,
|
|
203
231
|
},
|
|
204
232
|
dead: state.isDead,
|
|
205
233
|
winner: p.totalWinner,
|
|
234
|
+
hpWarning: Math.trunc((p.mhp * (state.options?.hitpointWarn ?? 3)) / 10),
|
|
235
|
+
recall: p.wordRecall,
|
|
236
|
+
descent: p.deepDescent,
|
|
206
237
|
skills: [...p.skills],
|
|
207
238
|
shape: p.shape?.name ?? null,
|
|
208
239
|
objectFlags: playerState ? ofCodes(playerState.flags) : [],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-views.js","sourceRoot":"","sources":["../../src/agent/entity-views.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,mBAAmB,EACnB,GAAG,GACJ,MAAM,uBAAuB,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"entity-views.js","sourceRoot":"","sources":["../../src/agent/entity-views.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/index.d.ts
CHANGED
|
@@ -10,9 +10,14 @@
|
|
|
10
10
|
export { AGENT_API_VERSION, AGENT_STATE_DOMAINS } from "./types.js";
|
|
11
11
|
export type { AgentCapabilities, AgentCommand, AgentActions, AgentGlyphSource, AgentController, AgentSession, AgentView, AgentViewDeps, CellView, ControllerOptions, ItemView, LoadoutChange, LoadoutItemRef, LoadoutPlacement, LoadoutSimulation, LoadoutView, MonsterView, PlayerStatusView, PlayerView, SpellbookView, SpellView, StoreItemView, StoreView, TargetView, } from "./types.js";
|
|
12
12
|
export { createAgentView } from "./perceive.js";
|
|
13
|
+
export { bumpInputRevision, captureCoreSnapshot, inputToken, tokenIsCurrent, } from "./boundary.js";
|
|
14
|
+
export type { CoreSnapshot, InputToken } from "./boundary.js";
|
|
15
|
+
export { captureKnownLevel } from "./known-level.js";
|
|
16
|
+
export type { KnownLevelView, KnownLevelCell, RememberedCell, RememberedObject, ActualCell, TrapView, } from "./known-level.js";
|
|
13
17
|
export { itemView, playerViewFor } from "./entity-views.js";
|
|
14
18
|
export type { PlayerViewDerived } from "./entity-views.js";
|
|
15
19
|
export { simulateLoadout } from "./loadout.js";
|
|
20
|
+
export type { BlastAreaResult, BookItemResult, GridInspectResult, InspectResult, ItemRulesResult, ItemTesterResult, LoadoutSlotsResult, SpellInspectResult, TerrainCatalogueResult, TerrainFeatureView, TileActionsResult, TravelPathResult } from "./inspect.js";
|
|
16
21
|
export type { LoadoutDerive, LoadoutSimOptions } from "./loadout.js";
|
|
17
22
|
export { createAgentActions } from "./act.js";
|
|
18
23
|
export { AgentCapabilityError, installController } from "./controller.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,YAAY,EACV,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,SAAS,EACT,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,aAAa,EACb,SAAS,EACT,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,cAAc,GACf,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,YAAY,EACV,cAAc,EACd,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC5D,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,eAAe,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAClQ,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/agent/index.js
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export { AGENT_API_VERSION, AGENT_STATE_DOMAINS } from "./types.js";
|
|
11
11
|
export { createAgentView } from "./perceive.js";
|
|
12
|
+
export { bumpInputRevision, captureCoreSnapshot, inputToken, tokenIsCurrent, } from "./boundary.js";
|
|
13
|
+
export { captureKnownLevel } from "./known-level.js";
|
|
12
14
|
export { itemView, playerViewFor } from "./entity-views.js";
|
|
13
15
|
export { simulateLoadout } from "./loadout.js";
|
|
14
16
|
export { createAgentActions } from "./act.js";
|
package/dist/agent/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2BpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2BpE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,UAAU,EACV,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AASrD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC"}
|