Token导航 LogoToken导航

Agent Skill · 开发

kuikly-expand-view(奎克利 扩大视图)

kuikly-expand-view 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合在 Codex、Claude、Cursor、Gemini CLI 中需要围绕仓库状态、代码变更或协作事项进行整理时使用。可结合来源仓库、安装命令和原始 README 继续核验具体用法。安装前建议确认权限范围、维护状态,以及是否会触发联网、命令执行或文件读写。

kuikly-expand-view 是开发类 Agent Skill,可用宿主为 Codex、Claude、Cursor、Gemini CLI,通过GitHub 仓库获取,权限为需要联网;许可证信息还不明确,第三方扫描已通过,按安装量在开发类的 21,746 个 Skill 里排第 12,996。

总安装 1,053周安装 43GitHub Stars 69下载 341核验 2026-05-01

安装说明

本站只整理中文说明,不托管安装包,也不代用户安装。
GitHub
许可证
unknown

安装方式

通过对话安装

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

请帮我安装这个 Agent Skill:kuikly-expand-view(奎克利 扩大视图)
来源仓库:https://github.com/tencent-tds/kuiklyui-ai
仓库路径:skills/kuikly-expand-view
安装命令:
npx skills add https://github.com/tencent-tds/kuiklyui-ai --skill kuikly-expand-view
安装前请先检查当前环境是否支持对应 CLI,并向我确认将要执行的命令、安装目录、联网范围和文件读写权限;确认后再执行。

命令行安装

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

skills.shnpx skills
npx skills add https://github.com/tencent-tds/kuiklyui-ai --skill kuikly-expand-view

这个 Skill 是做什么的

开发类 Skill 面向写代码、改代码和排查问题,一般会读写仓库文件,部分还会执行构建或测试命令。

kuikly-expand-view 用于处理 GitHub 仓库、Issue、Pull Request 和代码协作信息,适合围绕仓库状态和协作事项进行整理。适用场景包括代码审查、项目进度跟踪、协作流程管理和仓库元数据分析等开发管理工作。核心能力涵盖仓库信息检索、变更追踪和协作事项归纳,支持多分支和多项目并行管理。

可通过 npx skills add 命令从指定 GitHub 仓库安装,需确认权限范围和访问限制后再使用。使用前应检查是否会触发网络请求、API 调用或文件操作,避免越权访问或数据泄露风险。

来源仓库内路径:skills/kuikly-expand-view

上手步骤

4 步
  1. 1

    确认自己的宿主工具

    公开资料标注支持 Codex、Claude、Cursor、Gemini CLI;先确认自己用的是其中之一,再按对应工具的 Skills 目录放置。

  2. 2

    拿到安装命令

    可以直接复制的命令是 npx skills add https://github.com/tencent-tds/kuiklyui-ai --skill kuikly-expand-…;命令里的占位符换成自己的路径或密钥再执行。

  3. 3

    安装后重启宿主

    命令执行完要完全退出宿主工具再打开,让新装的 Skill 被重新扫描到,否则列表里可能看不到。

  4. 4

    按最小权限试用

    它需要需要联网,先在测试目录或测试账号里跑,确认没问题再放到正式项目。

常见问题

6 条

kuikly-expand-view 怎么安装?

在终端执行 npx skills add https://github.com/tencent-tds/kuiklyui-ai --skill kuikly-expand-view。装完完全退出宿主工具再打开,让它重新扫描本地 Skill。

kuikly-expand-view 支持哪些 AI 工具?

公开资料标注支持 Codex、Claude、Cursor、Gemini CLI。其他工具只要能读取本地 Skill 目录,一般也能手动放进去,但要自己确认触发方式是否一致。

kuikly-expand-view 需要什么权限?

权限级别是需要联网。该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

kuikly-expand-view 是免费的吗?

公开资料没有标注明确许可证,收费和商用限制都无法确认。正式使用前请到来源仓库核对授权说明。

kuikly-expand-view 用的人多吗?

公开数据是累计安装 1,053 次,近一周安装 43 次,下载 341 次,GitHub 69 星。这些数字来自第三方目录统计,只能当作热度参考,不代表质量或安全性。

kuikly-expand-view 安全吗?

