dodo-mcp 1.0.4 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -1
- package/dist/services/multimodal/images.js +3 -1
- package/dist/services/multimodal/images.js.map +1 -1
- package/dist/services/multimodal/sharpBackend.js +21 -0
- package/dist/services/multimodal/sharpBackend.js.map +1 -0
- package/dist/services/resources/providers.js +6 -2
- package/dist/services/resources/providers.js.map +1 -1
- package/docs/ANDROID.md +65 -0
- package/docs/COMPATIBILITY.md +7 -0
- package/docs/RELEASE_1.0.5.md +38 -0
- package/docs/RELEASE_1.0.6.md +39 -0
- package/docs/RELEASE_NOTES.md +24 -0
- package/docs/TEST_REPORT.md +24 -0
- package/docs/WEB_CLIENTS.md +123 -12
- package/package.json +7 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DODO MCP
|
|
2
2
|
|
|
3
|
-
**DODO MCP 1.0.
|
|
3
|
+
**DODO MCP 1.0.6** คือ MCP server แบบ local-first สำหรับให้ AI ช่วยพัฒนา software โดยทำงานกับ workspace ที่เจ้าของเลือก ค่าเริ่มต้นเป็นโหมดส่วนตัวแบบเพิ่มโปรเจกต์แล้วใช้ได้ทันที และยังมีโหมด managed สำหรับแยก workspace ACL/trust แบบละเอียด
|
|
4
4
|
|
|
5
5
|
## จุดเด่น
|
|
6
6
|
|
|
@@ -35,6 +35,78 @@ dodo setup --check
|
|
|
35
35
|
dodo --cli
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
### Android / Termux (ทดลองใช้)
|
|
39
|
+
|
|
40
|
+
DODO 1.0.6 ไม่โหลด Sharp ตั้งแต่เริ่ม CLI อีกต่อไป จึงใช้คำสั่งพื้นฐานและ MCP
|
|
41
|
+
สำหรับ text/code ได้แม้เครื่องไม่มี native Sharp build แพ็กเกจมี WebAssembly image backend
|
|
42
|
+
เป็น optional dependency; หาก npm ข้าม optional dependency ให้ติดตั้งเพิ่มแล้วเปิด DODO ใหม่:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install -g dodo-mcp@latest @img/sharp-wasm32@0.35.4
|
|
46
|
+
dodo --version
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
หาก image backend ยังไม่พร้อม เฉพาะเครื่องมือภาพจะตอบ `NOT_SUPPORTED` โดย CLI และ
|
|
50
|
+
เครื่องมือ coding ส่วนอื่นยังเริ่มได้ Android/Termux ยังเป็นสถานะทดลองใช้: installer,
|
|
51
|
+
OS credential store, sandbox, desktop control และ browser automation ยังไม่ได้ผ่าน
|
|
52
|
+
Android acceptance ครบ ดูข้อจำกัดและวิธีตรวจรับที่ [Android / Termux](docs/ANDROID.md)
|
|
53
|
+
|
|
54
|
+
## เชื่อม ChatGPT ภายในไม่กี่นาที
|
|
55
|
+
|
|
56
|
+
ChatGPT ต้องเชื่อมผ่าน **Public MCP URL** ของ DODO ซึ่งลงท้ายด้วย `/mcp` ส่วน
|
|
57
|
+
`https://chatgpt.com/connector_platform_oauth_redirect` เป็น **OAuth callback**
|
|
58
|
+
สำหรับลงทะเบียน client เท่านั้น ไม่ใช่ MCP Server URL
|
|
59
|
+
|
|
60
|
+
ก่อนเริ่มให้อัปเดต CLI แล้วตั้ง Cloudflare Tunnel ของ DODO โดยแทน
|
|
61
|
+
`https://dodo.example.com` ด้วย public hostname ของคุณ Tunnel ต้อง route ทุก path
|
|
62
|
+
ไปที่ `http://127.0.0.1:21730`
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
npm install -g dodo-mcp@latest
|
|
66
|
+
dodo --version
|
|
67
|
+
dodo tunnel configure \
|
|
68
|
+
--tunnel \
|
|
69
|
+
--public-url https://dodo.example.com \
|
|
70
|
+
--os-credential
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
ลงทะเบียน static OAuth client ด้วยคำสั่งด้านล่าง คัดลอกคำสั่งตรงจาก code block
|
|
74
|
+
โดยไม่เติม `\` หน้า `--` และไม่ครอบ URL ด้วยรูปแบบ Markdown `[ข้อความ](URL)`:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
dodo auth add-client \
|
|
78
|
+
--name "ChatGPT" \
|
|
79
|
+
--redirect-uri "https://chatgpt.com/connector_platform_oauth_redirect"
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
คำสั่งจะแสดง `client_id` และ `client_secret` ครั้งเดียว ให้เก็บไว้ในหน้าตั้งค่า
|
|
83
|
+
ChatGPT เท่านั้น ห้ามส่งลงแชต, issue หรือ Git จากนั้นเปิด DODO ค้างไว้:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
dodo start
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
ใน ChatGPT web ให้เปิด **Settings → Security and login → Developer mode** แล้วไปที่
|
|
90
|
+
[ChatGPT Plugins](https://chatgpt.com/plugins) กด `+` และกรอก:
|
|
91
|
+
|
|
92
|
+
- **MCP Server URL:** `https://dodo.example.com/mcp`
|
|
93
|
+
- **Authentication:** `OAuth`
|
|
94
|
+
- **OAuth Client ID / Secret:** ค่าที่ได้จาก `dodo auth add-client`
|
|
95
|
+
|
|
96
|
+
เมื่อกด Connect/Create/Scan Tools และหน้า authorization กำลังรอ ให้เปิด terminal
|
|
97
|
+
อีกหน้าต่างเพื่อตรวจ request แล้วอนุมัติ ID ที่ตรงกับหน้า browser:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
dodo auth pending
|
|
101
|
+
dodo auth approve REQUEST_ID
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
กลับไปที่ ChatGPT รอให้ scan เสร็จ เริ่มแชตใหม่ เลือก DODO ใน Developer mode แล้ว
|
|
105
|
+
ทดสอบด้วย `ใช้ DODO เรียก project_overview` HTTP จะแสดง Compact surface ประมาณ 19
|
|
106
|
+
tools และเข้าถึง operations ที่เหลือผ่าน `dodo_discover` กับ gateway ตามสิทธิ์เดิม
|
|
107
|
+
|
|
108
|
+
ดูขั้นตอนเต็มและวิธีแก้ OAuth/Tunnel ที่ [เชื่อม Web clients](docs/WEB_CLIENTS.md)
|
|
109
|
+
|
|
38
110
|
`dodo --cli` เปิดเมนู local owner สำหรับเลือก/เพิ่มโปรเจกต์ เปิด MCP + Local Config +
|
|
39
111
|
Tunnel, เปิด Remote Config ชั่วคราว 1 ชั่วโมง และรัน setup รวม `cloudflared` โดยไม่ต้อง
|
|
40
112
|
`cd` เข้าโปรเจกต์
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import sharp from 'sharp';
|
|
2
1
|
import { DodoError } from '../../errors.js';
|
|
3
2
|
import { digestOf, newId } from '../../util/hash.js';
|
|
4
3
|
import { MediaStorage, actorKey } from './storage.js';
|
|
5
4
|
import { ScreenFrame } from './contracts.js';
|
|
5
|
+
import { loadSharpBackend } from './sharpBackend.js';
|
|
6
6
|
const OPTIONS = { limitInputPixels: 40_000_000, failOn: 'warning' };
|
|
7
7
|
export async function imageView(bytes, maxEdge, crop) {
|
|
8
8
|
if (bytes.length > 16 * 1024 * 1024)
|
|
9
9
|
throw new DodoError('FILE_TOO_LARGE', 'image input exceeds 16 MiB');
|
|
10
|
+
const sharp = await loadSharpBackend();
|
|
10
11
|
const image = sharp(bytes, OPTIONS);
|
|
11
12
|
const metadata = await image.metadata();
|
|
12
13
|
if (!['jpeg', 'png', 'webp', 'gif'].includes(metadata.format ?? '') || !metadata.width || !metadata.height)
|
|
@@ -22,6 +23,7 @@ export async function imageView(bytes, maxEdge, crop) {
|
|
|
22
23
|
scaleX: (crop?.width ?? width) / converted.info.width, scaleY: (crop?.height ?? height) / converted.info.height, sourceOffsetX: crop?.left ?? 0, sourceOffsetY: crop?.top ?? 0 } };
|
|
23
24
|
}
|
|
24
25
|
export async function imageDifference(before, after) {
|
|
26
|
+
const sharp = await loadSharpBackend();
|
|
25
27
|
const normalize = (b) => sharp(b, OPTIONS).resize(64, 64, { fit: 'fill' }).removeAlpha().toColourspace('srgb').raw().toBuffer();
|
|
26
28
|
const [a, b] = await Promise.all([normalize(before), normalize(after)]);
|
|
27
29
|
let changed = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/services/multimodal/images.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"images.js","sourceRoot":"","sources":["../../../src/services/multimodal/images.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DodoError } from '../../errors.js';
|
|
2
|
+
let backend;
|
|
3
|
+
/**
|
|
4
|
+
* Load the optional raster backend only when an image operation needs it.
|
|
5
|
+
*
|
|
6
|
+
* Some supported core/runtime platforms do not have a native sharp build.
|
|
7
|
+
* Keeping this import lazy lets text/code/transport commands continue to work
|
|
8
|
+
* there while image operations fail with a bounded, non-secret error.
|
|
9
|
+
*/
|
|
10
|
+
export async function loadSharpBackend() {
|
|
11
|
+
backend ??= import('sharp')
|
|
12
|
+
.then((module) => module.default)
|
|
13
|
+
.catch(() => {
|
|
14
|
+
backend = undefined;
|
|
15
|
+
throw new DodoError('NOT_SUPPORTED', 'image processing backend is unavailable on this platform', {
|
|
16
|
+
recovery: 'Install @img/sharp-wasm32 beside dodo-mcp or provide a supported libvips build, then restart DODO.',
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
return backend;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=sharpBackend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharpBackend.js","sourceRoot":"","sources":["../../../src/services/multimodal/sharpBackend.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,IAAI,OAA0C,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB;IACpC,OAAO,KAAK,MAAM,CAAC,OAAO,CAAC;SACxB,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC;SAChC,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,GAAG,SAAS,CAAC;QACpB,MAAM,IAAI,SAAS,CAAC,eAAe,EAAE,0DAA0D,EAAE;YAC/F,QAAQ,EAAE,oGAAoG;SAC/G,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
|
-
import sharp from 'sharp';
|
|
3
2
|
import { DodoError } from '../../errors.js';
|
|
4
3
|
import { decodeUtf8Strict } from '../../util/bytes.js';
|
|
4
|
+
import { loadSharpBackend } from '../multimodal/sharpBackend.js';
|
|
5
5
|
const MAX_IMAGE_PIXELS = 64 * 1024 * 1024;
|
|
6
6
|
export async function inspectResourceFile(file, mimeType) {
|
|
7
7
|
if (['image/png', 'image/jpeg', 'image/gif', 'image/webp'].includes(mimeType)) {
|
|
8
8
|
try {
|
|
9
|
+
const sharp = await loadSharpBackend();
|
|
9
10
|
const meta = await sharp(file, { limitInputPixels: MAX_IMAGE_PIXELS, sequentialRead: true, failOn: 'error' }).metadata();
|
|
10
11
|
if (!meta.width || !meta.height)
|
|
11
12
|
throw new Error('missing dimensions');
|
|
12
13
|
return { width: meta.width, height: meta.height, ...(meta.format ? { format: meta.format } : {}) };
|
|
13
14
|
}
|
|
14
|
-
catch {
|
|
15
|
+
catch (error) {
|
|
16
|
+
if (error instanceof DodoError)
|
|
17
|
+
throw error;
|
|
15
18
|
throw new DodoError('INVALID_INPUT', 'image decoder rejected corrupt or oversized image metadata');
|
|
16
19
|
}
|
|
17
20
|
}
|
|
@@ -38,6 +41,7 @@ export async function inspectResourceFile(file, mimeType) {
|
|
|
38
41
|
}
|
|
39
42
|
export async function imagePreview(file, maxEdge) {
|
|
40
43
|
try {
|
|
44
|
+
const sharp = await loadSharpBackend();
|
|
41
45
|
const converted = await sharp(file, { limitInputPixels: MAX_IMAGE_PIXELS, sequentialRead: true, failOn: 'error' })
|
|
42
46
|
.rotate()
|
|
43
47
|
.resize({ width: maxEdge, height: maxEdge, fit: 'inside', withoutEnlargement: true })
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/services/resources/providers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../src/services/resources/providers.ts"],"names":[],"mappings":"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"}
|
package/docs/ANDROID.md
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
# DODO บน Android / Termux
|
|
2
|
+
|
|
3
|
+
สถานะ: **ทดลองใช้ (experimental)** ใน DODO 1.0.6
|
|
4
|
+
|
|
5
|
+
DODO รองรับการเริ่ม core CLI และ MCP สำหรับงาน text/code บน Node.js ที่ตรงกับ
|
|
6
|
+
`engines` โดยไม่บังคับให้ Android มี native Sharp runtime ตั้งแต่ startup การมี Git,
|
|
7
|
+
ADB และ `cloudflared` ใน Termux ช่วยเปิด workflow บางส่วนได้ แต่ยังไม่เท่ากับการผ่าน
|
|
8
|
+
Android platform acceptance ทั้งระบบ
|
|
9
|
+
|
|
10
|
+
## ติดตั้ง
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
pkg update
|
|
14
|
+
pkg install nodejs-lts git ripgrep
|
|
15
|
+
npm install -g dodo-mcp@latest @img/sharp-wasm32@0.35.4
|
|
16
|
+
dodo --version
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
`@img/sharp-wasm32` เป็น optional image backend หากติดตั้งไม่ได้ ให้ลอง DODO ต่อได้:
|
|
20
|
+
คำสั่งพื้นฐาน, transport และเครื่องมือ coding ต้องไม่ crash เพราะ Sharp ส่วน
|
|
21
|
+
image preview/capture/transform จะตอบ `NOT_SUPPORTED` จนกว่าจะมี backend ที่โหลดได้
|
|
22
|
+
|
|
23
|
+
ตรวจ installation โดยไม่ถือว่ารายการ optional ที่ขาดเป็น success:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
dodo --version
|
|
27
|
+
dodo doctor
|
|
28
|
+
dodo setup --check
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## ขอบเขตที่คาดว่าใช้ได้
|
|
32
|
+
|
|
33
|
+
- CLI, HTTP/STDIO MCP, OAuth และ Local Config เมื่อ Termux อนุญาต loopback/network
|
|
34
|
+
- อ่าน ค้นหา และแก้ไฟล์ภายใน path ที่ Termux เข้าถึงได้ตาม Android storage permission
|
|
35
|
+
- Git, ripgrep และ command jobs เมื่อ executable อยู่ใน trusted PATH
|
|
36
|
+
- Cloudflare Tunnel เมื่อ `cloudflared` binary สำหรับเครื่องนั้นผ่าน capability probe
|
|
37
|
+
- เครื่องมือภาพเมื่อ WebAssembly/libvips backend โหลดและ probe ได้จริง
|
|
38
|
+
|
|
39
|
+
## สิ่งที่ยังไม่ประกาศรองรับ
|
|
40
|
+
|
|
41
|
+
- `dodo setup --yes` แบบติดตั้ง dependencies อัตโนมัติสำหรับ Android
|
|
42
|
+
- macOS Keychain, Windows Credential Manager หรือ Linux Secret Service integration
|
|
43
|
+
- OS command sandbox สำหรับ Android
|
|
44
|
+
- native desktop capture/control, microphone หรือ system audio
|
|
45
|
+
- Playwright Chromium/browser automation บน Android
|
|
46
|
+
- background survival หลัง Termux ถูก Android หยุด process
|
|
47
|
+
|
|
48
|
+
ฟังก์ชันที่ไม่มี backend ต้องตอบ `NOT_SUPPORTED` ตามจริง DODO จะไม่ลด OAuth,
|
|
49
|
+
project/workspace context, path/secret guard, expected hash, approval หรือ command
|
|
50
|
+
sandbox policy เพื่อทำให้ probe ผ่าน
|
|
51
|
+
|
|
52
|
+
## การรายงานปัญหา
|
|
53
|
+
|
|
54
|
+
แนบเฉพาะข้อมูลที่ไม่เป็นความลับ:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
node --version
|
|
58
|
+
npm --version
|
|
59
|
+
dodo --version
|
|
60
|
+
uname -a
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
ห้ามแนบ Tunnel token, OAuth client secret, API key, Local Config URL ที่มี fragment,
|
|
64
|
+
state database หรือเนื้อหาไฟล์ส่วนตัว หาก `dodo --version` ผ่านแต่ capability หนึ่ง
|
|
65
|
+
ตอบ `NOT_SUPPORTED` ให้แยกรายงาน capability และ dependency นั้น ไม่สรุปว่า CLI ทั้งตัวพัง
|
package/docs/COMPATIBILITY.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
| macOS | รองรับ coding, HTTP, STDIO, Local Config และ optional native integrations ตาม permission |
|
|
9
9
|
| Linux | รองรับ coding, HTTP, STDIO, Local Config และ optional integrations ตาม desktop/runtime environment |
|
|
10
10
|
| Windows | Deferred — มี candidate code/tests แต่ยังไม่ประกาศ native support จนกว่าจะผ่าน Windows 11 จริง |
|
|
11
|
+
| Android / Termux | Experimental — core CLI และ text/code MCP เริ่มได้โดยไม่บังคับ Sharp; optional integrations ต้องตรวจแยก |
|
|
11
12
|
| MCP HTTP | OAuth protected MCP endpoint ที่ `/mcp` |
|
|
12
13
|
| MCP STDIO | Full surface เป็นค่าเริ่มต้น |
|
|
13
14
|
| Local Config | loopback owner control ที่ 21731; เปิด bounded Remote Config `/config` ผ่าน 21730 ได้ครั้งละไม่เกิน 1 ชั่วโมง |
|
|
@@ -58,6 +59,12 @@ media/workflow ขึ้นกับ optional capability ของ platform เ
|
|
|
58
59
|
|
|
59
60
|
Desktop, browser, media, speech, LSP และ OS sandbox ต้องตรวจ dependency และ OS permission ด้วย `dodo setup --check` หรือ `dodo doctor` ระบบจะรายงาน `NOT_SUPPORTED` เมื่อ environment ยังไม่พร้อม และจะไม่เปิด permission หรือดาวน์โหลด model โดยอัตโนมัติ
|
|
60
61
|
|
|
62
|
+
บน Android/Termux แพ็กเกจ Sharp ไม่มี native prebuild โดยตรง DODO จึงโหลด raster
|
|
63
|
+
backend เฉพาะเมื่อเรียก image operation และมี `@img/sharp-wasm32` เป็น optional
|
|
64
|
+
dependency หาก optional install ไม่สำเร็จ CLI/text/code ยังคงทำงาน ส่วน image
|
|
65
|
+
operation ตอบ `NOT_SUPPORTED` Android installer, secure credential store, sandbox,
|
|
66
|
+
desktop และ browser ยังไม่ถือว่ารองรับจนกว่าจะมี platform acceptance แยก
|
|
67
|
+
|
|
61
68
|
`dodo setup --plan` ใช้ตรวจขั้นตอนติดตั้งแบบ read-only ส่วน installer ต้องมี `--yes` การใช้ `--import-state` รองรับเฉพาะ config ตำแหน่งมาตรฐานและนำเข้า non-authority preferences เท่านั้น custom `DODO_CONFIG_DIR` ไม่ถูกค้นหรือ merge อัตโนมัติ
|
|
62
69
|
|
|
63
70
|
`dodo setup --components cloudflared` ตรวจ executable ได้ทุก OS การติดตั้งอัตโนมัติ
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# DODO MCP 1.0.5
|
|
2
|
+
|
|
3
|
+
รุ่น 1.0.5 เพิ่มคู่มือเชื่อม DODO กับ ChatGPT ที่ทำตามได้จากหน้าแรกของโปรเจกต์
|
|
4
|
+
และขยายเอกสาร Web Clients โดยไม่เปลี่ยน runtime หรือ security model
|
|
5
|
+
|
|
6
|
+
## การเปลี่ยนแปลง
|
|
7
|
+
|
|
8
|
+
- เพิ่ม Quick Start สำหรับ ChatGPT ใน README
|
|
9
|
+
- ระบุว่า Public MCP URL ต้องลงท้ายด้วย `/mcp`
|
|
10
|
+
- ระบุว่า `https://chatgpt.com/connector_platform_oauth_redirect` เป็น OAuth callback
|
|
11
|
+
สำหรับ `dodo auth add-client` ไม่ใช่ MCP Server URL
|
|
12
|
+
- เพิ่มขั้นตอนเปิด Developer mode, กรอก static OAuth credentials, scan tools และ
|
|
13
|
+
อนุมัติผ่าน `dodo auth pending` / `dodo auth approve REQUEST_ID`
|
|
14
|
+
- เพิ่ม troubleshooting สำหรับ Tunnel route, OAuth discovery, callback mismatch,
|
|
15
|
+
pending request และ client tool cache
|
|
16
|
+
|
|
17
|
+
## อัปเดต
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm install -g dodo-mcp@1.0.5
|
|
21
|
+
dodo --version
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
หลังอัปเดตให้ restart DODO แล้ว Refresh หรือสร้าง MCP connection ใน ChatGPT ใหม่
|
|
25
|
+
เมื่อ client ยังเก็บ catalog หรือ metadata เดิม
|
|
26
|
+
|
|
27
|
+
## Security
|
|
28
|
+
|
|
29
|
+
รุ่นนี้ไม่ลด OAuth, target/workspace authority, trust, approvals, path/secret guards,
|
|
30
|
+
expected-hash protection, command sandbox หรือ Tunnel credential policy คู่มือย้ำว่า
|
|
31
|
+
ห้ามส่ง client secret, OAuth token, Tunnel token หรือ Local Config URL ลง chat และ
|
|
32
|
+
ให้ตรวจ request ID/วลีบน browser ก่อน owner อนุมัติ
|
|
33
|
+
|
|
34
|
+
## Verification
|
|
35
|
+
|
|
36
|
+
Automated release gate ตรวจ source, packaging และ fresh tarball install แยกจาก manual
|
|
37
|
+
ChatGPT acceptance การเห็นคู่มือหรือผ่าน server tests ไม่ถือว่า ChatGPT live connection
|
|
38
|
+
ผ่านจนกว่าจะเชื่อม public hostname และทำ OAuth/tool call จริง
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# DODO MCP 1.0.6
|
|
2
|
+
|
|
3
|
+
รุ่น 1.0.6 แก้ startup บน platform ที่ไม่มี native Sharp build โดยแยก raster backend
|
|
4
|
+
ออกจากเส้นทางเริ่ม CLI และเพิ่ม WebAssembly image backend เป็น optional dependency
|
|
5
|
+
|
|
6
|
+
## การเปลี่ยนแปลง
|
|
7
|
+
|
|
8
|
+
- `dodo --version` และคำสั่ง text/code ไม่ import Sharp ระหว่าง startup
|
|
9
|
+
- image/resource raster operations โหลด Sharp เมื่อถูกเรียกเท่านั้น
|
|
10
|
+
- เมื่อ image backend ไม่มี ระบบตอบ `NOT_SUPPORTED` แบบ typed และไม่เปิดเผย loader error
|
|
11
|
+
- เพิ่ม `@img/sharp-wasm32` 0.35.4 เป็น optional dependency ที่ตรงกับ Sharp 0.35.4
|
|
12
|
+
- เพิ่มคู่มือ Android/Termux โดยระบุสถานะ experimental และขอบเขตที่ยังไม่รับรอง
|
|
13
|
+
|
|
14
|
+
## Security
|
|
15
|
+
|
|
16
|
+
การ fallback ไม่ข้าม OAuth, project/workspace authority, trust, approvals,
|
|
17
|
+
path/secret guards, expected hash หรือ sandbox policy WebAssembly backend ใช้เฉพาะ
|
|
18
|
+
การประมวลผลภาพเมื่อโหลดได้ และ error ที่ส่งให้ client ไม่รวม path หรือรายละเอียด
|
|
19
|
+
native loader ของเครื่อง
|
|
20
|
+
|
|
21
|
+
## อัปเดต
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install -g dodo-mcp@1.0.6 @img/sharp-wasm32@0.35.4
|
|
25
|
+
dodo --version
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
## สถานะตรวจรับ
|
|
29
|
+
|
|
30
|
+
- macOS build/typecheck/lint/core/security/compatibility: `AUTOMATED_PASS`
|
|
31
|
+
(682 passed, 35 skipped, 0 failed)
|
|
32
|
+
- packaging: `AUTOMATED_PASS` (16/16)
|
|
33
|
+
- การจำลองไม่มี Sharp: `AUTOMATED_PASS` — CLI แสดงเวอร์ชันได้และ image operation
|
|
34
|
+
ตอบ `NOT_SUPPORTED`
|
|
35
|
+
- WebAssembly fallback: `AUTOMATED_PASS` — ถอด native macOS backend ออกแล้วสร้าง PNG ได้
|
|
36
|
+
- production dependency audit: `AUTOMATED_PASS` — 0 vulnerabilities
|
|
37
|
+
- fresh tarball install: รอ immutable package gate
|
|
38
|
+
- Android/Termux บนเครื่องจริง: `MANUAL_NOT_RUN` จนกว่าเจ้าของติดตั้ง artifact นี้
|
|
39
|
+
- Android optional capabilities: `MANUAL_NOT_RUN`
|
package/docs/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# DODO MCP — Release Notes
|
|
2
2
|
|
|
3
|
+
## 1.0.6 — Android-safe CLI startup
|
|
4
|
+
|
|
5
|
+
- เปลี่ยน raster image backend เป็น lazy load เพื่อให้ core CLI, transport และ
|
|
6
|
+
text/code tools เริ่มได้บน platform ที่ไม่มี native Sharp build
|
|
7
|
+
- เพิ่ม `@img/sharp-wasm32` เวอร์ชันตรงกับ Sharp เป็น optional dependency
|
|
8
|
+
- image/resource operations ตอบ typed `NOT_SUPPORTED` เมื่อ backend ไม่พร้อม โดยไม่
|
|
9
|
+
ทำให้ `dodo --version` หรือทั้ง process ล้ม
|
|
10
|
+
- เพิ่มคู่มือ Android/Termux พร้อมระบุสถานะ experimental และ manual gates ตามจริง
|
|
11
|
+
|
|
12
|
+
ติดตั้งด้วย `npm install -g dodo-mcp@1.0.6 @img/sharp-wasm32@0.35.4`
|
|
13
|
+
|
|
14
|
+
## 1.0.5 — ChatGPT connection guide
|
|
15
|
+
|
|
16
|
+
- เพิ่มขั้นตอนเชื่อม ChatGPT ไว้บนหน้าแรก ตั้งแต่ Public MCP URL, Cloudflare Tunnel,
|
|
17
|
+
static OAuth client, Developer mode, tool scan และ owner approval
|
|
18
|
+
- แยกความหมายของ MCP Server URL (`https://HOST/mcp`) ออกจาก OAuth callback
|
|
19
|
+
(`https://chatgpt.com/connector_platform_oauth_redirect`) อย่างชัดเจน
|
|
20
|
+
- เพิ่มคำสั่ง `dodo auth add-client` ที่คัดลอกไปรันได้โดยไม่มี Markdown ปน พร้อม
|
|
21
|
+
troubleshooting สำหรับ empty pending request, redirect mismatch, OAuth 404 และ cache
|
|
22
|
+
- ไม่มีการเปลี่ยน runtime, tool surface, OAuth policy หรือ permission model
|
|
23
|
+
|
|
24
|
+
ติดตั้งหรืออัปเดตด้วย `npm install -g dodo-mcp@1.0.5` แล้ว restart DODO process
|
|
25
|
+
ก่อน Refresh หรือสร้าง ChatGPT MCP connection ใหม่
|
|
26
|
+
|
|
3
27
|
## 1.0.4 — Windows setup guidance and actionable recovery
|
|
4
28
|
|
|
5
29
|
- เพิ่มคู่มือ Windows Setup สำหรับติดตั้ง components, `cloudflared`, Desktop/Web
|
package/docs/TEST_REPORT.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# DODO MCP — Test Report
|
|
2
2
|
|
|
3
|
+
## Release 1.0.6 — Android-safe Sharp loading
|
|
4
|
+
|
|
5
|
+
ผล macOS วันที่ 2026-09-16:
|
|
6
|
+
|
|
7
|
+
- build/typecheck/lint: **AUTOMATED_PASS**
|
|
8
|
+
- core/integration/security/compatibility: **AUTOMATED_PASS** — 682 passed / 35 skipped /
|
|
9
|
+
0 failed ใน 100 ไฟล์ที่ผ่านและ 3 ไฟล์ที่ skip ตาม platform/capability
|
|
10
|
+
- packaging: **AUTOMATED_PASS** — 16/16
|
|
11
|
+
- optional-backend regression: **AUTOMATED_PASS** — mock ให้ `sharp` load ไม่ได้แล้ว
|
|
12
|
+
import image/resource modules ยังผ่าน; เมื่อเรียก image operation จึงตอบ typed
|
|
13
|
+
`NOT_SUPPORTED`
|
|
14
|
+
- no-Sharp compiled smoke: **AUTOMATED_PASS** — ย้าย `node_modules/sharp` ออกจาก
|
|
15
|
+
fixture ชั่วคราวแล้ว `node dist/cli/main.js --version` แสดง 1.0.6; image operation
|
|
16
|
+
ปฏิเสธแบบ bounded ตาม contract
|
|
17
|
+
- WebAssembly fallback smoke: **AUTOMATED_PASS** — ปิด native Darwin Sharp packages
|
|
18
|
+
ชั่วคราว, บังคับไม่ใช้ global libvips แล้ว `@img/sharp-wasm32` 0.35.4 สร้าง PNG
|
|
19
|
+
2×2 สำเร็จ 95 bytes
|
|
20
|
+
- production dependency audit: **AUTOMATED_PASS** — 0 vulnerabilities
|
|
21
|
+
- Android/Termux device install และ MCP workflow: **MANUAL_NOT_RUN**
|
|
22
|
+
- Android setup, credential store, sandbox, desktop และ browser: **MANUAL_NOT_RUN**
|
|
23
|
+
|
|
24
|
+
ผล macOS/Wasm พิสูจน์ startup/fallback contract แต่ไม่แทน Android device acceptance
|
|
25
|
+
จึงยังระบุ Android เป็น experimental
|
|
26
|
+
|
|
3
27
|
## Release 1.0.4 — Windows setup guidance
|
|
4
28
|
|
|
5
29
|
ผล candidate gate บน macOS วันที่ 2026-09-16:
|
package/docs/WEB_CLIENTS.md
CHANGED
|
@@ -1,15 +1,126 @@
|
|
|
1
|
-
# DODO MCP — Web Clients
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
1
|
+
# DODO MCP — เชื่อม ChatGPT และ Web Clients
|
|
2
|
+
|
|
3
|
+
## สิ่งที่ต้องแยกให้ออกก่อน
|
|
4
|
+
|
|
5
|
+
| ค่า | ใช้ตรงไหน | ตัวอย่าง |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Public origin | โดเมน HTTPS ที่ Cloudflare Tunnel ของเจ้าของให้บริการ | `https://dodo.example.com` |
|
|
8
|
+
| MCP Server URL | กรอกในหน้าเพิ่ม MCP ของ ChatGPT | `https://dodo.example.com/mcp` |
|
|
9
|
+
| OAuth callback | ลงทะเบียนกับ DODO ผ่าน `auth add-client` | `https://chatgpt.com/connector_platform_oauth_redirect` |
|
|
10
|
+
|
|
11
|
+
OAuth callback ไม่ใช่ URL สำหรับเปิดหรือติดตั้ง MCP และต้องคัดลอกเป็น URL ธรรมดา
|
|
12
|
+
ห้ามใส่ `[https://...](https://...)` เพราะนั่นเป็น Markdown ไม่ใช่ URI
|
|
13
|
+
|
|
14
|
+
## เชื่อม ChatGPT แบบครบขั้นตอน
|
|
15
|
+
|
|
16
|
+
### 1. อัปเดตและตรวจ DODO
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install -g dodo-mcp@latest
|
|
20
|
+
dodo --version
|
|
21
|
+
dodo setup --check
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### 2. ตั้ง Public MCP ผ่าน DODO Tunnel
|
|
25
|
+
|
|
26
|
+
เจ้าของต้องสร้าง Cloudflare Tunnel, public hostname และ DNS ไว้ก่อน โดย route
|
|
27
|
+
**ทุก path** ไปที่ `http://127.0.0.1:21730` ห้าม route Local Config `21731` หรือ
|
|
28
|
+
metrics `21732` ออกสาธารณะ
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
dodo tunnel configure \
|
|
32
|
+
--tunnel \
|
|
33
|
+
--public-url https://dodo.example.com \
|
|
34
|
+
--os-credential
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
แทน `https://dodo.example.com` ด้วย hostname จริงของคุณ Prompt จะรับ Tunnel token
|
|
38
|
+
ผ่าน OS credential store; token ไม่ควรอยู่ใน command line, chat หรือ repository
|
|
39
|
+
|
|
40
|
+
### 3. ลงทะเบียน ChatGPT OAuth client
|
|
41
|
+
|
|
42
|
+
คัดลอกคำสั่งนี้ตรง ๆ อย่าเติม `\` หน้า `--` และอย่าวาง Markdown link แทน URL:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
dodo auth add-client \
|
|
46
|
+
--name "ChatGPT" \
|
|
47
|
+
--redirect-uri "https://chatgpt.com/connector_platform_oauth_redirect"
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
DODO รองรับ RFC 9207 issuer identification จึงใช้ stable callback นี้ได้ คำสั่งจะ
|
|
51
|
+
แสดง `client_id` และ `client_secret` เพียงครั้งเดียว เก็บทั้งสองค่าใน client config
|
|
52
|
+
ของ ChatGPT และห้ามส่งให้ผู้อื่น หากทำหายให้สร้าง client ใหม่แทนการค้น secret เดิม
|
|
53
|
+
|
|
54
|
+
### 4. เปิด DODO
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
dodo start
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
ให้ terminal นี้เปิดค้างไว้ ใน Tunnel mode DODO จะเริ่มและดูแล `cloudflared` ของตัวเอง
|
|
61
|
+
ตรวจสถานะได้โดยไม่เปิดเผย credential:
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
dodo tunnel status
|
|
65
|
+
dodo tunnel doctor
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 5. เพิ่ม MCP ใน ChatGPT
|
|
69
|
+
|
|
70
|
+
1. เปิด ChatGPT web แล้วไปที่ **Settings → Security and login**
|
|
71
|
+
2. เปิด **Developer mode**
|
|
72
|
+
3. ไปที่ <https://chatgpt.com/plugins> แล้วกด `+`
|
|
73
|
+
4. ตั้งชื่อ เช่น `DODO MCP`
|
|
74
|
+
5. กรอก **MCP Server URL** เป็น `https://dodo.example.com/mcp`
|
|
75
|
+
6. เลือก Authentication เป็น **OAuth**
|
|
76
|
+
7. กรอก OAuth Client ID และ Client Secret ที่ได้จากขั้นตอน 3
|
|
77
|
+
8. กด Connect, Create หรือ Scan Tools ตามข้อความที่หน้า ChatGPT แสดง
|
|
78
|
+
|
|
79
|
+
ชื่อเมนูย่อยอาจเปลี่ยนตามแผนบัญชีหรือ workspace policy แต่ MCP URL ต้องเป็น public
|
|
80
|
+
HTTPS URL ที่ลงท้ายด้วย `/mcp` และ Authentication ต้องเป็น OAuth เสมอ
|
|
81
|
+
|
|
82
|
+
### 6. อนุมัติ OAuth จากเครื่องเจ้าของ
|
|
83
|
+
|
|
84
|
+
หลัง ChatGPT เริ่ม authorization และหน้า browser กำลังรอ เปิด terminal อีกหน้าต่าง:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
dodo auth pending
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
ตรวจ request ID และวลีเทียบกับหน้า browser แล้วอนุมัติเฉพาะรายการที่ตรงกัน:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
dodo auth approve REQUEST_ID
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
ไม่ต้องใส่ `--` หน้า ID หาก `pending` ไม่พบรายการ แปลว่า ChatGPT ยังไม่ได้เริ่ม
|
|
97
|
+
authorization, DODO ไม่ได้รัน หรือ public OAuth routes เข้าไม่ถึง
|
|
98
|
+
|
|
99
|
+
### 7. ทดสอบใน ChatGPT
|
|
100
|
+
|
|
101
|
+
กลับไปให้ tool scan เสร็จ เริ่ม conversation ใหม่ เลือก DODO จาก Developer mode แล้วส่ง:
|
|
102
|
+
|
|
103
|
+
```text
|
|
104
|
+
ใช้ DODO MCP เรียก project_overview แล้วรายงานชื่อโปรเจกต์ toolSurface และจำนวน tools
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
หากยังไม่มี project ให้เปิด `dodo --cli` หรือ Local Config URL ที่ startup แสดง แล้ว
|
|
108
|
+
เพิ่ม absolute path ภายหลังได้ OAuth client ไม่ผูกกับ CWD ที่ใช้รัน `auth add-client`
|
|
109
|
+
|
|
110
|
+
## แก้ปัญหาที่พบบ่อย
|
|
111
|
+
|
|
112
|
+
| อาการ | วิธีตรวจและแก้ |
|
|
113
|
+
|---|---|
|
|
114
|
+
| ChatGPT ต่อไม่ได้ | รัน `dodo tunnel doctor` และตรวจว่า hostname route ทุก path ไป `127.0.0.1:21730` |
|
|
115
|
+
| Redirect URI mismatch | ลบ client ที่ลงทะเบียนผิดแล้วสร้างใหม่ด้วย callback แบบ exact string ตาม code block |
|
|
116
|
+
| `dodo auth pending` ว่าง | กด Connect/Scan Tools ใน ChatGPT ก่อน และให้ `dodo start` ยังรันอยู่ |
|
|
117
|
+
| ได้ 404 จาก OAuth หรือ discovery | Tunnel route มาเฉพาะ `/mcp`; แก้ให้ route ทุก path เพราะ OAuth ใช้ `/.well-known/...`, `/auth`, `/interaction`, `/token` และ `/jwks` ด้วย |
|
|
118
|
+
| เห็น tools เก่า/เรียกแล้ว not found | เปิด connection ใน ChatGPT แล้ว Refresh; หาก cache ยังไม่เปลี่ยนให้ลบและสร้าง connection ใหม่ |
|
|
119
|
+
| ยังไม่เห็น Sub-agent operations | เปิด **Settings → Sub-agent tools ใน MCP** ใน Local Config แล้ว restart DODO และ rescan/recreate connection |
|
|
120
|
+
|
|
121
|
+
ห้ามส่ง `client_secret`, access token, refresh token, Cloudflare Tunnel token หรือ URL
|
|
122
|
+
ของ Local Config ให้ผู้ช่วย AI เพื่อแก้ปัญหา ใช้เฉพาะสถานะและ redacted logs จาก
|
|
123
|
+
`dodo tunnel status`, `dodo tunnel doctor` และ `dodo tunnel logs`
|
|
13
124
|
|
|
14
125
|
## Compact behavior
|
|
15
126
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dodo-mcp",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.6",
|
|
4
4
|
"author": "Arthittakun",
|
|
5
5
|
"description": "DODO — local-first MCP server with multi-project coding, AI providers, sub-agents, context, memory, media and workflow tools; embedded OAuth and workspace permissions.",
|
|
6
6
|
"type": "module",
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
"docs/ASSISTANCE.md",
|
|
24
24
|
"docs/AGENT_RUNTIME.md",
|
|
25
25
|
"docs/AI_PROVIDERS.md",
|
|
26
|
+
"docs/ANDROID.md",
|
|
26
27
|
"docs/AUTH.md",
|
|
27
28
|
"docs/BRAIN.md",
|
|
28
29
|
"docs/COMPATIBILITY.md",
|
|
@@ -43,6 +44,8 @@
|
|
|
43
44
|
"docs/RELEASE_1.0.2.md",
|
|
44
45
|
"docs/RELEASE_1.0.3.md",
|
|
45
46
|
"docs/RELEASE_1.0.4.md",
|
|
47
|
+
"docs/RELEASE_1.0.5.md",
|
|
48
|
+
"docs/RELEASE_1.0.6.md",
|
|
46
49
|
"docs/RELEASE_NOTES.md",
|
|
47
50
|
"docs/SCHEDULES.md",
|
|
48
51
|
"docs/SECURITY.md",
|
|
@@ -146,5 +149,8 @@
|
|
|
146
149
|
"homepage": "https://github.com/arthittakun/dodo-mcp#readme",
|
|
147
150
|
"bugs": {
|
|
148
151
|
"url": "https://github.com/arthittakun/dodo-mcp/issues"
|
|
152
|
+
},
|
|
153
|
+
"optionalDependencies": {
|
|
154
|
+
"@img/sharp-wasm32": "0.35.4"
|
|
149
155
|
}
|
|
150
156
|
}
|