nexus-agents 8.131.1 → 8.131.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.
Files changed (26) hide show
  1. package/dist/{chunk-NEB2FSBW.js → chunk-5XMXBSPY.js} +3 -3
  2. package/dist/{chunk-2B55IL7S.js → chunk-AAE7F4CB.js} +7 -4
  3. package/dist/chunk-AAE7F4CB.js.map +1 -0
  4. package/dist/{chunk-QGXA3QXW.js → chunk-CGKENW3F.js} +93 -75
  5. package/dist/chunk-CGKENW3F.js.map +1 -0
  6. package/dist/{chunk-DFAT7RB7.js → chunk-FB4ZIOYS.js} +11 -12
  7. package/dist/chunk-FB4ZIOYS.js.map +1 -0
  8. package/dist/{chunk-ETJY6TMK.js → chunk-RWWPMTJK.js} +2 -2
  9. package/dist/{chunk-45AUQYWF.js → chunk-UETCXCAS.js} +193 -144
  10. package/dist/{chunk-45AUQYWF.js.map → chunk-UETCXCAS.js.map} +1 -1
  11. package/dist/cli.js +7 -7
  12. package/dist/cli.js.map +1 -1
  13. package/dist/{consensus-vote-K4SNLVKO.js → consensus-vote-6ISHSQ73.js} +4 -4
  14. package/dist/{improvement-review-UYDDYXIB.js → improvement-review-S65JP2NY.js} +4 -4
  15. package/dist/index.d.ts +3 -26
  16. package/dist/index.js +6 -6
  17. package/dist/{setup-data-dir-IYJGONN3.js → setup-data-dir-EVVWRHY2.js} +3 -3
  18. package/package.json +1 -1
  19. package/dist/chunk-2B55IL7S.js.map +0 -1
  20. package/dist/chunk-DFAT7RB7.js.map +0 -1
  21. package/dist/chunk-QGXA3QXW.js.map +0 -1
  22. /package/dist/{chunk-NEB2FSBW.js.map → chunk-5XMXBSPY.js.map} +0 -0
  23. /package/dist/{chunk-ETJY6TMK.js.map → chunk-RWWPMTJK.js.map} +0 -0
  24. /package/dist/{consensus-vote-K4SNLVKO.js.map → consensus-vote-6ISHSQ73.js.map} +0 -0
  25. /package/dist/{improvement-review-UYDDYXIB.js.map → improvement-review-S65JP2NY.js.map} +0 -0
  26. /package/dist/{setup-data-dir-IYJGONN3.js.map → setup-data-dir-EVVWRHY2.js.map} +0 -0
@@ -9,7 +9,7 @@ import {
9
9
  } from "./chunk-M7FO5W7A.js";
10
10
  import {
11
11
  withPrerequisite
12
- } from "./chunk-2B55IL7S.js";
12
+ } from "./chunk-AAE7F4CB.js";
13
13
  import {
14
14
  generateSecurityPlan
15
15
  } from "./chunk-R4AH6LIE.js";
@@ -41,7 +41,7 @@ import {
41
41
  import {
42
42
  DEFAULT_TASK_TTL_MS,
43
43
  clampTaskTtl
44
- } from "./chunk-NEB2FSBW.js";
44
+ } from "./chunk-5XMXBSPY.js";
45
45
  import {
46
46
  executeExpert
47
47
  } from "./chunk-VL65KGVM.js";
