Skip to content

Detect outdated Orca agent skills and prompt per-skill updates#8747

Open
tebayoso wants to merge 13 commits into
stablyai:mainfrom
tebayoso:feat/outdated-skills-update-prompts
Open

Detect outdated Orca agent skills and prompt per-skill updates#8747
tebayoso wants to merge 13 commits into
stablyai:mainfrom
tebayoso:feat/outdated-skills-update-prompts

Conversation

@tebayoso

@tebayoso tebayoso commented Jul 14, 2026

Copy link
Copy Markdown

Summary

After an Orca app update, globally installed agent skills can lag behind the skill docs that ship with the new build. Agents then keep outdated workflow guidance until someone runs npx skills update … by hand.

This change adds offline freshness checks against a generated hash catalog (not a packaged skills/ tree) and surfaces outdated skills in three places:

  1. One compact bottom-right card per outdated skill (UpdateCard-style).
  2. Amber Outdated badges on matching Settings sidebar sections.
  3. Outdated status pills on setup panels that own update rails (CLI, Orchestration, Computer Use, Ephemeral VMs).

Scope (intentional)

Only skills with an in-app update surface:

Skill Settings surface
orca-cli CLI / General
orchestration Orchestration
computer-use Computer Use
orca-per-workspace-env Experimental / Ephemeral VMs

Linear and emulator skills keep existing install flows and are not prompted.

Only installed skills whose home copies diverge from the catalog hash are prompted—missing skills keep the install flow; current skills stay quiet.

Design

  • No packaging of skills/: hashes in src/shared/orca-skill-reference-hashes.generated.ts via pnpm run generate:orca-skill-reference-hashes (verified in lint).
  • No discovery-core expansion for this feature: freshness probes managed basenames under known home provider skill dirs only.
  • Dismiss remembers skillName + expectedHash.
  • Update opens Settings and session-snoozes; update-attempt is recorded when the setup terminal closes (after the user had a chance to run the command).
  • Skill card stacks above UpdateCard and StarNag (bottom-[220px] / bottom-[430px]).

Related

Screenshots

outdated-skills-settings-and-card

Testing

  • Unit: skill hash freshness (tmpdir only), catalog contract, IPC registration, sidebar Outdated label, dismiss/snooze, useOrcaSkillFreshness hook (target switch / coalesce / repair-required)
  • Manual check in pnpm dev against outdated global installs
  • Branch based on latest upstream/main; fork main synced
  • Hash generate/verify (semantic; oxfmt-safe)
  • Focused vitest suite for skill freshness surfaces (62 tests)
  • Full-tree pnpm lint / pnpm build (rely on PR CI)
  • High-quality regression tests for this feature

AI Review Report

Addressed multi-pass Claude / OpenCode / CodeRabbit review:

  • Hash catalog instead of packaging resources/orca-skills
  • Managed set limited to update-wired skills
  • Multi-home probe without forking discovery for packaging
  • Directory-basename install identity
  • Badges honor dismiss / update-attempt suppression
  • Update-attempt on terminal exit, not open
  • Skill card no longer collides with StarNag/UpdateCard
  • Hook unit tests added

Security Audit

  • skills:checkFreshness only reads local SKILL.md under known home skill paths vs compile-time catalog hashes; no network, no shell, no writes
  • Update commands are static constants
  • Dismiss keys are non-secret name + hash in localStorage
  • No secrets, auth, or dependency additions

Notes

  • Skills do not auto-update with Orca; this makes lag visible and user-driven
  • One skill card at a time
  • Follow-ups outside this PR: Linear/emulator update rails if product wants them, deeper CI packaging smoke

App updates do not refresh globally installed agent skills, so agents can keep
stale workflow docs after an Orca upgrade. Compare installed SKILL.md hashes
against app-bundled references, surface one UpdateCard-style prompt per
outdated skill, and show amber Outdated badges in Settings.
@tebayoso tebayoso force-pushed the feat/outdated-skills-update-prompts branch from abfa3e8 to 7c524ac Compare July 14, 2026 15:15
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds bundled Orca skill references and a freshness engine that hashes managed SKILL.md files and classifies installed skills as current, outdated, missing, or unknown. Exposes freshness checks through Electron IPC, runtime RPC, preload, and web APIs. Adds renderer caching, invalidation, settings status indicators, outdated setup states, dismissal and snooze tracking, and an update prompt overlay. Tests cover hashing, freshness states, IPC handling, sidebar labels, and reminder behavior.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 13.33% 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
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.
Title check ✅ Passed The title is concise and accurately summarizes the main change: detecting outdated Orca skills and prompting updates.
Description check ✅ Passed The description matches the template with all required sections filled and enough detail on summary, screenshots, testing, review, security, and notes.

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.

