Files
yaak-mountain-loop/crates/yaak-actions/bindings/ActionMetadata.ts
Gregory Schier 50b0e23d53 Add yaak-actions crate for centralized action system
Implements a unified action system that serves as a single source of truth
for all operations in Yaak (Tauri app, CLI, plugins, deep links, MCP server).

Key features:
- ActionExecutor: Combined registry and execution engine with async RwLock
- ActionHandler: Trait-based handlers using async closures
- Context system: RequiredContext and CurrentContext for action availability
- Action groups: Organize related actions
- TypeScript bindings: Auto-generated via ts-rs for frontend use

Design highlights:
- Handlers are closures (no dependencies on other yaak crates)
- Registration requires both metadata and handler (prevents orphan actions)
- Flexible return values via serde_json::Value
- All methods are async using tokio

All 33 tests passing. Ready for integration with yaak-core and yaak-app.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-01 09:00:31 -08:00

55 lines
1.2 KiB
TypeScript
Generated

// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
import type { ActionGroupId } from "./ActionGroupId";
import type { ActionId } from "./ActionId";
import type { ActionScope } from "./ActionScope";
import type { RequiredContext } from "./RequiredContext";
/**
* Metadata about an action for discovery.
*/
export type ActionMetadata = {
/**
* Unique identifier for this action.
*/
id: ActionId,
/**
* Display label for the action.
*/
label: string,
/**
* Optional description of what the action does.
*/
description: string | null,
/**
* Icon name to display.
*/
icon: string | null,
/**
* The scope this action applies to.
*/
scope: ActionScope,
/**
* Keyboard shortcut (e.g., "Cmd+Enter").
*/
keyboardShortcut: string | null,
/**
* Whether the action requires a selection/target.
*/
requiresSelection: boolean,
/**
* Optional condition expression for when action is enabled.
*/
enabledCondition: string | null,
/**
* Optional group this action belongs to.
*/
groupId: ActionGroupId | null,
/**
* Sort order within a group (lower = earlier).
*/
order: number,
/**
* Context requirements for this action.
*/
requiredContext: RequiredContext, };