metheus-governance-mcp-cli 0.2.41 → 0.2.43

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 (2) hide show
  1. package/cli.mjs +58 -2
  2. package/package.json +1 -1
package/cli.mjs CHANGED
@@ -676,9 +676,27 @@ function resolveWorkspaceDirForRequest(defaultWorkspaceDir, requestObj, toolArgs
676
676
  const weakRequestCandidate = extractWeakWorkspaceCandidateFromRequest(requestObj);
677
677
  const weakEnvCandidate = extractWeakWorkspaceCandidateFromEnv();
678
678
  const homeCandidate = firstNonEmptyString([process.env.USERPROFILE, process.env.HOME]);
679
+ const strongEnvResolved = sanitizeWorkspaceCandidate(strongEnvCandidate);
680
+ const strongRequestResolved = sanitizeWorkspaceCandidate(strongRequestCandidate);
681
+ const weakRequestResolved = sanitizeWorkspaceCandidate(weakRequestCandidate);
682
+
683
+ if (strongRequestResolved) {
684
+ return strongRequestResolved;
685
+ }
686
+ if (weakRequestResolved) {
687
+ // Prefer client-provided current workspace over fallback env, unless request resolves to home.
688
+ if (isHomeWorkspaceRoot(weakRequestResolved)) {
689
+ if (strongEnvResolved && !isHomeWorkspaceRoot(strongEnvResolved)) {
690
+ return strongEnvResolved;
691
+ }
692
+ }
693
+ return weakRequestResolved;
694
+ }
695
+ if (strongEnvResolved) {
696
+ return strongEnvResolved;
697
+ }
698
+
679
699
  const localPreferredCandidates = [
680
- strongRequestCandidate,
681
- weakRequestCandidate,
682
700
  defaultWorkspaceDir,
683
701
  process.cwd(),
684
702
  ];
@@ -5250,6 +5268,44 @@ function runSelftest(flags = {}) {
5250
5268
  keptExistingOk,
5251
5269
  `input=${suspicious} recovered=${keptExisting || "(none)"}`,
5252
5270
  );
5271
+
5272
+ const originalWorkspaceEnv = process.env.METHEUS_WORKSPACE_DIR;
5273
+ const forcedEnvWorkspace = path.join(tempRoot, "forced-workspace");
5274
+ const defaultWorkspace = path.join(tempRoot, "default-workspace");
5275
+ const weakRequestWorkspace = path.join(tempRoot, "weak-request-workspace");
5276
+ fs.mkdirSync(forcedEnvWorkspace, { recursive: true });
5277
+ fs.mkdirSync(defaultWorkspace, { recursive: true });
5278
+ fs.mkdirSync(weakRequestWorkspace, { recursive: true });
5279
+ process.env.METHEUS_WORKSPACE_DIR = forcedEnvWorkspace;
5280
+ const resolvedByEnvPriority = resolveWorkspaceDirForRequest(defaultWorkspace, {}, {});
5281
+ const resolvedByWeakRequestPriority = resolveWorkspaceDirForRequest(
5282
+ defaultWorkspace,
5283
+ {
5284
+ params: {
5285
+ cwd: weakRequestWorkspace,
5286
+ },
5287
+ },
5288
+ {},
5289
+ );
5290
+ if (typeof originalWorkspaceEnv === "string") {
5291
+ process.env.METHEUS_WORKSPACE_DIR = originalWorkspaceEnv;
5292
+ } else {
5293
+ delete process.env.METHEUS_WORKSPACE_DIR;
5294
+ }
5295
+ const envPriorityOk =
5296
+ normalizedPathForCompare(resolvedByEnvPriority) === normalizedPathForCompare(forcedEnvWorkspace);
5297
+ push(
5298
+ "workspace_env_priority_over_default",
5299
+ envPriorityOk,
5300
+ `env=${forcedEnvWorkspace} default=${defaultWorkspace} resolved=${resolvedByEnvPriority || "(none)"}`,
5301
+ );
5302
+ const weakRequestPriorityOk =
5303
+ normalizedPathForCompare(resolvedByWeakRequestPriority) === normalizedPathForCompare(weakRequestWorkspace);
5304
+ push(
5305
+ "workspace_weak_request_priority_over_env",
5306
+ weakRequestPriorityOk,
5307
+ `request=${weakRequestWorkspace} env=${forcedEnvWorkspace} resolved=${resolvedByWeakRequestPriority || "(none)"}`,
5308
+ );
5253
5309
  } catch (err) {
5254
5310
  push("workspace_env_guard_test_setup", false, String(err?.message || err));
5255
5311
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "metheus-governance-mcp-cli",
3
- "version": "0.2.41",
3
+ "version": "0.2.43",
4
4
  "description": "Metheus Governance MCP CLI (setup + stdio proxy)",
5
5
  "type": "module",
6
6
  "files": [