色五月色开心色婷婷色丁香,五月婷婷丁香花综合网,婷婷丁香五月激情综合在线,五月婷婷六月丁香动漫,婷婷丁香五月激情综合在线,丁香花中文字幕在线观看,播五月色五月开心五月网,开心激情综合网,狠狠色丁香婷婷综合最新地址,丁香视频在线观看,狠狠做六月爱婷婷综合av,久久激情五月丁香伊人

ARTICLE DETAIL

資訊詳情

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

context-mode:基于目錄切換的項(xiàng)目上下文管理器

context-mode:基于目錄切換的項(xiàng)目上下文管理器 說實(shí)話一開始做這個工具的時候我并沒有打算把它當(dāng)個項(xiàng)目來做。當(dāng)時手頭同時維護(hù)著三個項(xiàng)目一個是內(nèi)部管理系統(tǒng)一個是給客戶端寫的 SDK 示例庫還有一個是個人博客的改造。每個項(xiàng)目的目錄結(jié)構(gòu)、格式化規(guī)范、需要注入給 AI 編程助手的項(xiàng)目說明甚至終端里的提示符風(fēng)格都不一樣。我每天的狀態(tài)就是切目錄 → 改環(huán)境變量 → 翻 README 確認(rèn)約定 → 復(fù)制一份項(xiàng)目說明貼給 AI 助手 → 開始干活。切到下一個項(xiàng)目重復(fù)一遍。中間只要漏一步輕則 linter 報錯刷屏重則把測試環(huán)境的配置打到生產(chǎn)目錄里。后來我實(shí)在受不了了花了兩個晚上寫了一個叫 context-mode 的小工具。它的核心思路很簡單把項(xiàng)目上下文做成可切換、可繼承、可自動加載的配置文件進(jìn)入目錄即生效。這篇文章我盡量把設(shè)計思路、實(shí)現(xiàn)細(xì)節(jié)、踩過的坑都寫清楚希望能給同樣被上下文碎片化折磨的人一點(diǎn)參考。1. 先厘清問題我們說的上下文到底指什么動手寫代碼之前我花了很長一段時間去定義上下文這個詞。因?yàn)槿绻B要解決問題的邊界都不清楚工具很容易做成一個什么都做、什么都做不好的瑞士軍刀。1.1 被分散在五六個地方的隱性信息以我當(dāng)時的日常開發(fā)為例一個項(xiàng)目的上下文其實(shí)散落在這些地方終端環(huán)境變量NODE_ENV、API_BASE_URL、DATABASE_URL每次換項(xiàng)目都得手動 export更麻煩的是這些變量有時還需要區(qū)分開發(fā)、測試、預(yù)發(fā)布環(huán)境。項(xiàng)目約定文檔README 里寫的代碼風(fēng)格、commit 規(guī)范、目錄職責(zé)說明。平時用不上但每次有新人加入或者你休假回來再看自己的代碼時這些信息就變得特別重要。給 AI 助手注入的提示詞當(dāng)時我在嘗試用 AI 輔助寫代碼但每次都得把項(xiàng)目的技術(shù)棧、目錄結(jié)構(gòu)、編碼規(guī)范貼進(jìn)對話里。對話一長AI 就忘了前面的約束還得重新貼。編輯器/終端配置比如 Prettier 的 printWidth、eslint 的規(guī)則集。雖然項(xiàng)目里通常有配置文件但有些團(tuán)隊(duì)規(guī)范不屬于某個具體工具而是人的約定。運(yùn)行腳本與啟動方式啟動開發(fā)服務(wù)器是npm run dev還是make serve測試命令是什么這些信息通常埋在 package.json 或 Makefile 里但查找成本不低。這些信息并不是不存在而是太分散了。分散帶來的問題就是每次切換項(xiàng)目你都要重新人肉加載一遍。而人最擅長的事情就是忘記加載。1.2 為什么簡單的 dotenv 方案不夠用可能你會說用 direnv 或者 dotenv 不就解決了嗎我在初期確實(shí)試過這兩條路但它們解決的是不同層面的問題。direnv 解決的是環(huán)境變量隨目錄自動加載的問題它能在你cd進(jìn)目錄時自動執(zhí)行.envrc里的腳本。這很強(qiáng)大但也意味著它把執(zhí)行任意 shell 代碼的權(quán)力交給你如果配置不當(dāng)很容易出現(xiàn)進(jìn)了目錄就莫名其妙多了幾十個環(huán)境變量的情況排查起來很痛苦。dotenv 解決的是把配置寫進(jìn).env文件的問題但它本身不會自動化你必須依賴框架的支持或者自己在啟動時手動加載。而且.env文件通常承擔(dān)不了項(xiàng)目約定文檔和AI 提示詞這種文本型上下文的職責(zé)。我需要的是一個更完整的抽象context-mode 應(yīng)該管理進(jìn)入一個項(xiàng)目時我需要讓哪些東西處于正確狀態(tài)這一整件事環(huán)境變量只是其中一部分。1.3 我對 context-mode 的定義經(jīng)過兩天的折騰和思考我把 context-mode 的定義收斂成一句話一個輕量的、基于目錄切換的上下文管理器。它允許你為每個項(xiàng)目或全局環(huán)境定義一組上下文配置包括環(huán)境變量、項(xiàng)目說明文本、目錄別名、啟動命令模板然后在進(jìn)入項(xiàng)目目錄時自動加載并生效。這個定義有幾個關(guān)鍵點(diǎn)基于目錄切換觸發(fā)不是手動 source也不是啟動時讀取而是通過監(jiān)聽cd操作觸發(fā)加載。配置是聲明式的用 YAML而不是 Shell 腳本。這樣可讀性好也能在加載前做校驗(yàn)。不只管環(huán)境變量還包括文本型的上下文項(xiàng)目說明、可復(fù)用的命令。這給后面接入 AI 助手留了接口。2. 核心設(shè)計配置結(jié)構(gòu)、優(yōu)先級與加載時機(jī)定義清楚問題之后設(shè)計就變得順理成章了。但真正實(shí)現(xiàn)的時候還是有幾個設(shè)計決策花了比較多的時間這里逐一說明。2.1 三層的配置結(jié)構(gòu)我把配置分成三層分別存儲在不同的位置層級存儲位置作用范圍典型用途全局層~/.context-mode/global.yaml所有項(xiàng)目通用環(huán)境變量如EDITOR、個人偏好用戶層~/.context-mode/users/用戶名.yaml當(dāng)前用戶的個人項(xiàng)目個人開發(fā)機(jī)的專屬配置不入庫項(xiàng)目層項(xiàng)目根/.ctx/config.yaml當(dāng)前項(xiàng)目項(xiàng)目相關(guān)的環(huán)境變量、說明、命令模板全局層和用戶層的區(qū)別在于如果一臺開發(fā)機(jī)只有你在用這兩層其實(shí)可以合并。但如果存在多用戶共用開發(fā)機(jī)或者你需要把個人配置和機(jī)器配置分開管理的場景區(qū)分開來會有幫助。我認(rèn)識的一些團(tuán)隊(duì)會把用戶層的配置模板放進(jìn) dotfiles 倉庫管理項(xiàng)目層的配置則要求項(xiàng)目成員統(tǒng)一維護(hù)。2.2 配置文件的字段設(shè)計每個配置文件的核心結(jié)構(gòu)長這樣version: 1 name: my-project env: NODE_ENV: development API_BASE_URL: http://localhost:3000/api LOG_LEVEL: debug texts: ai_context: | 這是一個基于 FastAPI React 的項(xiàng)目。 后端代碼在 app/ 目錄下前端在 frontend/ 目錄下。 提交信息請使用 conventional commits 規(guī)范。 不要修改 database/migrations/ 下已有的遷移文件。 commands: dev: npm run dev test: npm run test -- --watch lint: npm run lint:fix aliases: dc: docker-compose shell: prompt_prefix: my-projectenv 字段用于注入環(huán)境變量texts 字段用于存儲任意文本段落ai_context是我專門給 AI 助手用的commands 字段定義常用的項(xiàng)目命令aliases 定義終端別名shell.prompt_prefix 用來修改終端提示符讓你一眼知道自己當(dāng)前在哪個項(xiàng)目里。2.3 優(yōu)先級規(guī)則小范圍覆蓋大范圍三層配置之間的優(yōu)先級很明確項(xiàng)目層 用戶層 全局層這個規(guī)則的含義是項(xiàng)目層的同名環(huán)境變量會覆蓋用戶層和全局層的定義。這么設(shè)計的邏輯很簡單——離項(xiàng)目越近的配置對項(xiàng)目的了解越準(zhǔn)確。全局層定義的API_BASE_URL是通用默認(rèn)值但項(xiàng)目 A 可能有自己的 API 地址這時候項(xiàng)目層的配置必須獲勝。在實(shí)際實(shí)現(xiàn)中我采用的是逐層合并的策略先讀全局層再讀用戶層最后讀項(xiàng)目層同名字段后讀的覆蓋先讀的。YAML 文件之間的嵌套結(jié)構(gòu)比如命令和別名也遵循同樣的規(guī)則但環(huán)境變量層面因?yàn)椴淮嬖谇短赘采w邏輯更簡單直接。2.4 加載時機(jī)shell hook 的設(shè)計要讓進(jìn)入目錄自動生效落地必須和 shell 集成。在 bash 和 zsh 中都有現(xiàn)成的chpwd鉤子機(jī)制可以在目錄切換后觸發(fā)自定義函數(shù)。但在實(shí)現(xiàn)細(xì)節(jié)上有一個很容易被忽略的問題hook 里不能直接修改當(dāng)前 shell 的環(huán)境變量。如果你在 hook 里面寫export FOObar其實(shí)是在子 shell 里執(zhí)行的對當(dāng)前 shell 完全不生效。所以正確的做法是hook 函數(shù)把需要導(dǎo)出的變量作為字符串輸出然后通過eval在當(dāng)前 shell 里執(zhí)行。我最終的方案是# 在 .bashrc 或 .zshrc 中 _context_mode_hook() { local output output$(context-mode apply --export 2/dev/null) if [ -n $output ]; then eval $output fi } # 定義 PROMPT_COMMAND 或者在 zsh 中用 add-zsh-hook if [ -n $ZSH_VERSION ]; then autoload -Uz add-zsh-hook add-zsh-hook chpwd _context_mode_hook else PROMPT_COMMAND_context_mode_hook; $PROMPT_COMMAND fi # 初始加載 _context_mode_hookcontext-mode apply --export命令會輸出類似export NODE_ENVdevelopment; export API_BASE_URL...;的片段然后由 hook 里的eval真正執(zhí)行。3. 從零實(shí)現(xiàn)核心邏輯其實(shí)只有兩百行整個工具的核心邏輯并不復(fù)雜我把代碼量控制在一千行以內(nèi)。這里只講幾個關(guān)鍵的實(shí)現(xiàn)點(diǎn)。3.1 目錄搜索向上查找 .ctx 目錄context-mode 的apply命令第一步是定位當(dāng)前目錄所屬的項(xiàng)目根。做法是從當(dāng)前目錄開始逐級向上查找.ctx目錄找到的第一個就是項(xiàng)目配置。from pathlib import Path def find_project_root(start: Path) - Path | None: current start.resolve() while True: if (current / .ctx / config.yaml).exists(): return current if current.parent current: return None current current.parent這段代碼要注意兩個點(diǎn)先resolve()再開始查找避免路徑里有..或符號鏈接導(dǎo)致查找路徑和實(shí)際路徑不一致。邊界條件current.parent current說明已經(jīng)到根目錄必須終止循環(huán)否則會無限循環(huán)。如果找到項(xiàng)目根就加載項(xiàng)目層配置否則只加載全局層和用戶層配置。3.2 變量展開支持嵌套引用環(huán)境變量之間有時會互相引用。比如你配置一個BASE_URL然后API_URL基于它拼接env: BASE_URL: http://localhost:8080 API_URL: ${BASE_URL}/api這里需要支持${VAR}的占位符展開。實(shí)現(xiàn)上我用正則找出所有占位符然后遞歸查詢import re from typing import Dict ENV_RE re.compile(r\$\{([^}])\}) def expand_env_vars(value: str, env: Dict[str, str], stack: set) - str: def replacer(match): key match.group(1) if key in stack: raise ValueError(fcircular reference detected: {key}) if key not in env: return match.group(0) stack.add(key) expanded expand_env_vars(env[key], env, stack) stack.remove(key) return expanded return ENV_RE.sub(replacer, value)注意我用了一個stack集合來檢測循環(huán)引用。如果兩個變量互相引用簡單的遞歸展開會死循環(huán)這個檢測能在第一時間報錯而不是等到棧溢出。3.3 輸出的幾種模式apply命令根據(jù)不同的使用場景輸出不同的格式。這是上下文切換工具能不能融入工作流的關(guān)鍵。# apply.py def generate_exports(merged: dict) - str: lines [] for key, value in merged[env].items(): escaped value.replace(, \\) lines.append(fexport {key}{escaped};) return \n.join(lines) def generate_json(merged: dict) - str: import json return json.dumps({ env: merged[env], texts: merged[texts], commands: merged[commands], }, ensure_asciiFalse, indent2)--export給 shell hook 用--json給其他程序比如 TextMate 插件、CI 腳本、AI 輔助工具用。后面我會講到這個--json輸出后來成了接入 AI 助手的關(guān)鍵接口。3.4 解釋為什么不用配置文件驅(qū)動 hook有人可能會問既然要執(zhí)行 shell 層面的操作比如設(shè)置 aliases為什么不直接在.ctx/config.yaml里允許寫 shell 代碼然后 source 它我最初確實(shí)想過這種方案但很快否定了。原因有三安全性如果項(xiàng)目層的配置可以寫任意 shell 代碼那么克隆一個惡意倉庫進(jìn)到目錄就執(zhí)行了惡意腳本這是巨大的安全風(fēng)險。聲明式配置沒有這個問題最多是設(shè)置一些環(huán)境變量和別名??梢浦残許hell 腳本天然依賴當(dāng)前 shell 的類型和機(jī)器環(huán)境聲明式配置可以跨 shell、跨平臺復(fù)用??尚r?yàn)性YAML 結(jié)構(gòu)可以被解析和檢查shell 腳本則很難靜態(tài)分析。所以 context-mode 的設(shè)計原則是狀態(tài)變更全部通過 export 和 alias 白名單實(shí)現(xiàn)不讓配置直接接觸 shell。4. 實(shí)測場景三種用法把上下文真正串起來工具寫完之后我在自己的開發(fā)環(huán)境里用了一周期間不斷調(diào)整。這里分享三個最典型的實(shí)測場景以及效果。4.1 場景一AI 編程助理的上下文注入這個場景應(yīng)該是最多人需要的。我用 AI 輔助寫代碼時最大的痛點(diǎn)就是它不記得項(xiàng)目約定。每次開新對話都要重新貼一遍項(xiàng)目說明貼得不夠詳細(xì)時它就會給出不符合項(xiàng)目風(fēng)格的代碼。有了 context-mode 之后我寫了一個小腳本ctx-ai#!/usr/bin/env bash # 將項(xiàng)目上下文輸出為適合粘貼給 AI 助手的文本 context-mode apply --json | plutil -convert raw -r -o - 2/dev/null || \ context-mode apply --json | python3 -c import json, sys ctx json.load(sys.stdin) for key, text in ctx[texts].items(): print(f {key} ) print(text) print() 然后在 AI 助手的 Custom Instructions 或者每次對話開始時先粘貼ctx-ai的輸出。實(shí)測體驗(yàn)是AI 對項(xiàng)目結(jié)構(gòu)的理解、代碼風(fēng)格的遵循程度明顯提升因?yàn)樯舷挛恼f明里寫清楚了前端在什么目錄后端 API 使用什么框架不要修改哪個目錄下的文件這些關(guān)鍵約束。這個場景的核心價值不在于省了幾行字而是讓 AI 的回復(fù)質(zhì)量從一開始就基于正確的上下文而不是靠它猜。后來我還做了一步自動化的嘗試寫了一個代理腳本把ctx-ai的輸出自動拼接到發(fā)送給 AI API 的請求里。這個已經(jīng)脫離了 context-mode 本身的功能范圍但也驗(yàn)證了--json輸出作為接口的包容性。4.2 場景二多項(xiàng)目環(huán)境變量自動切換第二個直接受益的場景是多項(xiàng)目并行開發(fā)時的環(huán)境變量混亂問題。之前的情況是項(xiàng)目 A 需要NODE_ENVstaging項(xiàng)目 B 需要NODE_ENVdevelopment項(xiàng)目 C 需要DATABASE_URL指向本地 Postgres。一旦你忘了切換就可能把 staging 的配置用在 development 的項(xiàng)目里。雖然不至于出大事故但排查起來很費(fèi)時間。配好 context-mode 后的流程變成了# 項(xiàng)目 A 的 .ctx/config.yaml env: NODE_ENV: staging API_BASE_URL: https://staging.example.com DATABASE_URL: postgres://localhost:5432/project_a_staging # 項(xiàng)目 B 的 .ctx/config.yaml env: NODE_ENV: development API_BASE_URL: http://localhost:3000 DATABASE_URL: postgres://localhost:5432/project_b_dev切換目錄的瞬間環(huán)境變量就自動變成對應(yīng)項(xiàng)目的值再也不用手動 export。我還特意在shell.prompt_prefix里配置了項(xiàng)目縮寫終端提示符會顯示[proj-a] ? src/這樣的格式低頭看一眼就知道自己在哪。這里額外分享一個細(xì)節(jié)環(huán)境變量寫進(jìn)配置文件之后項(xiàng)目之間的隔離性會變強(qiáng)但也要注意同一個變量在不同項(xiàng)目里的值是否有潛在沖突。比如兩個項(xiàng)目都定義了PORT如果你在 global 層也定義了PORT8080最后生效的是項(xiàng)目層的值。相反如果某個項(xiàng)目沒定義PORTglobal 層的8080就會泄漏進(jìn)去。所以我的建議是global 層只放真正通用的變量比如EDITOR、LANG不要放可能因項(xiàng)目而異的變量。4.3 場景三新成員上手與團(tuán)隊(duì)約定沉淀第三個場景屬于長期價值向的。對于團(tuán)隊(duì)項(xiàng)目context-mode的項(xiàng)目配置文件可以作為機(jī)器可讀的 README存在。新成員克隆倉庫后只要安裝 context-mode 并進(jìn)到項(xiàng)目目錄環(huán)境變量、啟動命令說明都會自動就位。為了這個場景我后來又給配置文件增加了一個字段docs: overview: | 本項(xiàng)目用于處理用戶訂單的生命周期管理。 包含訂單創(chuàng)建、支付回調(diào)、庫存扣減、售后流程。 技術(shù)棧Spring Boot 3 MySQL 8 Redis。 onboarding: | 1. 本地啟動依賴docker-compose up -d mysql redis 2. 復(fù)制 application.dev.yaml 并修改數(shù)據(jù)庫密碼 3. 訪問 http://localhost:8080/actuator/health 確認(rèn)服務(wù)啟動新成員可以用context-mode doc onboarding快速看到上手指引也可以直接用context-mode text ai_context輸出給 AI 助手。這實(shí)際上把項(xiàng)目經(jīng)驗(yàn)從一個不可查詢的 Word 文檔變成了結(jié)構(gòu)化的、可以自動加載的資產(chǎn)。5. 踩坑記錄這些問題沒試過真的想不到我前面說核心邏輯只有兩百行但真正把它接入日常開發(fā)流程時是花了一半以上的時間在解決各種邊緣問題。這些坑不一定都能通過代碼邏輯規(guī)避但提前知道可以讓后來者少走彎路。5.1 shell hook 的環(huán)境變量導(dǎo)出時機(jī)最典型的坑就是我之前提到的子 shell 問題。第一次把_context_mode_hook的函數(shù)寫好后我在代碼里直接調(diào)用os.environ[FOO] bar然后發(fā)現(xiàn)當(dāng)前 shell 一點(diǎn)反應(yīng)都沒有。排查了半天才意識到context-mode是一個獨(dú)立進(jìn)程它只能修改自己的進(jìn)程環(huán)境變量不能影響父進(jìn)程 shell。這個問題的教訓(xùn)是任何外部工具都沒法直接改變 shell 的環(huán)境只能通過輸出文本 父 shell eval的組合拳來實(shí)現(xiàn)。我后來在 README 里專門用粗體強(qiáng)調(diào)了這一點(diǎn)context-mode 本身不修改環(huán)境變量它只輸出你需要執(zhí)行的 export 語句。5.2 eval 的安全與轉(zhuǎn)義問題既然用了eval轉(zhuǎn)義問題就繞不開。如果環(huán)境變量的值里帶有單引號直接拼進(jìn)export FOO...就會出錯。我在前面代碼里用了value.replace(, \\)這個技巧簡單解釋一下假設(shè)值里有單引號Its a test。直接拼export FOOIts a test是錯誤的因?yàn)?shell 會把字符串切成It和s a test。正確的做法是用\來表示一個轉(zhuǎn)義的單引號。替換后的結(jié)果是export FOOIt\s a test;。這個寫法雖然看起來很丑但確實(shí)是 shell 中安全的單引號轉(zhuǎn)義方案。后來我還遇到了值里包含$的坑。比如某個密碼是pa$$word如果用雙引號包會觸發(fā)變量展開必須用單引號包。這也是我堅(jiān)持在generate_exports里用單引號包裹所有值的原因。5.3 符號鏈接目錄的根查找find_project_root里我特意用了resolve()這源于一次實(shí)際遇到的問題。我的項(xiàng)目目錄是一個符號鏈接指向掛在別的盤符下的真實(shí)目錄。第一次實(shí)現(xiàn)時我沒有 resolve導(dǎo)致符號鏈接路徑下解析出的項(xiàng)目配置路徑和實(shí)際路徑不一致出現(xiàn)了能找到配置文件但加載失敗的詭異情況。resolve()會把符號鏈接解析成真實(shí)路徑這樣目錄查找和配置文件讀取都在同一套路徑體系下進(jìn)行問題就消失了。副作用是如果同一個真實(shí)目錄有兩個符號鏈接指向它用不同鏈接進(jìn)入時context-mode 感知到的項(xiàng)目根是同一個真實(shí)目錄這是預(yù)期行為因?yàn)榕渲梦募旧砭驮谡鎸?shí)目錄下。5.4 hook 重入保護(hù)還有一個必須處理的細(xì)節(jié)hook 自身的觸發(fā)時機(jī)。_context_mode_hook被定義在PROMPT_COMMAND里這意味著每次終端顯示提示符之前都會調(diào)用一次。當(dāng)context-mode apply --export輸出的內(nèi)容很多時可能會導(dǎo)致終端每次都執(zhí)行一長串 export體驗(yàn)很差。更嚴(yán)重的問題是潛在的死循環(huán)如果在配置的環(huán)境變量里包含了一個會觸發(fā) hook 的操作不太可能但理論上存在或者 eval 的執(zhí)行本身又改變了目錄就可能觸發(fā)遞歸調(diào)用。解決方案是加一個簡單的重入保護(hù)_CONTEXT_MODE_LAST_DIR _context_mode_hook() { local current_dir$PWD if [ $current_dir $_CONTEXT_MODE_LAST_DIR ]; then return 0 fi _CONTEXT_MODE_LAST_DIR$current_dir # ... 實(shí)際邏輯 }這個值記錄了上次應(yīng)用的目錄只有目錄變化時才重新執(zhí)行 apply。這既避免了重復(fù) export也在很大程度上防止了重入。5.5 變量展開的循環(huán)引用檢測前面提到過expand_env_vars函數(shù)的stack參數(shù)這是實(shí)際踩坑后才加的。一開始我的實(shí)現(xiàn)很簡單直接遞歸展開def expand_env_vars(value, env): return ENV_RE.sub(lambda m: env.get(m.group(1), m.group(0)), value)直到某天我在配置文件里誤寫了一個自引用env: FOO: ${FOO}-suffix然后apply命令就棧溢出崩潰了。排查過程倒是很直觀但加一個循環(huán)引用檢測也讓工具在面對更復(fù)雜的錯誤配置時更加健壯。5.6 YAML 解析中的類型陷阱YAML 解析有個經(jīng)典坑NODE_ENV: true如果寫成NODE_ENV: true解析出來的就是一個布爾值而不是字符串。這會導(dǎo)致環(huán)境變量變成export NODE_ENVtrue看起來沒區(qū)別但某些框架做字符串比較時可能出問題。為了避免這種隱式類型轉(zhuǎn)換我在解析后的校驗(yàn)階段做了一步強(qiáng)制類型轉(zhuǎn)換所有 env 字段的值都必須解析為字符串如果不是字符串就顯式轉(zhuǎn)換成字符串并給出一個警告。雖然這只是一個小小的防御措施但避免了大量由類型歧義導(dǎo)致的詭異 bug。5.7 與 direnv 共存的沖突處理在我用上 context-mode 之前部分項(xiàng)目已經(jīng)在用 direnv。兩者同時存在時優(yōu)先級可能會打架。我的選擇是context-mode 只負(fù)責(zé)管理環(huán)境變量direnv 負(fù)責(zé)執(zhí)行復(fù)雜的 shell 級操作。規(guī)則是如果項(xiàng)目根目錄存在.ctx/config.yamlcontext-mode 的配置優(yōu)先生效direnv的.envrc可以往后放。實(shí)現(xiàn)方式是在apply函數(shù)里顯式檢查.envrc的存在并在輸出中優(yōu)先生成 context-mode 的 export。這種做法不一定適合所有人但至少在我的環(huán)境里它提供了一個清晰的遷移路徑。6. 進(jìn)階優(yōu)化讓 context-mode 更貼合日常使用基礎(chǔ)功能完成之后我又加了幾個提升體驗(yàn)的小功能這里挑兩個最有用的展開講。6.1 動態(tài)變量與系統(tǒng)信息有些場景下環(huán)境變量的值需要依賴當(dāng)前系統(tǒng)狀態(tài)。比如開發(fā)時你需要把本機(jī)的局域網(wǎng) IP 注入到環(huán)境變量或者根據(jù)當(dāng)前 git 分支動態(tài)切換環(huán)境。我在配置里支持了${ctx:git_branch}和${ctx:hostname}這類動態(tài)變量env: GIT_BRANCH: ${ctx:git_branch} HOST_IP: ${ctx:lan_ip}這些變量在處理時就近展開def resolve_dynamic(key: str) - str: if key ctx:git_branch: import subprocess return subprocess.check_output( [git, rev-parse, --abbrev-ref, HEAD], stderrsubprocess.DEVNULL ).decode().strip() if key ctx:hostname: import socket return socket.gethostname() if key ctx:lan_ip: # 簡化實(shí)現(xiàn)從 socket 推斷 import socket s socket.socket(socket.AF_INET, socket.SOCK_DGRAM) try: s.connect((8.8.8.8, 80)) return s.getsockname()[0] finally: s.close() return f${{{key}}}這里特別注意ctx:git_branch的執(zhí)行依賴當(dāng)前目錄在 git 倉庫內(nèi)如果不在倉庫內(nèi)會拋異常所以要捕獲異常并返回空字符串。這種功能看起來華而不實(shí)但在多分支并行開發(fā)的工作流里非常實(shí)用比如你切到release分支時環(huán)境變量能自動變成生產(chǎn)配置。6.2 按場景加載子組還有一個常用場景同一個項(xiàng)目開發(fā)環(huán)境和測試環(huán)境需要不同的環(huán)境變量。雖然可以直接在項(xiàng)目層的 env 里寫死但更優(yōu)雅的方式是支持場景子組scenes: dev: env: API_BASE_URL: http://localhost:3000 DEBUG: true test: env: API_BASE_URL: https://test.example.com DEBUG: false active_scene: dev使用context-mode apply --scene test可以臨時切換到 test 場景默認(rèn)使用active_scene里指定的場景。這個設(shè)計在測試 API 集成時特別有用避免為了切換場景而反復(fù)編輯配置文件。6.3 與編輯器/IDE 的協(xié)作我使用 context-mode 的方式不止在終端里還通過輸出 JSON 喂給編輯器腳本。舉個例子在我的 Neovim 配置里有一個 Lua 腳本會在加載項(xiàng)目文件時讀取context-mode apply --json的輸出動態(tài)設(shè)置 pylsp 的路徑參數(shù)和 flake8 的 max-line-length。這樣同一份配置同時服務(wù)于終端和編輯器真正做到一處配置、處處生效。類似地VS Code 用戶可以在.vscode/settings.json里引用環(huán)境變量{ python.analysis.extraPaths: [ ${env:PROJECT_SRC_PATH} ] }前提是 VS Code 的終端里環(huán)境變量已經(jīng)被 context-mode 注入過了。如果是從 GUI 啟動的 VS Code那么需要通過 shell 啟動 VS Code或者在.vscode/settings.json里改用context-mode apply --json的輸出。7. 最后再聊幾點(diǎn)維護(hù)心得工具用了大概半個月之后我停下來回看整個從零搭建的過程有幾個認(rèn)知層面的收獲值得記錄。第一工具的價值在于減少切換成本而不是減少配置成本。一開始我花了很大精力去美化配置文件結(jié)構(gòu)、簡化 YAML 語法后來發(fā)現(xiàn)在實(shí)際使用中配置一次的成本并不高真正高的是每次切換項(xiàng)目時重新加載腦內(nèi)上下文的成本。所以 context-mode 的核心必須放在加載要快、要準(zhǔn)、要自動而不是一味追求配置的多功能性。第二聲明式配置的邊界就是工具的邊界。當(dāng)用戶想在配置文件里寫 shell 腳本來實(shí)現(xiàn)進(jìn)入目錄就做一堆事情時最好停下來想一想這事應(yīng)該由更通用的工具比如 Makefile、腳本來負(fù)責(zé)塞進(jìn) context-mode 只會增加維護(hù)復(fù)雜度。我現(xiàn)在的原則是環(huán)境變量、文本說明、別名這些狀態(tài)交給 context-mode操作邏輯、流程控制這些行為交給項(xiàng)目自己的自動化腳本。第三安全邊界一定要硬。既然 context-mode 可以注入環(huán)境變量那就意味著它有能力影響項(xiàng)目進(jìn)程的行為。如果項(xiàng)目層配置能被不懷好意的人改動那就可能注入惡意變量。所以我現(xiàn)在只從可信來源克隆倉庫同時會在apply之前校驗(yàn)配置文件哈希項(xiàng)目維護(hù)者可以把預(yù)期哈希寫在.ctx/checksum文件中。這個機(jī)制雖然增加了一些流程負(fù)擔(dān)但對于團(tuán)隊(duì)協(xié)作場景我認(rèn)為是必要的。最后再分享一個小技巧如果你也和我一樣經(jīng)常用 AI 輔助編程建議在texts.ai_context里不僅寫項(xiàng)目技術(shù)棧還要寫清楚這個項(xiàng)目不做什么。比如本項(xiàng)目不做用戶注冊模塊統(tǒng)一走 SSO不要在 service 層直接操作數(shù)據(jù)庫請走 repository 層。這些負(fù)面約束往往比正面約束更能提升 AI 輸出的準(zhǔn)確性。我實(shí)測下來加了這些約束之后AI 生成的代碼方向明顯更符合團(tuán)隊(duì)的實(shí)際預(yù)期。context-mode 這個項(xiàng)目目前還在持續(xù)迭代不過它的核心價值已經(jīng)被驗(yàn)證了當(dāng)你把所有隱性上下文都顯式化、自動化之后無論是在終端命令、IDE 配置還是 AI 協(xié)作場景整個開發(fā)體驗(yàn)都會順暢很多。有類似困擾的朋友不妨試試類似的思路不一定要用我這個工具但把項(xiàng)目上下文管理起來這件事絕對值得投入時間。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
欧美第五页| 翔田千里AⅤHD无码| 黄片aaaaa一区| 亚洲清纯唯美| 国产久久一区二区三区野外在线| 亚洲暴力强奸AV| 丰满人妻-区二区三区| 国产农村妇女精品1区二区| 国产日韩精品无码去免费专区国产| 日韩资源网| 久久99亚洲精品久久99果| 天天享受天天看| AV污污污污| 老司机福利青青草| 浪人综合网| 日韩91网| 俺也射| 25国产精品免费观看| 日韩精品字幕| 最新国内自拍av免费| 国产97色在线 | 亚洲| 91在线美女| 亚洲激情综合| 久99热| 黄色在线网站| 人妻丰满熟妇一区二区三| 天天在线91| 久草资源在线视频官方总站日韩丝袜美腿 | 九九亚洲| 国产夫妻性生活视频| 玖玖资源中文字幕制服丝袜| 国产黄a三级三级三级av在线看 | 欧美色图另类图片| 97视频www| 国产农村妇女一区二区| 色婷婷99| 国产乱伦一二三区| 日韩不卡毛片Av免费高清| 国产一区二区二区按摩精品啪视频| 日韩一级二级三级免费看完整版国语版 | 少妇人妻好深太紧了vr91| 天天日夜干| 国产自产91区13区| 色色色热| 蜜桃无码AV一区二区| 人人看人人插| 91亚洲欧洲| 青青草AV色| 91人妻久久久久久久久久久久久| 久久曰曰| 亚洲AV无码天美传媒一区| A片 AV一级在线播放观看免费 | 极品销魂美女一区二区| 国产成人在线观看网址| com 首页 18岁 禁区 女优 免费 精选 同城 | 亚洲国产综合久久久性感熟妇| 黑丝内射一区二区三区| 国产亚州精品美女久久久免费| 亚欧免费| 五月婷婷丁香六月| 嗯嗯啊啊视频在线看| 激情AV| 亚洲成人久久美女| 1024日韩| 欧美日韩亚洲高清不卡一区二区三区| 天天影视综合网欧美精品| 五月色综合| 精品久久一区二区三区四区五区| 蜜臀av在线播放一区二区三区| 精品人妻伦一二三区久久| 97色色视频| 超碰99热| 久草新免费| 四虎视频在线观看| 变态综合色| 国产精品第一页国产大屁股视频免费区| 亚洲熟女乱综合一区二区在线-...亚洲国产日韩欧美一区二区三区,久久久久久精 | 青娱乐国产盛宴视频| 国产一级作爱毛片| 亚洲激情AV| 91视频观看网站| 女生自91网站| 天天爽入口| 人人摸人人入| 在线观看岛国有码| 日韩欧美视频青青| 亚洲男人天堂2013| 97伊人超碰| 久久久久少妇| 无色无码| 日本九九久久99播| 在线电影亚洲色图| 三级日韩一区二区三区| 香蕉在线一区二区三区| 久久大精品乱码视频人妻熟女| 深夜激情| 高潮毛片无遮挡高清免费| 亚洲欧洲精品视频发布| 春色综合免费| 91久久久久久久| 欧美成人黄网色网站| 五月天婷婷成人网| silk lablo在线观看一区二区| 综合91网| 国产精品爆乳懂色蜜乳| 亚洲中文字幕妇伦久久| 精品对白久久不卡| 日本中文字幕在线电影| 99黄页网站| 青青草大香蕉视频| 国产精品999zyz| 动漫片子网站3黄| 999国产精品999久久久久久| 99这里只有精品国产| 婷婷五月天激情网| 91在线免费观看处女| 日本黄页视频在线观看| 超清中文乱码字幕| 99热9| 九九九九九九九九九五码| 日本不卡在线二区三区| 午夜男女爽爽爽在线视频| 97在线免费看| 97干97色| 天天狠| 蜜桃一区二区三区| 美国精品国产精品| 东京热99999| 在线中文字幕| 一本道综合色图| 亚洲资源网| 呦呦一区| 久久久久骚| 啊啊啊啊免费视频| 围产精品一区二区三区视频播放| 亚洲AV无码久久精品蜜桃小说| 国产熟女无套内射| 日韩成人网址| 999精品久久久久久久| 久久精品亚洲成a人天堂| 蜜桃精品一区二区三区久在线| 久久黄片国产一区二区| 亚洲日韩少妇一道本视频| 日韩免费福利在线观看| 欧洲乱码视频| www.zbzhongsen.com| 91热| 天天插天天操| 亚洲国产天堂| 久久久免费视频18| 天天搞在线综合网| 五月天婷婷小说| 欧美性战999| 手机在线视频国内精品| 蜜臀网 一区| 丁香九月激情啪| 蜜臀99久久国产| 久久曰曰| 飘花国产午夜精品不卡| 国产精品日日摸天天碰| 久操高青| 婷婷中文网| 中日韩久久久免费看| 睡产熟女乱伦| 亚洲欧洲成人在线电影| 福利五区| 操碰91| 国内外毛片在线观看| 五月婷婷激情网| 最新AV在线| 国产污视频麻豆传媒一区二区 | 国产成人天堂| 亚洲一区深夜| 黄色高清无码无码破解免费暗网| 一起草视频在线| 亚洲欧美日产国产91毛片| 午夜寂寞欧美| 欧美一二三| 综合九九| 亚洲三级网址久久最新| 99热这里是精品| 国内精品嫩模A∨私拍小视频| 熟女露脸激情自拍视频| 欧美性爱一内片一区二区三区| 日韩丰满熟妇| 成人线上超碰| 国产高清1234区| 在线看的av| 97碰久久| 久射吧| 天天摸天天插天天日| 啪啪免费| 亚洲无无码αⅴ每日更新| 久久久精品视频欧州站| 蜜桃视频精品一区二区三区| 黄在线| 午夜毛片亚洲精品片国产久久久| 久久久月天| 久久综合女优| 97国产色图 | 日本99一区二区| 天天插天天插| 97国产成人精品免费视频| 99精彩视频| 乱伦a片视频| 大肥女高潮bbwbbwhd视频| 人乳av| 今日头条成人一区二区三区四虎精品| 美女久久久久久久| 中文字幕av久久爽Av| 丁香五月婷婷基地| 日本午夜久久电影| 91超碰人人操| 国产精品成人在线| 丁香成人五月天| 91成人久久| 口爆吞精在线观看| 9999免费精彩视频| 久久久久网站-538在线视频-欧美永久乱码 | 国产精品香蕉| 久操免费视频| 噜噜噜亚洲精| 97手机日韩| 亚洲综合嫩| 大香蕉在线视频重口味毛片在线| 天天看片麻豆| 97er欧美性| 99re69| 欧美狠狠鲁| 啊啊啊啊啊操我视频| 9久超碰| 麻豆国产尤物AV| 999狠狠综合| 蜜臀99999| 人妻社区男人天堂| 青青草久久| 国产欧美日产一区二区三区 - 国产欧美日 | 色情综合| 九九热超碰97亚洲最新香蕉 | www.超碰在线| 日韩国产中文字幕| 中文字幕丝袜人妻| 美女黄码视频午夜| 97碰碰色| 国产强奸乱伦xd| 免费在线黄片视频| www.91色综合| 第二页中文字幕| 日本熟妇色熟妇在线视频播放| 国产情色第一第二页在线观看| 欧美肥臀在线| 超碰免费人妻人人| 国产精品熟女丝袜一区二区| 色999;丁香五月| 91女网站| 在线中文AV| 男人的天堂va在线| 国产 日韩 欧美高清| 中国女人内射6XXXXX| 丁香六月啪啪| 欧洲乱码视频| 欧美最大综合网| 密臀在线一区尤物| 日韩欧美成人午夜福利| 亚洲高清在线| 中文97国产| 久久机热| 伊人网在线点播| 伊人专区一区二区三区| 成人精品在线| 欧美大干日韩| 久久99精品九九久久久婷婷| 亚洲免费成人精品电影| 五月天丁香欧洲日韩| 丝袜无码a片| 综合熟妇一区二区三区| 以及麻豆国产入口在线观看免费| 亚洲欧美精品91| 国产av热热色| 久艹日日日| 国产女人操逼视频| 极品粉嫩少妇视频| 国产强奸乱伦无码视频| 日欧操屄视频| 美女黑人91神马| 亚欧色图在线激情| 亚洲男人bt天堂| 97网址97| se吧提供国产乱老熟视频胖女人| 国产欧美一区二区| 四虎在线观看视频| 97爱啪| 97亚洲综合| 噜噜吧,噜噜色,噜噜| 亚洲欧美日韩有码| 日本东京热久久久电影| 国产青一二三| 清纯唯美亚洲综合| 99色视频| 国产白丝网站| 韩国黄色片精品久久久| 啊啊啊啊免费视频| 97色干| AV有码在线| 久久99人妖视频国产| 超碰天天操你比| 青娱乐二区免费| 1956日韩精品| 日躁天天爽爽| 一二三四免费视频| 乱操9999| 欧亚乱色熟一区二区三四区| 欧美色图亚洲激情| 久久久啊啊| 97 色综合| 在线无码操| 99热精品国产| 亚洲AV不卡在线观看| 蜜乳av一区二区| 青青草视频导航官网| 国产肏逼网站| 欧美熟妇亚洲版| 欧美 日韩 亚洲 春色| 东北女人被操| 色五天伊人| 久操九九九九九九九九九九九九九九九九九九九九九九九九九九九九 | 精品视频一区二区| 亚欧无码在线| 91劲爆| 92人人操人人| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 欧洲站一级二级三级h| av在线资源| 日本亚洲熟女视频| 97日韩欧美亚洲| 91精品国产麻豆国产自产在| 国产精品熟女一区二区三区| 午夜欧美J进J出白浆流出久久久 | 日本午夜操逼| 国产精品久久久久久久久久久久| 91丨九色丨东北熟女| 国产免费一区2区3区| 97色97好| 国产福利第一视频| 亚欧无码线免费观看视频| 亚洲淫乱骚妇AV| 91人妻人人澡人人爽人人精品| 又摸又舔在线观看网站| 欧美熟妇视频| 国产综合永久精品日韩鬼片| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区老师黑人潮喷一 | 亚洲乱色熟女一区| 天天影视91看看| 97最新在线播放视频| 五月丁香六月综合缴清无码| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 成人怡红院| 日本九九九九| 超碰色男人操熟女| 欧美一区二区三区不卡高清视频| 亚洲AV在线资源| 中文高清一区二区的| 国产成人午夜视频网址| 亚洲欧美91| 中文字幕丝袜人妻| 曰韩无码777| 色网在线视频观看免费| 熟女人妻一区二区三区| 久久大精品乱码视频人妻熟女| 婷婷丁香久久| 日韩av在线免费网站| 97这里只有精品| 亚洲熟妇综合久久久久久| 黄色欧美性爱视频| 蜜臀人妻少妇久久在线观看| 日韩国产乱子伦App| 欧美极品美女aaaaaa级黄片| 丝袜综合网| 亚洲在钱| 色偷综合| 亚州中文字幕超碰97| 超碰在线人妻不卡| 97超碰人人模人人拍人人| 日B操| 97啪啪| 黄色免费网页无码| 色五天伊人| 久久天天艹| 国产色图乱伦| 天天射天天操天天干天天吃2018| 91人妻熟女| 东北熟女91| 91痴汉| 亚洲无码一区成人免费午夜| 亚洲少妇免费视频\| 蜜臀va69| 国产999精品久久久| 东北老女人的激情视频| 欧洲亚洲天堂精品| 我想要啊 啊 啊| 久久久精品久久| 春色综合免费| 夜夜嗨一区| 天天92av| 欧美亚洲今日在线| 精品成人av一区二区三区在线| 久久亚洲欧美一区二区三区-亚洲国产精品第一区二区 | 亚洲AV无码国产成人| 立川理惠加勒比无码| 亚洲综合中文字幕有码| 国模限制级电影| 天天流夜夜操| 91夜夜蜜桃臀1区2区3区| 天堂麻豆天美| julia国产在线| 深喉吞精| 日本性交操一区二区不卡系列| 人人妻人人爱人人玩| 欧美欧美啪啪视频| 久久精品国产99精品亚洲蜜... | 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 亚洲日韩人妻中文字幕一区| 两女互慰AV高潮喷水在线观看| 国产女人操逼视频| 91黑丝露脚| 欧美精品第3页| 97色欧州| 夜色97| 亚洲色交| 国产精品一二三在线看| 五月婷婷六月丁香| 99黄页网站| 亚洲骚男同com| 国产中出内射一区二区| 日人妻视频91| 亚欧中文字幕在线视频| 加勒比无码毛片| 色在线视频导航| www.av在线视频| 超碰亚洲欧美日韩无| 中文字幕、久久精品国产2020、久久综合久久自在自线精品自、亚洲 | 日本欧美一区二区三区视频麻豆| 一级黄碟在线看| 久久久天堂| 级做a爱无码性色永久免费| 探花在线免费观看视频国产一区| 天天综合精品| 欧美图片校园春色| 国产精品自在线发布| 一起草av| 欧美精品黑人猛交高潮| 国产黄色 A 片免费看| 中文字幕 av v| 天天日骚逼熟女| 国产精品国产自产高清AV| 狠狠综合网| 97午夜剧场日韩| 尤物视频偷拍免费| 粉嫩粉嫩一区性色AV片| 一区=区三区视频| 男人的天堂kva| 立川理惠加勒比无码| 丝袜喷水在线| 欧美呦呦性爱| 熟女一区二区| 丁香七月婷婷| 精彩国产视频播放1区2区| 99热线麻豆| 精品欧美А∨无码黑人大荫蒂| 欧美综合综合| 熟女探花啪啪| 婷婷五月天成人网| 九久久九九久视频| 久久精品国产免费观看99| 啊啊啊啊二区好大| 夜色综合| 丁香五月av| 青娱乐 青青青操 日逼| 日韩无码精品综合久久| 日韩精品三区四区| 日本爽爽爽爽爽爽免费视频| 国产丝袜美腿美女麻豆| 超碰在线人妻中文字幕| 中文字幕超碰CAO| av网站免费线看| 欧美熟妇操操视频| 亚洲精品国产熟女| 中文欧丝袜诱惑| 亚欧视频在线| 国产夫妻性生活视频| 亚洲欧洲日韩国产自在线| 中文字幕二区| 凸凹视频在线观看| 国产免费内射视频| 校园春色亚洲欧洲| 被男人吃奶很爽的毛片| 亚洲精品人伦一区二区| 亚洲精品日韩国产欧美| 午夜爽爽爽| 又黄又爽在线观看视频| 婷婷av在线中文字幕| 亚洲精品天天影视综合网| 久久久久久电影| 精品久久大胆人体| 婷婷10月天青娱乐| renqi久久久久久久久久久久| 亚洲激情在线| 极品粉嫩一区二区| 看黄片视频免费| 久久激情视频| 超碰在线人妻不卡| 日日操丁香五月天| 亚洲成人AB| 97在线免费看| 加勒比伊人| 欧美日韩亚洲电影| 99热这里只有精| 成人av在线播放| 日产精品久久久一区二区| 日韩精品99999| 啪啪啪东京| 日韩精品黄片免费观看| 欧美精品庄| 69综合网| 92福利社视频| 秋霞 色色| 亚洲自拍青操视频| 麻豆天美久久91| 99久久久久久亚洲精品不卡| 91精品91久久久中77777| 99久久无色码| 久久国内| 免费a级毛片av无码久久精品中文字幕| 2000亚洲男人天堂| 国产精品对白内射| 亚洲AV永久无码一区仙野| 99无码狠狠久久| 久久华人网| 综合干干干av久久久综合网 | 亚洲精品aa久久伊人| 中文字幕久久婷婷丁香五月天| 香蕉色网| 日本欧美m v精品网站加| 无套内射性感少妇视频| 综合五月婷婷亚洲一区| 久草视频分类在线| 色www精品视频在线观看| 亚洲综合网电影91| 青草av在线| 日韩色欲久久一二三四区| 97久久久| 亚洲图片第一页| 蜜屁av| 久久久久久裸体| 日本九九久久99| 欧美成人亚洲精品| 少妇天堂网络| 国产欧美一区激情交| 51国产午夜精品视频| 天天热精品| 91久久18禁| 日本 成 人 小说 电影 一区二区| 日韩不卡毛片Av免费高清| 欧美一区二区福利在线| 国产女人和拘做爰视频| 欧美一二三级精品在线| 影音先锋少妇| 国产97在线 | 亚洲| 伊人久久AV诱惑悠悠| 啊啊啊啊啊啊啊啊在线观看| 狠狠操狠狠燥| 亚洲AV不卡在线观看| 中文字幕国产| 久久日韩肥臀| 欧美性暴力猛交| 九九九一二三| 国内毛片欧美香蕉精品| 天天躁日日躁成人字幕aⅴ| 99精品国产户外露出| 啪啪啪精品| 久久久久久亚洲Av无码| 浪人综合网| 久草免费在线一区二区| 婷婷五月天补不补| 成人网欧美风情| 超碰人妻中文在线| 男人天堂无码| 亚洲欧美清纯| 国产一区免费午夜视频| 国产日韩精品无码去免费专区国产| 亚洲精品一区二区精华| 26uuu国产成人综合| 干婷婷综合网| 国产久久久9999| 久久天天躁日日躁狠狠躁| 91精品免费| 九九九九一级| 亚洲色人阁| 九九精品99| 国产一区二区在线电影| 97操97色| 夜夜免费视频| 日本成a人v网站在线观看| 亚洲小说视频| 九九九九97| 国产尹人在线视频免费| 九九玖玖精品| 99re在线视频国产| 91狠狠综合网| 欧美劲爆视频一区二区| 久久侵犯人妻爽爽爽| 97爱碰| 91精品网站| 久久中文字幕人妻熟av女蜜柚| 久久97资源 网| 91足交| 91在线视频国产网站| 美女91色黄18| 亚欧色图在线激情| 久草在| 久操国产在线| 岛国艾薇凹凸视频天堂| 日韩精品国产精品五码一区二区| 97精品久久久久中文字幕| 大香蕉日韩| 亚洲欧美在线观看2021| 日韩9999| 草草草草视频| 亚洲色综合| 欧美精品三区| 免费成人在线观看91| 91美女丝袜诱惑视频| 午夜精品久久久久久久99| 思思视频免费看网站| 日韩丝袜人妻AV| 日韩精品视频在线观看一卡二卡| 奇米狠999| 四虎午夜影院| 中文字幕老熟妇黄色视频| 亚洲宗合网| 亚洲国产欧美一区二区潘金莲| 欧美在线|亚洲| 岛国不卡超碰护士AV在线播放| 日本爽爽爽爽爽爽免费视频| 欧美亚洲日韩人妻在线观看| 婷婷激情五月综合| 无码最新| jiujiujiujingpin| 久久春色| 97蜜桃综合| 翔田千里AV无码秘 三区| 90后性网国产欧美| 72av视频| www.激情| 久久东京热久久| 超碰人人妻| 精品国产乱码久久久| 啪啪啪大香蕉| 三四中文字幕| 超碰79人人乐| www.色吧5.com| 成人熟女视频一区二区三区| av毛片aaaaa免费看| 久久久啊啊| 国产对白刺激视频| 亚洲一二三四区在线免费看视频| 伦伦成年午夜免费视频| 日韩欧美中文字亚洲慕| 免费A V在线| 天天干人人乐| 亚洲免费精品一区| 自拍偷拍国产欧美日韩韩| 啊好爽快点-国产一区二区三区撒尿在线-成人AV | 精品人妻1区| 99热8| 欧美日韩性爱精品| 97亚洲中文| 91最新综合| 国内亚洲精彩视频在线| 97人妻人人躁人人玩人人| 青青草日韩无码| 无码抄逼网| 青青草公开在线免费不卡视频| 亚洲欧洲综合视频在线| 成年人网站在线免费观看| 久久久久久久 九九九九九九九| 啪啪啪精品| 国产精品大屁股999| 六月丁香啪啪啪| 13小男生GAY自慰脱裤子| 国产精品久久久久久久久久久久久久久 | 国产成人午夜视频网址| 久久久久久久久9| 真实高潮91| 中文字幕91页| 国产精品剧情| 欧美亚洲宗合色性图| 欧美男人一区| 国产亚洲女v在线观看| 亚洲 欧美 日本 国内 首页| 超碰午夜在线| 日韩中文字幕在线视频观看| 欧美精品二区视频在线| 欧美后入式| 91色综合激情| 鲁鲁色综合网| 亚洲欧洲国产综合av| 日韩一级欧美一级国产一级台湾| 色97国产69香蕉| 久久精品亚洲婷婷| 久久99视频| 国产小黄片在线免费观看| 深夜国产福利| 香港久久久| 97超碰中文| 蜜色网色哟哟| 丁香六月激情| 国产综合网站在线播放 | 玖色AV| blacked精品一区国产| 日本成人免费一区二区三区| 久久婷婷苹果| 黑人干亚洲| 大香蕉宅男伊人| 国产视频三区四区| 神马精品视频| 丁香激情五月天| 白嫩国模丰满一二三区| 国产精品网址| 亚洲国产成人精品久久久国产成人一区二区| av影院十区| 色哟哟av| 欧美激情亚洲情色| 俞拍自拍| 人人澡人人爽人人精品| 人妻嗯啊啊在线播放| 新婚人妻扶着粗大强行坐下| 免费观看国产小粉嫩喷水精品午| 91人人爽人人爽人人人,gav福利视频导航,日韩欧美亚洲国产字幕四区 | 亚洲欧洲激情卡通另类文学四射小说网站| 欧美第一页| 99热18| 天堂8在线新版官网| 国产精品久久久久久久黄无码| 91P0RNY大屁股人妻| 亚洲 欧美 精品专区 极品| 国产9区| 一区二区影视| 精品福利| 日韩97| 乱伦熟女专区| 人人贴人人摸| 99老司机精品视频在线观看| 国产强奸乱伦xd| 国产 日韩 欧美高清| 欧美亚洲一级在线观看| 自拍偷拍 高清无码| 中国一级αV| 影音先锋日本乱伦| 亚洲成人无码影院| 国产熟女乱论| 激情小说五月天| 精品熟女一区=区三区| 久久最新免费视频23| av亚洲天堂资源网站| 欧美有码激情视频一区二区三区| 国产乱不卡| 亚洲色图欧美色18直播在线| 俞拍久久国应视频| 成人午夜高潮av猛片| 另类小说综合网| 伊人五月天激情| www色色com| 丰满人妻一区二区三区四| 欧美久久久15P| 69丨亚洲丨精品丨入口免费播放| 亚洲涩图欧美| 亚洲毛片基地专区| 熟女少妇视频| 亚洲精品国产无码高清| 午夜色婷婷| 欧美 亚洲 制服 精品| 男人的天堂2000| 亚洲熟女人妻中文字幕一区二区| 男人的天堂2019| 久久av一级av少妇av高潮| 久久大香蕉| 一区中文字幕二区日韩| 亚洲天堂久久| 国产一国产一级毛片古装| 国内亚洲精彩视频在线| 黑丝内射一区二区三区| 在线黄色污污网站| 日本不卡一二区| 国产高清MV操逼视频| 五月丁香| 欧洲精品久久| 欧美性爽xyxOOOO| 欧美日韩一区二区三区四区蜜桃| 无码免费一区二区三区啪啪| 五月开心久久AV官网| 少妇精品| 亚洲综合精品国产一区| 九九热超碰97亚洲最新香蕉 | 欧美综合自拍| 黄片免费久久久久久久| 中文字幕艹艹| 亚州中文字幕超碰97| 九九无码| 五月天婷婷色色| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 久久黄片国产一区二区| 婷婷综合在线观看| 精品国产乱码| 日本不卡免费二区| 超踫中文字幕| 日本淫穴在线| 色在线视频导航| 婷婷色婷婷| 亚洲色香| 99这里只有精品国产| 无码欧美有限公司| 亚洲清纯综合| 国产 日韩 欧美 中文 另类,国产 欧美 另类 制服 变态,高清 日韩 欧美 中文,高 | 欧美老妇综合网| 青青五月天| 国产精品视频精品一二| 久久视频,这里只有精品| 精品久久久av无码免费| 在线v中文字幕一区二区三区| 婷婷精品| 日本高清一本二本免费不卡| 蜜乳视频网站| 人妻久热在线| 超碰美国| 精品久久久久,69国产成人精| 91老司机精品| 夜夜草网站| 97久操| 亚洲成人免费电影| 亚洲无限观看| 国产精品视频自拍在线| 超碰97色色| 爱妃国产亚洲视频中文字幕| 成人日韩中文字幕| 久久久久人妻二区精品叶可怜| 中文字幕日产av人| 激情天天视频| 最新精品久久蜜桃 | 韩国免费播放一级毛片| 蜜臀av中字字幕网站| 大色综合| 久久中文色图| 日韩欧美aⅴ综合网站发布| 亚洲中文字幕日产无码久久| 性久久| 亚欧美综合网。| 国产 日韩 另类 视频一区爱| 亚洲第一男人天堂| 亚洲最大无码中文字幕网站| 欧成人精品一区二区三区| 日韩乱码Av| 日韩欧美性爱电影在线观看| 久久爽爽精品| 手机看片1025| 78精品| 麻豆精品A片免费观看| 操逼逼中文字幕| 台湾佬中文娱乐网久久久久久久久久com | 欧美乱伦专区| 一区 欧美 日韩 麻豆| 操逼www.| 99少妇| 伊人影院在线理论播放| 色官网色综合| 97网色| 蜜臀人妻少妇久久在线观看| 亚洲黄色a级片| 99热在线播放| 亚洲第一页欧美| 黄色av一区二区在线| 偷拍精品一区二区三区| 天天色综合图片| 欧美精品一区二区少妇免费A片 | 超碰久草| 九九成人| 国产一区二区在线电影| 91丨九色丨东北熟女| 国产天天骚| 国产激情在线| 欧美性天天影院| 高清视频一区| 五十路六十路素人熟女| 牛牛aV| 影音先锋国产精品| 亚洲国产欧美日韩精品一区二区三区,国产一区二区三区在线看片,欧美性猛交 XXX | 伊人久久大香线综合无码| 久操99| 亚洲永久AV无码精品秋霞| 天天操天天干美女网址导航| 日韩欧美福利视频看看| 99久久精品无码一区二区| 丰满人妻-区二区三区免费| 一区二区不卡免费| 亚洲第一成人影院色播| 人妻插插人妻人| 在线岛| 久久久九97| 97在线观视频免费观看| 久久男人| 少妇丝袜在线观看AV| 一个色导综合| 欧美丰满熟妇XXXX性ppX人交| 91AV入口| 台欧久久精品视频| 日本成人免费一区二区三区| 乱伦1色页| 日本不卡三级网在线播放| 密臀国产在线| 涩涩涩综合| 用力操死我| 麻豆天美一区二区| 超碰在线99| 日日日日做夜夜夜夜做无码97| 私人尤物在线精品不卡| 日韩久久三区| 就去色综合| 操逼网站视频漫画国产| 国产精品粉嫩福利在线| 国产精品岛国片在线观看| 青青草玖玖爱| 中日韩欧美精品无码AⅤ一区二区| 欧美老妇综合网| 天天爽夜夜爽夜夜爽精| 蜜臀亚洲中文| 国产精品高清2021在线| 成人精品视频一区二区| 国产精品久久久吖| 伊人伊人LD| 五月色网| 91无遮挡| 另类图片五月天| 亚州宗合另类| 草草草视频在线免费看| 亚洲码和欧洲精品激情系列| 国产免费操逼| 精品无av| 亚洲欧美性生活| 人人潮人人摸| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区二区 | 四虎视频在线观看| 色噜噜精品一区二区三| 国产精品人妻无码久久久老鸭窝| 91美女视频直播| 日韩99神马视频播放片在线播放| av在线观看不卡网站| 熟女少妇一区二区三区| 极品久久久久久久久久久久久久| 欧美系列在线一区二区| 91欧洲国产成人久久精品网站| 欧美日韩国产男人| 日本福利社| 最新日产中文在线麻豆| 欧美天天综合网| 精品一区二区三区蜜桃| 亚洲成人在线资源| 欧美中字二区| 久久国产精品91| 天天操夜夜操| 久久五月丁香| 中文字幕在线观看丝袜| 大香网伊人久久综合| 日韩AV无码中文一区二区| 啪啪性爱免费视频| 亚洲色婷婷久久91| 人人操我人人干| 无码精品久久| www.狠狠操| 国产一区二区欧美日本| 色一色综合网| 日韩不卡a级视频专区| 成人a大片在线观看| 色噜噜人妻丝袜a∨先锋影 | 欧美性天天影视| 激情网五月天| 久久丁香| 九九九综合精品| 大香蕉啪啪啪啪在线| 91少妇香蕉久久精品| 久久一区二区加油站| 久9爱经典视频| 超碰97男女| 久一区久久蜜桃| 人妻丝袜一区二区三区在线| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 亚洲少妇视频| 美女被啪到深处抽搐视频| 国产在线播放成人免费| 性爱乱伦视频免费| 久久草在线综合视频| 久都青青视频| 激情情色五月天| 色眯眯av| 大香蕉乱级| 九九热视频在线观看| 91九九九小逼| 日韩少妇无码| 欧亚在线视频| 日本不卡码黄色| 欧美天天搞| 欧美日韩国内不卡| 大香蕉啪啪啪啪在线| 97在线免费观看| 成人性爱电影网| 在线小视频| 女欧美一区二三区| 蜜臀久久99精品久久综合| 久久风骚城市| 午夜福利国产欧美日韩夜夜| 中文字幕成人| 国产夫妻性生活视频| 黄色无码高清黄色无码网站| 国产成人bd在线观看| 中文字幕文字幕无码一区二区三区电影99| 久久99国产精品| 99精品无码| 久久超碰日韩精品| 日本欧美韩国日产片片在线看免| 亚洲好色人妻| 99re国产中文字幕| 欧亚三区动漫| 丰满人妻-区二区三区免费| 欧美综合色图片| 加勒比大香蕉视频在线| 舔足天天操天天射| 中文字幕免费观看| 免费亚洲黄色视频在线观看| 国产二区三区粉嫩在线| 亚洲 日韩 丝袜 熟女 变态| 97少妇人妻中文字幕久久| 亚洲一区日韩| 日韩视频中文字幕| 欧美日韩人妻婷婷一区| 丰满人妻av一区二区三区| 欧美午夜熟妇黑人精品91| 人妻夜夜爽天天爽麻豆三区网站| 岛国1区2区3区在线观看| 亚精品无码毛片一区二区三区| av婷婷色婷婷色六月| 精品国产乱码久久久久久网站入口| 精品国产99| 韩国一级婬片A片AAAAA| 麻豆精品一区二区三区四区免费观看| 青青草日本中文字幕| 欧美性爱十八禁| 亚洲国产亚洲天堂| 乱伦3P视频| 亚洲成av人片色午夜乱码| 竹菊一区二区三区AV线| 殴美综合色88| 大香蕉九九| 秋霞网—男女啪啪亚洲免费体验区 | 国产精品自拍欧美在线| 久久只有精品| 日本免费二区三区| 自拍视频大全亚洲专媒视频/一区二区三区| 欧美午夜视频精品久久| 26UUU欧美日本| 操国产高清| 人人妻人人爽人人精品| 欧洲亚洲人人爽爽视频| 蜜臀久久久国产| 久久国产成人精品国产成人亚洲 | 精品成人动漫一区二区| 精品少妇999| 91欧美综合| 92一区二区| 我要色综合网| 亚洲阿v天堂在线| 另类小说综合网| 国产女人与拘做受视频免费| 91午夜无码| 人妻aa| 激情综合婷婷| 欧美操逼一二三区| 天天操狠狠日夜夜干超碰撸com视频在线观看| 日本一本道A级黄色毛片试看60分钟| 国产色精品午夜大片| 天天爽人人综合免费7799| 日韩一级欧美一级在线观看| 99久久99九九99九九九| 国产 码在线成人网站| 啊啊啊啊啊在线视频| 97精品久久久久久久| 9999九九九久久久| 日逼97| 97天堂| 综合操逼| 嗯嗯啊啊啊好舒服| 天天综合~91| 熟女激情综合网| 久久色情| 999 久久久| 亚洲天堂男| 欧美欧美啪啪视频| 激情第四色| 亚洲欧洲色情高清| …中文字幕亚洲乱,97人妻无码费视…| 四虎国产成人精品免费一女五男| 无码heyzo高清一区| 蜜臀av中文字幕| 久久久久久久人妻丝袜| 99精品网| 99精品无码| 2017人人操,人人摸| 丰满人妻-区二区三区免费| 九九久久国产精品怡红院| 日本亚洲嫩草影院啪啪| 乱伦熟女区| 久热网| 久久AV无码网址| 色臀aV| 狠狠色狠狠色狠狠五月| 夜草欧美| 熟妇的味道HD中文字幕| 亚洲AO在线| 国内精品a| 天美传媒av在线| 天天搞在线综合网| 久草老司机| 亚洲AV免费在线| 久久在肏| 区一二区日韩亚洲乱码av电影| 国产在线能看的你懂的| 国产11页| 日本国产亚洲一区在线观看| 屌妞视频久久久久久久| 欧美一级做a爰片免费视频| 玖日综合网| 草草影院在线视频| 乱伦一区二区三区‘| 爱妻综合网| 超碰三级秋霞| 国产成年精品高清在线观看91| 日韩干B| 一区二区首页| 精品久久人妻成人网| 少妇久久| 久久婷婷一区| 玖玖综合.com| 一,爱啪啪,在线免费视频| 国产suv一区二区三区6| 99re69| 亚洲人成网www| 人人操人人搞人人草| 人人妻人人澡人人爽久久av| 亚洲男人的天堂AV| 欧美.亚洲.另类.丝袜.制服.诱惑| 国产AV色黄看到爽| 国产欧美在线观看免费观看|