Token导航 LogoToken导航TokenDH.com
研究检索敏感数据github未标认证来源可访问许可证需确认审计通过

taruvi-refine-providers塔鲁维精炼供应商

Agent Skill

taruvi-refine-providers 用于查找、检索和筛选相关信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要根据关键词、任务场景或来源线索快速定位候选结果时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

总安装

261

周安装

11

GitHub Stars

公开资料未说明

下载量

92
CodexClaudeCursorGemini CLI

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

GitHub

来源数

2

许可证

unknown

最后核验

2026-05-01

来源状态

来源可访问

安装方式

通过对话安装

复制提示词发给支持本地命令或 Skills 的 AI 助手,先确认命令和权限,再让它执行。

请帮我安装这个 Agent Skill:taruvi-refine-providers(塔鲁维精炼供应商)
来源仓库:https://github.com/taruvi-ai/taruvi-skills
仓库路径:skills/taruvi-refine-providers
安装命令:
npx skills add https://github.com/taruvi-ai/taruvi-skills --skill taruvi-refine-providers
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

复制命令到本机终端执行。该命令会通过 npx skills 从第三方来源获取 Skill;本站只展示命令,不托管安装包,也不自动执行。

skills.shnpx skills
npx skills add https://github.com/taruvi-ai/taruvi-skills --skill taruvi-refine-providers

简介

用于查找、检索和筛选相关信息。taruvi-refine-providers 属于研究检索类 Skill,可作为该场景下的辅助能力补充。

  • 适合根据关键词或任务场景快速定位候选结果。
  • 可结合来源仓库和原始 README 核验具体用法。
  • 安装前建议确认权限范围、维护状态及是否会触发联网或命令执行。
  • 支持 Codex、Claude、Cursor、Gemini CLI,通过 GitHub 安装。

SKILL.md

Overview

Reference module for wiring and using Taruvi's Refine data providers in the frontend — covering client setup, all provider types, hook usage, auth flow, and access control batching.

Compliance rule: This skill and its references are the source of truth for all provider usage. Do not substitute with simpler patterns, copy outdated project code, or skip prescribed steps. If a requirement cannot be met, stop and ask the user.

Provider Map

Use this as the canonical provider inventory for Taruvi + Refine apps:

ProviderRefine registration keyPrimary purposeTypical hooks
dataProvider(client)defaultDatatable/database CRUD + filters/sort/pagination/aggregationuseList, useOne, useCreate, useUpdate, useDelete, useUpdateMany, useDeleteMany
storageDataProvider(client)storageFile/object upload, listing, download, deleteuseCreate, useList, useOne, useDelete, useDeleteMany
appDataProvider(client)appApp-level operations: function execute, analytics execute, roles, settings, secretsuseCustom (functions/analytics), useList (roles/secrets), useOne (settings/secrets)
userDataProvider(client)userUser CRUD and user-related app datauseList, useOne, useCreate, useUpdate, useDelete
authProvider(client)authProvider propLogin/logout/session/identity/permissionsRefine auth lifecycle (check, login, logout, getIdentity)
accessControlProvider(client)accessControlProvider propBatched Cerbos permission checks for useCan/CanAccessuseCan, CanAccess

Deprecated (do not use in new code):

  • functionsDataProvider (use appDataProvider + useCustom + meta.kind: "function")
  • analyticsDataProvider (use appDataProvider + useCustom + meta.kind: "analytics")

Hook Support Matrix

Use this matrix for the current non-deprecated provider surface:

Hook / DataProvider methoddefaultstorageappuser
useList / getList✅ (roles, secrets)
useOne / getOne✅ (settings, secrets)
useMany / getMany
useCreate / create
useCreateMany / createMany
useUpdate / update
useUpdateMany / updateMany
useDelete / deleteOne
useDeleteMany / deleteMany
useCustom / custom✅ (meta.kind: function/analytics)

When to Use This Skill

  • Setting up @taruvi/refine-providers for the first time in a project
  • Wiring dataProvider, storageDataProvider, appDataProvider, userDataProvider into <Refine>
  • Configuring authProvider and understanding the login/token redirect flow
  • Configuring accessControlProvider and using useCan
  • Using useCustom with meta.kind: "function" or meta.kind: "analytics"
  • Migrating from deprecated functionsDataProvider / analyticsDataProvider
  • Debugging auth errors (401/403), token refresh, or access control resolution

Do not use this skill for: Python function authoring (use taruvi-functions skill), storage REST endpoints (use taruvi-storage skill), or raw database query optimization (use taruvi-database skill).