第三方扫描结果为通过,但这只覆盖已知的静态检查项,不能替代自己读一遍源码和安装命令。

值得选的地方和要先想清楚的地方

值得选的地方

  • 同时适配 4 种工具,换客户端不用重新找替代品。
  • 第三方扫描已通过,常见的高风险行为没有命中。

先想清楚的地方

  • 许可证没有明确标注,能不能商用、能不能再分发都不确定。
  • 第三方目录整理,版本更新和行为细节以来源仓库为准。

适不适合你

更适合

  • 已经在用 Codex,想直接扩展它能力的人。
  • 需要处理开发类任务、又不想每次都手写提示词的人。

不太适合

  • 需要明确授权才能用到公司项目里的场景。
  • 需要厂商级技术支持和 SLA 的生产系统。

开发类 Skill 对比

6 个同类
Skill总安装GitHub 星权限许可证扫描
skill-vetter

技能审查员 · OpenClaw

8,779,018986操作浏览器MIT-0通过
ontology

本体论 · OpenClaw

6,636,960576只读MIT-0通过
entra-app-registration

内部应用程序注册 · Codex、Claude

6,631,872764接触敏感数据未明确通过
entra-app-registration

内部应用程序注册 · Codex、Claude

3,757,680201接触敏感数据未明确通过
nano-banana-pro

纳米香蕉专业版 · OpenClaw

3,526,898364接触敏感数据MIT-0有提醒
kuikly-expand-view

奎克利 扩大视图 · 本页

1,05369需要联网未明确通过

按安装量取同分类前几名;数字来自第三方目录统计,只作热度参考,不代表质量结论。

SKILL.md 原文

Contents

Core Guidelines

  • View 是跨平台 UI 组件的统一接口: Kuikly 已封装常用 View(Text、Image、List 等),自定义 View 用于复用已有原生 UI 组件或满足特殊需求。
  • 自定义 View 需双端实现: Kuikly 侧定义组件结构(viewName、Attr、Event),Native 侧(Android/iOS/鸿蒙/H5/小程序)实现具体渲染逻辑,通过 viewName 关联。
  • 组件名必须全端一致: Kuikly 侧 viewName() 返回值必须与 Native 侧注册的名字完全一致。
  • 属性和事件走 setProp 方法: Native 侧通过 setProp(propKey, propValue) 接收 Kuikly 侧设置的属性和事件。
  • 方法调用走 call 方法: Native 侧通过 call(method, params, callback) 响应 Kuikly 侧的方法调用。

Workflow: Creating Expand View (Kuikly Side)

Use this workflow to create a expand View on the Kuikly (Kotlin) side.

Kuikly 组件由四部分组成:

  1. viewName: 组件对应到原生组件的名字
  2. Attr: 组件的属性,用于指定该组件含有哪些属性
  3. Event: 用于接收来自原生组件发送的事件
  4. 方法: 组件本身支持的方法,最终实现在原生侧

步骤:

  1. 新建 View 类继承 DeclarativeBaseView<XxxAttr, XxxEvent>
  2. 实现 viewName()、createAttr()、createEvent() 方法
  3. 定义 Attr 类继承 Attr,添加属性方法
  4. 定义 Event 类继承 Event,添加事件注册方法
  5. 编写声明式 API 扩展函数
  6. 在业务代码中使用组件

Step 1: 定义 View 类

import com.tencent.kuikly.core.base.DeclarativeBaseView

class MyImageView : DeclarativeBaseView<MyImageAttr, MyImageEvent>() {

    override fun createAttr(): MyImageAttr {
        return MyImageAttr()
    }

    override fun createEvent(): MyImageEvent {
        return MyImageEvent()
    }

    // 返回 Native 侧注册的组件名
    override fun viewName(): String {
        return "HRImageView"
    }

    // 组件方法(可选),实际实现在 Native 侧
    fun test() {
        performTaskWhenRenderViewDidLoad {
            renderView?.callMethod("test", "params")
        }
    }
}

Step 2: 定义 Attr 类

Attr 表示组件支持的属性集。

import com.tencent.kuikly.core.base.Attr

class MyImageAttr : Attr() {

    /**
     * 设置图片数据源
     * @param src 图片 URL
     * @return this(支持链式调用)
     */
    fun src(src: String): MyImageAttr {
        "src" with src  // 将属性透传给原生组件
        return this
    }

