Graphify ä¿åºæŒ 16ms 極ééæ AST æåãPetgraph ææ²åèè .toon Token å£çž®æ ŒåŒå»ºæ§ä¹ç¡¬æ žä»£ç¢ŒåèåŒæãæ¬èŠåæžæšåšå®çŸ© Graphify Plugin / Module System ä¹åŸ®æ žå¿æ¶æ§ïŒå°æ£äºç AI Agent èŒå©å·¥å ·ïŒåŠ Code ReviewãCode Relay HandoffãOpenDocuments 倿 ŒåŒåéæª¢çŽ¢ïŒæ¶ææŒçµ±äžçæ ã
æ¬æ¶æ§æ¡çšãç¥ç¶ç¬Šèéæš¡ç³»çµ± (Neuro-Symbolic System)ãèšèšç念ïŒ
- Graphify Core (Symbolic)ïŒè² 責 100% 粟æºç笊èçµæ§æš¹ãåŒå«éèè¡æååŸåæïŒGround TruthïŒã
- OpenDocuments (Neural)ïŒè² è²¬å€æ ŒåŒææªïŒ.xlsx, .pdf, .docx çïŒä¹åéèªæç©ºéïŒVector Semantic SpaceïŒã
- Workspace UUIDïŒäœçºè·šæš¡çµãè·šåŒæç硬æ§å°éœå€éµïŒForeign KeyïŒïŒå¯ŠçŸé¶èŠåãé«éé¢ç MCP-to-MCP ååå·¥äœæµã
æ¡çšåŸ®æ žå¿ïŒMicro-kernelïŒè MCP Protocol éå±€è§£èŠæ¶æ§ãGraphify Rust Core ä¿ææ¥µèŒéèæ¥µéïŒææé²éåèœå以 Plugin / MCP Module 圢åŒå€æã
âââââââââââââââââââââââââââââââââââââââââââââââââ
â Graphify TUI & CLI â
âââââââââââââââââââââââââ¬ââââââââââââââââââââââââ
â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Graphify Core Engine (Rust Micro-kernel) â
â - 16ms AST Multi-Language Extractor (Rust, Python, Go, JS, C, PHP.) â
â - Petgraph Topology Engine (BFS/DFS Shortest Path, Call Graph) â
â - Ultra-compact `.toon` Serializer (-60%+ Token Savings) â
â - Workspace Identity Manager (`workspace_key` Generator & Indexer) â
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â
âââââââââââââââââââââââââââââââââââŒââââââââââââââââââââââââââââââââââ
â (MCP Protocol) â (MCP Protocol) â (MCP Protocol)
⌠⌠âŒ
ââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââ
â `graphify-plugin-review` â â `graphify-plugin-handoff` â â `graphify-plugin-opendoc` â
â (Blast Radius Code Review) â â (Context-Preserved Handoff) â â (Multi-Doc Vector Sync) â
ââââââââââââââââââââââââââââââââ ââââââââââââââââââââââââââââââââ ââââââââââââââââ¬ââââââââââââââââ
â (MCP Call)
âŒ
ââââââââââââââââââââââââââââââââ
â OpenDocuments MCP â
â (Vector DB + File Parsers)â
â [.xlsx,.pdf,.docx,.md] â
ââââââââââââââââââââââââââââââââ
çºé²æ¢å€å°æ¡è Monorepo ç°å¢äžçåéåªèšè誀å€ïŒGraphify Core åšåå§åæçæå®åä¹ workspace_keyïŒäžŠæŒ Graph Metadata è Plugin API éèšäžåŒ·å¶åž¶å
¥ã
// Common Identity Schema
interface WorkspaceContext {
workspace_key: string; // e.g., "w-9f8a2b1c-8e7d-4c3b"
workspace_name: string; // e.g., "graphify-monorepo"
root_path: string; // e.g., "/Users/dev/projects/graphify"
timestamp: number;
}å·²æŒ graphify-core èœå°ïŒplugin.rsïŒOpenSpec change plugin-trait-v1ïŒãå
§åµåæä»¶ crateïŒåŠ graphify-plugin-handoffïŒå¯Šäœæ€ trait åŸç±æ žå¿é©
åïŒ
pub trait GraphifyPlugin {
fn get_id(&self) -> &str;
fn bind(&mut self, ctx: WorkspaceContext);
fn get_workspace_key(&self) -> &str;
fn sync_toon(&mut self, opt_toon: Option<Vec<u8>>) -> Vec<u8>;
}èªæïŒ
get_idâ æä»¶å¯äžèå¥ç¢ŒïŒåŠ"graphify-plugin-handoff"ïŒãbindâ ç¶å®å·¥äœåäžäžæïŒç¶å®åŸget_workspace_keyå¿ é åå³èctx.workspace_keyçžååŒãget_workspace_keyâ è·¯ç±éå¥å€éµïŒæª bind æåå³ç©ºåäž²ãsync_toonâSome(payload)çºè¢«ååæ¥ïŒæ¶è²»å€éš .toonïŒïŒNoneçºäž»å忥ïŒä»¥ç¶å®äžäžæèªç¢èŒžåºïŒïŒåå³èçåŸVec<u8>ïŒäžåŸ panicã
å¥çŽé¶äŸè³ŽïŒå
std + serdeïŒäžåŒå
¥ä»»äœ LLM/HTTP/MCP åå¥ïŒç¶æ graphify-core 忥çŽç²¹æ§ãreference 寊äœèŠ graphify-core/src/plugin.rs 枬詊ã
sync_toon 亀æçæ¯ .toon æä»¶æ¬é«ïŒéèªèš envelopeïŒïŒpayload å³ .toon åºååïŒçæ¬æ¿èŒæŒ metadata ç format_version éµã
- MUST metadataïŒ
format_versionïŒå°å å¥çŽçæ¬ïŒv1 ="1.0.0"ïŒãworkspace_keyïŒè·¯ç±éµïŒã - Optional æ¿èŒïŒ
symbol_nodesãgraph_topologyïŒå°éœäžæ¹ §3.3 Standard Plugin Communication Protocol çå°æèŠåïŒååšèåŠäžåŸåœ±é¿å°å æææ§ã - çæ¬æ¿çïŒsemverïŒïŒMAJOR äžç¬Š â è§£æç«¯å¯ïŒMAYïŒæçµïŒMINOR äžç¬Š â å¯ïŒMAYïŒå¿œç¥æªç¥æ¬äœïŒPATCH â å¿ é ïŒMUSTïŒçžå®¹ã
- é¯èª€è¡šéïŒç¡æ³ç¢åºææèŒžåºæïŒåå³å«
errormetadata ç .toonïŒåäž²æè¿°ïŒïŒäžåŸ panicãäžåŸæ¹ç°œåã
宿ŽèŠæ ŒïŒopenspec/changes/plugin-sync-toon-v1/specs/sync-toon-packet/spec.mdã
Plugin ä¹éæå°å€æé²çµŠ AI Agent ç MCP å·¥å ·å¿ é 笊å以äžééé¿ææ ŒåŒïŒ
{
"workspace_key": "w-9f8a2b1c-8e7d-4c3b",
"symbol_nodes": [
{
"id": "graphify-core/src/lib.rs:module",
"kind": "module",
"filepath": "graphify-core/src/lib.rs"
}
],
"graph_topology": "import:pub use types::{Node, Edge} -> import:pub use extract::extract_file",
"toon_payload": "compressed_toon_binary_or_text"
}ç¬¬äžæ¹ plugin 以çšç« MCP server åé²çšåœ¢åŒååšïŒç± graphify-mcp ææäžŠèåã
- ææäŸæºïŒ
~/.config/graphify/config.tomlç[plugins.<id>]段ïŒcommandå¿ å¡«ãargs/env/cwdéžçšïŒãçŒºæªæç¡è©²æ®µæçºç©ºå®¹åšïŒäžé»æ server ååïŒæ ééé¢ïŒã - é²çšæš¡åïŒååæ spawnïŒJSON-RPC 2.0 over stdioïŒ
Content-LengthframingïŒinitializeæ¡æå€±ææéŸæç plugin æšèšçºFailedïŒäžåœ±é¿å ¶ä» pluginïŒå®äž plugin 倱æéé¢ïŒã - å·¥å
·åœåïŒèåå·¥å
·ä»¥
graphify_plugin_<plugin_id>_<tool_name>äžæ®µåç¶Žé¿å åœåè¡çªïŒtools/calläŸæ€åç¶Žè·¯ç±åå°æåé²çšã - åæŽæ°éç¥ïŒ
graph_reindexå·¥å ·æå宿åŸïŒåææReadyplugin åé²çšå»£ænotifications/graph_updatedïŒJSON-RPC notificationïŒç¡åæé æïŒã - æ¢æå·¥å
·äžè®ïŒå
§å»º
graphify_*å·¥å ·ç¶æåè¡çºïŒplugin èåå çºå¢éã
Plugin çé·æèšæ¶åäžå±€ïŒworkspace_key çºè·šå±€è·¯ç±éµïŒèŠ docs/architecture-memory-plugin.mdïŒïŒ
-
Layer 1 æ žå¿èšæ¶ïŒgraphify-llm + QdrantïŒïŒç± indexing pipeline çšäœå¯«å ¥ïŒplugin åªèœééåéæ¥è©¢ APIïŒ
MemorySearcherãgraphify_memory_queryå·¥å ·ïŒè®åïŒç¡æ³å¯«å ¥æååŸå²åå §éšåå¥ïŒpoint IDãcollection åãcredentialsïŒã -
Layer 2 Plugin Domain MemoryïŒæ¯å plugin äžåçšç« namespaceïŒ
graphify_plugin_<plugin_id>ïŒïŒèšéä»¥çæ¬å envelope å²åïŒPluginMemoryEnvelope<T> { format_version, workspace_key, plugin_id, record_id, record_kind, created_at, source_refs, payload: T }系統åŸ
plugin_idè¡ç寊é«å皱䞊é©èïŒplugin äžåŸæäŸåå§ collection åçš±æ credentialsïŒgraphify-memory::plugin_memory::plugin_collection_nameïŒãHandoffSnapshotçšå¯éå»ºçæ¥è©¢æ¢ä»¶ïŒworkspace_key + node IDs + source pathsïŒå代 Qdrant point IDã -
Layer 3 å€éšç¥èïŒOpenDoc / GitHub / Linear ç adapterïŒïŒéæ¬æ¶æ§æ žå¿ïŒç±å adapter 管çã
äžå¯å¯«æ žå¿èšæ¶ïŒplugin-domain å¯«å ¥åªå èš±é² Layer 2 çèªèº« namespaceïŒæ žå¿èšæ¶åæ¥æ°žé ç± indexing pipeline ææïŒäžäŸè³Žä»»äœ plugin èŒå ¥ææ¶å° graph-update äºä»¶ã
è·š workspace çèš»åè忥çæ
ç± graphify-registry crate 以å®äž SQLite è³æåº«éäžç®¡çïŒè·¯åŸè§£æèŠ docs/core.mdïŒGRAPHIFY_REGISTRY_PATH / XDG_DATA_HOME overrideïŒïŒ
workspacesâ workspace èš»åïŒworkspace_keyãroot_pathãis_activeãlast_indexed_atïŒãCLI æäŸgraphify workspace list/switch/statusïŒTUI Stage 1 䜿çšïŒãplugin_registrationsâ plugin â workspace â Qdrant collection æ å°èlast_synced_atïŒäžéµ rehydration çæéæ³äŸæºïŒãstatusïŒReady/Unavailableå ©æ ïŒãhandoff_registryâHandoffSnapshotå šå玢åŒïŒexpires_at = created_at + 7 倩ïŒTTLïŒïŒæ¯ workspace äžé 20 çïŒFIFO pruningïŒïŒå¯«å ¥æå®äž transaction 宿ã
忥çºè¢«ååŒïŒç¡åžžé§ daemonïŒ#3097ïŒïŒç± graphify-registry::resync::check_and_resync åšè§žçŒé»ïŒCLI / TUIïŒä»¥ 10ms ping æª¢æ¥ provider å¯çšæ§ïŒäžå¯çšå³å Unavailableãäžéµ rehydrationïŒ1.3.1ïŒïŒcreated_at > last_synced_at ç envelope 以 record_id idempotent upsert åå€éšäŒºæåšåŸæŽæ° last_synced_atã
å®äœïŒææ²æç¥ä»£ç¢Œå¯©æ¥ïŒTopology-Aware Code ReviewïŒã
åé¡ïŒå³çµ± git diff å èœé²è¡å®æªæè¡çŽå¥èªæ³æª¢æ¥ïŒç¡æ³æç¥è·šæš¡çµ Breaking Changesã
è§£æ±ºæ¹æ¡ïŒ
- æ·å git diff ä¿®æ¹ä¹æªæ¡è Symbol æž å®ã
- åŒå« Graphify Core å·è¡ BFS Blast Radius TraceïŒççžååŸåæïŒïŒèšç®åäžèåäžå圱é¿ä¹ææ 1~N éåŒå«éã
- å°ãè®æŽé»ãèãååœ±é¿ææ²åå (.toon)ã逵絊 AI Reviewer é²è¡å šæ¯å¯©æ¥ã
[ Git Diff ] ââ> Extract Modified Symbols ââ> Graphify BFS Trace ââ> Generate Blast Radius Sub-graph (.toon)
â
âŒ
AI Code Reviewer Prompt
å®äœïŒçµæ§åä»»å亀æ¥ïŒContext-Preserved HandoffïŒã
åé¡ïŒéçŒè æ Agent äº€æ¥æå çäžäžæ®µèªç¶èªèš PromptïŒé ææ¥æè äžäžæçŒºå€±æééæ°ææå šæ¡ã
è§£æ±ºæ¹æ¡ïŒ
- èªåè¿œè¹€æ¬æ¬¡éçŒ Session äžè¢«è®åãä¿®æ¹ææ°å¢çééµ AST NodesïŒActive NodesïŒã
- æå以æ€çŸ€ Nodes çºäžå¿ä¹æ žå¿ Sub-graph (åå)ïŒåºååçºæ¥µèŒéä¹ .toon æ ŒåŒã
- å°äº€æ¥çŽéè .toon ææ²åå
¥
.opencode/handoff.toonïŒäžäœ Agent èŒå ¥å³å¯ 1 ç§è®åå šæ¯çµæ§ã
å®äœïŒç°æ§ææªè代碌暹ä¹è·šå檢玢ïŒHybrid Neuro-Symbolic SearchïŒã
åé¡ïŒäŒæ¥å°æ¡å å«å€§é .xlsx (詊ç®è¡š)ã.pdf (èŠæ Œæž)ã.docx (éæ±å®)ïŒç¡å€©ç¶ AST çµæ§ã
è§£æ±ºæ¹æ¡ïŒ
- OpenDocuments MCP å°æ³šèçéçµæ§åææªè§£æãChunking è EmbeddingïŒäžŠæŒ Vector DB 匷å¶å äž
workspace_keyæšç±€ã - Graphify OpenDoc Plugin äœçºæ©æšïŒå OpenDocuments çŒèµ·åž¶æ
workspace_keyçèªææª¢çŽ¢ã - åŸ OpenDocuments 檢玢åå³ä¹ææªçæ®µäžæå
linked_symbolïŒåç± Graphify çŒå° 16ms éæ TraceïŒç²Ÿæºè£éœä»£ç¢Œå¯Šäœéã
ç¶äœ¿çšè æåºè€ééæ±ïŒãæ ¹æç¢åèŠæ Œæž (Excel) 裡ç Token ææ¬èšç®å ¬åŒïŒæª¢æ¥ç®å Rust å¯Šäœæ¯åŠæéæ§é¢šéªäžŠé²è¡äº€æ¥ãã
[ User / AI Agent Request ]
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 1. Call `graphify-plugin-opendoc` â
â - Pass: query = "Token ææ¬èšç®å
¬åŒ" â
â - Pass: workspace_key = "w-9f8a2b1c" â
ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 2. OpenDocuments Vector MCP â
â - Filter: workspace_key == "w-9f8a2b1c" â
â - Search: financial_plan.xlsx (Sheet1, Row 12) â
â - Return: Concept matched, Symbol: "MemoryConfig" â
ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 3. Call `graphify-plugin-review` â
â - Source Symbol: "MemoryConfig" â
â - Execute: Graphify Core 16ms BFS Impact Trace â
â - Output: Impact chain (.toon) -> 12 calling nodes â
ââââââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââ
â
âŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â 4. Call `graphify-plugin-handoff` â
â - Export: Package active symbols + OpenDoc context â
â - Save: .opencode/handoff.toon for next Agent â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
| éæ®µ | æçš (é±) | æ žå¿ deliverable |
|---|---|---|
| Phase 1: Core Interface | Week 1 - 2 | æŒ Graphify Core å¯Šäœ workspace_key ç¢çåšïŒäžŠå®çŸ© GraphifyPlugin Rust/MCP Traitã |
| Phase 2: Review & Handoff | Week 3 - 4 | éçŒ graphify-plugin-review è graphify-plugin-handoffïŒæ¯æŽ .toon ååå°åºã |
| Phase 3: OpenDoc Bridge | Week 5 - 6 | å»ºç« OpenDocuments MCP åå®å°æ¥ïŒå¯ŠçŸä»¥ workspace_key çºåºç€ä¹å€æ ŒåŒ (.xlsx, .pdf) åéæª¢çŽ¢æ©æšã |
| Phase 4: TUI Integration | Week 7 - 8 | æŒ Ratatui TUI äž»ä»é¢æŽå Plugin çæ æª¢èŠãBFS Modal è Handoff å¿«ç §ééã |
æ¬èŠåæžç¢ºç«äºä»¥ Graphify Core çºç²Ÿæºçµæ§åºç³ãOpenDocuments çºèªæåéæŽå
çè§£èŠæ¶æ§ãéé workspace_key ç硬æ§éé¢è MCP åå®äž²è¯ïŒGraphify äžååªæ¯äžå宿© CLI/TUI å·¥å
·ïŒèæ¯æçºæ¯æŽå
šçåœåšæ Agentic WorkflowïŒæª¢çŽ¢ã審æ¥ã亀æ¥ãèŠæ Œåæ¥ïŒçæ žå¿åºç€èšæœïŒAI InfrastructureïŒã