@@ -96,7 +96,7 @@ import {
96
96
  withFileLock,
97
97
  withWarnings,
98
98
  writeJobCancelled
99
- } from "./chunk-DFAT7RB7.js";
99
+ } from "./chunk-FB4ZIOYS.js";
100
100
  import {
101
101
  NOOP_NOTIFIER,
102
102
  RateLimiter,
@@ -112,22 +112,23 @@ import {
112
112
  getMcpAnnotations,
113
113
  getToolAnnotations,
114
114
  getToolTimeout,
115
+ registerStructuredTool,
115
116
  resolvePolicyRolloutMode,
116
117
  sanitizeToolInput,
118
+ structuredToolSuccess,
117
119
  toSdkCallback,
118
120
  toSdkCallbackWithTimeoutCheck,
119
121
  toolError,
120
122
  toolStructuredError,
121
123
  toolSuccess,
122
- toolSuccessStructured,
123
124
  withProgressHeartbeat,
124
125
  wrapToolWithTimeout
125
- } from "./chunk-QGXA3QXW.js";
126
+ } from "./chunk-CGKENW3F.js";
126
127
  import {
127
128
  VERSION,
128
129
  createRequestContext,
129
130
  measuredTrustTier
130
- } from "./chunk-ETJY6TMK.js";
131
+ } from "./chunk-RWWPMTJK.js";
131
132
  import {
132
133
  allOf,
133
134
  anyOf
@@ -37873,7 +37874,7 @@ function errorResult(text) {
37873
37874
  return toolError(text);
37874
37875
  }
37875
37876
  function successResultStructured(data) {
37876
- return toolSuccessStructured(data);
37877
+ return structuredToolSuccess(DelegateOutputSchema, data);
37877
37878
  }
37878
37879
  function buildDelegateOutput(selection, requirements) {
37879
37880
  const caps = MODEL_CAPABILITIES2[selection.model];
@@ -38051,6 +38052,9 @@ function classifyDelegateGovernance(input, logger59) {
38051
38052
  }
38052
38053
  function enrichWithGovernance(output2, governance) {
38053
38054
  if (!governance.promoted) return output2;
38055
+ if (governance.votingThreshold === null || governance.promotionReason === null) {
38056
+ throw new Error("Promoted governance requires a voting threshold and promotion reason");
38057
+ }
38054
38058
  return {
38055
38059
  ...output2,
38056
38060
  governance: {
@@ -38155,7 +38159,8 @@ function registerDelegateToModelTool(server, deps) {
38155
38159
  timeoutMs,
38156
38160
  logger: logger59
38157
38161
  });
38158
- server.registerTool(
38162
+ registerStructuredTool(
38163
+ server,
38159
38164
  "delegate_to_model",
38160
38165
  {
38161
38166
  description: "Pick which EXISTING model should handle a task. Inspects task complexity and returns the best-fit model from the routing registry \u2014 does NOT add a new model. Records the routing decision to tool-memory for learning feedback (not a pure read). (For drafting a registry entry for a new model, use `registry_import`.)",
@@ -39096,6 +39101,17 @@ function standardReportHandler(state) {
39096
39101
 
39097
39102
  // src/mcp/tools/list-experts.ts
39098
39103
  import { z as z65 } from "zod";
39104
+ var OUTPUT_SCHEMA = {
39105
+ experts: z65.array(
39106
+ z65.object({
39107
+ role: z65.string(),
39108
+ name: z65.string(),
39109
+ description: z65.string(),
39110
+ capabilities: z65.array(z65.string())
39111
+ })
39112
+ ),
39113
+ count: z65.number()
39114
+ };
39099
39115
  var ListExpertsInputSchema = z65.object({
39100
39116
  format: z65.enum(["full", "names"]).optional().default("full").describe("Output format: full (with details) or names (just role names)")
39101
39117
  });
@@ -39162,8 +39178,7 @@ function listExpertsHandler(args, ctx) {
39162
39178
  }
39163
39179
  const result = handleListExperts(validationResult.data);
39164
39180
  ctx.logger.debug("Listed available experts", { count: result.count });
39165
- const data = result;
39166
- return Promise.resolve(toolSuccessStructured(data));
39181
+ return Promise.resolve(structuredToolSuccess(z65.object(OUTPUT_SCHEMA), result));
39167
39182
  }
39168
39183
  function registerListExpertsTool(server, deps) {
39169
39184
  const logger59 = deps.logger ?? createLogger({ tool: "list_experts" });
@@ -39178,23 +39193,13 @@ function registerListExpertsTool(server, deps) {
39178
39193
  });
39179
39194
  const timeoutMs = getToolTimeout("list_experts", deps.security);
39180
39195
  const wrappedHandler = wrapToolWithTimeout("list_experts", secureHandler, { timeoutMs, logger: logger59 });
39181
- const outputSchema = {
39182
- experts: z65.array(
39183
- z65.object({
39184
- role: z65.string(),
39185
- name: z65.string(),
39186
- description: z65.string(),
39187
- capabilities: z65.array(z65.string())
39188
- })
39189
- ),
39190
- count: z65.number()
39191
- };
39192
- server.registerTool(
39196
+ registerStructuredTool(
39197
+ server,
39193
39198
  "list_experts",
39194
39199
  {
39195
39200
  description,
39196
39201
  inputSchema: toolSchema,
39197
- outputSchema,
39202
+ outputSchema: OUTPUT_SCHEMA,
39198
39203
  annotations: getToolAnnotations("list_experts")
39199
39204
  },
39200
39205
  toSdkCallback(wrappedHandler)
@@ -39204,6 +39209,18 @@ function registerListExpertsTool(server, deps) {
39204
39209
 
39205
39210
  // src/mcp/tools/list-workflows.ts
39206
39211
  import { z as z66 } from "zod";
39212
+ var OUTPUT_SCHEMA2 = {
39213
+ workflows: z66.array(
39214
+ z66.object({
39215
+ name: z66.string(),
39216
+ version: z66.string(),
39217
+ description: z66.string().optional(),
39218
+ category: z66.string().optional()
39219
+ })
39220
+ ),
39221
+ count: z66.number(),
39222
+ categories: z66.array(z66.string()).optional()
39223
+ };
39207
39224
  var ListWorkflowsInputSchema = z66.object({
39208
39225
  category: z66.string().optional().describe("Filter by category (e.g., development, security)"),
39209
39226
  format: z66.enum(["full", "names"]).optional().default("full").describe("Output format: full (with details) or names (just template names)")
@@ -39252,8 +39269,7 @@ function createListWorkflowsHandler(workflowEngine) {
39252
39269
  count: result.count,
39253
39270
  category: validationResult.data.category
39254
39271
  });
39255
- const data = result;
39256
- return toolSuccessStructured(data);
39272
+ return structuredToolSuccess(z66.object(OUTPUT_SCHEMA2), result);
39257
39273
  });
39258
39274
  };
39259
39275
  }
@@ -39275,24 +39291,13 @@ function registerListWorkflowsTool(server, deps) {
39275
39291
  secureHandler,
39276
39292
  timeoutMs !== void 0 ? { timeoutMs, logger: logger59 } : { logger: logger59 }
39277
39293
  );
39278
- const outputSchema = {
39279
- workflows: z66.array(
39280
- z66.object({
39281
- name: z66.string(),
39282
- version: z66.string(),
39283
- description: z66.string().optional(),
39284
- category: z66.string().optional()
39285
- })
39286
- ),
39287
- count: z66.number(),
39288
- categories: z66.array(z66.string()).optional()
39289
- };
39290
- server.registerTool(
39294
+ registerStructuredTool(
39295
+ server,
39291
39296
  "list_workflows",
39292
39297
  {
39293
39298
  description,
39294
39299
  inputSchema: toolSchema,
39295
- outputSchema,
39300
+ outputSchema: OUTPUT_SCHEMA2,
39296
39301
  annotations: getToolAnnotations("list_workflows")
39297
39302
  },
39298
39303
  toSdkCallback(wrappedHandler)
@@ -40151,7 +40156,7 @@ function createResearchQueryHandler(deps) {
40151
40156
  reason: result.negativeResults.reason
40152
40157
  });
40153
40158
  }
40154
- return toolSuccessStructured(result);
40159
+ return structuredToolSuccess(z70.object(ResearchQueryOutputSchema), result);
40155
40160
  });
40156
40161
  };
40157
40162
  }
@@ -40175,7 +40180,8 @@ function registerResearchQueryTool(server, deps) {
40175
40180
  timeoutMs,
40176
40181
  logger: logger59
40177
40182
  });
40178
- server.registerTool(
40183
+ registerStructuredTool(
40184
+ server,
40179
40185
  "research_query",
40180
40186
  {
40181
40187
  description,
@@ -40190,6 +40196,13 @@ function registerResearchQueryTool(server, deps) {
40190
40196
 
40191
40197
  // src/mcp/tools/research-add.ts
40192
40198
  import { z as z71 } from "zod";
40199
+ var OUTPUT_SCHEMA3 = {
40200
+ success: z71.boolean(),
40201
+ paperId: z71.string().optional(),
40202
+ title: z71.string().optional(),
40203
+ message: z71.string(),
40204
+ dryRun: z71.boolean().optional()
40205
+ };
40193
40206
  var ResearchAddInputSchema = z71.object({
40194
40207
  arxivId: z71.string().regex(/^\d{4}\.\d{4,5}$/, "Invalid arXiv ID format (expected XXXX.XXXXX)").describe('arXiv paper ID (e.g., "2401.12345")'),
40195
40208
  topic: z71.string().optional().describe("Research topic to categorize the paper under"),
@@ -40255,7 +40268,8 @@ function createResearchAddHandler(deps) {
40255
40268
  message: result.message
40256
40269
  });
40257
40270
  }
40258
- return toolSuccessStructured(result);
40271
+ const { errorCategory: _errorCategory, ...data } = result;
40272
+ return structuredToolSuccess(z71.object(OUTPUT_SCHEMA3), data);
40259
40273
  });
40260
40274
  };
40261
40275
  }
@@ -40278,19 +40292,13 @@ function registerResearchAddTool(server, deps) {
40278
40292
  timeoutMs,
40279
40293
  logger: logger59
40280
40294
  });
40281
- const outputSchema = {
40282
- success: z71.boolean(),
40283
- paperId: z71.string().optional(),
40284
- title: z71.string().optional(),
40285
- message: z71.string(),
40286
- dryRun: z71.boolean().optional()
40287
- };
40288
- server.registerTool(
40295
+ registerStructuredTool(
40296
+ server,
40289
40297
  "research_add",
40290
40298
  {
40291
40299
  description,
40292
40300
  inputSchema: toolSchema,
40293
- outputSchema,
40301
+ outputSchema: OUTPUT_SCHEMA3,
40294
40302
  annotations: getToolAnnotations("research_add")
40295
40303
  },
40296
40304
  toSdkCallback(wrappedHandler)
@@ -40321,7 +40329,9 @@ var ResearchAddSourceInputSchema = z72.object({
40321
40329
  has_tests: z72.boolean().optional(),
40322
40330
  has_docs: z72.boolean().optional(),
40323
40331
  has_paper: z72.boolean().optional()
40324
- }).optional().describe("Quality signals used to compute quality_score; provide explicitly \u2014 no GitHub metadata is fetched"),
40332
+ }).optional().describe(
40333
+ "Quality signals used to compute quality_score; provide explicitly \u2014 no GitHub metadata is fetched"
40334
+ ),
40325
40335
  techniques_extracted: z72.array(z72.string().max(100)).max(5).optional().describe("Techniques identified in this source (max 5)"),
40326
40336
  verdict: VerdictEnum.optional().describe("Adoption verdict"),
40327
40337
  verdict_notes: z72.string().max(500).optional().describe("Notes explaining the verdict"),
@@ -40458,7 +40468,8 @@ function createResearchAddSourceHandler(deps) {
40458
40468
  message: result.message
40459
40469
  });
