Skip to content

feat(skills): add Hermes-style skill explorer#3388

Merged
senamakel merged 12 commits into
tinyhumansai:mainfrom
senamakel:feat/hermes-skills-explorer
Jun 5, 2026
Merged

feat(skills): add Hermes-style skill explorer#3388
senamakel merged 12 commits into
tinyhumansai:mainfrom
senamakel:feat/hermes-skills-explorer

Conversation

@senamakel
Copy link
Copy Markdown
Member

@senamakel senamakel commented Jun 4, 2026

Summary

  • Adds first-class Hermes-style SKILL.md discovery under nested skill catalog folders.
  • Extends the skills metadata contract with platforms, related skills, and source format.
  • Promotes discovered SKILL.md packages into a dedicated Skills explorer tab with install/create actions.
  • Expands the resource explorer to browse scripts, references, assets, templates, examples, and prompts.
  • Adds localized labels and focused Rust/Vitest coverage for the new skill metadata and explorer behavior.

Problem

  • Hermes Agent publishes a broad skills ecosystem as mostly markdown-first SKILL.md packages, often nested by category and often bundled with scripts, templates, examples, prompts, and references.
  • OpenHuman could parse flat SKILL.md directories, but did not recursively discover category-organized skill trees or surface Hermes-specific metadata as first-class explorer data.

Solution

  • Recursively scans trusted/user/project skill roots for nested SKILL.md directories while preserving existing symlink, hidden-directory, and excluded-directory guards.
  • Normalizes Hermes frontmatter into the existing OpenHuman skills domain: top-level platforms, nested metadata.hermes.tags, metadata.hermes.related_skills, and source_format.
  • Keeps execution semantics unchanged: Hermes scripts and markdown resources are browsable resources, not newly trusted runtime entrypoints.
  • Adds an Explorer tab to /skills so SKILL.md packages are visible outside dev-only runner surfaces.
  • Extends the detail drawer and resource tree to show Hermes metadata and grouped bundled resources.

Submission Checklist

If a section does not apply to this change, mark the item as N/A with a one-line reason. Do not delete items.

  • Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy — added Rust nested Hermes discovery/resource tests and drawer metadata test; existing resource guard tests cover traversal/symlink/oversize failure paths.
  • Diff coverage ≥ 80% — changed lines (Vitest + cargo-llvm-cov merged via diff-cover) meet the gate enforced by .github/workflows/pr-ci.yml. Focused local tests cover changed Rust/React paths; CI diff-cover remains the authoritative merged coverage gate.
  • Coverage matrix updated — N/A: extends existing Skills catalog/explorer behavior without adding/removing a coverage matrix feature row.
  • All affected feature IDs from the matrix are listed in the PR description under ## Related — N/A: no coverage matrix feature ID changed.
  • No new external network dependencies introduced (mock backend used per Testing Strategy).
  • Manual smoke checklist updated if this touches release-cut surfaces (docs/RELEASE-MANUAL-SMOKE.md) — N/A: no release manual smoke surface changed.
  • Linked issue closed via Closes #NNN in the ## Related section — N/A: no GitHub issue was provided for this request.

Impact

  • Runtime/platform impact: desktop app Skills page and Rust core skills metadata discovery.
  • Security/compatibility: preserves existing project trust gating, symlink rejection, resource size caps, and read-resource traversal guards. Nested discovery skips common dependency/cache/VCS directories.
  • Behavior change: discovered SKILL.md packages are now visible in a first-class Skills explorer tab; Hermes-style nested skill folders are discovered as catalog metadata/resources.

Related

  • Closes: N/A — user-requested implementation without linked GitHub issue.
  • Follow-up PR(s)/TODOs: optional future work can add one-click installation from a full Hermes catalog index; this PR intentionally limits integration to local/installed metadata discovery and browsing.

AI Authored PR Metadata (required for Codex/Linear PRs)

Keep this section for AI-authored PRs. For human-only PRs, mark each field N/A.

Linear Issue

  • Key: N/A — no Linear issue was provided.
  • URL: N/A — no Linear issue was provided.

Commit & Branch

  • Branch: feat/hermes-skills-explorer
  • Commit SHA: e6cdcd2bf

