Skip to content
View xianjianlf2's full-sized avatar
🎯
Focusing
🎯
Focusing

Block or report xianjianlf2

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
xianjianlf2/README.md
Mark Xian — making AI useful through products, tools, and open source

Portfolio Inkling GitHub Open Source

About

I'm an AI product engineer in Guangdong, China, building agentic canvases, document intelligence, and developer tools. I work where product taste, interaction design, and engineering depth meet—reducing ambiguity and shipping the details that make a product hold together.

Make AI feel useful.

Current inquiry: how AI agents can work with visual canvases instead of only replying in chat.

Now building

Inkling · Agent-native visual thinking

Inkling is an AI mind-mapping canvas. Muse reads your PDFs and draws editable maps live—skeleton first, details grafting in—then sees the nodes you edit by hand and builds on those changes instead of regenerating the whole map.

React · Hono · Vercel AI SDK · AntV X6

Join the private beta →

Selected work

Self-hostable AI agent that turns PDFs into editable mind maps with visible tool calls and built-in RAG.

React Hono Vercel AI SDK

MindGeniusAI GitHub stars

Client-side, BYOK image playground for generation, editing, inpainting, and voice control.

Astro React BYOK

Repository ↗ · Live ↗

Turns OpenAPI, Swagger, Markdown, and HTML docs into MCP service definitions.

Python TypeScript MCP

Repository ↗

Earlier work: vue3-pdf-viewer / @xianjianlf2/vue-pdf-viewer, an archived PDF.js viewer for Vue 3.

Open-source activity

I work upstream in the active projects I use—especially agent runtimes, developer tools, and infrastructure. The visible rows surface current high-signal work; the expandable list keeps a representative activity trail. Browse the live list of open pull requests →

In flight

Project Current contribution
orca Avoid empty tabs for session metadata
Sequelize Keep USING out of COMMENT ON COLUMN when altering ENUM · Close connections after setup failures
Redux Toolkit Skip fetch when an infinite-query trigger uses skipToken
Mac-Duo Add opt-in external displays that follow the MacBook lid
filetype.py Use registered font media types
zerolog Write CEE syslog messages as a single record
More active upstream work
Project Current contribution
picomatch Treat unmatched double quotes as literal path characters
neoformat Find local Node formatters from the buffer directory
Flutter Replay predictive back state for retained engines
Sequelize Close connections after setup failures · Keep USING clause out of COMMENT ON COLUMN when altering ENUM
Anthropic SDK for TypeScript Prevent retries with streaming request bodies
Cherry Studio Align pi endpoint injection resolver
Agno Route HTML URLs through WebsiteReader · Make message content stringification trace-safe · Support Cosmos MongoDB search options · Normalize AgentOS model providers · Scope entity memory IDs by user
magicast Preserve tab indentation when modifying modules
stablyai/orca Report the current terminal surface · Expose SSH hosts running agent hooks · Label hosted reviews by provider · Mark node-pty master fds close-on-exec · Stop stale merged-PR flashes · Report terminal wait observed state · Open files in the default app · Expose task worktree provenance · Prune hydrated restored folder owners · Avoid empty tabs for session metadata · Move the relay CLI bin dir to the front of PATH · Load PR tree-selected sections · Report multiplex slot diagnostics · Render <br> in markdown table cells as line breaks
Firecrawl AnyDoc Expose slide boundary anchors for presentations · Support standalone HTML documents
cmux Fix optional-guarded custom-sidebar views · Document OAuth tokens for concurrent Claude Code sessions
Block Buzz Preserve agent profile fields when setting policy
AIRI Restore an off-screen desktop main window
n8n AI Agent Security Lab Add a broad AI HTTP tool fixture
context-mode Evict least-important events first
mathjs Round zeta BigNumber digit count
Joi Ignore internal references when ordering object keys
memfs Close the original descriptor after stream release · Align runtime dependencies with published entry points
Beanie Preserve custom document IDs in inspection errors
Vite Skip glob transforms when only the query string varies
MLflow Add GitHub Copilot SDK tracing integration
MCP TypeScript SDK Decode URI template match values
LangChain.js Support HITL respond decisions · Preserve audio in Responses input · Preserve Perplexity chat completion token usage
Anthropic SDK for Python Wrap mid-stream transport errors
Vercel AI SDK Add LangChain message-history hydration helpers
LiteLLM Include annotation page costs · Hold fallback lifecycle frames
Fastify JWT Honor per-request key overrides
MCP Seatbelt Add an upstream health endpoint
TanStack Router Preserve encoded slashes in splat params · Avoid repeated React Navigate rerenders · Respect wrapInSuspense in Solid Router
Maestro Reuse hierarchy on lookup failures
OpenSpec Address DSH review follow-ups
OpenMausBot Fix DSH retired Host turn fences
codeburn Guard DSH zstd support on older Node
superstruct Preserve input coercion when merging structs
browser-use Return errors for stale click and dropdown actions
Kimi Code Restore the VS Code todo-list card · Fix code-workspace path escape errors · Sanitize download filenames · Parse byte ranges strictly
Quilt Publish Windows x86_64 quilt-cli binaries
afero Honor access mode in MemMapFs.OpenFile permission checks · Check source existence before a no-op MemMapFs rename
Hono Preserve repeated form fields in method override · Preserve commas within quoted entity tags
Handlebars Retain helpers for precompiled partial runtimes
superjson Document binary data support
deep-eql Compare URLSearchParams by their query strings
TanStack Form Keep the reset(values) baseline on update · Clear stale linked-field validation errors · Create complete field meta for uninitialized fields
Drizzle ORM Fix relation-name collision with inherited keys · Preserve Unicode identifiers in casing helpers · Preserve custom codecs for aggregate functions
fast-check Allow sync beforeEach hooks for async properties
GoogleChrome/webstatus.dev Clarify browser availability in WPT cards
class-transformer Preserve readonly array overloads
sktime Replace sklearn grid search with native evaluate

