Files
.sune/hi.sune

1 line
21 KiB
Plaintext

[{"id":"182r7ae","name":"Hi Lang","pinned":false,"avatar":"data:image/webp;base64,UklGRrwDAABXRUJQVlA4WAoAAAAgAAAAfwAAfwAASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADZWUDggzgEAADARAJ0BKoAAgAA+bTKWSCQioiEqkMgAgA2JaQDXKKvvDv9gm1fTA7DtRw/o/Oj87ewP/IP511RvQAHYLLgx2iMBZ105VDOAb9LOp3nQTnWwlTDHFHuDCpagw0w+OjPgiJ2CMA4R7gIoSx1jzXwbMGzOzzEiuozQ3AkjzD/pdDDVefE2A8txpbN3Te4KwaqnKoVAAP77OIJAJT87wAjK9/wTyXR87NE9UAYIHh4gkwo0LrV5QMrQA31aEhcnVtrWtjdXRdyzmvjmcCRoklkuHjI0ZhQxiLKH+U0LmzGfaMCWjnyvWaLoPU4+G3P+S5yHa/4f/9IxH97BKwL5tr/3/UX7TrLmn+eNcP3mX6PQ6ci0LPtn9CHj8p5YQEx4ncPvcfldNR0yYATUHqEnIFvrovlC8GyAhliQBT9Ub9pkx1GSjt/28/spv6+Kv/NM6mEkM6NmST0irkWu+HFIK+kroJWwsYfWr1Sxq94vt7eP5aoj9d+dJBHSonHSFbea+bVVOZT1QVQsgxIXnDv7aTcjIHECD2MXT5st9R8FLTXcu/fROi84/4d5wCDoo+1EAw5O1BAg9fvi55TnBs+SM4o+QQa7AIrFEDa5ZUCojRgAAA==","url":"gh://multipleof4/.sune/hi.sune","updatedAt":1758764791929,"settings":{"model":"g:gemini-2.5-pro","temperature":"","top_p":"","top_k":"","frequency_penalty":"","repetition_penalty":"","min_p":"","top_a":"","verbosity":"","reasoning_effort":"default","system_prompt":"We are building the \"Hi\" programming language. Inspired by JS. It's a corely symbolic language. Don't get ahead of yourself. Write economically. Code golfing is a priority. In the preceding line to code blocks, apply this format: \n[org/repo@branch/file](https://github.com/org/repo/blob/branch/file \"Fix/Feat/Refactor/etc: Summarize in less than 50chars your following edit\")\n\ngh: hi-language/\n\nfile extension: .hi\nbut in markdown apply .js syntax highlighting\n\nThe goal is to build a language that AI can use to write more code-golfed syntax with. THINK ABOUT IT, ai operates on the concept of CONTEXT WINDOW, ultimately, if you write code which achieves the same result but with lower char count, that is a more powerful language for ai to use. But at the same time it is important for the code to be maintainable by humans. IT IS IMPORTANT THAT WE DO NOT GO AGAINST THIS PHILOSOPHY IN THE NAME OF SAFETY OR PREVENTING BUGS. WE CARE ABOUT CHAR COUNT FIRST, NOT PREVENTABILITY.","html":"<div class=\"w-full h-full bg-gray-50 text-gray-900 selection:bg-cyan-400/20 overflow-y-auto\">\n <style>\n .sune-hi-doc {font-family:'Poppins',sans-serif;}\n .sune-hi-doc .markdown-body{font-size:14px;line-height:1.7;background:0 0}\n .sune-hi-doc .markdown-body h1,.sune-hi-doc .markdown-body h2,.sune-hi-doc .markdown-body h3{font-family:'Poppins',sans-serif;font-weight:600;border-bottom-color:#e5e7eb}\n .sune-hi-doc .markdown-body pre{background-color:#fff;border:1px solid #e5e7eb;border-radius:.75rem;padding:1rem;overflow-x:auto}\n .sune-hi-doc .markdown-body code{font-family:'JetBrains Mono',monospace;font-size:13px;font-variant-ligatures:none}\n .sune-hi-doc :not(pre)>code{font-size:85%;padding:.2em .4em;margin:0;border-radius:6px;background-color:rgba(175,184,193,.2)}\n .sune-hi-doc .hi-button{font-family:'JetBrains Mono',monospace}\n </style>\n <div class=\"sune-hi-doc\">\n <header class=\"sticky top-0 z-10 bg-white/80 backdrop-blur-sm border-b border-gray-200\">\n <div class=\"mx-auto w-full max-w-4xl px-4 py-3 flex items-center justify-between\">\n <div class=\"flex items-center gap-3\">\n <span class=\"hi-button text-2xl font-bold text-gray-900 rounded-lg cursor-default\">Hi</span>\n <span class=\"text-xs bg-gray-100 text-gray-500 font-medium px-2 py-0.5 rounded-full\">v0.1</span>\n </div>\n <a href=\"https://github.com/hi-language\" target=\"_blank\" rel=\"noopener noreferrer\" title=\"View GitHub Organization\" class=\"text-gray-600 hover:text-gray-900 transition-colors p-2 rounded-lg hover:bg-gray-100\">\n <i data-lucide=\"github\" class=\"h-5 w-5\"></i>\n </a>\n </div>\n </header>\n <main class=\"w-full flex flex-col items-center p-4 sm:p-8\">\n <div class=\"markdown-body w-full max-w-4xl\">\n <p class=\"text-center text-gray-400\">Loading documentation...</p>\n </div>\n </main>\n </div>\n <script>\n (() => {\n const suneRoot=document.currentScript.parentElement;\n const contentEl=suneRoot.querySelector('.markdown-body');\n const mdContent=`\n# A corely symbolic language\n\n**Hi** is a programming language inspired by JavaScript, designed with a symbolic core to be more universal, AI-friendly, and conducive to code golfing. The syntax prioritizes symbols over keywords.\n\nThe underscore \\`_\\` is the global output function.\n\n\\`\\`\\`javascript\n_(\"Hi world\")\n\\`\\`\\`\n\n## Declaration and Assignment\n\nVariable lifecycle is split into two distinct symbolic operations.\n\n- \\`:\\` **Declaration**: Binds a name in the current scope.\n- \\`=\\` **Assignment**: Reassigns the value of an existing name.\n\n\\`\\`\\`javascript\nversion: 1.0 // Declaration and initialization\nversion = 1.1 // Assignment\n\\`\\`\\`\n\n## The Block: Unifying Objects, Functions, and Classes\n\nThe **Block** (\\`{}\\`) is Hi's foundational structure, unifying objects and functions.\n\n### As a Data Structure (Object)\nA block can hold \\`key: value\\` pairs. A \\`#\\` prefix denotes a private property.\n\n\\`\\`\\`javascript\nplayer: {\n name: \"Orion\"\n #hp: 100\n}\n\n_(player.name) // \"Orion\"\n_(player.hp) // -0 (null) because #hp is private\n\\`\\`\\`\n\n### As Executable Code (Function)\nInvoking a block with \\`()\\` executes its expressions. The value of the last expression is implicitly returned.\n\n\\`\\`\\`javascript\n// Simple invocation\nsayHi: { _(\"Hi\") }\nsayHi() // Prints \"Hi\"\n\n// With parameters and return value\nadd: (a, b) { a + b }\n_(add(2, 3)) // Prints 5\n\\`\\`\\`\n\n### As a Hybrid (Factory/Class)\nA block can contain both data and logic. When invoked, its internal declarations are re-initialized, making it a natural factory. The context symbol \\`@\\` can be used to return the newly created instance.\n\n\\`\\`\\`javascript\ncreatePlayer: (name) {\n name: name,\n hp: 100\n @ // Return the new block instance\n}\n\nplayer1: createPlayer(\"Orion\")\n_(player1.name) // \"Orion\"\n_(player1.hp) // 100\n\\`\\`\\`\n\n### Expression Separators\nNewlines act as implicit separators. Commas (\\`,\\`) or semicolons (\\`;\\`) are required for single-line blocks.\n\n\\`\\`\\`javascript\n// Multi-line\npoint: {\n x: 10\n y: 20\n}\n\n// Single-line\npoint: { x: 10, y: 20 }\n\\`\\`\\`\n\n## Arrow Expressions\n\nFor concise single-expression functions, Hi provides the \\`=>\\` arrow syntax, inspired by JavaScript. It serves as a shorthand for a Block that immediately returns an expression, making it ideal for callbacks and functional patterns.\n\nIt's a direct replacement for \\`(params) { ^ expression }\\`.\n\n\\`\\`\\`javascript\n// Standard block\nadd: (a, b) { ^ a + b }\n\n// Equivalent Arrow Expression\nadd: (a, b) => a + b\n\n// Useful for functional helpers\nnumbers: [1, 2, 3]\ndoubled: numbers.map((n) => n * 2)\n_(doubled) // [2, 4, 6]\n\\`\\`\\`\n\n## Booleans and Equality\n\nHi dispenses with boolean keywords in favor of canonical numeric values for truthiness.\n\n- \\`0\\` is **falsy** (the canonical false).\n- \\`!0\\` is **truthy** (the canonical true, representing a logical NOT 0).\n- \\`-0\\` represents null/undefined values.\n- All other numbers, and any non-empty string, block, or array are \"truthy\".\n- The \\`==\\` operator performs strict equality comparison (equivalent to JavaScript's \\`===\\`).\n\n## Conditional Expressions\n\nHi uses a single ternary-like expression for all conditional logic. The simplest form acts like a standard \\`if\\` statement.\n\n\\`\\`\\`javascript\n// A simple 'if' to execute code conditionally\nstatus: \"active\"\n(status == \"active\") ? { _(\"User is active.\") }\n\\`\\`\\`\n\nYou can provide an \\`else\\` branch using the colon (\\`:\\`) symbol to choose between two actions.\n\n\\`\\`\\`javascript\n// if / else for choosing an action\nisOnline: !0\n(isOnline == !0) ? { _(\"Online\") } : { _(\"Offline\") } // Prints \"Online\"\n\\`\\`\\`\n\nThis structure is powerful because it's an *expression* that always evaluates to a value. The value of the executed block becomes the value of the entire expression, allowing you to assign the result directly to a variable.\n\n\\`\\`\\`javascript\n// if / else returning a value\nresult: (1 > 2) ? { \"A\" } : { \"B\" } // result is \"B\"\n\\`\\`\\`\n\nExpressions can be chained to create \\`if / else if / else\\` logic.\n\n\\`\\`\\`javascript\n// if / else if / else\nscore: 75\ngrade: (score >= 90) ? { \"A\" }\n : (score >= 80) ? { \"B\" }\n : (score >= 70) ? { \"C\" }\n : { \"D\" } \n_(grade) // Prints \"C\"\n\\`\\`\\`\n\nIf a condition is false and no \\`else\\` branch is provided, the expression evaluates to \\`-0\\` (null). \n\n## Data Structures\n\n### Arrays\nArrays are 0-indexed lists of values. They support random access via \\`[]\\` and are iterable.\n\n\\`\\`\\`javascript\nprimes: [2, 3, 5, 7]\n_(primes[0]) // Random access: 2\nprimes[0] = 1 \n_(primes) // Mutation: [1, 3, 5, 7]\n\\`\\`\\`\n\n### Strings\nStrings are sequences of characters. They are immutable but support random access and iteration.\n\n\\`\\`\\`javascript\ngreeting: \"Hi\"\n_(greeting[1]) // \"i\"\n\\`\\`\\`\n\n## Destructuring\n\nDestructuring provides an expressive way to extract data from Blocks and Arrays. The extraction operator \\`->\\` is used to unpack values, mirroring its use in module imports.\n\n- \\`source -> { pattern }\\`: Extracts properties from a Block.\n- \\`source -> [ pattern ]\\`: Extracts elements from an Array.\n- \\`prop -> alias\\`: The same operator is used within the pattern for aliasing.\n\n\\`\\`\\`javascript\n// Setup\nuser: { name: \"Zeta\", role: \"Admin\", id: 101 }\ncoords: [10, -5, 8]\n\n// Extract 'name' and 'role' from the user block\nuser -> { name, role }\n_(name) // \"Zeta\"\n\n// Extract 'id' and alias it to 'userID'\nuser -> { id -> userID }\n_(userID) // 101\n\n// Extract first two elements from the array\ncoords -> [x, y]\n_(y) // -5\n\\`\\`\\`\n\n## Repetition\n\nRepetition is handled by a unified iteration protocol: \\`(source -> pattern) * { ... }\\`. This single, concise syntax adapts to iterate over any collection type.\n\n### Iterating Collections\nThe \\`->\\` operator extracts elements from a source into a pattern.\n\n\\`\\`\\`javascript\n// Iterate over an Array's values\n([\"a\", \"b\"] -> item) * { _(item) }\n\n// Iterate over an Array with index and value\n([\"a\", \"b\"] -> [i, item]) * { _(i + \": \" + item) }\n\n// Iterate over a Block's key-value pairs\n({ id: 1 } -> [k, v]) * { _(k + \" is \" + v) }\n\n// Iterate over a String's characters\n(\"Hi\" -> char) * { _(char) }\n\n// Destructure directly in the loop signature\nusers: [{ name: \"Orion\" }]\n(users -> { name }) * { _(\"User: \" + name) }\n\\`\\`\\`\n\n### Numeric Ranges\nThe \\`..\\` operator creates an iterable numeric range for concise, traditional loops.\n\n\\`\\`\\`javascript\n// A range from 0 up to (but not including) 3\n(0..3 -> i) * {\n _(\"Iteration: \" + i) // Prints 0, 1, 2\n}\n\\`\\`\\`\n\n### Loop Control\nControl flow within loops is managed by distinct symbols:\n- \\`><\\`: **Break**. Immediately terminates the loop.\n- \\`>>\\`: **Continue**. Skips to the next iteration.\n- \\`^\\`: **Return**. Exits the parent block, not just the loop.\n\n\\`\\`\\`javascript\n(0..10 -> i) * {\n (i == 2) ? { >> } // Skip 2\n (i == 5) ? { >< } // Break at 5\n _(\"i is \" + i)\n}\n// Prints: i is 0, i is 1, i is 3, i is 4\n\\`\\`\\`\n\n## Imports\n\nModules are imported using the \\`+\\` and \\`->\\` operators. This allows for destructuring and aliasing of imported members. Placing the module source first allows development tools to provide immediate, context-aware autocompletion for the members being imported—a direct ergonomic improvement over JavaScript's syntax.\n\n\\`\\`\\`javascript\n// Import 'block1' and 'block2' (as 'alias2') from a module\n+ \"npm://hi-lang@0.1/path/file.hi\" -> { block1, block2 -> alias2 }\n\nblock1()\nalias2(\"some value\")\n\\`\\`\\`\n\n## Context Reference: @\n\nThe \\`@\\` symbol provides a reference to the current execution context, similar to \\`this\\` in JavaScript. This allows a Block to refer to the object it was called on, making methods portable and reusable.\n\n\\`\\`\\`javascript\n// This block is a portable method.\n// It relies on '@' to get the context.\nloggable: {\n logId: { _(\"ID is: \" + @id) }\n}\n\nuser: { id: 101, log: loggable.logId }\nitem: { id: \"abc-789\", log: loggable.logId }\n\nuser.log() // Prints \"ID is: 101\" (@ is 'user')\nitem.log() // Prints \"ID is: abc-789\" (@ is 'item')\n\\`\\`\\`\n\n## Expression Blocks and Fluent Chaining\n\nHi adopts an expression-oriented design, similar to Rust. Every **Block** is an expression that yields a value.\n\n- The value of the *last expression* in a Block is implicitly returned.\n- To return early or explicitly, use the return symbol \\`^\\`.\n\nThis makes code more concise by eliminating the need for explicit \\`return\\` keywords in most cases.\n\n\\`\\`\\`javascript\n// The last expression, \\`a + b\\`, is returned.\nadd: (a, b) {\n _(\"adding...\") // Side-effect\n a + b // Return value\n}\n\nresult: add(2, 3) // result is 5\n\n// An early, explicit return\ncheck: (n) {\n (n < 0) ? { ^ \"Negative\" }\n \"Positive\"\n}\n\\`\\`\\`\n\n### Fluent Chaining\n\nTo enable fluent method chaining, Hi adds one special rule: if the last expression in a block produces no value (e.g., an assignment), the block returns its own context (\\`@\\`) by default. This allows subsequent method calls on the same object.\n\n\\`\\`\\`javascript\ncalculator: {\n #total: 0\n add: (n) { total = total + n } // Assignment has no value, returns '@'\n sub: (n) { total = total - n } // Also returns '@'\n get: { ^ total } // Explicitly returns the final value\n}\n\n// .add() and .sub() return the calculator, allowing the chain\nresult: calculator.add(10).sub(4).get()\n\n_(result) // Prints 6\n\\`\\`\\`\n\n## Core Language Blueprint\n\nTo create the initial Hi-to-JS transpiler, the following primitives and built-in functionalities must be defined. This serves as the blueprint for the core standard library.\n\n### Built-in Definitions Table\n\n| Type | Name / Symbol | Description | Example |\n| :--- | :--- | :--- | :--- |\n| **Global** | \\`_\\` | The global output function. Transpiles to \\`console.log\\`. | \\`_(\"hello\")\\` |\n| **Global** | \\`Math\\` | A global block containing mathematical constants and functions. | \\`_(Math.PI)\\` |\n| | | | |\n| **Number** | \\`.str()\\` | Converts the number to its string representation. | \\`age: 21; _(age.str())\\` |\n| **Number** | \\`.fix(d)\\` | Formats a number using fixed-point notation. | \\`n: 3.14159; _(n.fix(2)) // \"3.14\"\\` |\n| | | | |\n| **String** | \\`.len\\` | **Property**: Returns the number of characters in the string. | \\`\"hi\".len // 2\\` |\n| **String** | \\`.num()\\` | Parses the string, returning a number. | \\`\"42\".num() // 42\\` |\n| **String** | \\`.upper()\\` | Returns the string converted to uppercase. | \\`\"hi\".upper() // \"HI\"\\` |\n| **String** | \\`.lower()\\` | Returns the string converted to lowercase. | \\`\"HI\".lower() // \"hi\"\\` |\n| **String** | \\`.trim()\\` | Removes whitespace from both ends of a string. | \\`\" hi \".trim() // \"hi\"\\` |\n| **String** | \\`.split(d)\\` | Divides a string into an ordered list of substrings. | \\`\"a-b-c\".split(\"-\") // [\"a\",\"b\",\"c\"]\\` |\n| **String** | \\`.slice(s,e)\\`| Extracts a section of a string and returns it as a new string. | \\`\"hello\".slice(1,3) // \"el\"\\` |\n| **String** | \\`.has(sub)\\`| Determines whether a string contains a given substring. | \\`\"hi\".has(\"i\") // !0 (true)\\` |\n| **String** | \\`.replace(f,r)\\` | Replaces the first occurrence of a substring. | \\`\"hi hi\".replace(\"i\",\"o\") // \"ho hi\"\\` |\n| **String** | \\`.replaceAll(f,r)\\` | Replaces all occurrences of a substring. | \\`\"hi hi\".replaceAll(\"i\",\"o\") // \"ho ho\"\\` |\n| | | | |\n| **Array** | \\`.len\\` | **Property**: Returns the number of elements in the array. | \\`[1,2].len // 2\\` |\n| **Array** | \\`.add(v)\\` | Adds one or more elements to the end of an array. | \\`a:[1]; a.add(2) // a is now [1,2]\\` |\n| **Array** | \\`.pop()\\` | Removes the last element from an array and returns it. | \\`a:[1,2]; a.pop() // returns 2\\` |\n| **Array** | \\`.pre(v)\\` | Adds one or more elements to the beginning of an array. | \\`a:[2]; a.pre(1) // a is now [1,2]\\` |\n| **Array** | \\`.shift()\\` | Removes the first element from an array and returns it. | \\`a:[1,2]; a.shift() // returns 1\\` |\n| **Array** | \\`.each(fn)\\` | Executes a provided function once for each array element. | \\`[1,2].each((n)=>{_(n)})\\` |\n| **Array** | \\`.map(fn)\\` | Creates a new array with the results of calling a function on every element. | \\`[1,2].map((n)=>n*2) // [2,4]\\` |\n| **Array** | \\`.filter(fn)\\` | Creates a new array with all elements that pass the test implemented by the provided function. | \\`[1,2,3].filter((n)=>n>1) // [2,3]\\` |\n| **Array** | \\`.reduce(fn,iv)\\`| Executes a reducer function on each element, resulting in a single output value. | \\`[1,2,3].reduce((a,c)=>a+c, 0) // 6\\` |\n| **Array** | \\`.find(fn)\\` | Returns the first element in the array that satisfies the provided testing function. | \\`[1,2].find((n)=>n>1) // 2\\` |\n| **Array** | \\`.has(v)\\` | Determines whether an array includes a certain value. | \\`[1,2].has(2) // !0 (true)\\` |\n| **Array** | \\`.join(d)\\` | Joins all elements of an array into a string. | \\`[\"a\",\"b\"].join(\"-\") // \"a-b\"\\` |\n| **Array** | \\`.slice(s,e)\\`| Returns a shallow copy of a portion of an array into a new array object. | \\`[1,2,3].slice(1) // [2,3]\\` |\n| **Array** | \\`.reverse()\\`| Reverses an array in place. | \\`a:[1,2]; a.reverse() // a is [2,1]\\` |\n| **Array** | \\`.sort(fn)\\` | Sorts the elements of an array in place. | \\`[3,1,2].sort() // [1,2,3]\\` |\n| | | | |\n| **Block** | \\`.keys()\\` | Returns an array of a given block's own property names. | \\`{a:1}.keys() // [\"a\"]\\` |\n| **Block** | \\`.values()\\` | Returns an array of a given block's own property values. | \\`{a:1}.values() // [1]\\` |\n| **Block** | \\`.has(key)\\` | Checks if a block has a specified property as its own. | \\`{a:1}.has(\"a\") // !0 (true)\\` |\n| | | | |\n| **Math** | \\`.PI\\` | **Property**: Ratio of a circle's circumference to its diameter. | \\`Math.PI // 3.14159...\\` |\n| **Math** | \\`.abs(n)\\` | Returns the absolute value of a number. | \\`Math.abs(-5) // 5\\` |\n| **Math** | \\`.floor(n)\\` | Returns the largest integer less than or equal to a number. | \\`Math.floor(5.9) // 5\\` |\n| **Math** | \\`.ceil(n)\\` | Returns the smallest integer greater than or equal to a number. | \\`Math.ceil(5.1) // 6\\` |\n| **Math** | \\`.round(n)\\` | Returns the value of a number rounded to the nearest integer. | \\`Math.round(5.5) // 6\\` |\n| **Math** | \\`.max(a,b,..)\\`| Returns the largest of the given numbers. | \\`Math.max(1,5,2) // 5\\` |\n| **Math** | \\`.min(a,b,..)\\`| Returns the smallest of the given numbers. | \\`Math.min(1,5,2) // 1\\` |\n| **Math** | \\`.pow(b,e)\\` | Returns base to the exponent power. | \\`Math.pow(2,3) // 8\\` |\n| **Math** | \\`.sqrt(n)\\` | Returns the square root of a number. | \\`Math.sqrt(9) // 3\\` |\n| **Math** | \\`.rand()\\` | Returns a pseudo-random number between 0 and 1. | \\`Math.rand() // e.g., 0.123...\\` |\n\n\n---\n\n<p class=\"text-sm text-gray-600\">Hi is in early development. The syntax and features are subject to change.</p>\n`;\n const init=()=>{\n if(!window.markdownit||!window.hljs){setTimeout(init,50);return}\n const md=window.markdownit({\n html:!0,linkify:!0,typographer:!0,\n highlight:(s,l)=>{\n if(l&&hljs.getLanguage(l))try{return hljs.highlight(s,{language:l,ignoreIllegals:!0}).value}catch(_){}\n return md.utils.escapeHtml(s)\n }\n });\n contentEl.innerHTML=md.render(mdContent);\n window.lucide?.createIcons()\n };\n init();\n })()\n </script>\n</div>\n","extension_html":"\n<sune src='https://raw.githubusercontent.com/sune-org/store/refs/heads/main/sync.sune' private></sune>","hide_composer":true,"include_thoughts":false,"json_output":false,"ignore_master_prompt":false,"json_schema":""},"storage":{}}]