vantage-peers-mcp 2.3.2 → 2.3.3

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 CHANGED
@@ -1,5 +1,27 @@
1
1
  # Changelog
2
2
 
3
+ ## v2.3.3 — 2026-05-28
4
+
5
+ **Follow-up to v2.3.2 (Day 84 scope élargi)** — Extend list queries with `createdBy` + `updatedSince` filters + auto-clamp safeguard.
6
+
7
+ Backend (Convex) :
8
+ - `tasks.list` + `tasks.listByMission` : + `createdBy` (filter by task creator) + `updatedSince` (Unix ms window) + auto-clamp limit=30 when `fields="full"` and no explicit limit
9
+ - `missions.list` : + `updatedSince` + auto-clamp (30)
10
+ - `briefingNotes.list` : + `updatedSince` + auto-clamp (15 when fields=full)
11
+
12
+ MCP wrapper :
13
+ - 4 list tools forward the new params
14
+ - New export `updatedSinceSchema` (positive integer ms)
15
+ - `limit` `.default()` removed on the 4 list tools so absent limit flows to backend → enables auto-clamp
16
+
17
+ Tests : 15 new MCP schema cases (`src/__tests__/list-queries-v2.3.3-createdby-updatedsince.test.ts`) + 6 new Convex round-trip cases.
18
+
19
+ 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.
20
+
21
+ Cap fleet : 0 overflow tolérance future (auto-clamp).
22
+
23
+ VP task: `k1796s5j6jfkvkx0tn5n926ftd87jx9p`. Successor of `k17e09ng1tf217n93z9m4tr0mx87hfe0` (v2.3.2 PR #537).
24
+
3
25
  ## v2.3.2 — 2026-05-28
4
26
 
5
27
  **Hotfix** — Expose `fields="lite"` + `status` array/aliases in MCP tool schemas (Day 82 sprint gap).
@@ -96,6 +96,7 @@ export declare const fieldsSchema: z.ZodEnum<{
96
96
  lite: "lite";
97
97
  full: "full";
98
98
  }>;
99
+ export declare const updatedSinceSchema: z.ZodNumber;
99
100
  export interface ParsedConvexError {
100
101
  code: string;
101
102
  message: string;
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
- .default(50)
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
- }, async ({ assignedTo, assignedToInstance, status, project, limit, fields, }) => {
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: limit ?? 50,
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
- .default(50)
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
- }, async ({ missionId, status, limit, fields }) => {
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: limit ?? 50,
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
- .default(50)
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
- }, async ({ project, pilot, status, limit, fields }) => {
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: limit ?? 50,
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
- .default(20)
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
- }, async ({ topic, limit, fields }) => {
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: limit ?? 20,
1930
+ limit,
1912
1931
  fields,
1932
+ updatedSince,
1913
1933
  });
1914
1934
  return {
1915
1935
  content: [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vantage-peers-mcp",
3
- "version": "2.3.2",
3
+ "version": "2.3.3",
4
4
  "description": "MCP server for VantagePeers — shared memory, messaging, and task coordination for AI agent teams",
5
5
  "type": "module",
6
6
  "main": "./dist/server.js",