Step-by-Step Instructions

  1. Open and read references/overview.md — install, quick-start, provider map at a glance.
  2. Open and read the specific provider reference(s) for the task: Important: Identify the current non-deprecated package API before choosing a provider/hook pattern. Never introduce new usage of deprecated APIs. If the only path that appears to work is deprecated, fix the provider/docs first.

- Database CRUD / filters / aggregation / graph → references/database-provider.md - File upload / download / storage → references/storage-provider.md - Functions / analytics / roles / secrets → references/app-provider.md - User management → references/user-provider.md - Login / logout / token flow → references/auth-provider.md - Permissions / useCan / CanAccessreferences/access-control-provider.md - TypeScript types / utilities / deprecated migration → references/types-and-utilities.md

  1. Install dependencies: npm install @taruvi/refine-providers @taruvi/sdk @refinedev/core
  2. Create the SDK client with apiKey, appSlug, and apiUrl.
  3. Wire all relevant providers into <Refine>.
  4. Use provider-native hooks (useList, useCreate, useCustom, useCan) — do not call REST directly from components.
  5. For UI feedback, use Refine’s configured notificationProvider for success/error messaging.

- do not add ad hoc/custom toast systems when a Refine notification provider is already wired

  1. For access control checks, use only the published non-deprecated SDK/provider contract:

- pass prefixed ACL resource strings (for example: datatable:employees, function:employee-terminate, query:hrms-dashboard-summary) - do not use params.entityType for useCan/CanAccess checks - map UI actions to Cerbos actions before access-control checks: - list -> read - show -> read - edit -> update - create -> create - delete -> delete - never send raw UI action names (list, show, edit) in /check/resources payloads

  1. For Taruvi function execution from frontend, enforce this exact contract (hard requirement):
  • dataProviderName: "app"
  • meta.kind: "function"
  • config.payload for input params
  • url must be the function slug
  • do not use values for function input payloads
  • no new usage of functionsDataProvider in frontend app code
  1. For backend-backed list pages, keep the list state in the provider query:
  • backend pagination is required by default
  • default list pageSize is 10; recommend exposing 10, 20, 50, and 100 page-size choices in the UI
  • search, filters, and sorters must be passed into provider calls by default
  • when rendering with MUI DataGrid, default to Refine useDataGrid
  • do not re-implement the primary list filtering logic in component state over fetched backend rows unless the user explicitly asked for client-side behavior
  1. For network-backed dropdowns/typeaheads:
  • default to Autocomplete (or equivalent typeahead UX)
  • debounce search input before querying
  • pass search text into provider filters
  • fetch options with pagination from the backend (default option pageSize 10)
  • avoid using static Select fed by large one-shot option loads

Verification checklist

After wiring providers, verify:

  • SDK client uses env vars (import.meta.env.VITE_TARUVI_*), not hardcoded values
  • All four data providers are wired: default, storage, app, user
  • authProvider and accessControlProvider are both passed to <Refine>
  • User-facing success/error messages use Refine notificationProvider (no parallel custom toast system)
  • No direct REST/fetch calls from components — all data flows through hooks
  • No new usage of deprecated package APIs
  • The chosen provider/hook path matches the installed package’s current non-deprecated API
  • useCustom calls for functions use dataProviderName: "app" and meta.kind: "function"
  • Function inputs are passed via config.payload (not values) for meta.kind: "function" calls
  • No new functionsDataProvider usage in frontend app code
  • Access-control checks use prefixed ACL resource strings from the published contract
  • Runtime network validation: in check/resources payload, each resource.kind exactly matches the requested resource string (no composition, no double-prefix)
  • Runtime network validation: resource.kind is never a bare resource name (for example policies) and always includes prefix (for example datatable:policies)
  • Runtime network validation: action names sent to /check/resources are canonical (read, update, create, delete, execute) and not raw UI labels (list, show, edit)
  • Backend-backed list pages use provider-driven pagination
  • Backend-backed list search/filter/sort state is passed into provider queries, not re-applied in React
  • Backend-backed MUI DataGrid list pages use useDataGrid by default (or include an explicit exception reason)
  • Network-backed dropdowns/typeaheads use debounced server-side search and paginated option queries

Examples

Client and provider setup:

import { Client } from "@taruvi/sdk";
import { useNotificationProvider } from "@refinedev/mui";
import {
  dataProvider,
  storageDataProvider,
  appDataProvider,
  userDataProvider,
  authProvider,
  accessControlProvider,
} from "@taruvi/refine-providers";

