pub struct ClientHint {
pub name: String,
pub description: Option<String>,
pub category: String,
pub category_label: Option<String>,
pub category_icon: Option<String>,
pub category_order: Option<i64>,
pub icon: Option<String>,
pub visible_to: Option<Target>,
}Expand description
Manifest sub-section (#291): marks a job as user-invokable
from the Client App and carries how it presents to the end user.
Parallel to InventoryHint / CheckHint / EmitConfig —
the block’s presence is the opt-in (no separate boolean), and its
required fields (name, category) are enforced by serde at
parse time, so a half-filled catalog entry fails
kanade job create instead of rendering a nameless / tab-less row.
The agent maps this 1:1 into the KLP
UserInvokableJob wire shape
that jobs.list returns; the Client App renders one row per job in
the tab named by category.
Fields§
§name: StringEnd-user-facing title for the job row. The operator-internal
Manifest::id slug is rarely what an end user should read, so
this is required (and validated non-empty by
Manifest::validate). Maps to UserInvokableJob::display_name.
description: Option<String>Optional one-line subtitle under name in the Client App.
Distinct from the operator-facing top-level
Manifest::description — this one is written for the end
user. Maps to UserInvokableJob::display_description.
category: StringWhich Client App tab the job lives in — a free-form category
key (#792). The Client App renders one tab per distinct key.
Well-known keys (software_update, troubleshoot, catalog)
carry built-in tab labels/icons; any other key defines a new tab
(style it with category_label / category_icon). Required and
validated non-empty — without it the agent can’t place the job.
Note: the software_update key also drives the agent’s
maintenance / auto-reboot grouping.
category_label: Option<String>Optional display name for the category’s TAB. Set it on (at least
one of) a custom category’s jobs to name the tab; None ⇒ a
built-in default for a well-known key, else the key itself.
category_icon: Option<String>Optional icon for the category’s TAB (lucide name or data: URL).
None ⇒ Client App default for the key.
category_order: Option<i64>Optional sort order for the TAB; lower sorts first. None ⇒
default (well-known keys keep their familiar order; custom keys
sort after, then by label).
icon: Option<String>Optional icon hint for the job ROW — a lucide-react icon name
or a data: URL. None ⇒ the Client App falls back to the
category’s icon. Surfaced verbatim in jobs.list[].icon.
visible_to: Option<Target>Optional visibility scope for the end-user Client App (#816).
None ⇒ visible to every PC (current behavior). When set, only
agents whose pc_id / group membership match the Target list
the job in jobs.list and may run it via KLP jobs.execute.
This gates the END-USER surface ONLY. Operators are unaffected:
POST /api/exec/{job_id} (SPA / kanade exec) is a separate path
that never consults client:, so an operator can still run the
job on any PC regardless of visible_to. Reuses the schedule
Target shape (all / groups / pcs); a present-but-empty
target is rejected by Manifest::validate.
Trait Implementations§
Source§impl Clone for ClientHint
impl Clone for ClientHint
Source§fn clone(&self) -> ClientHint
fn clone(&self) -> ClientHint
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ClientHint
impl Debug for ClientHint
Source§impl<'de> Deserialize<'de> for ClientHint
impl<'de> Deserialize<'de> for ClientHint
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for ClientHint
impl JsonSchema for ClientHint
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn inline_schema() -> bool
fn inline_schema() -> bool
$ref keyword. Read more