kill-switch-mcp 1.1.2 → 1.1.3

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,57 +0,0 @@
1
- // Pathfinding stub for npm package
2
- // The full pathfinding module requires server-side collision data and rsmod WASM.
3
- // In the npm package, pathfinding is not available — bots use server-side routing.
4
-
5
- export interface DoorInfo {
6
- level: number;
7
- x: number;
8
- z: number;
9
- shape: number;
10
- angle: number;
11
- blockrange: boolean;
12
- }
13
-
14
- export function initPathfinding(): void {
15
- // No-op in npm package
16
- }
17
-
18
- export function isZoneAllocated(_level: number, _x: number, _z: number): boolean {
19
- return false;
20
- }
21
-
22
- export function findLongPath(
23
- _level: number,
24
- _srcX: number,
25
- _srcZ: number,
26
- _destX: number,
27
- _destZ: number,
28
- _maxWaypoints?: number
29
- ): Array<{ x: number; z: number; level: number }> {
30
- return [];
31
- }
32
-
33
- export function isTileWalkable(_level: number, _x: number, _z: number): boolean {
34
- return true;
35
- }
36
-
37
- export function isFlagged(_x: number, _z: number, _level: number, _masks: number): boolean {
38
- return false;
39
- }
40
-
41
- export function isZoneLikelyLand(_level: number, _x: number, _z: number): boolean {
42
- return false;
43
- }
44
-
45
- export function findDoorsAlongPath(
46
- _waypoints: Array<{ x: number; z: number; level: number }>
47
- ): DoorInfo[] {
48
- return [];
49
- }
50
-
51
- export function getDoorAt(_level: number, _x: number, _z: number): DoorInfo | undefined {
52
- return undefined;
53
- }
54
-
55
- export function blockDoor(_level: number, _x: number, _z: number): boolean {
56
- return false;
57
- }
package/src/sdk/types.ts DELETED
@@ -1,584 +0,0 @@
1
- // Re-export all types from the agent types module
2
- // This file provides the full type definitions for remote SDK users
3
-
4
- // ============ State Types ============
5
-
6
- /** Combat state tracking for player */
7
- export interface PlayerCombatState {
8
- /** Currently engaged in combat (has a target) */
9
- inCombat: boolean;
10
- /** Index of NPC/player we're targeting (-1 if none) */
11
- targetIndex: number;
12
- /** Tick when we last took damage (-1 if never) */
13
- lastDamageTick: number;
14
- }
15
-
16
- export interface PlayerState {
17
- name: string;
18
- combatLevel: number;
19
- /** Current hitpoints level (boosted/drained) */
20
- hp: number;
21
- /** Base hitpoints level (max HP) */
22
- maxHp: number;
23
- x: number;
24
- z: number;
25
- worldX: number;
26
- worldZ: number;
27
- /** Map plane/floor: 0=ground, 1=first floor (upstairs), 2=second floor, 3=third floor */
28
- level: number;
29
- runEnergy: number;
30
- runWeight: number;
31
- /** Current animation ID (-1 = idle/none) */
32
- animId: number;
33
- /** Current spot animation ID (-1 = none) */
34
- spotanimId: number;
35
- /** Combat state tracking */
36
- combat: PlayerCombatState;
37
- }
38
-
39
- export interface SkillState {
40
- name: string;
41
- level: number;
42
- baseLevel: number;
43
- experience: number;
44
- }
45
-
46
- export interface InventoryItemOption {
47
- text: string;
48
- opIndex: number;
49
- }
50
-
51
- export interface InventoryItem {
52
- slot: number;
53
- id: number;
54
- name: string;
55
- count: number;
56
- optionsWithIndex: InventoryItemOption[];
57
- }
58
-
59
- export interface NpcOption {
60
- text: string;
61
- opIndex: number;
62
- }
63
-
64
- export interface NearbyNpc {
65
- index: number;
66
- name: string;
67
- combatLevel: number;
68
- x: number;
69
- z: number;
70
- distance: number;
71
- hp: number;
72
- maxHp: number;
73
- healthPercent: number | null;
74
- targetIndex: number;
75
- inCombat: boolean;
76
- combatCycle: number;
77
- animId: number;
78
- spotanimId: number;
79
- optionsWithIndex: NpcOption[];
80
- /** Convenience array of option text strings */
81
- options: string[];
82
- }
83
-
84
- export interface NearbyPlayer {
85
- index: number;
86
- name: string;
87
- combatLevel: number;
88
- x: number;
89
- z: number;
90
- distance: number;
91
- }
92
-
93
- export interface GroundItem {
94
- id: number;
95
- name: string;
96
- count: number;
97
- x: number;
98
- z: number;
99
- distance: number;
100
- }
101
-
102
- export interface LocOption {
103
- text: string;
104
- opIndex: number;
105
- }
106
-
107
- export interface NearbyLoc {
108
- id: number;
109
- name: string;
110
- x: number;
111
- z: number;
112
- distance: number;
113
- optionsWithIndex: LocOption[];
114
- /** Convenience array of option text strings */
115
- options: string[];
116
- }
117
-
118
- export interface GameMessage {
119
- type: number;
120
- text: string;
121
- sender: string;
122
- tick: number;
123
- }
124
-
125
- export interface DialogEntry {
126
- text: string[]; // Lines of text in the dialog
127
- tick: number; // Game tick when captured
128
- interfaceId: number; // Interface ID of the dialog
129
- }
130
-
131
- export interface DialogOption {
132
- index: number;
133
- text: string;
134
- componentId?: number;
135
- buttonType?: number;
136
- }
137
-
138
- export interface DialogComponent {
139
- id: number;
140
- type: number;
141
- buttonType: number;
142
- option: string;
143
- text: string;
144
- }
145
-
146
- export interface DialogState {
147
- isOpen: boolean;
148
- options: DialogOption[];
149
- isWaiting: boolean;
150
- text?: string;
151
- allComponents?: DialogComponent[];
152
- }
153
-
154
- export interface InterfaceState {
155
- isOpen: boolean;
156
- interfaceId: number;
157
- options: Array<{ index: number; text: string; componentId: number }>;
158
- }
159
-
160
- export interface ShopItem {
161
- slot: number;
162
- id: number;
163
- name: string;
164
- count: number;
165
- baseCost: number;
166
- buyPrice: number;
167
- sellPrice: number;
168
- }
169
-
170
- export interface ShopConfig {
171
- buyMultiplier: number;
172
- sellMultiplier: number;
173
- haggle: number;
174
- }
175
-
176
- export interface ShopState {
177
- isOpen: boolean;
178
- title: string;
179
- shopItems: ShopItem[];
180
- playerItems: ShopItem[];
181
- shopConfig?: ShopConfig;
182
- }
183
-
184
- export interface BankItem {
185
- slot: number;
186
- id: number;
187
- name: string;
188
- count: number;
189
- }
190
-
191
- export interface BankState {
192
- isOpen: boolean;
193
- items: BankItem[];
194
- }
195
-
196
- export interface CombatStyleOption {
197
- index: number;
198
- name: string;
199
- type: string;
200
- trainedSkill: string;
201
- }
202
-
203
- export interface CombatStyleState {
204
- currentStyle: number;
205
- weaponName: string;
206
- styles: CombatStyleOption[];
207
- }
208
-
209
- export interface CombatEvent {
210
- tick: number;
211
- type: 'damage_taken' | 'damage_dealt' | 'kill';
212
- damage: number;
213
- sourceType: 'player' | 'npc' | 'other_player';
214
- sourceIndex: number;
215
- targetType: 'player' | 'npc' | 'other_player';
216
- targetIndex: number;
217
- }
218
-
219
- // ============ Prayer Types ============
220
-
221
- export type PrayerName =
222
- | 'thick_skin' | 'burst_of_strength' | 'clarity_of_thought'
223
- | 'rock_skin' | 'superhuman_strength' | 'improved_reflexes'
224
- | 'rapid_restore' | 'rapid_heal' | 'protect_items'
225
- | 'steel_skin' | 'ultimate_strength' | 'incredible_reflexes'
226
- | 'protect_from_magic' | 'protect_from_missiles' | 'protect_from_melee';
227
-
228
- export const PRAYER_NAMES: PrayerName[] = [
229
- 'thick_skin', 'burst_of_strength', 'clarity_of_thought',
230
- 'rock_skin', 'superhuman_strength', 'improved_reflexes',
231
- 'rapid_restore', 'rapid_heal', 'protect_items',
232
- 'steel_skin', 'ultimate_strength', 'incredible_reflexes',
233
- 'protect_from_magic', 'protect_from_missiles', 'protect_from_melee',
234
- ];
235
-
236
- export const PRAYER_INDICES: Record<PrayerName, number> = {
237
- 'thick_skin': 0, 'burst_of_strength': 1, 'clarity_of_thought': 2,
238
- 'rock_skin': 3, 'superhuman_strength': 4, 'improved_reflexes': 5,
239
- 'rapid_restore': 6, 'rapid_heal': 7, 'protect_items': 8,
240
- 'steel_skin': 9, 'ultimate_strength': 10, 'incredible_reflexes': 11,
241
- 'protect_from_magic': 12, 'protect_from_missiles': 13, 'protect_from_melee': 14,
242
- };
243
-
244
- /** Required prayer level for each prayer (indexed 0-14) */
245
- export const PRAYER_LEVELS: number[] = [
246
- 1, 4, 7, // thick_skin, burst_of_strength, clarity_of_thought
247
- 10, 13, 16, // rock_skin, superhuman_strength, improved_reflexes
248
- 19, 22, 25, // rapid_restore, rapid_heal, protect_items
249
- 28, 31, 34, // steel_skin, ultimate_strength, incredible_reflexes
250
- 37, 40, 43, // protect_from_magic, protect_from_missiles, protect_from_melee
251
- ];
252
-
253
- export interface PrayerState {
254
- /** Active state of each prayer (indexed 0-14, matching PRAYER_NAMES order) */
255
- activePrayers: boolean[];
256
- /** Current prayer points (current skill level - drains while prayers active) */
257
- prayerPoints: number;
258
- /** Base prayer level */
259
- prayerLevel: number;
260
- }
261
-
262
- export interface PrayerResult {
263
- success: boolean;
264
- message: string;
265
- reason?: 'invalid_prayer' | 'no_prayer_points' | 'level_too_low' | 'already_active' | 'already_inactive' | 'timeout';
266
- }
267
-
268
- export interface BotWorldState {
269
- tick: number;
270
- inGame: boolean;
271
- player: PlayerState | null;
272
- skills: SkillState[];
273
- inventory: InventoryItem[];
274
- equipment: InventoryItem[];
275
- nearbyNpcs: NearbyNpc[];
276
- nearbyPlayers: NearbyPlayer[];
277
- nearbyLocs: NearbyLoc[];
278
- groundItems: GroundItem[];
279
- gameMessages: GameMessage[];
280
- recentDialogs: DialogEntry[];
281
- dialog: DialogState;
282
- interface: InterfaceState;
283
- shop: ShopState;
284
- bank: BankState;
285
- modalOpen: boolean;
286
- modalInterface: number;
287
- combatStyle?: CombatStyleState;
288
- combatEvents: CombatEvent[];
289
- prayers: PrayerState;
290
- }
291
-
292
- // ============ Action Types ============
293
-
294
- export type BotAction =
295
- | { type: 'none'; reason: string }
296
- | { type: 'wait'; reason: string; ticks?: number }
297
- | { type: 'talkToNpc'; npcIndex: number; reason: string }
298
- | { type: 'interactNpc'; npcIndex: number; optionIndex: number; reason: string }
299
- | { type: 'interactPlayer'; playerIndex: number; optionIndex: number; reason: string }
300
- | { type: 'clickDialogOption'; optionIndex: number; reason: string }
301
- // clickComponent: IF_BUTTON packet - for simple buttons, spellcasting, etc.
302
- | { type: 'clickComponent'; componentId: number; reason: string }
303
- // clickComponentWithOption: INV_BUTTON packet - for components with inventory operations (smithing, crafting, etc.)
304
- | { type: 'clickComponentWithOption'; componentId: number; optionIndex: number; slot?: number; reason: string }
305
- // TODO: acceptCharacterDesign should be parameterized as (gender, kits[7], colours[5])
306
- // Currently uses hidden client state - the SDK cannot set design values before accepting.
307
- // For now, bot client uses whatever design state exists (usually defaults or randomized).
308
- | { type: 'acceptCharacterDesign'; reason: string }
309
- // Randomize character appearance (gender, body parts, colors) with valid random values
310
- | { type: 'randomizeCharacterDesign'; reason: string }
311
- | { type: 'walkTo'; x: number; z: number; running?: boolean; reason: string }
312
- | { type: 'useInventoryItem'; slot: number; optionIndex: number; reason: string }
313
- | { type: 'useEquipmentItem'; slot: number; optionIndex: number; reason: string }
314
- | { type: 'dropItem'; slot: number; reason: string }
315
- | { type: 'pickupItem'; x: number; z: number; itemId: number; reason: string }
316
- | { type: 'interactGroundItem'; x: number; z: number; itemId: number; optionIndex: number; reason: string }
317
- | { type: 'interactLoc'; x: number; z: number; locId: number; optionIndex: number; reason: string }
318
- | { type: 'shopBuy'; slot: number; amount: number; reason: string }
319
- | { type: 'shopSell'; slot: number; amount: number; reason: string }
320
- | { type: 'closeShop'; reason: string }
321
- | { type: 'closeModal'; reason: string }
322
- | { type: 'setCombatStyle'; style: number; reason: string }
323
- | { type: 'useItemOnItem'; sourceSlot: number; targetSlot: number; reason: string }
324
- | { type: 'useItemOnLoc'; itemSlot: number; x: number; z: number; locId: number; reason: string }
325
- | { type: 'useItemOnNpc'; itemSlot: number; npcIndex: number; reason: string }
326
- | { type: 'say'; message: string; reason: string }
327
- | { type: 'spellOnNpc'; npcIndex: number; spellComponent: number; reason: string }
328
- | { type: 'spellOnItem'; slot: number; spellComponent: number; reason: string }
329
- | { type: 'setTab'; tabIndex: number; reason: string }
330
- | { type: 'bankDeposit'; slot: number; amount: number; reason: string }
331
- | { type: 'bankWithdraw'; slot: number; amount: number; reason: string }
332
- | { type: 'scanNearbyLocs'; radius?: number; reason: string }
333
- | { type: 'scanGroundItems'; radius?: number; reason: string }
334
- | { type: 'togglePrayer'; prayerIndex: number; reason: string };
335
-
336
- export interface ActionResult {
337
- success: boolean;
338
- message: string;
339
- /** Optional data payload (used by scan actions to return results) */
340
- data?: any;
341
- }
342
-
343
- // ============ SDK Config ============
344
-
345
- /** Connection mode: 'control' can send actions, 'observe' is read-only */
346
- export type SDKConnectionMode = 'control' | 'observe';
347
-
348
- export interface SDKConfig {
349
- botUsername: string;
350
- /** Password for gateway authentication */
351
- password?: string;
352
- /** Full WebSocket URL (e.g. wss://server.com/gateway). Overrides host/port if set. */
353
- gatewayUrl?: string;
354
- /** Gateway hostname (default: localhost) */
355
- host?: string;
356
- /** Gateway port (default: 7780) */
357
- port?: number;
358
- /** Connection mode: 'control' (default) can send actions, 'observe' is read-only */
359
- connectionMode?: SDKConnectionMode;
360
- /**
361
- * Auto-launch browser behavior:
362
- * - 'auto' (default): Launch only if no active client with fresh state data
363
- * - true: Always launch if bot not connected
364
- * - false: Never auto-launch
365
- */
366
- autoLaunchBrowser?: boolean | 'auto';
367
- /** How recent state data must be (ms) to be considered "fresh" in auto mode (default: 3000) */
368
- freshDataThreshold?: number;
369
- /** Override client URL for auto-launch (derived from gatewayUrl if not set) */
370
- browserLaunchUrl?: string;
371
- /** Timeout waiting for bot to connect after browser launch (default: 30000ms) */
372
- browserLaunchTimeout?: number;
373
- actionTimeout?: number;
374
- autoReconnect?: boolean;
375
- reconnectMaxRetries?: number;
376
- reconnectBaseDelay?: number;
377
- reconnectMaxDelay?: number;
378
- /** Show other players' chat messages (default: false for safety) */
379
- showChat?: boolean;
380
- }
381
-
382
- /** Session status from gateway diagnostics */
383
- export type SessionStatus = 'active' | 'dead';
384
-
385
- /** Bot status from gateway /status/:username endpoint */
386
- export interface BotStatus {
387
- /** Session status: active (WebSocket connected), dead (disconnected) */
388
- status: SessionStatus;
389
- /** Whether bot is currently in-game */
390
- inGame: boolean;
391
- /** Milliseconds since last state was received (null if never) */
392
- stateAge: number | null;
393
- /** SDK clients controlling this bot */
394
- controllers: string[];
395
- /** SDK clients observing this bot */
396
- observers: string[];
397
- /** Basic player info (null if not in-game) */
398
- player: {
399
- name: string;
400
- worldX: number;
401
- worldZ: number;
402
- } | null;
403
- }
404
-
405
- export type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting';
406
-
407
- // ============ Result Types ============
408
-
409
- export interface ChopTreeResult {
410
- success: boolean;
411
- logs?: InventoryItem;
412
- message: string;
413
- }
414
-
415
- export interface BurnLogsResult {
416
- success: boolean;
417
- xpGained: number;
418
- message: string;
419
- }
420
-
421
- export interface PickupResult {
422
- success: boolean;
423
- item?: InventoryItem;
424
- message: string;
425
- reason?: 'item_not_found' | 'cant_reach' | 'inventory_full' | 'timeout';
426
- }
427
-
428
- export interface TalkResult {
429
- success: boolean;
430
- dialog?: DialogState;
431
- message: string;
432
- }
433
-
434
- export interface ShopResult {
435
- success: boolean;
436
- item?: InventoryItem;
437
- message: string;
438
- }
439
-
440
- export interface ShopSellResult {
441
- success: boolean;
442
- message: string;
443
- amountSold?: number;
444
- rejected?: boolean;
445
- }
446
-
447
- export type SellAmount = 1 | 5 | 10 | 'all';
448
-
449
- export interface EquipResult {
450
- success: boolean;
451
- message: string;
452
- }
453
-
454
- export interface UnequipResult {
455
- success: boolean;
456
- message: string;
457
- item?: InventoryItem;
458
- }
459
-
460
- export interface EatResult {
461
- success: boolean;
462
- hpGained: number;
463
- message: string;
464
- }
465
-
466
- export interface AttackResult {
467
- success: boolean;
468
- message: string;
469
- reason?: 'npc_not_found' | 'player_not_found' | 'no_attack_option' | 'out_of_reach' | 'already_in_combat' | 'timeout';
470
- }
471
-
472
- export interface CastSpellResult {
473
- success: boolean;
474
- message: string;
475
- hit?: boolean;
476
- xpGained?: number;
477
- reason?: 'npc_not_found' | 'out_of_reach' | 'no_runes' | 'timeout';
478
- }
479
-
480
- export interface OpenDoorResult {
481
- success: boolean;
482
- message: string;
483
- reason?: 'door_not_found' | 'no_open_option' | 'already_open' | 'walk_failed' | 'open_failed' | 'timeout';
484
- door?: NearbyLoc;
485
- }
486
-
487
- export interface FletchResult {
488
- success: boolean;
489
- message: string;
490
- xpGained?: number;
491
- product?: InventoryItem;
492
- }
493
-
494
- export interface CraftLeatherResult {
495
- success: boolean;
496
- message: string;
497
- xpGained?: number;
498
- itemsCrafted?: number;
499
- reason?: 'no_needle' | 'no_leather' | 'no_thread' | 'interface_not_opened' | 'level_too_low' | 'timeout' | 'no_xp_gained';
500
- }
501
-
502
- export interface SmithResult {
503
- success: boolean;
504
- message: string;
505
- xpGained?: number;
506
- itemsSmithed?: number;
507
- product?: InventoryItem;
508
- reason?: 'no_hammer' | 'no_bars' | 'no_anvil' | 'interface_not_opened' | 'level_too_low' | 'timeout' | 'no_xp_gained';
509
- }
510
-
511
- export interface OpenBankResult {
512
- success: boolean;
513
- message: string;
514
- reason?: 'no_bank_found' | 'no_bank_option' | 'timeout' | 'dialog_stuck' | 'cant_reach';
515
- }
516
-
517
- export interface BankDepositResult {
518
- success: boolean;
519
- message: string;
520
- amountDeposited?: number;
521
- reason?: 'bank_not_open' | 'item_not_found' | 'timeout';
522
- }
523
-
524
- export interface BankWithdrawResult {
525
- success: boolean;
526
- message: string;
527
- item?: InventoryItem;
528
- reason?: 'bank_not_open' | 'item_not_found' | 'timeout';
529
- }
530
-
531
- export interface UseItemOnLocResult {
532
- success: boolean;
533
- message: string;
534
- reason?: 'item_not_found' | 'loc_not_found' | 'cant_reach' | 'timeout';
535
- }
536
-
537
- export interface UseItemOnNpcResult {
538
- success: boolean;
539
- message: string;
540
- reason?: 'item_not_found' | 'npc_not_found' | 'cant_reach' | 'timeout';
541
- }
542
-
543
- export interface InteractLocResult {
544
- success: boolean;
545
- message: string;
546
- reason?: 'loc_not_found' | 'no_matching_option' | 'cant_reach' | 'timeout';
547
- }
548
-
549
- export interface InteractNpcResult {
550
- success: boolean;
551
- message: string;
552
- reason?: 'npc_not_found' | 'no_matching_option' | 'cant_reach' | 'timeout';
553
- }
554
-
555
- export interface PickpocketResult {
556
- success: boolean;
557
- message: string;
558
- xpGained?: number;
559
- reason?: 'npc_not_found' | 'no_pickpocket_option' | 'cant_reach' | 'stunned' | 'timeout';
560
- }
561
-
562
- export interface CraftJewelryResult {
563
- success: boolean;
564
- message: string;
565
- xpGained?: number;
566
- product?: InventoryItem;
567
- reason?: 'no_bar' | 'no_mould' | 'no_furnace' | 'no_gem' | 'interface_not_opened' | 'level_too_low' | 'timeout';
568
- }
569
-
570
- export interface EnchantResult {
571
- success: boolean;
572
- message: string;
573
- xpGained?: number;
574
- product?: InventoryItem;
575
- reason?: 'item_not_found' | 'no_runes' | 'level_too_low' | 'timeout';
576
- }
577
-
578
- export interface StringAmuletResult {
579
- success: boolean;
580
- message: string;
581
- xpGained?: number;
582
- product?: InventoryItem;
583
- reason?: 'no_amulet' | 'no_string' | 'level_too_low' | 'timeout';
584
- }