fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope - #105

Closed
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope
Closed

fix(mcp-workforce): align memory scope enum with narrowed PersonaMemoryScope#105
khaliqgant wants to merge 1 commit into
mainfrom
fix/mcp-workforce-memory-scope

Conversation

@khaliqgant

Copy link
Copy Markdown
Member

Why CI is red on main

mcp-workforce (added in #91) was authored against an older PersonaMemoryScope shape — 'session' | 'user' | 'workspace' | 'org' | 'object'. #94 then narrowed the type to 'workspace' | 'user' | 'global'. Each PR passed CI independently. After both merged, main fails to build:

packages/mcp-workforce build: src/server.ts(73,39): error TS2345:
Type '"object" | "workspace" | "user" | "session" | "org"' is not
assignable to type 'PersonaMemoryScope | undefined'.
packages/mcp-workforce build: src/tools/memory.ts(38,7): error TS2322:
Type 'Set<"object" | "workspace" | "user" | "session" | "org">' is not
assignable to type 'ReadonlySet<PersonaMemoryScope>'.

This is the exact case CodeRabbit flagged on #94 (packages/persona-kit/src/types.ts:186 — "remaining uses of removed literals"). At the time of the #94 sweep, mcp-workforce wasn't yet on main, so the audit returned clean. The cross-PR collision only surfaces post-merge.

What this changes

Two call sites in mcp-workforce, both pointing at the canonical persona-kit shape:

FileBeforeAfter
src/server.ts:13z.enum(['session', 'user', 'workspace', 'org', 'object'])z.enum(['workspace', 'user', 'global'])
src/server.ts:65tool description listed all 5 old scopesdescription updated to the 3 canonical ones
src/tools/memory.ts:38-44Set of 5 old literalsSet of 3 canonical literals

memory.save's default scope stays workspace.

Behavior changes for consumers

Callers that previously passed 'session', 'org', or 'object' will now get a zod validation error before the runtime check — preferable to silently mapping to a different scope. No mapping layer is added because none of these old values were in production (mcp-workforce is 0.0.0 on npm — a placeholder).

Verified locally

  • pnpm -F @agentworkforce/mcp-workforce typecheck — clean
  • pnpm -F @agentworkforce/mcp-workforce build — clean
  • pnpm -F @agentworkforce/mcp-workforce test — 23/23 pass

🤖 Generated with Claude Code

mcp-workforce was landed in #91 against an older `PersonaMemoryScope`
shape (`session | user | workspace | org | object`). #94 then tightened
the type to `workspace | user | global`. Both PRs passed CI
independently, but main is now broken at build time because the zod enum
in `server.ts` and the runtime `VALID_SCOPES` Set in `tools/memory.ts`
still reference the removed literals.
Aligning both call sites to the canonical persona-kit shape:
- `MEMORY_SCOPE_ENUM` → z.enum(['workspace', 'user', 'global'])
- `VALID_SCOPES` → new Set(['workspace', 'user', 'global'])
- memory.save tool description updated to match
The default scope stays `workspace`. Callers that previously passed
`'session'`/`'org'`/`'object'` will now get a validation error from the
zod schema before the runtime check — preferable to silently mapping
them to a different scope.
Verified: `pnpm -F @agentworkforce/mcp-workforce typecheck` + `build` +
`test` (23/23) all pass.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@coderabbitai

coderabbitaiBot commented May 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The PR narrows the memory.save tool's scope parameter from five possible values to three. The enum definition, tool description, and validation set are updated consistently to enforce workspace, user, and global scopes only, removing support for session, org, and object.

Changes

Memory Scope Narrowing

Layer / File(s)Summary
Narrow memory scope to workspace, user, and global
packages/mcp-workforce/src/server.ts, packages/mcp-workforce/src/tools/memory.ts
The MEMORY_SCOPE_ENUM and VALID_SCOPES are narrowed to workspace, user, and global. The memory.save tool description is updated to reflect the new scope semantics.

🎯 1 (Trivial) | ⏱️ ~3 minutes

🐰 Three scopes now gleam so bright,
Where workspace, user, global shine light,
Session, org, and object fade away,
The memory tool dances anew today! ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check nameStatusExplanation
Title check✅ PassedThe title accurately and specifically identifies the main change: aligning the memory scope enum in mcp-workforce with a narrowed PersonaMemoryScope type.
Description check✅ PassedThe description provides detailed context about the build failure, explains the root cause of the cross-PR type collision, documents the specific changes made, and includes verification results.
Docstring Coverage✅ PassedDocstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check✅ PassedCheck skipped because no linked issues were found for this pull request.
Out of Scope Changes check✅ PassedCheck skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/mcp-workforce-memory-scope

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitaicoderabbitaiBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
packages/mcp-workforce/src/server.ts (1)

13-13: ⚡ Quick win

Single-source the memory scope literals to prevent future drift.

This PR fixes a drift issue, but the literals are still duplicated between server.ts and tools/memory.ts. Please centralize them in one exported as const tuple and derive both the zod enum and runtime validation from it.

♻️ Suggested refactor
-const MEMORY_SCOPE_ENUM = z.enum(['workspace', 'user', 'global']);+import { MEMORY_SCOPES } from './tools/memory.js';+const MEMORY_SCOPE_ENUM = z.enum(MEMORY_SCOPES);
+export const MEMORY_SCOPES = ['workspace', 'user', 'global'] as const;
const VALID_SCOPES: ReadonlySet<PersonaMemoryScope> = new Set([
- 'workspace',- 'user',- 'global'+ ...MEMORY_SCOPES
]);
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@packages/mcp-workforce/src/server.ts` at line 13, The MEMORY_SCOPE_ENUM
literal array is duplicated; centralize the allowed scope strings by exporting a
single as const tuple (e.g. MEMORY_SCOPES) from tools/memory.ts, then replace
the local z.enum([...]) in server.ts with z.enum(MEMORY_SCOPES) (or
z.enum([...MEMORY_SCOPES]) if needed) and derive any runtime type/validation
from that same exported tuple (update imports and usages of MEMORY_SCOPE_ENUM to
use MEMORY_SCOPES and its derived types), ensuring all places that previously
referenced MEMORY_SCOPE_ENUM now import the single source of truth from
tools/memory.ts.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@packages/mcp-workforce/src/server.ts`:
- Line 13: The MEMORY_SCOPE_ENUM literal array is duplicated; centralize the
allowed scope strings by exporting a single as const tuple (e.g. MEMORY_SCOPES)
from tools/memory.ts, then replace the local z.enum([...]) in server.ts with
z.enum(MEMORY_SCOPES) (or z.enum([...MEMORY_SCOPES]) if needed) and derive any
runtime type/validation from that same exported tuple (update imports and usages
of MEMORY_SCOPE_ENUM to use MEMORY_SCOPES and its derived types), ensuring all
places that previously referenced MEMORY_SCOPE_ENUM now import the single source
of truth from tools/memory.ts.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 922fa5f2-6768-43e7-a49e-c74000d37e08

📥 Commits

Reviewing files that changed from the base of the PR and between 6e3678f and 57c2c68.

📒 Files selected for processing (2)
  • packages/mcp-workforce/src/server.ts
  • packages/mcp-workforce/src/tools/memory.ts

@devin-ai-integrationdevin-ai-integrationBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Devin Review: No Issues Found

Devin Review analyzed this PR and found no potential bugs to report.

View in Devin Review to see 1 additional finding.

Open in Devin Review

@khaliqgant

Copy link
Copy Markdown
MemberAuthor

Superseded by #104, which now includes this exact mcp-workforce memory-scope fix (cherry-picked as commit 0d90878). Closing here to keep one PR open.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@khaliqgant