Skip to content

Vue 2.7 API ​

The Vue 2.7 adapter keeps the DOM-first runtime and exposes directives plus the shared DOM dock. Every signature below is the Vue 2.7 form.

This page lists only @plingjs/vue2 entry points, plus the shared-package types used with them.

API overview · Shared package API

PackagePeer dependenciesVersion
@plingjs/vue2vue ^2.7.00.1.0-alpha.2

The current package version is 0.1.0-alpha.2; stability is preview. This is a pre-1.0 alpha, so a minor release may still change the API.

Minimal example ​

ts
import Vue from "vue";
import { createPling } from "@plingjs/vue2";

const pling = createPling({ namespace: "todo" });
Vue.use(pling.plugin);
pling.dock();

Entry and lifecycle ​

Create the application runtime, install the adapter, and release its observers.

APIKindReference
createPlingFunctionReference
usePlingFunctionReference
pling.pluginPluginReference
VanillaPlingInterfaceReference
pling.destroyMethodReference

createPling ​

Creates the application-level Pling instance and returns the adapter-specific runtime object.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
createPling(options?: Vue2PlingOptions): Vue2Pling

Parameters and options

ParameterTypeRequiredDefaultDescription
ui.locale"en-US" | "zh-CN" | "auto" | stringNoen-USLanguage used by the built-in assistant UI. "auto" follows the browser language.
ui.theme"light" | "dark" | "auto" | PlingThemeOverridesNolightTheme for the built-in surfaces. An object can override tokens or choose a mode.
ui.theme.mode"light" | "dark" | "auto"NolightExplicit mode when the theme is an object. "auto" follows the operating-system preference.
ui.theme.tokensPartial<PlingThemeTokens>No—Overrides individual design tokens such as colours, radii, shadows, and font families. Keys not supplied keep the selected light or dark defaults.
ui.messagesPlingCatalogOverridesNo—Adds or replaces message catalog entries for one or more locales.
ui.messages.<locale>Partial<Record<PlingMessageKey, string>>No—Message overrides for one BCP 47 locale. Missing keys fall back to the built-in catalog.
ui.classNamesPlingClassNamesNo—Extra class names applied to the built-in chat, dock, launcher, and panel.
ui.classNames.dockstringNo—Extra class for the dock shell.
ui.classNames.panelstringNo—Extra class for the panel shell.
ui.classNames.launcherstringNo—Extra class for the launcher button.
ui.classNames.chatstringNo—Extra class for the chat surface.
onWarn(message: string) => voidNoconsole.warnReceives development warnings and declaration diagnostics. Defaults to console.warn.
registryRegistryNo—Uses an existing action registry instead of creating one. Do not combine it with shared.
sharedPlingPageNo—Joins a page runtime shared by several framework islands. registry and scopes are then owned by that page runtime.
namespacestringNo—Prefixes action and record ids for this adapter instance, for example add becomes todo/add.
scopesScopeControllerOptionsNo—Overrides visibility and hit-testing behavior. Intended for tests and unusual rendering hosts.
agentAgentSetupNo—Wires the model, hooks, confirmation, continuity, and observability used by built-in assistant surfaces.
deriveboolean | DeriveOptionsNofalseEnables optional L1 derivation from native clickable elements. Disabled by default; derived actions are marked as guesses.
presenceboolean | PresenceOptionsNotrueControls target highlighting while the agent operates the page.
revealSensitivebooleanNotrueRestores sensitive-value tokens to their real values in the rendered chat only. Model requests and storage keep the tokens.
defaultApproval"danger" | "kind"No"danger"Sets the declaration-time default when a tool omits confirm. "danger" asks only for danger actions; "kind" uses the risk level of every action.

Returns

The adapter instance. Vue 3 and React return PlingElement; Vue 2.7 and Vanilla return VanillaPling.

Defaults

  • No declaration means no action; derive is off by default.
  • Presence is on by default.
  • revealSensitive is true by default.

Example 1 · Vue 2.7 application setup

ts
import Vue from "vue";
import { createPling } from "@plingjs/vue2";

