بنقرة واحدة
cangjie-translate-lib
将任意语言的三方库/SDK/工具包翻译为纯仓颉 cjpm 包。关注 API 面、依赖策略、包骨架与构建验证;不涉及 HarmonyOS 应用资源与 UI
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
将任意语言的三方库/SDK/工具包翻译为纯仓颉 cjpm 包。关注 API 面、依赖策略、包骨架与构建验证;不涉及 HarmonyOS 应用资源与 UI
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
仓颉语言 HarmonyOS 开发的入口路由。遇到仓颉语法、HarmonyOS API、编译构建等问题时自动加载,引导使用正确的 skill
编译构建仓颉 HarmonyOS 应用,执行 ohpm 依赖安装、仓颉资源同步和 HAP 包打包。用户说编译、构建、build、打包时触发
编译纯仓颉 cjpm 库项目(非 HarmonyOS 应用)。自动检测仓颉 SDK,执行 cjpm build 与 cjpm test。在库目录下说编译/构建/build/打包/跑测试时使用
将其他语言代码翻译为仓颉语言。支持 ArkTS、Swift、Java、Python 到仓颉的转换,记录翻译经验和等价写法差异
从 GitCode 下载最新仓颉语言和 HarmonyOS 原始文档。当 cangjie-kernel 和 cangjie-harmony 未覆盖所需内容时作为兜底使用
仓颉开发经验总结。遇到编译错误、API 差异、迁移问题时查阅已积累的踩坑记录和解决方案
| name | cangjie-translate-lib |
| description | 将任意语言的三方库/SDK/工具包翻译为纯仓颉 cjpm 包。关注 API 面、依赖策略、包骨架与构建验证;不涉及 HarmonyOS 应用资源与 UI |
| argument-hint | [source-lib-path] [--lang <hint>] |
将位于 $1 的三方库翻译为纯仓颉 cjpm 包。--lang <hint> 可选,在无法从 manifest 自动判定源语言时使用。
本 skill 面向库级别翻译,产物为 cjpm 包。不包含应用资源迁移、$r() 引用、HarmonyOS entry/ 骨架、UI 截图辅助等 app 级逻辑 —— 这些由 /cangjie-translate 负责。
| # | 检查项 | 获取方式 | 未就绪时 |
|---|---|---|---|
| 1 | 源项目路径 | 参数 $1 或用户指定 | 询问用户提供路径 |
| 2 | 源语言 | 从 manifest 自动推断(见 Phase 1);无法推断时用 --lang | 询问用户确认 |
| 3 | 分流判定 | 检查源项目是 app 还是 lib(见 Phase 0) | app → 切到 /cangjie-translate |
| 4 | 仓颉 SDK 可用 | ~/.cangjie-sdk/ 或 .env 中配置 | 提示用户安装(Phase 9 构建验证需要) |
| 5 | 输出目标路径 | 默认当前目录下以源库名创建 | 确认用户是否有特殊要求 |
在执行任何翻译前先判定本 skill 是否适用:
| 源项目形态 | 产物目标 | 应使用 |
|---|---|---|
可运行 app / HarmonyOS 应用 / 含 UI 资源(entry/、Assets.xcassets/、Android res/) | HAP 应用 | /cangjie-translate |
| 库 / SDK / CLI 工具 / 算法包 / 纯逻辑工具包 | cjpm package | 本 skill |
| 混合仓库(app + 内部库) | — | 先用本 skill 抽出库部分,app 部分走 /cangjie-translate |
自检规则:若源项目含下列任一应用入口,属 app 场景,应切到 /cangjie-translate:
module.json5 含 abilities 且有 UIAbilityAndroidManifest.xml 含 <activity> 且声明 LAUNCHER@main AppDelegate / App 结构体index.html + 运行时入口bin)。注意:CLI 参数解析库、工具函数库等仍属于库,应使用本 skill判定结果在产出的翻译报告首行明确写出:"分流判定:lib / 继续本 skill"。
识别构建系统 manifest(命中任一即可推断源语言):
| Manifest | 源语言 |
|---|---|
package.json | JS/TS(含 ArkTS) |
tsconfig.json + .ts | TypeScript |
Package.swift / *.podspec | Swift/Obj-C |
pom.xml / build.gradle(.kts) | Java/Kotlin |
Cargo.toml | Rust |
go.mod | Go |
setup.py / pyproject.toml | Python |
*.cabal / stack.yaml | Haskell |
CMakeLists.txt + 无上述 | C/C++ |
mix.exs / rebar.config | Elixir/Erlang |
多 manifest 共存时,以声明导出/构建主产物的那个为主。
记录事实:语言与版本、工具链版本、目标运行时(Node / JVM / Swift runtime / 裸机 …)、入口文件、测试目录、CI 配置。
警示:若项目依赖特定运行时特性(如 JVM 反射、Node event loop、Swift runtime 动态派发),在 decisions.md(Phase 6)中登记。
按源语言可见性规则提取对外 API:
export / export default / .d.tspublic / openpublic / 模块 exportspub + mod.rs 再导出__all__ / 未 _ 前缀产出 <lib-name>_api.md:
## 公共 API 清单
| 源签名 | 仓颉目标签名 | 备注 |
|--------|-------------|------|
| `func add(a: number, b: number): number` | `public func add(a: Int64, b: Int64): Int64` | 数值宽窄已锁定 |
## 内部 API(不对外导出)
- `internalHelper(...)` — 保留但不 public
翻译过程中 API 签名定稿后不得擅自改名;若必须改名(仓颉保留字冲突等),在备注列写明原因。
目标:尽可能翻译完整 API 与核心行为。不要因为仓颉缺少现成 API / 运行时封装,就直接删掉功能、缩窄公共接口,或把核心路径改成空实现。
遇到仓颉没有直接等价能力时,按以下优先级处理:
std / stdx / 已有仓颉生态是否已有等价能力补充约束:
对每个 dependencies 条目逐一标记决策,产出 deps_plan.md:
| 决策 | 适用条件 | 动作 |
|---|---|---|
replace | 仓颉 std / stdx 已有等价 | 查 cangjie-kernel 确认签名后映射 |
implement | 仓颉无现成 API,但可用标准库 / compat 层 / 自写算法补齐 | 在当前库内落地最小必要实现,并保持 API 语义稳定 |
port | 小而纯、仓颉无等价、直接移植依赖实现更划算 | 纳入翻译范围,作为子包翻译 |
stub | 大型/平台相关/经确认本次确实无法安全实现 | 定义最小 interface 占位,明确缺口、影响范围与后续方案 |
drop | 死码 / 仅构建期工具链(lint、bundler) | 完全不翻译 |
强制:每条依赖必须得到一个决策,不允许悬空。
优先级:replace / implement / port > stub > drop。只要核心功能仍可在仓颉侧落地,就不要因为缺少现成 API 直接 stub 或删功能。
<lib-name>/
├── cjpm.toml
├── src/
│ └── <root-package>/
│ ├── *.cj
│ └── <subpackage>/
│ └── *.cj
└── tests/
└── *.cj
cjpm.toml 至少包含:name、version、cjc-version、package、dependencies。版本号保留源库的 major.minor.patch,允许加 -cj.0 预发后缀以示为仓颉翻译版。entry/、module.json5、app.json5entry/src/main/resources/$r("app.media.*") 或 $rawfile(...)main() 入口(tests/ 允许 main,库本体不允许)每文件翻译前按此 checklist 逐条核对,不漏项:
| 源语言构造 | 仓颉对应 |
|---|---|
null / undefined / nil / Optional<T> / T? | Option<T> + ?. / ?? / if let |
泛型协变逆变 / <out T> / <in T> | 仓颉泛型约束 where T <: U;需要型变时显式 @! 或改设计 |
继承 / trait / protocol / interface | 仓颉 interface + open class;注意单继承多实现 |
List / Array / Vec | 固定长度 Array<T> / 可变 ArrayList<T> |
Dict / Map / HashMap | HashMap<K, V> |
Set / HashSet | HashSet<T> |
数值:number / int / Int / long | 显式 Int32 / Int64 / UInt* / Float32 / Float64 —— 不允许隐式宽窄 |
| 异常 / Result / panic | throw + try/catch 或 Option/Result;一个库内风格统一 |
Promise / Future / async/await / coroutine | spawn { ... } + Future<T>.get() |
| 正则 / 日期 / 格式化 | 查 cangjie-kernel 对应标准库 API |
| 迭代器 / lazy seq / stream | 仓颉迭代器协议 |
unsafe / 指针 / 位运算 | 限制使用;必要时 unsafe 块并在注释一行说明原因 |
每条映射若在本次翻译中未遇到可跳过,但 Int 宽窄是易错点,必须主动定型。
下列构造不自作主张,登记到 decisions.md,每条形如:
## [决策点 N] <简述>
- 现状:源代码如何用、用在哪里
- 选项:A / B / C
- 推荐:<选项 + 理由>
- 用户确认:[ ]
触发登记的典型场景:
evalprocess.env 深度依赖)未获用户明确确认前,不做高风险语义改写。若某功能经确认无法在当前仓颉能力下安全实现,可局部 skip,但必须在 decisions.md 和翻译报告中写清:功能点、影响范围、已尝试方案、跳过原因、后续建议。禁止用空实现冒充完成。
evolution skill 的已知坑,解决新坑后回写到 cangjie-translate-lib/experience/(Phase 10)在 tests/ 中创建最小使用者,import 本库每个公共 API 并至少调用一次:
tests/ 作为功能回归(可能进入 port 决策的一部分)直接调用 /cangjie-lib-build 完成自动化编译与测试(脚本位于 .claude/skills/cangjie-lib-build/lib_build.py):
python3 ${CLAUDE_SKILL_DIR}/../cangjie-lib-build/lib_build.py <lib-root>
或在交互中直接下发 /cangjie-lib-build <lib-root>(推荐,无路径依赖)。该命令会:
.env 或 ~/.cangjie-sdk/)cjpm build,产物落到 <lib-root>/target/tests/ 或 cjpm.toml 含 [test]/[[test]] 段,跑 cjpm test要求:
cjpm build 成功,无 errorcjpm test(如执行)全部通过deprecated / unused 视情况保留evolution/cangjie/syntax.md、evolution/cangjie/arkui.md;若是库级工程化问题(包循环、导出不一致),写入 cangjie-translate-lib/experience/build.md解决了非显而易见问题后追加到 cangjie-translate-lib/experience/,按主题分文件:
type-mapping.md — 任意语言 → 仓颉的类型/语义对应细节deps.md — 依赖替代策略(哪些能 replace,哪些必须 port,常见 stub 形态)build.md — cjpm 工程化(多包、版本、导出)api-design.md — 库对外 API 设计取舍(异常 vs Result、可选参数、默认值)不预先创建空文件,按需生成并更新 experience/README.md 索引。格式遵循 evolution/SKILL.md 的"单条经验格式"。
与 cangjie-translate/*2cangjie/ 的区别:那里沉淀应用翻译中"源语言 → 仓颉"的语法/表达差异;这里沉淀库工程化经验(包布局、API 面、依赖替代、cjpm 构建)。两边有交叉的语法点优先记到 cangjie-translate/*2cangjie/,本目录只记库独有的。
stub 或 skipcjpm build 通过;不允许遗留 // TODO: will compile laterdecisions.md,拿到用户确认再落地src/ + cjpm.toml + tests/)<lib-name>_api.md — 公共 API 对照表deps_plan.md — 依赖决策记录decisions.md — 不可直译项的决策点(即使为空也保留文件)