{"_id":"@dyegovasc/flowglyph","_rev":"7-b3784596d1e9e950252fb7e5b7cfc875","name":"@dyegovasc/flowglyph","dist-tags":{"latest":"0.2.5"},"versions":{"0.1.0":{"name":"@dyegovasc/flowglyph","version":"0.1.0","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.1.0","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"b80ad4ed98f6c1cc158771628ff11940778d9588","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.1.0.tgz","fileCount":13,"integrity":"sha512-485O9EwARxuY8S1/Fj1OBW7Pg66AlJJId9xP8llb0ubEkMlQl0bvB2GdY3jn8ZHD8gdqa22/iCurqtkwAU0nGQ==","signatures":[{"sig":"MEUCIQCCug6wvqPPwLzIY335U/Y7up4sX1vDPn66+4fzDQmlPgIgTSoGtyIEm61zTCoSuwnBt3FJzWKbQs6ebnjRJfjvsP4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":426001},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"43b1d635359fc99ac9f8f2fd07dc0fe5b97e5b88","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.1.0_1788797046156_0.7719583668007568","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dyegovasc/flowglyph","version":"0.2.0","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.2.0","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"e86e02bb69022c3cdc2e0d49f75e0f7a6a642bcd","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.0.tgz","fileCount":16,"integrity":"sha512-DpuE1TJ8t8g0z+eGkrIU13rJkzpBCKRDPabyAmUYu4ctnM8bL/aqoMG51LMECWzMX1YZ5L6WIeBAXLTuuEDsAw==","signatures":[{"sig":"MEUCIEsrUguHgeg0aMpDl8t4O5m67/1N5XVKrHVBhUjyZxnvAiEA/KMfz5S+V6mWrKV2xdUVmjXltJFHOpfZa/ETvgH6HxM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":483365},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"5bca9b0cdfb1392f3988a36347f560539c2fdc58","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.2.0_1788805541478_0.0006394333916894812","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dyegovasc/flowglyph","version":"0.2.1","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.2.1","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"c47f939686cd812cfce71b97a59ade67e53e86a7","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.1.tgz","fileCount":16,"integrity":"sha512-aSvkD8n3n4anroWSO6SkwV2qxWJ1tzcgphW0BDfS23+TTEpSwT8NEPniQOQZdOCFsLrSR+jE5l2Y7s5Niht7yg==","signatures":[{"sig":"MEUCIQDaKPbymuyRRF2osIeyTxHaW+H2WzzsPIMjGASf3o2GtgIgIYxecrdnn1sULPSRX3Ts2yxlcZvEJEPVAt6a1TNAHcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484851},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"55ab2b322811d018f956e431ba641730602c077d","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.2.1_1788805826765_0.6066229354335317","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@dyegovasc/flowglyph","version":"0.2.2","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.2.2","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"d358dbf088d0cf9a815ed7555c99cef44f0e88c7","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.2.tgz","fileCount":16,"integrity":"sha512-KfbJH9hJKiILYifT4gcVbC2vVk6Zc6dVyGPJY/64j15F5j+e0xfEqnCIrELnxyiAAwbwsTZJkk33gfn+gAiADg==","signatures":[{"sig":"MEYCIQD8Mka9mQ+UG82MD3qGx2KmScuE7UKN0ytkGbTPArq09AIhAJ8IY4TD6hHiEjmGW7lZHmbcg8xR9kxt/+aP3Hzc0rVd","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":485079},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"1914801cdcb5f4d9c673c891201da19df34e2cae","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.2.2_1788807266603_0.8463261967903017","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@dyegovasc/flowglyph","version":"0.2.3","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.2.3","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"60e1b0aa3b52b6a566651a2458dcd722d7cd7a47","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.3.tgz","fileCount":18,"integrity":"sha512-A8203RP+AqYgj8nBnSkjC7suTeXF0gWw69oTwLlcyg9PCA3ZY2Nv2OJMak+kX1dptiVtJ/hmOLRboNRiBfcFaQ==","signatures":[{"sig":"MEYCIQCwwjiE5TQye+85GeBd7n6HTOpW7PJAVy3E6qOGIrg4twIhAIFo823tkj2tMMLV7WZHuYaivruNN0CNvsIl6LlNCkak","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":501919},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"f2ec8c9a9d28dd1668d9e380172326df73c51b76","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.2.3_1788814050166_0.18065579771146645","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@dyegovasc/flowglyph","version":"0.2.4","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"_id":"@dyegovasc/flowglyph@0.2.4","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"bin":{"flowglyph":"bin/flowglyph.mjs"},"dist":{"shasum":"a0a3250d2ea8cc6fb6ffe37f7343e9b254063c16","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.4.tgz","fileCount":18,"integrity":"sha512-FUkVw5C5JzeUSIuUFv8UXSkfpoL/kuOj2xF8spohXh25Ba2ty8/XKIjVX8pga7VTKO8KcuGN3kbZYSXG2ps7zg==","signatures":[{"sig":"MEQCIA0feX8b+zHy8AqAQIJR/+vm21fUpr/8tZqDBllftJtXAiBdIQb6kAm4FIeNRcOWctMjWMZyHt/HTzxmBTR9SzQzMQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":521277},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"4c5fcc1a63521075e6c488ac16f1794c5fe57662","scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","build":"vite build","start":"node bin/flowglyph.mjs","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","verify":"npm test && npm run typecheck && npm run build","dev:web":"vite","prepack":"npm run verify","preview":"vite preview","typecheck":"tsc --noEmit","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","diagram:format":"node --experimental-strip-types engine/format-cli.mjs"},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"repository":{"url":"git+https://github.com/dyegovasc/draw-agent.git","type":"git"},"_npmVersion":"11.3.0","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","directories":{},"_nodeVersion":"24.1.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.0.3","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","@types/react":"^18.3.12","concurrently":"^10.0.5","lucide-react":"^1.41.0","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","@radix-ui/react-dialog":"^1.1.23","@radix-ui/react-alert-dialog":"^1.1.23"},"_npmOperationalInternal":{"tmp":"tmp/flowglyph_0.2.4_1788858893158_0.4847795381733804","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@dyegovasc/flowglyph","version":"0.2.5","description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","type":"module","bin":{"flowglyph":"bin/flowglyph.mjs"},"engines":{"node":">=20.0.0"},"repository":{"type":"git","url":"git+https://github.com/dyegovasc/draw-agent.git"},"homepage":"https://github.com/dyegovasc/draw-agent#readme","bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"publishConfig":{"access":"public"},"scripts":{"dev":"concurrently --kill-others-on-fail --names ai,web --prefix-colors magenta,cyan \"npm:dev:ai\" \"npm:dev:web\"","dev:ai":"node bin/flowglyph.mjs --no-open --port 8000","dev:web":"vite","start":"node bin/flowglyph.mjs","build":"vite build","diagram:format":"node --experimental-strip-types engine/format-cli.mjs","diagram:check":"node --experimental-strip-types engine/format-cli.mjs --check","test":"node --experimental-strip-types --test tests/*.test.ts tests/*.test.mjs","test:server":"node --test tests/server.test.mjs tests/cli.test.mjs","typecheck":"tsc --noEmit","preview":"vite preview","verify":"npm test && npm run typecheck && npm run build","prepack":"npm run verify"},"devDependencies":{"@radix-ui/react-alert-dialog":"^1.1.23","@radix-ui/react-dialog":"^1.1.23","@types/react":"^18.3.12","@types/react-dom":"^18.3.1","@vitejs/plugin-react":"^4.3.4","concurrently":"^10.0.5","lucide-react":"^1.41.0","react":"^18.3.1","react-dom":"^18.3.1","typescript":"^5.6.3","vite":"^6.0.3"},"dependencies":{"ws":"^8.21.3"},"_id":"@dyegovasc/flowglyph@0.2.5","_integrity":"sha512-aKDmUXuTBw0lNdEh78DHlafiGptAnRoh/4WD1KOLK2XpjcZsaF17P2ZIRBhPvdT/5BWSlscPgkubBjPvNa1zBA==","_resolved":"/Users/dyegovasconcelos/Documents/code-local/draw-agent/dyegovasc-flowglyph-0.2.5.tgz","_from":"file:dyegovasc-flowglyph-0.2.5.tgz","_nodeVersion":"24.1.0","_npmVersion":"11.3.0","dist":{"integrity":"sha512-aKDmUXuTBw0lNdEh78DHlafiGptAnRoh/4WD1KOLK2XpjcZsaF17P2ZIRBhPvdT/5BWSlscPgkubBjPvNa1zBA==","shasum":"ea30e4d9bbb2ae6603be556dc1380ec82361f511","tarball":"https://registry.npmjs.org/@dyegovasc/flowglyph/-/flowglyph-0.2.5.tgz","fileCount":22,"unpackedSize":603966,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBmio5N/ht910ENxbMuHd0OoYOMDvemz1O4v4HDfAdkZAiB92kZwHXy1IjyVyx0n7L908tgZ15vb8+s/6kkbHK+xXg=="}]},"_npmUser":{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"},"directories":{},"maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flowglyph_0.2.5_1788944241327_0.23604926663320436"},"_hasShrinkwrap":false}},"time":{"created":"2026-09-07T16:04:05.925Z","modified":"2026-09-09T08:57:21.680Z","0.1.0":"2026-09-07T16:04:06.311Z","0.2.0":"2026-09-07T18:25:41.636Z","0.2.1":"2026-09-07T18:30:26.898Z","0.2.2":"2026-09-07T18:54:26.749Z","0.2.3":"2026-09-07T20:47:30.324Z","0.2.4":"2026-09-08T09:14:53.298Z","0.2.5":"2026-09-09T08:57:21.511Z"},"bugs":{"url":"https://github.com/dyegovasc/draw-agent/issues"},"homepage":"https://github.com/dyegovasc/draw-agent#readme","keywords":["ai","architecture","diagram","flowchart","local-first","visualization"],"repository":{"type":"git","url":"git+https://github.com/dyegovasc/draw-agent.git"},"description":"A local-first, AI-assisted workspace for drawing and refining system diagrams.","maintainers":[{"name":"dyegovasc","email":"dyego.vasconcelos@me.com"}],"readme":"# FlowGlyph\n\nFlowGlyph is a local-first, AI-assisted workspace for drawing and refining system\ndiagrams. Diagram files stay in a folder you choose on your device; the local\nserver handles only AI instruction requests.\n\n## Run with npx\n\nFlowGlyph requires Node.js 20 or newer and a Chromium-based desktop browser for\nwritable folder access.\n\nStart the application:\n\n```sh\nnpx @dyegovasc/flowglyph@latest\n```\n\nOpen **AI providers** in the FlowGlyph sidebar, create an encrypted credential\nvault, then add a Vercel AI Gateway, OpenAI, Anthropic, or Gemini API key. Select\nthe provider and curated model you want FlowGlyph to use.\n\nEnvironment variables remain available as optional read-only overrides:\n\n```dotenv\nAI_GATEWAY_KEY=your-key\nOPENAI_API_KEY=your-openai-key\nANTHROPIC_API_KEY=your-anthropic-key\nGEMINI_API_KEY=your-gemini-key\n```\n\nYou can place these values in a `.env` file in the directory where FlowGlyph is\nstarted. Environment keys take precedence over keys in the encrypted vault and\nare never copied into it automatically.\n\nFlowGlyph opens `http://127.0.0.1:4765` (moving to the next free port automatically if that\nport is busy) and creates a `diagram-vault` only after\nyou choose and authorize a local folder. Press `Ctrl+C` in the terminal to stop\nthe server.\n\n### Encrypted credential storage\n\nSaved provider keys are encrypted locally with AES-256-GCM. The encryption key\nis derived from a master passphrase with scrypt; the passphrase is never written\nto disk. The vault must be unlocked again after restarting FlowGlyph. Losing the\npassphrase requires resetting the vault and entering the provider keys again.\n\nThe credential file lives in the operating system's application configuration\ndirectory, separate from npm's package cache and from diagram documents. It is\ncreated with owner-only permissions where the operating system supports them.\n\n### Optional `.env` configuration\n\nThe current Gateway configuration can still be expressed explicitly:\n\n```dotenv\nAI_GATEWAY_KEY=your-key\nAI_GATEWAY_BASE_URL=https://ai-gateway.vercel.sh/v1\nAI_MODEL=openai/gpt-5.6-terra\n```\n\n### Live conversation (experimental)\n\nLive conversation lets you speak with the diagram agent and hear its replies in\nreal time. Open **AI providers**, add or unlock a Gemini API key, and enable\n**Live conversation**. Then select the waveform button in **Instruct the\ndiagram** and choose **Start conversation**. Headphones are recommended to\nreduce echo.\n\nLive sessions use the dedicated `gemini-3.1-flash-live-preview` model directly\nthrough the Gemini Live API. A Vercel AI Gateway key does not enable this mode\nbecause the Gateway does not provide the required bidirectional WebSocket\ntransport. The Gemini key remains in the local server process and is never sent\nto the browser.\n\nThe agent applies changes as you speak: each proposal is shown on the canvas\nbriefly and committed in the same turn, with no permission question. Follow-up\nadjustments extend the current state rather than replacing it. Edits are tied to\nthe diagram version the agent read; if the saved document changes, the agent must\nread it again before proposing an edit. Simple deletions apply the same way.\nOnly proposals that remove or rebuild a large part of the diagram (removals\ncombined with additions, or deleting at least half of the notes) wait for\nconfirmation: the canvas keeps the current diagram, and pressing Apply is what\nchanges and saves it. Previews exist only in the\nopen session: the only file written is `diagram.json`, and reloading or closing\nbefore a commit leaves the saved document unchanged.\n\nFor local proxying or protocol tests, override the Gemini API base URL:\n\n```dotenv\nGEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta\n```\n\nMost users should leave this unset and use the built-in default.\n\n### Command-line options\n\n```text\n--port <number>     Use another local port\n--host <address>    Use 127.0.0.1, localhost, or ::1\n--env-file <path>   Load a different environment file\n--no-open           Start without opening a browser\n--help              Show command help\n--version           Print the installed version\n```\n\nUse an explicit `@latest` version when you want npm to check for the newest\nrelease. Pin a version such as `@dyegovasc/flowglyph@0.1.0` for reproducible use.\n\n## Edit on the canvas\n\n- Double-click a node title or description, a group title, or an arrow to edit\n  its text. Click outside to save; press Escape to cancel. Enter also saves\n  titles and labels; use Ctrl/Command+Enter for multiline descriptions.\n- Choose **Rectangle** (`R`) and drag on empty canvas space to draw a node.\n- Choose **Arrow** (`A`) and drag from one node to another, or click the source\n  and then the destination. New arrows have no label; double-click to add one,\n  or clear an existing label to remove it. Press Escape to cancel drawing.\n- Click a node, arrow, or group to select it, then press Delete or Backspace to\n  remove it. Shift-click adds or removes items for a multi-selection. Deleting\n  a group removes only the container; the nodes inside it stay on the canvas.\n- Changes save to the selected local folder and support Undo and Redo. Manual\n  drawings keep their placement; **Auto-format** can arrange the whole diagram.\n- Drag an existing arrow to bend it. Focus the arrow and press Home to straighten it.\n\n## Privacy and network access\n\n- Diagram documents are read and written directly through the browser's File\n  System Access API. They are never uploaded to the FlowGlyph server.\n- AI editing sends the current diagram and instruction only to the selected AI\n  provider. Provider keys remain in the local server process.\n- Voice transcription runs in the browser and downloads its runtime and model\n  from jsDelivr and Hugging Face when first used.\n- The application server listens only on a loopback address.\n\n## Development\n\n```sh\nnpm install\nnpm run dev\n```\n\nRun the complete release verification:\n\n```sh\nnpm run verify\n```\n\nCreate and inspect the npm archive without publishing:\n\n```sh\nnpm pack --dry-run\n```\n\nPublishing the scoped public package requires an npm account with access to the\n`@dyegovasc` scope:\n\n```sh\nnpm login\nnpm publish --access public\n```\n","readmeFilename":"README.md"}