const client = new Client({
  apiKey: import.meta.env.VITE_TARUVI_API_KEY,
  appSlug: import.meta.env.VITE_TARUVI_APP_SLUG,
  apiUrl: import.meta.env.VITE_TARUVI_API_URL,
});

<Refine
  dataProvider={{
    default: dataProvider(client),
    storage: storageDataProvider(client),
    app: appDataProvider(client),
    user: userDataProvider(client),
  }}
  notificationProvider={useNotificationProvider}
  authProvider={authProvider(client)}
  accessControlProvider={accessControlProvider(client)}
/>

Backend-driven list with useDataGrid:

import { useDataGrid } from "@refinedev/mui";
import { DataGrid } from "@mui/x-data-grid";

const { dataGridProps } = useDataGrid({
  resource: "employees",
  pagination: { pageSize: 10 },
});

return <DataGrid {...dataGridProps} pagination autoHeight />;

Create/Edit with useForm (Refine v5):

import { useForm } from "@refinedev/react-hook-form";

const {
  saveButtonProps,
  refineCore: { queryResult },
  register,
  formState: { errors },
} = useForm({
  resource: "employees",
  action: "create", // or "edit"
});

Show page with useShow (Refine v5):

import { useShow } from "@refinedev/core";

const { result, query } = useShow({
  resource: "employees",
  id: "emp-123",
});

const record = result;

Advanced meta options on default provider:

useList({
  resource: "employees",
  meta: {
    tableName: "employees_archive",
    select: ["id", "first_name", "status"],
    populate: ["department_id", "manager_id"],
  },
});

Aggregation + groupBy + having:

useList({
  resource: "employees",
  filters: [{ field: "status", operator: "eq", value: "active" }],
  meta: {
    aggregate: ["count(*)"],
    groupBy: ["department_id"],
    having: [{ field: "count(*)", operator: "gt", value: 5 }],
  },
});

Execute a function via appDataProvider (meta.kind: "function"):

const { data } = useCustom({
  url: "employee-terminate",
  method: "post",
  dataProviderName: "app",
  config: {
    payload: { employee_id: "emp-1", termination_reason: "Policy violation" },
  },
  meta: { kind: "function" },
});

Execute analytics via appDataProvider (meta.kind: "analytics"):

const { data } = useCustom({
  url: "hrms-dashboard-summary",
  method: "post",
  dataProviderName: "app",
  payload: {},
  meta: { kind: "analytics" },
});

Check permission with prefixed ACL resources:

const { data: canCreateEmployee } = useCan({
  resource: "datatable:employees",
  action: "create",
});

<CanAccess resource="query:hrms-dashboard-summary" action="execute">
  <DashboardPage />
</CanAccess>;

Use Refine notification provider in actions:

import { useNotification } from "@refinedev/core";

const { open } = useNotification();

open?.({
  type: "success",
  message: "Bulk update completed",
  description: "8 employees updated",
});

Storage upload via storage provider (multi-file payload):

useCreate({
  resource: "employee-documents",
  dataProviderName: "storage",
  values: {
    files: selectedFiles,
    paths: selectedFiles.map((f) => `employees/emp-123/${f.name}`),
    metadatas: selectedFiles.map(() => ({ source: "onboarding" })),
  },
});

Filter Operators

Refine operator keys supported by the Taruvi provider mapping:

OperatorMeaningQuery-style mapping
eqequalsfield=value
nenot equalsfield__ne=value
ltless thanfield__lt=value
gtgreater thanfield__gt=value
lteless than or equalfield__lte=value
gtegreater than or equalfield__gte=value
containscontains (case-sensitive)field__contains=value
ncontainsnot contains (case-sensitive)field__ncontains=value
containsscontains (case-insensitive)field__icontains=value
ncontainssnot contains (case-insensitive)field__nicontains=value
startswithstarts with (case-sensitive)field__startswith=value
nstartswithnot starts with (case-sensitive)field__nstartswith=value
startswithsstarts with (case-insensitive)field__istartswith=value
nstartswithsnot starts with (case-insensitive)field__nistartswith=value
endswithends with (case-sensitive)field__endswith=value
nendswithnot ends with (case-sensitive)field__nendswith=value
endswithsends with (case-insensitive)field__iendswith=value
nendswithsnot ends with (case-insensitive)field__niendswith=value
inin listfield__in=a,b,c
ninnot in listfield__nin=a,b,c
nullis nullfield__null=true
nnullis not nullfield__nnull=true
betweenin rangefield__between=min,max
nbetweennot in rangefield__nbetween=min,max