Curated snapshot checked on 22 Sep 2026; the live GitHub query above is the source of truth.

Recently merged

Project Merged contribution
async Propagate async iterator errors from tryEach · Clear timeout before invoking the callback
pydash Support iterator inputs in intersection helpers
arktype Prevent crashes validating unions of object arrays · Fix recursive aliases with Record references
node-fs-extra Propagate emptyDir directory read errors
GitHub Spec Kit Warn when feature names have an empty suffix
perm-gate Add an optional live LLM baseline
type-fest Add UnionMax type
Heroic Games Launcher Keep library entries when GamesDB is unavailable
chroma.js Keep alpha when constructing from an object · Name rgb2hsv converter correctly · Reject non-numeric channels · Update automatic classes when the domain changes · Clarify Lab and Lch round trips
p-event Reject pending iterator reads when resolution filters fail
More merged work
Project Merged contribution
Chai Preserve literal template tags in assertion values
p-throttle Respect future weighted throttle reservations
p-timeout Handle input rejections when already aborted
p-debounce Preserve falsy promise rejection reasons
niuu Fix Prettier drift
claude-mem Fix transcript watcher durable offset commits
Unplug Align security claims with implementation
cc-switch Fix DeepSeek Harness review issues
Quilt Stop the status walk from waking the watcher that triggered it · Share S3 clients across cloned remote handles · Flush the log tail before Tauri exits · Infer namespace from the working directory · Default home directory on first use · Keep tracing logs off stdout by default · Add quilt log, listing copy revisions · Add reset command for local-only packages · Treat rejected credentials as dead sessions · Add --json output and non-zero failures · Run fork pull requests with credential-free CI
Okto Nexus Restore and document the live MCP smoke test
Anomalithic Preserve stream finish reasons
Qwen Code Report compression API failures distinctly · Scope startup warnings to development sessions
GitHub Copilot SDK Serialize concurrent Python and Node.js client startup · Isolate GitHub token callbacks from request routing · Support bracketed IPv6 runtime URLs
ARGUS Remove unreachable LLM modules · Grade and report the exact check run
streamcore-server Make the OpenAI transcription model configurable
reticle Harden MCP proxy POST transport against socket exhaustion
sysknife Keep provider keys out of VM process arguments
ship-safe Detect unpinned AI actions
OpenAgent Eval Add offline testing workflow · Add a zero-key quickstart
py-harness Clarify cross-platform first run
EvalRepro Add Windows development setup commands
Agent of Empires Preserve UTF-8 names when stopping sessions
homelab-monitor Centralize Python dependency management
NimbleBrain Extend LLM latency histogram tail · Keep the worktree seed schema-valid
hflow Constrain hand-count evaluation schema · Make judgment outcomes exclusive
localvectordb Reject MCP database lifecycle no-ops
molecare-skin-llm Make local checkout paths portable
Context Passport Python Validate passport event types against the v2 schema
Context Passport TypeScript Validate passport event types against the v2 schema
agent-me Sync localized document metadata
kareya Add an OpenAI-compatible content provider
stablyai/orca Post POSIX agent-hook payloads as JSON
llmtrim Fix explicit DSH shim path resolution
parsar Bump Go patch version for govulncheck
PapaParse Apply transformHeader only once per header
DingTalk Workspace CLI Align DSH skill root handling
Fastify HTTP Proxy Scope WebSocket upgrades to the proxy prefix
Karabiner-Elements Add default mouse modification setting · Add ctrl-click to command-click example · Add notification window position setting · Add duration to notification messages
AIRI Fix DeepSeek provider instance settings · Add DeepSeek thinking mode toggle
Effect Preserve JSON.rawJSON in cached OpenAPI specs · Return fresh cached specs from OpenAPI · Stringify bigint values in JSON diagnostics
VidBee Keep external download path in portable mode
Calico Expose server write timeout configuration · Re-advertise service external IPs from route reflectors

