[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-11411":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":15,"starSnapshotCount":15,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},11411,"pordee","kerlos\u002Fpordee","kerlos","ตอบสั้นๆ ก็เข้าใจแบบพอดีๆ","",null,"JavaScript",298,28,1,0,3,6,50,9,58.39,"MIT License",false,"main",true,[26,27,28,29],"ai","claude","claude-code-plugin","thai","2026-06-12 04:00:55","# pordee (พอดี)\n\n> ทำไมใช้คำเยอะ ตอบสั้นๆ ก็เข้าใจ\n\nได้แรงบันดาลใจมาจาก [caveman](https:\u002F\u002Fgithub.com\u002FJuliusBrussee\u002Fcaveman) — pordee เป็นรุ่นภาษาไทยที่ตัด token ทิ้งโดยไม่เสียความถูกต้องทาง technical\n\n---\n\n`pordee` คือ Claude Code plugin สั่งให้ agent ตอบภาษาไทยกระชับ — ตัดคำสุภาพ (ครับ\u002Fค่ะ\u002Fนะคะ), คำลังเล (อาจจะ\u002Fน่าจะ), และคำเชื่อมที่ไม่จำเป็นทิ้ง เก็บ technical term อังกฤษไว้ตามเดิม\n\nผล: ใช้ token น้อยลง 60-75% เนื้อหาเท่าเดิม\n\n---\n\n## ติดตั้ง\n\n### ผ่าน Claude Code plugin (แนะนำ)\n\n```bash\nclaude plugin marketplace add kerlos\u002Fpordee\nclaude plugin install pordee@pordee\n```\n\nหลังติดตั้งเสร็จ hooks จะถูก register อัตโนมัติ — เริ่ม session ใหม่แล้ว `\u002Fpordee` ใช้ได้ทันที\n\n---\n\n## วิธีใช้\n\n### Slash command\n\n| คำสั่ง | ผล |\n|---|---|\n| `\u002Fpordee` | เปิด default level (full) |\n| `\u002Fpordee lite` | โหมดเบา — ตัดคำสุภาพและ filler ออก แต่ grammar เต็ม |\n| `\u002Fpordee full` | โหมดเต็ม — ตัดให้สั้นที่สุด |\n| `\u002Fpordee stop` | ปิด |\n| `\u002Fpordee-stats` | ดูสถิติ token ของ session ปัจจุบัน |\n| `\u002Fpordee-stats --share` | สรุปสถิติ 1 บรรทัด (copy-paste ได้) |\n\n### Keyword (ไม่ต้องพิมพ์ slash)\n\nพิมพ์คำเหล่านี้เป็นข้อความปกติในแชต — pordee จะเปิด\u002Fปิดให้อัตโนมัติ ต้องเป็นข้อความทั้งบรรทัด ไม่ใช่ส่วนหนึ่งของประโยค\n\n| Keyword | ผล |\n|---|---|\n| `พอดี` | เปิด |\n| `พอดีโหมด` | เปิด |\n| `พูดสั้นๆ` | เปิด |\n| `หยุดพอดี` | ปิด |\n| `พูดปกติ` | ปิด |\n\n---\n\n## ระดับ (Levels)\n\n### 🪶 Lite — `\u002Fpordee lite`\n\nตัดคำสุภาพ (ครับ\u002Fค่ะ\u002Fนะคะ), คำลังเลใจ (อาจจะ\u002Fน่าจะ\u002Fจริงๆแล้ว), และคำทักทาย (ได้เลยครับ\u002Fแน่นอน) ทิ้ง แต่เก็บ grammar เต็ม อ่านแล้วยังเป็นภาษาไทยปกติ professional\n\n### ⚡ Full — `\u002Fpordee` หรือ `\u002Fpordee full` (default)\n\nตัดเหมือน lite + ตัด particle ที่ซ้ำซ้อน (ที่\u002Fซึ่ง\u002Fว่า\u002Fอยู่\u002Fกำลัง) + ตัด nominalizer (การ-, ความ-) + ใช้คำสั้น (ดู ไม่ใช่ ตรวจสอบ) + ประโยคสั้นได้\n\nPattern: `[ของ] [ทำ] [เหตุผล]. [ขั้นต่อ].`\n\n---\n\n## ก่อน \u002F หลัง (Before \u002F After)\n\n### ตัวอย่าง 1 — \"ทำไม React component ถึง re-render?\"\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~80 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~45 tokens · 44% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~22 tokens · 73% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"แน่นอนครับ ผมยินดีจะอธิบายให้นะครับ จริงๆ แล้วเหตุผลที่ React component ของคุณ re-render นั้น น่าจะเกิดจากการที่คุณส่ง object reference ใหม่เป็น prop ในทุกครั้งที่ component ถูก render ซึ่งทำให้ React มองว่า prop เปลี่ยน และทำการ re-render component ลูก ดังนั้นคุณอาจจะลองใช้ useMemo เพื่อ memoize object นั้นดูครับ\"\u003C\u002Ftd>\n\u003Ctd>\"React component re-render เพราะส่ง object reference ใหม่เป็น prop ทุกครั้งที่ render ทำให้ React มองว่า prop เปลี่ยน และ re-render component ลูก ลองใช้ useMemo เพื่อ memoize object นั้น\"\u003C\u002Ftd>\n\u003Ctd>\"Object ref ใหม่ทุก render. Inline object prop = ref ใหม่ = re-render. ห่อด้วย \u003Ccode>useMemo\u003C\u002Fcode>.\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  ████░░░░░░  44% saved        │\n│  Full  ███████░░░  73% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n### ตัวอย่าง 2 — \"อธิบาย database connection pooling\"\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~70 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~35 tokens · 50% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~18 tokens · 74% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"ครับ การทำ database connection pooling นั้น โดยทั่วไปแล้วก็คือการที่เราเก็บ connection ของ database ที่เปิดไว้แล้ว เพื่อนำกลับมาใช้ใหม่อีกครั้ง แทนที่จะต้องเปิด connection ใหม่ทุกครั้งที่มี request เข้ามา ซึ่งจะช่วยลด overhead ของการทำ TCP handshake และ authentication ได้อย่างมีประสิทธิภาพ\"\u003C\u002Ftd>\n\u003Ctd>\"Connection pooling เก็บ connection database ที่เปิดไว้แล้ว เพื่อนำกลับมาใช้ใหม่ ไม่ต้องเปิดใหม่ทุก request ลด overhead ของ TCP handshake และ authentication\"\u003C\u002Ftd>\n\u003Ctd>\"Pool reuse connection ที่เปิดไว้. ไม่เปิดใหม่ทุก request. ข้าม TCP handshake.\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  █████░░░░░  50% saved        │\n│  Full  ███████░░░  74% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n### ตัวอย่าง 3 — Bug report (auth middleware)\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~55 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~30 tokens · 45% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~14 tokens · 75% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"ครับ ผมตรวจสอบให้แล้วนะครับ ปัญหาที่คุณเจอน่าจะเกิดจาก bug ใน auth middleware ครับ จริงๆ แล้วในส่วนของ token expiry check นั้น โค้ดใช้เครื่องหมาย \u003Ccode>&lt;\u003C\u002Fcode> แทนที่จะเป็น \u003Ccode>&lt;=\u003C\u002Fcode> ซึ่งทำให้ token ที่หมดอายุพอดีไม่ถูก reject ดังนั้นเราควรจะแก้ตรงจุดนี้ครับ\"\u003C\u002Ftd>\n\u003Ctd>\"Bug อยู่ที่ auth middleware ส่วน token expiry check ใช้ \u003Ccode>&lt;\u003C\u002Fcode> แทนที่จะเป็น \u003Ccode>&lt;=\u003C\u002Fcode> ทำให้ token ที่หมดอายุพอดีไม่ถูก reject แก้:\"\u003C\u002Ftd>\n\u003Ctd>\"Bug ที่ auth middleware. Token expiry ใช้ \u003Ccode>&lt;\u003C\u002Fcode> ไม่ใช่ \u003Ccode>&lt;=\u003C\u002Fcode>. Fix:\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  █████░░░░░  45% saved        │\n│  Full  ████████░░  75% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n### ตัวอย่าง 4 — \"แนะนำอาหารกลางวันให้หน่อย\"\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~70 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~32 tokens · 54% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~14 tokens · 80% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"ได้เลยครับ จริงๆ แล้วการเลือกอาหารกลางวันก็ขึ้นอยู่กับหลายปัจจัยนะครับ เช่น งบประมาณ เวลาที่มี และความต้องการทางโภชนาการของคุณ ถ้าคุณอยากทานอาหารที่ทำง่ายและมีประโยชน์ ผมขอแนะนำว่าน่าจะลองทำสลัดไก่ย่างดูครับ เพราะว่ามีโปรตีนสูงและไม่ใช้เวลาเตรียมนานเลย\"\u003C\u002Ftd>\n\u003Ctd>\"อาหารกลางวันขึ้นอยู่กับงบ เวลา และโภชนาการ ถ้าอยากกินง่ายและมีประโยชน์ ลองสลัดไก่ย่าง โปรตีนสูงและเตรียมไม่นาน\"\u003C\u002Ftd>\n\u003Ctd>\"งบ + เวลา + โภชนาการ. ง่ายและดี → สลัดไก่ย่าง. โปรตีนสูง, เตรียมเร็ว.\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  █████░░░░░  54% saved        │\n│  Full  ████████░░  80% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n### ตัวอย่าง 5 — \"เที่ยวเชียงใหม่ ไปเดือนไหนดี\"\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~75 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~30 tokens · 60% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~12 tokens · 84% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"ครับ ถ้าคุณอยากไปเที่ยวเชียงใหม่ ผมแนะนำว่าน่าจะไปช่วงเดือนพฤศจิกายนถึงกุมภาพันธ์ครับ เพราะว่าเป็นช่วงที่อากาศเย็นสบาย ไม่ร้อนเกินไป และไม่มีฝนตกบ่อยเหมือนช่วงอื่นๆ จริงๆ แล้วเดือนธันวาคมก็เป็นเดือนที่นิยมที่สุดเลยนะครับ แต่ก็จะคนเยอะหน่อย\"\u003C\u002Ftd>\n\u003Ctd>\"ไปเชียงใหม่ ช่วงพฤศจิกายน-กุมภาพันธ์ดีที่สุด อากาศเย็นสบาย ไม่ร้อน ฝนน้อย ธันวาคมนิยมที่สุดแต่คนเยอะ\"\u003C\u002Ftd>\n\u003Ctd>\"พ.ย.-ก.พ. ดีสุด. อากาศเย็น, ฝนน้อย. ธ.ค. คนเยอะ.\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  ██████░░░░  60% saved        │\n│  Full  ████████░░  84% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n### ตัวอย่าง 6 — \"วิธีนอนหลับให้สนิท\"\n\n\u003Ctable>\n\u003Ctr>\n\u003Cth width=\"34%\">🗣️ Normal\u003Cbr>\u003Csub>~70 tokens\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">🪶 Lite\u003Cbr>\u003Csub>~32 tokens · 54% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003Cth width=\"33%\">⚡ Full\u003Cbr>\u003Csub>~14 tokens · 80% saved\u003C\u002Fsub>\u003C\u002Fth>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd>\"ครับ การนอนหลับให้สนิทนั้นมีหลายวิธีนะครับ ก่อนอื่นเลย คุณควรจะหลีกเลี่ยงการดื่มกาแฟหรือเครื่องดื่มที่มีคาเฟอีนหลังบ่ายสาม จริงๆ แล้วก็ควรจะปิดหน้าจอทุกชนิดอย่างน้อย 30 นาทีก่อนนอนนะครับ และพยายามเข้านอนเวลาเดิมทุกวันเพื่อให้ร่างกายปรับนาฬิกาชีวิต\"\u003C\u002Ftd>\n\u003Ctd>\"นอนหลับสนิทมีหลายวิธี เลี่ยงคาเฟอีนหลังบ่ายสาม ปิดหน้าจอ 30 นาทีก่อนนอน เข้านอนเวลาเดิมทุกวันเพื่อปรับนาฬิกาชีวิต\"\u003C\u002Ftd>\n\u003Ctd>\"เลี่ยงคาเฟอีนหลังบ่าย 3. ปิดจอ 30 นาทีก่อนนอน. เข้านอนเวลาเดิม → ปรับ circadian.\"\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n```\n┌─────────────────────────────────────┐\n│  Lite  █████░░░░░  54% saved        │\n│  Full  ████████░░  80% saved        │\n└─────────────────────────────────────┘\n```\n\n---\n\n## กลไกการทำงาน\n\n1. ติดตั้ง plugin → Claude Code register hook ของ pordee อัตโนมัติ\n2. เริ่ม session ใหม่ → SessionStart hook อ่าน state ที่ `~\u002F.pordee\u002Fstate.json`\n3. ถ้า `enabled=true` → inject กฎ pordee เข้า context ของ session\n4. ทุก turn ที่ user พิมพ์ → UserPromptSubmit hook\n   - ตรวจ trigger ใน prompt (`\u002Fpordee`, `พอดี`, `หยุดพอดี`, ฯลฯ)\n   - update state ถ้าเจอ trigger\n   - ฉีด reminder ของ level ปัจจุบันเข้า context (กันไม่ให้ model drift)\n5. State อยู่ที่ `~\u002F.pordee\u002Fstate.json` — ถาวรข้าม session\n\n---\n\n## สถิติ (Stats)\n\n`\u002Fpordee-stats` แสดง token usage ของ session ปัจจุบัน + ประมาณการ token ที่ประหยัดได้จากการใช้ pordee\n\n```\nพอดี Stats\n──────────────────────────────────\nSession:  ...projects\u002Fdemo\u002Fsession.jsonl\nTurns:    12\n──────────────────────────────────\nOutput tokens:         8,450\nCache-read tokens:     2,100\n──────────────────────────────────\nEst. without pordee:   21,667\nEst. tokens saved:     13,217 (~61%)\nEst. saved (USD):      ~$0.198\nSavings est. from benchmarks\u002F (median per-task). Actual varies by task.\n```\n\n| คำสั่ง | ผล |\n|---|---|\n| `\u002Fpordee-stats` | สถิติ session ปัจจุบัน + lifetime summary |\n| `\u002Fpordee-stats --share` | สรุป 1 บรรทัด — เช่น `⚡ Saved 13,217 output tokens (~$0.198) across 12 turns this session — pordee` |\n| `\u002Fpordee-stats --all` | สถิติรวมทุก session (lifetime) |\n| `\u002Fpordee-stats --since 7d` | สถิติย้อนหลัง 7 วัน |\n\n### Benchmark\n\ncompression ratio ที่ stats ใช้มาจาก `benchmarks\u002Fcompression.json` — สร้างจากการรัน prompt ชุดทดสอบภาษาไทย 8 ข้อ ผ่าน API แบบปกติ vs pordee แล้วคิด median\n\n```bash\n# รัน benchmark (ต้องมี ANTHROPIC_API_KEY)\nexport ANTHROPIC_BASE_URL=https:\u002F\u002Fapi.kimi.com\u002Fcoding\u002Fv1\nnode benchmarks\u002Frun.js --level full\nnode benchmarks\u002Frun.js --level lite\n```\n\nหรือใช้ `--dry-run` สร้าง mock data สำหรับทดสอบ:\n\n```bash\nnode benchmarks\u002Frun.js --dry-run --level full\n```\n\n---\n\n## ตอนไหน pordee จะหยุดเอง \n\nบางสถานการณ์ การพูดสั้นเกินไปอันตรายหรือคนอ่านอาจเข้าใจผิด pordee จะปิดตัวเองชั่วคราว ตอบเป็นภาษาไทยปกติเต็มประโยค จบแล้วค่อยกลับมา\n\nถ้าผู้ใช้ต้องการให้อธิบายชัด ๆ พิมพ์คำต่อไปนี้ pordee จะหยุดและตอบยาวขึ้น:\n\n| คำที่ผู้ใช้พิมพ์ | ความหมาย |\n|---|---|\n| `อะไรนะ` | ฟังไม่ทัน ขอใหม่ |\n| `พูดอีกที` | ขอตอบซ้ำ |\n| `อธิบายชัดๆ` | ขอละเอียดกว่านี้ |\n| `ขยายความ` | ขอรายละเอียด |\n\nนอกจากนี้ pordee จะหยุดเองเมื่อ:\n\n- มี **security warning** หรือ ⚠️ ในคำตอบ\n- คำสั่งที่ย้อนกลับไม่ได้ — `DROP TABLE`, `rm -rf`, `git push --force`, `git reset --hard`, `git branch -D`\n- ขั้นตอนหลายสเต็ปที่ลำดับสำคัญ และ ประโยคสั้นเสี่ยงทำให้สับสน\n\nหลังจบส่วนที่ต้องชัด pordee กลับมาโหมดเดิมทันที\n\n---\n\n## ข้อจำกัด\n\n- ตอนนี้รองรับเฉพาะ Claude Code (v1) — โปรแกรมอื่นๆ จะเพิ่มเข้ามาในทีหลัง\n\n---\n\n## License\n\nMIT\n","pordee 是一个用于生成简洁泰国语回复的 Claude Code 插件。它通过去除冗余词汇如敬语、犹豫词和不必要的连接词，同时保留技术术语，使回复更加精炼，从而减少 60-75% 的 token 使用量而不丢失信息。项目使用 JavaScript 编写，支持多种命令模式来调整精简程度，包括默认全模式和轻量模式等。适用于需要高效利用对话模型资源、同时保持沟通清晰度的场景，尤其是涉及技术讨论时。",2,"2026-06-11 03:31:48","CREATED_QUERY"]