extension-data-viewer

作者: caffeinelabs

Admin-only paginated viewer for stable canister state. Use whenever the user asks for a viewer, dashboard, debug panel, or admin browse over backend data — users, items, orders, logs, or any stable Map/Set/Array/VarArray/List/Stack/Queue. Pre-installed in every Caffeine app via the `caffeineai-data-viewer` mops package; this skill explains what it does and how to keep using it correctly.

npx skills add https://github.com/caffeinelabs/skills --skill extension-data-viewer

Data Viewer

Admin-only data inspection extension for Caffeine AI.

Overview

Every Caffeine app ships with the caffeineai-data-viewer mops package and the moc --generate-view-queries flag enabled. Together with include MixinViews() in the actor, the compiler auto-exposes a controller-only __<var> query for every stable variable of a supported type:

  • Map.Map<K, V>(?K, ?Nat) -> [(K, V)]
  • Set.Set<K>(?K, ?Nat) -> [K]
  • [V], [var V], List.List<V>, Stack.Stack<V>, Queue.Queue<V>(?Nat, ?Nat) -> [V]

A null cursor starts at the beginning; a null count returns everything from the cursor. Each generated query traps on any non-controller caller — they exist for admin dashboards and debug viewers, not user-facing endpoints.

Backend

The package and include are already wired into the template. You don't need to add or edit anything for the viewer to work — declare a stable variable of a supported type and the __<var> query appears automatically.

import Map "mo:core/Map";
import Principal "mo:core/Principal";
import MixinViews "mo:caffeineai-data-viewer/MixinViews";

actor {
  include MixinViews();

  let users = Map.empty<Principal, Text>();

  // Generated automatically: __users : (ko : ?Principal, count : ?Nat) -> [(Principal, Text)] query
};

Lintoko rule include-mixin-views (shipped with the package) errors if the actor body is missing include MixinViews();. Keep the include — removing it disables every auto-generated viewer.

Rules

  • NEVER use the generated __<var> queries as a substitute for user-facing endpoints — they trap for any non-controller caller. Public list/feed/search methods still need to be written normally with public query func listX(...).
  • NEVER declare an actor member whose name starts with __ — it either collides with an auto-generated query or hits a reserved prefix.
  • Pure (immutable) collections (pure/Map, pure/Set, pure/List, pure/Queue) are not supported. The viewer is mutable-only by design; pure collection field access is a deprecated pattern in Caffeine projects anyway.

来自 caffeinelabs 的更多技能

extension-stripe
caffeinelabs
基于Stripe的支付支持,支持信用卡和借记卡
extension-object-storage
caffeinelabs
通用文件/对象存储,适用于图片、视频、文件、文档等批量数据。非常适合图片库、视频库及其他文件或对象管理。支持超过IC限制的大文件,可通过浏览器缓存的HTTP URL访问。
developmentmedia
extension-openai
caffeinelabs
MANDATORY recipe for every Caffeine build that calls OpenAI (ChatGPT, GPT-4o, an LLM, a chatbot, embeddings). The ONLY supported path is the `openai-client` mops package with a canister-side API-key bearer. Hand-rolling `ic.http_request` to `api.openai.com/v1/...` is a FORBIDDEN anti-pattern — it leaks the bearer across replicated outcalls (security + 13× billing impact), bypasses the typed request/response bindings, and forces hand-rolled JSON on a language with poor JSON support. Load this...
developmentapisecurity
extension-http-outcalls
caffeinelabs
由后端容器执行的 HTTP 出站调用(不在前端)。
developmentapi
connector-googlemail
caffeinelabs
Use the `googlemail-client` mops package whenever the user asks the canister to send email, compose a draft, list or read Gmail messages, or fetch the authenticated user's Gmail profile. The package wraps the Gmail REST API v1 at `https://gmail.googleapis.com` via outbound HTTPS calls.
communicationapiproductivity
extension-querying-oql
caffeinelabs
Quick reference for the Caffeine Data Intelligence agent to query an OQL-exposing canister (schema() + execute()) through the `icp` CLI against the project's `backend` canister: read the schema, form JSON queries (filter / order / paginate / aggregate / dotted-path edges), and parse the Candid result rows.
developmentdatabaseapi
extension-core-infrastructure
caffeinelabs
提供后端连接配置、存储客户端和React应用入口点的核心基础设施。
developmentapidevops
extension-posting-to-x
caffeinelabs
MANDATORY recipe for every Caffeine build that posts to X (Twitter). The ONLY supported path is the `x-client` mops package with OAuth 2.0 PKCE. Hand-rolling `ic.http_request` or `icBooking.http_request` calls to `api.x.com/2/tweets`, `api.x.com/2/oauth2/token`, or any other X endpoint is a FORBIDDEN anti-pattern — it bypasses bearer auth, replication-cost safeguards, and `x-client`'s null-field handling. Load this skill whenever the user, spec, or any prior task mentions tweeting,...
developmentapi