Validation Run

  • pnpm --filter openhuman-app format:check — passed via pre-push hook.
  • pnpm typecheckpnpm compile passed locally; pre-push hook also ran compile.
  • Focused tests:
    • pnpm debug unit src/pages/__tests__/Skills.discovered-skills.test.tsx src/components/skills/__tests__/SkillDetailDrawer.test.tsx --verbose — passed, 11 tests.
    • pnpm debug rust openhuman::skills --verbose — passed, 173 skills tests.
    • pnpm exec tsx scripts/i18n-coverage.ts --no-unused --locale zh-CN,hi,es,ar,fr,bn,pt,de,ru,id,it,ko,pl — passed, 0 missing / 0 extra keys.
  • Rust fmt/check (if changed): cargo fmt --manifest-path Cargo.toml; pnpm --filter openhuman-app rust:check passed via pre-push hook.
  • Tauri fmt/check (if changed): cargo fmt --manifest-path app/src-tauri/Cargo.toml --all --check and cargo check --manifest-path app/src-tauri/Cargo.toml passed via pre-push hook.

Validation Blocked

  • command: N/A
  • error: N/A
  • impact: N/A

Behavior Changes

  • Intended behavior change: SKILL.md packages now have a first-class Skills explorer tab, and Hermes-style nested SKILL.md skill folders/resources are discoverable and browsable.
  • User-visible effect: users can search/open discovered skills and inspect Hermes metadata plus scripts/references/assets/templates/examples/prompts in the skill detail drawer.

Parity Contract

  • Legacy behavior preserved: existing flat SKILL.md discovery, legacy skill.json support, scope precedence, trust marker gating, and read-resource hardening remain intact.
  • Guard/fallback/dispatch parity checks: nested discovery still skips symlinked skill dirs/resource roots and hidden/excluded directories; read_resource resolves discovered skill name or slug without relaxing traversal/symlink/size/UTF-8 guards.

Duplicate / Superseded PR Handling

  • Duplicate PR(s): None found for senamakel:feat/hermes-skills-explorer.
  • Canonical PR: This PR.
  • Resolution (closed/superseded/updated): N/A.

Summary by CodeRabbit

  • New Features

    • Skills Explorer: improved resource organization (separates templates, examples, prompts) and shows platforms, related skills, and source format.
    • New Skills tab and richer empty-state/install-from-URL UI.
  • Documentation

    • Expanded multilingual copy for Skills Explorer, detail views, and resource categories across supported languages.

@senamakel senamakel requested a review from a team June 4, 2026 20:32
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 4, 2026

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

This PR extends skill metadata across Rust and TypeScript layers, refactors discovery to support new platform compatibility and related-skills fields, normalizes API responses, updates UI rendering, fixes test navigation for tab isolation, and adds comprehensive i18n support across 13+ languages.

Changes

Skill Metadata & Explorer Feature

