chore(deps): bump Astro and refresh changelog docs

- Update Astro, RSS, and TypeScript versions in the lockfile
- Refresh tool call documentation and changelog page
This commit is contained in:
2026-03-27 08:02:32 +01:00
parent 9d39786cd6
commit 1a7f1f47ff
4 changed files with 499 additions and 320 deletions
+17 -15
View File
@@ -5,10 +5,10 @@
"": {
"name": "zblade-dev",
"dependencies": {
"@astrojs/check": "0.9.8",
"@astrojs/rss": "^4.0.15",
"astro": "6.0.5",
"typescript": "^5.9.3",
"@astrojs/check": "^0.9.8",
"@astrojs/rss": "^4.0.18",
"astro": "^6.1.1",
"typescript": "6.0.2",
},
},
},
@@ -21,11 +21,11 @@
"@astrojs/language-server": ["@astrojs/language-server@2.16.5", "", { "dependencies": { "@astrojs/compiler": "^2.13.1", "@astrojs/yaml2ts": "^0.2.3", "@jridgewell/sourcemap-codec": "^1.5.5", "@volar/kit": "~2.4.28", "@volar/language-core": "~2.4.28", "@volar/language-server": "~2.4.28", "@volar/language-service": "~2.4.28", "muggle-string": "^0.4.1", "tinyglobby": "^0.2.15", "volar-service-css": "0.0.70", "volar-service-emmet": "0.0.70", "volar-service-html": "0.0.70", "volar-service-prettier": "0.0.70", "volar-service-typescript": "0.0.70", "volar-service-typescript-twoslash-queries": "0.0.70", "volar-service-yaml": "0.0.70", "vscode-html-languageservice": "^5.6.2", "vscode-uri": "^3.1.0" }, "peerDependencies": { "prettier": "^3.0.0", "prettier-plugin-astro": ">=0.11.0" }, "optionalPeers": ["prettier", "prettier-plugin-astro"], "bin": { "astro-ls": "bin/nodeServer.js" } }, "sha512-MEQvrbuiFDEo+LCO4vvYuTr3eZ4IluZ/n4BbUv77AWAJNEj/n0j7VqTvdL1rGloNTIKZTUd46p5RwYKsxQGY8w=="],
"@astrojs/markdown-remark": ["@astrojs/markdown-remark@7.0.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.8.0", "@astrojs/prism": "4.0.0", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "shiki": "^4.0.0", "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-jTAXHPy45L7o1ljH4jYV+ShtOHtyQUa1mGp3a5fJp1soX8lInuTJQ6ihmldHzVM4Q7QptU4SzIDIcKbBJO7sXQ=="],
"@astrojs/markdown-remark": ["@astrojs/markdown-remark@7.1.0", "", { "dependencies": { "@astrojs/internal-helpers": "0.8.0", "@astrojs/prism": "4.0.1", "github-slugger": "^2.0.0", "hast-util-from-html": "^2.0.3", "hast-util-to-text": "^4.0.2", "js-yaml": "^4.1.1", "mdast-util-definitions": "^6.0.0", "rehype-raw": "^7.0.0", "rehype-stringify": "^10.0.1", "remark-gfm": "^4.0.1", "remark-parse": "^11.0.0", "remark-rehype": "^11.1.2", "remark-smartypants": "^3.0.2", "retext-smartypants": "^6.2.0", "shiki": "^4.0.0", "smol-toml": "^1.6.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", "unist-util-visit-parents": "^6.0.2", "vfile": "^6.0.3" } }, "sha512-P+HnCsu2js3BoTc8kFmu+E9gOcFeMdPris75g+Zl4sY8+bBRbSQV6xzcBDbZ27eE7yBGEGQoqjpChx+KJYIPYQ=="],
"@astrojs/prism": ["@astrojs/prism@4.0.0", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-NndtNPpxaGinRpRytljGBvYHpTOwHycSZ/c+lQi5cHvkqqrHKWdkPEhImlODBNmbuB+vyQUNUDXyjzt66CihJg=="],
"@astrojs/prism": ["@astrojs/prism@4.0.1", "", { "dependencies": { "prismjs": "^1.30.0" } }, "sha512-nksZQVjlferuWzhPsBpQ1JE5XuKAf1id1/9Hj4a9KG4+ofrlzxUUwX4YGQF/SuDiuiGKEnzopGOt38F3AnVWsQ=="],
"@astrojs/rss": ["@astrojs/rss@4.0.17", "", { "dependencies": { "fast-xml-parser": "5.4.1", "piccolore": "^0.1.3", "zod": "^4.3.6" } }, "sha512-eV+wdMbeVKC9+sPaV0LN8JL1LGo9YAh3GKl4Ou4nzMNLmXM/aswYpSGxVEAuHilgBZ6/++/Pv08ICmuOqX107w=="],
"@astrojs/rss": ["@astrojs/rss@4.0.18", "", { "dependencies": { "fast-xml-parser": "^5.5.7", "piccolore": "^0.1.3", "zod": "^4.3.6" } }, "sha512-wc5DwKlbTEdgVAWnHy8krFTeQ42t1v/DJqeq5HtulYK3FYHE4krtRGjoyhS3eXXgfdV6Raoz2RU3wrMTFAitRg=="],
"@astrojs/telemetry": ["@astrojs/telemetry@3.3.0", "", { "dependencies": { "ci-info": "^4.2.0", "debug": "^4.4.0", "dlv": "^1.1.3", "dset": "^3.1.4", "is-docker": "^3.0.0", "is-wsl": "^3.1.0", "which-pm-runs": "^1.1.0" } }, "sha512-UFBgfeldP06qu6khs/yY+q1cDAaArM2/7AEIqQ9Cuvf7B1hNLq0xDrZkct+QoIGyjq56y8IaE2I3CTvG99mlhQ=="],
@@ -283,7 +283,7 @@
"array-iterate": ["array-iterate@2.0.1", "", {}, "sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg=="],
"astro": ["astro@6.0.5", "", { "dependencies": { "@astrojs/compiler": "^3.0.0", "@astrojs/internal-helpers": "0.8.0", "@astrojs/markdown-remark": "7.0.0", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.0.1", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", "devalue": "^5.6.3", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.0", "smol-toml": "^1.6.0", "svgo": "^4.0.0", "tinyclip": "^0.1.6", "tinyexec": "^1.0.2", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.4", "unist-util-visit": "^5.1.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^7.3.1", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.3.6" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "bin/astro.mjs" } }, "sha512-JnLCwaoCaRXIHuIB8yNztJrd7M3hXrHUMAoQmeXtEBKxRu/738REhaCZ1lapjrS9HlpHsWTu3JUXTERB/0PA7g=="],
"astro": ["astro@6.1.1", "", { "dependencies": { "@astrojs/compiler": "^3.0.1", "@astrojs/internal-helpers": "0.8.0", "@astrojs/markdown-remark": "7.1.0", "@astrojs/telemetry": "3.3.0", "@capsizecss/unpack": "^4.0.0", "@clack/prompts": "^1.1.0", "@oslojs/encoding": "^1.1.0", "@rollup/pluginutils": "^5.3.0", "aria-query": "^5.3.2", "axobject-query": "^4.1.0", "ci-info": "^4.4.0", "clsx": "^2.1.1", "common-ancestor-path": "^2.0.0", "cookie": "^1.1.1", "devalue": "^5.6.3", "diff": "^8.0.3", "dlv": "^1.1.3", "dset": "^3.1.4", "es-module-lexer": "^2.0.0", "esbuild": "^0.27.3", "flattie": "^1.1.1", "fontace": "~0.4.1", "github-slugger": "^2.0.0", "html-escaper": "3.0.3", "http-cache-semantics": "^4.2.0", "js-yaml": "^4.1.1", "magic-string": "^0.30.21", "magicast": "^0.5.2", "mrmime": "^2.0.1", "neotraverse": "^0.6.18", "obug": "^2.1.1", "p-limit": "^7.3.0", "p-queue": "^9.1.0", "package-manager-detector": "^1.6.0", "piccolore": "^0.1.3", "picomatch": "^4.0.3", "rehype": "^13.0.2", "semver": "^7.7.4", "shiki": "^4.0.2", "smol-toml": "^1.6.0", "svgo": "^4.0.1", "tinyclip": "^0.1.12", "tinyexec": "^1.0.4", "tinyglobby": "^0.2.15", "tsconfck": "^3.1.6", "ultrahtml": "^1.6.0", "unifont": "~0.7.4", "unist-util-visit": "^5.1.0", "unstorage": "^1.17.4", "vfile": "^6.0.3", "vite": "^7.3.1", "vitefu": "^1.1.2", "xxhash-wasm": "^1.1.0", "yargs-parser": "^22.0.0", "zod": "^4.3.6" }, "optionalDependencies": { "sharp": "^0.34.0" }, "bin": { "astro": "bin/astro.mjs" } }, "sha512-vq8sHpu1JsY1fWAunn+tdKNbVDmLQNiVdyuGsVT2csgITdFGXXVAyEXFWc1DzkMN0ehElPeiHnqItyQOJK+GqA=="],
"axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
@@ -387,7 +387,7 @@
"fast-xml-builder": ["fast-xml-builder@1.1.4", "", { "dependencies": { "path-expression-matcher": "^1.1.3" } }, "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg=="],
"fast-xml-parser": ["fast-xml-parser@5.4.1", "", { "dependencies": { "fast-xml-builder": "^1.0.0", "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-BQ30U1mKkvXQXXkAGcuyUA/GA26oEB7NzOtsxCDtyu62sjGw5QraKFhx2Em3WQNjPw9PG6MQ9yuIIgkSDfGu5A=="],
"fast-xml-parser": ["fast-xml-parser@5.5.9", "", { "dependencies": { "fast-xml-builder": "^1.1.4", "path-expression-matcher": "^1.2.0", "strnum": "^2.2.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-jldvxr1MC6rtiZKgrFnDSvT8xuH+eJqxqOBThUVjYrxssYTo1avZLGql5l0a0BAERR01CadYzZ83kVEkbyDg+g=="],
"fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="],
@@ -589,7 +589,7 @@
"path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="],
"path-expression-matcher": ["path-expression-matcher@1.1.3", "", {}, "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ=="],
"path-expression-matcher": ["path-expression-matcher@1.2.0", "", {}, "sha512-DwmPWeFn+tq7TiyJ2CxezCAirXjFxvaiD03npak3cRjlP9+OjTmSy1EpIrEbh+l6JgUundniloMLDQ/6VTdhLQ=="],
"piccolore": ["piccolore@0.1.3", "", {}, "sha512-o8bTeDWjE086iwKrROaDf31K0qC/BENdm15/uH9usSC/uZjJOKb2YGiVHfLY4GhwsERiPI1jmwI2XrA7ACOxVw=="],
@@ -649,7 +649,7 @@
"rollup": ["rollup@4.57.1", "", { "dependencies": { "@types/estree": "1.0.8" }, "optionalDependencies": { "@rollup/rollup-android-arm-eabi": "4.57.1", "@rollup/rollup-android-arm64": "4.57.1", "@rollup/rollup-darwin-arm64": "4.57.1", "@rollup/rollup-darwin-x64": "4.57.1", "@rollup/rollup-freebsd-arm64": "4.57.1", "@rollup/rollup-freebsd-x64": "4.57.1", "@rollup/rollup-linux-arm-gnueabihf": "4.57.1", "@rollup/rollup-linux-arm-musleabihf": "4.57.1", "@rollup/rollup-linux-arm64-gnu": "4.57.1", "@rollup/rollup-linux-arm64-musl": "4.57.1", "@rollup/rollup-linux-loong64-gnu": "4.57.1", "@rollup/rollup-linux-loong64-musl": "4.57.1", "@rollup/rollup-linux-ppc64-gnu": "4.57.1", "@rollup/rollup-linux-ppc64-musl": "4.57.1", "@rollup/rollup-linux-riscv64-gnu": "4.57.1", "@rollup/rollup-linux-riscv64-musl": "4.57.1", "@rollup/rollup-linux-s390x-gnu": "4.57.1", "@rollup/rollup-linux-x64-gnu": "4.57.1", "@rollup/rollup-linux-x64-musl": "4.57.1", "@rollup/rollup-openbsd-x64": "4.57.1", "@rollup/rollup-openharmony-arm64": "4.57.1", "@rollup/rollup-win32-arm64-msvc": "4.57.1", "@rollup/rollup-win32-ia32-msvc": "4.57.1", "@rollup/rollup-win32-x64-gnu": "4.57.1", "@rollup/rollup-win32-x64-msvc": "4.57.1", "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-oQL6lgK3e2QZeQ7gcgIkS2YZPg5slw37hYufJ3edKlfQSGGm8ICoxswK15ntSzF/a8+h7ekRy7k7oWc3BQ7y8A=="],
"sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="],
"sax": ["sax@1.6.0", "", {}, "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA=="],
"semver": ["semver@7.7.4", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA=="],
@@ -671,15 +671,15 @@
"strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
"strnum": ["strnum@2.2.0", "", {}, "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg=="],
"strnum": ["strnum@2.2.2", "", {}, "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA=="],
"svgo": ["svgo@4.0.0", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.4.1" }, "bin": "./bin/svgo.js" }, "sha512-VvrHQ+9uniE+Mvx3+C9IEe/lWasXCU0nXMY2kZeLrHNICuRiC8uMPyM14UEaMOFA5mhyQqEkB02VoQ16n3DLaw=="],
"svgo": ["svgo@4.0.1", "", { "dependencies": { "commander": "^11.1.0", "css-select": "^5.1.0", "css-tree": "^3.0.1", "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.1.1", "sax": "^1.5.0" }, "bin": "./bin/svgo.js" }, "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w=="],
"tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="],
"tinyclip": ["tinyclip@0.1.12", "", {}, "sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA=="],
"tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="],
"tinyexec": ["tinyexec@1.0.4", "", {}, "sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw=="],
"tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
@@ -693,7 +693,7 @@
"typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="],
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
"typescript": ["typescript@6.0.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ=="],
"typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="],
@@ -803,6 +803,8 @@
"dom-serializer/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="],
"fast-xml-builder/path-expression-matcher": ["path-expression-matcher@1.1.3", "", {}, "sha512-qdVgY8KXmVdJZRSS1JdEPOKPdTiEK/pi0RkcT2sw1RhXxohdujUlJFPuS1TSkevZ9vzd3ZlL7ULl1MHGTApKzQ=="],
"sharp/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
"typescript-auto-import-cache/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
+449 -302
View File
@@ -1,46 +1,74 @@
# Zaguán Blade Tool Calls Reference
This document describes the regular tool calls that Zaguán Blade supports. These are the tools you can add to your Local AI system prompts to extend usability.
This document lists the tool calls that are actually executable in the local `zblade` runtime.
> **Note:** This does not cover Blade-specific or ZLP (Zaguán Language Protocol) tools. These are standard file/editor tools for general AI coding assistance.
It intentionally excludes:
- **ZLP-related tooling**
- **Anything handled server-side by `zcoderd`**
- **Schema-only entries that are not currently executed by `zblade`**
The authoritative implementation lives in `src-tauri/src/tools.rs`.
---
## File Operations
## Scope
These tools are the ones `zblade` can execute locally in its own tool executor.
Excluded server-side tools include:
- `ask_followup_question`
- `attempt_completion`
- `new_task`
- `generate_image`
- `todo_write`
Also excluded from this document:
- `symbol_references` because it is present in tool schema definitions but is **not currently dispatched by the local executor**.
---
## File Tools
### `read_file`
Read the complete contents of a file.
Read the full contents of a file.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path (relative to workspace or absolute) |
| `path` | string | Yes | File path |
**Aliases:** `file_path`, `filepath`, `filename`
**Accepted aliases for `path`:** `file_path`, `filepath`, `filename`
**Example:**
```json
{
"path": "src/main.rs"
}
```
---
### `read_file_range`
Read a specific line range from a file with optional context.
Read a specific line range from a file, with optional surrounding context.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
| `start_line` | integer | No | Start line (1-indexed, default: 1) |
| `end_line` | integer | No | End line (1-indexed, default: end of file) |
| `context_lines` | integer | No | Extra context lines before/after range (default: 0) |
| `start_line` | integer | No | Start line, 1-indexed. Defaults to `1`. |
| `end_line` | integer | No | End line, 1-indexed. Defaults to end of file. |
| `context_lines` | integer | No | Extra lines before and after the requested range. Defaults to `0`. |
**Accepted aliases for `path`:** `file_path`, `filepath`, `filename`
**Example:**
```json
{
"path": "src/lib.rs",
@@ -50,21 +78,28 @@ Read a specific line range from a file with optional context.
}
```
---
### `write_file`
### `write_file` / `create_file`
Write content to a file. Parent directories are created if needed.
Write content to a file. Creates parent directories if needed.
### `create_file`
Alias of `write_file`.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
| `content` | string | Yes | Content to write |
| `path` | string | Yes | Target file path |
| `content` | string | Yes | File contents |
**Aliases for content:** `contents`, `text`, `data`
**Accepted aliases:**
- `path`: `file_path`, `filepath`, `filename`
- `content`: `contents`, `text`, `data`
**Example:**
```json
{
"path": "src/new_module.rs",
@@ -72,415 +107,483 @@ Write content to a file. Creates parent directories if needed.
}
```
---
### `edit_file`
Apply a search/replace edit to a file (legacy tool).
Legacy single search/replace edit tool.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
| `old_content` | string | Yes | Text to find |
| `new_content` | string | Yes | Replacement text |
**Aliases:** `old`/`from` for old_content, `new`/`to` for new_content
**Accepted aliases:**
**Example:**
```json
{
"path": "src/main.rs",
"old_content": "fn old_function()",
"new_content": "fn new_function()"
}
```
- `path`: `file_path`, `filepath`, `filename`
- `old_content`: `old`, `from`
- `new_content`: `new`, `to`
---
### `apply_patch`
### `apply_edit` / `apply_patch`
Preferred patch/edit tool for search/replace edits.
Apply search/replace edits with robust fuzzy matching. Supports both single patches and atomic multi-patch operations.
### `apply_edit`
Alias of `apply_patch`.
Supports both a single replacement and an atomic multi-patch mode.
**Single-patch parameters:**
**Single Patch Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
| `old_text` | string | Yes | Text to find and replace |
| `old_text` | string | Yes | Exact text to replace |
| `new_text` | string | Yes | Replacement text |
**Multi-Patch Parameters:**
**Multi-patch parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
| `patches` | array | Yes | Array of patch objects |
Each patch object contains:
- `old_text` (string): Text to find
- `new_text` (string): Replacement text
- `start_line` (integer, optional): Hint for disambiguation
- `end_line` (integer, optional): Hint for disambiguation
Each patch object supports:
**Single Patch Example:**
```json
{
"path": "src/lib.rs",
"old_text": "let x = 5;",
"new_text": "let x = 10;"
}
```
- `old_text` — required
- `new_text` — required
- `start_line` — optional hint
- `end_line` — optional hint
**Multi-Patch Example:**
```json
{
"path": "src/lib.rs",
"patches": [
{"old_text": "fn foo()", "new_text": "fn bar()"},
{"old_text": "let a = 1;", "new_text": "let a = 2;"}
]
}
```
**Accepted aliases in single-patch mode:**
> **Note:** Multi-patch operations are atomic - all patches are validated before any are applied. If any patch fails, no changes are made.
- `path`: `file_path`, `filepath`, `filename`
- `old_text`: `old_content`, `old`, `from`
- `new_text`: `new_content`, `new`, `to`
---
**Important behavior:**
- Matching is exact.
- If the match is ambiguous, the edit fails.
- Multi-patch application is atomic: if one patch fails validation, none are applied.
### `delete_file`
Delete a file or directory.
Delete a file, or a directory when `recursive: true` is provided.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | Path to delete |
| `recursive` | boolean | No | Required for directories (default: false) |
**Example:**
```json
{
"path": "temp/old_file.txt"
}
```
---
| `recursive` | boolean | No | Required when deleting a directory |
### `move_file`
Move or rename a file.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `source` | string | Yes | Source path |
| `destination` | string | Yes | Destination path |
**Example:**
```json
{
"source": "src/old_name.rs",
"destination": "src/new_name.rs"
}
```
---
### `copy_file`
Copy a file or directory (recursive for directories).
Copy a file or recursively copy a directory.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `source` | string | Yes | Source path |
| `destination` | string | Yes | Destination path |
**Example:**
```json
{
"source": "templates/base.html",
"destination": "src/templates/base.html"
}
```
### `create_directory`
---
Create a directory and any missing parent directories.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | Directory path |
### `get_file_info`
Get metadata about a file or directory.
Return basic filesystem metadata.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | Path to inspect |
**Returns:** JSON with `path`, `size`, `is_directory`, `is_file`, `modified`, `readonly`
**Example:**
```json
{
"path": "Cargo.toml"
}
```
**Returns:** JSON including `path`, `size`, `is_directory`, `is_file`, `modified`, and `readonly`.
---
### `create_directory`
## Directory and Search Tools
Create a directory (and parent directories if needed).
### `list_dir`
List directory contents using a compact tree-like view.
### `list_directory`
Alias of `list_dir`.
This is implemented by forwarding to `get_workspace_structure` with a default shallow depth.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | Directory path to create |
| `path` | string | No | Directory path. Defaults to `.`. |
**Example:**
```json
{
"path": "src/modules/new_feature"
}
```
**Notes:**
---
## Directory & Search Tools
### `list_directory` / `list_dir`
List directory contents with tree view.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | No | Directory path (default: ".") |
| `max_depth` | integer | No | Max traversal depth (default: 1) |
**Aliases:** `dir`, `directory`
**Example:**
```json
{
"path": "src",
"max_depth": 2
}
```
---
- `list_dir` / `list_directory` exists mainly as a compatibility entry point.
- The underlying structured traversal behavior is defined by `get_workspace_structure`.
- Prefer `get_workspace_structure` when you need explicit traversal controls.
### `get_workspace_structure`
Get a tree view of the workspace structure.
Return a tree view of the workspace or a subdirectory.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | No | Starting path (default: ".") |
| `depth` | integer | No | Max depth (default: 2) |
| `limit` | integer | No | Max entries (default: 50, max: 200) |
| `path` | string | No | Starting path. Defaults to `.`. |
| `depth` | integer | No | Max traversal depth. Defaults to `2`. |
| `limit` | integer | No | Max returned entries. Defaults to `50`, capped at `200`. |
**Example:**
```json
{
"path": ".",
"depth": 3,
"limit": 100
}
```
**Accepted aliases for `path`:** `dir`, `directory`
> **Note:** Automatically ignores common directories like `node_modules`, `target`, `.git`, `__pycache__`, etc.
**Behavior notes:**
---
- Hidden files are skipped.
- Common heavy/generated directories are skipped.
- Gitignored paths are filtered when project settings enable that behavior.
### `find_files`
Find files by name pattern (substring match).
Find files by substring match on filename.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pattern` | string | Yes | Substring to match in filenames |
| `path` | string | No | Starting path (default: workspace root) |
| `max_depth` | integer | No | Max search depth |
| `pattern` | string | Yes | Substring to match in entry names |
| `path` | string | No | Search root inside the workspace |
| `max_depth` | integer | No | Optional max traversal depth |
**Example:**
```json
{
"pattern": "test",
"path": "src",
"max_depth": 5
}
```
### `find_files_glob`
---
Find files with a glob pattern.
### `find_files_glob` / `glob`
### `glob`
Find files using glob patterns.
Alias of `find_files_glob`.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pattern` | string | Yes | Glob pattern (e.g., `**/*.rs`) |
| `path` | string | No | Base path for search |
| `case_sensitive` | boolean | No | Case-sensitive matching (default: false) |
| `pattern` | string | Yes | Glob pattern |
| `path` | string | No | Optional base path |
| `case_sensitive` | boolean | No | Whether matching is case-sensitive |
**Example:**
```json
{
"pattern": "**/*.tsx",
"path": "src"
}
```
**Accepted aliases:**
---
- `pattern`: `glob`
### `grep_search` / `rg`
### `grep_search`
Search file contents using regex patterns.
Search file contents with a regular expression.
### `rg`
Alias of `grep_search`.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `pattern` | string | Yes | Regex pattern to search |
| `path` | string | No | Directory to search (default: ".") |
| `pattern` | string | Yes | Regex pattern |
| `path` | string | No | Search root. Defaults to `.`. |
| `include_dependencies` | boolean | No | Include dependency directories like `node_modules` and `vendor` |
| `timeout_ms` | integer | No | Timeout used when timeout enforcement is enabled |
**Aliases for pattern:** `query`, `regex`
**Accepted aliases:**
**Example:**
```json
{
"pattern": "fn\\s+main",
"path": "src"
}
```
- `pattern`: `query`, `regex`
- `path`: `dir`, `directory`
**Returns:** Matches in format `filepath:line_number:line_content`
**Behavior notes:**
---
- Returns matches in `path:line:text` form on success.
- If timeout enforcement is enabled and the search times out, it returns structured JSON with partial results and a hint.
### `codebase_search`
Search codebase with context lines around matches.
Search the codebase with regex and return matches with surrounding context.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `query` | string | Yes | Regex pattern to search |
| `file_pattern` | string | No | Filter files (e.g., `*.rs,*.toml`) |
| `max_results` | integer | No | Maximum results (default: 50) |
**Example:**
```json
{
"query": "struct.*Config",
"file_pattern": "*.rs",
"max_results": 20
}
```
**Returns:** Matches with 2 lines of context before and after.
| `query` | string | Yes | Regex pattern |
| `file_pattern` | string | No | Comma-separated filename patterns |
| `max_results` | integer | No | Max number of matches to return. Defaults to `50`. |
---
## Editor Interaction Tools
## Editor and UI Interaction Tools
### `get_editor_state`
Get current editor context including active file, cursor position, and open files.
Return the current local editor context.
**Parameters:** None
**Parameters:** None.
**Returns:** JSON with:
- `active_file`: Currently focused file
- `open_files`: List of open file paths
- `active_tab_index`: Index of active tab
- `cursor_line`, `cursor_column`: Cursor position
- `selection_start_line`, `selection_end_line`: Selection range
**Returns:** JSON including:
---
- `active_file`
- `open_files`
- `active_tab_index`
- `cursor_line`
- `cursor_column`
- `selection_start_line`
- `selection_end_line`
The returned text may also include human-readable helper guidance for the active file and cursor location.
### `open_file`
Open a file in the editor.
Emit an editor action that opens a file, optionally at a line.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path to open |
| `path` | string | Yes | File to open |
| `line` | integer | No | Line number to jump to |
**Example:**
```json
{
"path": "src/main.rs",
"line": 42
}
```
---
**Note:** This returns an action payload for the frontend to intercept.
### `goto_line`
Navigate to a specific line in the active file.
Emit an editor action that moves the cursor in the current file.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `line` | integer | Yes | Line number (1-indexed) |
| `column` | integer | No | Column number |
**Example:**
```json
{
"line": 100,
"column": 15
}
```
---
| `line` | integer | Yes | Target line |
| `column` | integer | No | Optional target column |
### `get_selection`
Get the currently selected text in the editor.
Request the current selection.
**Parameters:** None
**Parameters:** None.
**Returns:** The selected text content.
---
**Current status:** implemented only as a placeholder action payload. It does **not** currently return the true selected text.
### `replace_selection`
Replace the current selection with new content.
Emit an editor action that replaces the current selection.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | string | Yes | Replacement content |
**Example:**
```json
{
"content": "new replacement text"
}
```
### `insert_at_cursor`
Emit an editor action that inserts content at the current cursor position.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | string | Yes | Text to insert |
---
### `insert_at_cursor`
## Local Code-Intelligence Tools
Insert content at the current cursor position.
These tools are local to `zblade`. They are **not ZLP tools** and do not require `zcoderd`, but they do depend on `zblade`'s local language service / symbol index being available.
### `symbol_search`
Search indexed symbols by name or qualified name.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `content` | string | Yes | Content to insert |
| `query` | string | Yes | Symbol query |
| `path` | string | No | Restrict to a file |
| `kind` | string | No | Symbol kind filter |
| `limit` | integer | No | Max results. Defaults to `20`, capped at `100`. |
**Example:**
```json
{
"content": "// TODO: implement this\n"
}
```
**Accepted aliases:**
- `path`: `file`, `file_path`
- `kind`: `symbol_type`
### `symbol_resolve`
Resolve one symbol by ID, or by file plus name.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `symbol_id` | string | Conditionally | Stable symbol ID |
| `path` | string | Conditionally | Required when resolving by file-scoped lookup |
| `qualified_name` | string | No | Exact qualified name |
| `name` | string | No | Simple symbol name |
**Accepted aliases:**
- `symbol_id`: `id`
- `path`: `file`, `file_path`
**Rule:** provide either `symbol_id`, or a `path` with a symbol name selector.
### `symbol_outline`
Return the hierarchical symbol outline for one file.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | Yes | File path |
**Accepted aliases for `path`:** `file`, `file_path`
### `symbol_graph`
Return incoming and outgoing graph edges for a symbol.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `symbol_id` | string | Conditionally | Stable symbol ID |
| `path` | string | Conditionally | File path when resolving by file/name |
| `qualified_name` | string | No | Exact qualified name |
| `name` | string | No | Simple symbol name |
| `relationship_type` | string | No | Edge type. Defaults to `call`. |
| `limit` | integer | No | Max edges. Defaults to `20`, capped at `100`. |
**Accepted aliases:**
- `symbol_id`: `id`
- `path`: `file`, `file_path`
- `relationship_type`: `edge_kind`, `kind`
---
## Project Index Tools
These tools read the local `.zblade/context/project_index.md` artifact, or a semantic overview generated by the local language service when available.
### `get_project_index_overview`
Read a compact overview window from the local project index.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | No | Optional workspace sub-root |
| `max_chars` | integer | No | Character budget. Defaults to `6000`, capped at `12000`. |
| `offset` | integer | No | Character offset |
### `get_project_index_chunk`
Read a deterministic paged chunk from the local project index.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `path` | string | No | Optional workspace sub-root |
| `offset` | integer | No | Character offset |
| `max_chars` | integer | No | Character budget. Defaults to `4000`, capped at `8000`. |
---
## Composite Read-Only Tools
These tools are supported by `zblade` locally.
By default, schema exposure may be gated by model family and the `composite_tools_enabled` feature flag, but the local executor does support them.
### `read_many_files`
Read multiple files selected by glob patterns in a single bounded call.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `paths` | array of strings | Yes | Include globs |
| `exclude` | array of strings | No | Exclude globs |
| `max_files` | integer | No | Max files. Defaults to `100`, capped at `500`. |
| `max_bytes_per_file` | integer | No | Per-file byte limit. Defaults to `65536`, capped at `524288`. |
| `include_line_numbers` | boolean | No | Include line numbers in returned content |
**Accepted aliases for include globs:** `globs`, `patterns`
### `batch`
Execute multiple read-only tool calls concurrently with all-settled behavior.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `calls` | array | Yes | Array of tool call objects |
| `max_parallel` | integer | No | Defaults to `8`, capped at `16` |
| `fail_fast` | boolean | No | Stop queued work after first failure |
| `ordered` | boolean | No | Preserve input order. Defaults to `true`. |
| `cancel_after_ms` | integer | No | Optional total budget |
Each call object supports:
- `tool` or `name`
- `arguments`
**Important behavior:**
- Only read-only tools are allowed.
- `batch` itself and `run_command` are explicitly blocked inside `batch`.
### `codebase_investigator`
Run a bounded read-only investigation pass and return structured findings.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `objective` | string | Yes | Investigation goal |
| `scope` | array of strings | No | Glob scope. Defaults to `**/*`. |
| `max_turns` | integer | No | Defaults to `8`, capped at `16` |
| `max_tool_calls` | integer | No | Defaults to `40`, capped at `120` |
| `output_format` | string | No | `json` or `markdown` |
| `cancel_after_ms` | integer | No | Optional total budget |
---
@@ -488,63 +591,107 @@ Insert content at the current cursor position.
### `run_command`
Execute a shell command (requires user approval).
Execute a command in the workspace. This requires approval in normal AI workflows.
**Parameters:**
| Name | Type | Required | Description |
|------|------|----------|-------------|
| `command` | string | Yes | Shell command to execute |
| `cwd` | string | Yes | Working directory |
| `command` | string | Conditionally | Legacy shell command line |
| `program` | string | Conditionally | Executable path/name for structured execution |
| `args` | array of strings | No | Structured arguments when using `program` |
| `shell` | boolean | No | Force shell execution when using `program` |
| `cwd` | string | No | Working directory |
| `blocking` | boolean | No | Defaults to `true` |
| `wait_ms_before_async` | integer | No | Startup wait when non-blocking |
**Example:**
```json
{
"command": "cargo build --release",
"cwd": "."
}
```
**Accepted aliases / alternate casing:**
> **Note:** This tool requires user confirmation before execution for safety.
- `command`: `Command`, `command_line`, `CommandLine`
- `program`: `Program`
- `args`: `Args`
- `shell`: `Shell`
- `cwd`: `Cwd`
- `blocking`: `Blocking`
- `wait_ms_before_async`: `WaitMsBeforeAsync`
**Rule:** provide either `command` or `program`.
**Behavior notes:**
- If `program` is used, shell execution defaults to `false` unless explicitly enabled.
- If `command` is used, shell execution is enabled.
---
## Tool Result Handling
## General Notes
Tool results are automatically truncated if they exceed limits:
- **Max size:** 50KB
- **Max lines:** 2000
### Result truncation
When truncated, the first 100 lines and last 50 lines are shown with a truncation message.
Large tool results may be truncated.
- **Max size:** `50 KB`
- **Max lines:** `2000`
When truncation happens, the executor keeps a head/tail summary rather than returning the entire payload.
### Path safety
Paths are generally constrained to the current workspace.
- Relative paths are resolved from the workspace root.
- Absolute paths must still resolve inside the workspace when validation is enforced.
### Local vs advertised tools
This file documents what `zblade` can execute locally.
That is not always identical to what every model sees in advertised tool schemas:
- Some compatibility aliases are executor-only.
- Some composite tools are feature-flag and model-family gated for schema exposure.
- Some schema entries may exist before local execution support is complete.
---
## Path Resolution
## Quick Reference
All paths can be:
- **Relative:** Resolved from workspace root (e.g., `src/main.rs`)
- **Absolute:** Used as-is (must be within workspace)
### Locally executable non-server-side tools
Paths outside the workspace are rejected for security.
---
## Adding Tools to Your AI System Prompt
To use these tools with a local AI, include the tool definitions in your system prompt. Example format:
```
You have access to the following tools:
- read_file: Read file contents. Args: {"path": "string"}
- write_file: Write to file. Args: {"path": "string", "content": "string"}
- grep_search: Search with regex. Args: {"pattern": "string", "path": "string"}
- apply_edit: Edit file. Args: {"path": "string", "old_text": "string", "new_text": "string"}
...
To use a tool, respond with:
<tool_call>
{"name": "tool_name", "arguments": {...}}
</tool_call>
```
The exact format depends on your AI provider's tool calling conventions.
- `read_file`
- `read_file_range`
- `write_file`
- `create_file`
- `edit_file`
- `apply_patch`
- `apply_edit`
- `delete_file`
- `move_file`
- `copy_file`
- `create_directory`
- `get_file_info`
- `list_dir`
- `list_directory`
- `get_workspace_structure`
- `find_files`
- `find_files_glob`
- `glob`
- `grep_search`
- `rg`
- `codebase_search`
- `get_editor_state`
- `open_file`
- `goto_line`
- `get_selection`
- `replace_selection`
- `insert_at_cursor`
- `symbol_search`
- `symbol_resolve`
- `symbol_outline`
- `symbol_graph`
- `get_project_index_overview`
- `get_project_index_chunk`
- `read_many_files`
- `batch`
- `codebase_investigator`
- `run_command`
+3 -3
View File
@@ -11,8 +11,8 @@
},
"dependencies": {
"@astrojs/check": "^0.9.8",
"@astrojs/rss": "^4.0.15",
"astro": "^6.0.5",
"typescript": "^5.9.3"
"@astrojs/rss": "^4.0.18",
"astro": "^6.1.1",
"typescript": "^6.0.2"
}
}
+30
View File
@@ -21,6 +21,36 @@ import BaseLayout from '../layouts/BaseLayout.astro';
</section>
<!-- v0.5.1 Section -->
<section id="v0-5-1" class="changelog-section">
<div class="container">
<div class="version-card version-development">
<div class="version-header">
<div class="version-info">
<h2 class="version-number">v0.5.1</h2>
<span class="version-date">TBD</span>
</div>
<span class="version-badge badge-development">Development</span>
</div>
<div class="version-content">
<div class="version-resume">
<p>Development builds focused on polishing the Terminal experience and resolving shell output display issues.</p>
</div>
<div class="changes-section">
<h3 class="changes-title">
<span class="changes-icon">🐛</span>
Bug Fixes
</h3>
<ul class="changes-list">
<li><strong>Terminal.</strong> Fixed bugs that caused the Terminal to not display Tab text or requests from the shell.</li>
</ul>
</div>
</div>
</div>
</div>
</section>
<!-- v0.5.0 Section -->
<section id="v0-5-0" class="changelog-section">
<div class="container">