用途
kotlin-tuple 用于为 Kotlin 与 Kotlin Multiplatform(KMP)项目生成类型安全的 Tuple 工具代码。它覆盖 Tuple0–Tuple20,通过复制预置示例文件并调整包名的方式完成生成,而不是从零编写代码。
主要能力
可生成的文件类型包括:
- Tuple.kt + TupleFactory.kt —— Tuple 数据类与 tupleOf 工厂方法(必需,始终生成)
- TupleToList.kt —— toList() 扩展函数
- AbstractTupleSerializer.kt + TupleSerializer.kt —— 用于 kotlinx.serialization 的 KSerializer
- AwaitAll.kt —— 类型安全的 awaitAll
- AllNotNullOrNull.kt —— allNotNullOrNull 工具
默认最大 Tuple 尺寸为 20,可指定其他数值。若设置的最大尺寸小于 20,会删除超出部分的 Tuple 定义;若大于 20,则参考相关 .md 文件(tuple-to-list.md、tuple-serializer.md、await-all.md、all-not-null-or-null.md)理解模式后扩展文件。
使用方式
生成代码前,技能会在一条消息内与用户确认以下事项:
- 目标模块(多模块项目时指定生成到哪个模块);技能会分析项目结构并给出候选模块,由用户确认或另行指定。
- 包名与输出目录;技能会根据模块现有包结构推断候选,由用户确认或另行指定。
- 最大 Tuple 尺寸(默认 20)。
- 需要生成的文件类型(多选)。
当用户意图明确时可跳过确认并使用默认设置,例如「デフォルトで」「デフォルト設定で」「with default settings」;「全部入りで」「全部生成して」「generate all」;或参数已明确指定目标模块、包与选项。
关于 ARGUMENTS:技能接收到 ARGUMENTS 参数时,将其值视为默认值,用于推断目标模块、包名与选项等;若用户消息中显式指定了值,则以用户消息为准;ARGUMENTS 与用户消息矛盾时,遵循用户消息。
输出目录检测规则:
- Kotlin Multiplatform(commonMain):<module>/src/commonMain/kotlin/
- JVM / Android(main):<module>/src/main/kotlin/ 或 <module>/src/main/java/
- 单模块项目:src/main/kotlin/ 或 src/main/java/
检测步骤为:检查 build.gradle.kts / build.gradle 中的 KMP 插件(kotlin("multiplatform"))或 JVM/Android 插件;查找已有的 src/commonMain/kotlin、src/main/kotlin 或 src/main/java 目录;追加包路径(如 com.example.tuple → com/example/tuple/)。
生成方式是复制示例文件。示例文件位于 <skill_dir>/example/src/commonMain/kotlin/com/example/tuple/,不从零生成代码。流程包括:确定示例目录相对于技能位置的绝对路径;使用文本搜索 data class Tuple 与目录搜索 find <module>/src -type d -name "tuple*" 检查目标模块中已有的 Tuple 定义,若发现则询问用户是覆盖、换包还是取消,并保留检测结果用于完成消息;创建目标输出目录;用 Bash cp 复制所选文件(全部选择时可用 cp <EXAMPLE_DIR>/.kt <TARGET_DIR>/,部分选择时逐个复制所选文件);用 Bash sed 替换包名,例如 sed -i '' 's/package com.example.tuple/package <USER_PACKAGE>/g' <TARGET_DIR>/.kt,并同步替换 import 语句;按最大尺寸裁剪或扩展 Tuple 定义;检查并补充依赖。
依赖处理:若包含 TupleSerializer.kt 且未配置 kotlinx-serialization 插件或 kotlinx-serialization-json 依赖,则添加到 build.gradle.kts(KMP 加到 commonMain.dependencies,JVM/Android 加到 dependencies);若包含 AwaitAll.kt 且未配置 kotlinx-coroutines-core,同样添加;添加后需通知用户。
构建校验:运行编译检查以确认生成文件无错误,KMP 使用 ./gradlew :<module>:compileKotlinJvm,Android 使用 ./gradlew :<module>:compileDebugKotlin;出现错误需先修复再完成。完成消息包含包名、输出目录、生成文件、依赖变更、检测到的已有 Tuple 包(必须报告文本搜索与目录搜索两者的结果)以及构建结果。
适用场景
需要为 Kotlin 或 KMP 项目提供类型安全 Tuple 支持,并希望一并获得序号化、awaitAll、空安全等配套工具的开发场景。
限制
该技能采用复制预置示例文件并调整包名的方式实现,示例文件包含约 2,600 行重复 Kotlin 代码(Tuple0–Tuple20),生成过程依赖 Bash 的 cp 与 sed 操作。其他细节暂未提供。