Skip to content

fix(message): skill activation follows messages, not sessions - #1831

Merged
zerob13 merged 2 commits into
devfrom
fix/message-scoped-skill-activation
Jun 29, 2026
Merged

fix(message): skill activation follows messages, not sessions#1831
zerob13 merged 2 commits into
devfrom
fix/message-scoped-skill-activation

Conversation

@zhangmo8

@zhangmo8 zhangmo8 commented Jun 29, 2026

Copy link
Copy Markdown
Collaborator
52a53650-df16-4e66-b9aa-6f6d8222691c

Summary

  • Make composer-selected skills message-scoped and clear the composer after successful send/queue/steer/create-session.
  • Keep agent skill_view activation scoped to the current message/tool loop instead of persisting it as session-pinned state.
  • Preserve and display message-scoped skills on the corresponding user message item.
  • Ensure effective skill tools/prompts use message/runtime active skills consistently.
  • Fix suppressed provider model-list fetch errors so routine 404s do not bubble through the route handler.

Validation

  • pnpm exec vitest run --config vitest.config.ts test/main/presenter/agentRuntimePresenter/messageStore.test.ts test/renderer/components/message/MessageItemUser.test.ts test/main/presenter/llmProviderPresenter/baseProvider.test.ts test/main/presenter/agentRuntimePresenter/process.test.ts test/main/presenter/skillPresenter/skillTools.test.ts test/main/presenter/toolPresenter/agentTools/agentToolManagerSettings.test.ts
  • pnpm run typecheck
  • pnpm run i18n
  • pnpm run lint

Summary by CodeRabbit

Summary by CodeRabbit

  • New Features
    • Composer-selected skills now attach to the next outgoing message and are cleared after sending.
    • Messages can display “active skills” as separate badges/metadata.
    • Runtime skill activation can update the current message/tool loop (including tools and system prompt) without permanently pinning.
  • Bug Fixes
    • Model list refreshes now more reliably suppress failed provider model fetches by default (including async 404 cases) while preserving error propagation when not suppressed.
  • Tests
    • Added/updated regression and coverage for async model-fetch handling and message-scoped skill activation/tool refresh behavior.

@coderabbitai

coderabbitai Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

Adds message-scoped activeSkills propagation through chat input, presenters, persistence, and rendering, while changing skill_view to emit message-scoped activation metadata instead of persisting session pinning. Separately, BaseLLMProvider.fetchModels() now awaits provider fetches so async rejections are caught.

Changes

fetchModels async/await fix