Layer / File(s) Summary
Rust backend: metadata models, parsing, discovery, schema
src/openhuman/workflows/ops_types.rs, src/openhuman/workflows/ops_parse.rs, src/openhuman/workflows/schemas.rs, src/openhuman/workflows/ops_discover.rs, src/openhuman/context/channels_prompt.rs, src/openhuman/workflows/inject.rs, src/openhuman/workflows/ops_tests.rs
Adds platforms, related_skills, and source_format to frontmatter and Workflow structs; expands RESOURCE_DIRS with templates, examples, prompts; reworks tag/related-skills extraction and source-format detection; refactors discovery (excluded dirs, deterministic ordering) and resolves resources by dir slug or name with ambiguity errors; updates schema serialization and test helpers/tests.
TypeScript API: SkillSummary contract and normalization
app/src/services/api/skillsApi.ts, app/src/services/api/__tests__/skillsApi.test.ts
Updates SkillSummary to include platforms, relatedSkills, sourceFormat; introduces RawSkillSummary for wire variants; adds normalizeSkillSummary to default/derive fields and convert snake_case; applies normalization in listSkills, createSkill, and updateSkill; adds tests for normalization and legacy fallback.
React UI: fixtures, resource grouping, and test data
app/src/components/skills/SkillResourceTree.tsx, app/src/components/intelligence/__tests__/WorkflowsTab.test.tsx, app/src/components/skills/__tests__/*
Expands KNOWN_GROUPS and GROUP_LABEL_KEYS to include templates/, examples/, and prompts/; updates test fixtures across WorkflowsTab, CreateSkillModal, CreateWorkflowForm, and UninstallSkillConfirmDialog to include new metadata fields.
Test navigation fixes and comprehensive i18n translations
app/src/pages/__tests__/*.test.tsx, app/test/playwright/specs/*.spec.ts, app/src/lib/i18n/*.ts
Updates many component and Playwright tests to explicitly select the “Composio” tab before asserting Composio-related UI; adjusts a skills-registry assertion; adds new i18n keys across languages for skills explorer empty state, skills.tabs.explorer, skill-detail labels (platforms, relatedSkills, sourceFormat), and resource-tree categories (assets, examples, other, prompts, references, scripts, templates).

Monitor Test Improvement

Layer / File(s) Summary
Monitor bounded-output test
src/openhuman/monitor/ops.rs
Changes the oversized-output generator command and enriches the assertion failure message with runtime snapshot values (output_bytes, dropped_bytes, status).

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly Related PRs

Suggested reviewers

  • sanil-23

Poem

🐰 Platforms found, and templates too—hop!
Related skills line up in a crop.
Discovery skips caches, sorts each name,
Locales bloom, and tabs know their game.
A tiny rabbit cheers: "Deploy without a flop!"

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'feat(skills): add Hermes-style skill explorer' accurately and concisely captures the main feature being added—support for Hermes-style skills with a dedicated explorer interface.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
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.

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

Warning

Review ran into problems

🔥 Problems

Stopped waiting for pipeline failures after 30000ms. One of your pipelines takes longer than our 30000ms fetch window to run, so review may not consider pipeline-failure results for inline comments if any failures occurred after the fetch window. Increase the timeout if you want to wait longer or run a @coderabbit review after the pipeline has finished.


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

@coderabbitai coderabbitai Bot added feature Net-new user-facing capability or product behavior. rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure. labels Jun 4, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/src/pages/Skills.tsx (1)

1-1257: ⚖️ Poor tradeoff

Consider splitting this file in a future refactor.

The file is 1257 lines, which exceeds the 500-line guideline. This is a pre-existing issue (the file was already large before this PR), and the ~60 lines added for the explorer tab are well-structured. Consider extracting tab-specific logic into separate components (e.g., SkillsExplorerTab, SkillsComposioTab, SkillsChannelsTab) in a follow-up refactor.

As per coding guidelines: Keep TypeScript/React files at or below ~500 lines; split growing modules into smaller files.

🤖 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 `@app/src/pages/Skills.tsx` around lines 1 - 1257, This file is too large;
extract tab-specific UI and logic into smaller components to stay under ~500
lines: create components like SkillsExplorerTab, SkillsComposioTab, and
SkillsChannelsTab and move the relevant JSX + local state/handlers into them
(e.g., explorer: searchQuery, selectedCategory, discoveredSkills,
refreshDiscoveredSkills, groupedItems, renderGroup, SkillSearchBar usage;
composio: composioGridEntries/composioSortedEntries, composioModalToolkit,
ComposioConnectorTile, composio-related useEffect and openhumanComposioGetMode
handling; channels: channelDefs, channelConnections, handleSetDefaultChannel,
ChannelTile and default channel UI). Keep shared utilities and hooks
(bestChannelStatus, channelStatusLabel/color, composioStatusLabel/color/sort,
BUILT_IN_SKILLS, SkillItem type) in the original file or a new shared module and
pass needed props (e.g., composioConnectionByToolkit,
agentReadyComposioToolkits, refreshComposio, setComposioModalToolkit,
setChannelModalDef, setSelectedSkill, toasts handlers) into the extracted
components to preserve behavior. Ensure exported components accept the minimal
props and update imports/usages in Skills to render the new subcomponents and to
keep modal state (ChannelSetupModal, ComposioConnectModal, CreateSkillModal,
InstallSkillDialog, SkillDetailDrawer, UninstallSkillConfirmDialog,
ToastContainer) either lifted or passed callbacks as needed.
🤖 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/openhuman/skills/ops_discover.rs`:
- Around line 327-328: The current .find(|s| s.name == skill_id || s.dir_name ==
skill_id) can pick the wrong skill when one skill's name equals another's
dir_name; replace it with disambiguation: first search for an exact name match
(s.name == skill_id), if none then search for a dir_name match (s.dir_name ==
skill_id), and if both a name-match and a different dir_name-match exist return
an explicit error about the ambiguity instead of silently picking the first;
update the code that uses skill_id, the closure using s.name/s.dir_name, and the
enclosing function in ops_discover.rs to implement this deterministic
resolution.

---

Nitpick comments:
In `@app/src/pages/Skills.tsx`:
- Around line 1-1257: This file is too large; extract tab-specific UI and logic
into smaller components to stay under ~500 lines: create components like
SkillsExplorerTab, SkillsComposioTab, and SkillsChannelsTab and move the
relevant JSX + local state/handlers into them (e.g., explorer: searchQuery,
selectedCategory, discoveredSkills, refreshDiscoveredSkills, groupedItems,
renderGroup, SkillSearchBar usage; composio:
composioGridEntries/composioSortedEntries, composioModalToolkit,
ComposioConnectorTile, composio-related useEffect and openhumanComposioGetMode
handling; channels: channelDefs, channelConnections, handleSetDefaultChannel,
ChannelTile and default channel UI). Keep shared utilities and hooks
(bestChannelStatus, channelStatusLabel/color, composioStatusLabel/color/sort,
BUILT_IN_SKILLS, SkillItem type) in the original file or a new shared module and
pass needed props (e.g., composioConnectionByToolkit,
agentReadyComposioToolkits, refreshComposio, setComposioModalToolkit,
setChannelModalDef, setSelectedSkill, toasts handlers) into the extracted
components to preserve behavior. Ensure exported components accept the minimal
props and update imports/usages in Skills to render the new subcomponents and to
keep modal state (ChannelSetupModal, ComposioConnectModal, CreateSkillModal,
InstallSkillDialog, SkillDetailDrawer, UninstallSkillConfirmDialog,
ToastContainer) either lifted or passed callbacks as needed.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 3fe13494-8796-48ae-948c-9c1bc80fcffd

📥 Commits

Reviewing files that changed from the base of the PR and between 1083c31 and e6cdcd2.

📒 Files selected for processing (29)
  • app/src/components/skills/SkillDetailDrawer.tsx
  • app/src/components/skills/SkillResourceTree.tsx
  • app/src/components/skills/__tests__/CreateSkillModal.test.tsx
  • app/src/components/skills/__tests__/SkillDetailDrawer.test.tsx
  • app/src/components/skills/__tests__/UninstallSkillConfirmDialog.test.tsx
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/pages/Skills.tsx
  • app/src/pages/__tests__/Skills.discovered-skills.test.tsx
  • app/src/services/api/skillsApi.ts
  • src/openhuman/context/channels_prompt.rs
  • src/openhuman/skills/inject.rs
  • src/openhuman/skills/ops_discover.rs
  • src/openhuman/skills/ops_parse.rs
  • src/openhuman/skills/ops_tests.rs
  • src/openhuman/skills/ops_types.rs
  • src/openhuman/skills/schemas.rs

Comment thread src/openhuman/skills/ops_discover.rs Outdated
@AMIK-coorporations
Copy link
Copy Markdown
Contributor

Hey, This is a great feature, Thank-You😀

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 4, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

🧹 Nitpick comments (1)
src/openhuman/monitor/ops.rs (1)

49-58: ⚡ Quick win

Remove duplicate gated-command validation in start().

Line 50-53 and Line 55-58 both call security.check_gated_command(command). This double-check is redundant and can drift if the policy check ever becomes stateful/time-sensitive. Keep a single evaluation and branch logging around that result.

Proposed simplification
-    if gate_decision == GateDecision::Block {
-        security.check_gated_command(command).map_err(|reason| {
-            tracing::debug!(class = ?class, reason = %reason, "[monitor] ops:start blocked");
-            reason.to_string()
-        })?;
-    }
-    security.check_gated_command(command).map_err(|reason| {
-        tracing::debug!(class = ?class, reason = %reason, "[monitor] ops:start denied");
-        reason.to_string()
-    })?;
+    if let Err(reason) = security.check_gated_command(command) {
+        let msg = if gate_decision == GateDecision::Block {
+            "[monitor] ops:start blocked"
+        } else {
+            "[monitor] ops:start denied"
+        };
+        tracing::debug!(class = ?class, reason = %reason, "{msg}");
+        return Err(reason.to_string());
+    }
🤖 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/openhuman/monitor/ops.rs` around lines 49 - 58, There are two
back-to-back calls to security.check_gated_command(command) in start(), causing
a redundant double validation; replace them with a single call and branch the
logging inside its error handler based on GateDecision (use gate_decision ==
GateDecision::Block to choose between the "[monitor] ops:start blocked" and
"[monitor] ops:start denied" debug messages). Concretely: compute the result
once (e.g., security.check_gated_command(command).map_err(|reason| { if
gate_decision == GateDecision::Block { tracing::debug!(..., "[monitor] ops:start
blocked"); } else { tracing::debug!(..., "[monitor] ops:start denied"); }
reason.to_string() })? ) so the check is only executed once and behavior matches
the original logs.
🤖 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 `@src/openhuman/monitor/ops.rs`:
- Around line 49-58: There are two back-to-back calls to
security.check_gated_command(command) in start(), causing a redundant double
validation; replace them with a single call and branch the logging inside its
error handler based on GateDecision (use gate_decision == GateDecision::Block to
choose between the "[monitor] ops:start blocked" and "[monitor] ops:start
denied" debug messages). Concretely: compute the result once (e.g.,
security.check_gated_command(command).map_err(|reason| { if gate_decision ==
GateDecision::Block { tracing::debug!(..., "[monitor] ops:start blocked"); }
else { tracing::debug!(..., "[monitor] ops:start denied"); } reason.to_string()
})? ) so the check is only executed once and behavior matches the original logs.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 7ea0e8cb-5986-42da-9d6a-de57e1c3dda2

📥 Commits

Reviewing files that changed from the base of the PR and between 82a41e4 and fb5a6b1.

📒 Files selected for processing (25)
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/fr.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/id.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/pl.ts
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/pages/Skills.tsx
  • app/src/pages/__tests__/Skills.channels-grid.test.tsx
  • app/src/pages/__tests__/Skills.composio-catalog.test.tsx
  • app/src/pages/__tests__/Skills.third-party-gmail-sync.test.tsx
  • app/src/pages/__tests__/Skills.third-party-notion-debug-tools.test.tsx
  • app/test/playwright/specs/composio-triggers-flow.spec.ts
  • app/test/playwright/specs/connector-gmail-composio.spec.ts
  • app/test/playwright/specs/connector-session-guard-matrix.spec.ts
  • app/test/playwright/specs/gmail-flow.spec.ts
  • app/test/playwright/specs/skills-registry.spec.ts
  • src/openhuman/monitor/ops.rs
✅ Files skipped from review due to trivial changes (11)
  • app/src/lib/i18n/bn.ts
  • app/src/lib/i18n/ru.ts
  • app/src/lib/i18n/en.ts
  • app/src/lib/i18n/es.ts
  • app/src/lib/i18n/ko.ts
  • app/src/lib/i18n/ar.ts
  • app/src/lib/i18n/hi.ts
  • app/src/lib/i18n/zh-CN.ts
  • app/src/lib/i18n/de.ts
  • app/src/lib/i18n/it.ts
  • app/src/lib/i18n/pl.ts
🚧 Files skipped from review as they are similar to previous changes (4)
  • app/src/lib/i18n/id.ts
  • app/src/pages/Skills.tsx
  • app/src/lib/i18n/pt.ts
  • app/src/lib/i18n/fr.ts

coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 4, 2026
…explorer

# Conflicts:
#	app/src/components/skills/SkillDetailDrawer.tsx
#	app/src/components/skills/__tests__/SkillDetailDrawer.test.tsx
#	app/src/pages/Skills.tsx
#	app/src/pages/__tests__/Skills.discovered-skills.test.tsx
#	src/openhuman/monitor/ops.rs
#	src/openhuman/workflows/ops_discover.rs
#	src/openhuman/workflows/ops_types.rs
coderabbitai[bot]
coderabbitai Bot previously approved these changes Jun 5, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 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 `@app/test/playwright/specs/skills-registry.spec.ts`:
- Around line 37-39: Scope the assertion to the Composio panel to avoid false
positives: before calling page.getByText(...).first(), click/open the Composio
tab (e.g., page.getByRole('tab', { name: /Composio/i }).click()) or create a
scoped locator for the Composio container (e.g., const composio =
page.locator('selector-for-composio-panel')) and then use
composio.getByText(/Gmail|Notion|Telegram|GitHub|Google Drive/, { exact: false
}).first().toBeVisible() so the matcher only searches inside the Composio
content.
🪄 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: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 29716407-0407-4960-840f-ea7f8431e76c

📥 Commits

Reviewing files that changed from the base of the PR and between 5dd573a and 395ae74.

📒 Files selected for processing (2)
  • app/src/services/api/__tests__/skillsApi.test.ts
  • app/test/playwright/specs/skills-registry.spec.ts

Comment thread app/test/playwright/specs/skills-registry.spec.ts
@senamakel senamakel merged commit 298c3e5 into tinyhumansai:main Jun 5, 2026
31 of 32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Net-new user-facing capability or product behavior. rust-core Core Rust runtime in src/: CLI, core_server, shared infrastructure.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants