{"_id":"finch-markdown-editor","_rev":"31-a723b1d625d1aa2c69cebe201c8135dc","name":"finch-markdown-editor","dist-tags":{"latest":"0.2.24"},"versions":{"0.1.0":{"name":"finch-markdown-editor","version":"0.1.0","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.0","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"8ae5b3fb22a26e85ab0f15eb8e80f82003db2605","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.0.tgz","fileCount":7,"integrity":"sha512-gDgekivEPJJCwKemk86j0VhbdPhy45v2cC2jXea6Ps2JzDHLbPnAoVt4giTOgaI9Iver1WPNbD16sTbHkkFmqg==","signatures":[{"sig":"MEQCIBc5TILLlaAzgMcwi34HtlvWYiT/Zk9XU8oHIS13bL9JAiBs72CDdmlXWXKpKw1HCbk/DOY9fimRg0Ph+ybMkGyUHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1096036},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"MD Editor","categories":["productivity"],"minVersion":"1.6.0","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"Markdown Editor Icons"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":false,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"900bf820b08ba7b1a64016be56d25f7c0c8b4223","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && cp src/panel.html dist/panel.html","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.0_1788016531919_0.5539926598100327","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"finch-markdown-editor","version":"0.1.1","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.1","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"ccb5bfa64416353af84723f61c3897785be12dc7","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.1.tgz","fileCount":7,"integrity":"sha512-3lj5vDAnXVLnyFebuV+nOfDhsD05Zc+COH+Ijdq1XjxCm2K+gRC3FtbQskfTTTVyAf34X2maWPrI3ry3p83vTA==","signatures":[{"sig":"MEUCIGQ6qJXo2gGfb7AReqDWPji+29yugLu1AKbWSEYVeGC9AiEAgPuYrxjJsvF7QuScH57iSRRqSg9k5PJunKP2Fvuv7Bo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1119768},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"写作","categories":["productivity"],"minVersion":"1.6.0","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写作图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":false,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"7faee93ffb51058dd4cd90c0680959a0f1a98083","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && cp src/panel.html dist/panel.html","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.1_1788030969688_0.7025591356154663","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"finch-markdown-editor","version":"0.1.2","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.2","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"e23efb11134ce03f10217738c932f9e026acb0a0","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.2.tgz","fileCount":7,"integrity":"sha512-5htW7LX8eF6G+mquB8SofCvrjC7raZbjTktdqbDM5iVFH58bmDfXMo5Mdarcu6Afp+xWY9WzJZFheq88u0/pEg==","signatures":[{"sig":"MEUCIQCy0E91FEWvy2zbmWs0wWcJyqH84jQ5yBx8bNf8HKc93gIgVGgyYqR7UQZdpaNjBU8rbIncN+bLyi/iDUtoDdXA2cQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1119887},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"写作","categories":["productivity"],"minVersion":"1.6.0","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写作图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":false,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"b2798569b4fec70e043e5aba9f5a6a0365fdc5f9","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && cp src/panel.html dist/panel.html","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.2_1788031330631_0.04331723784639041","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"finch-markdown-editor","version":"0.1.3","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.3","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"35f0ba87187dadc36400d38e77cf5ba4e08e9bde","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.3.tgz","fileCount":8,"integrity":"sha512-Fd811zKcxzRIf32EMTmf+BE1GgWCwH9GwejjOErc0ac1a42KJYzul2dZrNtzlWi0XIzhag6tBI669Kk9vIj9UQ==","signatures":[{"sig":"MEYCIQCL17tFBlR5nAclQLVeBWSzRNnGxFSNAERbFYi/ATR7iQIhALMkA2wWIzyMHFYmTWjfry1Mof4mW48q4+rI/I8YqBhz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1121876},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":false,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"2210d6cac197fbc3c5ecfbc6fb73e2208a7c0850","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && cp src/panel.html dist/panel.html","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.3_1788060521179_0.6113111912622893","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"finch-markdown-editor","version":"0.1.5","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.5","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"c87b885b668201b2166521deaafbbbe1472fc973","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.5.tgz","fileCount":8,"integrity":"sha512-auGmeTJfYwVz5c+X53dvkCVacLbxsXKI8z68KPkmSu+jxB3h65MFsarZtW4y+5YGx684kdkTF5C2c7kY7rfLlw==","signatures":[{"sig":"MEQCICOOYywxh4+sdlgiFSlCVWanOgXg/EmhcGkLkg/6SdtkAiBJ7uKbCBSJyLR8ISBOcUWFgzc2uyEVFYZOAPG4NHm5oQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1127261},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"88d0a79dae32b960ae9b575205b356507e2cc075","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && node -e \"require('node:fs').copyFileSync('src/panel.html', 'dist/panel.html')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"12.0.2","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.5_1788075261102_0.28731948338718794","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"finch-markdown-editor","version":"0.1.7","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.7","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"76f876332b9e7bbe96dd274533263fe00f925133","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.7.tgz","fileCount":23,"integrity":"sha512-gmhNtWyjzlfR7TjFAufxEWn7T8Lc3ZvwIbqA3y8ijKK2ydyTUpCRRn6yAAuKqjSKmPZ/tK1LOZidVA8j5RKdKA==","signatures":[{"sig":"MEUCIEzGg1sR7Ggi9/dE6/vVrdYwvIAQFr+qzikZ8g0c+OfAAiEAocxLCtoqyoDNQaMzuua1d92G2wv2xKSdoYHhmjFxqOE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6380984},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. When the user asks to create/draft a brand-new Markdown document, write the full Markdown yourself and call action 'create' with an absolute path that does not exist yet plus the markdown content — this writes the file and opens it in Markdown Editor in one step (Markdown Editor's own UI intentionally has no 'new file' button). When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"9e3628e1dbc32f3b73914f4bd33e468323440c1f","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.0","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.7_1788081658423_0.8690225979336783","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"finch-markdown-editor","version":"0.1.8","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.8","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"4c1e2137ecd37cd2637ac394da2346718868afab","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.8.tgz","fileCount":23,"integrity":"sha512-+QuuvVH90yLYDTTmATIEw9FVqmIdo5Qx3Ya8AG/+CbtxcWfsZtKkqBmS0jqxgoFW2bYhT/lEUbHZk+CT6Q4GYw==","signatures":[{"sig":"MEUCIQDX2IujIqG/AfluYJN03X6daM+6JnLrEv4uSBy5yMqGmwIgAgf3U1rZWoKgGah6X1fqfhGNMHYhlza9PWQVU7j9QMI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6382472},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' with the full updated Markdown. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"5c391b742f6a6311cf1a16d221b6fb1f39ad9150","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.0","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.8_1788084138893_0.7850625027721649","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"finch-markdown-editor","version":"0.1.9","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.1.9","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"bf3e3ba828efdd75fa82e362eaeac37621981131","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.1.9.tgz","fileCount":23,"integrity":"sha512-6OYlNsohzOb45lTq8IoXyOCVAAWBceqiopfpFxWbqSQsURqg/wy0kSY6tTb4Cu3QkcbuLnyD13PUJut+JM2JxA==","signatures":[{"sig":"MEYCIQCHYQSGvhyP+Yz1/v0H3LwAqYbR21zavUUMDFcH1uUhQwIhAMRJb1Y1yLj/eLZjLN42/z8/uHJpwH8FNI2CmDieCt6F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6404324},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"d0cf0897c93cf504ed6926ce37027e3c873e6180","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.0","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.1.9_1788193494066_0.44705997357743743","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"finch-markdown-editor","version":"0.2.0","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.0","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"78183cf3ec69cd58291d7a489200374309f9404b","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.0.tgz","fileCount":25,"integrity":"sha512-1kYQXyTcr2o38VhecmO/b86c2YDu3WQUL9gAd8ofZ7Rqr2kb3oSyJukPd18chQRxSerinOBEP8yjaWdI2PiXwQ==","signatures":[{"sig":"MEUCID2OABgsbak5xQgQWsZ2ULnoES3Kp3gddHWfEWUmI2p6AiEAk8GOu7qs41FeZZceFsy0WACUNfFrU/cmy04Jb6llooc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6392671},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"aa0d76812b1ccfa4dbe5920cdc64e381ac3e3189","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.0","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.0_1788319987421_0.8610886799622792","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"finch-markdown-editor","version":"0.2.1","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.1","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"5cc3b29f3d804d69f3d1cd152631039ddf87a9ee","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.1.tgz","fileCount":25,"integrity":"sha512-c526eKP1YQXEZCZg9OhaSubk72KpIRiH+HSMCfT06/ZkElKZC5DzlvEQdg2bhjcR9Jtgvo387zQbVp1JYZzJGg==","signatures":[{"sig":"MEUCIEclhgqV3/rm/YydbTQ8ICY8VIE4S4DN7B3yicOYImCtAiEA5Qa7/xQVQM0YYJsrfKtjLja8+5+tznMIIB1oX3OJtts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6392683},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"cb109f2e74bc1618ec4847330932f90999484489","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.0","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.1_1788321337206_0.18648527947249138","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"finch-markdown-editor","version":"0.2.2","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.2","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"b90c8ca3000c00ac4ffac73961820c78e5c27d57","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.2.tgz","fileCount":25,"integrity":"sha512-Y8u6yd/FsdA8tlRVbppI9cW8L0Xz2t4mcKakWDap1w6ShC8v0/1fCqRBuuvSH7TCpQtsnTSjdYzXNE4weqQ2MQ==","signatures":[{"sig":"MEUCIB94/MgNlyJtFLw4S77DgXhiJij+BtcJn+YiURVx/82rAiEA4n2Du+tnsAMSoEBxC2NCbisIqb566XZn7skc/VtbGig=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6440465},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"7143a62cdd026beb0d785bdc173f344433d7c7a4","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.1","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.2_1788409905871_0.5685486227944996","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"finch-markdown-editor","version":"0.2.3","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.3","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"70819b0ad7619b81e563d1bcfa77e22340d5b71b","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.3.tgz","fileCount":25,"integrity":"sha512-RXCAIOurL/d19VX/InWT0oTv1PtyOqYpLg8rNN7jeju6z9ljTQa4CAlJ6lUuCDV/Adn0bjUiJ7o/AfEukMUTZw==","signatures":[{"sig":"MEYCIQCqLp88UaEgxfrQisDe+5NJEJL6R5uyVtdexC/FD7qvawIhAPHCVZVxRQp0MZGZukKeA+RigUJqgT3jWFYOAaiE5ELe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6441310},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"28ac4384e5f8113c01df1c26a6549a6b865e1c07","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.1","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.3_1788410408850_0.9996550113635922","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"finch-markdown-editor","version":"0.2.4","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.4","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"e6175dd7caee91bf6da31b7f72b098ff8298b46c","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.4.tgz","fileCount":25,"integrity":"sha512-uBtUJthi/OWKeK89nS0XGkdTyLfR4seDzZ+06eTxjBCXB5IypRv2hSL0UR87GG5c/PajwHFffPNb5hDbaT9d0Q==","signatures":[{"sig":"MEQCIBOgbeCf4M3JB6/VOg41mNAfb9xclFZtShq6+94Q7S9lAiAij532j6aeZAuFyXOLXV6h5NlGhyLmOsHXSEG4P0P8Ow==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6444159},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"d24f8d08b3e12c0963c066a70e4e688acb84d983","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.1","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.4_1788508819050_0.20860102450086115","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"finch-markdown-editor","version":"0.2.5","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.5","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"1f99af00ad6cd945a44ca9e81a39aaf28bcee31a","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.5.tgz","fileCount":25,"integrity":"sha512-N54fIg9WExYMXmemvEntxtCnFw/9Zo7iadcwDJBsoZP8urB/Njqko9grVaX+r2qnMORBKOtgQyPK8pRtAKVMEw==","signatures":[{"sig":"MEUCIHoOsPs7p9KtUaAGLvIbZafm7cyehwksR4XfaogVX1qwAiEAwjfPIbelSq1jUQ+Ec+TWU1XDjcuHIaYw/Dj1jD4++zY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6448084},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"e4f9d7ad18c50cffe641a9fb33f4c1aa1acc1502","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.1","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.5_1788520352455_0.24423427746306992","host":"s3://npm-registry-packages-npm-production"}},"0.2.6":{"name":"finch-markdown-editor","version":"0.2.6","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.6","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"cd57e29eebf3b3c906995640e54b2974a86fe3db","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.6.tgz","fileCount":25,"integrity":"sha512-fgId/gIG4qtvizmMY4ESFwgDC+EDDc1R22Kha1P5tdAuR/MaDFu46ow6b0wxf8oaYeD8iM9vwGTEani82piChg==","signatures":[{"sig":"MEQCIBZlHR79pO4cLXmjDRTFDyVesALYqI0Ybn/JZqgqOTUwAiBg1kJzjaSilLNBkDdNJUq7uR0NmCfeHUytOBP/f/SkUg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5037710},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"e4f9d7ad18c50cffe641a9fb33f4c1aa1acc1502","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.6_1788849986774_0.47725373954387007","host":"s3://npm-registry-packages-npm-production"}},"0.2.7":{"name":"finch-markdown-editor","version":"0.2.7","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.7","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"6e7da1177297d27efe36d372a2e091e506744c7a","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.7.tgz","fileCount":25,"integrity":"sha512-BN3nueJ2yP68ZVYjWHkOv+YoPCmlIrVUne3HUwnesDmGO0c3Ei2m88PDOYrCNKTh3j5g3g1z5sVHk99gRllt8w==","signatures":[{"sig":"MEQCIE51BdpYomOcrOj1jVKkopV72miUmQqZsdwapxmfb/sBAiBE+v/IY1gLBQo7XVN/3oKgYaBGmVNH6Wk656Hyf/k93w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5039245},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"b793800981f0e0fd73cb53cc8b55b55ed5f27ae1","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.7_1788855009837_0.28569016442171824","host":"s3://npm-registry-packages-npm-production"}},"0.2.8":{"name":"finch-markdown-editor","version":"0.2.8","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.8","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"a1959e37001d56c1a61ccbc0ec66f55abf93a8d4","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.8.tgz","fileCount":25,"integrity":"sha512-x6zYWv3WIVcCxEWs8l9alBHMi6IRHphTledje6RU/pUJQL0EzRgqQvdSiM8QGah+C2pZXr2MQ3snB6SBEbtPcw==","signatures":[{"sig":"MEUCIA9gCdCu6BG6gS27I0VJD87xNdrHkL6GjM14tMDnbW88AiEA4dQIAqdLdOfx/9W8vErmgsJWYSJ6sCwGJT4xnU3h6D4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5039591},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"c5b9299acdb3e7a8848f1f543945ca076a7f0886","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.8_1788881183121_0.6409811010100017","host":"s3://npm-registry-packages-npm-production"}},"0.2.9":{"name":"finch-markdown-editor","version":"0.2.9","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.9","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"ef7a688bda96b17feb6e4ad7b879ca1ed248ec4f","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.9.tgz","fileCount":25,"integrity":"sha512-Ivie+nlI6gX4w/XUAl6lz/5TtAHhow6reaAtAvc71XkcbybvUNRnXm8NuAYUgPZYWA+mjVBaVTGlKIRpSxpaWQ==","signatures":[{"sig":"MEYCIQC4woiTZNMUsrxwsTjltxjvzTYgYbDPFRqGeGqv01IQ/QIhANOJDK0Nggsy885QLFHNjtbdXtx2HgAHEFQk6+x11+oz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5039671},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"366f6cf3efcb00e7c5fbb82dc7ec8b0c68e01c38","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.9_1788882856115_0.28268300190122364","host":"s3://npm-registry-packages-npm-production"}},"0.2.10":{"name":"finch-markdown-editor","version":"0.2.10","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.10","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"29fefa1bde7f3a355ac8673049cfe4a069bb6c2d","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.10.tgz","fileCount":25,"integrity":"sha512-2BvU/fKiIRHqTQJQbO6pP808jUCxhUJ6TE5DLFu50oYflkn8BUW2GcOEEWuNdKB3VZWvZl5tRGdMvRSXJNNQCg==","signatures":[{"sig":"MEUCIBB/5DMhJ3uvu0ng69sjXzEw5gHKjiyDDP3K/rVkgmkWAiEAuA+eEWtDW7Kdd8KJr0Px0npqbaYiuoukTBPkFI60C6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5039663},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"ff2555e8741dd2f95bfb361be9cc43362531792f","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.10_1788884030956_0.5497193353499481","host":"s3://npm-registry-packages-npm-production"}},"0.2.11":{"name":"finch-markdown-editor","version":"0.2.11","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.11","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"38fe393b5f1da2d10d5bb99d7284f7da52077ee3","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.11.tgz","fileCount":25,"integrity":"sha512-fiN3mnuuAN8lZCLBEGt4vCI8H4Hbho1N4lXSoffHLUjoj6B0a7/m63p1pfMkPB/9jDBeO3YGnaK1SALB7q/96Q==","signatures":[{"sig":"MEYCIQCVWLvGRygvC98SnM8hpbCL/RTSW2ymegT8XUVjBZXfeAIhAM1fHVRxz9CINeySU9hu/7gZTGlGd3W2Jc8WBmuZcQ9H","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5238158},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"e4fc34ddc7c3d6dba5d7d29319ed5ba23106ef47","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.11_1788885961790_0.6150392152726232","host":"s3://npm-registry-packages-npm-production"}},"0.2.12":{"name":"finch-markdown-editor","version":"0.2.12","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.12","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"42abdaf42d50cd75375138ea818ad13d38ecddc3","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.12.tgz","fileCount":25,"integrity":"sha512-k/vrZSDSRbRODTiwUnZ54p/nZpoYfJtCICNArjNvvGa1LYHAUpYRWOeNswAU9KQQvZjeLKAlRSNWkNUggDDH0Q==","signatures":[{"sig":"MEUCIQDFII9h0MDfMFE1TO6evpJjpKFuoWDHGO328N0ziDhxAgIgYVAQtShbGLCwhldnQM1PwV+Tmw3zWam2oZbu9zUzuaw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5236758},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"a1f67b7ab454a599021ae1a62609a777fd392cde","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.12_1788921221575_0.18728284023981634","host":"s3://npm-registry-packages-npm-production"}},"0.2.13":{"name":"finch-markdown-editor","version":"0.2.13","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.13","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"4ee9df119e537fecc08d94a36ac10b5a1e27dfe4","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.13.tgz","fileCount":25,"integrity":"sha512-/fB+09Jeu7vuKJSjCMf1aeIaQW0Ys8YdGDfo35KQXuRZPu3NYCcc9myoAo+VEKFh6vRByQdFEFoS29/GcVRklw==","signatures":[{"sig":"MEYCIQD1D+MdWe0zoEFAzW7KRCyknofKQLs0gM8NglWabWmn2gIhAI76xSeYuILYh1544U3ebBgVbvq1qrRa1g9glSeqrCYx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5239324},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"bde993fcd1497fa590432868a64754f8d5d344c4","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.13_1789033937825_0.7661862417177967","host":"s3://npm-registry-packages-npm-production"}},"0.2.14":{"name":"finch-markdown-editor","version":"0.2.14","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.14","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"ca5c25093fa11263ee41d645503b1abdb9c6e656","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.14.tgz","fileCount":25,"integrity":"sha512-nWvdZOPK8/RmiAbto0+J2ezG9dNL4ywi5js4zUq3crS/klGFTQWjGfM98sNuAY423/SMvHnB38uBeCJ0nhDXJQ==","signatures":[{"sig":"MEUCIQCu8iWWZ+j75ncYTiB7NEPHQCEAQFqW/rJn/bahdveYAgIgWX+ZALgy7xZqwvRYJIqPLZzFo3HcWEz17hEJEeR6gqs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5240943},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"5d35aee9d9182d40902b7615f9b5d23578c08ddc","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.14_1789049595889_0.6548686514572439","host":"s3://npm-registry-packages-npm-production"}},"0.2.15":{"name":"finch-markdown-editor","version":"0.2.15","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.15","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"10097d073c61b75e5fd03cb2037ae48882af1ae2","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.15.tgz","fileCount":25,"integrity":"sha512-87/kLY8+wEUWLx24si98eL+H/xSE9U0QtdH8Q/1olRSgY0/xqZtrkZ3q92f4687XS6ky7pwrq0ogDfpsE8pMVg==","signatures":[{"sig":"MEUCID8/Eb/6JwHsWbxxshiJbSNhN0ZUUG4w3fAWDTyRCFGZAiEAqhfeR+999Weanp1E0IFc3C9FsTf9oSt8ESyWbeXgMSE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5247494},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"570793444de5895f5ab6f6e53dedd8f6a9ca3c37","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"0.3.2","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.15_1789127161640_0.2554223538380265","host":"s3://npm-registry-packages-npm-production"}},"0.2.16":{"name":"finch-markdown-editor","version":"0.2.16","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.16","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"d17d340dd7516448875dd849b566bb6bd70beb5d","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.16.tgz","fileCount":25,"integrity":"sha512-qo4jDa7ILPGXD4Zzry5l0kwBwOYVi21WH3Bo0AG2O3OsOjzeb+ZJZNDL/0QQJgcoQ1GSKTISqqMalcWx79iKBw==","signatures":[{"sig":"MEUCIQD1t6zMS7laXMLsh30XeV94F/rlMDSD3AuBmQ37LnoHvwIgAbApI0pqObhz7dyX2Fa4biioJ4gMt4Wo9te8WKfDD94=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5320678},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"e77947eb01cc2cc6f5ed73a3e4c52c520879694b","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.16_1789132844935_0.37674497163990606","host":"s3://npm-registry-packages-npm-production"}},"0.2.17":{"name":"finch-markdown-editor","version":"0.2.17","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.17","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"39f30a641f99032e4631e8f863e3651fcd0d3110","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.17.tgz","fileCount":25,"integrity":"sha512-UohiGRS+N/sebzCqeRB6/Em8Lp8Qb25hFmGVqLfTh97CQ7ulX77z4LKHQw38IbOjV5RgrXb+u1PDViGGK7BnOw==","signatures":[{"sig":"MEUCIQC6u8YyW+zaRwrBnte3w3iqoF/wnhR8MRu5I1MtWnUOCgIgGUmYC3Mkh/3VN7tem5JsoHxndM8J4+DnF7wQj538I6Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5320805},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"b91482d2c31d92af090cf028cdadafc3e04115df","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.17_1789133667395_0.5426928448071062","host":"s3://npm-registry-packages-npm-production"}},"0.2.20":{"name":"finch-markdown-editor","version":"0.2.20","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.20","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"ef5686b7e9ce830a796e511beb2f9771c6e91819","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.20.tgz","fileCount":25,"integrity":"sha512-S6g62W097symmFsuhYQZetuxtXzfKpp8TQPr2HksiISKrrgdpGoRejpZYMjXnekxgDRzzP4yQX226RH48cIK7Q==","signatures":[{"sig":"MEUCIQCX3upbQtm0RodXFc1OzKNPQXZkdjkWdWs2tZBOCPjUZgIgLxGTm2cxeJvn1jif0r/8fSVdXyA8YjxCcJ5MvEh+3yo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5321333},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"5f836c92c392d5f2e1f5cb14deb0459a8aec6128","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.20_1789200794647_0.3231068111624238","host":"s3://npm-registry-packages-npm-production"}},"0.2.21":{"name":"finch-markdown-editor","version":"0.2.21","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.21","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"0e3d7264a85f7d09108c7734f81ef483e5d7b8e3","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.21.tgz","fileCount":25,"integrity":"sha512-ckJQ48GiXtzkHMjdGClMpwaCmwEEiDOhJrOyOgkBYstf+B8F4JUaqSsgKgvNsYJgd7BJ+crcU4xf4WsijeVhQw==","signatures":[{"sig":"MEUCIGJJw9pJw9DnPTVJY06S70HeLf6BlN58zRfc5BtenV7gAiEAo/QFfcIuaNKxyhJURp7bPtUM7Iw/im/yV7M1tR43KNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5321447},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"ab01009f70ad6c5ff38601627411dfbdf613ba3c","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.21_1789202803922_0.7454496487358162","host":"s3://npm-registry-packages-npm-production"}},"0.2.22":{"name":"finch-markdown-editor","version":"0.2.22","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.22","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"5baaf97d724047c26994bc4073490b00a7136457","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.22.tgz","fileCount":25,"integrity":"sha512-6O8JEJaJZVrVdUSg/Pd4Vljx7D2KB7oUfLaaAnCewyFbyBdsiNrRv48TVDvOfU6IPUT+cV2MnUbPOXq/o0jJng==","signatures":[{"sig":"MEYCIQDly83H2QFKrClsF2AdBJE/Z7k6zwpYyUZDJzfO/govOQIhAPAyByouCJ28R44Ufl/hRn3IKP4dNxrC3nl7M0Oa/xMf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCGtvN3/puhWXraZ9oxXAI+nYBkAOUwVHX1wth6G2aTsgIgcTAjqbiJPiavp37OnNNknQ07RLI+v0QGPXO3b8cPvgY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5325561},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"fd7c0588a34818182ba5f659089a0f6733d02b9e","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.22_1789700629592_0.1357423283656911","host":"s3://npm-registry-packages-npm-production"}},"0.2.23":{"name":"finch-markdown-editor","version":"0.2.23","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","_id":"finch-markdown-editor@0.2.23","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"6ecdd50be9c431501f522a0e4d44af7d64ca56ee","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.23.tgz","fileCount":25,"integrity":"sha512-Dnc4/Kgpqo1F25bjEJ3Bu0S5cWSlzbFMSixD6QD6R2WNRA32/FVln1VCv670z0OcwjLvdGtRfOku5jUyIH5fvg==","signatures":[{"sig":"MEUCIHlfdpkyvLV0D+WkrBRTlYTvjW4NqUR4InCObc7Tzbw7AiEApI4NE5MgUNmlbimF96kwVFiJ00Nm3PMlKyznpky0GRQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIA8uaS3moeRPObHttU2If8KWESvKwvBx3NZdLspU+6kkAiEA39u65bWG400X3zTY01f+hFLNoIo3F9RJ5ENrASqpdhc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5325423},"main":"dist/index.js","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"gitHead":"e0f2cdccefc93f46e6133fa0abbbdd78a18e2e9b","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"tmp":"tmp/finch-markdown-editor_0.2.23_1789709459802_0.01127629127054397","host":"s3://npm-registry-packages-npm-production"}},"0.2.24":{"_id":"finch-markdown-editor@0.2.24","bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"dist":{"shasum":"62ecc299a4b73876c9e12281da63f62b57481a2f","tarball":"https://registry.npmjs.org/finch-markdown-editor/-/finch-markdown-editor-0.2.24.tgz","fileCount":25,"integrity":"sha512-6YNWkybI2VaAKMMfLwh2Et2g9blmZoQs2OY43BmNA5nOMZ0bCh0WvKalX5UYNXw7pnfSeNn2g5QbJdy4qavWfw==","signatures":[{"sig":"MEUCIHTNobaEuj4EM9cvJJ7LUt5Q6lClrbxT9fcxNsL0dMiTAiEA3qvKuMxqQmEfAnVGP8sne17fo7mg3KZJe9XidQFW/0o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDt+5mXkEfmgVCQS6xjmlaS4oDe3oYREbDJEndj/BjX1wIhAJKQicmzGlo/nFUTMxKahV3rulmndyQ/R8E9n9904H11"}],"unpackedSize":5325017},"main":"dist/index.js","name":"finch-markdown-editor","type":"module","finch":{"main":"dist/index.js","name":"Writing","categories":["productivity"],"minVersion":"1.6.1","contributes":{"tools":true,"appView":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"description":"A full-screen Markdown writing workspace with live WeChat preview."},"appPanel":{"icon":"newspaper","source":{"path":"dist/panel.html","type":"local"},"toolbar":[{"id":"home","icon":"house","tooltip":"Back to home"},{"id":"open","icon":"ext:markdown-editor-icons/folder-open","tooltip":"Open Markdown file"},{"id":"save","icon":"ext:markdown-editor-icons/save","label":"Save","tooltip":"Save (Cmd/Ctrl+S)"},{"type":"separator"},{"id":"annotate","icon":"ext:markdown-editor-icons/file-pen-line","label":"Annotate","tooltip":"Enable annotation"},{"id":"mode","icon":"toggle-left","label":"Preview","tooltip":"Switch to preview"},{"id":"style","icon":"palette","type":"menu","items":[{"id":"style:kami","label":"Kami"},{"id":"style:bauhaus","label":"Bauhaus"},{"id":"style:blueprint","label":"Blueprint"},{"id":"style:botanical","label":"Botanical"},{"id":"style:newsprint","label":"Newsprint"},{"id":"style:retro","label":"Retro"},{"id":"style:sketch","label":"Sketch"},{"id":"style:terminal","label":"Terminal"},{"id":"style-sep","label":"","separator":true},{"id":"style:custom","icon":"wand-sparkles","label":"Custom (AI-designed)"}],"tooltip":"Layout style"},{"type":"spacer"},{"id":"more","icon":"settings","type":"menu","items":[{"id":"reload","label":"Re-render"},{"id":"reveal","label":"Show in file manager"},{"id":"recentSession","label":"View recent session","disabled":true},{"id":"more-sep","label":"","separator":true},{"id":"about","label":"About rendering"}]}],"viewType":"markdown-editor.document","instanceMode":"single","showInLauncher":true},"iconPacks":[{"id":"markdown-editor-icons","label":"写字图标"}]},"description":"Edit Markdown and preview it as a WeChat Official Account article. Select text for AI edits, or ask AI to design a custom style.","permissions":{"shell":true,"network":true,"sessions":true,"filesystem":"readwrite"},"miniToolType":"local","systemPrompt":"When the user wants to edit or preview a local Markdown file, call markdown_editor_document with action 'open' and its absolute path. Treat requests such as \"write an article\", \"start writing\", \"write a post\", or \"draft something\" as an intent to use Writing even when Markdown is not mentioned. For a new document, guide the user to supply a title/topic and destination when they are missing; once enough information is available, call action 'create' with a new absolute .md path and Markdown content. If the user supplied a writing brief, draft the full Markdown; if they only want to begin, create a minimal titled starter document. The tool writes the file and opens it in Markdown Editor in one step — do not merely return prose in chat when the user wants to begin writing in the editor. Markdown Editor's own UI intentionally has no 'new file' button. When the user asks to revise a passage selected in Markdown Editor, propose precise replacement Markdown and, once approved, call action 'apply' — for a small change pass edits (an array of {old_string, new_string} targeted replacements matched against the file's current content) instead of resending the whole document; reserve the full markdown parameter for a genuine full rewrite. Once this conversation has started editing a Markdown document through Writing, ALL subsequent changes to that .md file MUST keep using Writing's apply/edits path first, even though the built-in Edit tool can make the same textual replacement: Writing refreshes the open editor and highlights exactly what changed. Use the built-in Edit tool only if Writing's apply actually fails, and do not switch merely because Edit appears shorter or more convenient. When the user asks for a custom/AI-designed WeChat layout style, write plain CSS scoped under #bm-md (tag/id selectors only, use !important where needed to override the base style) inspired by bm.md's built-in styles (kami, bauhaus, blueprint, botanical, newsprint, retro, sketch, terminal), then call action 'set_style' with that css and a short label — it applies immediately in the open preview. In your visible replies, describe this capability the way the user experiences it (\"I'll write it into the file\", \"opened it in the editor\"); never surface the tool name or its action names, which are internal plumbing — quoting them back makes the reply read like a machine reciting an API. Whenever you propose a rewrite, a title/path, or a style slot and then wait for the user's approval, calling Session action=suggest with 1-3 short click-to-send confirmations (e.g. 'Use this one', 'Use the shorter version', 'Try another tone') is MANDATORY, not optional — it is part of the same turn as the proposal, not a separate follow-up. Do not treat sending the proposal text as having finished the confirmation step; the turn is incomplete until action=suggest has actually been called, even if the wording already reads as a complete question or offer.","manifestVersion":1,"activationEvents":["onStartup"]},"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"gitHead":"621ada9d2682eddc863fbe60db6a174ee24b4ab8","license":"MIT","scripts":{"build":"esbuild src/index.ts --bundle --platform=node --format=esm --target=node20 --outfile=dist/index.js && esbuild src/codemirror.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/codemirror.js && esbuild src/panel.ts --bundle --platform=browser --format=iife --target=chrome120 --minify --outfile=dist/panel.js && node -e \"const fs=require('node:fs');fs.copyFileSync('src/panel.html','dist/panel.html');fs.copyFileSync('src/panel.css','dist/panel.css');fs.rmSync('dist/bmmd',{recursive:true,force:true});fs.mkdirSync('dist/bmmd',{recursive:true});fs.cpSync('node_modules/bmmd/bin','dist/bmmd/bin',{recursive:true});fs.copyFileSync('node_modules/bmmd/LICENSE','dist/bmmd/LICENSE')\"","typecheck":"tsc --noEmit","prepublishOnly":"npm run typecheck && npm run build && npx @finchtoys/minitools doctor ."},"version":"0.2.24","_npmUser":{"name":"puterjam","email":"puterjam@gmail.com"},"homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"_npmVersion":"11.13.0","description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","directories":{},"maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"_nodeVersion":"24.16.0","dependencies":{"codemirror":"^6.0.2","@lezer/highlight":"^1.2.3","@codemirror/search":"^6.7.1","@codemirror/lang-css":"^6.3.1","@codemirror/lang-sql":"^6.10.0","@codemirror/language":"^6.12.4","@codemirror/lang-html":"^6.4.12","@codemirror/lang-json":"^6.0.2","@codemirror/lang-yaml":"^6.1.3","@codemirror/lang-python":"^6.2.1","codemirror-lang-mermaid":"^0.5.0","@codemirror/legacy-modes":"^6.5.3","@codemirror/lang-markdown":"^6.5.2","codemirror-markdown-tables":"^1.0.1","@codemirror/lang-javascript":"^6.2.5"},"_hasShrinkwrap":false,"devDependencies":{"bmmd":"^0.3.4","esbuild":"^0.28.1","typescript":"^6.0.3","@types/node":"^26.1.0","@finchtoys/minitool-api":"^0.3.5"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/finch-markdown-editor_0.2.24_1789881421797_0.6679202646804601"}}},"time":{"created":"2026-08-29T15:15:31.740Z","modified":"2026-09-20T05:17:02.056Z","0.1.0":"2026-08-29T15:15:32.084Z","0.1.1":"2026-08-29T19:16:09.831Z","0.1.2":"2026-08-29T19:22:10.829Z","0.1.3":"2026-08-30T03:28:41.335Z","0.1.5":"2026-08-30T07:34:21.252Z","0.1.7":"2026-08-30T09:20:58.595Z","0.1.8":"2026-08-30T10:02:19.116Z","0.1.9":"2026-08-31T16:24:54.261Z","0.2.0":"2026-09-02T03:33:07.597Z","0.2.1":"2026-09-02T03:55:37.429Z","0.2.2":"2026-09-03T04:31:46.147Z","0.2.3":"2026-09-03T04:40:09.017Z","0.2.4":"2026-09-04T08:00:19.266Z","0.2.5":"2026-09-04T11:12:32.630Z","0.2.6":"2026-09-08T06:46:26.961Z","0.2.7":"2026-09-08T08:10:10.008Z","0.2.8":"2026-09-08T15:26:23.303Z","0.2.9":"2026-09-08T15:54:16.272Z","0.2.10":"2026-09-08T16:13:51.151Z","0.2.11":"2026-09-08T16:46:01.969Z","0.2.12":"2026-09-09T02:33:41.755Z","0.2.13":"2026-09-10T09:52:18.042Z","0.2.14":"2026-09-10T14:13:16.080Z","0.2.15":"2026-09-11T11:46:01.796Z","0.2.16":"2026-09-11T13:20:45.201Z","0.2.17":"2026-09-11T13:34:27.597Z","0.2.20":"2026-09-12T08:13:14.835Z","0.2.21":"2026-09-12T08:46:44.112Z","0.2.22":"2026-09-18T03:03:49.717Z","0.2.23":"2026-09-18T05:31:00.050Z","0.2.24":"2026-09-20T05:17:01.899Z"},"bugs":{"url":"https://github.com/puterjam/finch-tools/issues"},"author":{"url":"https://github.com/puterjam","name":"PuterJam"},"license":"MIT","homepage":"https://github.com/puterjam/finch-tools/tree/main/finch-markdown-editor#readme","keywords":["finch","finch-minitool","markdown","wechat","preview","annotation"],"repository":{"url":"git+https://github.com/puterjam/finch-tools.git","type":"git","directory":"finch-markdown-editor"},"description":"A Markdown editor and WeChat Official Account style preview, with selection-based AI edits and AI-generated custom styles.","maintainers":[{"name":"puterjam","email":"puterjam@gmail.com"}],"readme":"# 写字 (Writing)\n\n一款为码字工作者打造的 Markdown 写作小程序：本地文件直接编辑、微信风格排版预览、专注模式、AI 批注改写，全部在你自己的机器上完成。\n\n---\n\n## 它解决什么问题\n\n写长文最怕三件事：\n\n1. **一边写一边想排版**，思绪被打断；\n2. **改一个段落要复制粘贴来回倒腾**，还容易弄丢草稿；\n3. **写完发公众号才发现格式不对**，返工重排。\n\n「写字」把这三件事合到了一起：Markdown 就是你的源文件，预览即所得，AI 帮你改稿，草稿永不丢。\n\n---\n\n## 快速上手\n\n1. 从 Finch 右侧面板打开 **写字**。\n2. 点击工具栏「文件夹」图标选择一篇 `.md` 文件（或直接新建一篇）。\n3. 开始写。写的过程中随时：\n\n| 想做的事      | 怎么操作                         |\n| --------- | ---------------------------- |\n| 打开/新建文档   | 工具栏「文件夹」/ 首页「新建文档」           |\n| 保存        | `Cmd/Ctrl + S`（改动会自动落盘，不用惦记） |\n| 切换公众号预览   | 工具栏「预览」按钮，所见即所得              |\n| 让 AI 改一段话 | 框选文字 → 描述要求 → 加入对话           |\n| 专注不被打扰    | 工具栏「专注」（羽毛图标），当前行居中、其余行变淡    |\n| 行距宽松点写    | 字体菜单 → 舒适（紧凑/舒适两档）           |\n| 排版风格      | 预览模式下点「调色板」，8 种内置风格任选        |\n| 自定义 AI 排版 | 预览浮层「让 AI 设计排版」              |\n\n---\n\n## 给码字工作者的能力\n\n### ✍️ 写，像在用编辑器\n\n- 原生 CodeMirror 6 内核：语法高亮、软换行、选区、撤销历史、行号，应有尽有。\n- **高亮标记**：用 `==文字==` 划重点，预览中会渲染成高亮底色；编辑时把光标移入这段文字，`==` 界定符会自动显示出来，移出后收起，和粗体/斜体一致。\n- **草稿永不丢**：每次按键内容都会后台留存；就算手滑关掉标签页，重新打开也会自动恢复未保存的内容。文件在别处被改过？会提示冲突，但你的草稿仍然保留。\n- **专注模式**：开启后光标所在行自动平滑滚动到屏幕中央，其余行 70% 变淡——长文写作不再追着光标跑。\n- **紧凑 / 舒适**：两档行距，阅读时紧凑、写作时宽松，随时切换。\n- 文件被外部修改会自动刷新，编辑器和磁盘永远同步。\n\n### 🔍 批注：框选即问\n\n选中一段文字，弹窗里写下你的要求（\"更口语一点\"、\"扩写成三句话\"、\"换个更有力的开头\"），内容会带着精确的行号和原文进入 Finch 对话。AI 改完给出可替换片段，确认后才写入文件——不会乱改你的稿子。\n\n### 🎨 预览与排版\n\n- 点击「预览」即时看到公众号文章效果，支持 8 种内置风格（暖纸感、几何撞色、蓝图网格、清新绿、报刊衬线、复古、手绘、终端）。\n- 预览浮层可**复制到公众号**（内联样式富文本，直接粘贴）、导出图片或 PDF。\n- 想要独一无二的排版？让 AI 基于你的文章设计自定义 CSS，一键应用并保存，下次写文直接复用。\n\n### 🛡️ 本地优先\n\n- 所有文件都在你自己的磁盘上，内容不出本机。\n- 渲染引擎 `bmmd` 已随小程序内置，预览无需联网下载；没有常驻服务。\n\n---\n\n## 架构说明（给开发者）\n\n编辑器是小程序内集成的 CodeMirror 6，负责解析、高亮、选区、撤销与键盘编辑；文件读写、草稿恢复、批注上下文、保存状态、工具栏与预览容器由 Finch 小程序负责。bm.md 仅作为渲染引擎：小程序按需调用 `bmmd render --platform wechat`，把返回的内联样式 HTML 显示在沙箱 iframe 中。\n\n小程序采用 MIT 许可证；随包分发的 bm.md / `bmmd@0.3.1` CLI 采用 LGPL-3.0-only，其许可证文本位于 `dist/bmmd/LICENSE`。\n","readmeFilename":"README.md"}