Layer / File(s) Summary
fetchModels async conversion
src/main/presenter/llmProviderPresenter/baseProvider.ts
fetchModels() now awaits fetchProviderModels() inside the existing try/catch, then validates, persists, and returns the models sequentially.
Regression tests and issue docs
test/main/presenter/llmProviderPresenter/baseProvider.test.ts, docs/issues/model-list-fetch-404/*
Tests cover suppressed async failures, explicit rethrows, and persistence failures; the related issue plan, spec, and task checklist were added.

Message-scoped active skills and runtime refresh

Layer / File(s) Summary
Shared contracts and displayed message shape
src/shared/contracts/common.ts, src/shared/types/agent-interface.d.ts, src/shared/types/core/chat.ts, src/shared/types/presenters/tool.presenter.d.ts, src/shared/types/skill.ts, src/renderer/src/components/chat/messageListItems.ts
activeSkills is added to message contracts and tool/skill presenter interfaces, and user-message display types now carry the field.
Runtime skill state and refresh flow
src/main/presenter/agentRuntimePresenter/*, src/main/presenter/agentRuntimePresenter/types.ts, src/main/presenter/agentRuntimePresenter/process.ts, src/main/presenter/agentRuntimePresenter/dispatch.ts
Runtime skill activation is tracked per session, fed into tool loading and prompt building, and refreshed when skill_view activates a skill.
Skill presenter and tool routing
src/main/presenter/skillPresenter/*, src/main/presenter/toolPresenter/*, test/main/presenter/skillPresenter/*, test/main/presenter/toolPresenter/agentTools/*, test/main/presenter/agentRuntimePresenter/dispatch.test.ts
viewSkill() no longer pins skills, allowed-tool resolution accepts override names, and tool routing threads activeSkillNames through skill tools, filesystem allowlisting, and skill-run gating.
Message input and session persistence
src/main/presenter/agentRuntimePresenter/contextBuilder.ts, src/main/presenter/agentRuntimePresenter/pendingInputCoordinator.ts, src/main/presenter/agentRuntimePresenter/pendingInputStore.ts, src/main/presenter/agentRuntimePresenter/messageStore.ts, src/main/presenter/agentSessionPresenter/index.ts, test/main/presenter/agentRuntimePresenter/messageStore.test.ts, test/main/presenter/agentSessionPresenter/agentSessionPresenter.test.ts
activeSkills is normalized in runtime input paths, steer payload persistence, message materialization, and session creation/backfill flows, including initial-message injection for session startup.
Composer skills and message badges
src/renderer/src/components/chat-input/composables/useSkillsData.ts, src/renderer/src/components/chat-input/SkillsIndicator.vue, src/renderer/src/components/chat/ChatInputBox.vue, src/renderer/src/pages/ChatPage.vue, src/renderer/src/pages/NewThreadPage.vue, src/renderer/src/components/message/MessageItemUser.vue, src/renderer/src/stores/ui/message.ts, test/renderer/components/*
Composer skill selection becomes pending-only, send flows attach activeSkills and clear pending chips, and user messages render active skills as separate badges.
Skill scope docs
docs/issues/skill-scope-and-refresh/*
The issue plan, spec, and task checklist document the message-scoped activation behavior and refresh flow.

Sequence Diagram(s)

sequenceDiagram
  participant ChatInputBox
  participant AgentSessionPresenter
  participant AgentRuntimePresenter
  participant AgentToolManager
  participant processStream

  ChatInputBox->>AgentSessionPresenter: sendMessage(text, files, activeSkills)
  AgentSessionPresenter->>AgentRuntimePresenter: processMessage(normalizedInput)
  AgentRuntimePresenter->>AgentToolManager: getAllToolDefinitions(activeSkillNames)
  AgentRuntimePresenter->>processStream: runStreamForMessage(...)
  processStream->>AgentToolManager: callTool(skill_view, activeSkillNames)
  AgentToolManager-->>processStream: activation metadata
  processStream->>AgentRuntimePresenter: hooks.activateSkill(skillName)
  processStream->>AgentRuntimePresenter: refreshTools(activeSkillNames)
  processStream->>AgentRuntimePresenter: refreshSystemPrompt(activeSkillNames, tools)
Loading

Estimated code review effort

🎯 5 (Critical) | ⏱️ ~120 minutes

Possibly related PRs

  • ThinkInAIXYZ/deepchat#1343: This PR extends the skill runtime execution pipeline; the current change also threads activeSkillNames into SkillExecutionService and skill_run handling.
  • ThinkInAIXYZ/deepchat#1411: Both PRs modify AgentToolManager around active-skill root resolution and tool/file allowlisting.
  • ThinkInAIXYZ/deepchat#1451: Both PRs modify dispatch.ts and processStream to react to skill_view activation metadata and refresh tools.

Suggested reviewers

  • zerob13

Poem

🐇 A rabbit hopped through skillful air,
With badges bright and prompts laid bare.
One fetch now waits, no rejection slips by,
And active skills flutter like stars in the sky.
Hop, hop—then clear the chips with grace,
New message magic fills the place ✨

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 15.38% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly captures the core change: skill activation is message-scoped rather than session-scoped.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ 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/message-scoped-skill-activation

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@zhangmo8 zhangmo8 changed the title Skill activation follows messages, not sessions fix(message): skill activation follows messages, not sessions Jun 29, 2026

@coderabbitai coderabbitai Bot 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.

Actionable comments posted: 2

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/renderer/src/stores/ui/message.ts (1)

216-241: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Default activeSkills in the fallback user-content path.

If record.content is legacy plain text or otherwise fails parsing, the fallback object still omits activeSkills. That means older user messages can surface undefined here instead of the empty array this PR expects for message-scoped skills.

Suggested fix
     entry.userContent = {
       text: '',
       files: [],
       links: [],
       search: false,
-      think: false
+      think: false,
+      activeSkills: []
     }
🤖 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 `@src/renderer/src/stores/ui/message.ts` around lines 216 - 241, The fallback
user-content path in message parsing omits activeSkills, so legacy or unparsable
content can leave it undefined. Update the fallback assignment in the message
store’s parsing flow (the try/catch around JSON.parse in the user-content
builder) to always initialize activeSkills to an empty array, matching the
parsed branch and the expected message-scoped skills shape.
🧹 Nitpick comments (4)
src/main/presenter/toolPresenter/index.ts (1)

617-642: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Minor wording nit on the updated skill prompts: "installed skills and manual pinned status" reads awkwardly (should be "manually pinned status" or "manual pin status"). These are model-facing instruction strings, so clarity helps prompt comprehension.

🤖 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 `@src/main/presenter/toolPresenter/index.ts` around lines 617 - 642, The
wording in buildSkillsPrompt is awkward in the skill_list instruction string,
which can reduce clarity for model-facing prompts. Update the text in
buildSkillsPrompt so “installed skills and manual pinned status” reads
naturally, such as by using “manually pinned status” or “manual pin status,”
while keeping the meaning unchanged.
test/main/presenter/agentRuntimePresenter/process.test.ts (1)

502-569: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Exercise the hook-backed skill list in this test.

This now locks in the fallback path (undefined) instead of the production path, where activateSkill/getActiveSkillNames feed the refreshed skill list. Please add hooks to the fixture and assert that refreshTools/refreshSystemPrompt receive the activated skill name as well, so regressions in the new plumbing fail here.

🤖 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 `@test/main/presenter/agentRuntimePresenter/process.test.ts` around lines 502 -
569, The test in processStream is still using the fallback skill list path, so
it does not cover the hook-backed flow. Update the fixture around
process.test.ts and createParams/processStream setup to provide the active-skill
hooks used by the production path, specifically activateSkill and
getActiveSkillNames, so refreshTools and refreshSystemPrompt are exercised with
the activated skill name instead of undefined. Then tighten the assertions in
the coreStream and refreshSystemPrompt expectations to verify the refreshed tool
list includes the activated skill plus the new deepchat_settings_set_theme tool.
src/main/presenter/agentRuntimePresenter/index.ts (1)

1114-1134: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Redundant runtime-skill merge across the two refreshSystemPrompt layers.

runStreamForMessage already calls getEffectiveRuntimeSkillNames(activeSkillNames) before invoking this provided callback (Line 3083), so the activeSkillNames you receive here already includes runtime-activated skills. Re-running resolveEffectiveActiveSkillNames(activeSkillNames ?? sessionActiveSkillNames, sessionId) merges them again. It's idempotent due to dedup, so no behavioral bug, but the reassigned effectiveActiveSkillNames is never read after this point either. Consider passing the already-effective list straight through to avoid the double merge and dead write.

🤖 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 `@src/main/presenter/agentRuntimePresenter/index.ts` around lines 1114 - 1134,
The refreshSystemPrompt callback in agentRuntimePresenter is redundantly
re-merging runtime skills even though runStreamForMessage already passes an
effective active-skill list. Update the refreshSystemPrompt implementation to
use the received activeSkillNames directly (or the existing session fallback
only if truly needed) when calling buildSystemPromptWithSkills, and remove the
unnecessary reassignment of effectiveActiveSkillNames since it is never used
afterward.
src/renderer/src/components/chat-input/composables/useSkillsData.ts (1)

39-43: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Rename the public activeSkills surface.

activeSkills now resolves to pendingSkills, while the composable still keeps a separate session-scoped activeSkills ref internally. That name collision makes it easy for the next caller to read the wrong list and accidentally reintroduce session-scoped behavior. Expose the composer list under a distinct name instead.

Also applies to: 177-190

🤖 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 `@src/renderer/src/components/chat-input/composables/useSkillsData.ts` around
lines 39 - 43, The composable still exposes the composer list through a surface
named `activeSkills` even though it now points to `pendingSkills`, while a
separate session-scoped `activeSkills` ref exists internally; rename the
public/computed surface in `useSkillsData` to a distinct composer-specific name
and update any returned properties or call sites that reference it so the
session list and composer list cannot be confused. Make sure the change is
applied consistently around `effectiveActiveSkills`, the internal `activeSkills`
ref, and the related return/export shape so callers only see the intended list.
🤖 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.

Inline comments:
In `@src/main/presenter/llmProviderPresenter/baseProvider.ts`:
- Around line 250-266: The current try/catch in baseProvider.ts is too broad and
also suppresses validation and config persistence failures after fetch. Narrow
the error handling around fetchProviderModels() only, so models.map(...) and
configPresenter.setProviderModels(...) can surface errors normally; keep
suppressErrors behavior limited to provider fetch failures while preserving the
existing this.models update flow in fetchModels().

In `@src/main/presenter/skillPresenter/skillExecutionService.ts`:
- Around line 134-138: The rejection message in skillExecutionService should
match the new message-scoped activation model instead of saying the skill is
pinned. Update the error thrown in the activeSkills check inside
skillExecutionService so it refers to the skill not being active in the current
message/tool loop, using the same wording as the skill_run and skill prompt
updates. Keep the logic that uses activeSkillNames/getActiveSkills and only
change the user-facing wording in the Error message.

---

Outside diff comments:
In `@src/renderer/src/stores/ui/message.ts`:
- Around line 216-241: The fallback user-content path in message parsing omits
activeSkills, so legacy or unparsable content can leave it undefined. Update the
fallback assignment in the message store’s parsing flow (the try/catch around
JSON.parse in the user-content builder) to always initialize activeSkills to an
empty array, matching the parsed branch and the expected message-scoped skills
shape.

---

Nitpick comments:
In `@src/main/presenter/agentRuntimePresenter/index.ts`:
- Around line 1114-1134: The refreshSystemPrompt callback in
agentRuntimePresenter is redundantly re-merging runtime skills even though
runStreamForMessage already passes an effective active-skill list. Update the
refreshSystemPrompt implementation to use the received activeSkillNames directly
(or the existing session fallback only if truly needed) when calling
buildSystemPromptWithSkills, and remove the unnecessary reassignment of
effectiveActiveSkillNames since it is never used afterward.

In `@src/main/presenter/toolPresenter/index.ts`:
- Around line 617-642: The wording in buildSkillsPrompt is awkward in the
skill_list instruction string, which can reduce clarity for model-facing
prompts. Update the text in buildSkillsPrompt so “installed skills and manual
pinned status” reads naturally, such as by using “manually pinned status” or
“manual pin status,” while keeping the meaning unchanged.

In `@src/renderer/src/components/chat-input/composables/useSkillsData.ts`:
- Around line 39-43: The composable still exposes the composer list through a
surface named `activeSkills` even though it now points to `pendingSkills`, while
a separate session-scoped `activeSkills` ref exists internally; rename the
public/computed surface in `useSkillsData` to a distinct composer-specific name
and update any returned properties or call sites that reference it so the
session list and composer list cannot be confused. Make sure the change is
applied consistently around `effectiveActiveSkills`, the internal `activeSkills`
ref, and the related return/export shape so callers only see the intended list.

In `@test/main/presenter/agentRuntimePresenter/process.test.ts`:
- Around line 502-569: The test in processStream is still using the fallback
skill list path, so it does not cover the hook-backed flow. Update the fixture
around process.test.ts and createParams/processStream setup to provide the
active-skill hooks used by the production path, specifically activateSkill and
getActiveSkillNames, so refreshTools and refreshSystemPrompt are exercised with
the activated skill name instead of undefined. Then tighten the assertions in
the coreStream and refreshSystemPrompt expectations to verify the refreshed tool
list includes the activated skill plus the new deepchat_settings_set_theme tool.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 8e6e2d07-e457-47c5-b7d6-91f2b7baa4e4

📥 Commits

Reviewing files that changed from the base of the PR and between 08d38bf and 458ac21.

📒 Files selected for processing (45)
  • docs/issues/model-list-fetch-404/plan.md
  • docs/issues/model-list-fetch-404/spec.md
  • docs/issues/model-list-fetch-404/tasks.md
  • docs/issues/skill-scope-and-refresh/plan.md
  • docs/issues/skill-scope-and-refresh/spec.md
  • docs/issues/skill-scope-and-refresh/tasks.md
  • src/main/presenter/agentRuntimePresenter/contextBuilder.ts
  • src/main/presenter/agentRuntimePresenter/dispatch.ts
  • src/main/presenter/agentRuntimePresenter/index.ts
  • src/main/presenter/agentRuntimePresenter/messageStore.ts
  • src/main/presenter/agentRuntimePresenter/pendingInputCoordinator.ts
  • src/main/presenter/agentRuntimePresenter/pendingInputStore.ts
  • src/main/presenter/agentRuntimePresenter/process.ts
  • src/main/presenter/agentRuntimePresenter/types.ts
  • src/main/presenter/agentSessionPresenter/index.ts
  • src/main/presenter/llmProviderPresenter/baseProvider.ts
  • src/main/presenter/skillPresenter/index.ts
  • src/main/presenter/skillPresenter/skillExecutionService.ts
  • src/main/presenter/toolPresenter/agentTools/agentToolManager.ts
  • src/main/presenter/toolPresenter/index.ts
  • src/renderer/src/components/chat-input/composables/useSkillsData.ts
  • src/renderer/src/components/chat/ChatInputBox.vue
  • src/renderer/src/components/chat/messageListItems.ts
  • src/renderer/src/components/message/MessageItemUser.vue
  • src/renderer/src/pages/ChatPage.vue
  • src/renderer/src/pages/NewThreadPage.vue
  • src/renderer/src/stores/ui/message.ts
  • src/shared/contracts/common.ts
  • src/shared/types/agent-interface.d.ts
  • src/shared/types/core/chat.ts
  • src/shared/types/presenters/tool.presenter.d.ts
  • src/shared/types/skill.ts
  • test/main/presenter/agentRuntimePresenter/agentRuntimePresenter.test.ts
  • test/main/presenter/agentRuntimePresenter/dispatch.test.ts
  • test/main/presenter/agentRuntimePresenter/messageStore.test.ts
  • test/main/presenter/agentRuntimePresenter/process.test.ts
  • test/main/presenter/agentSessionPresenter/agentSessionPresenter.test.ts
  • test/main/presenter/llmProviderPresenter/baseProvider.test.ts
  • test/main/presenter/skillPresenter/skillPresenter.test.ts
  • test/main/presenter/skillPresenter/skillTools.test.ts
  • test/main/presenter/toolPresenter/agentTools/agentToolManagerSettings.test.ts
  • test/renderer/components/ChatInputBox.test.ts
  • test/renderer/components/ChatPage.test.ts
  • test/renderer/components/NewThreadPage.test.ts
  • test/renderer/components/message/MessageItemUser.test.ts

Comment thread src/main/presenter/llmProviderPresenter/baseProvider.ts Outdated
Comment thread src/main/presenter/skillPresenter/skillExecutionService.ts

@coderabbitai coderabbitai Bot 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.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
src/renderer/src/components/chat-input/composables/useSkillsData.ts (1)

29-43: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift

Use a shared composer skill state instead of per-call local state.

pendingSkills is local to each useSkillsData(...) invocation. Since SkillsIndicator.vue and ChatInputBox.vue both instantiate this composable, panel toggles and slash-activated chips/consume/clear paths can operate on different arrays. Move this composer state to one shared source, or pass/provide the same ref to both components.

🤖 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 `@src/renderer/src/components/chat-input/composables/useSkillsData.ts` around
lines 29 - 43, The composer skill state is currently split because
`useSkillsData()` creates its own `pendingSkills` ref per call, so
`SkillsIndicator.vue` and `ChatInputBox.vue` can read/write different arrays.
Move this state to a shared source used by the composable, or accept/provide a
shared `Ref<string[]>` into `useSkillsData` so both components operate on the
same composer skills. Keep `composerActiveSkills` and all consume/clear/toggle
paths wired to that shared ref.
🤖 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.

Outside diff comments:
In `@src/renderer/src/components/chat-input/composables/useSkillsData.ts`:
- Around line 29-43: The composer skill state is currently split because
`useSkillsData()` creates its own `pendingSkills` ref per call, so
`SkillsIndicator.vue` and `ChatInputBox.vue` can read/write different arrays.
Move this state to a shared source used by the composable, or accept/provide a
shared `Ref<string[]>` into `useSkillsData` so both components operate on the
same composer skills. Keep `composerActiveSkills` and all consume/clear/toggle
paths wired to that shared ref.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: ed425b62-c05c-4c94-8727-26987388b333

📥 Commits

Reviewing files that changed from the base of the PR and between 458ac21 and 088f1ad.

📒 Files selected for processing (12)
  • docs/issues/model-list-fetch-404/tasks.md
  • docs/issues/skill-scope-and-refresh/tasks.md
  • src/main/presenter/agentRuntimePresenter/index.ts
  • src/main/presenter/llmProviderPresenter/baseProvider.ts
  • src/main/presenter/skillPresenter/skillExecutionService.ts
  • src/main/presenter/toolPresenter/index.ts
  • src/renderer/src/components/chat-input/SkillsIndicator.vue
  • src/renderer/src/components/chat-input/composables/useSkillsData.ts
  • src/renderer/src/components/chat/ChatInputBox.vue
  • src/renderer/src/stores/ui/message.ts
  • test/main/presenter/agentRuntimePresenter/process.test.ts
  • test/main/presenter/llmProviderPresenter/baseProvider.test.ts
✅ Files skipped from review due to trivial changes (2)
  • docs/issues/model-list-fetch-404/tasks.md
  • docs/issues/skill-scope-and-refresh/tasks.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • src/renderer/src/stores/ui/message.ts
  • src/main/presenter/skillPresenter/skillExecutionService.ts
  • test/main/presenter/agentRuntimePresenter/process.test.ts
  • test/main/presenter/llmProviderPresenter/baseProvider.test.ts
  • src/main/presenter/toolPresenter/index.ts
  • src/main/presenter/llmProviderPresenter/baseProvider.ts
  • src/main/presenter/agentRuntimePresenter/index.ts

@zerob13
zerob13 merged commit 3ec41c4 into dev Jun 29, 2026
3 checks passed
@zhangmo8
zhangmo8 deleted the fix/message-scoped-skill-activation branch June 29, 2026 08:14
Sign up for free to 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.

2 participants