{"ok":true,"site":{"host":"hungson175.github.io","url":"https://hungson175.github.io/study-map/","type":"live","desc":"Learn anything as a map you and ChatGPT draw together. Pin a question to a node and let ChatGPT answer inside the map.","tools":[{"name":"how_to_use","kind":"act","impl":"imperative","description":"READ ME FIRST. Call when the page opens and when the person returns after pinning a question. Guide one step at a time. Use only registered page tools (how_to_use, get_chart, get_selection, list_questions, answer_question, create_shapes, connect_shapes, align_shapes, equalize_size, distribute_shapes, create_canvas, open_saved_canvas) for all map reads/writes. Do not click, drag, type into, or operate Excalidraw UI controls; the page's pointer/keyboard controls remain for the person.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"select_shapes","kind":"act","impl":"imperative","description":"Select up to 240 unlocked shapes by id, type, or visible label.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":240},"type":{"type":"string","enum":["rectangle","diamond","ellipse","arrow","line","text","freedraw"]},"labelContains":{"type":"string","maxLength":50}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"get_canvas_state","kind":"answer","impl":"imperative","description":"Read the current canvas name, local save id, and visible element count without changing it.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"choose_canvas","kind":"act","impl":"imperative","description":"Record the person's explicit answer to continue the existing canvas or create a new one. Ask first and never infer their choice.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"choice":{"type":"string","enum":["continue_existing","create_new"]}},"required":["choice"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"align_shapes","kind":"act","impl":"imperative","description":"Apply an exact edge or center alignment directly to the drawing.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":240},"edge":{"type":"string","enum":["left","centerX","right","top","centerY","bottom"]},"to":{"type":"string","enum":["selection","canvas","first"]}},"required":["edge"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"list_saved_canvases","kind":"answer","impl":"imperative","description":"List locally saved canvases in newest-first pages of up to five.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{"offset":{"type":"integer","minimum":0,"maximum":49},"limit":{"type":"integer","minimum":1,"maximum":5}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"get_chart","kind":"answer","impl":"imperative","description":"Read a bounded outline of the live study map without exposing geometry or files.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"equalize_size","kind":"act","impl":"imperative","description":"Apply equal widths or heights directly to the drawing.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":240},"dimension":{"type":"string","enum":["width","height"]},"mode":{"type":"string","enum":["max","min","first","average"]}},"required":["dimension"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"save_canvas","kind":"act","impl":"imperative","description":"Save or update the current canvas in this browser's local storage, optionally under a new name.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"get_selection","kind":"answer","impl":"imperative","description":"Read the currently selected study nodes and their open questions.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"distribute_shapes","kind":"act","impl":"imperative","description":"Apply even gaps between shapes along one axis directly to the drawing.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"maxItems":240},"axis":{"type":"string","enum":["horizontal","vertical"]}},"required":["axis"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"create_canvas","kind":"act","impl":"imperative","description":"Create an undoable blank canvas and preserve the current canvas locally first when it contains work.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":80}},"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"list_questions","kind":"answer","impl":"imperative","description":"List bounded open question marks with their live study-node context.","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","properties":{},"required":[],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"connect_shapes","kind":"act","impl":"imperative","description":"Apply directed connectors from up to 40 explicit shapes to one target.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"sourceIds":{"type":"array","items":{"type":"string"},"minItems":1,"maxItems":40,"uniqueItems":true},"targetId":{"type":"string"}},"required":["sourceIds","targetId"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"open_saved_canvas","kind":"act","impl":"imperative","description":"Open one locally saved canvas by id, preserving the current canvas locally before switching.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":80,"pattern":"^[A-Za-z0-9_-]{1,80}$"}},"required":["id"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"answer_question","kind":"act","impl":"imperative","description":"Answer the person fully in chat, then distill the answer into a compact branch from the questioned node — do not paste full prose into the map.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"question_id":{"type":"string","minLength":1,"maxLength":64},"answer_summary":{"type":"string","minLength":1,"maxLength":160},"key_points":{"type":"array","minItems":1,"maxItems":5,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":72}},"sources":{"type":"array","maxItems":2,"uniqueItems":true,"items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":64},"url":{"type":"string","minLength":1,"maxLength":2048,"pattern":"^https://"}},"required":["title","url"],"additionalProperties":false}}},"required":["question_id","answer_summary","key_points"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"},{"name":"create_shapes","kind":"act","impl":"imperative","description":"Create labeled rectangle, ellipse, or diamond nodes directly on the drawing.","annotations":{"readOnlyHint":false},"inputSchema":{"type":"object","properties":{"shapes":{"type":"array","minItems":1,"maxItems":12,"items":{"type":"object","properties":{"clientId":{"type":"string","pattern":"^[A-Za-z0-9_-]{1,64}$"},"type":{"type":"string","enum":["rectangle","ellipse","diamond"]},"label":{"type":"string","maxLength":80},"x":{"type":"number","minimum":-10000,"maximum":10000},"y":{"type":"number","minimum":-10000,"maximum":10000},"width":{"type":"number","minimum":40,"maximum":800},"height":{"type":"number","minimum":30,"maximum":600}},"required":["type"],"additionalProperties":false}}},"required":["shapes"],"additionalProperties":false},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute","page":"/study-map/"}],"category":"Health & Education","favicon":"/favicons/hungson175.github.io.png","apiSurface":"spec","toolCount":17}}