@pathmode/mcp-server 1.5.0 → 1.6.0

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/dist/index.js CHANGED
@@ -33903,6 +33903,7 @@ exports.getCompileIntentPrompt = getCompileIntentPrompt;
33903
33903
  exports.formatIntentMd = formatIntentMd;
33904
33904
  exports.formatCursorRules = formatCursorRules;
33905
33905
  exports.formatClaudeMdSection = formatClaudeMdSection;
33906
+ exports.formatOutcomeRubric = formatOutcomeRubric;
33906
33907
  /** Extract text from a string or structured outcome. */
33907
33908
  function getOutcomeText(o) {
33908
33909
  return typeof o === 'string' ? o : o.text;
@@ -34258,6 +34259,224 @@ function formatClaudeMdSection(spec) {
34258
34259
  sections.push('<!-- PATHMODE:END -->');
34259
34260
  return sections.join('\n\n');
34260
34261
  }
34262
+ function getOutcomePriority(o) {
34263
+ return typeof o === 'string' ? undefined : o.priority;
34264
+ }
34265
+ /** Map an outcome priority to grader-facing strength language. */
34266
+ function priorityToBar(priority) {
34267
+ switch (priority) {
34268
+ case 'should': return 'Expected';
34269
+ case 'could': return 'Optional — note if present, do not fail if absent';
34270
+ case 'must':
34271
+ default: return 'Required';
34272
+ }
34273
+ }
34274
+ /**
34275
+ * Dedup constraint strings by a normalized key — strips trailing parenthetical
34276
+ * refs (e.g. "(CON-2)"), trailing punctuation, and case, so an intent constraint
34277
+ * and its constitution twin collapse to one. Keeps the first (more specific) form.
34278
+ */
34279
+ function dedupeByNormalized(items) {
34280
+ const seen = new Set();
34281
+ const out = [];
34282
+ for (const raw of items) {
34283
+ const item = raw?.trim();
34284
+ if (!item)
34285
+ continue;
34286
+ const key = item
34287
+ .toLowerCase()
34288
+ .replace(/\s*\([^)]*\)\s*/g, ' ')
34289
+ .replace(/[.\s]+$/g, '')
34290
+ .replace(/\s+/g, ' ')
34291
+ .trim();
34292
+ if (seen.has(key))
34293
+ continue;
34294
+ seen.add(key);
34295
+ out.push(item);
34296
+ }
34297
+ return out;
34298
+ }
34299
+ /**
34300
+ * Build the writer-facing task description — what the agent reads. Maps to the
34301
+ * `description` field of a `user.define_outcome` event.
34302
+ */
34303
+ function buildWriterDescription(spec) {
34304
+ const sections = [];
34305
+ sections.push(`Deliver: ${spec.title || 'Untitled intent'}.`);
34306
+ if (spec.objective) {
34307
+ sections.push('');
34308
+ sections.push(`Why this matters: ${spec.objective}`);
34309
+ }
34310
+ if (spec.scope?.inScope?.length) {
34311
+ sections.push('');
34312
+ sections.push('In scope:');
34313
+ for (const item of spec.scope.inScope)
34314
+ sections.push(`- ${item}`);
34315
+ }
34316
+ if (spec.scope?.outOfScope?.length) {
34317
+ sections.push('');
34318
+ sections.push('Out of scope — do not do these:');
34319
+ for (const item of spec.scope.outOfScope)
34320
+ sections.push(`- ${item}`);
34321
+ }
34322
+ const ic = spec.implementationContext;
34323
+ if (ic?.relevantAreas?.length) {
34324
+ sections.push('');
34325
+ sections.push('Relevant areas of the codebase:');
34326
+ for (const a of ic.relevantAreas) {
34327
+ if (a?.path?.trim())
34328
+ sections.push(`- ${a.path}${a.reason?.trim() ? ` — ${a.reason}` : ''}`);
34329
+ }
34330
+ }
34331
+ if (ic?.currentBehavior?.trim()) {
34332
+ sections.push('');
34333
+ sections.push(`Current behavior: ${ic.currentBehavior.trim()}`);
34334
+ }
34335
+ sections.push('');
34336
+ sections.push('Write your deliverables to /mnt/session/outputs/. Iterate until the grader is satisfied.');
34337
+ return sections.join('\n');
34338
+ }
34339
+ /**
34340
+ * Build the grader-facing rubric — what the independent grader reads. Maps to the
34341
+ * `rubric` field of a `user.define_outcome` event. Every criterion is written to
34342
+ * force the grader to find concrete evidence rather than trust the writer.
34343
+ */
34344
+ function buildGraderRubric(spec, opts = {}) {
34345
+ const sections = [];
34346
+ sections.push(`You are grading the artifact(s) in /mnt/session/outputs/ for: "${spec.title || 'Untitled intent'}".`);
34347
+ sections.push('Score each criterion below independently. PASS a criterion only when you can point to concrete evidence in the artifact — a measured value, a visible state, a passing test, or a quoted line. The writer asserting it is done is NOT evidence.');
34348
+ // Outcomes → coverage criteria
34349
+ const outcomes = (spec.outcomes ?? []).filter((o) => getOutcomeText(o)?.trim());
34350
+ if (outcomes.length) {
34351
+ sections.push('');
34352
+ sections.push('## Outcomes (coverage)');
34353
+ let i = 1;
34354
+ for (const o of outcomes) {
34355
+ const bar = priorityToBar(getOutcomePriority(o));
34356
+ sections.push(`${i}. [${bar}] ${getOutcomeText(o)}`);
34357
+ sections.push(' - Evidence: point to the specific value, state, or test result in the artifact that proves this. If you cannot, mark FAIL.');
34358
+ i++;
34359
+ }
34360
+ }
34361
+ // Edge cases → must-handle criteria (structured edge cases + implementation-context risks)
34362
+ const edgeCases = (spec.edgeCases ?? []).filter((ec) => ec.scenario?.trim() || ec.expectedBehavior?.trim());
34363
+ const risks = (spec.implementationContext?.risks ?? []).filter((r) => r?.trim());
34364
+ if (edgeCases.length || risks.length) {
34365
+ sections.push('');
34366
+ sections.push('## Edge cases (must handle)');
34367
+ for (const ec of edgeCases) {
34368
+ sections.push(`- ${ec.scenario} → expected: ${ec.expectedBehavior}`);
34369
+ sections.push(` - Evidence: locate or construct the "${ec.scenario}" condition and confirm the expected behavior occurs. Absent handling = FAIL.`);
34370
+ }
34371
+ for (const r of risks) {
34372
+ sections.push(`- Guard against: ${r}`);
34373
+ sections.push(' - Evidence: show the artifact handles this failure mode — a test, a guard clause, or a visible safe state. Unaddressed = FAIL.');
34374
+ }
34375
+ }
34376
+ // Constraints + constitution + out-of-scope → out-of-bounds / no-fire list
34377
+ const outOfBounds = [];
34378
+ if (spec.constraints?.length)
34379
+ outOfBounds.push(...spec.constraints);
34380
+ if (opts.constitutionRules?.length)
34381
+ outOfBounds.push(...opts.constitutionRules);
34382
+ if (spec.scope?.outOfScope?.length) {
34383
+ for (const item of spec.scope.outOfScope)
34384
+ outOfBounds.push(`Stays out of scope: ${item}`);
34385
+ }
34386
+ const cleanedBounds = dedupeByNormalized(outOfBounds);
34387
+ if (cleanedBounds.length) {
34388
+ sections.push('');
34389
+ sections.push('## Constraints (out of bounds — FAIL the artifact if any are violated)');
34390
+ for (const c of cleanedBounds)
34391
+ sections.push(`- ${c}`);
34392
+ }
34393
+ // Verification → procedures the grader must run to produce evidence
34394
+ const v = spec.verification;
34395
+ const checks = [];
34396
+ for (const t of v?.e2eTests ?? [])
34397
+ if (t?.trim())
34398
+ checks.push(`[e2e] ${t}`);
34399
+ for (const t of v?.unitTests ?? [])
34400
+ if (t?.trim())
34401
+ checks.push(`[unit] ${t}`);
34402
+ for (const t of v?.manualChecks ?? [])
34403
+ if (t?.trim())
34404
+ checks.push(`[manual] ${t}`);
34405
+ for (const t of spec.implementationContext?.verificationSuggestions ?? [])
34406
+ if (t?.trim())
34407
+ checks.push(`[suggested] ${t}`);
34408
+ if (checks.length) {
34409
+ sections.push('');
34410
+ sections.push('## Checks to run (produce the evidence yourself)');
34411
+ for (const c of checks)
34412
+ sections.push(`- ${c}`);
34413
+ }
34414
+ // Health metrics → observable-signal criteria
34415
+ const metrics = (spec.healthMetrics ?? []).filter((m) => m?.trim());
34416
+ if (metrics.length) {
34417
+ sections.push('');
34418
+ sections.push('## Observable signals');
34419
+ for (const m of metrics) {
34420
+ sections.push(`- The artifact leaves a way to measure: ${m}`);
34421
+ }
34422
+ }
34423
+ // Grader output format — proven shape from the Outcomes cookbook
34424
+ sections.push('');
34425
+ sections.push('## Output format');
34426
+ sections.push('Line 1: a scoreboard — "Outcomes X/Y met. Constraints OK|VIOLATED. Edge cases X/Y."');
34427
+ sections.push('Then one bullet per FAILED item only: "<section> <item> — FAIL. <what is missing and what to change>." One sentence per bullet.');
34428
+ sections.push('Do not fail the artifact for style preferences, pre-existing issues outside this intent, or anything not listed above.');
34429
+ return sections.join('\n');
34430
+ }
34431
+ /**
34432
+ * Generate a Claude Managed Agents "Outcomes" rubric document for an intent.
34433
+ *
34434
+ * Outcomes (`user.define_outcome`) takes two separate fields: a `description`
34435
+ * the writer agent reads, and a `rubric` the independent grader reads. This
34436
+ * exporter renders both — clearly separated so they paste straight into the API —
34437
+ * turning the intent's outcomes, edge cases, constraints, constitution rules and
34438
+ * verification into checkable, evidence-forcing grader criteria.
34439
+ *
34440
+ * Docs: https://platform.claude.com/docs/en/managed-agents/define-outcomes
34441
+ */
34442
+ function formatOutcomeRubric(spec, opts = {}) {
34443
+ const maxIterations = opts.maxIterations ?? 5;
34444
+ const description = buildWriterDescription(spec);
34445
+ const rubric = buildGraderRubric(spec, opts);
34446
+ const hasVerification = [
34447
+ ...(spec.verification?.e2eTests ?? []),
34448
+ ...(spec.verification?.unitTests ?? []),
34449
+ ...(spec.verification?.manualChecks ?? []),
34450
+ ].some((t) => t?.trim());
34451
+ const doc = [];
34452
+ doc.push('<!-- Pathmode → Claude Managed Agents: Outcomes rubric -->');
34453
+ doc.push(`<!-- Generated ${new Date().toISOString()} | pathmode.io -->`);
34454
+ doc.push('');
34455
+ doc.push('# How to use this');
34456
+ doc.push('');
34457
+ doc.push('Send a `user.define_outcome` event to a Managed Agents session (beta header `managed-agents-2026-04-01`):');
34458
+ doc.push('- Put **Writer Description** into the `description` field (the agent reads this).');
34459
+ doc.push('- Put **Grader Rubric** into the `rubric` field (the independent grader reads this).');
34460
+ doc.push(`- Suggested \`max_iterations\`: ${maxIterations} (Outcomes default 3, max 20).`);
34461
+ if (!hasVerification) {
34462
+ doc.push('');
34463
+ doc.push('> ⚠ This intent has no verification defined, so grader criteria fall back to generic evidence requirements. Run `verify-intent` to sharpen the checks.');
34464
+ }
34465
+ doc.push('');
34466
+ doc.push('---');
34467
+ doc.push('');
34468
+ doc.push('# Writer Description');
34469
+ doc.push('');
34470
+ doc.push(description);
34471
+ doc.push('');
34472
+ doc.push('---');
34473
+ doc.push('');
34474
+ doc.push('# Grader Rubric');
34475
+ doc.push('');
34476
+ doc.push(rubric);
34477
+ doc.push('');
34478
+ return doc.join('\n');
34479
+ }
34261
34480
 