    /**
     * 设置占位图
     */
    fun placeholder(url: String): MyImageAttr {
        "placeholder" with url
        return this
    }

    /**
     * 设置缩放模式
     */
    fun scaleType(type: String): MyImageAttr {
        "scaleType" with type
        return this
    }
}

Step 3: 定义 Event 类

Event 表示组件支持的事件。

import com.tencent.kuikly.core.base.event.Event
import com.tencent.kuikly.core.nvi.serialization.json.JSONObject

class MyImageEvent : Event() {

    /**
     * 图片加载成功回调
     */
    fun loadSuccess(handler: (LoadSuccessParams) -> Unit) {
        register(LOAD_SUCCESS) {
            handler(LoadSuccessParams.decode(it))
        }
    }

    /**
     * 图片加载失败回调
     */
    fun loadError(handler: (LoadErrorParams) -> Unit) {
        register(LOAD_ERROR) {
            handler(LoadErrorParams.decode(it))
        }
    }

    companion object {
        const val LOAD_SUCCESS = "loadSuccess"
        const val LOAD_ERROR = "loadError"
    }
}

// 事件参数解析类
data class LoadSuccessParams(
    val src: String,
    val width: Int,
    val height: Int
) {
    companion object {
        fun decode(params: Any?): LoadSuccessParams {
            val tempParams = params as? JSONObject ?: JSONObject()
            return LoadSuccessParams(
                src = tempParams.optString("src", ""),
                width = tempParams.optInt("width", 0),
                height = tempParams.optInt("height", 0)
            )
        }
    }
}

data class LoadErrorParams(
    val src: String,
    val errorCode: Int
) {
    companion object {
        fun decode(params: Any?): LoadErrorParams {
            val tempParams = params as? JSONObject ?: JSONObject()
            return LoadErrorParams(
                src = tempParams.optString("src", ""),
                errorCode = tempParams.optInt("errorCode", 0)
            )
        }
    }
}

Step 4: 组件方法(可选)

组件方法是 Kuikly 侧暴露的 API,实际实现在 Native 侧。

class MyImageView : DeclarativeBaseView<MyImageAttr, MyImageEvent>() {
    // ...

    /**
     * 重新加载图片(无返回值)
     */
    fun reload() {
        performTaskWhenRenderViewDidLoad {
            renderView?.callMethod("reload", null)
        }
    }

    /**
     * 获取图片信息(异步回调)
     */
    fun getImageInfo(callback: (width: Int, height: Int) -> Unit) {
        performTaskWhenRenderViewDidLoad {
            renderView?.callMethod("getImageInfo", null) { result ->
                val json = result as? JSONObject
                callback(json?.optInt("width") ?: 0, json?.optInt("height") ?: 0)
            }
        }
    }
}
⚠️ 注意: - View 的方法支持异步回调结果,即 renderView?.callMethod("method", "params", callback),但不支持同步返回结果。 - View 方法不支持传递二进制数据,如需传输图片等二进制内容,请通过 Base64 编码后以 JSON 形式传递,或使用 Module 方法实现。

Step 5: 编写声明式 API

import com.tencent.kuikly.core.base.ViewContainer

fun ViewContainer<*, *>.MyImage(init: MyImageView.() -> Unit) {
    addChild(MyImageView(), init)
}

Step 6: 业务使用

override fun body(): ViewBuilder {
    val ctx = this
    return {
        MyImage {
            attr {
                size(176f, 132f)
                src("https://example.com/image.png")
                placeholder("https://example.com/placeholder.png")
            }
            event {
                loadSuccess { params ->
                    println("图片加载成功: ${params.src}, 尺寸: ${params.width}x${params.height}")
                }
                loadError { params ->
                    println("图片加载失败: ${params.errorCode}")
                }
            }
        }
    }
}

使用 ViewRef 获取组件引用

通过 ViewRef 可以获取组件实例,在 Pager 其他位置调用组件方法。

@Page("MyPage")
class MyPage : Pager() {

    // 声明 ViewRef
    private val imageRef = ViewRef<MyImageView>()

