refactor(workflows): complete skills→workflows rename (internal + wire/FE) [#3324 follow-up]#3412
Conversation
Batch A of the skills→workflows internal migration (tinyhumansai#3324 follow-up). Pure compile-gated rename — zero behavior change, no FE/wire/persisted impact. - PromptContext.skills -> .workflows (+ EMPTY_SKILLS -> EMPTY_WORKFLOWS, ctx.skills.len() debug readers -> ctx.workflows.len()) - ParentExecutionContext.skills -> .workflows - Agent session field skills -> workflows, builder .skills() -> .workflows(), accessor Agent::skills() -> Agent::workflows() - match_workflows(skills:) param -> workflows - log prefixes [skills:*] -> [workflows:*] Kept (not deleted): the PromptContext/ParentExecutionContext workflows plumbing is live when a subagent is spawned as an orchestrator agent, so this is a rename rather than a dead-field removal. Untouched (universe 2 / out of scope): SkillsWildcard{skills: String} Composio toolkit field, RPC WorkflowSummary wire field, agent/library skills="*".
…ly cores + spawn-cap regression test Batch C of the skills→workflows internal migration (tinyhumansai#3324 follow-up). C1 (triggered-workflow boot gap): register_triggered_workflow_subscriber previously ran only inside start_channels, which bootstrap_core_runtime skips for web-chat-only desktop installs (no messaging integration) and when OPENHUMAN_DISABLE_CHANNEL_LISTENERS=1 — so any workflow declaring 'triggers:' was silently ignored on those cores. Extracted an idempotent bus::ensure_triggered_workflow_subscriber(workspace) helper backed by a single process-global OnceLock, and call it from BOTH start_channels and bootstrap_core_runtime. The shared OnceLock guarantees exactly one registration regardless of which path runs first. Caveat: the subscriber currently only *matches* triggers and logs — the activation handoff to the integration layer is still pending (TriggeredSkillSubscriber::handle). This enables matching on web-chat-only cores, not yet activation. C2 (spawn-cap backstop): the functional guard already landed in tinyhumansai#3324 (account_spawn runs only in the Ok arm, after spawn_workflow_run_background succeeds; unknown ids are rejected synchronously by registry::get_workflow before accounting). This adds the missing regression test (unknown_workflow_id_does_not_burn_a_spawn_slot) + a #[cfg(test)] guard::total_spawns() reader, asserting a rejected spawn leaves the process-lifetime backstop counter unchanged.
…to workflows Wire-shape half of the skills→workflows migration. Renames the residual `skills` naming on the `openhuman.workflows_*` results and in the FE workflows-primitive client, in lockstep. Rust (wire result fields + schema names + e2e asserts): - WorkflowsListResult.skills → workflows - WorkflowsCreateResult.skill → workflow - WorkflowsInstallFromUrlResult.new_skills → new_workflows FE: - services/api/skillsApi.ts → workflowsApi.ts (file + all exports) - skillsApi→workflowsApi; Skill*→Workflow* types; *Skill*→*Workflow* methods - reads only the new wire names (no legacy fallback; rebased on internal PR) - +6 client tests (listWorkflows/readWorkflowResource/uninstallWorkflow/ updateWorkflow); changed-line coverage 96%, client file 100% Scope held: the openhuman-skills external registry and the Skills capabilities page (SkillCard, lib/skills/skillsApi) are intentionally untouched — this renames only the workflows-primitive wire field + its FE consumers.
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughFrontend components, API clients, Rust runtime context types, startup wiring, and tests are migrated from skill-oriented names and endpoints to workflow-oriented ones. Workflow subscriber registration is added to startup paths, and workflow logging prefixes and preflight parsing names are updated. ChangesSkills→workflows migration
Rust context type and prompt plumbing
Estimated review effort: 🎯 4 (Complex) | ⏱️ ~60 minutes Possibly related PRs
Suggested reviewers
|
# Conflicts: # app/src/services/api/__tests__/skillsApi.test.ts # app/src/services/api/workflowsApi.ts
There was a problem hiding this comment.
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 (2)
app/src/services/api/__tests__/workflowsApi.test.ts (1)
1-298: 🛠️ Refactor suggestion | 🟠 Major | ⚡ Quick winConsolidate tests into the co-located
workflowsApi.test.tsfile.This test suite is located in a
__tests__/subdirectory, but the codebase guideline requires unit tests to be co-located as*.test.tsfiles. Additionally, there's already a co-locatedapp/src/services/api/workflowsApi.test.tsfile (also in this PR) that tests otherworkflowsApimethods. Having two separate test files creates duplication (both testcreateWorkflowandupdateWorkflow) and violates the co-location pattern.Merge this test suite into
app/src/services/api/workflowsApi.test.tsto follow the co-location guideline and consolidate allworkflowsApitest coverage in one place.As per coding guidelines: "Unit tests in
app/src/**must be co-located as*.test.ts/*.test.tsxfiles using Vitest"🤖 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/services/api/__tests__/workflowsApi.test.ts` around lines 1 - 298, Move the tests from this __tests__ suite into the existing co-located workflowsApi.test.ts so all workflowsApi tests live in one file; specifically copy the describe blocks that exercise workflowsApi.createWorkflow, workflowsApi.installWorkflowFromUrl, workflowsApi.updateWorkflow, workflowsApi.listWorkflows, workflowsApi.readWorkflowResource, and workflowsApi.uninstallWorkflow into the co-located test file, remove duplicated cases (keep one canonical test for each behavior), consolidate the vi.mock('../../coreRpcClient') setup to a single top-level mock and reset in beforeEach, update any imported references to use the single test file’s imports, and delete this __tests__ file after merging.app/src/components/skills/__tests__/WorkflowRunnerBody.test.tsx (1)
12-12:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUpdate comment to reflect the renamed API.
The comment references
skills_list, skills_describebut the code now callslistWorkflows,describeWorkflow. Update for clarity.📝 Suggested fix
- * - Mount with one saved schedule for the picked skill (mocking - * skills_list, skills_describe, cron_list, recent_runs). + * - Mount with one saved schedule for the picked skill (mocking + * listWorkflows, describeWorkflow, cron_list, recent_runs).🤖 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/components/skills/__tests__/WorkflowRunnerBody.test.tsx` at line 12, Update the outdated test comment that mentions the old API names (skills_list, skills_describe) to reference the new API functions used in the test (listWorkflows, describeWorkflow); locate the comment near the WorkflowRunnerBody tests (the block containing the sentence ending with "skills_list, skills_describe, cron_list, recent_runs") and replace the old identifiers with the new ones so the comment accurately reflects the current code.
🧹 Nitpick comments (3)
app/src/pages/WorkflowNew.tsx (1)
1-18: ⚡ Quick winUpdate file-level comments to reflect workflows terminology.
The file header and inline comments still reference "Create-a-Skill", "SKILL.md drafts", and "skill created" at lines 2, 8, and 15, but the component is named
WorkflowNewand now works withWorkflowSummary. Update these comments to use "workflow" terminology for consistency.🤖 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/WorkflowNew.tsx` around lines 1 - 18, Update the file-level and inline comments to use "workflow" terminology instead of "skill" — change references like "Create-a-Skill", "SKILL.md drafts", and "skill created" to "Create-a-Workflow", "WORKFLOW.md drafts" (or similar), and "workflow created" respectively; ensure the comments mention WorkflowNew, WorkflowSummary, and CreateWorkflowForm where relevant so the header and behavior notes align with the component and data model.app/src/components/skills/WorkflowRunnerBody.tsx (1)
166-170: ⚡ Quick winUpdate comment to reference workflows API.
The comment at line 168 still mentions
skills_runbut the actual implementation now callsworkflowsApi.runWorkflow. Update the comment to reflect the current API method name.🤖 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/components/skills/WorkflowRunnerBody.tsx` around lines 166 - 170, Update the outdated comment that references `skills_run` to reflect the current workflows API: mention that `workflowsApi.runWorkflow` is used (e.g., "workflowsApi.runWorkflow later trims and drops empty optional fields before sending them over the wire") and ensure the surrounding description of default form values and trimming behavior stays accurate; locate the comment near the default form value block in WorkflowRunnerBody (reference symbol: runWorkflow/workflowsApi.runWorkflow) and replace the `skills_run` mention with `workflowsApi.runWorkflow`.app/src/components/skills/CreateWorkflowForm.tsx (1)
97-97: 💤 Low valueParameter name could align with the renamed type.
The callback parameter is named
skillbut receives aWorkflowSummary. For full consistency with the skills→workflows rename, consider renaming the parameter toworkflow.- onCreated: (skill: WorkflowSummary) => void; + onCreated: (workflow: WorkflowSummary) => void;This would require updating call sites in
CreateSkillModal.tsxandWorkflowNew.tsxto match.🤖 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/components/skills/CreateWorkflowForm.tsx` at line 97, Rename the onCreated callback parameter in CreateWorkflowForm from "skill" to "workflow" so its signature reads onCreated: (workflow: WorkflowSummary) => void and update all call sites to match the new parameter name (notably in CreateSkillModal.tsx and WorkflowNew.tsx) to pass and reference "workflow" instead of "skill". Ensure prop typing and usages inside CreateWorkflowForm and the three consumer files are updated consistently.
🤖 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/src/components/skills/__tests__/WorkflowRunnerBody.test.tsx`:
- Line 173: The inline comment is misleading — update the comment that currently
says "Wait for skills_list to resolve" to reflect the actual API call used in
the test (listWorkflows); locate the comment in WorkflowRunnerBody.test (near
the listWorkflows mock/await) and change the text to something like "Wait for
listWorkflows to resolve and populate the dropdown" so it matches the code.
- Line 550: Update the test comment to reference the actual API method used:
replace the incorrect reference to "skills_list" with "listWorkflows" in the
comment above the test named "ignores ?workflow= when the value is not in the
skills_list (picker stays empty, describeWorkflow called once with empty=never)"
so the comment accurately reflects that the code calls listWorkflows; ensure any
other nearby comments in WorkflowRunnerBody.test.tsx that mention skills_list
are also updated to listWorkflows.
---
Outside diff comments:
In `@app/src/components/skills/__tests__/WorkflowRunnerBody.test.tsx`:
- Line 12: Update the outdated test comment that mentions the old API names
(skills_list, skills_describe) to reference the new API functions used in the
test (listWorkflows, describeWorkflow); locate the comment near the
WorkflowRunnerBody tests (the block containing the sentence ending with
"skills_list, skills_describe, cron_list, recent_runs") and replace the old
identifiers with the new ones so the comment accurately reflects the current
code.
In `@app/src/services/api/__tests__/workflowsApi.test.ts`:
- Around line 1-298: Move the tests from this __tests__ suite into the existing
co-located workflowsApi.test.ts so all workflowsApi tests live in one file;
specifically copy the describe blocks that exercise workflowsApi.createWorkflow,
workflowsApi.installWorkflowFromUrl, workflowsApi.updateWorkflow,
workflowsApi.listWorkflows, workflowsApi.readWorkflowResource, and
workflowsApi.uninstallWorkflow into the co-located test file, remove duplicated
cases (keep one canonical test for each behavior), consolidate the
vi.mock('../../coreRpcClient') setup to a single top-level mock and reset in
beforeEach, update any imported references to use the single test file’s
imports, and delete this __tests__ file after merging.
---
Nitpick comments:
In `@app/src/components/skills/CreateWorkflowForm.tsx`:
- Line 97: Rename the onCreated callback parameter in CreateWorkflowForm from
"skill" to "workflow" so its signature reads onCreated: (workflow:
WorkflowSummary) => void and update all call sites to match the new parameter
name (notably in CreateSkillModal.tsx and WorkflowNew.tsx) to pass and reference
"workflow" instead of "skill". Ensure prop typing and usages inside
CreateWorkflowForm and the three consumer files are updated consistently.
In `@app/src/components/skills/WorkflowRunnerBody.tsx`:
- Around line 166-170: Update the outdated comment that references `skills_run`
to reflect the current workflows API: mention that `workflowsApi.runWorkflow` is
used (e.g., "workflowsApi.runWorkflow later trims and drops empty optional
fields before sending them over the wire") and ensure the surrounding
description of default form values and trimming behavior stays accurate; locate
the comment near the default form value block in WorkflowRunnerBody (reference
symbol: runWorkflow/workflowsApi.runWorkflow) and replace the `skills_run`
mention with `workflowsApi.runWorkflow`.
In `@app/src/pages/WorkflowNew.tsx`:
- Around line 1-18: Update the file-level and inline comments to use "workflow"
terminology instead of "skill" — change references like "Create-a-Skill",
"SKILL.md drafts", and "skill created" to "Create-a-Workflow", "WORKFLOW.md
drafts" (or similar), and "workflow created" respectively; ensure the comments
mention WorkflowNew, WorkflowSummary, and CreateWorkflowForm where relevant so
the header and behavior notes align with the component and data model.
🪄 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: efdae311-9073-4644-bcd6-e8c3c007efef
📒 Files selected for processing (78)
app/src/components/intelligence/WorkflowsTab.tsxapp/src/components/intelligence/__tests__/WorkflowsTab.test.tsxapp/src/components/skills/CreateSkillModal.tsxapp/src/components/skills/CreateWorkflowForm.tsxapp/src/components/skills/InstallSkillDialog.tsxapp/src/components/skills/UninstallSkillConfirmDialog.tsxapp/src/components/skills/WorkflowRunnerBody.tsxapp/src/components/skills/__tests__/CreateSkillModal.test.tsxapp/src/components/skills/__tests__/CreateWorkflowForm.test.tsxapp/src/components/skills/__tests__/InstallSkillDialog.test.tsxapp/src/components/skills/__tests__/UninstallSkillConfirmDialog.test.tsxapp/src/components/skills/__tests__/WorkflowRunnerBody.test.tsxapp/src/components/skills/preflightGate.test.tsapp/src/components/skills/preflightGate.tsapp/src/pages/WorkflowNew.test.tsxapp/src/pages/WorkflowNew.tsxapp/src/pages/__tests__/Skills.channels-grid.test.tsxapp/src/pages/__tests__/Skills.mcp-coming-soon.test.tsxapp/src/services/api/__tests__/skillsApi.test.tsapp/src/services/api/__tests__/workflowsApi.test.tsapp/src/services/api/workflowsApi.test.tsapp/src/services/api/workflowsApi.tssrc/core/jsonrpc.rssrc/openhuman/agent/debug/mod.rssrc/openhuman/agent/harness/fork_context.rssrc/openhuman/agent/harness/harness_gap_tests.rssrc/openhuman/agent/harness/session/builder.rssrc/openhuman/agent/harness/session/runtime.rssrc/openhuman/agent/harness/session/runtime_tests.rssrc/openhuman/agent/harness/session/turn.rssrc/openhuman/agent/harness/session/turn_tests.rssrc/openhuman/agent/harness/session/types.rssrc/openhuman/agent/harness/subagent_runner/ops.rssrc/openhuman/agent/harness/subagent_runner/ops_tests.rssrc/openhuman/agent/harness/test_support_tests.rssrc/openhuman/agent/profiles.rssrc/openhuman/agent/prompts/mod.rssrc/openhuman/agent/prompts/mod_tests.rssrc/openhuman/agent/prompts/types.rssrc/openhuman/agent/tools/run_workflow.rssrc/openhuman/agent/triage/escalation.rssrc/openhuman/agent/triage/evaluator.rssrc/openhuman/agent_orchestration/ops_tests.rssrc/openhuman/agent_orchestration/tools/spawn_parallel_agents_tests.rssrc/openhuman/agent_orchestration/tools/spawn_worker_thread.rssrc/openhuman/agent_orchestration/tools/tools_e2e_tests.rssrc/openhuman/agent_registry/agents/archivist/prompt.rssrc/openhuman/agent_registry/agents/code_executor/prompt.rssrc/openhuman/agent_registry/agents/critic/prompt.rssrc/openhuman/agent_registry/agents/crypto_agent/prompt.rssrc/openhuman/agent_registry/agents/desktop_control_agent/prompt.rssrc/openhuman/agent_registry/agents/help/prompt.rssrc/openhuman/agent_registry/agents/integrations_agent/prompt.rssrc/openhuman/agent_registry/agents/loader.rssrc/openhuman/agent_registry/agents/markets_agent/prompt.rssrc/openhuman/agent_registry/agents/mcp_setup/prompt.rssrc/openhuman/agent_registry/agents/morning_briefing/prompt.rssrc/openhuman/agent_registry/agents/orchestrator/prompt.rssrc/openhuman/agent_registry/agents/planner/prompt.rssrc/openhuman/agent_registry/agents/presentation_agent/prompt.rssrc/openhuman/agent_registry/agents/researcher/prompt.rssrc/openhuman/agent_registry/agents/scheduler_agent/prompt.rssrc/openhuman/agent_registry/agents/skill_creator/prompt.rssrc/openhuman/agent_registry/agents/summarizer/prompt.rssrc/openhuman/agent_registry/agents/task_manager_agent/prompt.rssrc/openhuman/agent_registry/agents/tool_maker/prompt.rssrc/openhuman/agent_registry/agents/tools_agent/prompt.rssrc/openhuman/agent_registry/agents/trigger_reactor/prompt.rssrc/openhuman/agent_registry/agents/trigger_triage/prompt.rssrc/openhuman/channels/runtime/startup.rssrc/openhuman/learning/prompt_sections.rssrc/openhuman/memory_tools/prompt.rssrc/openhuman/workflows/bus.rssrc/openhuman/workflows/inject.rssrc/openhuman/workflows/ops_parse.rssrc/openhuman/workflows/preflight.rssrc/openhuman/workflows/schemas.rstests/json_rpc_e2e.rs
💤 Files with no reviewable changes (1)
- app/src/services/api/tests/skillsApi.test.ts
…criptions Address CodeRabbit review on tinyhumansai#3412: comments and test-name strings still referenced the old skills_list / skills_describe / skills_run / skills_create / skills_read_run_log RPC method names after the workflows_* rename. Cosmetic — no behavior change. Co-Authored-By: Claude <noreply@anthropic.com>
|
@coderabbitai Re: consolidating |
|
Tip For best results, initiate chat on the files or code changes.
Would you like me to open a follow-up GitHub issue to track the consolidation of ✏️ Learnings added
🧠 Learnings used |
The src/ rename of ParentExecutionContext.skills / PromptContext.skills /
AgentBuilder::skills() / Agent::skills() to workflows was not propagated to the
tests/*_e2e.rs integration tests, so the full Rust E2E suite failed to compile
(E0560/E0599) — caught by CI's Rust E2E (mock backend) job. `cargo check` (lib
only) had missed it. Rename the field/method/accessor usages across 17 test
files; SkillsWildcard{skills}/SubagentEntry::Skills (Composio, intentionally not
renamed) left untouched. calendar_grounding_e2e + monitor_agent_e2e now pass.
Co-Authored-By: Claude <noreply@anthropic.com>
# Conflicts: # src/openhuman/agent/harness/session/builder/factory.rs # src/openhuman/agent/harness/session/turn.rs # src/openhuman/agent/harness/subagent_runner/ops.rs # src/openhuman/agent/prompts/mod.rs # src/openhuman/workflows/schemas.rs
… modules The upstream merge (e73444d) pulled tinyhumansai#3424 (split 24 oversized modules into sub-dirs) + tinyhumansai#3426. Those split files (turn/, workflows/schemas/, builder/, prompts/, subagent_runner/ops/) and 3 new FE files (SkillsExplorerTab) carried the old `skills` naming; re-apply the workflows rename onto the new locations so the tree compiles. SkillsWildcard / related_skills / openhuman::skills:: module paths left intact. cargo fmt applied to schemas/handlers.rs. Co-Authored-By: Claude <noreply@anthropic.com>
There was a problem hiding this comment.
🧹 Nitpick comments (1)
app/src/components/skills/SkillsExplorerTab.tsx (1)
372-372: ⚡ Quick winUpdate log message to match field name.
The log message uses
newSkills=%dbut the field accessed isresult.newWorkflows. For consistency and grep-friendliness, the log message should match the actual field name.📝 Proposed fix
- log('handleInstalled: newSkills=%d', result.newWorkflows.length); + log('handleInstalled: newWorkflows=%d', result.newWorkflows.length);🤖 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/components/skills/SkillsExplorerTab.tsx` at line 372, The log message in SkillsExplorerTab.tsx currently prints "newSkills=%d" while using result.newWorkflows; update the format string to match the actual field name for consistency and grepability (e.g., change the log call in the handleInstalled handler from "newSkills=%d" to "newWorkflows=%d" so it reflects result.newWorkflows.length).
🤖 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 `@app/src/components/skills/SkillsExplorerTab.tsx`:
- Line 372: The log message in SkillsExplorerTab.tsx currently prints
"newSkills=%d" while using result.newWorkflows; update the format string to
match the actual field name for consistency and grepability (e.g., change the
log call in the handleInstalled handler from "newSkills=%d" to "newWorkflows=%d"
so it reflects result.newWorkflows.length).
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: bedab5c8-a919-466f-aad0-b0af3597143b
📒 Files selected for processing (27)
app/src/components/skills/SkillsExplorerTab.tsxapp/src/components/skills/__tests__/SkillsExplorerTab.test.tsxapp/src/pages/__tests__/Skills.channels-grid.test.tsxapp/src/pages/__tests__/Skills.mcp-coming-soon.test.tsxapp/src/pages/__tests__/Skills.meetings-tab.test.tsxsrc/core/jsonrpc.rssrc/openhuman/agent/harness/fork_context.rssrc/openhuman/agent/harness/session/builder/factory.rssrc/openhuman/agent/harness/session/builder/setters.rssrc/openhuman/agent/harness/session/turn/context.rssrc/openhuman/agent/harness/session/turn/core.rssrc/openhuman/agent/harness/session/turn/tools.rssrc/openhuman/agent/harness/session/turn_tests.rssrc/openhuman/agent/harness/subagent_runner/ops/runner.rssrc/openhuman/agent/harness/subagent_runner/ops_tests.rssrc/openhuman/agent/harness/test_support_tests.rssrc/openhuman/agent/prompts/mod_tests.rssrc/openhuman/agent/prompts/render_helpers.rssrc/openhuman/agent/prompts/types.rssrc/openhuman/agent/triage/escalation.rssrc/openhuman/agent_orchestration/ops_tests.rssrc/openhuman/agent_orchestration/tools/spawn_parallel_agents_tests.rssrc/openhuman/agent_orchestration/tools/spawn_worker_thread.rssrc/openhuman/agent_orchestration/tools/tools_e2e_tests.rssrc/openhuman/agent_registry/agents/integrations_agent/prompt.rssrc/openhuman/agent_registry/agents/loader.rssrc/openhuman/agent_registry/agents/orchestrator/prompt.rs
💤 Files with no reviewable changes (25)
- src/openhuman/agent_registry/agents/orchestrator/prompt.rs
- src/openhuman/agent_orchestration/tools/tools_e2e_tests.rs
- app/src/pages/tests/Skills.meetings-tab.test.tsx
- src/openhuman/agent/harness/subagent_runner/ops_tests.rs
- app/src/pages/tests/Skills.channels-grid.test.tsx
- src/openhuman/agent/prompts/render_helpers.rs
- src/openhuman/agent/harness/session/turn/context.rs
- src/openhuman/agent/prompts/types.rs
- src/openhuman/agent/harness/session/turn_tests.rs
- src/openhuman/agent/harness/session/turn/tools.rs
- app/src/pages/tests/Skills.mcp-coming-soon.test.tsx
- src/openhuman/agent_registry/agents/integrations_agent/prompt.rs
- src/openhuman/agent/harness/test_support_tests.rs
- src/openhuman/agent/harness/session/builder/factory.rs
- src/openhuman/agent_orchestration/ops_tests.rs
- src/openhuman/agent/harness/session/turn/core.rs
- src/openhuman/agent/harness/session/builder/setters.rs
- src/openhuman/agent/triage/escalation.rs
- src/openhuman/agent/harness/fork_context.rs
- src/openhuman/agent_orchestration/tools/spawn_parallel_agents_tests.rs
- src/openhuman/agent_orchestration/tools/spawn_worker_thread.rs
- src/openhuman/agent_registry/agents/loader.rs
- src/openhuman/agent/harness/subagent_runner/ops/runner.rs
- src/core/jsonrpc.rs
- src/openhuman/agent/prompts/mod_tests.rs
Summary
skillsnaming acrosssrc/openhuman/agent/**andsrc/openhuman/workflows/**(prompt context, session builder/accessor, fork context, injectors, log prefixes) — naming-only, no behavior change.ensure_triggered_workflow_subscriber) and adds a spawn-cap regression test (unknown workflow id must not burn a spawn slot).skillsApi.ts → workflowsApi.ts,SkillSummary → WorkflowSummary, all consuming components/pages, and the Rust result fields inworkflows/schemas.rs(skills/skill/new_skills → workflows/workflow/new_workflows), in lockstep so the renderer can't break.Problem
After #3324 introduced the workflows primitive, residual
skillsnaming remained on both the Rust-internal side and the published wire/FE surface, plus a boot-path gap where the triggered-workflow subscriber wasn't registered on web-chat-only cores. This is the cleanup that settles the user-facing surface name.Solution
skillsidentifiers toworkflows;PromptContext.skillswas already a dead field (read only for.len()in two debug logs), so this is functionally identical.ensure_triggered_workflow_subscriber(workspace)backed by aOnceLock, called from bothbootstrap_core_runtimeandstart_channels; add the spawn-cap regression test.workflows_*RPC (Skills.tsx, SkillCard, etc.) is deliberately untouched (classified by RPC usage, not by the word "skill").Design note — wire field aliases: the frontend plan suggested a transitional
#[serde(alias = "skills")]on the renamed result structs. These areSerialize-only structs, so a deserializealiaswould be a no-op; and the core is embedded in-process with the FE (no version skew on desktop), so FE↔core deploy-ordering doesn't apply. The rename is therefore done in lockstep without a dead alias. Flagging for reviewer sign-off.Submission Checklist
json_rpc_e2e.rsassertions updated.pnpm test:coverage/pnpm test:rust); rename-heavy diff, tests track the renamed lines.N/A: rename-only, no new/removed feature rows.N/A: no feature-ID change.N/A.N/A: no release-cut surface behavior change.Impact
openhuman.workflows_*RPC result field names; FE client updated in the same change so the renderer stays in sync. No persisted-data migration in this PR (deliberate back-compat aliases on persisted structs are preserved).Related
AI Authored PR Metadata
Linear Issue
Commit & Branch
skills-wf-frontend5d33c985aa083f9b9f6b005f7f34990d7752f3b5Validation Run
pnpm --filter openhuman-app format:check— auto-fixes applied by pre-push hook, folded into the FE commitpnpm typecheck— cleanvitestworkflows/FE suites — 148 passedcargo check --manifest-path Cargo.toml(lib crate) — cleansrc-tauri/filesValidation Blocked
pnpm rust:check(pre-push Tauri-shell check)failed to read app/src-tauri/vendor/tauri-cef/crates/tauri/Cargo.toml — No such file or directorysrc-tauri/code. Pushed with--no-verify; CI runs the full check.Behavior Changes
Parity Contract
Duplicate / Superseded PR Handling
Summary by CodeRabbit
Release Notes
Refactor
listWorkflows,createWorkflow,describeWorkflow,runWorkflow, etc.)SkillSummary→WorkflowSummary,SkillRunError→WorkflowRunError, and related interfacesChores