| Firewood | Escape JSON strings in fwdctl dumps | | stablyai/orca | Open symlink files when stat fails | | Dashi Taskboard | Improve dark-mode select contrast | | faker | Exclude reserved port 0 from internet.port() | | Quilt | Give quilt list a table of bucket, namespace, and status | | MLflow | Hide redundant metric names in chart cards | | Beanie | Preserve awaitable types for find-one upsert | | Mastra | Abort A2A streams when tasks are canceled · Retry empty working-memory extraction | | Qwen Code | Fail closed on zero-inode file-cache entries | | pnpm | Apply the publishedBy cutoff to the held-back update baseline | | Luxon | Respect endpoint zones in hasSame for empty intervals | | Calico | Sanitize chart-version labels | | Kaneo | Avoid per-task kanban metadata requests | | GitHub Copilot SDK | Clarify working-directory defaults across SDKs | | memfs | Resolve relative streams from virtual cwd · Match Node directory iteration lifecycle · Finish BYOB file stream reads at EOF · Embed sources in published sourcemaps · Remove tslib from peer dependencies | | stablyai/orca | Faster startup through overlapping sidebar and worktree loading · Correct CJK IME behavior when renaming commits | | FlowiseAI/Flowise | Improved the Add Nodes interaction | | apitable/apitable | Improved Simplified Chinese localization | | Navideck/universal_ble | Fixed Dart primary-constructor compatibility | | crxjs/chrome-extension-tools | Added Vue use-case documentation | | luckysmg/flutter_swipe_action_cell | Added the hasAnyOpenCell query API · Fixed clipped elevation shadows | | fastclaw-ai/weclaw | Detected agents installed through nvm and mise | | cuixueshe/dida | 5 merged PRs across draggable navigation, project CRUD, and bug fixes |

Learning in public

I rebuild familiar tools—and now agent runtimes—from scratch to understand the decisions beneath their APIs. Each project develops one system incrementally, commit by commit.

super-agent · Tool-using agents, chapter by chapter

A branch-by-branch study of streaming, tool calling, MCP clients, deferred tool loading, session persistence, and context compaction.

TypeScript · Vercel AI SDK v6 · Qwen · MCP

Explore the 6-project mini-* source-code series
Project Systems explored
mini-vue Reactivity, virtual DOM diffing, template compilation, lifecycle hooks
mini-koa Middleware composition, onion model, context, router layering
mini-react Fiber, reconciliation, useState, useEffect
mini-webpack Module bundling, dependency graphs, loaders, plugins
mini-compiler Tokenization, parsing, AST traversal, code generation
ts-axios Interceptors, config merging, data transforms, cancellation, and other HTTP-client internals

Toolbox

TypeScript React Vue.js Astro Hono Node.js Python Flutter Model Context Protocol Cloudflare


Have an interesting product idea or open-source problem?
See what I've shipped · GitHub activity · Juejin · Say hello

Pinned Loading

  1. MindGeniusAI MindGeniusAI Public

    An AI agent that reads your PDFs and draws editable mind maps — visible tool-calling loop, built-in RAG, bring-your-own-key, multi-provider (OpenAI / Claude / DeepSeek / Kimi). Self-hostable.

    TypeScript 281 60

  2. mini-vue mini-vue Public

    手写 Vue3 最小实现:响应式 / runtime(diff) / 模板编译器(mini-* 源码学习系列)

    TypeScript 67

  3. mini-webpack mini-webpack Public

    手写 webpack 最小实现:依赖图 / loader / plugin(mini-* 源码学习系列,按 Git 提交历史一步步搭建)

    JavaScript 1

  4. mini-compiler mini-compiler Public

    手写 the-super-tiny-compiler:词法 / 语法 / 转换 / 代码生成(mini-* 源码学习系列,按 Git 提交历史一步步搭建)

    TypeScript 2