40460
40470
  }
40461
- return toolSuccessStructured(result);
40471
+ const { errorCategory: _errorCategory, ...data } = result;
40472
+ return structuredToolSuccess(z72.object(RESEARCH_ADD_SOURCE_OUTPUT_SCHEMA), data);
40462
40473
  });
40463
40474
  };
40464
40475
  }
@@ -40495,7 +40506,8 @@ function registerResearchAddSourceTool(server, deps) {
40495
40506
  timeoutMs,
40496
40507
  logger: logger59
40497
40508
  });
40498
- server.registerTool(
40509
+ registerStructuredTool(
40510
+ server,
40499
40511
  "research_add_source",
40500
40512
  {
40501
40513
  description,
@@ -40800,7 +40812,7 @@ function createResearchDiscoverHandler(deps) {
40800
40812
  const startMs = Date.now();
40801
40813
  const response = await withToolError("Discovery failed", logger59, async () => {
40802
40814
  const result = await executeDiscovery(validationResult.data, logger59);
40803
- return toolSuccessStructured(result);
40815
+ return structuredToolSuccess(z73.object(RESEARCH_DISCOVER_OUTPUT_SCHEMA), result);
40804
40816
  });
40805
40817
  const durationMs = Date.now() - startMs;
40806
40818
  if (response.isError === true) {
@@ -40843,7 +40855,8 @@ function registerResearchDiscoverTool(server, deps) {
40843
40855
  timeoutMs,
40844
40856
  logger: logger59
40845
40857
  });
40846
- server.registerTool(
40858
+ registerStructuredTool(
40859
+ server,
40847
40860
  "research_discover",
40848
40861
  {
40849
40862
  description,
@@ -40869,6 +40882,12 @@ var RESEARCH_DISCOVER_OUTPUT_SCHEMA = {
40869
40882
 
40870
40883
  // src/mcp/tools/research-analyze.ts
40871
40884
  import { z as z74 } from "zod";
40885
+ var OUTPUT_SCHEMA4 = {
40886
+ focus: z74.string().optional(),
40887
+ success: z74.boolean().optional(),
40888
+ analysis: z74.unknown().optional(),
40889
+ recommendations: z74.array(z74.string()).optional()
40890
+ };
40872
40891
  var ResearchAnalyzeInputSchema = z74.object({
40873
40892
  focus: z74.enum(["gaps", "trends", "priorities", "stale", "coverage"]).describe(
40874
40893
  "Analysis focus: gaps (missing coverage), trends (topic distribution), priorities (P1/P2 backlog), stale (outdated entries), coverage (implementation status)"
@@ -41112,7 +41131,7 @@ function createResearchAnalyzeHandler(deps) {
41112
41131
  const logger59 = deps.logger ?? createLogger({ tool: "research_analyze" });
41113
41132
  return withToolError("Analysis failed", logger59, async () => {
41114
41133
  const result = await executeAnalysis(validationResult.data);
41115
- return toolSuccessStructured(result);
41134
+ return structuredToolSuccess(z74.object(OUTPUT_SCHEMA4), result);
41116
41135
  });
41117
41136
  };
41118
41137
  }
@@ -41133,18 +41152,13 @@ function registerResearchAnalyzeTool(server, deps) {
41133
41152
  timeoutMs,
41134
41153
  logger: logger59
41135
41154
  });
41136
- const outputSchema = {
41137
- focus: z74.string().optional(),
41138
- success: z74.boolean().optional(),
41139
- analysis: z74.unknown().optional(),
41140
- recommendations: z74.array(z74.string()).optional()
41141
- };
41142
- server.registerTool(
41155
+ registerStructuredTool(
41156
+ server,
41143
41157
  "research_analyze",
41144
41158
  {
41145
41159
  description,
41146
41160
  inputSchema: toolSchema,
41147
- outputSchema,
41161
+ outputSchema: OUTPUT_SCHEMA4,
41148
41162
  annotations: getToolAnnotations("research_analyze")
41149
41163
  },
41150
41164
  toSdkCallback(wrappedHandler)
@@ -41154,6 +41168,12 @@ function registerResearchAnalyzeTool(server, deps) {
41154
41168
 
41155
41169
  // src/mcp/tools/research-catalog-review.ts
41156
41170
  import { z as z75 } from "zod";
41171
+ var OUTPUT_SCHEMA5 = {
41172
+ action: z75.string().optional(),
41173
+ success: z75.boolean().optional(),
41174
+ message: z75.string().optional(),
41175
+ data: z75.unknown().optional()
41176
+ };
41157
41177
  var ResearchCatalogReviewInputSchema = z75.object({
41158
41178
  action: z75.enum(["list", "approve", "dismiss", "flush"]).describe(
41159
41179
  "Action: list (show pending), approve (add to registry), dismiss (remove), flush (clear all)"
@@ -41285,7 +41305,7 @@ function createCatalogReviewHandler(deps) {
41285
41305
  if (!result.success) {
41286
41306
  return toolStructuredError({ errorCategory: "validation", message: result.message });
41287
41307
  }
41288
- return toolSuccessStructured(result);
41308
+ return structuredToolSuccess(z75.object(OUTPUT_SCHEMA5), result);
41289
41309
  });
41290
41310
  };
41291
41311
  }
@@ -41308,18 +41328,13 @@ function registerResearchCatalogReviewTool(server, deps) {
41308
41328
  timeoutMs,
41309
41329
  logger: logger59
41310
41330
  });
41311
- const outputSchema = {
41312
- action: z75.string().optional(),
41313
- success: z75.boolean().optional(),
41314
- message: z75.string().optional(),
41315
- data: z75.unknown().optional()
41316
- };
41317
- server.registerTool(
41331
+ registerStructuredTool(
41332
+ server,
41318
41333
  "research_catalog_review",
41319
41334
  {
41320
41335
  description,
41321
41336
  inputSchema: toolSchema,
41322
- outputSchema,
41337
+ outputSchema: OUTPUT_SCHEMA5,
41323
41338
  annotations: getToolAnnotations("research_catalog_review")
41324
41339
  },
41325
41340
  toSdkCallback(wrappedHandler)
@@ -41329,6 +41344,14 @@ function registerResearchCatalogReviewTool(server, deps) {
41329
41344
 
41330
41345
  // src/mcp/tools/research-synthesize.ts
41331
41346
  import { z as z76 } from "zod";
41347
+ var OUTPUT_SCHEMA6 = {
41348
+ clusters: z76.array(z76.unknown()).optional(),
41349
+ totalPapers: z76.number().optional(),
41350
+ topicCount: z76.number().optional(),
41351
+ crossCuttingThemes: z76.array(z76.unknown()).optional(),
41352
+ alignmentSummary: z76.unknown().optional(),
41353
+ featureGates: z76.array(z76.unknown()).optional()
41354
+ };
41332
41355
  var ResearchSynthesizeInputSchema = z76.object({
41333
41356
  topic: z76.string().optional().describe("Optional topic to filter synthesis to a single cluster")
41334
41357
  });
@@ -41350,7 +41373,7 @@ function createResearchSynthesizeHandler(deps) {
41350
41373
  message: `Synthesis failed: ${result.error.message}`
41351
41374
  });
41352
41375
  }
41353
- return toolSuccessStructured(result.value);
41376
+ return structuredToolSuccess(z76.object(OUTPUT_SCHEMA6), result.value);
41354
41377
  });
41355
41378
  };
41356
41379
  }
@@ -41370,20 +41393,13 @@ function registerResearchSynthesizeTool(server, deps) {
41370
41393
  timeoutMs,
41371
41394
  logger: logger59
41372
41395
  });
41373
- const outputSchema = {
41374
- clusters: z76.array(z76.unknown()).optional(),
41375
- totalPapers: z76.number().optional(),
41376
- topicCount: z76.number().optional(),
41377
- crossCuttingThemes: z76.array(z76.unknown()).optional(),
41378
- alignmentSummary: z76.unknown().optional(),
41379
- featureGates: z76.array(z76.unknown()).optional()
41380
- };
41381
- server.registerTool(
41396
+ registerStructuredTool(
41397
+ server,
41382
41398
  "research_synthesize",
41383
41399
  {
41384
41400
  description,
41385
41401
  inputSchema: toolSchema,
41386
- outputSchema,
41402
+ outputSchema: OUTPUT_SCHEMA6,
41387
41403
  annotations: getToolAnnotations("research_synthesize")
41388
41404
  },
41389
41405
  toSdkCallback(wrappedHandler)
@@ -42531,6 +42547,21 @@ function recordSpecOutcome(success, durationMs, stage) {
42531
42547
 
42532
42548
  // src/mcp/tools/memory-query.ts
42533
42549
  import { z as z80 } from "zod";
42550
+ var OUTPUT_SCHEMA7 = {
42551
+ query: z80.string(),
42552
+ expandedQuery: z80.string().optional(),
42553
+ results: z80.array(z80.unknown()),
42554
+ count: z80.number(),
42555
+ source: z80.string(),
42556
+ // #4999: the SDK validates structured content against this schema with
42557
+ // `additionalProperties: false`, so a field added to the response and not
42558
+ // declared here makes EVERY call fail with -32602 rather than merely going
42559
+ // unreported. The integration test caught that; the unit tests could not,
42560
+ // because they call the handler directly and never cross the protocol.
42561
+ searched: z80.array(z80.string()),
42562
+ unavailable: z80.array(z80.string()),
42563
+ errored: z80.array(z80.string())
42564
+ };
42534
42565
  var MemoryQueryInputSchema = z80.object({
42535
42566
  query: z80.string().min(1).max(500).describe("Search query to match against memory contents"),
42536
42567
  limit: z80.number().int().min(1).max(50).optional().default(10).describe("Maximum results to return (default: 10, max: 50)"),
@@ -42635,7 +42666,7 @@ async function memoryQueryHandler(args, ctx) {
42635
42666
  }
42636
42667
  return withToolError("Memory query failed", ctx.logger, async () => {
42637
42668
  const result = await executeMemoryQuery(validationResult.data, ctx.logger);
42638
- return toolSuccessStructured(result);
42669
+ return structuredToolSuccess(z80.object(OUTPUT_SCHEMA7), result);
42639
42670
  });
42640
42671
  }
42641
42672
  function registerMemoryQueryTool(server, deps) {
@@ -42653,27 +42684,13 @@ function registerMemoryQueryTool(server, deps) {
42653
42684
  });
42654
42685
  const timeoutMs = getToolTimeout("memory_query", deps.security);
42655
42686
  const wrappedHandler = wrapToolWithTimeout("memory_query", secureHandler, { timeoutMs, logger: logger59 });
42656
- const outputSchema = {
42657
- query: z80.string(),
42658
- expandedQuery: z80.string().optional(),
42659
- results: z80.array(z80.unknown()),
42660
- count: z80.number(),
42661
- source: z80.string(),
42662
- // #4999: the SDK validates structured content against this schema with
42663
- // `additionalProperties: false`, so a field added to the response and not
42664
- // declared here makes EVERY call fail with -32602 rather than merely going
42665
- // unreported. The integration test caught that; the unit tests could not,
42666
- // because they call the handler directly and never cross the protocol.
42667
- searched: z80.array(z80.string()),
42668
- unavailable: z80.array(z80.string()),
42669
- errored: z80.array(z80.string())
42670
- };
42671
- server.registerTool(
42687
+ registerStructuredTool(
42688
+ server,
42672
42689
  "memory_query",
42673
42690
  {
42674
42691
  description,
42675
42692
  inputSchema: toolSchema,
42676
- outputSchema,
42693
+ outputSchema: OUTPUT_SCHEMA7,
42677
42694
  annotations: getToolAnnotations("memory_query")
42678
42695
  },
42679
42696
  toSdkCallback(wrappedHandler)
@@ -42683,6 +42700,16 @@ function registerMemoryQueryTool(server, deps) {
42683
42700
 
42684
42701
  // src/mcp/tools/memory-stats.ts
42685
42702
  import { z as z81 } from "zod";
42703
+ var OUTPUT_SCHEMA8 = {
42704
+ backends: z81.unknown(),
42705
+ session: z81.unknown().optional(),
42706
+ belief: z81.unknown().optional(),
42707
+ typed: z81.unknown().optional(),
42708
+ mobimem: z81.unknown().optional(),
42709
+ decay: z81.unknown().optional(),
42710
+ registry: z81.array(z81.unknown()).optional(),
42711
+ collectedAt: z81.string().optional()
42712
+ };
42686
42713
  var MemoryStatsInputSchema = z81.object({
42687
42714
  includeDecay: z81.boolean().optional().default(true).describe("Include decay statistics (default: true)")
42688
42715
  });
@@ -42795,7 +42822,7 @@ async function memoryStatsHandler(args, ctx) {
42795
42822
  }
42796
42823
  return withToolError("Memory stats failed", ctx.logger, async () => {
42797
42824
  const result = await collectMemoryStats(validationResult.data, ctx.logger);
42798
- return toolSuccessStructured(result);
42825
+ return structuredToolSuccess(z81.object(OUTPUT_SCHEMA8), result);
42799
42826
  });
42800
42827
  }
42801
42828
  function registerMemoryStatsTool(server, deps) {
@@ -42811,22 +42838,13 @@ function registerMemoryStatsTool(server, deps) {
42811
42838
  });
42812
42839
  const timeoutMs = getToolTimeout("memory_stats", deps.security);
42813
42840
  const wrappedHandler = wrapToolWithTimeout("memory_stats", secureHandler, { timeoutMs, logger: logger59 });
42814
- const outputSchema = {
42815
- backends: z81.unknown(),
42816
- session: z81.unknown().optional(),
42817
- belief: z81.unknown().optional(),
42818
- typed: z81.unknown().optional(),
42819
- mobimem: z81.unknown().optional(),
42820
- decay: z81.unknown().optional(),
42821
- registry: z81.array(z81.unknown()).optional(),
42822
- collectedAt: z81.string().optional()
42823
- };
42824
- server.registerTool(
42841
+ registerStructuredTool(
42842
+ server,
42825
42843
  "memory_stats",
42826
42844
  {
42827
42845
  description,
42828
42846
  inputSchema: toolSchema,
42829
- outputSchema,
42847
+ outputSchema: OUTPUT_SCHEMA8,
42830
42848
  annotations: getToolAnnotations("memory_stats")
42831
42849
  },
42832
42850
  toSdkCallback(wrappedHandler)
@@ -42836,6 +42854,13 @@ function registerMemoryStatsTool(server, deps) {
42836
42854
 
42837
42855
  // src/mcp/tools/memory-write.ts
42838
42856
  import { z as z82 } from "zod";
42857
+ var OUTPUT_SCHEMA9 = {
42858
+ success: z82.boolean(),
42859
+ backend: z82.string(),
42860
+ key: z82.string(),
42861
+ deduplicated: z82.boolean().optional(),
42862
+ error: z82.string().optional()
42863
+ };
42839
42864
  var SOURCE_TRUST_TIER_DESCRIPTION = "Trust tier ('1'-'4') of where the content came from: '1' only for content the caller authored or took from repo files, '3' for external web or issue text. Omitted means '3'. The stored tier is the least-trusted of this and the caller's measured tier, so it can lower trust, never raise it; when the caller is unmeasured, a declaration counts as at most '3'.";
42840
42865
  var MemoryWriteInputSchema = z82.object({
42841
42866
  key: z82.string().min(1).max(200).describe("Memory identifier or subject"),
@@ -43026,7 +43051,7 @@ async function memoryWriteHandler(args, ctx) {
43026
43051
  message: JSON.stringify(result, null, 2)
43027
43052
  });
43028
43053
  }
43029
- return toolSuccessStructured(result);
43054
+ return structuredToolSuccess(z82.object(OUTPUT_SCHEMA9), result);
43030
43055
  });
43031
43056
  }
43032
43057
  function registerMemoryWriteTool(server, deps) {
@@ -43050,19 +43075,13 @@ function registerMemoryWriteTool(server, deps) {
43050
43075
  const guardedHandler = withPrerequisite("memory_write", secureHandler);
43051
43076
  const timeoutMs = getToolTimeout("memory_write", deps.security);
43052
43077
  const wrappedHandler = wrapToolWithTimeout("memory_write", guardedHandler, { timeoutMs, logger: logger59 });
43053
- const outputSchema = {
43054
- success: z82.boolean(),
43055
- backend: z82.string(),
43056
- key: z82.string(),
43057
- deduplicated: z82.boolean().optional(),
43058
- error: z82.string().optional()
43059
- };
43060
- server.registerTool(
43078
+ registerStructuredTool(
43079
+ server,
43061
43080
  "memory_write",
43062
43081
  {
43063
43082
  description,
43064
43083
  inputSchema: toolSchema,
43065
- outputSchema,
43084
+ outputSchema: OUTPUT_SCHEMA9,
43066
43085
  annotations: getToolAnnotations("memory_write")
43067
43086
  },
43068
43087
  toSdkCallback(wrappedHandler)
@@ -43342,8 +43361,9 @@ function weatherReportHandler(args, ctx) {
43342
43361
  };
43343
43362
  const report = generateWeatherReport(opts);
43344
43363
  const serialized = serializeReport(report);
43345
- const data = serialized;
43346
- return Promise.resolve(toolSuccessStructured(data));
43364
+ return Promise.resolve(
43365
+ structuredToolSuccess(z84.object(WEATHER_REPORT_OUTPUT_SCHEMA), serialized)
43366
+ );
43347
43367
  } catch (caught) {
43348
43368
  return Promise.resolve(toolErrorResponse("Weather report failed", caught, ctx.logger));
43349
43369
  }
@@ -43372,12 +43392,12 @@ function registerWeatherReportTool(server, deps) {
43372
43392
  rateLimiter: deps.rateLimiter,
43373
43393
  logger: logger59
43374
43394
  });
43375
- const timeoutMs = getToolTimeout("weather_report", deps.security);
43376
43395
  const wrappedHandler = wrapToolWithTimeout("weather_report", secureHandler, {
43377
- timeoutMs,
43396
+ timeoutMs: getToolTimeout("weather_report", deps.security),
43378
43397
  logger: logger59
43379
43398
  });
43380
- server.registerTool(
43399
+ registerStructuredTool(
43400
+ server,
43381
43401
  "weather_report",
43382
43402
  {
43383
43403
  description,
@@ -47304,7 +47324,7 @@ function buildVotingInput(plan, config) {
47304
47324
  }
47305
47325
  async function executeSingleVote(plan, config, log) {
47306
47326
  try {
47307
- const { executeVoting } = await import("./consensus-vote-K4SNLVKO.js");
47327
+ const { executeVoting } = await import("./consensus-vote-6ISHSQ73.js");
47308
47328
  const input = buildVotingInput(plan, config);
47309
47329
  const result = await executeVoting(input, log);
47310
47330
  return parseVotingResult(result);
@@ -49133,7 +49153,7 @@ function createVoteStage({ config, startStage }) {
49133
49153
  const strategy = config.votingStrategy ?? "higher_order";
49134
49154
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
49135
49155
  try {
49136
- const { executeVoting } = await import("./consensus-vote-K4SNLVKO.js");
49156
+ const { executeVoting } = await import("./consensus-vote-6ISHSQ73.js");
49137
49157
  const proposal = buildVoteProposal(plan, research);
49138
49158
  const votingResult = await executeVoting(
49139
49159
  {
@@ -52112,7 +52132,7 @@ function createSurveyHandler(deps) {
52112
52132
  });
52113
52133
  return withToolError("Survey failed", logger59, async () => {
52114
52134
  const result = await executeSurvey(validation.data, logger59);
52115
- return toolSuccessStructured(result);
52135
+ return structuredToolSuccess(z104.object(SURVEY_OUTPUT_SCHEMA), result);
52116
52136
  });
52117
52137
  };
52118
52138
  }
@@ -52136,7 +52156,8 @@ function registerSurveyOssLandscapeTool(server, deps) {
52136
52156
  timeoutMs,
52137
52157
  logger: logger59
52138
52158
  });
52139
- server.registerTool(
52159
+ registerStructuredTool(
52160
+ server,
52140
52161
  "survey_oss_landscape",
52141
52162
  {
52142
52163
  description: SURVEY_DESCRIPTION,
@@ -52251,7 +52272,9 @@ function createVendorPublishingAuditHandler(deps) {
52251
52272
  ctx.logger.debug("Vendor publishing audit", { vendor: validation.data.vendor });
52252
52273
  return withToolError("Vendor publishing audit failed", logger59, () => {
52253
52274
  const result = lookupVendor(validation.data.vendor);
52254
- return Promise.resolve(toolSuccessStructured(result));
52275
+ return Promise.resolve(
52276
+ structuredToolSuccess(z105.object(VENDOR_PUBLISHING_OUTPUT_SCHEMA), result)
52277
+ );
52255
52278
  });
52256
52279
  };
52257
52280
  }
@@ -52284,7 +52307,8 @@ function registerVendorPublishingAuditTool(server, deps) {
52284
52307
  timeoutMs,
52285
52308
  logger: logger59
52286
52309
  });
52287
- server.registerTool(
52310
+ registerStructuredTool(
52311
+ server,
52288
52312
  "vendor_publishing_audit",
52289
52313
  {
52290
52314
  description: VENDOR_PUBLISHING_DESCRIPTION,
@@ -52486,7 +52510,7 @@ function createCompareDataFeedsHandler(deps) {
52486
52510
  });
52487
52511
  return withToolError("Compare data feeds failed", logger59, () => {
52488
52512
  const result = executeCompare(validation.data);
52489
- return Promise.resolve(toolSuccessStructured(result));
52513
+ return Promise.resolve(structuredToolSuccess(z106.object(COMPARE_OUTPUT_SCHEMA), result));
52490
52514
  });
52491
52515
  };
52492
52516
  }
@@ -52523,7 +52547,8 @@ function registerCompareDataFeedsTool(server, deps) {
52523
52547
  timeoutMs,
52524
52548
  logger: logger59
52525
52549
  });
52526
- server.registerTool(
52550
+ registerStructuredTool(
52551
+ server,
52527
52552
  "compare_data_feeds",
52528
52553
  {
52529
52554
  description: COMPARE_DESCRIPTION,
@@ -54835,7 +54860,7 @@ async function executeDevPipelineBody(taskText, stages, pipelineOptions, simulat
54835
54860
  detail: output2
54836
54861
  });
54837
54862
  }
54838
- return toolSuccessStructured(output2);
54863
+ return structuredToolSuccess(z115.record(z115.string(), z115.unknown()), output2);
54839
54864
  }
54840
54865
  function describeIncompleteRun(result) {
54841
54866
  if (result.planStatus !== void 0) {
@@ -55113,7 +55138,7 @@ async function executePipelineBody(task, stages, run) {
55113
55138
  detail: output2
55114
55139
  });
55115
55140
  }
55116
- return toolSuccessStructured(output2);
55141
+ return structuredToolSuccess(z116.record(z116.string(), z116.unknown()), output2);
55117
55142
  }
55118
55143
  function createPipelineAgentStages(input, config) {
55119
55144
  return createAgentStages({
@@ -56060,8 +56085,8 @@ function createAnnotationsProxy(server) {
56060
56085
  }
56061
56086
 
56062
56087
  // src/mcp/workspace-roots.ts
56063
- import { existsSync as existsSync16 } from "node:fs";
56064
- import { join as join17 } from "node:path";
56088
+ import { existsSync as existsSync16, realpathSync as realpathSync6, statSync as statSync4 } from "node:fs";
56089
+ import { isAbsolute as isAbsolute6, join as join17 } from "node:path";
56065
56090
  import { homedir as homedir3 } from "node:os";
56066
56091
  import { fileURLToPath as fileURLToPath2 } from "node:url";
56067
56092
  function deriveWorkspaceRootFromRoots(roots) {
@@ -56083,19 +56108,39 @@ function deriveWorkspaceRootFromRoots(roots) {
56083
56108
  var WORKSPACE_ROOT_READY_TIMEOUT_MS = 1e3;
56084
56109
  var workspaceRootReady = Promise.resolve();
56085
56110
  var resolution;
56111
+ function resolveClaudeProjectRoot(logger59) {
56112
+ const candidate = process.env["CLAUDE_PROJECT_DIR"];
56113
+ if (candidate === void 0) return null;
56114
+ try {
56115
+ if (isAbsolute6(candidate)) {
56116
+ const canonical = realpathSync6(candidate);
56117
+ const root = statSync4(canonical).isDirectory() ? findRepoRoot(canonical) : null;
56118
+ if (root !== null && setActiveWorkspaceRoot(root)) return root;
56119
+ }
56120
+ } catch {
56121
+ }
56122
+ logger59.warn("Invalid CLAUDE_PROJECT_DIR; falling back to MCP client roots");
56123
+ return null;
56124
+ }
56086
56125
  function beginWorkspaceRootResolution(logger59) {
56087
56126
  if (resolution?.timer !== void 0) clearTimeout(resolution.timer);
56088
56127
  let resolveReady;
56089
56128
  workspaceRootReady = new Promise((resolve13) => {
56090
56129
  resolveReady = resolve13;
56091
56130
  });
56131
+ const root = resolveClaudeProjectRoot(logger59);
56092
56132
  resolution = {
56093
56133
  logger: logger59,
56094
56134
  fallbackRoot: findRepoRoot(process.cwd()) ?? homedir3(),
56095
56135
  resolve: resolveReady,
56136
+ fromClaudeProjectDir: root !== null,
56096
56137
  settled: false,
56097
56138
  timedOut: false
56098
56139
  };
56140
+ if (root !== null) {
56141
+ logger59.info("Resolved workspace root from CLAUDE_PROJECT_DIR", { workspaceRoot: root });
56142
+ finishResolution(resolution);
56143
+ }
56099
56144
  }
56100
56145
  function finishResolution(state) {
56101
56146
  if (state.timer !== void 0) clearTimeout(state.timer);
@@ -56140,6 +56185,10 @@ function applyWorkspaceRoots(roots, logger59) {
56140
56185
  async function resolveWorkspaceRootFromClient(server, logger59) {
56141
56186
  if (resolution === void 0) beginWorkspaceRootResolution(logger59);
56142
56187
  const state = resolution;
56188
+ if (state?.fromClaudeProjectDir === true) return;
56189
+ await requestWorkspaceRoots(server, logger59, state);
56190
+ }
56191
+ async function requestWorkspaceRoots(server, logger59, state) {
56143
56192
  try {
56144
56193
  if (server.server.getClientCapabilities()?.roots === void 0) {
56145
56194
  logger59.debug(
@@ -58957,4 +59006,4 @@ export {
58957
59006
  initializeSandbox,
58958
59007
  getSandboxMode
58959
59008
  };
58960
- //# sourceMappingURL=chunk-45AUQYWF.js.map
59009
+ //# sourceMappingURL=chunk-UETCXCAS.js.map