Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f1ba056
feat: pluginize native bridge capabilities
richerfu Aug 3, 2026
bee2961
feat: pluginize PR #63 capabilities into the pluginized bridge model
richerfu Aug 3, 2026
4f6e311
merge: resolve conflicts with main (4dd2248)
richerfu Aug 3, 2026
0b36717
chore: sync Cargo.lock after main merge
richerfu Aug 3, 2026
c3e61eb
merge: resolve conflicts with main (4dd2248)
richerfu Aug 3, 2026
184cf6d
feat: pluginize PR #65 native platform services (URL + file dialog)
richerfu Aug 3, 2026
8b2b927
refactor: ArkTS plugin type design, registration model and fixes
richerfu Aug 3, 2026
ee55373
merge: feat/pluginized-bridge into feat/pr63-pluginized
richerfu Aug 3, 2026
a7607a0
fix: register PR #63 plugin modules in demo build-profile
richerfu Aug 3, 2026
3a94816
chore: sync oh-package-lock with PR #63 plugin deps
richerfu Aug 3, 2026
c827dd1
fix: hvigor ArkTS build errors (API 12 surface)
richerfu Aug 3, 2026
d4999d1
chore: format code
richerfu Aug 3, 2026
1011641
Merge branch 'feat/pluginized-bridge' into feat/pr63-pluginized
richerfu Aug 3, 2026
f62c138
chore: format code
richerfu Aug 3, 2026
10ba969
chore: format code
richerfu Aug 3, 2026
9036ff3
feat(native-ability): add EagerPlugin and attach inbound event sink a…
richerfu Aug 4, 2026
a16cfc1
feat: pluginize the resource manager as ohos.resource
richerfu Aug 4, 2026
4250fa2
docs: add AGENTS.md workspace guide
richerfu Aug 4, 2026
bd66a48
fix(webview): release controller references safely
richerfu Aug 4, 2026
ee8e380
Merge branch 'fix/webview-object-ref-lifecycle' into feat/pluginized-…
richerfu Aug 4, 2026
ff122a2
Merge branch 'feat/pluginized-bridge' into feat/pr63-pluginized
richerfu Aug 4, 2026
2004b83
merge: sync main (#67 pluginized bridge + #69 webview fix) into feat/…
richerfu Aug 5, 2026
d2c9e3c
Merge remote-tracking branch 'origin/main' into feat/pr63-pluginized
richerfu Aug 11, 2026
7901893
refactor: make plugin contracts module agnostic
richerfu Aug 11, 2026
2c5f838
merge: adopt module-agnostic plugin contracts
richerfu Aug 11, 2026
3116913
refactor: harden and complete PR63 plugins
richerfu Aug 11, 2026
ea159dc
docs: remove obsolete plugin protocol versions
richerfu Aug 11, 2026
58340a5
merge: complete module-agnostic plugin documentation
richerfu Aug 11, 2026
6048614
feat: complete async window lifecycle controls
richerfu Aug 11, 2026
40d3d7b
merge: adopt complete window lifecycle controls
richerfu Aug 11, 2026
7030df1
merge: sync main into feat/pr63-pluginized
richerfu Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion .agents/skills/named-napi-contracts/references/contract-table.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@

| 插件 / action | request type → ArkTS value | response type → ArkTS value | 模式 / context |
|---|---|---|---|
| `ohos.app-control` / `terminate` | `ohos.app_control.TerminateRequest` → `{ code }` | `ohos.app_control.TerminateResponse` → `{ accepted }` | sync / `ability` |
| `ohos.app-control` / `terminate`、`restart`、`set-color-mode` | `ohos.app_control.TerminateRequest`/`RestartRequest`/`ColorModeRequest` | `ohos.app_control.TerminateResponse`/`RestartResponse`/`ColorModeResponse` → `{ accepted }` | sync / `ability` |
| `ohos.permission` / `request` | `ohos.permission.PermissionRequest` → `{ permissions }` | `ohos.permission.PermissionResponse` → `{ codes }` | async / `ability` |
| `ohos.window` / `get-avoid-area` | `ohos.window.AvoidAreaRequest` → `{ areaType }` | `ohos.window.AvoidAreaResponse` → `{ area: { visible, leftRect, topRect, rightRect, bottomRect } }` | async / `ui-context`;查询当前 component 所在窗口 |
| `ohos.window` / `create-os-window`、`set-decorations`、`set-background-color`、`set-blur`、`focus`、`set-focusable`、`move-to`、`resize`、`minimize`、`maximize`、`restore`、`recover`、`show`、`destroy-window`、`is-maximized`、`is-minimized` | `ohos.window.CreateRequest` / `WindowIdRequest` / `DecorationsRequest` / `ColorRequest` / `BlurRequest` / `MoveRequest` / `ResizeRequest` / `FocusableRequest` | `ohos.window.CreateResponse` → `{ windowId }` / `Acknowledgement` → `{ accepted }` / `StateResponse` → `{ value }` | async / `ui-context` |
Expand All @@ -26,6 +26,15 @@
| `ohos.webview` / `get-url`、`cookies-with-url` | `ohos.webview.ControllerRequest` → `{ id, url? }` | `ohos.webview.StringResponse` → `{ value }` | async / `ui-context` |
| `ohos.webview` / `evaluate-script` | `ohos.webview.ScriptRequest` → `{ id, script }` | `ohos.webview.ScriptResponse` → `{ result }` | async / `ui-context` |
| `ohos.resource` / `resource-manager-ready`(入站) | `ohos.resource.ResourceManagerRef`(ArkTS 直接传 `resourceManager` 对象) | `ohos.resource.ResourceManagerReadyResponse` → `{ accepted }` | 入站事件 / `ability` |
| `ohos.webview` / `set-bounds`、`set-cookie`、`snapshot`、`create-pdf`、`set-debugging-access`、`is-debugging-access` | `ohos.webview.BoundsRequest` / `CookieRequest` / `SnapshotRequest` / `PdfRequest`(`PdfConfig`) / `BoolRequest` | `ohos.webview.Acknowledgement` / `SnapshotResponse` → `{ rgba, width, height }` / `BoolResponse` → `{ value }` | async / `ui-context` |
| `ohos.clipboard` / `write-image` | `ohos.clipboard.ImageRequest` → `{ rgba, width, height }` | `ohos.clipboard.Acknowledgement` → `{ accepted }` | async / `[]` |
| `ohos.autostart` / `open-settings`、`is-enabled` | `ohos.autostart.Request` → `{ requested }` | `ohos.autostart.Acknowledgement` → `{ accepted }` / `ohos.autostart.StatusResponse` → `{ enabled, supported }` | async / `ability` |
| `ohos.updater` / `check`、`download-and-install` | `ohos.updater.CheckRequest` | `ohos.updater.CheckResponse` → `{ result }`(`CheckResult`)/ `Acknowledgement` | async / `ability` |
| `ohos.menu` / `set-menubar`、`popup`、`set-menubar-visible` | `ohos.menu.MenuBarRequest` / `PopupRequest` / `VisibilityRequest`(递归 `MenuItemData`) | `ohos.menu.Acknowledgement` → `{ accepted }` | async / `[]` |
| `ohos.menu` / 主线程事件 `menu-click` | `ohos.menu.ClickRequest` → `{ id, windowId }` | `ohos.menu.ClickResponse` → `{ accepted }` | scoped 主线程具名 N-API |
| `ohos.statusbar` / `add`、`remove`、`update-icon`、`update-menu`、`update-tips`、`predefined-action` | `ohos.statusbar.AddRequest`(`ItemData`)/ `IconRequest` / `MenuRequest` / `TipsRequest` / `ActionRequest` | `ohos.statusbar.Acknowledgement` → `{ accepted }` | async / `ability` |
| `ohos.statusbar` / 主线程事件 `icon-click`、`menu-click` | `ohos.statusbar.ClickRequest` → `{ clickType }` / `MenuClickRequest` → `{ menuCode }` | `ohos.statusbar.ClickResponse` → `{ accepted }` | scoped 主线程具名 N-API |
| `ohos.version` / `get-sdk-api-version`、`get-distribution-api-version`、`can-i-use`、`is-desktop-device` | `ohos.version.VersionRequest` → `{ syscap }` | `ohos.version.VersionResponse` → `{ value, result }` | sync / `[]` |

## 代码位置

Expand All @@ -35,6 +44,12 @@
| app-control | `crates/plugin-app-control/src/lib.rs` | `plugins/app-control/src/main/ets/AppControlPlugin.ets` |
| window | `crates/plugin-window/src/lib.rs` | `plugins/window/src/main/ets/WindowPlugin.ets` |
| webview | `crates/plugin-webview/src/lib.rs` | `plugins/webview/src/main/ets/WebviewPlugin.ets` |
| clipboard | `crates/plugin-clipboard/src/lib.rs` | `plugins/clipboard/src/main/ets/ClipboardPlugin.ets` |
| autostart | `crates/plugin-autostart/src/lib.rs` | `plugins/autostart/src/main/ets/AutostartPlugin.ets` |
| updater | `crates/plugin-updater/src/lib.rs` | `plugins/updater/src/main/ets/UpdaterPlugin.ets` |
| menu | `crates/plugin-menu/src/lib.rs` | `plugins/menu/src/main/ets/MenuPlugin.ets` |
| statusbar | `crates/plugin-statusbar/src/lib.rs` | `plugins/statusbar/src/main/ets/StatusBarPlugin.ets` |
| version | `crates/plugin-version/src/lib.rs`(core `crates/ability/src/version.rs` 提供 init/getters) | `plugins/version/src/main/ets/VersionPlugin.ets` |
| resource | `crates/plugin-resource/src/lib.rs` | `plugins/resource/src/main/ets/ResourcePlugin.ets` |
| webview 自定义协议 | `crates/plugin-webview/src/protocol.rs` | —(纯 native,ArkTS 只触发 `before-engine-init`/`engine-initialized` 事件) |
| webview JS proxy | `crates/plugin-webview/src/js_proxy.rs` | —(纯 native,依赖 `controller-attached` 事件) |
Expand Down
8 changes: 7 additions & 1 deletion .oxlintrc.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,13 @@
"arkts/system-api-version": [
"error",
{
"minApiVersion": 12
"minApiVersion": 12,
// AutostartPlugin guards this API-21 call with deviceInfo.sdkApiVersion.
"apis": {
"@kit.AbilityKit.autoStartupManager.getAutoStartupStatusForSelf": 12,
// The API 24 SDK declaration retains @since 9 for this overload.
"@ohos.pasteboard.createData": 9
}
}
]
}
Expand Down
8 changes: 7 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,12 +56,18 @@ Rust plugin facades (BridgePlugin) + application business code (run_loop)
| `crates/ability` | Core: lifecycle/`run_loop`, bridge transport (`impl_bridge_napi_type!`, `BridgeNapiType`, `BridgePlugin`, `BridgeRuntime`, `BridgeHost`), ArkUI/xcomponent/ime binding re-exports |
| `crates/derive` | `#[ability]` entry macro |
| `crates/plugin-permission` | `ohos.permission` — async permission request |
| `crates/plugin-app-control` | `ohos.app-control` — sync main-thread terminate |
| `crates/plugin-app-control` | `ohos.app-control` — sync terminate/restart/color mode |
| `crates/plugin-autostart` | `ohos.autostart` — async autostart status/settings |
| `crates/plugin-window` | `ohos.window` — async avoid-area and multi-window operations |
| `crates/plugin-webview` | `ohos.webview` — WebView create, controller, custom protocol, JS proxy, callbacks |
| `crates/plugin-files` | `ohos.files` — file dialogs (open/save/folder) |
| `crates/plugin-url` | `ohos.url` — `context.openLink` |
| `crates/plugin-resource` | `ohos.resource` — inbound-only: ArkTS pushes `resourceManager` from Ability-scoped `onInstall`; no outbound actions |
| `crates/plugin-clipboard` | `ohos.clipboard` — async image clipboard write |
| `crates/plugin-updater` | `ohos.updater` — async application update check/install |
| `crates/plugin-menu` | `ohos.menu` — async menu state plus typed click callbacks |
| `crates/plugin-statusbar` | `ohos.statusbar` — async desktop status-bar operations and callbacks |
| `crates/plugin-version` | `ohos.version` — sync platform version/capability queries |

Every `crates/plugin-<name>` is paired with an ArkTS HAR in `plugins/<name>` that exports the matching `BridgePluginFactory`; core (`crates/ability`) never imports any `plugin-*` crate.

Expand Down
Loading
Loading