Skip to main content

ClickUpClient

Struct ClickUpClient 

Source
pub struct ClickUpClient { /* private fields */ }

Implementations§

Source§

impl ClickUpClient

Source

pub fn new(list_id: impl Into<String>, token: SecretString) -> Self

Create a new ClickUp client.

Source

pub fn with_base_url( base_url: impl Into<String>, list_id: impl Into<String>, token: SecretString, ) -> Self

Create a new ClickUp client with a custom base URL (for testing).

Source

pub fn with_team_id(self, team_id: impl Into<String>) -> Self

Set team (workspace) ID — required for custom task ID resolution.

Trait Implementations§

Source§

impl IssueProvider for ClickUpClient

Source§

fn get_issues<'life0, 'async_trait>( &'life0 self, filter: IssueFilter, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Issue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get a list of issues with optional filters.
Source§

fn get_issue<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get a single issue by key (e.g., “gitlab#123”, “gh#456”).
Source§

fn create_issue<'life0, 'async_trait>( &'life0 self, input: CreateIssueInput, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Create a new issue.
Source§

fn update_issue<'life0, 'life1, 'async_trait>( &'life0 self, key: &'life1 str, input: UpdateIssueInput, ) -> Pin<Box<dyn Future<Output = Result<Issue>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Update an existing issue.
Source§

fn set_custom_fields<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, issue_key: &'life1 str, fields: &'life2 [Value], ) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Set custom fields on an issue. Each entry: {"id": "field_id", "value": <value>}. Default is no-op — override in providers that support custom fields (e.g., ClickUp).
Source§

fn get_comments<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Comment>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source§

fn add_comment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, issue_key: &'life1 str, body: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Comment>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Source§

fn upload_attachment<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, issue_key: &'life1 str, filename: &'life2 str, data: &'life3 [u8], ) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,

Upload a file attachment to an issue. Returns the download URL. Default returns ProviderUnsupported — override in providers that support attachments.
Source§

fn get_issue_attachments<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<AssetMeta>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

List attachments currently attached to an issue (body + comments). Read more
Source§

fn download_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, issue_key: &'life1 str, asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Download the raw bytes of an attachment belonging to an issue. Read more
Source§

fn asset_capabilities(&self) -> AssetCapabilities

Describe which asset operations this provider supports for each context. Used by the enricher to surface per-provider capabilities in tool schemas so agents can adapt their behaviour before making calls that would fail with ProviderUnsupported.
Source§

fn get_statuses<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<IssueStatus>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get available statuses for the issue tracker. Default returns ProviderUnsupported — override in providers that support statuses.
Link two issues together.
Remove a link between two issues.
Source§

fn get_issue_relations<'life0, 'life1, 'async_trait>( &'life0 self, issue_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<IssueRelations>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Get issue relations (parent, subtasks, linked issues).
Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging (e.g., “gitlab”, “github”).
Source§

fn get_users<'life0, 'async_trait>( &'life0 self, _options: GetUsersOptions, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<User>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get users from the issue tracker (Jira only).
Source§

fn delete_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _issue_key: &'life1 str, _asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Delete an attachment from an issue. Read more
Source§

fn get_structures<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Structure>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

List all available structures.
Source§

fn get_structure_forest<'life0, 'async_trait>( &'life0 self, _structure_id: u64, _options: GetForestOptions, ) -> Pin<Box<dyn Future<Output = Result<StructureForest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get a structure’s forest (hierarchy tree).
Source§

fn add_structure_rows<'life0, 'async_trait>( &'life0 self, _structure_id: u64, _input: AddStructureRowsInput, ) -> Pin<Box<dyn Future<Output = Result<ForestModifyResult, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Add rows to a structure’s forest.
Source§

fn move_structure_rows<'life0, 'async_trait>( &'life0 self, _structure_id: u64, _input: MoveStructureRowsInput, ) -> Pin<Box<dyn Future<Output = Result<ForestModifyResult, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Move rows within a structure’s forest.
Source§

fn remove_structure_row<'life0, 'async_trait>( &'life0 self, _structure_id: u64, _row_id: u64, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Remove a row from a structure’s forest.
Source§

fn get_structure_values<'life0, 'async_trait>( &'life0 self, _input: GetStructureValuesInput, ) -> Pin<Box<dyn Future<Output = Result<StructureValues, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Batch-read column values (including formulas) for structure rows.
Source§

fn get_structure_views<'life0, 'async_trait>( &'life0 self, _structure_id: u64, _view_id: Option<u64>, ) -> Pin<Box<dyn Future<Output = Result<Vec<StructureView>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get views for a structure, optionally a specific view by ID.
Source§

fn save_structure_view<'life0, 'async_trait>( &'life0 self, _input: SaveStructureViewInput, ) -> Pin<Box<dyn Future<Output = Result<StructureView, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Create or update a structure view.
Source§

fn create_structure<'life0, 'async_trait>( &'life0 self, _input: CreateStructureInput, ) -> Pin<Box<dyn Future<Output = Result<Structure, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Create a new structure.
Source§

fn get_structure_generators<'life0, 'async_trait>( &'life0 self, _structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<StructureGenerator>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

List generators configured on a structure.
Source§

fn add_structure_generator<'life0, 'async_trait>( &'life0 self, _input: AddStructureGeneratorInput, ) -> Pin<Box<dyn Future<Output = Result<StructureGenerator, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Attach a new generator to a structure.
Source§

fn sync_structure_generator<'life0, 'async_trait>( &'life0 self, _input: SyncStructureGeneratorInput, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Force a generator to refresh its produced rows.
Source§

fn delete_structure<'life0, 'async_trait>( &'life0 self, _structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Delete a structure permanently.
Source§

fn update_structure_automation<'life0, 'async_trait>( &'life0 self, _input: UpdateStructureAutomationInput, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Replace a structure’s automation configuration.
Source§

fn trigger_structure_automation<'life0, 'async_trait>( &'life0 self, _structure_id: u64, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Run a structure’s automation pass on demand.
Source§

fn list_project_versions<'life0, 'async_trait>( &'life0 self, _params: ListProjectVersionsParams, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<ProjectVersion>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

List versions (“releases” / fixVersion targets) for a project. Default: ProviderUnsupported.
Source§

fn upsert_project_version<'life0, 'async_trait>( &'life0 self, _input: UpsertProjectVersionInput, ) -> Pin<Box<dyn Future<Output = Result<ProjectVersion, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Create-or-update a project version, keyed by (project, name). Partial update: optional fields left as None are not touched. Default: ProviderUnsupported.
Source§

fn get_board_sprints<'life0, 'async_trait>( &'life0 self, _board_id: u64, _state: SprintState, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Sprint>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

List sprints visible on a board, optionally filtered by state.
Source§

fn assign_to_sprint<'life0, 'async_trait>( &'life0 self, _input: AssignToSprintInput, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Move one or more issues onto a sprint.
Source§

impl MergeRequestProvider for ClickUpClient

Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging.
Source§

fn get_merge_requests<'life0, 'async_trait>( &'life0 self, _filter: MrFilter, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<MergeRequest>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get a list of merge requests with optional filters.
Source§

fn get_merge_request<'life0, 'life1, 'async_trait>( &'life0 self, _key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get a single merge request by key (e.g., “mr#123”, “pr#456”).
Source§

fn get_discussions<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Discussion>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get discussions/comments for a merge request.
Source§

fn get_diffs<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<FileDiff>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Source§

fn add_comment<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _input: CreateCommentInput, ) -> Pin<Box<dyn Future<Output = Result<Comment, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Source§

fn create_merge_request<'life0, 'async_trait>( &'life0 self, _input: CreateMergeRequestInput, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Create a new merge request / pull request.
Source§

fn update_merge_request<'life0, 'life1, 'async_trait>( &'life0 self, _key: &'life1 str, _input: UpdateMergeRequestInput, ) -> Pin<Box<dyn Future<Output = Result<MergeRequest, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Update an existing merge request / pull request.
Source§

fn get_releases<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<ProviderResult<Release>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Get releases/tags for the repository.
Source§

fn get_mr_attachments<'life0, 'life1, 'async_trait>( &'life0 self, _mr_key: &'life1 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<AssetMeta>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

List attachments on a merge request (body + discussions).
Source§

fn download_mr_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Source§

fn delete_mr_attachment<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, _mr_key: &'life1 str, _asset_id: &'life2 str, ) -> Pin<Box<dyn Future<Output = Result<(), Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, Self: 'async_trait,

Source§

impl PipelineProvider for ClickUpClient

Source§

fn provider_name(&self) -> &'static str

Get the provider name for logging.
Source§

fn get_pipeline<'life0, 'async_trait>( &'life0 self, _input: GetPipelineInput, ) -> Pin<Box<dyn Future<Output = Result<PipelineInfo, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, Self: 'async_trait,

Source§

fn get_job_logs<'life0, 'life1, 'async_trait>( &'life0 self, _job_id: &'life1 str, _options: JobLogOptions, ) -> Pin<Box<dyn Future<Output = Result<JobLogOutput, Error>> + Send + 'async_trait>>
where 'life0: 'async_trait, 'life1: 'async_trait, Self: 'async_trait,

Get job logs with search, pagination, or smart extraction.
Source§

impl Provider for ClickUpClient

Source§

fn get_current_user<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = Result<User>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Get the current authenticated user.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more