    override fun body(): ViewBuilder {
        return {
            MyImage {
                // 绑定 ref
                ref(imageRef)
                attr {
                    src("https://example.com/image.png")
                }
            }

            Button {
                attr { title("重新加载") }
                event {
                    click {
                        // 通过 ref 调用方法
                        imageRef.view?.reload()
                    }
                }
            }
        }
    }
}

Workflow: Implementing Native Side View

Use this workflow to implement the Native side of a expand View.

前提: 只需在业务需要支持的平台上实现 Native 侧 View,无需实现所有平台。

步骤:

  1. 确定需要支持的目标平台(Android/iOS/鸿蒙/H5/小程序)。
  2. 在目标平台宿主工程中创建对应的 View 类。
  3. 实现 setProp 方法处理属性和事件。
  4. 实现 call 方法处理方法调用。
  5. 将 View 注册到 Kuikly 框架。

各平台实现详见 VIEW_IMPLEMENT.md

速查:各平台 View 基类与注册方式

平台基类/协议注册方式注意事项
AndroidIKuiklyRenderViewExportregisterExternalRenderView 中 renderViewExport(name) {View(ctx)}继承原生 View 并实现接口
iOSKuiklyRenderViewExportProtocol类名必须与 viewName 一致(运行时动态创建)属性方法命名 setCss_xxx,方法命名 css_xxx
鸿蒙 (ArkTS)KuiklyRenderBaseViewgetCustomRenderViewCreatorRegisterMap 或 getCustomRenderViewCreatorRegisterMapV2 中注册需实现 createArkUIView() 返回 ComponentContent
H5IKuiklyRenderViewExportregisterExternalRenderView 中 renderViewExport(name) {View()}重写 ele 属性返回 DOM 元素
小程序IKuiklyRenderViewExportregisterExternalRenderView + Transform.addComponentsAlias + base.wxml 模板需创建 MiniXxxElement 并配置模板

Native 侧 setProp 支持的数据类型

Kuikly 侧类型Native 侧接收类型
StringString / NSString
Int / Float / Double对应基础类型 / NSNumber
BooleanBoolean / BOOL
Event 回调KuiklyRenderCallback

事件触发机制

在 Native 侧,事件通过 KuiklyRenderCallback 回调给 Kuikly 侧:

// 保存回调
private var loadSuccessCallback: KuiklyRenderCallback? = null

override fun setProp(propKey: String, propValue: Any): Boolean {
    return when (propKey) {
        "loadSuccess" -> {
            loadSuccessCallback = propValue as KuiklyRenderCallback
            true
        }
        else -> super.setProp(propKey, propValue)
    }
}

// 触发回调
private fun onImageLoaded(src: String, width: Int, height: Int) {
    loadSuccessCallback?.invoke(mapOf(
        "src" to src,
        "width" to width,
        "height" to height
    ))
}

常见陷阱与正确做法

❌ 错误做法✅ 正确做法
View 名字 Kuikly 侧与 Native 侧不一致确保 viewName() 返回值与 Native 注册名完全一致
自定义 View 未设置宽高导致不显示自定义 View 跨端侧使用时必须显式设置宽高(如 size(w, h)),否则可能不会显示
iOS 侧 View 类名与 Kuikly 侧 viewName 不一致iOS 通过类名动态创建 View,类名必须与 viewName() 一致
iOS 侧用 Swift 实现但未加 @objc 注解Swift 实现的 View 需要 @objc 或 @objcMembers 修饰
鸿蒙侧忘记实现 createArkUIView()鸿蒙侧必须实现此方法返回 ComponentContent
忘记在 Native 侧注册自定义 View自定义 View 必须注册后才能使用
在 performTaskWhenRenderViewDidLoad 之外调用 renderViewView 方法必须在 performTaskWhenRenderViewDidLoad 回调中调用

平台分布

Codex

36.98%
按下载量换算126

Claude

29.31%
按下载量换算100

Cursor

16.81%
按下载量换算57

Gemini CLI

8.45%
按下载量换算29

安全审计

Gen Agent Trust Hub

通过

Socket

通过

Snyk

通过

权限和风险

需要联网

该 Skill 可能需要联网访问来源站点、仓库或外部 API;具体网络访问范围需要结合源码和 README 复核。

安装前确认

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

继续浏览同类 Skills