package hostimport "context"// TaskInfo holds the current state of a task.type TaskInfo struct {// Status is the current task status: "pending", "running",// "completed", "failed", or "cancelled".Status string `json:"status"`// Message is the status/result message returned by the plugin callback.Message string `json:"message"`// Attempt is the current or last attempt number (1-based).Attempt int32 `json:"attempt"`}// QueueConfig holds configuration for a task queue.type QueueConfig struct {// Concurrency is the max number of parallel workers. Default: 1.// Capped by the plugin's manifest maxConcurrency.Concurrency int32 `json:"concurrency"`// MaxRetries is the number of times to retry a failed task. Default: 0.MaxRetries int32 `json:"maxRetries"`// BackoffMs is the initial backoff between retries in milliseconds.// Doubles each retry (exponential: backoffMs * 2^(attempt-1)). Default: 1000.BackoffMs int64 `json:"backoffMs"`// DelayMs is the minimum delay between starting consecutive tasks// in milliseconds. Useful for rate limiting. Default: 0.DelayMs int64 `json:"delayMs"`// RetentionMs is how long completed/failed/cancelled tasks are kept// in milliseconds. Default: 3600000 (1h). Min: 60000 (1m). Max: 604800000 (1w).RetentionMs int64 `json:"retentionMs"`}// TaskService provides persistent task queues for plugins.//// This service allows plugins to create named queues with configurable concurrency,// retry policies, and rate limiting. Tasks are persisted to SQLite and survive// server restarts. When a task is ready to execute, the host calls the plugin's// nd_task_execute callback function.////nd:hostservice name=Task permission=taskqueuetype TaskService interface {// CreateQueue creates a named task queue with the given configuration.// Zero-value fields in config use sensible defaults.// If a queue with the same name already exists, returns an error.// On startup, this also recovers any stale "running" tasks from a previous crash.//nd:hostfuncCreateQueue(ctx context.Context, name string, config QueueConfig) error// Enqueue adds a task to the named queue. Returns the task ID.// payload is opaque bytes passed back to the plugin on execution.//nd:hostfuncEnqueue(ctx context.Context, queueName string, payload []byte) (string, error)// Get returns the current state of a task including its status,// message, and attempt count.//nd:hostfuncGet(ctx context.Context, taskID string) (*TaskInfo, error)// Cancel cancels a pending task. Returns error if already// running, completed, or failed.//nd:hostfuncCancel(ctx context.Context, taskID string) error// ClearQueue removes all pending tasks from the named queue.// Running tasks are not affected. Returns the number of tasks removed.//nd:hostfuncClearQueue(ctx context.Context, queueName string) (int64, error)}