Gotchas

  • Deprecated providersfunctionsDataProvider and analyticsDataProvider are removed. Migrate to appDataProvider + useCustom with meta.kind: "function" or meta.kind: "analytics". Old imports will compile but throw at runtime.
  • Wrong function payload shape — for meta.kind: "function", pass inputs via config.payload. Using values or top-level payload causes contract drift and runtime issues.
  • Deprecated package path in new code — do not add new code on deprecated providers or compatibility helpers just because old examples still exist. Use the installed package’s current canonical API surface.
  • Auth redirect loopauthProvider.login() redirects to /accounts/login/ and tokens come back in the URL hash. Do not try to intercept mid-redirect or parse the URL yourself — the provider handles it.
  • 401 vs 403 confusiononError() handles both: 401 means session expired (trigger re-login), 403 means authenticated but forbidden (show access denied). Treating 403 as 401 causes infinite re-login loops.
  • /check/resources payload drift — if network logs show resource.kind: "policies" instead of resource.kind: "datatable:policies", access-control wiring is incorrect and must be fixed before completion.
  • Access-control resource format mismatchuseCan/CanAccess expects prefixed ACL resources (for example datatable:employees). Do not pass params.entityType.
  • Access-control resource format drift — always pass prefixed resource strings directly. If resource.kind in network payload differs from the requested resource, there is a contract mismatch.
  • DataLoader batchingaccessControlProvider batches useCan calls automatically via DataLoader. Do not debounce or throttle useCan manually — it will interfere with the batch delay and cause missed permission checks.
  • SDK/provider contract change not coordinated — when the SDK/provider ACL contract changes, app code must be updated in the same release cycle and versioned together.
  • Wrong dataProviderName — forgetting dataProviderName: "app" on useCustom for functions routes the call to the default (database) provider, returning a confusing "resource not found" error. Same applies to "storage" and "user".
  • useCustom slug source — for appDataProvider custom calls, url is treated as the function/query slug. Use a real slug (for example employee-terminate or hrms-dashboard-summary) and set meta.kind accordingly.
  • Client-side filtering over provider results — if a list uses useList but then performs the main search/filter pass in React state, the backend and UI drift out of sync. Push the list state into the provider query by default.
  • Manual DataGrid wiring by default — for backend-backed MUI lists, manually syncing useList + component state is error-prone. Prefer useDataGrid as the default path.
  • Remote options with static Select — for network-backed option lists, static Select with one-time loads does not scale and misses search behavior. Prefer debounced server-driven Autocomplete.

References

  • references/overview.md — install, quick-start, provider map
  • references/database-provider.md — CRUD, filters, operators, sorting, pagination, aggregation, graph
  • references/storage-provider.md — upload, batch upload, delete, metadata, filters
  • references/app-provider.md — roles, settings, secrets, function execution, analytics
  • references/user-provider.md — user CRUD, roles, apps
  • references/auth-provider.md — login/logout/register, token flow, identity, permissions
  • references/access-control-provider.md — useCan, CanAccess, prefixed ACL resources, batching
  • references/types-and-utilities.md — TaruviMeta, StorageUploadVariables, utility functions, deprecated migration

适合场景

01

用户想查找某类 Agent Skill 时

02

需要根据任务场景推荐可安装能力包时

03

需要对比不同来源的安装命令和来源信息时

能力概览

能力 1

按任务关键词查找相关 Skills

能力 2

展示可复制的安装命令

能力 3

保留来源站点、仓库和原始说明,方便继续核验

能力 4

展示第三方安全扫描或审计结果

安装后应在对应宿主中按原始 README 的触发条件使用;具体调用方式请以来源页面和 README 为准。

平台分布

Codex

36.43%
按下载量换算34

Claude

28.93%
按下载量换算27

Cursor

17.3%
按下载量换算16

Gemini CLI

9.52%
按下载量换算9

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

敏感数据

该 Skill 可能接触密钥、Token、环境变量或敏感配置,应进入高风险复核队列,默认不自动发布。

安装前确认

本站仅展示第三方公开信息,不托管安装包,不提供自动安装或运行环境。安装前应自行审查源码、依赖和命令行为。当前只有一个来源,正式发布前建议补源仓库或其他目录站核验。

来源信息

继续浏览同类 Skills