const pling = createPling({ namespace: "todo" });
Vue.use(pling.plugin);

new Vue({ render: (h) => h(App) }).$mount("#app");

Example 2 · Route model calls through a same-origin gateway

ts
const pling = createPling({
  agent: {
    config: {
      baseUrl: "/llm/v1",
      model: "gpt-4.1-mini",
    },
    trace: true,
  },
});

Canonical reference

Open the corresponding reference

usePling ​

Reads the nearest Pling instance from the framework tree.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
usePling(): Vue2Pling

Parameters

None.

Example 1 · Read the installed runtime

ts
const pling = usePling();

Canonical reference

Open the corresponding reference

pling.plugin ​

Installs Vue directives and the runtime injection key. React uses PlingProvider instead.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
Vue.use(pling.plugin)

Parameters

None.

Example 1 · Install Vue 2.7 directives

ts
Vue.use(pling.plugin);

Canonical reference

Open the corresponding reference

VanillaPling ​

The DOM-first runtime used by Vanilla JS and Vue 2.7. It exposes tool, action, record, scope, state, dock, derived, and destroy.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
interface Vue2Pling extends VanillaPling {
  plugin: { install(Vue: VueConstructor): void };
}

Parameters and options

ParameterTypeRequiredDefaultDescription
plugin{ install(Vue: VueConstructor): void }No—Installs the Vue 2.7 directives and $pling property.

Example 1 · Install the Vue 2.7 plugin

ts
Vue.use(pling.plugin);

Canonical reference

Open the corresponding reference

pling.destroy ​

Stops observers, derived actions, scopes, presence, UI subscriptions, and mounted assistant surfaces.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
pling.destroy(): void

Parameters

None.

Example 1 · Release the runtime

ts
beforeDestroy() {
  this.$pling.destroy();
}

Canonical reference

Open the corresponding reference

Page declarations ​

Declare actions, records, regions, state, feedback, task entrances, and sensitive values.

APIKindReference
Element actionDeclarationReference
Function-level actionDeclarationReference
RegionDeclarationReference
RecordDeclarationReference
Read-only stateDeclarationReference
Store stateDeclarationReference
sensitiveFunctionReference

Element action ​

Declares what a control does. The description is the model's only explanation; execution still goes through availability, approval, and expectations.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
v-tool="string | ToolOptions | readonly ToolOptions[]"

Parameters and options

ParameterTypeRequiredDefaultDescription
v-toolstring | ToolOptions | readonly ToolOptions[]Yes—A description shorthand or one or more declarations for the same element.

Example 1 · Vue 2.7 directive

vue
<button v-tool="{ id: 'add', desc: '添加一条待办', run: () => add() }">添加</button>

Canonical reference

Open the corresponding reference

Function-level action ​

Registers a business operation that has no dedicated DOM control.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
pling.action(options: ActionOptions): () => void

Parameters and options

ParameterTypeRequiredDefaultDescription
optionsActionOptionsYes—An action implemented in code rather than bound to a DOM control.

Example 1 · Register an action

ts
const unbind = pling.action({
  id: "clear_completed",
  desc: "清除所有已完成待办",
  run: () => clearCompleted(),
});

Canonical reference

Open the corresponding reference

Region ​

Declares a structural region and its reachability. Regions explain context; they are not permission boundaries.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
v-scope="string | ScopeOptions"

Parameters and options

ParameterTypeRequiredDefaultDescription
v-scopestring | ScopeOptionsYes—Region id or metadata object.

Example 1 · Describe a region

vue
<section v-scope="{ id: 'todos', label: '待办列表' }">...</section>

Canonical reference

Open the corresponding reference

Record ​

Gives one row a stable identity and a bounded set of readable fields. Records are read-only.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
v-record="RecordValue | null | undefined"

Parameters and options

ParameterTypeRequiredDefaultDescription
v-recordRecordValue | null | undefinedYes—The row object or an explicit record envelope.

Example 1 · Expose a row

vue
<li v-for="todo in todos" :key="todo.id" v-record="todo">...</li>

Canonical reference

Open the corresponding reference

