Hands
Hands Docs

HarmonyOS SDK

Feedback tickets and crash reporting for HarmonyOS (the @oranix/quiver ohpm package).

@botiverse/hands is the HarmonyOS SDK for Hands (ArkTS HAR): feedback tickets and crash reporting against a Hands server's public feedback endpoint. Mirrors the Android and iOS SDKs.

> Status: the package is being published to ohpm. Until it's live, > consume the @botiverse/hands@0.3.0 HAR from a local build of clients/ohos > in the Hands repo.

Install

ohpm install @botiverse/hands

Configure & start

All configuration is runtime parameters — the SDK ships nothing app-specific. Get the client key from your app's Settings tab in the Hands console (Sentry-DSN model: it identifies the app; rotate it from the console if it leaks).

import { Hands } from '@botiverse/hands';

// In UIAbility onCreate — pass the context to wire the internal launch
// logic (throttled device-analytics ping + pending-crash upload).
Hands.install({
  baseUrl: 'https://hands.build',
  appSlug: 'my-app',
  channel: 'main',          // Hands release-channel routing field
  clientKey: 'qk_…',
}, this.context);

Call it as early as possible (UIAbility onCreate). The app needs the ohos.permission.INTERNET permission declared in its module.json5. With the context passed, install handles device analytics and pending-crash upload for you — no separate calls needed.

Feedback

import { HandsFeedbackClient } from '@botiverse/hands';

const ticketId = await HandsFeedbackClient.submit(
  context,                    // common.UIAbilityContext
  'Feed does not refresh',    // message
  'bug',                      // 'feedback' | 'bug' | 'crash'
  [logFilePath],              // up to 3 files, 10 MB each
  [],                         // extras: Array<{ key, value }>
);

Device metadata (version, model, OS, ABI, locale, per-install device id) is attached automatically.

Crash reporting

Hands.install(config, context) captures uncaught ArkTS errors and uploads them as kind=crash tickets, grouped by signature in the console. Nothing else to wire.

Device analytics

Hands.install(config, context) also reports active-device and version-distribution metrics automatically (no PII — a random per-install device id and build/OS metadata). The ping is throttled and is not a true online heartbeat. No separate call.