vantage-peers-mcp 2.3.4 → 2.3.5
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/CHANGELOG.md +38 -0
- package/dist/src/tools.d.ts +1 -0
- package/dist/src/tools.js +36 -16
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## v2.3.5 — 2026-05-28
|
|
4
|
+
|
|
5
|
+
**Critical hotfix** — v2.3.3 (PR #539) shipped the backend filters `createdBy` + `updatedSince` and the Zod schema exports but did NOT wire those params into the 4 list MCP tool args blocks. Pi pull-cycle quickstart `list_tasks createdBy="pi" status="review" fields="lite"` was silently dropping `createdBy` at the MCP boundary and returning all visible tasks. Auto-clamp safeguard (Day 83) also could not trigger because Zod `.default(50)` / `.default(20)` on `limit` overrode the absent-value signal before it reached the backend.
|
|
6
|
+
|
|
7
|
+
Fixes:
|
|
8
|
+
- `mcp-server/src/tools.ts` : 4 list tools now expose `createdBy` (`list_tasks` + `list_tasks_by_mission` only — `list_missions` + `list_briefing_notes` do not accept it backend-side) and `updatedSince` (all 4).
|
|
9
|
+
- Removed `.default(50)` (3 tools) and `.default(20)` (1 tool) on `limit` so absent value reaches the backend, enabling the v2.3.3 auto-clamp safeguard.
|
|
10
|
+
|
|
11
|
+
Tests : 8 new boundary-forwarding cases (`src/__tests__/list-queries-v2.3.5-wire-createdby-updatedsince.test.ts`) — verify MCP layer actually forwards new params to `convex.query` instead of dropping them. 0 regression on existing suites.
|
|
12
|
+
|
|
13
|
+
Detection : Vantage-Bridge architecture review Sigma scope Day 84 — direct `grep`/`sed` inspection of `tools.ts` confirmed the gap. Backend already correct since v2.3.3 (`convex/tasks.ts:354-357`).
|
|
14
|
+
|
|
15
|
+
Fix-pattern (Day 84 capitalize) : when adding a new param across backend + MCP wrapper, the test suite MUST cover not only schema validation but also the tool-handler→convex.query forwarding boundary. Schema-only tests passed cleanly in v2.3.3 while the actual feature was broken in prod.
|
|
16
|
+
|
|
17
|
+
VP task : `k177tsvdxzase5sjy2qm9fdvp187kbwr`. Predecessor v2.3.3 PR #539 (`k1796s5j6jfkvkx0tn5n926ftd87jx9p`).
|
|
18
|
+
|
|
3
19
|
## v2.3.4 — 2026-05-28
|
|
4
20
|
|
|
5
21
|
**Security fix** — DCR (Dynamic Client Registration) self-registration now defaults to tenant-scope only. Master scope requires explicit admin authorization (`ADMIN_DCR_TOKEN` / `BEARER_SECRET_MASTER` env var). Closes beta blocker for Marie/Iris RH onboarding identified in VP Cloud audit Day 84.
|
|
@@ -13,6 +29,28 @@ Tests: 5 new Convex security tests (`convex/oauth-dcr-security.test.ts`) + 5 new
|
|
|
13
29
|
|
|
14
30
|
VP task: k17218rvqyncs1v6rwj3qdzfsn87jj4n. Beta unblock chain: DCR fix → 5 quick wins onboarding (seed-profiles + marie-iris-rh client + README VP Cloud + runbook + email).
|
|
15
31
|
|
|
32
|
+
## v2.3.3 — 2026-05-28
|
|
33
|
+
|
|
34
|
+
**Follow-up to v2.3.2 (Day 84 scope élargi)** — Extend list queries with `createdBy` + `updatedSince` filters + auto-clamp safeguard.
|
|
35
|
+
|
|
36
|
+
Backend (Convex) :
|
|
37
|
+
- `tasks.list` + `tasks.listByMission` : + `createdBy` (filter by task creator) + `updatedSince` (Unix ms window) + auto-clamp limit=30 when `fields="full"` and no explicit limit
|
|
38
|
+
- `missions.list` : + `updatedSince` + auto-clamp (30)
|
|
39
|
+
- `briefingNotes.list` : + `updatedSince` + auto-clamp (15 when fields=full)
|
|
40
|
+
|
|
41
|
+
MCP wrapper :
|
|
42
|
+
- 4 list tools forward the new params
|
|
43
|
+
- New export `updatedSinceSchema` (positive integer ms)
|
|
44
|
+
- `limit` `.default()` removed on the 4 list tools so absent limit flows to backend → enables auto-clamp
|
|
45
|
+
|
|
46
|
+
Tests : 15 new MCP schema cases (`src/__tests__/list-queries-v2.3.3-createdby-updatedsince.test.ts`) + 6 new Convex round-trip cases.
|
|
47
|
+
|
|
48
|
+
Pi pull cycle unblocked : `list_tasks createdBy="pi" status="review" fields="lite"` returns only Pi-dispatched tasks recently moved to review, payload 5-10× smaller.
|
|
49
|
+
|
|
50
|
+
Cap fleet : 0 overflow tolérance future (auto-clamp).
|
|
51
|
+
|
|
52
|
+
VP task: `k1796s5j6jfkvkx0tn5n926ftd87jx9p`. Successor of `k17e09ng1tf217n93z9m4tr0mx87hfe0` (v2.3.2 PR #537).
|
|
53
|
+
|
|
16
54
|
## v2.3.2 — 2026-05-28
|
|
17
55
|
|
|
18
56
|
**Hotfix** — Expose `fields="lite"` + `status` array/aliases in MCP tool schemas (Day 82 sprint gap).
|
package/dist/src/tools.d.ts
CHANGED
package/dist/src/tools.js
CHANGED
|
@@ -162,6 +162,14 @@ export const fieldsSchema = z
|
|
|
162
162
|
.describe('Field projection — "lite" returns compact fields only ' +
|
|
163
163
|
'(typical 5-10× smaller payload for large list scans), ' +
|
|
164
164
|
'"full" (default) returns the full document.');
|
|
165
|
+
// v2.3.3 — Unix timestamp ms filter for "updated since".
|
|
166
|
+
// Pass `Date.now() - 24*60*60*1000` for "last 24h" pattern.
|
|
167
|
+
export const updatedSinceSchema = z
|
|
168
|
+
.number()
|
|
169
|
+
.int()
|
|
170
|
+
.positive()
|
|
171
|
+
.describe("Unix timestamp (ms) — return only rows whose updatedAt >= this value. " +
|
|
172
|
+
"Typical usage: Date.now() - 24*60*60*1000 for last-24h window.");
|
|
165
173
|
const mandateStatusSchema = z
|
|
166
174
|
.enum(["requested", "accepted", "in_progress", "delivered", "settled"])
|
|
167
175
|
.describe("Mandate lifecycle status");
|
|
@@ -1141,20 +1149,25 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1141
1149
|
.min(1)
|
|
1142
1150
|
.max(200)
|
|
1143
1151
|
.optional()
|
|
1144
|
-
.
|
|
1145
|
-
.describe("Maximum number of tasks to return (default 50)"),
|
|
1152
|
+
.describe("Maximum number of tasks to return. Default 50 with fields=lite, auto-clamped to 30 when fields=full and no explicit limit (overflow protection)."),
|
|
1146
1153
|
fields: fieldsSchema
|
|
1147
1154
|
.optional()
|
|
1148
1155
|
.describe('Field projection ("lite"|"full")'),
|
|
1149
|
-
|
|
1156
|
+
createdBy: assigneeSchema
|
|
1157
|
+
.optional()
|
|
1158
|
+
.describe("Filter by task creator (e.g. 'pi' to find Pi-dispatched tasks)"),
|
|
1159
|
+
updatedSince: updatedSinceSchema.optional(),
|
|
1160
|
+
}, async ({ assignedTo, assignedToInstance, status, project, limit, fields, createdBy, updatedSince, }) => {
|
|
1150
1161
|
try {
|
|
1151
1162
|
const tasks = await convex.query("tasks:list", {
|
|
1152
1163
|
assignedTo,
|
|
1153
1164
|
assignedToInstance,
|
|
1154
1165
|
status,
|
|
1155
1166
|
project,
|
|
1156
|
-
limit
|
|
1167
|
+
limit,
|
|
1157
1168
|
fields,
|
|
1169
|
+
createdBy,
|
|
1170
|
+
updatedSince,
|
|
1158
1171
|
});
|
|
1159
1172
|
return {
|
|
1160
1173
|
content: [
|
|
@@ -1470,18 +1483,23 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1470
1483
|
.min(1)
|
|
1471
1484
|
.max(200)
|
|
1472
1485
|
.optional()
|
|
1473
|
-
.
|
|
1474
|
-
.describe("Maximum number of tasks to return (default 50)"),
|
|
1486
|
+
.describe("Maximum number of tasks to return. Default 50 with fields=lite, auto-clamped to 30 when fields=full and no explicit limit."),
|
|
1475
1487
|
fields: fieldsSchema
|
|
1476
1488
|
.optional()
|
|
1477
1489
|
.describe('Field projection ("lite"|"full")'),
|
|
1478
|
-
|
|
1490
|
+
createdBy: assigneeSchema
|
|
1491
|
+
.optional()
|
|
1492
|
+
.describe("Filter by task creator"),
|
|
1493
|
+
updatedSince: updatedSinceSchema.optional(),
|
|
1494
|
+
}, async ({ missionId, status, limit, fields, createdBy, updatedSince }) => {
|
|
1479
1495
|
try {
|
|
1480
1496
|
const tasks = await convex.query("tasks:listByMission", {
|
|
1481
1497
|
missionId: missionId,
|
|
1482
1498
|
status,
|
|
1483
|
-
limit
|
|
1499
|
+
limit,
|
|
1484
1500
|
fields,
|
|
1501
|
+
createdBy,
|
|
1502
|
+
updatedSince,
|
|
1485
1503
|
});
|
|
1486
1504
|
return {
|
|
1487
1505
|
content: [
|
|
@@ -1565,19 +1583,20 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1565
1583
|
.min(1)
|
|
1566
1584
|
.max(200)
|
|
1567
1585
|
.optional()
|
|
1568
|
-
.
|
|
1569
|
-
.describe("Maximum number of missions to return (default 50)"),
|
|
1586
|
+
.describe("Maximum number of missions to return. Default 50 with fields=lite, auto-clamped to 30 when fields=full and no explicit limit."),
|
|
1570
1587
|
fields: fieldsSchema
|
|
1571
1588
|
.optional()
|
|
1572
1589
|
.describe('Field projection ("lite"|"full")'),
|
|
1573
|
-
|
|
1590
|
+
updatedSince: updatedSinceSchema.optional(),
|
|
1591
|
+
}, async ({ project, pilot, status, limit, fields, updatedSince }) => {
|
|
1574
1592
|
try {
|
|
1575
1593
|
const missions = await convex.query("missions:list", {
|
|
1576
1594
|
project,
|
|
1577
1595
|
pilot,
|
|
1578
1596
|
status,
|
|
1579
|
-
limit
|
|
1597
|
+
limit,
|
|
1580
1598
|
fields,
|
|
1599
|
+
updatedSince,
|
|
1581
1600
|
});
|
|
1582
1601
|
return {
|
|
1583
1602
|
content: [
|
|
@@ -1899,17 +1918,18 @@ export function registerTools(server, convex, oauthCtx) {
|
|
|
1899
1918
|
.min(1)
|
|
1900
1919
|
.max(100)
|
|
1901
1920
|
.optional()
|
|
1902
|
-
.
|
|
1903
|
-
.describe("Maximum notes to return (default 20)"),
|
|
1921
|
+
.describe("Maximum notes to return. Default 20 with fields=lite, auto-clamped to 15 when fields=full and no explicit limit."),
|
|
1904
1922
|
fields: fieldsSchema
|
|
1905
1923
|
.optional()
|
|
1906
1924
|
.describe('Field projection ("lite"|"full")'),
|
|
1907
|
-
|
|
1925
|
+
updatedSince: updatedSinceSchema.optional(),
|
|
1926
|
+
}, async ({ topic, limit, fields, updatedSince }) => {
|
|
1908
1927
|
try {
|
|
1909
1928
|
const notes = await convex.query("briefingNotes:list", {
|
|
1910
1929
|
topic,
|
|
1911
|
-
limit
|
|
1930
|
+
limit,
|
|
1912
1931
|
fields,
|
|
1932
|
+
updatedSince,
|
|
1913
1933
|
});
|
|
1914
1934
|
return {
|
|
1915
1935
|
content: [
|
package/package.json
CHANGED