Read-only state ​

Exposes a derived view of current UI state. State has no setter; writes must be declared as actions.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
useAgentState(key: string, source: StateSource, options?: AgentStateOptions | string): () => void

Parameters and options

ParameterTypeRequiredDefaultDescription
keystringYes—Stable state-view name used in page context and diagnostics.
sourceunknown | (() => unknown) | Ref<unknown> | Record<string, unknown>Yes—A value, ref, or read function. Prefer a function so the snapshot reflects current state.
optionsStateOptions | stringNo—A description object or a description string. Name the view and explain what it means.

Example 1 · Expose filters and counts

ts
useAgentState("todo", () => ({ filter: this.filter, total: this.todos.length }));

Canonical reference

Open the corresponding reference

Store state ​

Selects named fields from a Pinia or Vuex store. It never exposes the whole store.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
useAgentStoreState<S extends object>(key: string, store: S, read: AgentStoreRead<S>, options?: AgentStateOptions | string): () => void

Parameters and options

ParameterTypeRequiredDefaultDescription
keystringYes—Stable state-view name.
storeS extends objectYes—Pinia or Vuex store-like object.
readreadonly string[] | ((store: S) => unknown)Yes—An allowlist of fields or a selector that returns a bounded view.
optionsAgentStateOptions | stringNo—Description shown with the state in model context.

Example 1 · Expose a store allowlist

ts
const cart = this.$store.state.cart;
useAgentStoreState("cart", cart, ["count", "total"], "购物车件数与小计");

Canonical reference

Open the corresponding reference

sensitive ​

Marks a value for outbound masking, tokenization, or a hint while keeping the field name visible.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
sensitive<T>(value: T, options?: SensitivityMode | SensitiveOptions): SensitiveValue<T>

Parameters and options

ParameterTypeRequiredDefaultDescription
valueTYes—Value that enters page context and the model transcript.
options"masked" | "hidden" | SensitiveOptionsNo"masked"Controls whether the model sees a placeholder or no value. The real value remains in the browser.

Example 1 · Mask a phone number

ts
const phone = sensitive(customer.phone, "masked");

Canonical reference

Open the corresponding reference

Shared option types ​

The option shapes referenced by declarations. Adapter aliases are listed where the name differs.

APIKindReference
ToolOptionsTypeReference
ScopeOptionsTypeReference
RecordValueTypeReference
State optionsTypeReference
AgentSetupTypeReference
KindTypeReference
ParamDeclarationTypeReference
ExpectationTypeReference
HandoffStepTypeReference
FlowStepTypeReference
RegionRoleTypeReference
PlingUiOptionsTypeReference

ToolOptions ​

The action declaration shape shared by every adapter.

Imports

@plingjs/vue2 · @plingjs/core

Signature

ts
// Vue 2.7
type ToolOptions = AtomicToolOptions | ParamsToolOptions

Parameters and options

ParameterTypeRequiredDefaultDescription
descstringYes—Required model-facing description of what the control or operation does. This is the primary signal used to select the tool.
idstringNogenerated once per bindingStable action id. Omit only for one-off controls; list rows and flows should use stable ids.
kind"read" | "write" | "danger"NowriteRisk level used for approval and auditing. Omitted values are fail-closed and treated as write.
confirmboolean | "always"Noderived from kindOverrides approval derivation. false skips confirmation, true requires it, and always never offers a persistent allow option.
action"click" | "fill" | "select" | "press" | "hover"Noinferred from elementOverrides primitive inference. By default form inputs use fill and other elements use click.
keystringNoEnterKey used by an action whose primitive is press.
scopestringNonearest scopeExplicit region id. Omitted values inherit the nearest declared scope.
fidelity"high" | "auto" | "low"NoinferredDeclares how trustworthy the execution target is. Setting it stops automatic target relocation.
targetstringNo—CSS selector, scoped to the declared element, used to choose the concrete target.
autoTargetbooleanNotrueAutomatically locates a unique native control inside the declared element.
available() => boolean | string | undefinedNo—Business precondition checked before the action appears as available. A returned string is shown to the model as the reason.
expectExpectationNo—Success criterion checked after execution. Failure produces EXPECTATION_FAILED instead of a false success.
handoffboolean | string | HandoffOptionsNo—Hands the step to the user instead of simulating it. The boolean or string form supplies the reason.
paramsParamDeclarationConditional—Parameter schema for the parameterized form. When present, run receives the validated parameter object rather than a single primitive value.
run(valueOrArgs) => void | Promise<void>No—Injected implementation. Atomic actions receive the primitive value; parameterized actions receive the full argument object. Ignored when steps is present.
stepsreadonly FlowStep[]No—Turns the declaration into a single model-facing flow that executes registered action ids in order. Do not combine it with run.

