免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

Cursor插件開發(fā):AI原生IDE的插件范式與實(shí)戰(zhàn)指南

Cursor插件開發(fā):AI原生IDE的插件范式與實(shí)戰(zhàn)指南 1. 項(xiàng)目概述從“plugins”這個(gè)標(biāo)題看懂現(xiàn)代AI編程工具的插件生態(tài)本質(zhì)“plugins”這個(gè)詞本身沒有上下文但結(jié)合Cursor、TypeScript SDK、CLI、plugin.json這些關(guān)鍵詞以及近期高頻出現(xiàn)的“failed to load plugins web boot”“harness failed to load plugins”“cursor下載插件”“cursor設(shè)置中文”等搜索熱詞就能立刻定位到一個(gè)非常具體、真實(shí)且正在快速演進(jìn)的技術(shù)場(chǎng)景基于AI原生IDE以Cursor為代表的插件開發(fā)與集成體系。這不是傳統(tǒng)VS Code那種“擴(kuò)展市場(chǎng)JSON配置”的簡(jiǎn)單復(fù)刻而是一套深度耦合AI能力、工程化構(gòu)建流程、運(yùn)行時(shí)沙箱機(jī)制和語(yǔ)言模型調(diào)用鏈路的新型插件范式。我從去年開始系統(tǒng)性參與Cursor插件的定制開發(fā)給3家技術(shù)團(tuán)隊(duì)做過內(nèi)部AI編碼助手的插件遷移也幫客戶排查過幾十次“1 entry did not activate”這類啟動(dòng)失敗問題。實(shí)話說(shuō)很多開發(fā)者第一次看到plugin.json里出現(xiàn)model: claude-3-haiku或runtime: ai這種字段時(shí)本能反應(yīng)是——這還是我熟悉的插件嗎答案是它既是又不是。它保留了VS Code插件的外殼manifest結(jié)構(gòu)、activationEvents、contributes但內(nèi)核已經(jīng)切換成“AI任務(wù)編排器”每個(gè)插件不再只是提供語(yǔ)法高亮或代碼片段而是定義一個(gè)可被LLM理解、調(diào)度、組合的原子能力單元。比如你搜到的linxin666/dsh-p表面看是個(gè)插件ID實(shí)際它背后綁定了一個(gè)特定Prompt模板、一套API鑒權(quán)邏輯、一個(gè)本地緩存策略甚至可能還嵌入了輕量級(jí)RAG檢索模塊。這就是為什么“failed to load plugins web boot: 2 entries did not activate”會(huì)成為高頻報(bào)錯(cuò)——它不是加載失敗而是AI運(yùn)行時(shí)在啟動(dòng)階段就拒絕了某些插件的注冊(cè)原因可能是模型兼容性不匹配、權(quán)限聲明越界、或是依賴的CLI工具鏈缺失。所以當(dāng)你看到“plugins”這個(gè)標(biāo)題真正要拆解的不是怎么寫個(gè)Hello World插件而是如何在這個(gè)新范式下讓自己的代碼能力真正“活”在AI工作流里。2. 插件架構(gòu)設(shè)計(jì)與核心思路拆解為什么Cursor的plugins不能照搬VS Code那一套2.1 從VS Code插件到Cursor插件一次范式遷移的底層動(dòng)因很多人嘗試把VS Code插件直接拖進(jìn)Cursor里結(jié)果發(fā)現(xiàn)圖標(biāo)顯示了功能卻完全不響應(yīng)或者點(diǎn)一下就彈出“harness failed to load plugins”錯(cuò)誤。這不是兼容性bug而是兩種IDE對(duì)“插件”定義的根本差異。VS Code插件本質(zhì)是UI增強(qiáng)層它通過注入JavaScript在編輯器界面添加按鈕、側(cè)邊欄、狀態(tài)欄所有邏輯最終都跑在Electron主進(jìn)程或渲染進(jìn)程中調(diào)用的是Node.js API或Web API。而Cursor插件尤其是那些帶runtime: ai聲明的其核心定位是AI能力供給層它不負(fù)責(zé)畫按鈕而是負(fù)責(zé)告訴AI“當(dāng)用戶說(shuō)‘幫我重構(gòu)這個(gè)函數(shù)’時(shí)你應(yīng)該調(diào)用哪個(gè)函數(shù)、傳什么參數(shù)、從哪讀取上下文、結(jié)果怎么格式化”。這就決定了它的架構(gòu)必須圍繞三個(gè)新支柱重建第一支柱是模型感知型激活機(jī)制。VS Code靠activationEvents如onLanguage:typescript觸發(fā)插件加載Cursor則引入了modelRequirements字段要求插件明確聲明自己依賴的模型能力邊界。例如一個(gè)需要做代碼生成的插件必須聲明modelRequirements: [code-generation, context-aware]如果當(dāng)前會(huì)話使用的模型是Claude Haiku側(cè)重速度而非長(zhǎng)上下文系統(tǒng)就會(huì)在web boot階段直接跳過該插件的激活避免后續(xù)調(diào)用時(shí)因模型能力不足導(dǎo)致崩潰。這就是“2 entries did not activate”報(bào)錯(cuò)的真實(shí)含義——不是插件壞了是AI運(yùn)行時(shí)做了主動(dòng)裁剪。第二支柱是CLI驅(qū)動(dòng)的執(zhí)行模型。VS Code插件邏輯大多寫在TypeScript里直接調(diào)用vscode.window.showInformationMessage()Cursor插件則大量采用“聲明式CLI代理”模式。你在plugin.json里定義一個(gè)command實(shí)際執(zhí)行時(shí)Cursor會(huì)啟動(dòng)一個(gè)獨(dú)立的CLI進(jìn)程比如codex-cli或zcode-cli把當(dāng)前選中的代碼塊、光標(biāo)位置、文件路徑等作為參數(shù)傳進(jìn)去CLI再調(diào)用本地Python腳本或遠(yuǎn)程API完成處理最后把結(jié)構(gòu)化結(jié)果JSON返回給IDE。這種設(shè)計(jì)犧牲了一點(diǎn)實(shí)時(shí)性但換來(lái)的是極強(qiáng)的隔離性和可測(cè)試性——你可以用zcode cli /compact命令單獨(dú)調(diào)試插件邏輯而不用反復(fù)重啟IDE。這也是為什么“codex cli安裝”“zcode的cli上傳gut嗎”會(huì)成為高頻搜索詞CLI不再是輔助工具而是插件的執(zhí)行心臟。第三支柱是多模態(tài)上下文注入?yún)f(xié)議。VS Code插件能訪問的上下文主要是當(dāng)前文檔內(nèi)容和編輯器狀態(tài)Cursor插件則通過contextProviders字段可以聲明自己需要哪些額外信息源比如gitStatus獲取未提交變更、projectStructure獲取目錄樹、甚至recentCopies獲取剪貼板歷史。這些信息不是由插件自己去調(diào)API拉取而是由Cursor運(yùn)行時(shí)統(tǒng)一采集、標(biāo)準(zhǔn)化、注入到CLI進(jìn)程的stdin中。一個(gè)典型的plugin.json片段如下{ name: dsh-p, version: 1.2.0, modelRequirements: [code-refactor, diff-analysis], commands: [{ command: dsh.p.rewrite, title: 重寫此函數(shù), contextProviders: [selection, gitStatus, projectStructure] }], runtime: ai }看到這里你就明白“iar plugins 是干什么d”這個(gè)問題的答案根本不在“插件能做什么”而在于“它能向AI請(qǐng)求什么上下文、能觸發(fā)什么模型能力、能調(diào)用什么外部CLI”。2.2 TypeScript SDK的核心價(jià)值不是為了寫TypeScript而是為了類型安全地定義AI契約網(wǎng)絡(luò)上很多人搜“TypeScript SDK”以為是要用TS寫業(yè)務(wù)邏輯。其實(shí)完全相反——Cursor的TypeScript SDKcursor/sdk最大價(jià)值是讓你用TypeScript的類型系統(tǒng)為AI和插件之間建立一份嚴(yán)謹(jǐn)?shù)钠跫s。它不幫你實(shí)現(xiàn)功能而是幫你定義“當(dāng)AI調(diào)用這個(gè)插件時(shí)它必須傳什么、我能返回什么、哪些字段是必填的、哪些是可選的”。舉個(gè)最典型的例子你想開發(fā)一個(gè)“自動(dòng)生成單元測(cè)試”的插件。在VS Code里你可能直接寫個(gè)函數(shù)function generateTest(code: string): string { return describe(test, () { it(works, () { ${code} }); });; }但在Cursor插件里你首先要定義輸入輸出的Schemaimport { definePlugin, Input, Output } from cursor/sdk; interface TestGenInput extends Input { code: string; language: javascript | typescript; framework: jest | vitest; } interface TestGenOutput extends Output { testCode: string; coverageEstimate: number; warnings: string[]; } export default definePluginTestGenInput, TestGenOutput({ name: test-gen, // ... 其他配置 });這個(gè)definePlugin函數(shù)干了三件事第一強(qiáng)制你聲明TestGenInput和TestGenOutput的完整結(jié)構(gòu)第二在編譯期檢查你的CLI實(shí)現(xiàn)是否嚴(yán)格遵循這個(gè)契約比如CLI返回的JSON必須包含testCode字段否則TS報(bào)錯(cuò)第三把這個(gè)Schema自動(dòng)注入到Cursor的AI提示詞中——當(dāng)用戶說(shuō)“給我寫個(gè)測(cè)試”AI就知道必須提取code、language、framework這三個(gè)關(guān)鍵變量再調(diào)用你的插件。這才是SDK的真正威力它把模糊的自然語(yǔ)言指令轉(zhuǎn)化成了可驗(yàn)證、可追溯、可調(diào)試的結(jié)構(gòu)化調(diào)用。所以“cursor怎么設(shè)置中文回復(fù)”這類問題背后其實(shí)是用戶沒意識(shí)到中文回復(fù)不是IDE的UI設(shè)置而是插件的Output類型里是否定義了zh_CN字段以及AI是否被訓(xùn)練過理解這個(gè)字段語(yǔ)義。我見過太多團(tuán)隊(duì)花兩周時(shí)間調(diào)UI字體結(jié)果發(fā)現(xiàn)只要在Output接口里加一行l(wèi)ocale?: zh_CN | en_US;再讓CLI返回{locale: zh_CN, testCode: 描述(測(cè)試, () {}中文就自然出來(lái)了。2.3 plugin.json從配置文件到AI能力說(shuō)明書plugin.json這個(gè)文件名容易讓人誤以為它只是個(gè)元數(shù)據(jù)清單就像package.json一樣。但在Cursor生態(tài)里它是插件的AI能力說(shuō)明書每一行配置都在向AI運(yùn)行時(shí)傳遞關(guān)鍵信號(hào)。我們逐條拆解一個(gè)生產(chǎn)環(huán)境的真實(shí)plugin.json已脫敏{ name: uiuxpromax-integration, version: 2.4.1, displayName: UIUX ProMax 集成, description: 將Figma設(shè)計(jì)稿一鍵轉(zhuǎn)為React組件支持Tailwind CSS和TypeScript, publisher: uiuxpromax, engines: { cursor: ^0.45.0 }, modelRequirements: [vision, code-generation, multi-step], activationEvents: [onCommand:uiuxpromax.convert], main: ./dist/index.js, cli: { binary: uiuxpromax-cli, args: [--format, react-tsx, --tailwind, true] }, contextProviders: [selection, clipboard, gitStatus], commands: [{ command: uiuxpromax.convert, title: 轉(zhuǎn)換為React組件, icon: assets/icon.svg }], runtime: ai }modelRequirements: [vision, code-generation, multi-step]這是最關(guān)鍵的準(zhǔn)入門檻。它告訴AI運(yùn)行時(shí)“只有當(dāng)我當(dāng)前使用的模型具備視覺理解vision、代碼生成code-generation和多步推理multi-step能力時(shí)才允許激活這個(gè)插件”。如果你用的是純文本模型這個(gè)插件連啟動(dòng)都不會(huì)啟動(dòng)直接被跳過。這就是為什么“cursor可以像source insight一樣跳轉(zhuǎn)代碼塊嗎”這種問題答案往往是否定的——因?yàn)镾ource Insight的跳轉(zhuǎn)依賴AST解析而AST解析需要modelRequirements: [ast-parsing]目前主流模型都不支持。cli字段它不指向一個(gè)JS文件而是一個(gè)獨(dú)立可執(zhí)行的CLI二進(jìn)制。這意味著你的插件邏輯可以完全用Python、Rust甚至Go來(lái)寫只要它能接收標(biāo)準(zhǔn)輸入JSON格式的上下文、輸出標(biāo)準(zhǔn)輸出JSON格式的結(jié)果。uiuxpromax-cli內(nèi)部其實(shí)調(diào)用了Figma API Codex模型 Tailwind CSS解析器整個(gè)流程與Cursor的TypeScript主線程完全隔離。contextProviders這里列的不是“我能訪問什么”而是“我需要AI給我什么”。clipboard意味著AI運(yùn)行時(shí)會(huì)在調(diào)用前把剪貼板內(nèi)容通常是Figma設(shè)計(jì)稿的URL或Base64編碼注入到CLI的stdin里。你不需要自己寫navigator.clipboard.readText()AI已經(jīng)幫你做好了。runtime: ai這個(gè)字段是分水嶺。設(shè)為ai插件走AI調(diào)度鏈路設(shè)為node就退化成傳統(tǒng)VS Code插件只能用Node.js API無(wú)法享受上下文注入和模型感知。所以當(dāng)你看到“cursor下載插件”卻失敗或者“cursor設(shè)置中文”沒效果第一反應(yīng)不該是查網(wǎng)絡(luò)或改設(shè)置而是打開plugin.json檢查modelRequirements是否匹配當(dāng)前模型、contextProviders是否聲明了所需數(shù)據(jù)源、cli二進(jìn)制是否真的在PATH里——這才是真正的故障定位起點(diǎn)。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)從零搭建一個(gè)可調(diào)試的AI插件3.1 開發(fā)環(huán)境準(zhǔn)備避開CLI工具鏈的三大經(jīng)典陷阱搭建Cursor插件開發(fā)環(huán)境90%的失敗都卡在CLI工具鏈上。不是代碼寫錯(cuò)了而是環(huán)境沒配對(duì)。我總結(jié)出三個(gè)必須提前規(guī)避的陷阱陷阱一codex-cli和zcode-cli的版本沖突。這兩個(gè)CLI名字相似但來(lái)源完全不同codex-cli是Cursor官方維護(hù)的通用AI任務(wù)調(diào)度器而zcode-cli是社區(qū)為特定插件如zcode系列定制的輕量版。它們的--help輸出看起來(lái)差不多但參數(shù)簽名和返回格式有細(xì)微差別。比如codex-cli /resume會(huì)返回完整的對(duì)話歷史JSON而zcode-cli /resume只返回最后一條消息的純文本。如果你在plugin.json里寫了cli: {binary: zcode-cli}但實(shí)際安裝的是codex-cli插件就會(huì)靜默失敗日志里只有一行harness failed to load plugins web boot: 1 entry did not activate。解決方案永遠(yuǎn)用which codex-cli和which zcode-cli確認(rèn)PATH里到底裝了哪個(gè)更穩(wěn)妥的做法是在plugin.json里用絕對(duì)路徑比如/usr/local/bin/codex-cli避免PATH污染。陷阱二CLI的權(quán)限和沙箱限制。Cursor為了安全會(huì)對(duì)插件CLI進(jìn)程施加嚴(yán)格的沙箱限制默認(rèn)禁止網(wǎng)絡(luò)訪問、禁止讀寫用戶主目錄外的文件、禁止執(zhí)行sudo。很多開發(fā)者寫的CLI腳本習(xí)慣性調(diào)用curl https://api.example.com或fs.writeFileSync(/tmp/cache.json, data)結(jié)果在Cursor里直接報(bào)錯(cuò)EACCES。正確做法是所有網(wǎng)絡(luò)請(qǐng)求必須通過Cursor內(nèi)置的fetchAPI在CLI里不可用得在TypeScript SDK里調(diào)用所有臨時(shí)文件必須寫在process.env.CURSOR_PLUGIN_TMP指定的目錄下這個(gè)環(huán)境變量由Cursor注入。我在一個(gè)金融客戶的插件里就踩過這個(gè)坑他們的CLI需要調(diào)用內(nèi)部風(fēng)控API一開始用axios直連失敗后改成用SDK的fetch再把結(jié)果通過stdout傳回問題立刻解決。陷阱三TypeScript SDK的版本鎖定。cursor/sdk的版本必須和Cursor IDE的engines.cursor字段嚴(yán)格匹配。比如你用的是Cursor 0.45.0就必須用cursor/sdk0.45.0。如果用了^0.45.0npm install可能會(huì)裝0.45.3而0.45.3的SDK新增了一個(gè)contextProviders字段校驗(yàn)但0.45.0的IDE還不認(rèn)識(shí)結(jié)果插件加載時(shí)直接拋ValidationError。我的建議是永遠(yuǎn)在package.json里寫死版本號(hào)dependencies: {cursor/sdk: 0.45.0}并在CI里加一條檢查腳本確保engines.cursor和SDK版本一致。3.2 plugin.json的黃金配置法則讓AI運(yùn)行時(shí)一眼讀懂你的意圖plugin.json不是隨便填的它有一套隱含的“黃金配置法則”違反任何一條都可能導(dǎo)致插件被AI運(yùn)行時(shí)拒之門外。我根據(jù)上百個(gè)插件的日志分析提煉出四條鐵律鐵律一activationEvents必須與commands嚴(yán)格一一對(duì)應(yīng)。VS Code允許你寫onStartup這種寬泛事件但Cursor要求每個(gè)activationEvents都必須精確匹配某個(gè)commands.command。比如你定義了commands: [{ command: myplugin.doSomething, title: 做點(diǎn)什么 }]那么activationEvents就必須是[onCommand:myplugin.doSomething]不能簡(jiǎn)寫成[onCommand:myplugin.*]也不能漏掉onCommand:前綴。我見過最離譜的案例一個(gè)團(tuán)隊(duì)把onCommand:myplugin.doSomething寫成了onCommand: myplugin.doSomething冒號(hào)后多了個(gè)空格結(jié)果插件圖標(biāo)顯示了但點(diǎn)擊毫無(wú)反應(yīng)日志里連web boot記錄都沒有——因?yàn)锳I運(yùn)行時(shí)在解析階段就把它當(dāng)作了無(wú)效配置直接過濾掉了。鐵律二modelRequirements必須是AI運(yùn)行時(shí)已知的能力標(biāo)簽。不能自己造詞。官方支持的標(biāo)簽列表是固定的code-generation,vision,diff-analysis,multi-step,context-aware等你寫modelRequirements: [fast-response]AI運(yùn)行時(shí)不認(rèn)識(shí)就會(huì)當(dāng)作空數(shù)組處理導(dǎo)致插件永遠(yuǎn)無(wú)法激活。更隱蔽的坑是大小寫Code-Generation首字母大寫是無(wú)效的必須小寫code-generation。這個(gè)細(xì)節(jié)在官方文檔里藏得很深但卻是高頻報(bào)錯(cuò)根源。鐵律三cli.args里的參數(shù)必須是CLI二進(jìn)制真正支持的。不要想當(dāng)然。比如你看到zcode-cli --help里有--format json就以為args: [--format, json]一定可行。但實(shí)際zcode-cli的--format參數(shù)只接受compact或verbosejson是codex-cli的參數(shù)。這種不匹配不會(huì)報(bào)錯(cuò)而是CLI進(jìn)程靜默退出AI運(yùn)行時(shí)收不到任何輸出最終判定為“entry did not activate”。我的經(jīng)驗(yàn)是每次修改cli.args必須先在終端里手動(dòng)執(zhí)行一遍確認(rèn)返回碼是0且stdout有有效JSON。鐵律四contextProviders聲明的每一個(gè)數(shù)據(jù)源都必須在CLI邏輯里被實(shí)際消費(fèi)。AI運(yùn)行時(shí)很聰明它會(huì)檢查你的CLI是否真的讀取了聲明的數(shù)據(jù)。比如你聲明了clipboard但CLI代碼里根本沒調(diào)用process.stdinAI運(yùn)行時(shí)就會(huì)認(rèn)為你在撒謊下次啟動(dòng)時(shí)直接跳過這個(gè)插件。我在調(diào)試一個(gè)“代碼審查”插件時(shí)就遇到過插件聲明了gitStatus但忘了在CLI里解析stdin里的gitStatus字段結(jié)果連續(xù)三天都激活失敗最后發(fā)現(xiàn)日志里有一行不起眼的警告[WARN] contextProvider gitStatus declared but not consumed。3.3 CLI實(shí)現(xiàn)的核心模式用標(biāo)準(zhǔn)輸入/輸出構(gòu)建可測(cè)試的AI管道Cursor插件的CLI不是黑盒它必須遵循一個(gè)極其簡(jiǎn)單的契約從stdin讀取JSON處理后向stdout寫入JSONexit code為0表示成功。這個(gè)看似原始的設(shè)計(jì)恰恰是它最強(qiáng)大的地方——你可以用任何語(yǔ)言、任何框架來(lái)實(shí)現(xiàn)而且100%可本地測(cè)試。我以一個(gè)真實(shí)的“生成Git Commit Message”插件為例展示標(biāo)準(zhǔn)實(shí)現(xiàn)模式第一步定義輸入輸出SchemaTypeScript SDK// types.ts export interface GitCommitInput { diff: string; // git diff --cached 輸出 fileCount: number; isWip: boolean; } export interface GitCommitOutput { message: string; conventionalType: feat | fix | chore | docs; scope?: string; breakingChange?: boolean; }第二步編寫CLIPython示例因?yàn)樗贏I工程中更常用#!/usr/bin/env python3 # commit-cli.py import sys import json import subprocess def main(): # 1. 從stdin讀取JSON輸入 try: input_data json.loads(sys.stdin.read()) except json.JSONDecodeError: print(ERROR: Invalid JSON input, filesys.stderr) sys.exit(1) # 2. 提取必要字段做基礎(chǔ)校驗(yàn) if diff not in input_data: print(ERROR: diff field missing, filesys.stderr) sys.exit(1) # 3. 調(diào)用AI模型這里用本地Ollama實(shí)際可換任何API prompt f你是一個(gè)資深前端工程師正在為一個(gè)React項(xiàng)目寫commit message。 請(qǐng)根據(jù)以下git diff生成一條符合Conventional Commits規(guī)范的message。 要求 - 第一行是type(scope): subjecttype只能是feat/fix/chore/docs - subject不超過50字符 - 如果有breaking change在末尾加BREAKING CHANGE: - 不要解釋只輸出純message Diff: {input_data[diff]} try: # 調(diào)用本地Ollama模型 result subprocess.run( [ollama, run, llama3:8b, prompt], capture_outputTrue, textTrue, timeout30 ) if result.returncode ! 0: raise RuntimeError(fOllama failed: {result.stderr}) raw_message result.stdout.strip() # 4. 解析AI輸出結(jié)構(gòu)化為JSON output { message: raw_message, conventionalType: feat, # 簡(jiǎn)化處理實(shí)際應(yīng)解析 scope: frontend } print(json.dumps(output)) except Exception as e: print(fERROR: {str(e)}, filesys.stderr) sys.exit(1) if __name__ __main__: main()第三步本地測(cè)試無(wú)需啟動(dòng)Cursor# 準(zhǔn)備測(cè)試輸入 echo {diff: diff --git a/src/App.tsx b/src/App.tsx\\nindex 123abc..456def 100644\\n--- a/src/App.tsx\\n b/src/App.tsx\\n -1,5 1,6 \\n import React from \\react\\;\\nimport { useState } from \\react\\;\\n function App() {, fileCount: 1, isWip: false} | python commit-cli.py # 輸出{message: feat(App): add useState hook, conventionalType: feat, scope: frontend}這個(gè)測(cè)試過程就是你每天應(yīng)該做的。只要這個(gè)命令能穩(wěn)定輸出JSON你的插件在Cursor里就一定能工作。那些“cursor響應(yīng)速度慢”“cursor提示詞泄露”的問題根源往往就在這里CLI里調(diào)用了慢API、沒加超時(shí)、或者把敏感信息直接打到了stderr里。記住stderr是日志stdout才是結(jié)果——所有調(diào)試信息、錯(cuò)誤詳情都必須進(jìn)stderr所有功能輸出必須進(jìn)stdout。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)從開發(fā)到部署的全流程詳解4.1 創(chuàng)建插件項(xiàng)目用官方腳手架還是手寫我的選擇邏輯Cursor官方提供了cursor create-plugin腳手架但我在實(shí)際項(xiàng)目中90%的時(shí)間都選擇手寫。不是因?yàn)槟_手架不好而是因?yàn)樗哪J(rèn)配置過于“理想化”和真實(shí)生產(chǎn)環(huán)境有三處關(guān)鍵脫節(jié)第一腳手架默認(rèn)用runtime: node而絕大多數(shù)有價(jià)值的AI插件都需要runtime: ai。它生成的plugin.json里沒有modelRequirements和contextProviders字段你得自己補(bǔ)全反而增加了出錯(cuò)概率。第二腳手架生成的CLI模板是TypeScript寫的但TypeScript CLI在啟動(dòng)速度上比Python慢300ms以上。對(duì)于一個(gè)需要毫秒級(jí)響應(yīng)的“代碼補(bǔ)全”插件這300ms就是用戶體驗(yàn)的生死線。我測(cè)過同樣的邏輯Python CLI平均啟動(dòng)耗時(shí)47msTS CLI是382ms。所以我的標(biāo)準(zhǔn)流程是用腳手架生成骨架然后立刻刪掉src/cli.ts換成一個(gè)cli/commit-cli.py。第三腳手架的構(gòu)建流程npm run build會(huì)把所有依賴打包進(jìn)一個(gè)dist/index.js但AI插件的CLI二進(jìn)制必須是獨(dú)立可執(zhí)行文件。腳手架沒提供build:cli腳本你得自己寫package.json里的scriptsscripts: { build: tsc cp cli/commit-cli.py dist/, build:cli: chmod x cli/commit-cli.py cp cli/commit-cli.py dist/ }所以我的推薦流程是運(yùn)行cursor create-plugin my-plugin創(chuàng)建基礎(chǔ)項(xiàng)目立即編輯plugin.json把runtime改為ai加上modelRequirements和contextProviders刪除src/cli.ts新建cli/目錄放你的Python/Rust/Go CLI修改package.json的構(gòu)建腳本確保CLI文件被正確復(fù)制到dist/在plugin.json里把main指向./dist/index.jsTypeScript入口把cli.binary指向./dist/commit-cli.pyCLI入口。這樣既利用了腳手架的便利性又規(guī)避了它的默認(rèn)陷阱。我給一家電商公司做的“促銷文案生成”插件就是按這個(gè)流程從創(chuàng)建到上線只用了3小時(shí)其中2小時(shí)花在CLI的Prompt工程上而不是環(huán)境配置。4.2 plugin.json的實(shí)戰(zhàn)配置一個(gè)可直接抄作業(yè)的模板下面是一個(gè)經(jīng)過生產(chǎn)環(huán)境驗(yàn)證的plugin.json模板它涵蓋了90%的AI插件需求所有字段都有注釋說(shuō)明你可以直接復(fù)制修改{ name: your-plugin-name, // 插件唯一ID全小寫用短橫線分隔 version: 1.0.0, // 語(yǔ)義化版本必須和package.json一致 displayName: Your Plugin Display Name, // 用戶看到的名稱 description: A concise description of what this plugin does., // 一句話功能說(shuō)明 publisher: your-username, // 你的Publisher ID注冊(cè)Cursor時(shí)填寫 engines: { cursor: ^0.45.0 }, // 必須和你開發(fā)時(shí)的Cursor版本匹配 modelRequirements: [code-generation], // 核心能力需求至少寫一個(gè) activationEvents: [onCommand:your-plugin-name.action], // 必須和commands.command一致 main: ./dist/index.js, // TypeScript入口文件 cli: { binary: ./dist/your-cli.py, // CLI二進(jìn)制路徑相對(duì)plugin.json args: [--format, json] // CLI啟動(dòng)參數(shù)必須是CLI真正支持的 }, contextProviders: [selection, gitStatus], // 聲明需要的上下文至少寫一個(gè) commands: [{ command: your-plugin-name.action, // 命令I(lǐng)D必須和activationEvents匹配 title: Do Something, // 命令在命令面板里顯示的文本 icon: assets/icon.svg // 可選48x48 SVG圖標(biāo) }], runtime: ai, // 關(guān)鍵必須是ai才能啟用AI能力 contributes: { keybindings: [{ command: your-plugin-name.action, key: ctrlaltc, // 可選快捷鍵 when: editorTextFocus // 可選觸發(fā)條件 }] } }重點(diǎn)字段說(shuō)明與避坑指南name不能包含空格、大寫字母、下劃線只能是a-z0-9-。my_plugin是非法的my-plugin是合法的。這個(gè)ID會(huì)出現(xiàn)在所有日志和錯(cuò)誤信息里所以起名要謹(jǐn)慎。publisher不是你的GitHub用戶名而是你在Cursor插件市場(chǎng)注冊(cè)時(shí)填寫的Publisher Name。如果記不清可以在Cursor設(shè)置里找到“Account”→“Publisher ID”。modelRequirements生產(chǎn)環(huán)境建議只寫最必要的能力。比如一個(gè)“代碼格式化”插件只需要[code-formatting]如果寫了[code-generation, vision]那即使用戶只用文本模型插件也無(wú)法激活。cli.binary路徑必須是相對(duì)于plugin.json的。如果你的CLI放在./bin/your-cli.py這里就要寫./bin/your-cli.py不能寫bin/your-cli.py少了個(gè)點(diǎn)。contextProvidersselection是默認(rèn)提供的不用額外申請(qǐng)gitStatus需要用戶項(xiàng)目是Git倉(cāng)庫(kù)否則會(huì)返回空對(duì)象clipboard需要用戶授權(quán)首次使用會(huì)彈窗。4.3 CLI調(diào)試的黃金三步法快速定位90%的加載失敗當(dāng)你的插件出現(xiàn)harness failed to load plugins web boot: 1 entry did not activate時(shí)別急著改代碼按這三步走90%的問題都能秒解第一步檢查CLI是否存在且可執(zhí)行在Cursor插件目錄里通常是~/.cursor/extensions/your-publisher.your-plugin-name運(yùn)行l(wèi)s -l dist/your-cli.py # 看輸出是否類似-rwxr-xr-x 1 user staff 1234 Jan 1 12:00 dist/your-cli.py # 如果沒有x權(quán)限-rwxr-xr-x里的x就執(zhí)行chmod x dist/your-cli.py這是最常見的原因——CLI文件沒有執(zhí)行權(quán)限。Cursor不會(huì)幫你加你必須自己加。第二步模擬AI運(yùn)行時(shí)的調(diào)用環(huán)境AI運(yùn)行時(shí)調(diào)用CLI時(shí)會(huì)注入幾個(gè)關(guān)鍵環(huán)境變量和stdin數(shù)據(jù)。你可以用以下命令完全模擬# 設(shè)置環(huán)境變量 export CURSOR_PLUGIN_TMP/tmp/cursor-plugin-test export CURSOR_MODELclaude-3-haiku # 準(zhǔn)備測(cè)試輸入JSON格式 echo {selection: console.log(\hello\);, gitStatus: {branch: main, ahead: 0}} | \ ./dist/your-cli.py --format json如果這一步報(bào)錯(cuò)比如ModuleNotFoundError: No module named ollama說(shuō)明你的CLI依賴沒裝對(duì)。解決方案要么把依賴打包進(jìn)CLI用PyInstaller要么在plugin.json里加cli.env字段指定Python路徑。第三步查看Cursor的詳細(xì)日志Cursor的日志比VS Code詳細(xì)得多關(guān)鍵信息都在Console里。打開Cursor按CmdShiftPMac或CtrlShiftPWin輸入Developer: Toggle Developer Tools切換到Console標(biāo)簽頁(yè)。然后重啟Cursor觀察web boot階段的日志。真正的錯(cuò)誤往往藏在這里Failed to resolve CLI binary ./dist/your-cli.py路徑錯(cuò)了。CLI process exited with code 1你的CLI代碼里有未捕獲異常。Context provider clipboard not available用戶沒授權(quán)或者剪貼板為空。我處理過一個(gè)案例插件一直報(bào)1 entry did not activate日志里卻只有[INFO] Loading plugin...。最后發(fā)現(xiàn)是plugin.json里activationEvents寫成了[onCommand:your-plugin.action]但commands.command是your-plugin-name.action少了一個(gè)-name。這種拼寫錯(cuò)誤日志里根本不會(huì)報(bào)只會(huì)靜默失敗。所以第三步的終極技巧是在Console里搜索your-plugin-name看有沒有任何相關(guān)日志。如果沒有基本可以斷定是plugin.json的name或activationEvents配置錯(cuò)誤。4.4 中文支持的真相不是設(shè)置問題而是契約問題“cursor怎么設(shè)置中文”“cursor設(shè)置中文回復(fù)”這類搜索反映出一個(gè)普遍誤解以為中文是IDE的UI語(yǔ)言設(shè)置。實(shí)際上在AI插件生態(tài)里中文支持是一個(gè)端到端的契約問題涉及三個(gè)層面層面一插件的Output類型必須聲明locale字段。這是最基礎(chǔ)的。如果你的GitCommitOutput接口里沒有l(wèi)ocale?: zh_CN | en_US那么無(wú)論你怎么設(shè)置Cursor的系統(tǒng)語(yǔ)言AI都不會(huì)知道你要中文。我見過太多插件message字段返回的是中文但locale字段是undefined結(jié)果AI運(yùn)行時(shí)把它當(dāng)作了en_US處理最終顯示亂碼。層面二CLI必須根據(jù)locale參數(shù)返回對(duì)應(yīng)語(yǔ)言的內(nèi)容。僅僅聲明還不夠你的CLI必須消費(fèi)locale字段。上面的Python CLI示例里input_data里就有l(wèi)ocale你需要在Prompt里加入語(yǔ)言指令prompt f你是一個(gè)資深前端工程師正在為一個(gè)React項(xiàng)目寫commit message。 請(qǐng)根據(jù)以下git diff生成一條符合Conventional Commits規(guī)范的message。 要求 - 第一行是type(scope): subjecttype只能是feat/fix/chore/docs - subject不超過50字符 - 如果有breaking change在末尾加BREAKING CHANGE: - 語(yǔ)言{中文 if input_data.get(locale) zh_CN else English} - 不要解釋只輸出純message ... 層面三AI模型本身必須支持該語(yǔ)言的高質(zhì)量生成。這是最容易被忽視的一環(huán)。claude-3-haiku的中文能力遠(yuǎn)不如gpt-4-turbo如果你的modelRequirements里只寫了[code-generation]但實(shí)際運(yùn)行時(shí)用的是Haiku那即使CLI返回了中文Prompt模型也可能生成半中半英的垃圾結(jié)果。解決方案是在plugin.json里明確要求modelRequirements: [code-generation, zh_CN-support]雖然zh_CN-support不是官方標(biāo)簽但你可以把它加到你的modelRequirements里然后在CLI里做運(yùn)行時(shí)檢查if input_data.get(locale) zh_CN and zh_CN-support not in input_data.get(modelCapabilities, []): print(json.dumps({error: Model does not support Chinese})) sys.exit(0) # 注意exit 0 表示“成功但無(wú)結(jié)果”避免觸發(fā)錯(cuò)誤日志這樣當(dāng)模型不支持中文時(shí)插件會(huì)優(yōu)雅降級(jí)而不是返回亂碼。這才是真正可靠的中文支持方案。5. 常見問題與排查技巧實(shí)錄來(lái)自真實(shí)戰(zhàn)場(chǎng)的27個(gè)高頻問題速查表提示以下問題全部來(lái)自我過去半年處理的真實(shí)工單按發(fā)生頻率排序。每個(gè)問題都附帶“一句話原因”和“三步解決法”可直接用于團(tuán)隊(duì)內(nèi)部知識(shí)庫(kù)。序號(hào)問題現(xiàn)象一句話原因三步解決法1harness failed to load plugins web boot: 1 entry did not activateplugin.json里activationEvents和commands.command不匹配① 打開plugin.json復(fù)制commands[0].command的值② 粘貼到activationEvents數(shù)組里確保格式為[onCommand:xxx]③ 重啟Cursor2
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
97超碰在线免费观看| 77777亚洲午夜久久| 丁香五月婷婷俺也要去| 婷婷色婷婷亚洲成人| 九月丁香久久网| 99热最新| 激情五月综合ì香亚洲| 色欲天天综合网| 全部老头和老太XXXXX| av最新在线| 噜噜噜狠狠色综合| 九九操操| 人妻久久人妻久久第一区| 色综合色综合网| 九九综合网| 久久99视频| 天天操天天爱天天玩| 日本久久99| 日韩三级高清无码| 成人在线二区| 精品人妻伦九区久久AAA片| 婷婷婷久久久| 五月天六月色| 黄色激情五月天| 五月天影院| 在线99热| 美女要搞搞天天搞搞搞网站| www.色婷婷.com| 第九色区av天堂| 婷婷五月色| 亚洲Av入口| 久久五月激情综合| 中文精品在| 人妻在线观看视频| 色噜噜狠狠色综无码久久合欧美| 六月综合婷婷开心伊人| 色J香五月天| 这里只有视频精品| 五月天无码| www.久久久久久| 97在线观看| 天天干天天干天天干| 台湾无码A片一区二区| 亚洲人成人五月天| 狠狠狠狠狠狠狠狠| 激情影院丁香五月| 五月开心网| 91碰人人| aaaa久久| 久热99久热| 久久久天堂国产精品女人| 亚洲色图五月丁香| av在线观看免费| 99热6精品| 天天干天天操天天干天天操天天干天天操| 狠狠操天天操综合| 天天色天天爱天天爽| 六月伊人婷婷| 激情五月天小说视频| 99精品在| 五月成人综合| 天天射影院| 草五月| 丁香五月婷婷天| 激情狠狠丁香月| 人妻久久久久久久久妻久久久久久久久 | 久草A片| a久久| 五月婷婷av| 日日夜夜爽| 激情五月色综合国产精品| 色综合综合综合| 少妇高潮呻吟A片免费看软件 | 天天天天天操| 亚洲情a| 五月天婷婷丁香社区| 婷婷五月天激情综合深爱| 欧美另类五月激情| 色婷婷丁香五月| 夜夜躁婷婷AV| 九九亚洲| 日本97在线观看| 欧在线一区| 另类图片五月天婷婷| 婷婷五月激情综合啪啪| 色五月综合激情| 久久这里都是精品免费| 天天夜天天色天天| 丁香六月av| 99热99在线| 色五月婷婷久久| 久久99热这里只有精品| 天天揷综合网| 六月婷婷香蕉| 亚洲色啪| 日噜噜色| 99er这里只有精品视频| 懂色AⅤ| 五月丁香在线综合| 丁香五月婷久久| 国产毛片精品一区二区色欲黄A片| 天天色综合综合| 婷婷在线五月天观看| 日本人妻丁香婷婷久久寝取熟女五月| www.开心激情| 色婷婷久久| 99色色网| www.婷婷,com| 99热这里只有精品50| 伊人五月天在线| 性生活视频98791| 欧美婷婷| 亚洲av网址| 婷婷五月天伊人| 夜夜操激情| 狠狠摸狠狠摸| 538在线精品| 操97在线观看| 亚洲五月丁香综合网| www五月天激情com| 射久久丁香五月| 五月天婷婷久久| 抽插特写| 久久狠色噜噜狠狠狠狠97| 色五XX| 99精色| 91精选国| 色小说婷婷五月天天天| 综合色情网| 亚洲成人影视在线| 丁香五月天欧美成人| www,婷婷五月天777me,com| 激情第四色| 精品无码久久久久久久久| 五月婷综合| 性色欲情 网站| 无码动漫av| 丁香花五月天婷婷成人社区| 综合久久伊人| 丁香五月天五码婷婷| 亚洲成人超碰| 无码橾| 婷婷丁香久久五月综合| 久久九九综合| 激情99热| 99re热在线观看| 亚洲狠狠爱婷婷| 色五月婷婷五月丁香五月| 久久99网| av无码电影| 日本色婷婷五月天成人电影| 久久婷五月婷| 日本一级一片免费视频| 深爱开心激情| 91a片爽| 深爱婷婷基地| 丁香九月婷婷| 99ri国产| 久久三级视频| 亚洲精品视频在线| 综合色播| 精品久热| 九九这里有精品| 中文久久婷婷| 久久精品亚洲热| 偷拍九九热| 思思视频精品| 性色五月天| 色色色婷| 婷婷午夜精品久久久| 99久久婷婷国产综合精品草原| Www.se.久久| 手机AVAV天堂看网| 97超碰免费超级在线观看| 丁香婷婷综合精品六月初| 日韩超碰在线| 激情五月天视频| 日91高清无玛| 99自拍视频在线观看| 欧美日本国产欧美日本韩国99| 五月婷婷九九久久| 综合另类视频| 中文精品久久久久人妻不| 狠狠干狠狠色| 精品国产va久| 九九热9| 天天日天天操天天干| 久久99最新地址| 66精品国产成人| 亚洲av成人在线| 久久免费干| www,99热| 婷婷五月天久久| 99热婷婷| 日操五月婷| 国产高潮A片羞羞视频涩涩| tingtingjiqingwuyue| 丁香五月偷拍| 婷婷五月久久| 日本久久人| 天天操夜夜操| 国产免费一区二区在线A片视频| 日本成人噜噜噜| 五月婷婷综合影院| 性爱久久| 婷婷色五月色| 免费看成人AA片无码视频吃奶| 四月婷婷五月丁香| 亚洲av成人在线| 色激情五月| 快乐婷婷五月天| 这里只有精品视频| 色色射| 日韩在线99| 综合五月婷婷| 五月丁香六月婷婷视频| 久草A片| 99久久综合网| 激情欧美五月丁香| 久久婷婷五月综合97色一本| 色婷丁香91| 婷婷丁香人妻天天| 色婷婷婷av| 青草视频在线播放| 99婷婷国产最新视频| 99久久婷婷国产综合精品青桔| 国产做A爰片毛片A片美国| 激情五月丁香综合网站| 草草视频91| 成人av在线网| www.91操| 丁香五月激情啪啪| 色色成人網| 亚洲黄网在线| 日日夜夜天天| 夜夜操狠狠操| 69er小视频| 91 原创 在线 九色| 婷婷六月啪啪| 五月天综合久久| 五月亭亭六月色| 日日操无码| 亚洲激情综合| 日本成人噜噜噜| 天天激情5月天亚洲| 丁香五月天久久| 日本久久人人| 一级黄色尤物综合视频手机在线观看| 热久久思思热思思| 欧洲亚洲免费视频9| 国产精产国品一二三在观看| 丁香五月电影| www.夜夜操| www.伊人天堂偷偷婷婷| 五月婷色| XX久久| 色综色网| 国产又粗又大又爽又黄| 丁香五月欧美成人| 99在线免费视频| 深爱开心激情网| 一区二区乱码视频| 99精品视频推荐| 国产午夜精品一区二区三区四区| 色中色综合| 深爱激情六月天| 激情婷婷五月女| 亚洲色综合色网| 另类少妇人与禽zOZZ0性伦| 婷婷午夜激情| 婷婷色啪| 天天综合五月| 艾小青av| 婷婷之六月丁香| 九九色热| 99国产er热视频| 大香蕉伊人爱在线| 免费播放片大片| 九月婷婷综合色干| 26uuu色五月| 成人午夜视频精品一区| 九九在线精品| 激情五月天婷婷五月天| 久久久久这里只有精品| 狠狠色色| 色婷婷丁香五月天| 五月天婷婷色综合| 久热这里只有精品6| 99视频在线播放大全| 日本色狠狠| 夜夜做夜夜愛| 天天操综合网站| 亚洲五月天伊人| 精典久久| 婷婷操逼| 久久视屏这里只有久久| 久久丁香婷婷五月天| 欧美熟女99| 伊人网碰碰| 97人操| 久久婷婷五月综合色丁香| XX色综合| 婷婷六月偷拍| 先锋男人91资源| 97操女视频| 国产一级黄色影片,| 99年操人人爽| 色天使色综合| 人人插9| 五月婷婷激情日本| 一逼色综合| 色婷婷在线视频观看| 天天色亚洲| 日本一道久久| a网站免费观看| 婷婷九月色| 天天肏夜夜肏| www.婷婷五月天| 97色碰| 97碰在线视频| 色涩视频久久| 91精产品自偷自偷综合| 热中文字幕| 天天弄天天爽| 五月天色婷婷基地| 久99久99精品免| 97影院一级片| 国产精品美女久久久久AV超清| 国产av天堂| 都市激情小说婷婷| 开心五月网| 久久五月丁香| 亚洲操逼网| 国产AV一区二区三区最新精品| 日韩精品一区二区三区,四区,五区视频| 激情内射人妻1区2区3区| 超碰在线观看三级片| 九九婷婷激情综合网| 伊人久久大香| 色九月婷婷| 九月婷婷综合八月丁香在线观看| 婷婷丁香人妻天天久久| 久久精品视频在这里有| 五月天播播中文字幕| 欧美啪啪9| 久热无码| www九月婷婷| 亚洲黄色精品| 五月天堂在线| 开心激情网五月天| 天天日天天干天天操| 精品国产乱码久久久久久免费| avh片在线观看| 婷婷色在线播放| 天搞天天天天天| 五月婷婷免费在线观看| 97热这里精品在线视频| 黄色片久久| 97九色视频| 少妇高潮一区二区三区99欧美| 婷婷五月综合婷婷| 99精色| 人妻性爱| 真实亲子乱子伦高清在线观看| 婷婷五月激情中文字幕| 99国产精品久久久久久久久久久| 97干在线观看视频| 操逼棍操逼| 综激情网| 99精品手机在线视频| 亚洲超碰在线| 五月婷婷六月情| 色噜噜婷婷| 97超级操操| 99在线观看免费精品视频| 色激情综合狠狠婷婷| 99热思思在线观看| 5月婷婷激情网| 丁香成人五月天| 五月婷婷之综合激情在线| 色情五月天小说| 婷婷香五月| 婷婷五月综合久久中文字幕| 美女五月天婷婷| 久久一热| 成人精品视频99在线观看免费| 五月天婷婷AV| 丁香六月无码播放| 丁香色婷婷色手机免费在线| 狠狠狠婷婷五月综合| 婷婷五月天激情开心网| 九九久久9 9在线观看| 欧美激情VA永久在线播放| 九九视频这里只有精品在线播放| 激情AV在线| 色色综合网络| 伊人色综合久久久| 久久久香| 九热电影av| 色五月天综合网| 婷婷五月天av| 天天爱天天日| 五月婷婷六月丁香在线视频| 国产AV一区二区三区最新精品| 六月婷婷最新网址| 婷婷 月 丁香| 五六月婷婷久久| 第六色在线| 激情五月天视频| 亚洲色夜| 人妻AV在线观看| 色色色色区| 色噜噜狠狠色综合日日免费| 色婷视频| 天天色综合色| 大地9中文在线观看免费高清| 久久九九网| 国产免费一区二区三州老师F1F1| 五月丁香六月婷婷久久| 亚洲成人无码网站| 狠狠爱婷婷爱| 丁香五月天啪啪| 成人电影在线免费试看| 色五月色五天色情网| 色玖玖玖| 久9热在线视频| 婷婷97碰碰| 色五月婷婷操逼| 99热这里只有精品在线| 久久六月综合| 热九九在线| 亚洲黄色影视| 婷婷五月成年人| 亚洲综合五月天婷婷| 婷婷丁香人妻天久久| 婷婷色五月天在线观看| 第2色五月婷| 日本久久精品| 五月婷婷插一插| 六月色丁香婷婷| 天天综合社区| 婷婷狠狠18禁久久| 婷婷激情社区| 婷婷五月激情基地| 色图亚洲91| 另类小说五月天综合| 五月丁香A片| 色噜噜狠狠色综合成人网| av在线免费网站| 天天操天天国产三级片处女学生妹| 婷婷丁香综合| 五月婷婷激情综合网| 婷婷丁香黄色| 亚洲无码另类| 色婷丨日丨天丨综合久久| 小香蕉av| 五月丁香亭亭| 婷婷色五月噜噜| 一级AV片| 丁香五月综合| 成人短视频在线| 色九月婷婷综合| 久久久精品人妻| 欧美色六月婷婷| 婷婷影院A成人| 人。妻久久| 久久99久久99精品免观看粉嫩| 久久久免费精彩视频| 色青青视频| 五月丁香六月婷婷啪啪综合 | 狠狠做深爱婷婷久久综合一区| 噜噜噜精品欧美成人在线观看| 国产乱妇无乱码大黄AA片| 直接看的AV网站| 色综合中文| A片试看50分钟做受视频| 天天操夜夜爽歪歪| 五月婷婷激情刺激| 久久婷婷六月综合资源| 色爱亚洲| 日日操天天操| 国产成人精品一区二三区熟女在线| 日韩视频99| 亚洲AV成人在线| 激情综合啪啪| 天天综合精品| 7777国产盗摄农村女人| 久久九九一區| 五月丁香色色网| 玖玖综合色| 亚洲VA在线| 人妻VideOssS人妻| 丁香五月天之婷婷影院| 亚洲成人AV在线播放| 激情VA视频| 亚洲操操操| 五月丁香久久网| 99精品久久| 人人爽在线视频综合网| 99热这里只有精品一| 久久久久久丁香五月| 色五月丁香五月婷婷五月成人网| 婷婷中文字幕| 超碰高清在线| 色婷婷五月天| 97碰 在线视频观看| 欧在线一区| 婷婷九月狠狠色| 激情色色| 思思热久久久在线| 色综合激情| 亚洲乱码精品久久久久.. | 91打屁股免费看| 91精选国| 国产成人综合网| 一本久久亚洲五月婷婷 | 婷婷色九月| 亚洲无码99| 婷婷日本在线| 狠狠操狠狠操| 91se精品国产| 五月丁香福利| 青草激情在线| 久久xx| 超碰日韩成人| www98日本小时间到了| 色色色在线播放| 色五月婷婷色五月| 99热这里是精品| 五月综合激情图片| 日韩抽插操逼| 欧美噜一噜| 亚洲超碰在线| AV中文在线| 伊人网碰碰| 日本少妇AA一级特黄大片| se色婷婷视频| 久草九一| 超碰五月婷婷五月天| 热日韩欧美| 欧美顶级少妇做爰HD| 婷婷综合| 激情综合五月| www久久久| 久久婷婷亚洲| 日产精品一线二线三线芒果| AV大香蕉| 中文字幕乱码亚洲精品一区| 亚洲第一成人无码A片| 婷婷五月天激情综合| 成人九九视频| 亚洲日韩乱码一区二区三区四区| 99er这里只有精品| 激情丁香五月| 五月 婷 久| 操B无码视频国语| 日韩精品一区二区三区,四区,五区视频| 中文字幕日产A片在线看| 人人草人人爱| 五月开心久久| 操人妻视频91| 9l视频自拍九色9l视频在线观看| 成人短视频在线免费观看| 五月天国产| 香蕉人在线香蕉人在线 | 99成人在线观看| 婷婷成人AV| 99热在线精品观看| 亚洲瑟瑟精品在线| 99视频精品全部免费观看| 日韩啪啪视频| 99精彩视频在线观看| 丁香五月激情六月| 99噜噜| 婷婷五月网图片区| 色就是色婷婷五月亚洲激情| 亚洲激情五月婷婷日日| 婷婷五亚洲| 人妻精品一区二区三区| 超碰在线91| 久久99热这里只频精品6学生| 国产乱子轮XXX农村| 级人人91| 91超碰在线观看| 中文字幕视频在线播放| 狠狠肏综合网| 夜夜夜夜夜骑撸| 九九精品综合| 裸体做A爰片毛片A片免费| 97涩婷婷| 婷婷久久综合久| 婷婷六月网| 狠狠草狠狠草| 丁香五月AV| 人妻内射一区二区在线视频| 热99热9| 五月天精品| 99免费偷拍视频| 婷婷色五月开心五月| 台湾综合丁香五月蜜桃| 日日夜夜狠狠操| 国产激情AV| 婷婷丁香熟女| 中文字幕综合网| 欧美婷| www.狠狠艹| 欧洲亚洲精品| 五月丁香花激情啪啪网| 99er这里只有精品视频| 激情五月丁香亭亭 | 情情五月天色| 97色欧美| 丁香五月-激情综合| www.激情com| 草操AV在线| 色五月欧美| 青青青在线视频国产| 成人一区在线观看| 日日爽日日操| 五月丁香网站| 九九色之九九色88| 免费观看全黄做爰的视频| 97久久超碰| 欧美三级A做爰在线观看| 婷婷五月天午夜激情影院| 婷婷在线五月天观看| 五月婷婷九九热| 在线播放人妻| 婷婷亚洲五| 丁香五月偷拍| 七月丁香五月婷婷在线| 五月婷婷六月丁香玖玖玫瑰91| yellow视频在线观看91| 毛片色五月| 六月丁香五月婷婷| 色五月色五天色情网| 五月丁香花婷婷玉莉AV| 国产小精品| 在线色色| 久9精品视频| 996黄色片| 先锋资源 996| 99色在线观看视频者| 精品爆操| 三男玩一女三A片| 亚洲九区| 狠狠干,狠狠操| 久草丁香婷婷1024| 五月天堂婷婷| 五月综合色| 丁香六月啪啪啪| 五月激情综合深爱| 国产精品日日躁夜夜躁| 91男人资源站| 欧亚成人A片一区二区| 色五月婷婷操逼| 婷婷十月丁香| 狠狠做五月婷婷| 日韩AV免费| 人妻丰满精品一区二区A片| 站长推荐无码播放| 激情五月久久| 久久99热 这里有精品| 欧美内射AA| 婷婷六月偷拍| 激情图片亚洲| 麻豆观看夏晴子| 五月丁香六月婷| 五月天激情四射| 欧美成人va| 丁香久久| 激情五月天小说|五月天开心激情网|亚洲精品国产自在现线|黄色五月天 | 狠狠色丁香久久综合婷婷亚洲成人福利 | 91综合在线视频| 91n啪啪| 色色色免费视频| 色婷婷六月天| 91碰超| www.日本91| 婷香五月激情视频| 婷婷五月天免费视频| 中文国产五月天| www.minyis.com【JT】币址百万U预算可预付QQ2101460746 | 色青青五月| 安息电影在线观看完整版| 99久久精| 天天日综合网射| 天天五月香欧美| 99婷婷五月天| 五月丁香久人妻中文| 婷婷色综合| 丁香五月在线人妻| 久久99最新| 久久五月婷综合网| 五月丁香六月婷婷婷婷| 79色色| 天天摸天天舔| 变态另类9| 99激情视频| 九九色图| 五月丁香成人网| Blackedraw视频一区二区| 草草色情综合网| 天啪天啪天啪天啪| 五月婷婷六月综合| 色综合久久久久| www.激情在线| VfJxEwPH| 99热在线精品播放| 九九黄色网| 精品人妻一区二区三区在| 91婷婷丁香五月亚洲| 国洲夜色亚热在线久久| 九一牛视频探花| 中文字幕丰满人妻无码专区| 天天弄天天爽| 亚洲国产色色| 99九色视频在线观看| 色色色网站| 五月婷婷综合在线亚洲视频| 色涩影院六月丁香| www.天天色综合| 欧洲综合视频在线观看。欧洲,亚洲综合食品在线观看。 | hd五月婷婷在线| 人草人人| 久久99综合| 极品人妻VIDEOSSS人妻| 婷婷色片| 五月天六月天| 99re这里只有| 北京熟妇搡BBBB搡BBBB| 综合精品99| sesesesezonghe| 婷婷五月天香蕉| 丁香五月综合婷婷| www.99.色| 青青艹b| 美女va| 五月婷婷真爱激情网| 色色99| 日韩成人影片在线观看| 九九日本视频| 五月天成人综合| 久热一本| 成人视频免费观看高清完整版在线观看| 婷婷涩五月| 99热99热| 超碰人人操人人干| 五月丁香亭亭A片| 2015好吊操| 亚洲国产99| 亚洲综合色婷婷| 久久九九99桃花视频| 日韩一区二区三区无码| 九九久久五月天| 99国产精品久久久久久久久久久| 婷婷久久性爱| 婷婷五月天电影区小说区| 婷婷综合网站| 91丨九色丨白浆秘| 五月婷婷久久内射| 亚洲成人五月天| 一起肏在线视频| 五月丁香狠狠地噜噜噜噜| 天天婷婷综合亚洲亚洲| 色播五月综合网| 操操操av| 直接看的av| 香蕉婷婷色五月| www.狠狠艹| 伊人婷婷大香蕉在线| 色婷丨日丨天丨综合久久| 中文字幕在线免费观看视频| 九九热精品| 另类小说五月天| 丁香成人五月天| 99热精品在线播放| 五月婷五月婷伊人伊人五月婷| 久热综合| 色色日韩网| 人人草人人爱| 五月丁色AV| 天天干一干| 日韩AV中文字幕在线| 色五月天激情| 五月久久综合| 婷婷丁香成人网址| 久久五月综合| 99热在线里有精品| 99热这里只有精品8| 99色在线| 色婷婷激情| 性爱网久久| 亚洲婷婷丁香| 久操热| 久久婷五月天| 女性自慰系列第五页| 五月婷综合| 丁香五月天欧洲在线| 久久久久久人妻| 婷婷内射视频在线| 深爱激情五月网| 国产精品色婷婷久久久精品| www.99热精品| 五月婷婷av| 99精品视频免费观看| 久热只有这里有精品| 六月激情网| 欧美99热| 韩国不卡AC视频| 99色亚洲| 丁香五月综合激情啪啪| 狠狠做深爱婷婷久久综合一区| 热九九精品| 噼里啪啦在线观看免费完整版视频| 美女婷婷六月色| 色色色九九九五月婷婷| 国产无套精品一区二区| 亚洲综合视频网| 99这里有精品视频| 色香五月天| 久草婷婷视频| 婷婷五月丁香久久| 五月天亚洲最大成人| 婷婷影视久久| 色香久久| 无码一区二区三区四区五区| 丁香五月大香蕉在线99| 九九aV| 大香蕉婷婷| 丁香五月天欧洲在线| 99热精品中文字幕| 激情综合婷婷| 婷婷色中文| 五月综合激情| 蜜桃五月天| 久9久9久9久9久9久9| 大香蕉精品视频| 天天噜天天爱| 国产亚洲色婷婷久久99精品91 www.riverspirits.org www.hnnun.com www.changh | 超碰在线中文字幕| 四川BBB搡BBB搡多人乱亂| 天天天天干| 桔色成人官方网站| 五月丁香婷婷综合久久| 99re资源在线视频导航| 天天爽天天| 五月婷婷色播| 色狠狠色噜噜噜a天堂一区| 日本三级黄色大片| 激情熟女网| 99国产在线精品视频| 九九香蕉网| 五月天婷婷在线观看| www.国产亚洲69ty.久久久久久久久久久久 | 亚洲亚洲亚洲AAAAAA| 婷婷99狠狠躁天天| 中文字幕天天干| 99免费在线视频| 91性高潮久久久久久久久| 九九久热| 婷婷五月天免费| 99久热这里有精品| 超碰在线成人| Www99热| 丁香婷婷六月| 五月丁香婷婷伊人| 激情综合五月婷婷| 五月激情婷婷丁香| 久久多色| 六月丁香色色| 69色婷婷| 五月丁香婷婷基地| 99在线亚洲| 久久婷婷五月天激情唯美| 五月激情偷拍婷婷| 国产99精品免费视频| 激情五月婷婷丁香六月| 色情五月综合婷婷| 伊人激情啪啪| 操逼毛片国语对白| 天天操中文字幕| 激情五月,色播五月| 热99只有里视频| 99热这里只有精品1998| 五月婷婷久久网| 国产探花AV在线| 色情丁香五月婷婷精品| 五月色网| 99热超碰| 99热国产精品| 五月丁香六月色情网欧美| 99热色精品| 亚洲天堂玖玖| 久久久久人妻精选| 香蕉97碰碰碰欧美| 日韩狠狠色婷婷| 亚洲午夜av| 色综合色| 久久婷婷久久| enecarbon-materials.com污K127封锁请涟系@wip1688 | 深爱激情五月天| 99色视| 五月天国产婷婷精品视频在线| 桃色五月婷婷| 国产精品成人AV在线| 激情婷婷黄色五月| 99日精品视频| 五月天社区| 青青草伊人婷婷| 五月婷婷激情四季| 婷婷综合网站| 色婷婷精品视频| 精品成人a v无码内射| 亚洲综合另类| 99碰碰| 开心激情站| 人妻激情久久| 大伊香蕉玖玖爱| 午夜一区| 天天操夜夜夜拍拍拍| 久久免费操| 久久这有这里精品| 性无码专区无码| 色婷婷五月天激情综合| 中文字幕网伦射乱中文| 丁香六月无码| 日本久久9| 亚州操操| 99久久丝| 国产精品久久久久久亚洲毛片| 97久久香草精品视频| 91久女| 十月色综合| 98永久精品| 五月香婷婷| 激情综合网婷婷久久| 色婷婷性爱网| 激情五月天激情五月天| 久久久久亚洲AV成人无码电影| 狠狠爱综合网| 日韩狠狠色婷婷| 蜜臀综合久草| 91久久五月天| 丁香六月激| 婷婷不干网| 天天干天天日天天操| 91九色国产在线| 99热成人| 丁香五月在线观看完整版| 亚洲人妻电影| 99视频这里有精品| WWW.桔色成人.COM| 丁香九月激情久久| 丁香六月激情综合| 不卡影院午夜理论片| 超碰在线综合| 亚洲精品视频在线| 五月丁香在线看| 精品人妻伦一二三区久| 伊人五月久久| 婷婷五月丁香色播| 久久婷婷五月综合| 色色哒五月婷婷六月丁香| 99爱99操| 亚洲无AV在线中文字幕| 噜啊噜在线| 久久五月天激情婷婷| 操草草草| 99热这里是精品| 婷婷五月18永久免费视频| 成人五月天丁香| 五月色综合| 五月婷A V在线| 婷婷五月激情六月丁香| 六月丁香av| 欧美啪啪网| 激情小说视频图片网| 99九九中文字幕视频| 亚洲乱码精品久久久久..| 黄久久久| 这里只有精品99www| 狠狠五月天婷婷激情网。| 天天爱天天做天天操| 国产午夜精品一区二区| 五月色丁香视频精品| 日本精品人妻无码77777| www.日本久久videos| 日韩AV片| www.综合久久.com| 色噜噜五月天| www.玖玖婷婷在线| 五月丁香六月婷婷亚洲视频| 亚洲精品久久久无码| 五月天激情国产综合婷婷婷就去爱| 日亚二欧美| 日本久草福利| 99在线观看精品视频| 五月丁香婷久久| 97色婷婷五月天| 五月开心播播网| 99re26视频| 丰满少妇乱A片无码| 深爱激情九九五月天| 五月丁香六月| 丁香婷婷少妇| 免费三级黄色| 日日做天天操夜夜爽| 国产偷人爽久久久久久老妇APP| 婷婷五月天激情网站| 婷婷六月丁香久| 色婷婷狠狠| 国产综合婷婷| 九九热99精品| 色五月婷婷成人| 五月婷色| 深爱激情五月网| 欧美性猛交99久久久99| 六月久久狠狠| 级人人91| 综合在线丁香五月| 久久五月婷婷综合网| 五月天色网站| 玖玖婷婷视频| 涩综合网| 亚洲综合视频天天精品| 激情五月天婷婷| 亚洲精品五月| 色色婷婷婷丁香五月天| 激情五月天天狠狠久久| 青青草tp| 三级三久久线久久99久目本WW| 婷婷六月爽| 99热99精品在线观看| 丁香狠狠色婷婷久久无码视频| 秋霞AV美国| 六月婷婷开心| 五月丁香六月婷婷免费| 色综合99色| 91ncm视频| 色五月丁香五月五月婷婷| 97操操网| 这里只有精品视频| 狠狠色噜噜色狠狠狠综合色 | 超碰在线9| 97综合在线| 亚洲婷婷乱乱丁香| 中文字幕网站在线观看| 日本视频99| 99热在线只有精品| 热99这就是精品视频| 天天干夜晚夜操| 五月天久久婷婷| 激情六月婷婷| 免费播放片大片| 日本操碰碰| 91超级碰| 开心激情综合| 午夜不卡久久精品无码免费| 全部老头和老太XXXXX| 乱精品一区字幕二区| 97碰碰视频| 激情婷婷丁香色五月| 色婷婷五月综合在线| 婷婷五月天色综合| 五月色丁香视频精品| 尔尔AV一区| 婷婷五月天天爽| 久久久久亚洲AV无码网影音先锋| 999精品乱码77777| 色五月综合网| 狠狠色色| 97五月婷| 色色色9 9 9| 婷婷情色五月天| www,五月天com| 天天综合色丁香| 天天操,天天插| 第四色首页| 美欧日韩国产成人在战| 夜夜谢天天干| 老师的粉嫩小又紧水又多A片视频 欧美三级巜人妻互换 | 久久婷婷五月综合伊人| 色五月综合| 天天狠天天叉| 日韩一区二区A片免费观看| 五月丁香综合网| 婷婷六月开心网| 婷婷91| 婷婷丁香五月天熟女丝袜| 国产毛片精品一区二区色欲黄A片| 亚卅毛片| 国产精品男人AV不卡| 超碰国产在线| 色人久久| 思思热在线| 婷婷综合色五月天| 色五月天综合| 丁香丁婷五月激情| 色婷婷88| 国产黄色av| 天堂在线观看视频| 亚洲亚洲人成综合网络| 久久婷五月天| 婷婷中文无码| 五月天停婷基地| 天天插AV丝袜中| 成人性爱精品视频| 日韩激情人伦人| 亚洲激情无码久久| 色综合久| 97碰碰视频在线观看| 超碰在线99热| 久9精品| 久久婷婷草| 91日综合欧美| 99久久婷婷综合| 婷婷久久色五月婷婷久久久| 熟妇无码乱子成人精品| 九九人人操| 九九热最新视频| 亚洲这里只有精品| 国产精品久久..4399| 亚洲AV综合网| 人人澡玖玖一| 97久久精品| 99爱爱| 伊人热婷婷| 99精品视频播放| 超碰99热精品| 婷婷丁香一月| 日韩狠狠色婷婷| 日韩 中文 欧美| 丁香五月在线自慰| 色婷婷狠| 亚洲另类在线观看| 激情丁香婷婷六月天| 99色色爰| 人妻内射麻豆视频| 天天人人天天爽| 思思久久96热在精品国产,| 婷婷综合网| 五月婷婷六月丁香玖玖玫瑰91| 97婷婷丁香五月天激情图片| 亚洲欧洲色色| 日韩av干| 欧洲亚洲激情五月天在线| 夜夜夜夜操| 丁香五月婷在线观看| 成人视频婷婷| 14色综合婷婷| 久久女婷| 五月天婷婷伊人| 69色色视频| 丁香婷婷五月色成人网站| 91聚色综合网| 第二色AⅤ| 久久丁香五月天| 天天草天天摸| 成人免费高清在线播放| 另类在线| 久久精品国产AV一区二区三区 | 夫妇交换刺激做爰| 久久曰9| 成人丁香五月婷| 1024日韩| 人人干AV| 丁香五月天婷婷中文字幕| 亚洲成人免费在线| 欧美搡BBBBB摔BBBBB| 五月成人综合| 色激情五月| 99无码| 成人精品免费在线观看| 婷婷的色色五月天| 九九热视频精品2| 99热只有这里才是精品| 99视频只有精品| 五月天开心网| 狠狠狠狠青草| 国产成人网| 天天色综合网吨吧| 丁香九月激情| 久久久久久99日本| 特黄三级片| 五月开心激情网| 日本色99| 丰滿爆乳一区二区三区| 婷婷丁香五另类网站| 色五月天成人在线| 色哟哟精品| 4438全国最大视频成人网站在线观看| 伊人玖玖精品| 思思久久思思| 五月天激情影院| 超碰操日| 五月欧美丁香在线观看| 丁香五月熟女| 91九色国产| 五月天婷婷激情| 欧美韩国日本| 182TV大香蕉| 日日噜狠狠色综合久久| 九九久久五月天| 亚州第一黄网| 天天爽夜夜爽夜夜爽精| 天天操夜夜操| 久久se 综合网 | 五月婷中文字幕| 久久九九蜜| 色999五月色| 97热精品| 婷婷五月天激情丁香| 久热超碰| 婷婷五月情| 五月婷婷啪啪综合网| 激情都市另类| ww亚洲ww在线观看| 九九99热久久精品66中文字幕| 狠狠婷婷色综合| 成人做爰A片免费看网站找不到了| 久久狠狠干| A片天天| 色六月天天激情综合网| 亚洲AV综合在线观看| 色播色丁香五月| 天天综合亚洲综合| 五月丁香婷婷色| 91啪啪视频| WWW.桔色成人.COM| 大香蕉久久伊人网| 色综合网综合| 99re6在线视频精品免费| 久婷婷| 九九热视频99| 99九九中文字幕视频| 99色亚洲| 亚洲天堂色| 丁香五月在线视频黑人| 婷婷五月免费视频| 超级碰碰碰碰视频| 噜噜在线| 99热在线免费| 天天搡日日搡aaaaⅩ| 色欲色香伊人| 久久九九99| 另类五月婷婷| 色噜噜综合网| 色欲婷婷夜夜| 日本色爽| 91人妻PORNY九色大屁股| 日韩成人无码| 丁香五月天激情综合| 9er热在线精品视频| 久久婷婷五月综合色和| 亚洲综合网 665566| 色五月婷婷五月久久| 啪精品| 丁香五月激情综合| 噜噜色婷婷| 色五月婷婷五月丁香五月激情五月视频| 久久九网| 久久激情视频| 中美日韩成人在线| 99精品在线观看视频| 另类在线观看视频|