dodo-mcp 1.1.0 → 1.2.1
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 +71 -14
- package/dist/cli/main.js +92 -28
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/menu.js +2 -2
- package/dist/cli/menu.js.map +1 -1
- package/dist/config/globalConfig.js +16 -2
- package/dist/config/globalConfig.js.map +1 -1
- package/dist/config/tunnelConfig.js +2 -1
- package/dist/config/tunnelConfig.js.map +1 -1
- package/dist/projects/ownerAdmin.js +86 -0
- package/dist/projects/ownerAdmin.js.map +1 -0
- package/dist/projects/registry.js +90 -9
- package/dist/projects/registry.js.map +1 -1
- package/dist/security/projectAccess.js +69 -0
- package/dist/security/projectAccess.js.map +1 -0
- package/dist/security/projectAuthority.js +5 -1
- package/dist/security/projectAuthority.js.map +1 -1
- package/dist/server/aiAdmin.js +32 -8
- package/dist/server/aiAdmin.js.map +1 -1
- package/dist/server/appServer.js +37 -12
- package/dist/server/appServer.js.map +1 -1
- package/dist/server/bootstrap.js +5 -1
- package/dist/server/bootstrap.js.map +1 -1
- package/dist/server/configUi/app.css +8 -0
- package/dist/server/configUi/app.js +93 -18
- package/dist/server/configUi/index.html +22 -13
- package/dist/server/configUi/workbench.css +28 -1
- package/dist/server/configUi/workbench.js +113 -18
- package/dist/server/installationRuntime.js +6 -2
- package/dist/server/installationRuntime.js.map +1 -1
- package/dist/server/instructions.js +7 -3
- package/dist/server/instructions.js.map +1 -1
- package/dist/server/ipcDispatch.js.map +1 -1
- package/dist/server/localConfig.js +55 -13
- package/dist/server/localConfig.js.map +1 -1
- package/dist/server/stdioServer.js +14 -3
- package/dist/server/stdioServer.js.map +1 -1
- package/dist/services/ai/subagents.js +1 -1
- package/dist/services/ai/subagents.js.map +1 -1
- package/dist/services/multimodal/storage.js +10 -1
- package/dist/services/multimodal/storage.js.map +1 -1
- package/dist/services/schedules/scheduleService.js +8 -1
- package/dist/services/schedules/scheduleService.js.map +1 -1
- package/dist/store/db.js +14 -0
- package/dist/store/db.js.map +1 -1
- package/dist/tools/agentRuntimeTools.js +2 -3
- package/dist/tools/agentRuntimeTools.js.map +1 -1
- package/dist/tools/context.js +85 -5
- package/dist/tools/context.js.map +1 -1
- package/dist/tools/surface.js +97 -46
- package/dist/tools/surface.js.map +1 -1
- package/dist/tunnel/control.js +11 -4
- package/dist/tunnel/control.js.map +1 -1
- package/dist/tunnel/log.js +32 -0
- package/dist/tunnel/log.js.map +1 -1
- package/dist/tunnel/supervisor.js +103 -24
- package/dist/tunnel/supervisor.js.map +1 -1
- package/docs/AI_PROVIDERS.md +6 -3
- package/docs/ARCHITECTURE.md +18 -6
- package/docs/AUTH.md +6 -0
- package/docs/COMPATIBILITY.md +3 -2
- package/docs/MANUAL_ACCEPTANCE.md +22 -6
- package/docs/PROJECTS.md +73 -2
- package/docs/RELEASE_1.2.0.md +75 -0
- package/docs/RELEASE_1.2.1.md +47 -0
- package/docs/RELEASE_NOTES.md +33 -0
- package/docs/SECURITY.md +37 -6
- package/docs/TEST_REPORT.md +101 -0
- package/docs/TUNNEL.md +79 -16
- package/docs/WEB_CLIENTS.md +6 -1
- package/docs/adr/048-persistent-connection-mode.md +3 -1
- package/docs/adr/050-cloudflare-local-and-project-access.md +67 -0
- package/docs/adr/README.md +1 -0
- package/package.json +3 -1
- package/schemas/global-config.schema.json +11 -0
- package/schemas/tools.compact.json +123 -3
- package/schemas/tools.hybrid.json +297 -3
- package/schemas/tools.json +828 -0
package/docs/WEB_CLIENTS.md
CHANGED
|
@@ -117,6 +117,7 @@ authorization, DODO ไม่ได้รัน หรือ public OAuth routes
|
|
|
117
117
|
| ได้ 404 จาก OAuth หรือ discovery | Tunnel route มาเฉพาะ `/mcp`; แก้ให้ route ทุก path เพราะ OAuth ใช้ `/.well-known/...`, `/auth`, `/interaction`, `/token` และ `/jwks` ด้วย |
|
|
118
118
|
| เห็น tools เก่า/เรียกแล้ว not found | เปิด connection ใน ChatGPT แล้ว Refresh; หาก cache ยังไม่เปลี่ยนให้ลบและสร้าง connection ใหม่ |
|
|
119
119
|
| ยังไม่เห็น Sub-agent operations | เปิด **Settings → Sub-agent tools ใน MCP** ใน Local Config แล้ว restart DODO และ rescan/recreate connection |
|
|
120
|
+
| operation ที่ต้องการหายจาก discover/gateway | ตรวจ **Settings → Tools ที่ AI มองเห็น** แล้วเปิด operation, restart DODO และ rescan/recreate connection |
|
|
120
121
|
|
|
121
122
|
ห้ามส่ง `client_secret`, access token, refresh token, Cloudflare Tunnel token หรือ URL
|
|
122
123
|
ของ Local Config ให้ผู้ช่วย AI เพื่อแก้ปัญหา ใช้เฉพาะสถานะและ redacted logs จาก
|
|
@@ -124,10 +125,14 @@ authorization, DODO ไม่ได้รัน หรือ public OAuth routes
|
|
|
124
125
|
|
|
125
126
|
## Compact behavior
|
|
126
127
|
|
|
127
|
-
HTTP default เป็น Compact surface
|
|
128
|
+
HTTP default เป็น Compact surface สูงสุด 20 tools ประกอบด้วย overview, `dodo_discover` และ gateways client จะค้น operation ที่ต้องการจาก discover แล้วเรียก gateway พร้อม top-level workspace context จำนวนจริงอาจต่ำลงเมื่อเจ้าของปิด operations ครบทั้ง gateway
|
|
128
129
|
|
|
129
130
|
Compact ไม่ลด security และไม่ได้รวมสิทธิ์หลาย operation เป็น approval เดียว target operation ยังคงมี scope, ACL, trust, approval, hash และ path policy ของตัวเอง
|
|
130
131
|
|
|
132
|
+
เจ้าของซ่อน operation ที่ไม่ใช้จาก **Settings → Tools ที่ AI มองเห็น** ได้ การเปลี่ยนนี้
|
|
133
|
+
ลด schema ของ Compact/Hybrid จริงและเอา direct duplicate ออกจาก Hybrid แต่ไม่เปลี่ยน
|
|
134
|
+
Full/STDIO หรือ permission ใด ๆ ต้อง restart server และ rescan/recreate client หลังบันทึก
|
|
135
|
+
|
|
131
136
|
## Client cache
|
|
132
137
|
|
|
133
138
|
client บางตัว cache tool catalog หลังสร้าง connection หาก schema หรือ surface เปลี่ยน ให้ refresh ตาม client หรือ recreate connection เมื่อ refresh ไม่ได้ล้าง catalog เดิม
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# ADR-050 — Cloudflare Local mode and visible per-project access
|
|
2
|
+
|
|
3
|
+
## Status
|
|
4
|
+
|
|
5
|
+
Accepted for DODO 1.2.0. This extends ADR-048; its credential isolation and
|
|
6
|
+
DODO-owned supervisor rules remain in force.
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
The owner UI used the label “Local” for loopback-only MCP. Owners also use the word
|
|
11
|
+
local for a `cloudflared` binary installed and managed on the same machine, so the
|
|
12
|
+
two-process ownership models were easy to confuse. The personal access UI also hid
|
|
13
|
+
the detailed Trust and Client ACL cards without replacing them with a visible,
|
|
14
|
+
simple project-level control. Authority still existed, but owners could not see or
|
|
15
|
+
change the intended project ceiling from the Projects page.
|
|
16
|
+
|
|
17
|
+
## Decision
|
|
18
|
+
|
|
19
|
+
DODO exposes three mutually exclusive installation connection modes:
|
|
20
|
+
|
|
21
|
+
- `local`: loopback-only MCP; no Cloudflare process or public origin is used.
|
|
22
|
+
- `external`: **Cloudflare Local**; the owner installs, starts and stops
|
|
23
|
+
`cloudflared`. DODO advertises the reviewed public HTTPS origin but never accepts
|
|
24
|
+
a Tunnel token and never supervises that process.
|
|
25
|
+
- `tunnel`: **DODO Tunnel**; DODO reads a credential through the reviewed credential
|
|
26
|
+
provider, starts one owned child, waits for readiness and stops that child.
|
|
27
|
+
|
|
28
|
+
The UI never uses “Local” by itself. It labels the choices “เฉพาะเครื่อง (Loopback)”,
|
|
29
|
+
“Cloudflare Local (ติดตั้งในเครื่อง)” and “DODO Tunnel”. `--local` remains a
|
|
30
|
+
deprecated loopback alias because changing an old flag to a public mode would be an
|
|
31
|
+
unsafe compatibility break; new commands are `--loopback` and
|
|
32
|
+
`--cloudflare-local`.
|
|
33
|
+
|
|
34
|
+
Every registered project has one visible access ceiling: `read`, `edit` or `full`.
|
|
35
|
+
The Projects page displays and saves it in both personal and managed installations.
|
|
36
|
+
In personal mode this replaces repeated Trust/Client ACL configuration; in managed
|
|
37
|
+
mode the existing per-client ACL remains required. Effective authority is always:
|
|
38
|
+
|
|
39
|
+
```text
|
|
40
|
+
token scopes ∩ live grant scopes ∩ managed ACL (when enabled) ∩ project access ceiling
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The ceiling cannot grant a missing OAuth scope and does not bypass workspace
|
|
44
|
+
identity/epoch, approval, sandbox, path/secret guards, expected hashes, idempotency
|
|
45
|
+
or audit.
|
|
46
|
+
|
|
47
|
+
## Consequences
|
|
48
|
+
|
|
49
|
+
- Saving Cloudflare Local never reads, writes or validates a DODO Tunnel token.
|
|
50
|
+
- Remote Config can use either public Cloudflare mode; external mode depends on the
|
|
51
|
+
owner-managed route, while tunnel mode additionally requires the owned supervisor.
|
|
52
|
+
- Existing `local` config remains loopback-only. Legacy external config migrates to
|
|
53
|
+
the explicit `external` mode.
|
|
54
|
+
- Existing project rows migrate to `full` so the upgrade does not silently revoke
|
|
55
|
+
authority. Invalid stored levels fail closed to `read`.
|
|
56
|
+
- Connection-mode and project-access changes require no repository configuration and
|
|
57
|
+
expose no owner operation through MCP.
|
|
58
|
+
|
|
59
|
+
## Evidence
|
|
60
|
+
|
|
61
|
+
- `tests/integration/connectionMode.test.ts`
|
|
62
|
+
- `tests/integration/configUiComponents.test.ts`
|
|
63
|
+
- `tests/security/tunnelCredentials.test.ts`
|
|
64
|
+
- `tests/security/remoteConfig.test.ts`
|
|
65
|
+
- `tests/integration/projectAccessUi.test.ts`
|
|
66
|
+
- `tests/integration/projectByName.test.ts`
|
|
67
|
+
- `tests/security/projectAccessLevel.test.ts`
|
package/docs/adr/README.md
CHANGED
|
@@ -65,3 +65,4 @@ decisions; ADR-011+ resolve implementation ambiguities without reducing security
|
|
|
65
65
|
- [047 — Temporary Remote Config on the tunneled listener](047-temporary-remote-config.md)
|
|
66
66
|
- [048 — Persistent exclusive Local/Tunnel connection mode](048-persistent-connection-mode.md)
|
|
67
67
|
- [049 — Owner-approved Android control through ADB](049-android-adb-control.md)
|
|
68
|
+
- [050 — Cloudflare Local mode and visible per-project access](050-cloudflare-local-and-project-access.md)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dodo-mcp",
|
|
3
|
-
"version": "1.1
|
|
3
|
+
"version": "1.2.1",
|
|
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",
|
|
@@ -47,6 +47,8 @@
|
|
|
47
47
|
"docs/RELEASE_1.0.5.md",
|
|
48
48
|
"docs/RELEASE_1.0.6.md",
|
|
49
49
|
"docs/RELEASE_1.1.0.md",
|
|
50
|
+
"docs/RELEASE_1.2.0.md",
|
|
51
|
+
"docs/RELEASE_1.2.1.md",
|
|
50
52
|
"docs/RELEASE_NOTES.md",
|
|
51
53
|
"docs/SCHEDULES.md",
|
|
52
54
|
"docs/SECURITY.md",
|
|
@@ -357,6 +357,15 @@
|
|
|
357
357
|
"default": false,
|
|
358
358
|
"type": "boolean"
|
|
359
359
|
},
|
|
360
|
+
"disabledDiscoverOperations": {
|
|
361
|
+
"default": [],
|
|
362
|
+
"maxItems": 200,
|
|
363
|
+
"type": "array",
|
|
364
|
+
"items": {
|
|
365
|
+
"type": "string",
|
|
366
|
+
"pattern": "^[a-z][a-z0-9_]{0,63}$"
|
|
367
|
+
}
|
|
368
|
+
},
|
|
360
369
|
"tunnel": {
|
|
361
370
|
"default": {
|
|
362
371
|
"connectionMode": "local",
|
|
@@ -370,6 +379,7 @@
|
|
|
370
379
|
"type": "string",
|
|
371
380
|
"enum": [
|
|
372
381
|
"local",
|
|
382
|
+
"external",
|
|
373
383
|
"tunnel"
|
|
374
384
|
]
|
|
375
385
|
},
|
|
@@ -484,6 +494,7 @@
|
|
|
484
494
|
"logRetentionDays",
|
|
485
495
|
"accessMode",
|
|
486
496
|
"exposeSubagentsToMcp",
|
|
497
|
+
"disabledDiscoverOperations",
|
|
487
498
|
"tunnel",
|
|
488
499
|
"dangerouslyAllowInsecurePublicUrl"
|
|
489
500
|
],
|
|
@@ -21,15 +21,15 @@
|
|
|
21
21
|
"stats": {
|
|
22
22
|
"compact": {
|
|
23
23
|
"toolCount": 20,
|
|
24
|
-
"schemaBytes":
|
|
24
|
+
"schemaBytes": 59073
|
|
25
25
|
},
|
|
26
26
|
"hybrid": {
|
|
27
27
|
"toolCount": 49,
|
|
28
|
-
"schemaBytes":
|
|
28
|
+
"schemaBytes": 134966
|
|
29
29
|
},
|
|
30
30
|
"full": {
|
|
31
31
|
"toolCount": 138,
|
|
32
|
-
"schemaBytes":
|
|
32
|
+
"schemaBytes": 500538
|
|
33
33
|
}
|
|
34
34
|
},
|
|
35
35
|
"tools": [
|
|
@@ -53,6 +53,12 @@
|
|
|
53
53
|
"type": "string",
|
|
54
54
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
55
55
|
},
|
|
56
|
+
"targetProject": {
|
|
57
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
58
|
+
"type": "string",
|
|
59
|
+
"minLength": 1,
|
|
60
|
+
"maxLength": 120
|
|
61
|
+
},
|
|
56
62
|
"projectId": {
|
|
57
63
|
"description": "Optional owner-registered project ID for read-only federation; omit to use the active workspace",
|
|
58
64
|
"type": "string",
|
|
@@ -178,6 +184,12 @@
|
|
|
178
184
|
"type": "string",
|
|
179
185
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
180
186
|
},
|
|
187
|
+
"targetProject": {
|
|
188
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
189
|
+
"type": "string",
|
|
190
|
+
"minLength": 1,
|
|
191
|
+
"maxLength": 120
|
|
192
|
+
},
|
|
181
193
|
"workspaceId": {
|
|
182
194
|
"type": "string",
|
|
183
195
|
"minLength": 1,
|
|
@@ -374,6 +386,12 @@
|
|
|
374
386
|
"type": "string",
|
|
375
387
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
376
388
|
},
|
|
389
|
+
"targetProject": {
|
|
390
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
391
|
+
"type": "string",
|
|
392
|
+
"minLength": 1,
|
|
393
|
+
"maxLength": 120
|
|
394
|
+
},
|
|
377
395
|
"workspaceId": {
|
|
378
396
|
"type": "string",
|
|
379
397
|
"minLength": 1,
|
|
@@ -563,6 +581,12 @@
|
|
|
563
581
|
"type": "string",
|
|
564
582
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
565
583
|
},
|
|
584
|
+
"targetProject": {
|
|
585
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
586
|
+
"type": "string",
|
|
587
|
+
"minLength": 1,
|
|
588
|
+
"maxLength": 120
|
|
589
|
+
},
|
|
566
590
|
"workspaceId": {
|
|
567
591
|
"type": "string",
|
|
568
592
|
"minLength": 1,
|
|
@@ -743,6 +767,12 @@
|
|
|
743
767
|
"type": "string",
|
|
744
768
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
745
769
|
},
|
|
770
|
+
"targetProject": {
|
|
771
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
772
|
+
"type": "string",
|
|
773
|
+
"minLength": 1,
|
|
774
|
+
"maxLength": 120
|
|
775
|
+
},
|
|
746
776
|
"workspaceId": {
|
|
747
777
|
"type": "string",
|
|
748
778
|
"minLength": 1,
|
|
@@ -911,6 +941,12 @@
|
|
|
911
941
|
"type": "string",
|
|
912
942
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
913
943
|
},
|
|
944
|
+
"targetProject": {
|
|
945
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
946
|
+
"type": "string",
|
|
947
|
+
"minLength": 1,
|
|
948
|
+
"maxLength": 120
|
|
949
|
+
},
|
|
914
950
|
"workspaceId": {
|
|
915
951
|
"type": "string",
|
|
916
952
|
"minLength": 1,
|
|
@@ -1071,6 +1107,12 @@
|
|
|
1071
1107
|
"type": "string",
|
|
1072
1108
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1073
1109
|
},
|
|
1110
|
+
"targetProject": {
|
|
1111
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
1112
|
+
"type": "string",
|
|
1113
|
+
"minLength": 1,
|
|
1114
|
+
"maxLength": 120
|
|
1115
|
+
},
|
|
1074
1116
|
"workspaceId": {
|
|
1075
1117
|
"type": "string",
|
|
1076
1118
|
"minLength": 1,
|
|
@@ -1232,6 +1274,12 @@
|
|
|
1232
1274
|
"type": "string",
|
|
1233
1275
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1234
1276
|
},
|
|
1277
|
+
"targetProject": {
|
|
1278
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
1279
|
+
"type": "string",
|
|
1280
|
+
"minLength": 1,
|
|
1281
|
+
"maxLength": 120
|
|
1282
|
+
},
|
|
1235
1283
|
"workspaceId": {
|
|
1236
1284
|
"type": "string",
|
|
1237
1285
|
"minLength": 1,
|
|
@@ -1393,6 +1441,12 @@
|
|
|
1393
1441
|
"type": "string",
|
|
1394
1442
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1395
1443
|
},
|
|
1444
|
+
"targetProject": {
|
|
1445
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
1446
|
+
"type": "string",
|
|
1447
|
+
"minLength": 1,
|
|
1448
|
+
"maxLength": 120
|
|
1449
|
+
},
|
|
1396
1450
|
"workspaceId": {
|
|
1397
1451
|
"type": "string",
|
|
1398
1452
|
"minLength": 1,
|
|
@@ -1575,6 +1629,12 @@
|
|
|
1575
1629
|
"type": "string",
|
|
1576
1630
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1577
1631
|
},
|
|
1632
|
+
"targetProject": {
|
|
1633
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
1634
|
+
"type": "string",
|
|
1635
|
+
"minLength": 1,
|
|
1636
|
+
"maxLength": 120
|
|
1637
|
+
},
|
|
1578
1638
|
"workspaceId": {
|
|
1579
1639
|
"type": "string",
|
|
1580
1640
|
"minLength": 1,
|
|
@@ -1775,6 +1835,12 @@
|
|
|
1775
1835
|
"type": "string",
|
|
1776
1836
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1777
1837
|
},
|
|
1838
|
+
"targetProject": {
|
|
1839
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
1840
|
+
"type": "string",
|
|
1841
|
+
"minLength": 1,
|
|
1842
|
+
"maxLength": 120
|
|
1843
|
+
},
|
|
1778
1844
|
"workspaceId": {
|
|
1779
1845
|
"type": "string",
|
|
1780
1846
|
"minLength": 1,
|
|
@@ -1968,6 +2034,12 @@
|
|
|
1968
2034
|
"type": "string",
|
|
1969
2035
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
1970
2036
|
},
|
|
2037
|
+
"targetProject": {
|
|
2038
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2039
|
+
"type": "string",
|
|
2040
|
+
"minLength": 1,
|
|
2041
|
+
"maxLength": 120
|
|
2042
|
+
},
|
|
1971
2043
|
"workspaceId": {
|
|
1972
2044
|
"type": "string",
|
|
1973
2045
|
"minLength": 1,
|
|
@@ -2146,6 +2218,12 @@
|
|
|
2146
2218
|
"type": "string",
|
|
2147
2219
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2148
2220
|
},
|
|
2221
|
+
"targetProject": {
|
|
2222
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2223
|
+
"type": "string",
|
|
2224
|
+
"minLength": 1,
|
|
2225
|
+
"maxLength": 120
|
|
2226
|
+
},
|
|
2149
2227
|
"workspaceId": {
|
|
2150
2228
|
"type": "string",
|
|
2151
2229
|
"minLength": 1,
|
|
@@ -2308,6 +2386,12 @@
|
|
|
2308
2386
|
"type": "string",
|
|
2309
2387
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2310
2388
|
},
|
|
2389
|
+
"targetProject": {
|
|
2390
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2391
|
+
"type": "string",
|
|
2392
|
+
"minLength": 1,
|
|
2393
|
+
"maxLength": 120
|
|
2394
|
+
},
|
|
2311
2395
|
"workspaceId": {
|
|
2312
2396
|
"type": "string",
|
|
2313
2397
|
"minLength": 1,
|
|
@@ -2467,6 +2551,12 @@
|
|
|
2467
2551
|
"type": "string",
|
|
2468
2552
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2469
2553
|
},
|
|
2554
|
+
"targetProject": {
|
|
2555
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2556
|
+
"type": "string",
|
|
2557
|
+
"minLength": 1,
|
|
2558
|
+
"maxLength": 120
|
|
2559
|
+
},
|
|
2470
2560
|
"workspaceId": {
|
|
2471
2561
|
"type": "string",
|
|
2472
2562
|
"minLength": 1,
|
|
@@ -2625,6 +2715,12 @@
|
|
|
2625
2715
|
"type": "string",
|
|
2626
2716
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2627
2717
|
},
|
|
2718
|
+
"targetProject": {
|
|
2719
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2720
|
+
"type": "string",
|
|
2721
|
+
"minLength": 1,
|
|
2722
|
+
"maxLength": 120
|
|
2723
|
+
},
|
|
2628
2724
|
"workspaceId": {
|
|
2629
2725
|
"type": "string",
|
|
2630
2726
|
"minLength": 1,
|
|
@@ -2783,6 +2879,12 @@
|
|
|
2783
2879
|
"type": "string",
|
|
2784
2880
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2785
2881
|
},
|
|
2882
|
+
"targetProject": {
|
|
2883
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
2884
|
+
"type": "string",
|
|
2885
|
+
"minLength": 1,
|
|
2886
|
+
"maxLength": 120
|
|
2887
|
+
},
|
|
2786
2888
|
"workspaceId": {
|
|
2787
2889
|
"type": "string",
|
|
2788
2890
|
"minLength": 1,
|
|
@@ -2941,6 +3043,12 @@
|
|
|
2941
3043
|
"type": "string",
|
|
2942
3044
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
2943
3045
|
},
|
|
3046
|
+
"targetProject": {
|
|
3047
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
3048
|
+
"type": "string",
|
|
3049
|
+
"minLength": 1,
|
|
3050
|
+
"maxLength": 120
|
|
3051
|
+
},
|
|
2944
3052
|
"workspaceId": {
|
|
2945
3053
|
"type": "string",
|
|
2946
3054
|
"minLength": 1,
|
|
@@ -3099,6 +3207,12 @@
|
|
|
3099
3207
|
"type": "string",
|
|
3100
3208
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
3101
3209
|
},
|
|
3210
|
+
"targetProject": {
|
|
3211
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
3212
|
+
"type": "string",
|
|
3213
|
+
"minLength": 1,
|
|
3214
|
+
"maxLength": 120
|
|
3215
|
+
},
|
|
3102
3216
|
"workspaceId": {
|
|
3103
3217
|
"type": "string",
|
|
3104
3218
|
"minLength": 1,
|
|
@@ -3269,6 +3383,12 @@
|
|
|
3269
3383
|
"type": "string",
|
|
3270
3384
|
"pattern": "^prj_[0-9a-hjkmnp-tv-z]{8,64}$"
|
|
3271
3385
|
},
|
|
3386
|
+
"targetProject": {
|
|
3387
|
+
"description": "Owner-registered project NAME to target (alternative to targetProjectId; must match exactly one project)",
|
|
3388
|
+
"type": "string",
|
|
3389
|
+
"minLength": 1,
|
|
3390
|
+
"maxLength": 120
|
|
3391
|
+
},
|
|
3272
3392
|
"workspaceId": {
|
|
3273
3393
|
"type": "string",
|
|
3274
3394
|
"minLength": 1,
|