GPUIアプリの開発で、キー操作や画面レイアウト、状態管理、イベント、テストなどのAPIや実装パターンを調べ、必要な知識を参照できます。
- GPUIのAPIを調べたいとき
- キー操作やフォーカスを実装したいとき
- イベントや状態を管理したいとき
DBeaverやNavicatなどの接続情報を取り込むWASM拡張の実装から、マニフェスト設定、ホスト連携、表示やプレビューの不具合調査まで扱います。
Use when implementing, debugging, packaging, or host-enabling onetcli WASM connection importers such as DBeaver, Navicat, Navicat Lite, Termius, connection-import.wit components, wasm32-wasip2 importers, composite extension manifests, local importer visibility, or connection import UI freezes.
実行スコア 未検証
インストール方法を見るonetcli向けに、アプリの接続設定を読み込むWASMコンポーネント型インポーターを実装・デバッグする手順を扱います。設定ファイルの場所を調べ、形式に応じたパーサーを作り、WITの契約に沿うJSONを返し、extension.json やルートマニフェストに登録してローカルで確認します。DBeaverやNavicatなどのデータベース用インポーターの例があり、WASMランタイム、権限、候補ファイル、拡張の表示、プレビュー画面の応答性といったホスト側の確認点も含みます。パスワードを含める設定が無効な場合に、平文の認証情報を返さない扱いも説明します。
新しいアプリの接続情報を取り込みたいときや、拡張が一覧に出ない、レコードが見つからない、プレビュー画面が止まるといった問題を調べるときに向いています。拡張のパッケージングやホスト連携を担当する開発者にも使えます。
Rust、WASMコンポーネント、onetcliの拡張形式を扱います。ホスト側の確認にはonetcliリポジトリが必要になる場合があります。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Build one connection importer as one WASM component. Keep parser logic in the extension repo, keep host capabilities generic in ../onetcli, and verify the whole path from WIT contract to local composite extension visibility.
Use DBeaver as the reference implementation, but avoid baking DBeaver-specific assumptions into the host.
When developing an importer for a new application, read the playbook first, then load the topic references needed by the app's storage format and output kind:
| Need | Reference |
|---|---|
| End-to-end workflow for a new application | New Application Playbook |
| Finding app config files across macOS, Windows, and Linux | Source Discovery |
| Mapping parser output to host protocol JSON | Protocol and Records |
Writing extension.json, root manifest entries, and local installs | Manifest and Packaging |
| Fixtures, tests, local host checks, and release verification | Testing and Troubleshooting |
| Database importer patterns such as DBeaver and Navicat Lite | Database Importers |
| SSH importer patterns such as OpenSSH config and known_hosts | ssh-connection-import |
| Area | Path |
|---|---|
| Extension workspace | onetcli-extensions |
| Importer crates | extensions/wasm/<tool>-importer |
| Shared extension WIT | wit/connection-import.wit |
| Marketplace entry | manifest.json with "kind": "composite" |
| Composite packaging | scripts/package-composite-extension.sh, scripts/verify-composite-package.sh, scripts/release-driver.mjs |
| Host repo | ../onetcli |
| Host WIT | crates/extension-api/wit/connection-import.wit |
| Host WASM runtime | crates/extension-wasm/src/connection_import.rs |
| Host manifest/provider | crates/extension-runtime/src/connection_import_provider.rs, crates/extension-runtime/src/extension/composite_provider.rs |
| Import UI | main/src/home/connection_import_* |
extensions/wasm/<tool>-importer, with src/component.rs for WIT bindings and src/<tool>.rs for parser logic.connection-import.wit vendored in this repo under wit/. Do not make extension crates import the host repo WIT directly. Add or keep drift checks against ../onetcli when the host repo is present.../../../wit in each importer crate:wit_bindgen::generate!({
path: "../../../wit",
world: "connection-importer",
});
descriptor, scan, and preview. Return JSON matching connection-import-protocol. Use structured parsers such as serde_json, plist, or product-specific parsers; avoid ad hoc string slicing for config formats.ImportOptions.include_passwords is false, never return plaintext passwords even when they exist in config files.extension.json. Include all product paths per platform, for example macOS ~/... and Windows %APPDATA%/....manifest.json as a composite extension. Composite importers install under ~/.config/one-hub/extensions/composite/<extension-id>.extension.json and wasm/<module>.wasm.When an importer fails in the host, fix the host generically:
crates/extension-wasm/src/connection_import.rs must add wasmtime_wasi::p2::add_to_linker_async, store WasiCtx, and implement WasiView with a ResourceTable. A wasm32-wasip2 component commonly imports wasi:io/poll@0.2.6.%APPDATA%/... and ~/... file permissions must validate in extension/manifest/security_rules.rs.connection_import_provider.rs must expand ~/ and %VAR%/... before reading files.CompositeExtensionProvider uses load_and_check; host version checks must use the app version, not the extension-runtime crate version.futures::executor::block_on from GPUI import actions/dialogs. Open the preview dialog in a loading state and run preview work through one_core::gpui_tokio::Tokio.main must enable extension-runtime with features = ["wasm-components"], including --no-default-features builds when the app should still expose WASM importers.Use a composite manifest shape like this:
{
"schema_version": 1,
"id": "com.onetcli.importer.<tool>",
"name": "<Tool> Importer",
"version": "0.1.0",
"engines": { "onetcli": ">=0.7.0" },
"runtime": {
"wasm": [{
"id": "<tool>-importer",
"module": "wasm/<tool>_importer_wasm.wasm",
"kind": "component"
}]
},
"permissions": [
"fs:read:~/Library/...",
"fs:read:%APPDATA%/..."
],
"contributes": {
"connectionImporters": [{
"id": "<tool>",
"runtimeId": "<tool>-importer",
"displayName": "<Tool>",
"outputKinds": ["database"],
"platforms": ["macos", "windows"],
"candidateFiles": [{
"id": "<tool>-macos-config",
"platform": "macos",
"path": "~/Library/..."
}]
}]
}
}
For database tools, fixtures from one product edition are not enough. Check every edition and platform path the importer claims in extension.json.
Navicat-specific rules:
~/Library/Application Support/PremiumSoft CyberTech/Navicat CC/Common/conn.plist.%APPDATA%/PremiumSoft CyberTech/Navicat CC/Common/conn.plist; declare it separately from the classic Navicat paths.plist::Value::from_reader(Cursor::new(bytes)) when binary support matters, not XML-only parsing.host, port, username, and defaultdatabase.serviceprovider = Default is not a database type. Infer the database type from stable path/key segments such as MySQL, PostgreSQL, Oracle, or SQL Server-specific containers.ssh_param, http_param, ssl_param, and compatibility_param.Add focused fixtures for each schema variant. At minimum, cover classic Navicat entries and Lite conn.plist entries with lowercase fields and path-derived database types.
For SSH-focused importers, use ssh-connection-import. Keep this skill for shared WASM packaging, manifests, host capability, and database importer behavior.
Extension repo:
rtk cargo test -p <tool>_importer_wasm
rtk cargo fmt --all --check
rtk cargo build --release -p <tool>_importer_wasm --target wasm32-wasip2
rtk node --test tests/scripts.test.mjs
rtk node scripts/release-driver.mjs <tool>-importer 0.1.0 --target universal --artifact-dir artifacts
Host repo:
rtk cargo test -p extension-wasm
rtk cargo test -p extension-runtime connection_import
rtk cargo test -p extension-runtime composite_provider_lists_connection_importer_with_windows_env_permission
rtk cargo check -p main
rtk cargo check -p main --no-default-features
rtk cargo build -p main
Add focused tests for every host ability that was missing. Useful examples include:
wasm32-wasip2 component that reproduces wasi:io/poll@0.2.6 linker failures.%APPDATA%/... permissions and candidate files.| Symptom | Likely cause | Fix |
|---|---|---|
component imports instance wasi:io/poll@0.2.6 | Connection-import runtime lacks WASI Preview2 linker | Add wasmtime_wasi::p2::add_to_linker_async plus WasiView state. |
| Local importer not visible | Manifest rejected by permissions or host version check | Validate %APPDATA% fs permissions and ensure app version is used for engines.onetcli. |
| Preview dialog freezes | UI thread is running WASM/filesystem work | Replace block_on with Tokio::spawn and loading-state entity updates. |
| Records import passwords when disabled | Parser ignores include_passwords | Ensure parser omits config and credential passwords unless enabled. |
| Component returns zero records | Candidate id, permission, or path mismatch | Check candidateFiles, fs:read:*, platform filtering, and host path expansion. |
| Navicat Lite returns zero records | Lite path/schema differs from classic Navicat | Add Navicat CC/Common/conn.plist, lowercase field handling, path-derived database type inference, and plist binary/XML parsing. |
| Source is visible but preview has no rows | Availability only proves manifest/candidate visibility | Check host logs for file read, WASM output, and connection import preview failed decode errors. |
unknown variant kind during preview | Importer emitted an internally tagged enum shape rejected by connection-import-protocol | Match the host serde JSON shape exactly; for SSH auth use ssh-connection-import. |
../onetcli at build time. Use vendored WIT and drift verification.Default as database types when the product stores type information in surrounding keys or path segments.まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
GPUIアプリの開発で、キー操作や画面レイアウト、状態管理、イベント、テストなどのAPIや実装パターンを調べ、必要な知識を参照できます。
GPUIアプリのUIをgpui-componentで組み立てる際に、コンポーネントの選び方や状態管理、テーマ、レイアウト、操作設計、実装規約を確認できます。
onetcliのIPCデータベースドライバーを、マニフェストやJSON-RPCの契約に沿って設計・実装・レビューし、メタデータ、DDL、入出力や配布まで扱うスキルです。
起動中のNavopデスクトップアプリが公開するリソースや操作を、CLIから確認して実行できます。利用可能なツールや権限を調べ、承認に沿って処理を進めます。
Navopの変更内容を中国語と英語でまとめ、CHANGELOG.mdを基準にGitHub ReleasesやR2のリリースノートを準備・確認するスキルです。
既存の実装やデザイン規則に沿って、GPUIの新しいUIコンポーネントを設計・実装し、関連ドキュメントとストーリーも用意するスキルです。