@tebayoso

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@tebayoso

Copy link
Copy Markdown
Author

@coderabbitai help

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

CodeRabbit commands

These commands are invoked using PR/Issue comments.

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai rate limit to show your current review rate limit status.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai evaluate custom pre-merge check --instructions <custom-checks-instructions> --name <custom-checks-title> [--mode <error|warning>] to validate the custom pre-merge checks instructions. Defaults to error when --mode is omitted.
  • @coderabbitai ignore pre-merge checks to override pre-merge checks and get an approval on PR.
  • @coderabbitai run pre-merge checks to run pre-merge checks on the pull request.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai emit path instructions to emit generated path-specific review instructions for this repository.
  • @coderabbitai resolve merge conflict to automatically resolve merge conflicts.
  • @coderabbitai autofix to automatically fix issues identified in unresolved review comments.
  • @coderabbitai resolve to resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai generate configuration to create a PR that adds the current resolved configuration as .coderabbit.yaml (or show it if already present).
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore or @coderabbit ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit configuration file (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • You can also validate your configuration using the online YAML validator.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, support, documentation and community

  • Visit our status page to check the current availability of CodeRabbit.
  • Create a ticket on our support page for assistance with any issues or questions.
  • Visit our documentation site for detailed information on how to use CodeRabbit.
  • Join our Discord community to connect with other users and get help from the community.
  • Follow us on X/Twitter for updates and announcements.

@tebayoso

Copy link
Copy Markdown
Author

@coderabbitai review

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Only count global/home installs for freshness, key the renderer cache by
discovery target, avoid Escape stealing focus from dialogs/inputs, and cover
the repo-local false positive with a regression test.

@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: 6

🧹 Nitpick comments (1)
src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx (1)

42-47: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Simplify the conditional logic.

The nested conditional block can be flattened for better readability.

♻️ Proposed refactor
-    if (loading || promptQueue.length === 0) {
-      if (!loading && promptQueue.length === 0) {
-        setActiveSkillName(null)
-      }
-      return
-    }
+    if (loading) {
+      return
+    }
+    if (promptQueue.length === 0) {
+      setActiveSkillName(null)
+      return
+    }

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 7b04a667-2926-4249-8063-b7dc785b0cd8

📥 Commits

Reviewing files that changed from the base of the PR and between e0edc8e and 7c524ac.

📒 Files selected for processing (27)
  • config/electron-builder.config.cjs
  • src/main/ipc/skills.test.ts
  • src/main/ipc/skills.ts
  • src/main/runtime/rpc/methods/skills.ts
  • src/main/skills/bundled-skills-root.ts
  • src/main/skills/freshness.test.ts
  • src/main/skills/freshness.ts
  • src/preload/api-types.ts
  • src/preload/index.ts
  • src/renderer/src/App.tsx
  • src/renderer/src/components/settings/AgentSkillSetupPanel.tsx
  • src/renderer/src/components/settings/CliSection.tsx
  • src/renderer/src/components/settings/ComputerUseSkillSetupPanel.tsx
  • src/renderer/src/components/settings/EphemeralVmsPane.tsx
  • src/renderer/src/components/settings/OrchestrationSetupCard.tsx
  • src/renderer/src/components/settings/Settings.tsx
  • src/renderer/src/components/settings/SettingsSidebar.test.tsx
  • src/renderer/src/components/settings/SettingsSidebar.tsx
  • src/renderer/src/components/skills/OutdatedSkillUpdateDialog.tsx
  • src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx
  • src/renderer/src/components/skills/outdated-skill-reminder.test.ts
  • src/renderer/src/components/skills/outdated-skill-reminder.ts
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts
  • src/renderer/src/lib/settings-navigation-types.ts
  • src/renderer/src/web/web-preload-api.ts
  • src/shared/orca-managed-skills.ts
  • src/shared/skill-freshness.ts

Comment thread src/main/skills/freshness.ts Outdated
Comment thread src/main/skills/freshness.ts Outdated
Comment thread src/main/skills/freshness.ts Outdated
Comment thread src/renderer/src/components/settings/AgentSkillSetupPanel.tsx Outdated
Comment thread src/renderer/src/components/skills/OutdatedSkillUpdateDialog.tsx Outdated
Comment thread src/renderer/src/hooks/useOrcaSkillFreshness.ts Outdated
@tebayoso

Copy link
Copy Markdown
Author

@coderabbitai review

Please re-review the latest commit (a620dcc) which hardens freshness detection after the prior review attempt failed mid-rebase.

@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

The PR description image ("outdated-skills-settings-and-card") shows a macOS desktop app settings panel titled around "Orca CLI". Key details visible:

  • Left sidebar has sections: "Orchestration" with an amber "Outdated" badge, "Computer Use" with a green "Installed" badge, "Voice" with a gray "Not installed" badge, and under "SET UP", "General" also shows an amber "Outdated" badge.
  • Main panel shows "Orca CLI" section with "Shell command" (path /usr/local/bin/orca-dev) and "Agent skills" subsection showing "CLI skill" with an amber "● Outdated" pill, description "Enables agents to use Orca workspace, terminal, and progress commands," and two buttons: "Update" and "Re-check".
  • Below that, "Updates" section shows current version "1.4.122-rc.3" with a "Check for Updates" button and note "Updates are checked automatically on launch."
  • Bottom right corner shows a floating card titled "Your Orca skills are outdated" with close (X) button, body text "The Orca CLI skill needs an update. Update them so agents keep the latest Orca workflows.", a "Copy update command" link, and a black "Update" button.

This matches the PR's described UI additions (Outdated badges, status pills, and the UpdateCard-style bottom-right prompt).

@tebayoso Got it — I'll re-review the latest commit (a620dcc), keeping in mind it hardens freshness detection following the mid-rebase issue in the earlier attempt.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Reject oversized SKILL.md prefixes, treat unreadable installs as unknown,
scope freshness only to home installs, key the renderer cache by discovery
target, drop global Escape dismiss, and use hash-based i18n keys.
@tebayoso

Copy link
Copy Markdown
Author

@coderabbitai review

Addressed the prior review comments:

  • home-only global installs for freshness
  • discovery-target-keyed renderer cache
  • oversized/unreadable skill files → unknown (not false current/missing)
  • removed global Escape dismiss (X only, since dismiss is persistent)
  • hash-based locale keys for new settings/card strings

@tebayoso tebayoso marked this pull request as draft July 14, 2026 15:27
@coderabbitai

coderabbitai Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

The PR description image shows a macOS desktop app settings panel. The left sidebar lists sections including "Orchestration" with an amber "Outdated" badge, "Computer Use" with a green "Installed" badge, "Voice" with a gray "Not installed" badge, and under "SET UP", "General" also shows an amber "Outdated" badge. The main panel shows "Orca CLI" with a "Shell command" field (/usr/local/bin/orca-dev) and an "Agent skills" subsection showing "CLI skill" with an amber "● Outdated" pill, description text, and "Update"/"Re-check" buttons. Below, an "Updates" section shows version "1.4.122-rc.3" with a "Check for Updates" button. A bottom-right floating card titled "Your Orca skills are outdated" includes a close (X) button, body text about the CLI skill needing an update, a "Copy update command" link, and a black "Update" button.

@tebayoso Thanks for the summary of the changes. I'll re-review the latest commit, focusing on the fixes you called out:

  • home-only global installs for freshness detection
  • discovery-target-keyed renderer cache
  • oversized/unreadable skill files reporting unknown instead of false current/missing
  • Escape-key dismiss removed (X-only, since dismissal is persistent)
  • hash-based locale keys for the new settings/card strings
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@tebayoso

Copy link
Copy Markdown
Author

Sorry about the noise, my automated PR review tool decided to fight CodeRabbit in a loop, won't happen again. I apologize.

Serialize forced refreshes per discovery target, cover packaged/dev reference
root resolution, and keep the prior CodeRabbit correctness fixes covered by
regression tests.
@tebayoso tebayoso marked this pull request as ready for review July 14, 2026 15:32

@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: 1

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/skills/OutdatedSkillUpdateDialog.tsx (1)

54-61: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Give each skill prompt a unique heading ID.

Multiple outdated skills render multiple cards, but each uses outdated-skill-update-heading. Duplicate IDs make aria-labelledby ambiguous for assistive technology.

Proposed fix
   const { skill, onDismiss, onUpdate } = props
+  const headingId = `outdated-skill-update-heading-${skill.skillName}`
 
   <Card
     className="gap-0 py-0"
     role="complementary"
-    aria-labelledby="outdated-skill-update-heading"
+    aria-labelledby={headingId}
   >
-    <h3 id="outdated-skill-update-heading" className="text-sm font-semibold">
+    <h3 id={headingId} className="text-sm font-semibold">
🧹 Nitpick comments (1)
src/main/skills/freshness.ts (1)

22-30: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use Node path utilities instead of parsing separators manually.

Replace split(/[\\/]/) with node:path helpers so path semantics remain centralized and platform-safe.

As per coding guidelines, use path.join or Electron/Node path utilities for file paths; never assume / or \.

Source: Coding guidelines


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: a5e9f722-ed63-4938-808c-7dd67ed573dd

📥 Commits

Reviewing files that changed from the base of the PR and between 7c524ac and 16332f8.

📒 Files selected for processing (6)
  • src/main/skills/freshness.test.ts
  • src/main/skills/freshness.ts
  • src/renderer/src/components/settings/AgentSkillSetupPanel.tsx
  • src/renderer/src/components/settings/SettingsSidebar.tsx
  • src/renderer/src/components/skills/OutdatedSkillUpdateDialog.tsx
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/renderer/src/components/settings/SettingsSidebar.tsx
  • src/renderer/src/components/settings/AgentSkillSetupPanel.tsx
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts

Comment thread src/main/skills/freshness.ts Outdated

@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: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 239d8c79-4c78-44a2-9be5-850557b59b75

📥 Commits

Reviewing files that changed from the base of the PR and between 16332f8 and 0cdfc3e.

📒 Files selected for processing (2)
  • src/main/skills/bundled-skills-root.test.ts
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts

Comment thread src/main/skills/bundled-skills-root.test.ts Outdated
Loop-read skill files to EOF with an oversize guard, clean temp dirs in
tests, give each outdated-skill card a unique heading id, and simplify the
prompt queue effect.

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

🧹 Nitpick comments (2)
src/renderer/src/components/skills/OutdatedSkillUpdateDialog.tsx (2)

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

Use useId() for accessibility IDs.

React provides the useId hook specifically to generate stable, unique IDs for accessibility attributes. Using useId() is the idiomatic way to handle ARIA ID linking and avoids potential collisions if multiple instances of this component ever render simultaneously.

♻️ Proposed refactor
-  const headingId = `outdated-skill-update-heading-${skill.skillName}`
+  const headingId = React.useId()

(Note: Ensure React or useId is imported as needed).


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

Consider a more appropriate ARIA role.

The complementary role creates a document landmark (similar to an <aside>), which is typically reserved for supporting sections in the main document flow like a sidebar. For a floating notification or card, role="region", role="status", or role="dialog" is generally more semantically appropriate.

♻️ Proposed refactor
-      <Card className="gap-0 py-0" role="complementary" aria-labelledby={headingId}>
+      <Card className="gap-0 py-0" role="region" aria-labelledby={headingId}>

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: c7f77721-1d09-4e6d-ba28-e259b27f916d

📥 Commits

Reviewing files that changed from the base of the PR and between 0cdfc3e and f62931d.

📒 Files selected for processing (5)
  • src/main/skills/bundled-skills-root.test.ts
  • src/main/skills/freshness.test.ts
  • src/main/skills/freshness.ts
  • src/renderer/src/components/skills/OutdatedSkillUpdateDialog.tsx
  • src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx
🚧 Files skipped from review as they are similar to previous changes (4)
  • src/main/skills/bundled-skills-root.test.ts
  • src/main/skills/freshness.test.ts
  • src/main/skills/freshness.ts
  • src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx

tebayoso added 3 commits July 14, 2026 13:04
Flag outdated when any home provider copy diverges, skip repo walks on the
freshness path, coalesce forced renderer rescans, suppress re-prompts after
an update attempt for the current app reference hash, and avoid Settings
"Checking..." flicker from freshness loading.
Mark update-attempted only when Settings opens the update terminal (not the
card click), skip project/cwd roots on freshness discovery, key the cache by
host/WSL runtime only, and drop the unused freshness-changed notifier.
Record update-attempted from the card Update action for all managed skills,
mark Settings terminals only after prerequisites succeed, and skip freshness
IPC when project runtime requires repair.

@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: 1


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: f2c8f281-bad1-4d89-ae36-3dddb8044f62

📥 Commits

Reviewing files that changed from the base of the PR and between f62931d and b5df8d5.

📒 Files selected for processing (20)
  • src/main/ipc/skills.test.ts
  • src/main/ipc/skills.ts
  • src/main/runtime/rpc/methods/skills.ts
  • src/main/skills/discovery.ts
  • src/main/skills/freshness.test.ts
  • src/main/skills/freshness.ts
  • src/main/skills/skill-discovery-sources.ts
  • src/renderer/src/components/settings/CliSection.tsx
  • src/renderer/src/components/settings/ComputerUseSkillSetupPanel.tsx
  • src/renderer/src/components/settings/EphemeralVmsPane.tsx
  • src/renderer/src/components/settings/OrchestrationSetupCard.tsx
  • src/renderer/src/components/settings/Settings.tsx
  • src/renderer/src/components/settings/cli-section-platform-copy.ts
  • src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx
  • src/renderer/src/components/skills/mark-outdated-skill-update-attempt.ts
  • src/renderer/src/components/skills/outdated-skill-reminder.test.ts
  • src/renderer/src/components/skills/outdated-skill-reminder.ts
  • src/renderer/src/hooks/useOrcaSkillFreshness.ts
  • src/shared/orca-managed-skills.ts
  • src/shared/skill-freshness.ts
🚧 Files skipped from review as they are similar to previous changes (11)
  • src/renderer/src/components/skills/outdated-skill-reminder.test.ts
  • src/renderer/src/components/settings/OrchestrationSetupCard.tsx
  • src/renderer/src/components/settings/ComputerUseSkillSetupPanel.tsx
  • src/shared/skill-freshness.ts
  • src/renderer/src/components/settings/EphemeralVmsPane.tsx
  • src/main/ipc/skills.test.ts
  • src/main/skills/freshness.test.ts
  • src/main/ipc/skills.ts
  • src/renderer/src/components/skills/OutdatedSkillUpdateHost.tsx
  • src/main/skills/freshness.ts
  • src/renderer/src/components/settings/Settings.tsx

Comment thread src/renderer/src/hooks/useOrcaSkillFreshness.ts
tebayoso added 2 commits July 14, 2026 13:32
Reset hook result/loading from the new target's cache on host/WSL switches
so panels never flash the previous runtime's outdated/installed badges.
Also use useId and role=region for the floating prompt a11y nits.
Apply dual-review consensus: Settings/pills honor dismiss+attempt flags,
web checkFreshness propagates errors instead of caching empty success,
match installs by directory basename only, and keep card Update as
session-snooze only while terminals record the persistent attempt.
tebayoso added 3 commits July 14, 2026 14:26
Use a generated hash catalog instead of shipping skills/ into the app
bundle. Limit outdated detection to the four skills with Settings update
rails, probe only managed home basenames, and leave discovery sources
unchanged. Tests use temp dirs only.
The previous cleanup incorrectly reset discovery sources and tests to an
outdated origin/main tip, dropping multi-agent home roots and the
stablyai#8256/stablyai#8503 symlink coverage cases. Those belong to orchestration agent
coverage, not the outdated-skills packaging change.
Record update-attempt suppression when the setup terminal closes instead
of on open, stack the skill card above UpdateCard and StarNag, make hash
catalog verify resilient to oxfmt quote rewrites, and cover the
freshness hook for target switches, coalescing, and repair-required.
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