34262
34481
 
34263
34482
  /***/ }),
@@ -64772,11 +64991,27 @@ function startMcpServer() {
64772
64991
  return { content: [{ type: 'text', text: `Graph analysis failed: ${e.message}` }] };
64773
64992
  }
64774
64993
  });
64994
+ /** Map a cloud ApiIntent into the IntentFields shape the formatters consume. */
64995
+ function apiIntentToFields(intent) {
64996
+ const v = (intent.verification || {});
64997
+ return {
64998
+ id: intent.id,
64999
+ title: intent.title,
65000
+ objective: intent.objective,
65001
+ outcomes: intent.outcomes ?? [],
65002
+ constraints: intent.constraints,
65003
+ edgeCases: (intent.edgeCases ?? []).map((e) => ({ scenario: e.scenario, expectedBehavior: e.expectedBehavior })),
65004
+ healthMetrics: intent.healthMetrics,
65005
+ scope: intent.scope,
65006
+ verification: { manualChecks: v.manualChecks, unitTests: v.unitTests, e2eTests: v.e2eTests },
65007
+ implementationContext: intent.implementationContext ?? undefined,
65008
+ };
65009
+ }
64775
65010
  server.registerTool('export_context', {
64776
65011
  title: 'Export Context',
64777
- description: 'Export workspace context as a formatted file. Use "claude-md" for CLAUDE.md (full workspace context), "cursorrules" for Cursor AI rules, or "intent-md" for a single intent specification file. For cursorrules/intent-md, product context is always derived from the resolved intent. For claude-md, pass productId to select a specific product, otherwise the first active product is used.',
65012
+ description: 'Export workspace context as a formatted file. Use "claude-md" for CLAUDE.md (full workspace context), "cursorrules" for Cursor AI rules, "intent-md" for a single intent specification file, or "outcome-rubric" for a Claude Managed Agents Outcomes rubric (writer description + evidence-forcing grader rubric) derived from the resolved intent, its implementation context, and the workspace constitution. For cursorrules/intent-md/outcome-rubric, product context is always derived from the resolved intent. For claude-md, pass productId to select a specific product, otherwise the first active product is used.',
64778
65013
  inputSchema: {
64779
- format: zod_1.z.enum(['claude-md', 'cursorrules', 'intent-md']).describe('Export format'),
65014
+ format: zod_1.z.enum(['claude-md', 'cursorrules', 'intent-md', 'outcome-rubric']).describe('Export format'),
64780
65015
  intentId: zod_1.z.string().optional().describe('Intent ID (optional, for cursorrules and intent-md)'),
64781
65016
  productId: zod_1.z.string().optional().describe('Product ID (optional, only used for claude-md format to select a specific product)'),
64782
65017
  },
@@ -64786,6 +65021,25 @@ function startMcpServer() {
64786
65021
  return { content: [{ type: 'text', text: 'Export requires cloud mode. Use PATHMODE_API_KEY to connect.' }] };
64787
65022
  }
64788
65023
  try {
65024
+ if (format === 'outcome-rubric') {
65025
+ const cloud = requireCloudClient();
65026
+ const intent = intentId
65027
+ ? await cloud.getIntent(intentId)
65028
+ : (pickCurrentIntent(await cloud.listIntents('approved')) || pickCurrentIntent(await cloud.listIntents()));
65029
+ if (!intent) {
65030
+ return { content: [{ type: 'text', text: 'No intent found to export. Pass an intentId, or create an approved intent first.' }] };
65031
+ }
65032
+ let constitutionRules = [];
65033
+ try {
65034
+ const constitution = await cloud.getConstitution();
65035
+ constitutionRules = (constitution?.rules ?? [])
65036
+ .filter((r) => r?.isActive !== false && r?.text?.trim())
65037
+ .map((r) => r.text.trim());
65038
+ }
65039
+ catch { /* constitution is optional context */ }
65040
+ const rubric = (0, intent_compiler_1.formatOutcomeRubric)(apiIntentToFields(intent), { constitutionRules });
65041
+ return { content: [{ type: 'text', text: rubric }] };
65042
+ }
64789
65043
  const content = await requireCloudClient().exportContext(format, intentId, productId);
64790
65044
  return { content: [{ type: 'text', text: content }] };
64791
65045
  }
@@ -65169,8 +65423,8 @@ function startMcpServer() {
65169
65423
  }],
65170
65424
  };