Type shape

ts
interface ToolOptionsBase {
  desc: string;
  id?: string;
  kind?: "read" | "write" | "danger";
  confirm?: boolean | "always";
  action?: "click" | "fill" | "select" | "press" | "hover";
  key?: string;
  scope?: string;
  fidelity?: Fidelity;
  target?: string;
  autoTarget?: boolean;
  available?: () => boolean | string | undefined;
  expect?: Expectation;
  handoff?: boolean | string | { reason?; expect?; steps?; timeout? };
}

type ToolOptions =
  | { params?: undefined; run?: (value?: unknown) => void | Promise<void> }
  | { params: ParamDeclaration; run?: (args: Record<string, unknown>) => void | Promise<void> };

Example 1 · Parameterized declaration

js
const move = {
  id: "move_task",
  desc: "把待办移动到指定位置",
  params: [{ name: "position", label: "新位置", type: "number", min: 1 }],
  run: ({ position }) => moveTask(Number(position)),
};

Canonical reference

Open the corresponding reference

ScopeOptions ​

The region declaration shape. Vue 3 exposes the equivalent value as ScopeValue.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
interface ScopeOptions {
  id: string;
  label?: string;
  description?: string;
  role?: RegionRole;
  parent?: string;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
idstringYes—Stable region id. It is written to the DOM and inherited by descendant declarations.
labelstringNo—Short model-facing name, for example 待办列表.
descriptionstringNo—Explains what the region is for and when actions inside it apply.
roleRegionRoleNo—Structural role such as main, dialog, toolbar, or list. It affects reading order and context, not permissions.
parentstringNo—Explicit parent region id for portals, overlays, or detach-to-body cases.

Example 1 · Region metadata

ts
const scope = {
  id: "orders",
  label: "订单列表",
  description: "当前筛选结果,每行可以打开或删除",
  role: "list",
  parent: "main",
};

Canonical reference

Open the corresponding reference

RecordValue ​

A row value or a full record declaration with explicit id, label, and fields.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
type RecordValue =
  | object
  | {
      data: object;
      id?: string | number;
      label?: string;
      fields?: Record<string, unknown>;
    }

Parameters and options

ParameterTypeRequiredDefaultDescription
plain object.id | keystring | numberNo—Default primary key when the row itself is passed as a plain object.
envelope.dataobjectConditional—Row data wrapped in the explicit record envelope.
envelope.idstring | numberNo—Overrides the primary key when the field is not named id or key.
envelope.labelstringNo—Human- and model-readable row label.
envelope.fieldsRecord<string, unknown>No—Allowlist of fields visible to the model. Without it, all row fields except the primary key are exposed.

Example 1 · Explicit field allowlist

ts
const value = {
  data: order,
  id: order.code,
  label: `订单 ${order.code}`,
  fields: { customer: order.customer, total: order.total },
};

Canonical reference

Open the corresponding reference

State options ​

Optional description for a read-only state view.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
interface AgentStateOptions { description?: string }

Parameters and options

ParameterTypeRequiredDefaultDescription
descriptionstringNo—Explains the state view and its units or bounds. Describe a view, not the entire store.

Example 1 · Describe a bounded view

ts
{ description: "当前筛选项、总条数与未完成条数" }

Canonical reference

Open the corresponding reference

AgentSetup ​

Application-level runtime options: model overrides, hooks, gates, event handling, trace, and continuity.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
type AgentSetup = Omit<AgentRuntimeOptions, "config" | "registry" | "gate"> & {
  config?: AgentConfigOverrides;
  gate?: () => boolean;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
configAgentConfigOverridesNo—Partial model and runtime configuration. Omitted fields are read from VITE_AGENT_* environment variables or framework defaults.
llmLlmNo—Injects the model call function. Use it for a test model, a server proxy, or a non-OpenAI-compatible transport.
responseLocalestring | (() => string)No—Locale used when composing the response-language instruction. A function is re-read before each model request.
telemetryTelemetryNo—Collects token, duration, cost, and retry metrics for the current runtime.
traceboolean | AgentTraceOptionsNofalseKeeps a bounded in-memory trace of model requests for the read-only inspector. Disabled by default.
settle() => Promise<void>No—Replaces the page-settle wait used between actions. Most useful in deterministic tests and non-browser hosts.
hooksHookRegistryNo—Tool lifecycle hooks shared by every surface created from this application runtime.
onEvent(event: SessionEvent) => voidNo—Receives the same session event stream that powers the chat and activity views.
onApproval(pending: PendingApproval | null) => voidNo—Called when an approval request appears or clears. Use it to connect a custom approval UI.
onHandoff(pending: PendingHandoff | null) => voidNo—Called when a human-handoff request appears or clears.
policyConfirmGateNo—Replaces the default approval gate. When provided, the built-in gate and chat approval buttons are not used.
approvalTimeoutMsnumberNo60000Time to wait for a human approval before treating it as denied.
handoffTimeoutMsnumberNo300000Default time to wait for a human handoff. A tool-level handoff.timeout overrides it.
handoffHandoffGateNo—Replaces the built-in handoff queue with a custom channel.
idstringNo—Stable session id for multi-session hosts.
onLeaseLost() => voidNo—Called when another tab or host takes over the shared session lease.
continuityContinuitySettingNo—Enables bounded conversation continuity across full-page navigation. "tab" uses sessionStorage. Omit to disable it.
gate() => booleanNotrueReturns false to disable the built-in confirmation channel for this application. Defaults to enabled.

Example 1 · Application-level assistant setup

ts
const pling = createPling({
  agent: { config: { limits: { maxTurns: 12 } }, trace: true },
});

Canonical reference

Open the corresponding reference

Kind ​

The action risk level used by approval policy.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
type Kind = "read" | "write" | "danger"

Parameters and options

ParameterTypeRequiredDefaultDescription
read"read"No—No business state change. Visibility, navigation, and inspection belong here.
write"write"No—Changes business state but is not destructive or irreversible.
danger"danger"No—Destructive, irreversible, or high-impact. Approval defaults to stricter handling.

Example 1 · Choose a risk level

ts
pling.tool(deleteButton, { desc: "删除此订单", kind: "danger" });

Canonical reference

Open the corresponding reference

ParamDeclaration ​

Array shorthand or JSON Schema used to validate action arguments.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
type ParamDeclaration = readonly ToolParam[] | JsonSchema

Parameters and options

ParameterTypeRequiredDefaultDescription
[].namestringYes—Argument key received by run and visible to the model.
[].labelstringYes—Required explanation of the argument. It is the model's only semantic hint.
[].type"string" | "number" | "boolean"No"string"Argument type. Includes coercion from obvious string forms and rejects invalid values.
[].optionalbooleanNofalseMarks the argument optional. Arguments are required by default.
[].valuesreadonly (string | number)[]No—Closed static value set. Use it when the model must choose from known values.
[].options() => readonly ParamOption[]No—Dynamic value set, re-read for each snapshot and execution.
[].min | [].maxnumber | (() => number)No—Numeric bounds for number arguments, including dynamic bounds.
[].minLength | [].maxLengthnumberNo—String length bounds.
[].patternRegExp | stringNo—Regular-expression constraint for a string argument.
[].format"date"No—Semantic format validation. A date must be a real calendar date.
JSON Schema.type"object"Conditional"object"The direct JSON Schema form must describe an object.
JSON Schema.propertiesRecord<string, unknown>No—Property schemas for the direct JSON Schema form.
JSON Schema.requiredstring[]No—Required property names for the direct JSON Schema form.

Example 1 · Compact parameter declaration

ts
const params = [
  { name: "orderId", label: "订单号", pattern: /^SO-\d{4}$/ },
  { name: "note", label: "新备注", maxLength: 200 },
  { name: "notify", label: "是否通知客户", type: "boolean", optional: true },
];

Canonical reference

Open the corresponding reference

Expectation ​

A success condition checked after an action finishes.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
interface Expectation {
  desc?: string;
  check(): boolean | Promise<boolean>;
  timeout?: number;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
descstringNo—Human-readable statement of the expected outcome. It is included in success and failure receipts.
check() => boolean | Promise<boolean>Yes—Predicate evaluated after execution. Exceptions remain developer errors and are not swallowed.
timeoutnumberNo2000Maximum wait in milliseconds before reporting EXPECTATION_FAILED.

Example 1 · Verify a new row exists

ts
const expect = {
  desc: "新待办出现在列表中",
  check: () => todos.some((todo) => todo.text === "准备发布"),
  timeout: 3000,
};

Canonical reference

Open the corresponding reference

HandoffStep ​

One instruction shown to a person during human handoff.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
interface HandoffStep {
  text: string;
  highlight?: string;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
textstringYes—Instruction shown to the person who takes over.
highlightstringNo—Optional guide-target id or action id to highlight while the step is active.

Example 1 · Guide a human step

ts
const steps = [
  { text: "填写短信验证码", highlight: "captcha" },
  { text: "点击提交", highlight: "submit" },
];

Canonical reference

Open the corresponding reference

FlowStep ​

One step in a compound action. Flow steps are not a second execution channel.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
interface FlowStep {
  action: string;
  args?: Record<string, unknown> | ((params: Record<string, unknown>) => Record<string, unknown>);
  expect?: Expectation;
  desc?: string;
  optional?: boolean;
  idempotent?: boolean;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
actionstringYes—Registered action id to execute. It may contain placeholders.
argsRecord<string, unknown> | ((params) => Record<string, unknown>)No—Step arguments. Strings may reference flow parameters; a function receives the complete parameter object.
expectExpectationNo—Overrides the step action's own success criterion.
descstringNo—Human-readable step description used in progress and receipts.
optionalbooleanNofalseA failed optional step is skipped instead of aborting the flow.
idempotentbooleanNofalseAllows safe retry after an execution or expectation failure. Pre-execution failures are always retryable.

Example 1 · Reference a parameter in a step

ts
const steps = [
  { action: "edit@order:{{orderId}}", desc: "打开订单" },
  { action: "dialog_note", args: { text: "{{note}}" }, desc: "填写备注" },
  { action: "dialog_save", desc: "保存" },
];

Canonical reference

Open the corresponding reference

RegionRole ​

The structural role of a region.

Imports

@plingjs/core

Signature

ts
// Vue 2.7
type RegionRole =
  | "page"
  | "header"
  | "nav"
  | "main"
  | "aside"
  | "section"
  | "form"
  | "dialog"
  | "toolbar"
  | "list"
  | "footer"

Parameters and options

ParameterTypeRequiredDefaultDescription
role"page" | "header" | "nav" | "main" | "aside" | "section" | "form" | "dialog" | "toolbar" | "list" | "footer"Yes—Adds structural context for disambiguating actions with similar names. It does not grant or restrict permissions.

Example 1 · Disambiguate two confirm buttons

ts
pling.scope(dialog, { id: "edit_dialog", role: "dialog", label: "编辑订单" });
pling.scope(toolbar, { id: "bulk_toolbar", role: "toolbar", label: "批量操作" });

Canonical reference

Open the corresponding reference

PlingUiOptions ​

Locale, theme, message overrides, and class names for the shared assistant UI.

Imports

@plingjs/ui

Signature

ts
// Vue 2.7
interface PlingUiOptions {
  locale?: PlingLocale;
  theme?: PlingTheme;
  messages?: PlingCatalogOverrides;
  classNames?: PlingClassNames;
}

Parameters and options

ParameterTypeRequiredDefaultDescription
locale"en-US" | "zh-CN" | "auto" | stringNoen-USLanguage used by the built-in assistant UI. "auto" follows the browser language.
theme"light" | "dark" | "auto" | PlingThemeOverridesNolightTheme for the built-in surfaces. An object can override tokens or choose a mode.
theme.mode"light" | "dark" | "auto"NolightExplicit mode when the theme is an object. "auto" follows the operating-system preference.
theme.tokensPartial<PlingThemeTokens>No—Overrides individual design tokens such as colours, radii, shadows, and font families. Keys not supplied keep the selected light or dark defaults.
messagesPlingCatalogOverridesNo—Adds or replaces message catalog entries for one or more locales.
messages.<locale>Partial<Record<PlingMessageKey, string>>No—Message overrides for one BCP 47 locale. Missing keys fall back to the built-in catalog.
classNamesPlingClassNamesNo—Extra class names applied to the built-in chat, dock, launcher, and panel.
classNames.dockstringNo—Extra class for the dock shell.
classNames.panelstringNo—Extra class for the panel shell.
classNames.launcherstringNo—Extra class for the launcher button.
classNames.chatstringNo—Extra class for the chat surface.

Example 1 · Chinese UI with a token override

ts
const ui = {
  locale: "zh-CN",
  theme: { mode: "light", tokens: { colorPrimary: "#0b6bcb" } },
  classNames: { dock: "product-assistant" },
};

Canonical reference

Open the corresponding reference

Assistant surfaces ​

Mounted conversation and inspection surfaces. They render the shared runtime; they do not create a second agent.

APIKindReference
VanillaDockInterfaceReference

VanillaDock ​

The DOM dock controller returned by pling.dock(): element, runtime, open, close, toggle, isOpen, destroy.

Imports

@plingjs/vue2

Signature

ts
// Vue 2.7
pling.dock(options?: VanillaDockOptions): VanillaDock

Parameters and options

ParameterTypeRequiredDefaultDescription
titlestringNo—Assistant title.
placeholderstringNo—Composer placeholder.
emptyHintstringNo—Empty-state copy.
quickreadonly string[]No—Suggested prompts.
defaultOpenbooleanNofalseWhether the dock starts open.
configAgentConfigOverridesNo—Dock-level model overrides.
llmLlmNo—Injected model function.
hooksHookRegistryNo—Dock-level tool hooks.
gate() => booleanNo—Confirmation-channel switch.
registryRegistryNo—Registry to operate. Defaults to this Pling instance.
onSessionEvent(event: SessionEvent) => voidNo—Session event callback.
onOpenChange(open: boolean) => voidNo—Called when the dock opens or closes.
navigate(href: string) => voidNowindow.location.replacePost-task navigation implementation.
return.elementHTMLElementNo—Root element owned by the dock.
return.runtimeAgentRuntimeNo—Runtime driving the dock conversation.
return.open()voidNo—Opens the dock.
return.close()voidNo—Closes the dock while preserving its conversation.
return.toggle()voidNo—Toggles the open state.
return.isOpen()booleanNo—Returns the current open state.
return.destroy()voidNo—Removes the dock and releases its runtime resources.

Example 1 · Mount and control the native dock

ts
const dock = pling.dock({
  title: "待办助手",
  defaultOpen: false,
  onOpenChange: (open) => console.log(open),
});

// Later:
dock.open();
// On teardown:
dock.destroy();

Canonical reference

Open the corresponding reference

Version and compatibility ​

PackageVersionPeer dependencies
@plingjs/vue0.1.0-alpha.2vue ^3
@plingjs/react0.1.0-alpha.2react >=18
@plingjs/vue20.1.0-alpha.2vue ^2.7.0
@plingjs/vanilla0.1.0-alpha.2—
ItemValue
Introduced0.1.0-alpha.2
StabilityPre-1.0 alpha; a minor release may change the API

Machine-readable copy ​