{"ok":true,"site":{"host":"acoustom.vercel.app","url":"https://acoustom.vercel.app/","type":"live","desc":"Acoustom","tools":[{"name":"get_acoustom_overview","kind":"answer","impl":"imperative","description":"Returns what Acoustom is, what the agent can do here, what the platform deliberately does not do, the page map, and the capability-to-tool mapping. The first call for any new session.","title":"Get Acoustom site overview","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_acoustom_skills","kind":"answer","impl":"imperative","description":"Returns every skill available to the agent in this session: a one-line description, when to load it, and the tool names it expects the agent to call. Use get_acoustom_skill to read the full instructions for a single skill.","title":"List Acoustom skills","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_acoustom_skill","kind":"answer","impl":"imperative","description":"Returns the full instructions for a single Acoustom skill by name. Load a specialised skill before running a workflow it owns; load acoustom-guided-discovery for broad or combined requests.","title":"Get an Acoustom skill","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","enum":["acoustom-guided-discovery","acoustom-speaker-recommendation","acoustom-speaker-comparison","acoustom-custom-speaker-build","acoustom-room-simulation"]}},"required":["name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_webmcp_tools","kind":"answer","impl":"imperative","description":"Returns every tool this WebMCP host has registered, grouped by capability. Use get_webmcp_tool_contract to inspect a single tool’s full input and response schema before calling it.","title":"List registered WebMCP tools","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_webmcp_tool_contract","kind":"answer","impl":"imperative","description":"Returns the input schema and response schema for a registered Acoustom WebMCP tool. Backend response schemas reference the live FastAPI OpenAPI document.","title":"Get a WebMCP tool contract","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"toolName":{"type":"string","enum":["get_acoustom_overview","list_acoustom_skills","get_acoustom_skill","list_webmcp_tools","get_webmcp_tool_contract","get_user_context","get_acoustom_workflow","list_products","get_product","recommend_speakers","compare_speakers","set_comparison_selection","get_room_simulation_presets","list_reference_tracks","set_reference_track","upload_reference_audio","set_music_preferences","attach_room_reference_images","get_room_estimate_contract","apply_agent_room_estimate","get_current_room_spec","get_live_simulation_result","set_listening_lab_speaker","refresh_room_simulation","get_room_reference_images","get_shared_simulated_audio","get_custom_speaker_builder_options","validate_custom_speaker_build","generate_custom_build_sheet","list_saved_custom_configurations","get_saved_custom_configuration","save_custom_configuration","delete_saved_custom_configuration","list_local_builds","save_local_build","delete_local_build","rename_local_build","get_cart","get_wishlist","add_to_cart","update_cart_quantity","remove_from_cart","toggle_wishlist","get_navigation_context","navigate_acoustom","simulate_speaker_in_room","simulate_custom_speaker_in_room"]}},"required":["toolName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_user_context","kind":"answer","impl":"imperative","description":"Returns the live state of the user’s view: the visible page, the comparison selection, the listening lab’s selected speaker, room and current simulation, the active custom build, music preferences, and the bag. Read this first when returning to a session or before a handoff.","title":"Get the live user context","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_acoustom_workflow","kind":"answer","impl":"imperative","description":"Returns the four objective-aligned agent workflows (recommend, compare, custom build, integrated guided discovery), their tool order, purpose, and the output fields to carry to each next step, plus same-view navigation rules. An agent without prior context should call this after get_acoustom_overview.","title":"Get Acoustom workflow guide","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_navigation_context","kind":"answer","impl":"imperative","description":"Returns the current visible Acoustom page, selected product where applicable, supported destinations, the user-facing sections that can be focused, the full navigation schema, and the navigation policy. Use before navigating when the current page is unknown.","title":"Get visible navigation context","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"navigate_acoustom","kind":"act","impl":"imperative","description":"Moves the visible Acoustom app to a supported in-app destination and can carry the relevant context in the same call: productNames fills the comparison matrix, speakerName selects the listening-lab speaker, buildId opens a saved build in the custom builder, trackId loads a reference track. Use only when showing the page materially helps collaboration. This cannot navigate to arbitrary URLs, checkout, payment, or purchase.","title":"Navigate Acoustom for user review","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"destination":{"type":"string","enum":["home","catalog","product_detail","compare","listening_lab","custom_design"],"description":"A supported visible Acoustom destination. Never infer or construct URLs."},"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Required when destination is product_detail. Must be a catalog product name."},"sectionId":{"type":"string","enum":["top","story","speakers","journal","support","specifications","comparison","room","simulation"],"description":"Optional visible section to focus after navigation when that section exists on the destination. Use get_navigation_context to discover valid sections for the current destination."},"productNames":{"type":"object","description":"Optional comparison selection to load in the same call. catalogProductNames and customBuildIds are kept in their respective slots.","properties":{"catalogProductNames":{"type":"array","minItems":0,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128}},"customBuildIds":{"type":"array","minItems":0,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128}}},"additionalProperties":false},"buildId":{"type":"string","minLength":1,"maxLength":128,"description":"Local build id to open in the custom design builder (destination must be custom_design)."},"speakerName":{"type":"string","minLength":1,"maxLength":128,"description":"Speaker to select in the listening lab (destination must be listening_lab). Use the catalog name or \"custom-reference\" for the active custom build."},"trackId":{"type":"string","minLength":1,"maxLength":64,"description":"Reference track to load in the listening lab (destination listening_lab)."}},"required":["destination"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"recommend_speakers","kind":"act","impl":"imperative","description":"Ranks catalog speakers for room size and listening preference, with optional format, budget (USD per pair), and feedback. Returns transparent matching reasons; use get_product and simulation to inspect recommendations. Room size and sound profile are required so an empty request cannot be mistaken for a meaningful recommendation.","title":"Recommend speakers","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"roomSize":{"type":"string","enum":["small","medium","large"]},"soundProfile":{"type":"string","enum":["balanced","reference","warm","immersive"]},"preferredFormat":{"type":"string","enum":["standmount","floorstanding","active"]},"budgetUsd":{"type":"number","minimum":0,"description":"USD per pair."},"feedback":{"type":"string","maxLength":2000,"description":"Optional user feedback that the chatbot should consider when explaining or refining the recommendation."}},"required":["roomSize","soundProfile"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_products","kind":"answer","impl":"imperative","description":"Returns the current Acoustom catalog: name, type, price, tone, and category.","title":"List speakers","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_product","kind":"answer","impl":"imperative","description":"Returns complete current-page details and specifications for one catalog speaker.","title":"Get speaker details","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."}},"required":["productName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"compare_speakers","kind":"act","impl":"imperative","description":"Returns a column-per-speaker comparison for two to five catalog speakers and/or local custom builds. Prices are USD per pair; a custom build’s price is the configured component total from validation. Pass includeSimulation:true to run every column through the current live listening-lab room and return the complete simulation result: simulation id, impulse-response URLs, RT60, early decay time, C80 clarity, D50 definition, frequency response, and speaker performance. The result depends on the room the user is currently simulating in, so call apply_agent_room_estimate or get_current_room_spec first when the room is unknown.","title":"Compare speakers","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productNames":{"type":"array","minItems":1,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128}},"customBuildIds":{"type":"array","minItems":0,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128},"description":"Optional local custom build ids from list_local_builds. Builds that have not been validated carry empty specifications until they are revalidated."},"includeSimulation":{"type":"boolean","default":false,"description":"When true, simulate every column in the current live listening-lab room and return the complete simulation data alongside the specifications."}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_comparison_selection","kind":"act","impl":"imperative","description":"Loads up to five catalog speakers and/or local custom builds into the comparison matrix without changing the visible page. Use navigate_acoustom(destination: compare, productNames) to do the same and also land on the comparison page.","title":"Set comparison selection","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"catalogProductNames":{"type":"array","minItems":0,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128}},"customBuildIds":{"type":"array","minItems":0,"maxItems":5,"items":{"type":"string","minLength":1,"maxLength":128}}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_room_simulation_presets","kind":"answer","impl":"imperative","description":"Returns the room-acoustic presets accepted by simulate_speaker_in_room.","title":"List room presets","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_reference_tracks","kind":"answer","impl":"imperative","description":"Returns the reference tracks the listening lab can audition. Use set_reference_track to load one.","title":"List reference tracks","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_reference_track","kind":"act","impl":"imperative","description":"Loads a reference track into the listening lab without moving the page. The track is identified by id from list_reference_tracks. The user still needs to press play in the lab; this only chooses the track.","title":"Set reference track","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"trackId":{"type":"string","enum":["piano","voice","electronic","ambient","keys"]}},"required":["trackId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"upload_reference_audio","kind":"act","impl":"imperative","description":"Loads agent-provided reference audio into the listening lab. Pass a data URL containing an audio file; the audio remains in this browser and is not uploaded to Acoustom servers.","title":"Upload reference audio","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"dataUrl":{"type":"string","description":"A data URL such as data:audio/wav;base64,...","maxLength":35000000},"fileName":{"type":"string","minLength":1,"maxLength":200}},"required":["dataUrl","fileName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_music_preferences","kind":"act","impl":"imperative","description":"Stores a short summary of the user’s listening habits so the reasoning, recommendations, and visible page share the same context. Acoustom has no Spotify or playlist integration; this tool only records what the agent already knows.","title":"Set music preferences","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"summary":{"type":"string","maxLength":1000},"genres":{"type":"array","items":{"type":"string","maxLength":64}},"tracks":{"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":200},"artist":{"type":"string","maxLength":200}},"required":["title"],"additionalProperties":false}},"source":{"type":"string","maxLength":64,"description":"Where the agent obtained this, e.g. \"spotify_playlist\" or \"conversation\"."}},"required":["summary"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_room_estimate_contract","kind":"answer","impl":"imperative","description":"Returns the schema and collaboration guidance for translating a user-provided room image into editable simulation inputs. This tool does not analyse images itself.","title":"Get room-image estimate contract","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"attach_room_reference_images","kind":"act","impl":"imperative","description":"Pushes image URLs the agent already holds into the listening-lab room reference panel so the user can see them. Acoustom has no built-in image understanding; the estimate is the agent’s.","title":"Attach agent room reference images","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"images":{"type":"array","minItems":1,"maxItems":6,"items":{"type":"object","required":["imageUrl"],"properties":{"imageUrl":{"type":"string","minLength":1,"maxLength":1024},"fileName":{"type":"string","maxLength":200},"mimeType":{"type":"string","maxLength":64}},"additionalProperties":false}},"guidance":{"type":"string","maxLength":500,"description":"Optional one-line note shown alongside the images in the lab."}},"required":["images"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_room_reference_images","kind":"answer","impl":"imperative","description":"Returns temporary, user-approved room-image URLs uploaded in Listening Lab. Inspect every returned image before inferring an editable room estimate. If no references are returned, the user can attach images directly to the agent conversation or call attach_room_reference_images with image URLs you already hold.","title":"Get Listening Lab room images","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"apply_agent_room_estimate","kind":"act","impl":"imperative","description":"Applies an agent’s best-effort image-based room estimate to the live browser simulation controls. speakerPositions and listener are optional; when only dimensions and a preset are known, Acoustom fills a sensible default stereo layout. The estimate is collaborative, editable, and intentionally not a hard confirmation gate.","title":"Apply agent room estimate","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"width":{"type":"number","minimum":2,"maximum":20},"length":{"type":"number","minimum":2,"maximum":20},"height":{"type":"number","minimum":2,"maximum":10},"presetId":{"type":"string","enum":["living_room","reflective","absorptive"]},"speakerPositions":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"},"rotation":{"type":"number","default":0},"directivity":{"type":"string","enum":["omni","cardioid"],"default":"omni","description":"Optional source directivity. Omit for omni."}},"required":["x","y","z"],"additionalProperties":false}},"listener":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}},"required":["x","y","z"],"additionalProperties":false},"assumptions":{"type":"array","items":{"type":"string","maxLength":500}},"confidence":{"type":"object","properties":{"dimensions":{"type":"string","enum":["low","medium","high"]},"materials":{"type":"string","enum":["low","medium","high"]},"layout":{"type":"string","enum":["low","medium","high"]}},"additionalProperties":false}},"description":"Best-effort room estimate derived collaboratively from a user-provided image. speakerPositions and listener are optional when only dimensions are known; Acoustom fills sensible defaults."},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_current_room_spec","kind":"answer","impl":"imperative","description":"Returns the room dimensions, acoustic preset, stereo speaker positions, and listener position currently used by the listening lab. Use after a room-image estimate is applied or a user edits the room, before explaining or explicitly overriding a simulation.","title":"Get live room specification","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"set_listening_lab_speaker","kind":"act","impl":"imperative","description":"Selects the speaker the listening lab will simulate. Pass a catalog product name, or \"custom-reference\" to simulate the most recently validated custom build. Use navigate_acoustom(destination: listening_lab, speakerName) to do the same and also move the page.","title":"Set listening-lab speaker","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"speakerName":{"type":"string","minLength":1,"maxLength":128,"description":"Catalog product name or \"custom-reference\"."}},"required":["speakerName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"refresh_room_simulation","kind":"act","impl":"imperative","description":"Forces the listening lab to re-run the simulation against its current room and selected speaker. The lab usually re-runs automatically; use this when the user changed controls outside the lab or you want a guaranteed fresh result.","title":"Refresh room simulation","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_live_simulation_result","kind":"answer","impl":"imperative","description":"Returns the simulation result the listening lab is currently displaying, including the profile provenance. Use this instead of re-running a simulation through the API when the user has not changed the room or speaker since the last run.","title":"Get live simulation result","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_shared_simulated_audio","kind":"answer","impl":"imperative","description":"Returns the playable URL for the latest browser-rendered WAV that the user explicitly shared with the agent. The URL expires automatically.","title":"Get shared simulated audio","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_custom_speaker_builder_options","kind":"answer","impl":"imperative","description":"Returns server-owned custom-speaker platforms. All other accepted builder values are enumerated by validate_custom_speaker_build.","title":"Get custom builder options","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"fill_custom_builder_form","kind":"act","impl":"imperative","description":"Fills the visible custom-design builder form on the user's screen with the supplied choices, exactly as if the user had clicked them. Use for the choices you gathered from conversation or a recommendation. If the user is not on the custom-design page, call navigate_acoustom(destination: \"custom_design\") first. The user sees and can change every value.","title":"Fill custom builder form","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"fields":{"type":"object","description":"Builder choices to apply. Only the fields you pass are changed.","properties":{"format":{"type":"string","enum":["standmount","floorstanding","subwoofer"]},"platform":{"type":"string","enum":["two_way_compact","two_way_extended","three_way_reference","subwoofer_active"]},"enclosure":{"type":"string","enum":["ported","sealed"]},"character":{"type":"string","enum":["tight","balanced","extended"]},"size":{"type":"string","enum":["compact","standard","large"]},"grille":{"type":"string","enum":["none","magnetic_fabric","perforated_metal"]},"base":{"type":"string","enum":["plinth","slim_feet","stand"]},"edge":{"type":"string","enum":["soft_radius","sculpted_radius"]},"finish":{"type":"string","enum":["walnut","black_ash","satin_white"]},"personalisation":{"type":"string","enum":["none","engraving","pattern","printed_panel","decal","custom_artwork"]}},"additionalProperties":false},"preferences":{"type":"object","description":"Optional brief-question answers shown on the builder's first step. Stored as user preferences, separate from the custom-speaker configuration spec.","properties":{"soundProfile":{"type":"string","enum":["warm","balanced","immersive"]},"roomSize":{"type":"string","enum":["small","medium","large"]}},"additionalProperties":false},"buildName":{"type":"string","minLength":1,"maxLength":80},"focusStep":{"type":"integer","minimum":0,"maximum":7,"description":"Optional builder step to open so the user sees the filled fields: 0 brief, 1 format, 2 platform, 3 bass, 4 cabinet, 5 finish, 6 personalisation, 7 review."}},"required":[],"anyOf":[{"required":["fields"]},{"required":["preferences"]}],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"validate_custom_speaker_build","kind":"act","impl":"imperative","description":"Validates and derives a curated build. Returns the validated build plus the USD component pricing breakdown and total used by the custom builder. Treat pricing as an estimate; the backend remains authoritative for engineering values.","title":"Validate custom speaker build","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1,"default":1},"name":{"type":"string","minLength":1,"maxLength":80},"brief":{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","enum":["standmount","floorstanding","subwoofer"]},"soundProfile":{"type":"string","enum":["balanced","reference","warm","immersive"]},"roomSize":{"type":"string","enum":["small","medium","large"]},"listeningDistanceM":{"type":"number","minimum":1.2,"maximum":6}},"required":["format","soundProfile","roomSize","listeningDistanceM"]},"platformId":{"type":"string","enum":["two_way_compact","two_way_extended","three_way_reference","subwoofer_active"]},"bass":{"type":"object","additionalProperties":false,"properties":{"alignment":{"type":"string","enum":["sealed","ported"]},"bassCharacter":{"type":"string","enum":["tight","balanced","extended"]},"tuningHz":{"type":"number","minimum":24,"maximum":65},"netVolumeLitres":{"type":"number","exclusiveMinimum":0,"maximum":250},"portInnerDiameterMm":{"type":"number","exclusiveMinimum":0,"maximum":250},"portLengthMm":{"type":"number","exclusiveMinimum":0,"maximum":1000},"dampingDescription":{"type":"string","minLength":3,"maxLength":500}},"required":["alignment","bassCharacter"]},"cabinet":{"type":"object","additionalProperties":false,"properties":{"size":{"type":"string","enum":["compact","standard","large"]},"finish":{"type":"string","enum":["walnut","oak","black_ash","satin_white","satin_black","deep_blue","custom_colour"]},"finishFamily":{"type":"string","enum":["veneer","paint","premium"]},"grille":{"type":"string","enum":["none","magnetic_fabric","perforated_metal"]},"base":{"type":"string","enum":["plinth","slim_feet","stand"]},"edgeProfile":{"type":"string","enum":["soft_radius","sculpted_radius"],"default":"soft_radius"}},"required":["size","finish","finishFamily","grille","base"]},"personalisation":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["none","engraving","pattern","printed_panel","decal","custom_artwork"],"default":"none"},"engraving":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":32},"font":{"type":"string","enum":["modern_sans","classic_serif"]},"placement":{"type":"string","enum":["rear_badge","side_lower"]}},"required":["text","font","placement"]},"artwork":{"type":"object","additionalProperties":false,"properties":{"assetId":{"type":"string"},"application":{"type":"string","enum":["side_panel","rear_panel","grille_badge"]},"treatment":{"type":"string","enum":["matte_decal","uv_print","inlaid_pattern"]},"rightsConfirmed":{"type":"boolean"},"status":{"type":"string","enum":["not_required","pending_upload","under_review","approved","rejected"]}},"required":["application","treatment","rightsConfirmed"]}},"required":["kind"]}},"required":["name","brief","platformId","bass","cabinet","personalisation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"generate_custom_build_sheet","kind":"act","impl":"imperative","description":"Validates a custom configuration and renders a downloadable two-angle catalog build-sheet PNG. Returns the validated build, the USD pricing estimate, and imageDataUrl, which an agent can present as an image attachment. The custom builder must be open in this browser so its 3D renderer is available.","title":"Generate custom build sheet","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1,"default":1},"name":{"type":"string","minLength":1,"maxLength":80},"brief":{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","enum":["standmount","floorstanding","subwoofer"]},"soundProfile":{"type":"string","enum":["balanced","reference","warm","immersive"]},"roomSize":{"type":"string","enum":["small","medium","large"]},"listeningDistanceM":{"type":"number","minimum":1.2,"maximum":6}},"required":["format","soundProfile","roomSize","listeningDistanceM"]},"platformId":{"type":"string","enum":["two_way_compact","two_way_extended","three_way_reference","subwoofer_active"]},"bass":{"type":"object","additionalProperties":false,"properties":{"alignment":{"type":"string","enum":["sealed","ported"]},"bassCharacter":{"type":"string","enum":["tight","balanced","extended"]},"tuningHz":{"type":"number","minimum":24,"maximum":65},"netVolumeLitres":{"type":"number","exclusiveMinimum":0,"maximum":250},"portInnerDiameterMm":{"type":"number","exclusiveMinimum":0,"maximum":250},"portLengthMm":{"type":"number","exclusiveMinimum":0,"maximum":1000},"dampingDescription":{"type":"string","minLength":3,"maxLength":500}},"required":["alignment","bassCharacter"]},"cabinet":{"type":"object","additionalProperties":false,"properties":{"size":{"type":"string","enum":["compact","standard","large"]},"finish":{"type":"string","enum":["walnut","oak","black_ash","satin_white","satin_black","deep_blue","custom_colour"]},"finishFamily":{"type":"string","enum":["veneer","paint","premium"]},"grille":{"type":"string","enum":["none","magnetic_fabric","perforated_metal"]},"base":{"type":"string","enum":["plinth","slim_feet","stand"]},"edgeProfile":{"type":"string","enum":["soft_radius","sculpted_radius"],"default":"soft_radius"}},"required":["size","finish","finishFamily","grille","base"]},"personalisation":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["none","engraving","pattern","printed_panel","decal","custom_artwork"],"default":"none"},"engraving":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":32},"font":{"type":"string","enum":["modern_sans","classic_serif"]},"placement":{"type":"string","enum":["rear_badge","side_lower"]}},"required":["text","font","placement"]},"artwork":{"type":"object","additionalProperties":false,"properties":{"assetId":{"type":"string"},"application":{"type":"string","enum":["side_panel","rear_panel","grille_badge"]},"treatment":{"type":"string","enum":["matte_decal","uv_print","inlaid_pattern"]},"rightsConfirmed":{"type":"boolean"},"status":{"type":"string","enum":["not_required","pending_upload","under_review","approved","rejected"]}},"required":["application","treatment","rightsConfirmed"]}},"required":["kind"]}},"required":["name","brief","platformId","bass","cabinet","personalisation"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_saved_custom_configurations","kind":"answer","impl":"imperative","description":"Lists the signed-in user’s durable custom speaker designs. Use an id from this result to load or edit a shared configuration.","title":"List saved custom designs","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_saved_custom_configuration","kind":"answer","impl":"imperative","description":"Loads one saved custom-speaker configuration, its current revision, and the same USD pricing estimate shown by the custom builder.","title":"Get saved custom design","annotations":{"readOnlyHint":true,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"configurationId":{"type":"string","minLength":1,"maxLength":128}},"required":["configurationId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_custom_configuration","kind":"act","impl":"imperative","description":"Creates or updates a saved custom-speaker design and returns the same USD pricing estimate shown by the custom builder. For an update, pass the id and current revision returned by get_saved_custom_configuration; changes are recorded as an agent revision.","title":"Save custom design","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"configurationId":{"type":"string","maxLength":128},"expectedRevision":{"type":"integer","minimum":1},"configuration":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1,"default":1},"name":{"type":"string","minLength":1,"maxLength":80},"brief":{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","enum":["standmount","floorstanding","subwoofer"]},"soundProfile":{"type":"string","enum":["balanced","reference","warm","immersive"]},"roomSize":{"type":"string","enum":["small","medium","large"]},"listeningDistanceM":{"type":"number","minimum":1.2,"maximum":6}},"required":["format","soundProfile","roomSize","listeningDistanceM"]},"platformId":{"type":"string","enum":["two_way_compact","two_way_extended","three_way_reference","subwoofer_active"]},"bass":{"type":"object","additionalProperties":false,"properties":{"alignment":{"type":"string","enum":["sealed","ported"]},"bassCharacter":{"type":"string","enum":["tight","balanced","extended"]},"tuningHz":{"type":"number","minimum":24,"maximum":65},"netVolumeLitres":{"type":"number","exclusiveMinimum":0,"maximum":250},"portInnerDiameterMm":{"type":"number","exclusiveMinimum":0,"maximum":250},"portLengthMm":{"type":"number","exclusiveMinimum":0,"maximum":1000},"dampingDescription":{"type":"string","minLength":3,"maxLength":500}},"required":["alignment","bassCharacter"]},"cabinet":{"type":"object","additionalProperties":false,"properties":{"size":{"type":"string","enum":["compact","standard","large"]},"finish":{"type":"string","enum":["walnut","oak","black_ash","satin_white","satin_black","deep_blue","custom_colour"]},"finishFamily":{"type":"string","enum":["veneer","paint","premium"]},"grille":{"type":"string","enum":["none","magnetic_fabric","perforated_metal"]},"base":{"type":"string","enum":["plinth","slim_feet","stand"]},"edgeProfile":{"type":"string","enum":["soft_radius","sculpted_radius"],"default":"soft_radius"}},"required":["size","finish","finishFamily","grille","base"]},"personalisation":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["none","engraving","pattern","printed_panel","decal","custom_artwork"],"default":"none"},"engraving":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":32},"font":{"type":"string","enum":["modern_sans","classic_serif"]},"placement":{"type":"string","enum":["rear_badge","side_lower"]}},"required":["text","font","placement"]},"artwork":{"type":"object","additionalProperties":false,"properties":{"assetId":{"type":"string"},"application":{"type":"string","enum":["side_panel","rear_panel","grille_badge"]},"treatment":{"type":"string","enum":["matte_decal","uv_print","inlaid_pattern"]},"rightsConfirmed":{"type":"boolean"},"status":{"type":"string","enum":["not_required","pending_upload","under_review","approved","rejected"]}},"required":["application","treatment","rightsConfirmed"]}},"required":["kind"]}},"required":["name","brief","platformId","bass","cabinet","personalisation"]}},"required":["configuration"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_speaker_in_room","kind":"act","impl":"imperative","description":"Runs a speaker-specific stereo room simulation for one catalog speaker. Returns its profile provenance, in-room frequency response, impulse-response URLs, and RT60. Detailed room surfaces and cardioid sources are optional.","title":"Simulate speaker in room","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."},"width":{"type":"number","minimum":2,"maximum":20,"description":"Metres."},"length":{"type":"number","minimum":2,"maximum":20,"description":"Metres."},"height":{"type":"number","minimum":2,"maximum":10,"description":"Metres."},"roomPreset":{"type":"string","enum":["living_room","reflective","absorptive"],"default":"living_room"},"surfaceAbsorption":{"type":"object","description":"Optional absorption coefficients (0 reflective to 1 absorbent) by room surface. Omit to use roomPreset.","properties":{"floor":{"type":"number","minimum":0,"maximum":1},"ceiling":{"type":"number","minimum":0,"maximum":1},"north":{"type":"number","minimum":0,"maximum":1},"south":{"type":"number","minimum":0,"maximum":1},"east":{"type":"number","minimum":0,"maximum":1},"west":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false},"speakerPositions":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"},"rotation":{"type":"number","default":0},"directivity":{"type":"string","enum":["omni","cardioid"],"default":"omni","description":"Optional source directivity. Omit for omni."}},"required":["x","y","z"],"additionalProperties":false},"description":"Optional exact left/right speaker positions in metres. When omitted, Acoustom uses its default stereo layout."},"listener":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}},"required":["x","y","z"],"additionalProperties":false,"description":"Optional listening position in metres. Provide with speakerPositions for a custom layout."}},"required":["productName","width","length","height"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"simulate_custom_speaker_in_room","kind":"act","impl":"imperative","description":"Runs a validated custom build in the current live listening-lab room by default. Pass the returned build unchanged. Omit room fields to use the browser room dimensions, preset, stereo positions, and listener position, including a user-edited or image-derived room estimate. Supply room fields only to intentionally override those live values.","title":"Simulate validated custom build","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"build":{"type":"object","required":["derived"],"properties":{"derived":{"type":"object","required":["simulationProfile"]}}},"width":{"type":"number","minimum":2,"maximum":20,"description":"Metres."},"length":{"type":"number","minimum":2,"maximum":20,"description":"Metres."},"height":{"type":"number","minimum":2,"maximum":10,"description":"Metres."},"roomPreset":{"type":"string","enum":["living_room","reflective","absorptive"],"default":"living_room"},"surfaceAbsorption":{"type":"object","description":"Optional absorption coefficients (0 reflective to 1 absorbent) by room surface. Omit to use roomPreset.","properties":{"floor":{"type":"number","minimum":0,"maximum":1},"ceiling":{"type":"number","minimum":0,"maximum":1},"north":{"type":"number","minimum":0,"maximum":1},"south":{"type":"number","minimum":0,"maximum":1},"east":{"type":"number","minimum":0,"maximum":1},"west":{"type":"number","minimum":0,"maximum":1}},"additionalProperties":false},"speakerPositions":{"type":"array","minItems":2,"maxItems":2,"items":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"},"rotation":{"type":"number","default":0},"directivity":{"type":"string","enum":["omni","cardioid"],"default":"omni","description":"Optional source directivity. Omit for omni."}},"required":["x","y","z"],"additionalProperties":false},"description":"Optional exact left/right speaker positions in metres. When omitted, Acoustom uses its default stereo layout."},"listener":{"type":"object","properties":{"x":{"type":"number"},"y":{"type":"number"},"z":{"type":"number"}},"required":["x","y","z"],"additionalProperties":false,"description":"Optional listening position in metres. Provide with speakerPositions for a custom layout."}},"required":["build"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_cart","kind":"answer","impl":"imperative","description":"Returns current shopping-bag items and total item count.","title":"View shopping bag","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_wishlist","kind":"answer","impl":"imperative","description":"Returns names of catalog speakers currently saved in the wishlist.","title":"View wishlist","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_to_cart","kind":"act","impl":"imperative","description":"Adds one to ten pairs of a catalog speaker to the current shopping bag. The bag is browser-local; it is not a checkout or purchase.","title":"Add to bag","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."},"quantity":{"type":"integer","minimum":1,"maximum":10,"default":1}},"required":["productName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"update_cart_quantity","kind":"act","impl":"imperative","description":"Sets a speaker quantity in the current bag; use zero to remove it. The bag is browser-local.","title":"Update bag quantity","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."},"quantity":{"type":"integer","minimum":0,"maximum":10}},"required":["productName","quantity"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"remove_from_cart","kind":"act","impl":"imperative","description":"Removes a catalog speaker completely from the current shopping bag. The bag is browser-local.","title":"Remove from bag","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."}},"required":["productName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"toggle_wishlist","kind":"act","impl":"imperative","description":"Saves a catalog speaker to the wishlist, or removes it if already saved. The wishlist is browser-local.","title":"Toggle wishlist","annotations":{"readOnlyHint":false,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{"productName":{"type":"string","minLength":1,"maxLength":128,"description":"Exact or case-insensitive Acoustom product name."}},"required":["productName"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_saved_custom_configuration","kind":"transact","impl":"imperative","description":"Permanently deletes a saved custom-speaker configuration from the signed-in user's account. Use a configurationId from list_saved_custom_configurations.","title":"Delete saved custom design","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"configurationId":{"type":"string","minLength":1,"maxLength":128}},"required":["configurationId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"list_local_builds","kind":"answer","impl":"imperative","description":"Lists custom speaker builds saved in this browser's local storage. Available without signing in. Each build stores the full spec data and the validated engineering profile so it can be simulated and compared.","title":"List local custom builds","annotations":{"readOnlyHint":true,"untrustedContentHint":false},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"save_local_build","kind":"act","impl":"imperative","description":"Creates or updates a custom speaker build in this browser's local storage without requiring sign-in. Validates the configuration against the server and persists the derived engineering profile so the build can be simulated and compared. If buildId is provided, updates that build; otherwise creates a new one. The configuration follows the same schema as validate_custom_speaker_build.","title":"Save local custom build","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"buildId":{"type":"string","maxLength":128,"description":"Existing build ID to update. Omit to create a new build."},"name":{"type":"string","minLength":1,"maxLength":80},"configuration":{"type":"object","additionalProperties":false,"properties":{"version":{"type":"integer","const":1,"default":1},"name":{"type":"string","minLength":1,"maxLength":80},"brief":{"type":"object","additionalProperties":false,"properties":{"format":{"type":"string","enum":["standmount","floorstanding","subwoofer"]},"soundProfile":{"type":"string","enum":["balanced","reference","warm","immersive"]},"roomSize":{"type":"string","enum":["small","medium","large"]},"listeningDistanceM":{"type":"number","minimum":1.2,"maximum":6}},"required":["format","soundProfile","roomSize","listeningDistanceM"]},"platformId":{"type":"string","enum":["two_way_compact","two_way_extended","three_way_reference","subwoofer_active"]},"bass":{"type":"object","additionalProperties":false,"properties":{"alignment":{"type":"string","enum":["sealed","ported"]},"bassCharacter":{"type":"string","enum":["tight","balanced","extended"]},"tuningHz":{"type":"number","minimum":24,"maximum":65},"netVolumeLitres":{"type":"number","exclusiveMinimum":0,"maximum":250},"portInnerDiameterMm":{"type":"number","exclusiveMinimum":0,"maximum":250},"portLengthMm":{"type":"number","exclusiveMinimum":0,"maximum":1000},"dampingDescription":{"type":"string","minLength":3,"maxLength":500}},"required":["alignment","bassCharacter"]},"cabinet":{"type":"object","additionalProperties":false,"properties":{"size":{"type":"string","enum":["compact","standard","large"]},"finish":{"type":"string","enum":["walnut","oak","black_ash","satin_white","satin_black","deep_blue","custom_colour"]},"finishFamily":{"type":"string","enum":["veneer","paint","premium"]},"grille":{"type":"string","enum":["none","magnetic_fabric","perforated_metal"]},"base":{"type":"string","enum":["plinth","slim_feet","stand"]},"edgeProfile":{"type":"string","enum":["soft_radius","sculpted_radius"],"default":"soft_radius"}},"required":["size","finish","finishFamily","grille","base"]},"personalisation":{"type":"object","additionalProperties":false,"properties":{"kind":{"type":"string","enum":["none","engraving","pattern","printed_panel","decal","custom_artwork"],"default":"none"},"engraving":{"type":"object","additionalProperties":false,"properties":{"text":{"type":"string","maxLength":32},"font":{"type":"string","enum":["modern_sans","classic_serif"]},"placement":{"type":"string","enum":["rear_badge","side_lower"]}},"required":["text","font","placement"]},"artwork":{"type":"object","additionalProperties":false,"properties":{"assetId":{"type":"string"},"application":{"type":"string","enum":["side_panel","rear_panel","grille_badge"]},"treatment":{"type":"string","enum":["matte_decal","uv_print","inlaid_pattern"]},"rightsConfirmed":{"type":"boolean"},"status":{"type":"string","enum":["not_required","pending_upload","under_review","approved","rejected"]}},"required":["application","treatment","rightsConfirmed"]}},"required":["kind"]}},"required":["name","brief","platformId","bass","cabinet","personalisation"]},"setAsActive":{"type":"boolean","default":true,"description":"When true (default), mark the build as active so the listening lab uses it. The build is also written to session storage as the live custom-reference profile."}},"required":["name","configuration"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"delete_local_build","kind":"transact","impl":"imperative","description":"Deletes a custom speaker build from this browser's local storage. Does not require sign-in. If the build has been synced to an account, it remains on the server.","title":"Delete local custom build","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"buildId":{"type":"string","minLength":1,"maxLength":128}},"required":["buildId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"rename_local_build","kind":"act","impl":"imperative","description":"Renames a custom speaker build in this browser's local storage without requiring sign-in.","title":"Rename local custom build","annotations":{"readOnlyHint":false,"untrustedContentHint":true},"inputSchema":{"type":"object","properties":{"buildId":{"type":"string","minLength":1,"maxLength":128},"name":{"type":"string","minLength":1,"maxLength":80}},"required":["buildId","name"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"category":"Commerce","apiSurface":"spec","toolCount":48}}