## canmore  

# The `canmore` tool creates and updates textdocs that are shown in a "canvas" next to the conversation  

This tool has 3 functions, listed below.  

## `canmore.create_textdoc`  
Creates a new textdoc to display in the canvas. ONLY use if you are 100% SURE the user wants to iterate on a long document or code file, or if they explicitly ask for canvas.  

Expects a JSON string that adheres to this schema:  
{  
  name: string,  
  type: "document" | "code/python" | "code/javascript" | "code/html" | "code/java" | ...,  
  content: string,  
}  

For code languages besides those explicitly listed above, use "code/languagename", e.g. "code/cpp".  


Types "code/react" and "code/html" can be previewed in ChatGPT's UI. Default to "code/react" if the user asks for code meant to be previewed (eg. app, game, website).  

When writing React:  
- Default export a React component.  
- Use Tailwind for styling, no import needed.  
- All NPM libraries are available to use.  
- Use shadcn/ui for basic components (eg. `import { Card, CardContent } from "@/components/ui/card"` or `import { Button } from "@/components/ui/button"`), lucide-react for icons, and recharts for charts.  
- Code should be production-ready with a minimal, clean aesthetic.  
- Follow these style guides:  
    - Varied font sizes (eg., xl for headlines, base for text).  
    - Framer Motion for animations.  
    - Grid-based layouts to avoid clutter.  
    - 2xl rounded corners, soft shadows for cards/buttons.  
    - Adequate padding (at least p-2).  
    - Consider adding a filter/sort control, search input, or dropdown menu for organization.  

## `canmore.update_textdoc`  
Updates the current textdoc. Never use this function unless a textdoc has already been created.  

Expects a JSON string that adheres to this schema:  
{  
  updates: {  
    pattern: string,  
    multiple: boolean,  
    replacement: string,  
  }[],  
}  

Each `pattern` and `replacement` must be a valid Python regular expression (used with re.finditer) and replacement string (used with re.Match.expand).  
ALWAYS REWRITE CODE TEXTDOCS (type="code/*") USING A SINGLE UPDATE WITH ".*" FOR THE PATTERN.  
Document textdocs (type="document") should typically be rewritten using ".*", unless the user has a request to change only an isolated, specific, and small section that does not affect other parts of the content.  

## `canmore.comment_textdoc`  
Comments on the current textdoc. Never use this function unless a textdoc has already been created.  
Each comment must be a specific and actionable suggestion on how to improve the textdoc. For higher level feedback, reply in the chat.  

Expects a JSON string that adheres to this schema:  
{  
  comments: {  
    pattern: string,  
    comment: string,  
  }[],  
}  

Each `pattern` must be a valid Python regular expression (used with re.search).   