{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "OSRS Codex Entry", "type": "object", "additionalProperties": false, "required": [ "id", "title", "domain", "tags", "status", "version", "updated", "summary", "accounts", "best_practice", "state_machine", "actions", "run_control", "risk", "sources", "verified" ], "properties": { "id": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", "maxLength": 64 }, "title": { "type": "string", "minLength": 3 }, "domain": { "enum": ["economy", "training", "combat", "combat-slayers", "quests", "transport", "meta"] }, "tags": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "status": { "enum": ["draft", "verified", "stale"] }, "version": { "type": "integer", "minimum": 1 }, "updated": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "summary": { "type": "string", "minLength": 10 }, "accounts": { "type": "object", "required": ["membership", "min_level"], "additionalProperties": false, "properties": { "membership": { "enum": ["f2p", "members", "hybrid"] }, "min_level": { "type": "integer", "minimum": 1, "maximum": 126 }, "requires_quest": { "type": "array", "items": { "type": "string" } }, "requires_other": { "type": "array", "items": { "type": "string" } } } }, "economy": { "type": "object", "additionalProperties": false, "properties": { "item": { "type": "string" }, "item_id": { "type": "integer" }, "cost_per_cycle": { "type": "number" }, "income_per_cycle": { "type": "number" }, "net_per_cycle": { "type": "number" }, "gp_per_hour_low": { "type": "number" }, "gp_per_hour_high": { "type": "number" }, "ceiling_gp_per_hour": { "type": "number", "exclusiveMinimum": 0 }, "xp_per_hour": { "type": "number" }, "supplies": { "type": "array", "items": { "type": "object", "required": ["item", "qty_per_cycle", "source"], "additionalProperties": false, "properties": { "item": { "type": "string" }, "qty_per_cycle": { "type": "number", "exclusiveMinimum": 0 }, "source": { "enum": ["ge", "p2p", "drops", "craft", "bank", "npc-shop"] }, "ge_limit": { "type": "integer", "minimum": 1 } } } }, "profit_drivers": { "type": "array", "items": { "type": "string" } } } }, "pickaxe_tiers": { "type": "object", "minProperties": 1, "propertyNames": { "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }, "additionalProperties": { "type": "object", "required": ["mining_level", "attack_level", "roll_ticks", "rank"], "additionalProperties": false, "properties": { "mining_level": { "type": "integer", "minimum": 1, "maximum": 126 }, "attack_level": { "type": "integer", "minimum": 1, "maximum": 126 }, "roll_ticks": { "type": "integer", "minimum": 1 }, "rank": { "type": "integer", "minimum": 1, "maximum": 6 } } } }, "pickaxe_examples": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["account", "attack", "mining", "expected_tier", "expected_equipped", "expected_slots"], "additionalProperties": false, "properties": { "account": { "type": "string", "minLength": 2 }, "attack": { "type": "integer", "minimum": 1, "maximum": 126 }, "mining": { "type": "integer", "minimum": 1, "maximum": 126 }, "expected_tier": { "type": "string", "minLength": 2 }, "expected_equipped": { "type": "boolean" }, "expected_slots": { "type": "integer", "minimum": 1, "maximum": 28 } } } }, "mining_modes": { "type": "object", "required": ["fast-xp", "banked-income"], "additionalProperties": false, "properties": { "fast-xp": { "type": "object", "required": ["inventory_policy", "ore_policy", "sites"], "additionalProperties": false, "properties": { "inventory_policy": { "const": "drop" }, "ore_policy": { "type": "string", "minLength": 5 }, "sites": { "type": "array", "minItems": 1, "items": { "type": "string" } } } }, "banked-income": { "type": "object", "required": ["inventory_policy", "targets", "stop"], "additionalProperties": false, "properties": { "inventory_policy": { "const": "bank" }, "targets": { "type": "array", "minItems": 1, "items": { "type": "string" } }, "stop": { "type": "string", "minLength": 5 } } } } }, "mining_selections": { "type": "object", "additionalProperties": false, "properties": { "fast_xp": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["level", "expected_site"], "additionalProperties": false, "properties": { "level": { "type": "integer", "minimum": 1, "maximum": 126 }, "expected_site": { "type": "string", "minLength": 2 } } } } } }, "mine_sites": { "type": "object", "minProperties": 1, "propertyNames": { "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }, "additionalProperties": { "type": "object", "required": ["ore", "ore_id", "mining_level", "xp", "rock_count", "respawn_seconds", "rolls_per_ore", "modeled_ores_per_hour", "world_hop", "selectable", "inventory_policy", "access", "safety", "route"], "additionalProperties": false, "properties": { "ore": { "type": "string", "minLength": 2 }, "ore_id": { "type": "integer", "minimum": 1 }, "mining_level": { "type": "integer", "minimum": 1, "maximum": 126 }, "xp": { "type": "number", "exclusiveMinimum": 0 }, "rock_count": { "type": "integer", "minimum": 1 }, "respawn_seconds": { "type": "number", "exclusiveMinimum": 0 }, "rolls_per_ore": { "type": "number", "exclusiveMinimum": 0 }, "modeled_ores_per_hour": { "type": "number", "minimum": 0 }, "world_hop": { "type": "boolean" }, "selectable": { "type": "boolean" }, "inventory_policy": { "enum": ["drop", "bank"] }, "access": { "type": "string", "minLength": 3 }, "safety": { "type": "string", "minLength": 3 }, "route": { "type": "string", "minLength": 5 } } } }, "slot_state_machine": { "type": "object", "required": ["sub_states", "slot_transitions", "slot_transition_whens", "scheduler_iteration", "quote_age_policy", "persisted_state", "limit_ledger", "conservation", "break_resume"], "additionalProperties": false, "properties": { "sub_states": { "type": "array", "minItems": 10, "items": { "type": "string" } }, "slot_transitions": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } } }, "slot_transition_whens": { "type": "array", "minItems": 8, "items": { "type": "string", "minLength": 8 } }, "scheduler_iteration": { "type": "string", "minLength": 10 }, "quote_age_policy": { "type": "string", "minLength": 10 }, "persisted_state": { "type": "string", "minLength": 10 }, "limit_ledger": { "type": "string", "minLength": 10 }, "conservation": { "type": "string", "minLength": 10 }, "break_resume": { "type": "string", "minLength": 10 } } }, "best_practice": { "type": "object", "required": ["equipment"], "additionalProperties": false, "properties": { "equipment": { "type": "array", "items": { "type": "object", "required": ["item", "why", "source"], "additionalProperties": false, "properties": { "item": { "type": "string", "minLength": 2 }, "why": { "type": "string", "minLength": 5 }, "source": { "type": "string", "minLength": 5 } } } }, "techniques": { "type": "array", "items": { "type": "object", "required": ["name", "why", "source"], "additionalProperties": false, "properties": { "name": { "type": "string", "minLength": 2 }, "why": { "type": "string", "minLength": 5 }, "source": { "type": "string", "minLength": 5 } } } } } }, "state_machine": { "type": "object", "required": ["initial", "terminal", "states"], "additionalProperties": false, "properties": { "initial": { "type": "string" }, "terminal": { "type": "array", "items": { "type": "string" }, "minItems": 1, "contains": { "const": "failed" } }, "states": { "type": "object", "minProperties": 2, "additionalProperties": { "type": "object", "required": ["goal"], "additionalProperties": false, "properties": { "goal": { "type": "string", "minLength": 3 }, "next": { "type": "array", "items": { "type": "string" }, "minItems": 1 } } } }, "transitions": { "type": "array", "items": { "type": "object", "required": ["from", "when", "to"], "additionalProperties": false, "properties": { "from": { "type": "string" }, "when": { "type": "string", "minLength": 3 }, "to": { "type": "string" } } } } } }, "actions": { "type": "array", "minItems": 1, "items": { "type": "object", "required": ["id", "step", "verb", "on_fail"], "additionalProperties": false, "properties": { "id": { "type": "string", "pattern": "^a[0-9]+$" }, "step": { "type": "string", "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$" }, "verb": { "enum": [ "login", "select_world", "hop_world", "is_logged_in", "move_to", "walk_to", "teleport", "enter_region", "open_door", "use_item_on", "click_object", "right_click", "talk_to", "click_button", "menu_option", "bank_inventory", "deposit_all", "withdraw", "has_item", "count_item", "move_to_inv", "sort_inventory", "ge_open", "ge_buy", "ge_sell", "ge_cancel", "ge_offers_done", "ge_collect", "ge_check_price", "attack", "prayer", "buff", "eat", "retreat", "is_dead", "respawn", "is_at", "item_count", "level_is", "xp_is", "hp_is", "ge_clear", "bank_open", "quest_state", "npc_present", "log", "alert", "sleep", "human_move", "take_break" ] }, "target": { "type": "string" }, "params": { "type": "object" }, "on_fail": { "enum": ["retry", "skip", "abort", "alert"] }, "anti_ban": { "type": "object", "additionalProperties": false, "properties": { "delay": { "type": "array", "items": { "type": "number", "minimum": 0 }, "minItems": 2, "maxItems": 2 }, "mouse": { "type": "string" }, "jitter": { "type": "number", "minimum": 0 } } } } } }, "run_control": { "type": "object", "required": ["iteration", "stop_conditions"], "additionalProperties": false, "properties": { "iteration": { "type": "string" }, "max_iterations": { "type": ["integer", "null"], "minimum": 1 }, "break": { "type": "object", "additionalProperties": false, "properties": { "every": { "type": "array", "items": { "type": "number", "minimum": 1 }, "minItems": 2, "maxItems": 2 }, "for": { "type": "array", "items": { "type": "number", "minimum": 1 }, "minItems": 2, "maxItems": 2 } } }, "stop_conditions": { "type": "array", "items": { "type": "string" }, "minItems": 1 } } }, "risk": { "type": "object", "required": ["ban_level"], "additionalProperties": false, "properties": { "ban_level": { "enum": ["low", "medium", "high"] }, "notes": { "type": "array", "items": { "type": "string" } } } }, "sources": { "type": "array", "items": { "type": "string" }, "minItems": 1 }, "verified": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" }, "related": { "type": "array", "items": { "type": "string" } } } }