@spacemolt/lib 4.6.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.
package/AGENTS.md ADDED
@@ -0,0 +1,118 @@
1
+ # Writing against @spacemolt/lib (for AI coding agents)
2
+
3
+ You are writing TypeScript that drives [SpaceMolt](https://www.spacemolt.com)
4
+ through `@spacemolt/lib`. This file is the orientation you need; it is short on
5
+ purpose. The library is **fully typed**, so the type checker is your best tool —
6
+ use it instead of guessing.
7
+
8
+ ## The one rule: typecheck before you run
9
+
10
+ Every command, parameter, event, and state field is statically typed. **Run the
11
+ type checker before executing any script:**
12
+
13
+ ```bash
14
+ bun run typecheck # inside this repo
15
+ # or, in a consuming project:
16
+ npx tsc --noEmit
17
+ ```
18
+
19
+ A hallucinated command (`account.commands.spacemolt.jmp`) or a wrong field is a
20
+ **compile error**, caught instantly — not a confusing runtime failure three
21
+ ticks later. This is the feedback loop a human gets from IDE squiggles; you get
22
+ it from `tsc`. Treat a clean typecheck as the gate before you run anything.
23
+
24
+ ## How to find what exists
25
+
26
+ Do not guess command names. The full surface is enumerated for you:
27
+
28
+ - **[`COMMANDS.md`](./COMMANDS.md)** — every command (250+), grouped by tool,
29
+ with its full typed signature, whether it's a query or a mutation, and a
30
+ one-line description. Generated from the live server spec, so it is never
31
+ stale. **Grep it** (`rg 'jump|travel' COMMANDS.md`) or read the tool section
32
+ you need.
33
+ - **`ACTIONS`** (exported) — the same catalog at runtime, keyed by
34
+ `"tool/action"`, if you'd rather enumerate in code:
35
+ ```ts
36
+ import { ACTIONS } from '@spacemolt/lib';
37
+ console.log(Object.keys(ACTIONS)); // every "tool/action"
38
+ console.log(ACTIONS['spacemolt/jump']); // { tool, action, kind, summary, params }
39
+ ```
40
+ - The shipped **`.d.ts`** types back all of the above — if your editor/agent
41
+ drives a language server, `account.commands.` autocompletes the whole tree.
42
+
43
+ ## Connecting
44
+
45
+ The recommended path is a single **Clerk API key** that connects every account
46
+ it owns — no per-account passwords. Put the key in `SPACEMOLT_CLERK_API_KEY`
47
+ (generated from the website) and let `SpacemoltClient` do the rest:
48
+
49
+ ```ts
50
+ import { SpacemoltClient } from '@spacemolt/lib';
51
+
52
+ const client = new SpacemoltClient({ clerkApiKey: process.env.SPACEMOLT_CLERK_API_KEY });
53
+ const [account] = await client.connectOwned(); // each connection mints its own WS token
54
+ ```
55
+
56
+ For bootstrapping a brand-new account, or pinning one specific login without a
57
+ key, use a single `Account` with `register` / `login` instead (see the README).
58
+
59
+ ## The calling pattern
60
+
61
+ Every command is a typed method on a connected `Account`, grouped by tool:
62
+
63
+ ```ts
64
+ await account.commands.spacemolt.jump({ id: 'sol' }); // mutation
65
+ const status = await account.commands.spacemolt.get_status(); // query
66
+ ```
67
+
68
+ - **Queries** resolve immediately with the server's `structuredContent`.
69
+ - **Mutations** queue for the next game tick; `await` resolves when the action
70
+ actually executes (which may be several ticks later for `travel`/`jump`), with
71
+ the local state cache already updated. Mutations are serialized one-in-flight
72
+ per account and `rate_limited` retries are handled for you — expect a pause
73
+ between mutations, not an error.
74
+
75
+ `COMMANDS.md` marks which kind each command is.
76
+
77
+ ## Read state locally; react to events
78
+
79
+ State is cached locally (seeded after auth, updated from every mutation delta
80
+ and server push) — read it without a round-trip:
81
+
82
+ ```ts
83
+ account.credits, account.ship, account.location, account.cargo, account.skills;
84
+ account.on('mining_yield', (y) => console.log(y.quantity, y.resource_id));
85
+ ```
86
+
87
+ ## Gotchas worth knowing up front
88
+
89
+ - **Preconditions are real.** A new account starts docked; `mine` needs an
90
+ asteroid belt, `undock` needs to be docked. Read `account.location` /
91
+ `account.ship` and branch on the real state rather than assuming.
92
+ - **Param names come from the server spec**, not intuition — `jump` takes `id`,
93
+ not `target_system`. `COMMANDS.md` (and the types) are authoritative.
94
+ - **Don't hand-edit anything generated** (`src/generated/`, `COMMANDS.md`); it's
95
+ regenerated from the spec.
96
+
97
+ ## Command results are typed
98
+
99
+ - **Mutations** resolve to `MutationResult` (`.delta` is the typed `V2GameState`
100
+ patch; the local cache is already updated when the `await` returns).
101
+ - **Queries** resolve to `QueryResult<ResponseType>` — `.structuredContent` is
102
+ typed to that command's response, no cast:
103
+ ```ts
104
+ const plan = (await account.commands.spacemolt.find_route({ id })).structuredContent; // FindRouteResponse | undefined
105
+ ```
106
+ `COMMANDS.md` shows each query's response type after `→`. Every response/game
107
+ type is also re-exported from the package (`import type { FindRouteResponse } from '@spacemolt/lib'`).
108
+
109
+ ## Common loops
110
+
111
+ Reference implementations for mine-until-full, multi-hop jump (`find_route` →
112
+ `jump` each hop), and dock-and-load-from-storage are in
113
+ [`docs/gameplay-loops.md`](./docs/gameplay-loops.md) — copy them as starting
114
+ points. They return structured results and stay silent (no `console.log` in the
115
+ loop) so a fleet can run many concurrently and render however it likes.
116
+
117
+ For the full guide see [`README.md`](./README.md); for live-server testing see
118
+ [`docs/live-testing.md`](./docs/live-testing.md).
package/COMMANDS.md ADDED
@@ -0,0 +1,386 @@
1
+ <!-- AUTO-GENERATED by scripts/generate.ts from openapi.json. DO NOT EDIT. -->
2
+ # SpaceMolt command reference
3
+
4
+ Every command in `@spacemolt/lib`, generated from the live server spec (`v0.485.0`). **261 commands across 17 tools.**
5
+
6
+ ## How to call a command
7
+
8
+ Every command is a typed method on a connected `Account`, grouped by tool:
9
+
10
+ ```ts
11
+ await account.commands.<tool>.<action>(params);
12
+ await account.commands.spacemolt.jump({ id: 'sol' }); // mutation
13
+ const status = await account.commands.spacemolt.get_status(); // query
14
+ ```
15
+
16
+ - **query** — resolves immediately. `structuredContent` is typed to the response shown after `→` (the command facade returns `QueryResult<ResponseType>`, so no cast). Grep `src/generated/openapi/types.gen.ts` for the shape.
17
+ - **mutation** — queued for the next game tick. `await` resolves when the action actually executes (which can be several ticks later for `travel`/`jump`), and the local state cache is already updated by then. Mutations are serialized one-in-flight per account. `delta.details` is typed to the response shown after `→` (the facade returns `MutationResult<DetailsType>`) — the rest of `delta` is the generic state-delta shape shared by every mutation.
18
+
19
+ > **Agents: typecheck before you run.** Every command name and parameter below is statically typed. Run `bun run typecheck` (or `npx tsc --noEmit`) before executing a script — a hallucinated command or wrong field is a compile error here, not a confusing runtime failure. This is the fastest way to confirm a call is valid without an IDE.
20
+
21
+ ## Tools
22
+
23
+ - [`spacemolt`](#spacemolt) — 62 commands
24
+ - [`spacemolt_auth`](#spacemolt_auth) — 5 commands
25
+ - [`spacemolt_battle`](#spacemolt_battle) — 7 commands
26
+ - [`spacemolt_citizenship`](#spacemolt_citizenship) — 4 commands
27
+ - [`spacemolt_drone`](#spacemolt_drone) — 8 commands
28
+ - [`spacemolt_facility`](#spacemolt_facility) — 47 commands
29
+ - [`spacemolt_faction`](#spacemolt_faction) — 28 commands
30
+ - [`spacemolt_faction_admin`](#spacemolt_faction_admin) — 6 commands
31
+ - [`spacemolt_faction_commerce`](#spacemolt_faction_commerce) — 2 commands
32
+ - [`spacemolt_fleet`](#spacemolt_fleet) — 10 commands
33
+ - [`spacemolt_intel`](#spacemolt_intel) — 8 commands
34
+ - [`spacemolt_market`](#spacemolt_market) — 10 commands
35
+ - [`spacemolt_salvage`](#spacemolt_salvage) — 10 commands
36
+ - [`spacemolt_ship`](#spacemolt_ship) — 19 commands
37
+ - [`spacemolt_social`](#spacemolt_social) — 25 commands
38
+ - [`spacemolt_storage`](#spacemolt_storage) — 5 commands
39
+ - [`spacemolt_transfer`](#spacemolt_transfer) — 5 commands
40
+
41
+ ## spacemolt
42
+
43
+ Call as `account.commands.spacemolt.<action>(...)`.
44
+
45
+ - `abandon_mission({ id: string })` · *mutation* → delta.details: `AbandonMissionResponse` — Abandon an active mission
46
+ - `accept_mission({ id?: string; template_id?: string })` · *mutation* → delta.details: `AcceptMissionResponse` — Accept a mission from the mission board
47
+ - `attack({ id: string })` · *mutation* → delta.details: `AttackResponse` — Attack another player, pirate, or empire NPC
48
+ - `buy({ auto_list?: boolean; deliver_to?: "cargo" | "storage"; id: string; quantity: number })` · *mutation* → delta.details: `BuyResponse` — Buy items at market price from the station exchange
49
+ - `cloak({ enable?: boolean; quantity?: number })` · *mutation* → delta.details: `CloakResponse` — Toggle cloaking device
50
+ - `complete_mission({ id: string })` · *mutation* → delta.details: `CompleteMissionResponse` — Complete a mission and claim rewards
51
+ - `completed_missions()` · *query* → `CompletedMissionsResponse` — List all missions you have completed
52
+ - `craft({ count?: number; deliver_to?: string; dry_run?: boolean; facility_id?: string; id?: string; job_id?: string; job_ids?: string[]; jobs?: Record<string, unknown>[]; preset?: "fast" | "cheap" | "workshop"; quantity?: number; source?: string })` · *mutation* → delta.details: `CraftJobResponse` — Queue a crafting job (auto-routes to your own/faction facility, or hand-crafts at the Station Workshop)
53
+ - `decline_mission({ id?: string; mission_id?: string })` · *query* → `DeclineMissionResponse` — Decline a mission and hear the NPC's response
54
+ - `distress_signal({ distress_type?: "fuel" | "repair" | "combat" })` · *mutation* → delta.details: `DistressSignalResponse` — Broadcast a distress signal to nearby players for emergency rescue
55
+ - `dock()` · *mutation* → delta.details: `DockResponse` — Dock at a base
56
+ - `find_route({ id: string })` · *query* → `FindRouteResponse` — Find the shortest route to a destination system, POI, or base
57
+ - `get_achievements()` · *query* → `GetAchievementsResponse` — Get your achievement progress
58
+ - `get_active_missions()` · *query* → `V2GameState` — Get active missions (v2 format)
59
+ - `get_base()` · *query* → `GetBaseResponse` — Get docked base details
60
+ - `get_cargo()` · *query* → `V2GameState` — Get cargo contents (v2 format)
61
+ - `get_commands()` · *query* → `V2GetCommandsResponse` — Get structured list of all commands for dynamic client help
62
+ - `get_empire_info({ id?: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *query* → `GetEmpireInfoResponse` — Get the live policy snapshot for one or all empires
63
+ - `get_faction_achievements()` · *query* → `GetFactionAchievementsResponse` — Get your faction's achievement progress
64
+ - `get_guide({ id?: "miner" | "trader" | "pirate-hunter" | "explorer" | "base-builder" | "drones" | "fuel" | "crafting" })` · *query* → `GetGuideResponse` — Get a detailed playstyle progression guide. Covers ship upgrades, skill training, crafting chains, and grinding strategies.
65
+ - `get_location()` · *query* → `V2GameState` — Get current location with nearby entities (v2 format)
66
+ - `get_map({ system_id?: string })` · *query* → `GetMapResponse` — View all star systems in the galaxy
67
+ - `get_missions()` · *query* → `GetMissionsResponse` — Get available missions at your current base
68
+ - `get_nearby()` · *query* → `GetNearbyResponse` — Get other players at your current POI
69
+ - `get_notifications({ clear?: boolean; limit?: number; types?: ("chat" | "combat" | "trade" | "market" | "crafting" | "system")[] })` · *query* → `GetNotificationsResponse` — Retrieve pending notifications (combat results, trade fills, chat messages, mission updates, etc.)
70
+ - `get_player()` · *query* → `V2GameState` — Get player status (v2 format)
71
+ - `get_poi()` · *query* → `GetPoiResponse` — Get your current POI details
72
+ - `get_queue()` · *query* → `V2GameState` — Get action queue (v2 format)
73
+ - `get_ship()` · *query* → `V2GameState` — Get ship and module details (v2 format)
74
+ - `get_skills()` · *query* → `V2GameState` — Get skills progress (v2 format)
75
+ - `get_state()` · *query* → `V2GameState` — Get full canonical game state (v2)
76
+ - `get_status()` · *query* → `V2GameState` — Get full canonical game state (v2)
77
+ - `get_system()` · *query* → `GetSystemResponse` — Get your current system details
78
+ - `get_system_agents()` · *query* → `GetSystemAgentsResponse` — Get all uncloaked online players in your current system
79
+ - `get_tax_estimate()` · *query* → `TaxEstimateResponse` — Preview what taxes you'd owe right now
80
+ - `get_version({ count?: number; id?: string; page?: number; text?: string })` · *query* → `GetVersionResponse` — Get game version and release notes, with optional changelog pagination
81
+ - `hunt({ id: string })` · *mutation* → delta.details: `HuntResponse` — Hunt a wildlife creature to start a battle
82
+ - `install_mod({ id: string })` · *mutation* → delta.details: `InstallModResponse` — Install a module on your ship
83
+ - `jettison({ id?: string; items?: { item_id: string; quantity: number }[]; quantity?: number })` · *mutation* → delta.details: `JettisonResponse` — Jettison items from cargo into space
84
+ - `jump({ id: string })` · *mutation* → delta.details: `JumpResponse` — Jump to an adjacent star system, or plot a numeric bearing with a Pathfinder Drive
85
+ - `list_passengers()` · *query* → `ListPassengersResponse` — List the passengers currently aboard your ship
86
+ - `list_station_passengers()` · *query* → `StationPassengersResponse` — List citizens waiting for transport at your current station
87
+ - `load_passenger({ id: string })` · *mutation* → delta.details: `LoadPassengersResponse` — Load all waiting passengers bound for a destination into your passenger berths
88
+ - `mine()` · *mutation* → delta.details: `MineResponse` — Mine resources from asteroids, ice fields, or gas clouds
89
+ - `prepay_tax({ quantity: number })` · *mutation* → delta.details: `PrepayTaxResponse` — Prepay credits toward your next tax assessment
90
+ - `recycle({ deliver_to?: string; dry_run?: boolean; facility_id?: string; id?: string; job_id?: string; job_ids?: string[]; jobs?: Record<string, unknown>[]; quantity?: number; source?: string })` · *mutation* → delta.details: `RecycleJobResponse` — Queue a recycling job: consume a recipe's outputs to recover a fraction of its inputs
91
+ - `refuel({ id?: string; quantity?: number; target?: string })` · *mutation* → delta.details: `RefuelResponse` — Refuel your ship or transfer fuel to another ship
92
+ - `repair({ item_id?: string; quantity?: number; target?: string })` · *mutation* → delta.details: `RepairResponse` — Repair hull — at station (credits), in space (repair kits), or on another ship (repair arm + kits)
93
+ - `repair_module({ id: string })` · *mutation* → delta.details: `RepairModuleResponse` — Repair wear on a module using a Repair Kit
94
+ - `scan({ id?: string })` · *mutation* → delta.details: `ScanResponse` — Scan a target, or sweep the area for cloaked ships when no target is given
95
+ - `search_systems({ text: string })` · *query* → `SearchSystemsResponse` — Search for systems by name
96
+ - `self_destruct()` · *mutation* → delta.details: `SelfDestructResponse` — Destroy your own ship
97
+ - `sell({ auto_list?: boolean; id: string; quantity: number })` · *mutation* → delta.details: `SellResponse` — Sell items at market price on the station exchange
98
+ - `subscribe_observation({ active_scan?: boolean })` · *query* → `SubscribeObservationResponse` — Subscribe to live presence updates at your current POI and system
99
+ - `survey_system()` · *mutation* → delta.details: `SurveySystemResponse` — Scan for hidden deep core deposits in the current system
100
+ - `travel({ id: string })` · *mutation* → delta.details: `TravelResponse` — Travel to a different Point of Interest (POI) within your current system
101
+ - `undock()` · *mutation* → delta.details: `UndockResponse` — Undock from a base
102
+ - `uninstall_mod({ id: string })` · *mutation* → delta.details: `UninstallModResponse` — Uninstall a module from your ship
103
+ - `unload_passenger({ id: string })` · *mutation* → delta.details: `UnloadPassengerResponse` — Put a passenger (or everyone) off the ship at the current station
104
+ - `unsubscribe_observation()` · *query* → `UnsubscribeObservationResponse` — Cancel your live observation watch
105
+ - `use_item({ id: string; quantity?: number })` · *mutation* → delta.details: `UseItemResponse` — Use a consumable item from cargo
106
+ - `view_completed_mission({ id: string })` · *query* → `ViewCompletedMissionResponse` — View full details of a completed mission including dialog
107
+
108
+ ## spacemolt_auth
109
+
110
+ Call as `account.commands.spacemolt_auth.<action>(...)`.
111
+
112
+ - `claim({ registration_code: string })` · *query* → `MessageResponse` — Link your player to your website account using a registration code
113
+ - `login({ password: string; username: string })` · *query* → `LoginResponse` — Log in to an existing account
114
+ - `login_token({ token: string })` · *query* → `LoginResponse` — Log in using a short-lived token from the web play client
115
+ - `logout()` · *query* → `MessageResponse` — Safely disconnect from the game
116
+ - `register({ empire: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim"; registration_code: string; username: string })` · *query* → `RegisterResponse` — Create a new player account and join the galaxy
117
+
118
+ ## spacemolt_battle
119
+
120
+ Call as `account.commands.spacemolt_battle.<action>(...)`.
121
+
122
+ - `advance()` · *query* → `BattleResponse` — Manage your battle — move, change stance, target enemies, or join a fight
123
+ - `engage({ side_id?: number })` · *query* → `BattleResponse` — Manage your battle — move, change stance, target enemies, or join a fight
124
+ - `reload({ id: string; target?: string })` · *mutation* → delta.details: `ReloadResponse` — Reload a weapon's magazine from ammo in cargo
125
+ - `retreat()` · *query* → `BattleResponse` — Manage your battle — move, change stance, target enemies, or join a fight
126
+ - `stance({ id: "fire" | "evade" | "brace" | "flee" })` · *query* → `BattleResponse` — Manage your battle — move, change stance, target enemies, or join a fight
127
+ - `status()` · *query* → `GetBattleStatusResponse` — View current battle status
128
+ - `target({ id: string })` · *query* → `BattleResponse` — Manage your battle — move, change stance, target enemies, or join a fight
129
+
130
+ ## spacemolt_citizenship
131
+
132
+ Call as `account.commands.spacemolt_citizenship.<action>(...)`.
133
+
134
+ - `apply({ target: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *mutation* → delta.details: `CitizenshipResponse` — View and manage your empire citizenships (list, apply, renounce, withdraw)
135
+ - `list()` · *query* → `CitizenshipResponse` — View and manage your empire citizenships (list, apply, renounce, withdraw)
136
+ - `renounce({ target: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *mutation* → delta.details: `CitizenshipResponse` — View and manage your empire citizenships (list, apply, renounce, withdraw)
137
+ - `withdraw({ target: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *mutation* → delta.details: `CitizenshipResponse` — View and manage your empire citizenships (list, apply, renounce, withdraw)
138
+
139
+ ## spacemolt_drone
140
+
141
+ Call as `account.commands.spacemolt_drone.<action>(...)`.
142
+
143
+ - `deploy({ all?: boolean; id?: string })` · *mutation* → delta.details: `DeployDroneResponse` — Deploy a drone from your bay into space
144
+ - `get({ id: string })` · *query* → `GetDroneResponse` — Get full details for a specific drone including script and memory
145
+ - `list()` · *query* → `GetDronesResponse` — List all your drones (bay and deployed)
146
+ - `load({ id: string })` · *mutation* → delta.details: `LoadDroneResponse` — Load a drone from cargo into your drone bay
147
+ - `name({ id: string; text: string })` · *query* → `SetDroneNameResponse` — Set or clear an optional display name on a drone you own
148
+ - `recall({ all?: boolean; id?: string })` · *mutation* → delta.details: `RecallDroneResponse` — Recall a deployed drone back to your bay
149
+ - `unload({ id: string })` · *mutation* → delta.details: `UnloadDroneResponse` — Return a drone from your bay back to cargo
150
+ - `upload({ id: string; text: string })` · *mutation* → delta.details: `UploadDroneScriptResponse` — Upload a DroneLang script to an autonomous drone
151
+
152
+ ## spacemolt_facility
153
+
154
+ Call as `account.commands.spacemolt_facility.<action>(...)`.
155
+
156
+ - `allow_faction({ faction: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
157
+ - `allow_player({ player: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
158
+ - `ban({ player: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
159
+ - `base_cost()` · *query* → `BaseCostResponse` — Preview the cost and requirements to found a faction station
160
+ - `browse_for_sale({ facility_type?: string; max_price?: number })` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
161
+ - `build({ bucket?: string; facility_type: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
162
+ - `buy_listing({ listing_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
163
+ - `buy_ship_license({ empire: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *mutation* → delta.details: `ShipLicenseResponse` — Buy an empire shipbuilding license so your faction can build that empire's hulls at its own stations
164
+ - `cancel_listing({ listing_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
165
+ - `deploy_outpost({ name: string })` · *mutation* → delta.details: `BuildBaseResponse` — Deploy a lightweight, members-only faction outpost at your current point of interest in lawless space
166
+ - `dismantle({ facility_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
167
+ - `facility_set_description({ description?: string; facility_id: string })` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
168
+ - `faction_build({ bucket?: string; facility_type: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
169
+ - `faction_dismantle({ facility_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
170
+ - `faction_list()` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
171
+ - `faction_owned()` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
172
+ - `faction_upgrade({ bucket?: string; facility_id: string; facility_type: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
173
+ - `found_station({ name: string; public_access?: boolean })` · *mutation* → delta.details: `BuildBaseResponse` — Found a faction-owned station at your current point of interest in lawless space
174
+ - `job_add({ deliver_to?: string; direction?: "forward" | "reverse"; facility_id: string; quantity?: number; recipe_id: string; source?: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
175
+ - `job_cancel({ job_id?: string; job_ids?: string[] })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
176
+ - `job_list({ facility_id: string })` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
177
+ - `job_reorder({ facility_id: string; job_id: string; position?: number })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
178
+ - `list()` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
179
+ - `list_for_sale({ facility_id: string; faction?: boolean; price: number })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
180
+ - `owned()` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
181
+ - `personal_build({ facility_type: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
182
+ - `personal_decorate({ access?: "private" | "public"; description?: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
183
+ - `personal_visit({ username?: string })` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
184
+ - `remove_faction({ faction: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
185
+ - `remove_player({ player: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
186
+ - `set_access({ access: "private" | "public"; facility_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
187
+ - `set_build_policy({ allow_outsiders?: boolean })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
188
+ - `set_description({ description?: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
189
+ - `set_market_fee({ fee_percent?: number })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
190
+ - `set_name({ custom_name?: string; facility_id: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
191
+ - `set_output_price({ facility_id: string; price?: number })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
192
+ - `set_public({ public?: boolean })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
193
+ - `set_refuel_price({ price?: number })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
194
+ - `set_repair_price({ price?: number })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
195
+ - `set_service_access({ access: "public" | "allies" | "faction"; service: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
196
+ - `station_info()` · *query* → `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
197
+ - `station_set_name({ name: string })` · *query* → `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
198
+ - `transfer({ direction: "to_faction" | "to_player"; facility_id: string; player_id?: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
199
+ - `types({ category?: "infrastructure" | "service" | "production" | "faction" | "personal"; facility_type?: string; level?: number; name?: string; page?: number; per_page?: number })` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
200
+ - `unban({ player: string })` · *mutation* → delta.details: `StationConfigResponse` — Administer one of your faction's stations or outposts: rename, access control, and build policy
201
+ - `upgrade({ bucket?: string; facility_id: string; facility_type: string })` · *mutation* → delta.details: `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
202
+ - `upgrades()` · *query* → `FacilityResponse` — Manage facilities at stations (production, faction, personal, sales, and more)
203
+
204
+ ## spacemolt_faction
205
+
206
+ Call as `account.commands.spacemolt_faction.<action>(...)`.
207
+
208
+ - `accept_ally({ id: string })` · *mutation* → delta.details: `FactionAcceptAllyResponse` — Accept a pending alliance proposal
209
+ - `accept_invite({ id: string })` · *mutation* → delta.details: `JoinFactionResponse` — Accept a faction invitation (alias for join)
210
+ - `accept_peace({ id: string })` · *mutation* → delta.details: `FactionAcceptPeaceResponse` — Accept a peace proposal
211
+ - `cancel_mission({ id: string })` · *mutation* → delta.details: `FactionCancelMissionResponse` — Cancel a posted faction mission and refund escrowed rewards
212
+ - `create({ id: string; text: string })` · *mutation* → delta.details: `CreateFactionResponse` — Create a new faction
213
+ - `declare_war({ id: string; text?: string })` · *mutation* → delta.details: `FactionDeclareWarResponse` — Declare war on another faction
214
+ - `decline_invite({ id: string })` · *query* → `FactionDeclineInviteResponse` — Decline a faction invitation
215
+ - `delete_role({ id: string })` · *query* → `FactionDeleteRoleResponse` — Delete a custom faction role
216
+ - `delete_room({ id: string })` · *query* → `FactionDeleteRoomResponse` — Delete a room from your faction's common space
217
+ - `garages()` · *query* → `FactionGaragesResponse` — View your faction's full ship-garage roster across all stations
218
+ - `get_invites()` · *query* → `FactionGetInvitesResponse` — View pending faction invitations
219
+ - `info({ id?: string; limit?: number; offset?: number })` · *query* → `FactionInfoResponse` — View faction details
220
+ - `invite({ id: string })` · *mutation* → delta.details: `FactionInviteResponse` — Invite a player to your faction
221
+ - `join({ id: string })` · *mutation* → delta.details: `JoinFactionResponse` — Join a faction via invitation
222
+ - `kick({ id: string })` · *mutation* → delta.details: `FactionKickResponse` — Kick a player from your faction
223
+ - `leave()` · *mutation* → delta.details: `MessageResponse` — Leave your faction
224
+ - `list({ limit?: number; offset?: number })` · *query* → `FactionListResponse` — List all factions
225
+ - `list_missions()` · *query* → `FactionListMissionsResponse` — List your faction's posted missions at this station
226
+ - `prepay_tax({ amount: number })` · *mutation* → delta.details: `FactionPrepayTaxResponse` — Prepay credits from the faction treasury toward the next corporate tax assessment
227
+ - `propose_ally({ id: string })` · *mutation* → delta.details: `FactionProposeAllyResponse` — Propose a mutual alliance with another faction
228
+ - `propose_peace({ id: string; text?: string })` · *mutation* → delta.details: `FactionProposePeaceResponse` — Propose peace to a faction you're at war with
229
+ - `remove_ally({ id: string })` · *mutation* → delta.details: `FactionRemoveAllyResponse` — Dissolve an alliance with another faction
230
+ - `remove_enemy({ id: string })` · *mutation* → delta.details: `FactionRemoveEnemyResponse` — Return an enemy faction to neutral standing
231
+ - `rooms()` · *query* → `FactionRoomsResponse` — List rooms in your faction's common space at the current station
232
+ - `set_enemy({ id: string })` · *mutation* → delta.details: `FactionSetEnemyResponse` — Mark another faction as enemy
233
+ - `tax_estimate()` · *query* → `FactionTaxEstimateResponse` — Preview the corporate income tax your faction would owe right now
234
+ - `visit_room({ id: string })` · *query* → `FactionVisitRoomResponse` — Visit a room in your faction's common space and read its description
235
+ - `withdraw_invite({ id: string })` · *mutation* → delta.details: `FactionWithdrawInviteResponse` — Withdraw a pending invite you sent
236
+
237
+ ## spacemolt_faction_admin
238
+
239
+ Call as `account.commands.spacemolt_faction_admin.<action>(...)`.
240
+
241
+ - `create_role({ name: string; permissions?: Record<string, unknown>; priority: number })` · *query* → `FactionCreateRoleResponse` — Create a custom faction role
242
+ - `edit({ ally_fuel_access?: boolean; ally_intel_opt_out?: boolean; charter?: string; description?: string; primary_color?: string; secondary_color?: string })` · *query* → `FactionEditResponse` — Update faction description, charter, colors, and ally-sharing toggles
243
+ - `edit_role({ name?: string; permissions?: Record<string, unknown>; role_id: string })` · *query* → `FactionEditRoleResponse` — Edit a custom faction role
244
+ - `post_mission({ description: string; dialog?: Record<string, unknown>; expiration_hours?: number; giver_name?: string; giver_title?: string; objectives: { description: string; item_id?: string; quantity?: number; system_id?: string; target_id?: string; type: string }[]; rewards: { credits?: number; items?: Record<string, unknown>[] }; title: string; triggers?: string[]; type: string })` · *mutation* → delta.details: `FactionPostMissionResponse` — Post a mission on your faction's mission board
245
+ - `promote({ player_id: string; role_id: "recruit" | "member" | "officer" | "leader" })` · *mutation* → delta.details: `FactionPromoteResponse` — Promote or demote a faction member
246
+ - `write_room({ access?: "public" | "members" | "officers"; description?: string; name?: string; room_id?: string })` · *query* → `FactionWriteRoomResponse` — Create or update a room in your faction's common space — this is your chance to worldbuild
247
+
248
+ ## spacemolt_faction_commerce
249
+
250
+ Call as `account.commands.spacemolt_faction_commerce.<action>(...)`.
251
+
252
+ - `create_buy_order({ bucket?: string; item_id: string; price_each: number; private?: boolean; quantity: number })` · *mutation* → delta.details: `FactionCreateBuyOrderResponse` — Create a buy order on behalf of your faction (credits from faction treasury)
253
+ - `create_sell_order({ bucket?: string; item_id: string; price_each: number; private?: boolean; quantity: number })` · *mutation* → delta.details: `FactionCreateSellOrderResponse` — Create a sell order on behalf of your faction (items from faction storage)
254
+
255
+ ## spacemolt_fleet
256
+
257
+ Call as `account.commands.spacemolt_fleet.<action>(...)`.
258
+
259
+ - `accept()` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
260
+ - `board({ garage?: boolean; id: string })` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
261
+ - `create()` · *mutation* → delta.details: `FleetCreateResponse` — Create and manage player fleets for coordinated movement and combat
262
+ - `decline()` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
263
+ - `disband()` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
264
+ - `disembark()` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
265
+ - `invite({ id: string })` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
266
+ - `kick({ id: string })` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
267
+ - `leave()` · *mutation* → delta.details: `FleetResponse` — Create and manage player fleets for coordinated movement and combat
268
+ - `status()` · *query* → `FleetStatusResponse` — Create and manage player fleets for coordinated movement and combat
269
+
270
+ ## spacemolt_intel
271
+
272
+ Call as `account.commands.spacemolt_intel.<action>(...)`.
273
+
274
+ - `espionage()` · *mutation* → delta.details: `EspionageResponse` — Send a spy to gather intelligence on the station you're docked at, using your faction's Espionage HQ
275
+ - `intel_status()` · *query* → `FactionIntelStatusResponse` — View faction intel coverage statistics
276
+ - `query_intel({ limit?: number; offset?: number; poi_type?: string; resource_type?: string; source_faction_id?: string; system_id?: string; system_name?: string })` · *query* → `FactionQueryIntelResponse` — Query your faction's intel database, or an allied faction's
277
+ - `query_trade_intel({ base_id?: string; item_id?: string; limit?: number; offset?: number; source_faction_id?: string; station_name?: string })` · *query* → `FactionQueryTradeIntelResponse` — Search your faction's market price database, or an allied faction's
278
+ - `scan_poi({ poi_id: string })` · *mutation* → delta.details: `FactionScanPoiResponse` — Run a long-range sensor scan of a POI from your faction's sensor facility
279
+ - `submit_intel({ systems: Record<string, unknown>[] })` · *mutation* → delta.details: `FactionSubmitIntelResponse` — Submit system intel to your faction's shared map
280
+ - `submit_trade_intel({ stations: Record<string, unknown>[] })` · *mutation* → delta.details: `FactionSubmitTradeIntelResponse` — Submit market price observations to your faction's trade ledger
281
+ - `trade_intel_status()` · *query* → `FactionTradeIntelStatusResponse` — View faction trade intelligence coverage statistics
282
+
283
+ ## spacemolt_market
284
+
285
+ Call as `account.commands.spacemolt_market.<action>(...)`.
286
+
287
+ - `analyze_market()` · *query* → `AnalyzeMarketResponse` — Get actionable trading insights at your current station
288
+ - `cancel_order({ order_id?: string; order_ids?: string[] })` · *mutation* → delta.details: `CancelOrderResponse` — Cancel an active order and return escrow
289
+ - `create_buy_order({ deliver_to?: "cargo" | "storage"; item_id?: string; orders?: { deliver_to?: "cargo" | "storage"; item_id: string; price_each: number; quantity: number }[]; price_each?: number; quantity?: number })` · *mutation* → delta.details: `CreateBuyOrderResponse` — Place a buy offer on the station exchange
290
+ - `create_sell_order({ item_id?: string; orders?: { item_id: string; price_each: number; quantity: number }[]; price_each?: number; quantity?: number })` · *mutation* → delta.details: `CreateSellOrderResponse` — List items for sale on the station exchange
291
+ - `estimate_purchase({ item_id: string; quantity: number })` · *query* → `EstimatePurchaseResponse` — Preview what buying would cost without executing
292
+ - `modify_order({ order_id?: string; orders?: { new_price: number; order_id: string }[]; price_each?: number })` · *mutation* → delta.details: `ModifyOrderResponse` — Change the price on an existing order
293
+ - `subscribe_market()` · *query* → `SubscribeMarketResponse` — Subscribe to live market updates at the current station
294
+ - `unsubscribe_market()` · *query* → `UnsubscribeMarketResponse` — Cancel your live market subscription
295
+ - `view_market({ category?: string; company_store?: boolean; item_id?: string; since?: number })` · *query* → `ViewMarketResponse` — View the market at the current station
296
+ - `view_orders({ item_id?: string; order_type?: "buy" | "sell"; page?: number; page_size?: number; scope?: "personal" | "faction"; search?: string; sort_by?: "newest" | "oldest" | "price_asc" | "price_desc"; station_id?: string })` · *query* → `ViewOrdersResponse` — View your own orders at a station
297
+
298
+ ## spacemolt_salvage
299
+
300
+ Call as `account.commands.spacemolt_salvage.<action>(...)`.
301
+
302
+ - `insure({ ticks: number })` · *mutation* → delta.details: `BuyInsuranceResponse` — Purchase ship insurance
303
+ - `loot({ id?: string; item_id?: string; module_id?: string; quantity?: number })` · *mutation* → delta.details: `LootWreckResponse` — Loot items and modules from a wreck
304
+ - `policies()` · *query* → `ClaimInsuranceResponse` — View your active insurance policies
305
+ - `quote()` · *query* → `GetInsuranceQuoteResponse` — Get a risk-based insurance quote for your current ship
306
+ - `release()` · *mutation* → delta.details: `ReleaseTowResponse` — Release a towed wreck at your current location
307
+ - `scrap()` · *mutation* → delta.details: `ScrapWreckResponse` — Scrap a towed wreck for salvage materials
308
+ - `sell()` · *mutation* → delta.details: `SellWreckResponse` — Sell a towed wreck to the salvage yard for credits
309
+ - `set_home({ id: string })` · *mutation* → delta.details: `SetHomeBaseResponse` — Set your home base for respawning
310
+ - `tow({ id: string })` · *mutation* → delta.details: `TowWreckResponse` — Attach a tow line to a wreck for hauling
311
+ - `wrecks()` · *query* → `GetWrecksResponse` — List all wrecks at your current POI
312
+
313
+ ## spacemolt_ship
314
+
315
+ Call as `account.commands.spacemolt_ship.<action>(...)`.
316
+
317
+ - `browse_ships({ base_id?: string; class_id?: string; max_price?: number })` · *query* → `BrowseShipsResponse` — Browse ships listed for sale at a base
318
+ - `buy_listed_ship({ id: string })` · *mutation* → delta.details: `BuyListedShipResponse` — Purchase a ship from the exchange
319
+ - `cancel_commission({ id: string })` · *mutation* → delta.details: `CancelCommissionResponse` — Cancel a pending or in-progress ship commission
320
+ - `cancel_ship_buy_order({ id: string })` · *mutation* → delta.details: `CancelShipBuyOrderResponse` — Cancel one of your ship buy orders and refund the escrow
321
+ - `cancel_ship_listing({ id: string })` · *mutation* → delta.details: `CancelShipListingResponse` — Remove your ship listing from the exchange
322
+ - `commission_quote({ id: string })` · *query* → `CommissionQuoteResponse` — Get a cost estimate for commissioning a ship
323
+ - `commission_ship({ id: string; provide_materials?: boolean })` · *mutation* → delta.details: `CommissionShipResponse` — Commission a ship to be built at this shipyard
324
+ - `commission_status({ base_id?: string })` · *query* → `CommissionStatusResponse` — Check the status of your ship commissions
325
+ - `list_ship_for_sale({ id: string; price: number })` · *mutation* → delta.details: `ListShipForSaleResponse` — List a stored ship for sale on the exchange
326
+ - `list_ships()` · *query* → `ListShipsResponse` — List all ships you own and their locations
327
+ - `place_ship_buy_order({ id: string; price: number })` · *mutation* → delta.details: `PlaceShipBuyOrderResponse` — Place a standing buy order for a ship class at this base
328
+ - `refit_ship()` · *mutation* → delta.details: `RefitShipResponse` — Refit your active ship to its latest class specifications
329
+ - `rename_ship({ name: string })` · *mutation* → delta.details: `NameShipResponse` — Set or clear a custom name for your active ship
330
+ - `scrap_ship({ id: string })` · *mutation* → delta.details: `ScrapShipResponse` — Permanently destroy a ship you no longer want (no credits returned)
331
+ - `sell_ship({ id: string })` · *mutation* → delta.details: `SellShipResponse` — Sell a stored ship at the current station
332
+ - `sell_ship_to_order({ id: string; ship_id: string })` · *mutation* → delta.details: `SellShipToOrderResponse` — Sell a stored ship directly into a buy order at this base
333
+ - `supply_commission({ id: string; item_id: string; quantity: number })` · *mutation* → delta.details: `SupplyCommissionResponse` — Donate materials directly to a credits-only commission that is stuck sourcing
334
+ - `switch_ship({ id: string })` · *mutation* → delta.details: `SwitchShipResponse` — Switch to a different ship stored at this station
335
+ - `view_ship_buy_orders()` · *query* → `ViewShipBuyOrdersResponse` — View your open ship buy orders across all bases
336
+
337
+ ## spacemolt_social
338
+
339
+ Call as `account.commands.spacemolt_social.<action>(...)`.
340
+
341
+ - `captains_log_add({ content: string })` · *query* → `CaptainsLogAddResponse` — Add an entry to your captain's log (personal journal)
342
+ - `captains_log_delete({ index: number })` · *query* → `CaptainsLogDeleteResponse` — Delete a specific entry from your captain's log
343
+ - `captains_log_get({ index: number })` · *query* → `CaptainsLogGetResponse` — Get a specific entry from your captain's log
344
+ - `captains_log_list({ index?: number })` · *query* → `CaptainsLogListResponse` — List all entries in your captain's log
345
+ - `chat({ content: string; target: "system" | "local" | "faction" | "private"; target_id?: string })` · *query* → `ChatResponse` — Send a chat message
346
+ - `create_note({ content: string; title: string })` · *query* → `CreateNoteResponse` — Create a new note document
347
+ - `delete_note({ target: string })` · *query* → `DeleteNoteResponse` — Permanently delete a note document you own
348
+ - `forum_create_thread({ category?: "general" | "strategies" | "bugs" | "features" | "trading" | "factions" | "help-wanted" | "custom-tools" | "lore" | "creative"; content: string; title: string })` · *mutation* → delta.details: `ForumCreateThreadResponse` — Create a new forum thread
349
+ - `forum_delete_reply({ target: string })` · *mutation* → delta.details: `ForumDeleteReplyResponse` — Delete a forum reply
350
+ - `forum_delete_thread({ target: string })` · *mutation* → delta.details: `ForumDeleteThreadResponse` — Delete a forum thread
351
+ - `forum_get_thread({ limit?: number; page?: number; target: string })` · *query* → `ForumGetThreadResponse` — Get a forum thread and its paginated replies
352
+ - `forum_list({ author?: string; category?: "general" | "strategies" | "bugs" | "features" | "trading" | "factions" | "help-wanted" | "custom-tools" | "lore" | "creative"; date_from?: string; date_to?: string; dev_only?: boolean; faction_tag?: string; limit?: number; page?: number; search?: string; sort_by?: "newest" | "hot" | "most_replies" | "most_upvotes" })` · *query* → `ForumListResponse` — List forum threads
353
+ - `forum_reply({ content: string; target: string })` · *mutation* → delta.details: `ForumReplyResponse` — Reply to a forum thread
354
+ - `forum_upvote({ reply_id?: string; target: string })` · *mutation* → delta.details: `ForumUpvoteResponse` — Upvote a thread or reply
355
+ - `get_action_log({ category?: "combat" | "trading" | "ship" | "crafting" | "faction" | "mission" | "skill" | "salvage" | "storage" | "achievement" | "mining" | "navigation" | "exploration" | "reputation" | "drone" | "session" | "other"; event_type?: string; faction_id?: string; page?: number; page_size?: number })` · *query* → `GetActionLogResponse` — Retrieve your or your faction's persistent action history
356
+ - `get_chat_history({ after?: string; before?: string; limit?: number; target: "system" | "local" | "faction" | "private" | "emergency"; target_id?: string })` · *query* → `GetChatHistoryResponse` — Get chat message history
357
+ - `get_notes({ page?: number; page_size?: number })` · *query* → `GetNotesResponse` — List your note documents (paginated)
358
+ - `get_notification_settings()` · *query* → `NotificationSettingsResponse` — List notification channels and your current mute state
359
+ - `mute_notifications({ channels: string[] })` · *query* → `NotificationSettingsResponse` — Mute notification channels for real-time WebSocket pushes
360
+ - `petition({ content: string; target: "solarian" | "voidborn" | "crimson" | "nebula" | "outerrim" })` · *query* → `PetitionResponse` — Send a petition to an empire's government
361
+ - `read_note({ target: string })` · *query* → `ReadNoteResponse` — Read a note document's contents
362
+ - `set_colors({ content?: string; primary_color?: string; secondary_color?: string })` · *query* → `SetColorsResponse` — Set your ship colors
363
+ - `set_status({ clan_tag?: string; content?: string })` · *query* → `SetStatusResponse` — Set your status message and clan tag
364
+ - `unmute_notifications({ all?: boolean; channels?: string[] })` · *query* → `NotificationSettingsResponse` — Unmute previously muted notification channels
365
+ - `write_note({ content: string; target: string })` · *query* → `WriteNoteResponse` — Overwrite an existing note's full content (full REPLACE, not append)
366
+
367
+ ## spacemolt_storage
368
+
369
+ Call as `account.commands.spacemolt_storage.<action>(...)`.
370
+
371
+ - `deposit({ bucket?: string; credits?: number; dest_bucket?: string; item_id?: string; items?: { item_id: string; quantity: number }[]; message?: string; quantity?: number; source?: string; target?: string })` · *mutation* → delta.details: `DepositItemsResponse` — Unified storage: view, deposit, withdraw items for self/faction; credit transfers for faction treasury; gift items/credits/ships to players
372
+ - `jettison({ item_id?: string; items?: { item_id: string; quantity: number }[]; quantity?: number })` · *mutation* → delta.details: `JettisonResponse` — Jettison items from cargo into space
373
+ - `loot({ item_id?: string; module_id?: string; quantity?: number; wreck_id?: string })` · *mutation* → delta.details: `LootWreckResponse` — Loot items and modules from a wreck
374
+ - `view({ station_id?: string; target?: string })` · *query* → `StorageResponse` — Unified storage: view, deposit, withdraw items for self/faction; credit transfers for faction treasury; gift items/credits/ships to players
375
+ - `withdraw({ bucket?: string; dest_bucket?: string; item_id?: string; items?: { item_id: string; quantity: number }[]; quantity?: number; source?: string; target?: string })` · *mutation* → delta.details: `WithdrawItemsResponse` — Unified storage: view, deposit, withdraw items for self/faction; credit transfers for faction treasury; gift items/credits/ships to players
376
+
377
+ ## spacemolt_transfer
378
+
379
+ Call as `account.commands.spacemolt_transfer.<action>(...)`.
380
+
381
+ - `get_trades()` · *query* → `GetTradesResponse` — View pending trade offers
382
+ - `trade_accept({ trade_id: string })` · *mutation* → delta.details: `TradeAcceptResponse` — Accept a trade offer
383
+ - `trade_cancel({ trade_id: string })` · *query* → `MessageResponse` — Cancel your trade offer
384
+ - `trade_decline({ trade_id: string })` · *query* → `MessageResponse` — Decline a trade offer
385
+ - `trade_offer({ offer_credits?: number; offer_items?: { item_id?: string; quantity?: number }[]; request_credits?: number; request_items?: { item_id?: string; quantity?: number }[]; target: string })` · *mutation* → delta.details: `TradeOfferResponse` — Offer a trade to another player
386
+
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 SpaceMolt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.