65171
65425
  });
65172
- server.tool('intent_export', 'Export an intent spec as .cursorrules or CLAUDE.md section for AI agent consumption.', {
65173
- format: zod_1.z.enum(['cursorrules', 'claude-md']).describe('Export format'),
65426
+ server.tool('intent_export', 'Export an intent spec as .cursorrules, a CLAUDE.md section, or a Claude Managed Agents Outcomes rubric for AI agent consumption.', {
65427
+ format: zod_1.z.enum(['cursorrules', 'claude-md', 'outcome-rubric']).describe('Export format'),
65174
65428
  spec: zod_1.z.object(intentSpecSchema),
65175
65429
  path: zod_1.z.string().optional().describe('Output file path. Defaults to .cursorrules or CLAUDE.md'),
65176
65430
  }, async ({ format, spec, path }) => {
@@ -65185,6 +65439,17 @@ function startMcpServer() {
65185
65439
  }],
65186
65440
  };
65187
65441
  }
65442
+ else if (format === 'outcome-rubric') {
65443
+ const content = (0, intent_compiler_1.formatOutcomeRubric)(spec);
65444
+ const filePath = (0, path_1.resolve)(process.cwd(), path || 'outcome-rubric.md');
65445
+ (0, fs_1.writeFileSync)(filePath, content, 'utf-8');
65446
+ return {
65447
+ content: [{
65448
+ type: 'text',
65449
+ text: `✓ Exported Outcomes rubric to ${filePath}\n\nPaste the Writer Description into the \`description\` field and the Grader Rubric into the \`rubric\` field of a Managed Agents \`user.define_outcome\` event. Docs: https://platform.claude.com/docs/en/managed-agents/define-outcomes`,
65450
+ }],
65451
+ };
65452
+ }
65188
65453
  else {
65189
65454
  const section = (0, intent_compiler_1.formatClaudeMdSection)(spec);
65190
65455
  const filePath = (0, path_1.resolve)(process.cwd(), path || 'CLAUDE.md');
@@ -65194,7 +65459,10 @@ function startMcpServer() {
65194
65459
  existing = (0, fs_1.readFileSync)(filePath, 'utf-8');
65195
65460
  }
65196
65461
  catch { /* file doesn't exist yet */ }
65197
- const marker = /<!-- PATHMODE:START -->[\s\S]*?<!-- PATHMODE:END -->/;
65462
+ // Tolerant of the suffixed start marker emitted by formatClaudeMdSection
65463
+ // (`<!-- PATHMODE:START - Do not edit... -->`), so re-exports replace
65464
+ // the block instead of appending a duplicate.
65465
+ const marker = /<!-- PATHMODE:START[\s\S]*?-->[\s\S]*?<!-- PATHMODE:END -->/;
65198
65466
  const updated = marker.test(existing)
65199
65467
  ? existing.replace(marker, section)
65200
65468
  : existing ? existing + '\n\n' + section : section;
@@ -32,6 +32,17 @@ export interface IntentFields {
32
32
  unitTests?: string[];
33
33
  e2eTests?: string[];
34
34
  };
35
+ /** Repo-analysis context (cloud intents). Richer than the structured fields:
36
+ * risks are real edge cases, verificationSuggestions are sharp grader checks. */
37
+ implementationContext?: {
38
+ relevantAreas?: {
39
+ path: string;
40
+ reason: string;
41
+ }[];
42
+ currentBehavior?: string;
43
+ risks?: string[];
44
+ verificationSuggestions?: string[];
45
+ } | null;
35
46
  }
36
47
  /**
37
48
  * Returns the system prompt that turns Claude into a Socratic intent interviewer.
@@ -54,3 +65,25 @@ export declare function formatCursorRules(spec: IntentFields): string;
54
65
  * Adapted from lib/agentPromptGenerator.ts generateClaudeMdContent().
55
66
  */
56
67
  export declare function formatClaudeMdSection(spec: IntentFields): string;
68
+ export interface OutcomeRubricOptions {
69
+ /**
70
+ * Workspace constitution rules. Rendered as cross-cutting "out of bounds"
71
+ * criteria the grader fails the artifact on if violated. Not present on the
72
+ * local IntentFields — supplied by the cloud export path.
73
+ */
74
+ constitutionRules?: string[];
75
+ /** Suggested grade-and-revise loop cap. Outcomes default is 3, max 20. */
76
+ maxIterations?: number;
77
+ }
78
+ /**
79
+ * Generate a Claude Managed Agents "Outcomes" rubric document for an intent.
80
+ *
81
+ * Outcomes (`user.define_outcome`) takes two separate fields: a `description`
82
+ * the writer agent reads, and a `rubric` the independent grader reads. This
83
+ * exporter renders both — clearly separated so they paste straight into the API —
84
+ * turning the intent's outcomes, edge cases, constraints, constitution rules and
85
+ * verification into checkable, evidence-forcing grader criteria.
86
+ *
87
+ * Docs: https://platform.claude.com/docs/en/managed-agents/define-outcomes
88
+ */
89
+ export declare function formatOutcomeRubric(spec: IntentFields, opts?: OutcomeRubricOptions): string;
@@ -1 +1 @@
1
- {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,EAAE,CAAC;IAC7F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtD,YAAY,CAAC,EAAE;QACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;CACL;AAwDD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA2D/C;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA+FzD;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAwF5D;AAOD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAsDhE"}
1
+ {"version":3,"file":"","sourceRoot":"","sources":["file:///Users/jannelammi/code/Pathmode/packages/mcp-server/src/intent-compiler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,MAAM,WAAW,YAAY;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,CAAC,MAAM,GAAG;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;KAAE,CAAC,EAAE,CAAC;IAC7F,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC7D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACtD,YAAY,CAAC,EAAE;QACX,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC;IACF;sFACkF;IAClF,qBAAqB,CAAC,EAAE;QACpB,aAAa,CAAC,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;QACnD,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;KACtC,GAAG,IAAI,CAAC;CACZ;AAwDD;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CA2D/C;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CA+FzD;AAOD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAwF5D;AAOD;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,CAsDhE;AAOD,MAAM,WAAW,oBAAoB;IACjC;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AA6KD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,GAAE,oBAAyB,GAAG,MAAM,CAuC/F"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathmode/mcp-server",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },