Add basic cron scheduler to goose-server (#2621)

This commit is contained in:
Max Novich
2025-05-27 10:36:27 -07:00
committed by GitHub
parent c8e3f6ac69
commit c272b5df95
39 changed files with 3554 additions and 352 deletions
+40 -1
View File
@@ -1,7 +1,7 @@
// This file is auto-generated by @hey-api/openapi-ts
import type { Options as ClientOptions, TDataShape, Client } from '@hey-api/client-fetch';
import type { GetToolsData, GetToolsResponse, ReadAllConfigData, ReadAllConfigResponse, BackupConfigData, BackupConfigResponse, GetExtensionsData, GetExtensionsResponse, AddExtensionData, AddExtensionResponse, RemoveExtensionData, RemoveExtensionResponse, InitConfigData, InitConfigResponse, UpsertPermissionsData, UpsertPermissionsResponse, ProvidersData, ProvidersResponse2, ReadConfigData, RemoveConfigData, RemoveConfigResponse, UpsertConfigData, UpsertConfigResponse, ConfirmPermissionData, ManageContextData, ManageContextResponse, ListSessionsData, ListSessionsResponse, GetSessionHistoryData, GetSessionHistoryResponse } from './types.gen';
import type { GetToolsData, GetToolsResponse, ReadAllConfigData, ReadAllConfigResponse, BackupConfigData, BackupConfigResponse, GetExtensionsData, GetExtensionsResponse, AddExtensionData, AddExtensionResponse, RemoveExtensionData, RemoveExtensionResponse, InitConfigData, InitConfigResponse, UpsertPermissionsData, UpsertPermissionsResponse, ProvidersData, ProvidersResponse2, ReadConfigData, RemoveConfigData, RemoveConfigResponse, UpsertConfigData, UpsertConfigResponse, ConfirmPermissionData, ManageContextData, ManageContextResponse, CreateScheduleData, CreateScheduleResponse, DeleteScheduleData, DeleteScheduleResponse, ListSchedulesData, ListSchedulesResponse2, RunNowHandlerData, RunNowHandlerResponse, SessionsHandlerData, SessionsHandlerResponse, ListSessionsData, ListSessionsResponse, GetSessionHistoryData, GetSessionHistoryResponse } from './types.gen';
import { client as _heyApiClient } from './client.gen';
export type Options<TData extends TDataShape = TDataShape, ThrowOnError extends boolean = boolean> = ClientOptions<TData, ThrowOnError> & {
@@ -144,6 +144,45 @@ export const manageContext = <ThrowOnError extends boolean = false>(options: Opt
});
};
export const createSchedule = <ThrowOnError extends boolean = false>(options: Options<CreateScheduleData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).post<CreateScheduleResponse, unknown, ThrowOnError>({
url: '/schedule/create',
...options,
headers: {
'Content-Type': 'application/json',
...options?.headers
}
});
};
export const deleteSchedule = <ThrowOnError extends boolean = false>(options: Options<DeleteScheduleData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).delete<DeleteScheduleResponse, unknown, ThrowOnError>({
url: '/schedule/delete/{id}',
...options
});
};
export const listSchedules = <ThrowOnError extends boolean = false>(options?: Options<ListSchedulesData, ThrowOnError>) => {
return (options?.client ?? _heyApiClient).get<ListSchedulesResponse2, unknown, ThrowOnError>({
url: '/schedule/list',
...options
});
};
export const runNowHandler = <ThrowOnError extends boolean = false>(options: Options<RunNowHandlerData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).post<RunNowHandlerResponse, unknown, ThrowOnError>({
url: '/schedule/{id}/run_now',
...options
});
};
export const sessionsHandler = <ThrowOnError extends boolean = false>(options: Options<SessionsHandlerData, ThrowOnError>) => {
return (options.client ?? _heyApiClient).get<SessionsHandlerResponse, unknown, ThrowOnError>({
url: '/schedule/{id}/sessions',
...options
});
};
export const listSessions = <ThrowOnError extends boolean = false>(options?: Options<ListSessionsData, ThrowOnError>) => {
return (options?.client ?? _heyApiClient).get<ListSessionsResponse, unknown, ThrowOnError>({
url: '/sessions',
+184 -9
View File
@@ -62,6 +62,12 @@ export type ContextManageResponse = {
tokenCounts: Array<number>;
};
export type CreateScheduleRequest = {
cron: string;
id: string;
recipe_source: string;
};
export type EmbeddedResource = {
annotations?: Annotations | null;
resource: ResourceContents;
@@ -166,6 +172,10 @@ export type ImageContent = {
mimeType: string;
};
export type ListSchedulesResponse = {
jobs: Array<ScheduledJob>;
};
/**
* A message to or from an LLM
*/
@@ -228,14 +238,8 @@ export type PermissionLevel = 'always_allow' | 'ask_before' | 'never_allow';
export type PrincipalType = 'Extension' | 'Tool';
export type ProviderDetails = {
/**
* Indicates whether the provider is fully configured
*/
is_configured: boolean;
metadata: ProviderMetadata;
/**
* Unique identifier and name of the provider
*/
name: string;
};
@@ -294,6 +298,32 @@ export type ResourceContents = {
export type Role = 'user' | 'assistant';
export type RunNowResponse = {
session_id: string;
};
export type ScheduledJob = {
cron: string;
id: string;
last_run?: string | null;
source: string;
};
export type SessionDisplayInfo = {
accumulatedInputTokens?: number | null;
accumulatedOutputTokens?: number | null;
accumulatedTotalTokens?: number | null;
createdAt: string;
id: string;
inputTokens?: number | null;
messageCount: number;
name: string;
outputTokens?: number | null;
scheduleId?: string | null;
totalTokens?: number | null;
workingDir: string;
};
export type SessionHistoryResponse = {
/**
* List of messages in the session conversation
@@ -352,6 +382,10 @@ export type SessionMetadata = {
* The number of output tokens used in the session. Retrieved from the provider's last usage.
*/
output_tokens?: number | null;
/**
* ID of the schedule that triggered this session, if any
*/
schedule_id?: string | null;
/**
* The total number of tokens used in the session. Retrieved from the provider's last usage.
*/
@@ -362,6 +396,10 @@ export type SessionMetadata = {
working_dir: string;
};
export type SessionsQuery = {
limit?: number;
};
export type SummarizationRequested = {
msg: string;
};
@@ -464,9 +502,6 @@ export type ToolInfo = {
export type ToolPermission = {
permission: PermissionLevel;
/**
* Unique identifier and name of the tool, format <extension_name>__<tool_name>
*/
tool_name: string;
};
@@ -849,6 +884,146 @@ export type ManageContextResponses = {
export type ManageContextResponse = ManageContextResponses[keyof ManageContextResponses];
export type CreateScheduleData = {
body: CreateScheduleRequest;
path?: never;
query?: never;
url: '/schedule/create';
};
export type CreateScheduleErrors = {
/**
* Internal server error
*/
500: unknown;
};
export type CreateScheduleResponses = {
/**
* Scheduled job created successfully
*/
200: ScheduledJob;
};
export type CreateScheduleResponse = CreateScheduleResponses[keyof CreateScheduleResponses];
export type DeleteScheduleData = {
body?: never;
path: {
/**
* ID of the schedule to delete
*/
id: string;
};
query?: never;
url: '/schedule/delete/{id}';
};
export type DeleteScheduleErrors = {
/**
* Scheduled job not found
*/
404: unknown;
/**
* Internal server error
*/
500: unknown;
};
export type DeleteScheduleResponses = {
/**
* Scheduled job deleted successfully
*/
204: void;
};
export type DeleteScheduleResponse = DeleteScheduleResponses[keyof DeleteScheduleResponses];
export type ListSchedulesData = {
body?: never;
path?: never;
query?: never;
url: '/schedule/list';
};
export type ListSchedulesErrors = {
/**
* Internal server error
*/
500: unknown;
};
export type ListSchedulesResponses = {
/**
* A list of scheduled jobs
*/
200: ListSchedulesResponse;
};
export type ListSchedulesResponse2 = ListSchedulesResponses[keyof ListSchedulesResponses];
export type RunNowHandlerData = {
body?: never;
path: {
/**
* ID of the schedule to run
*/
id: string;
};
query?: never;
url: '/schedule/{id}/run_now';
};
export type RunNowHandlerErrors = {
/**
* Scheduled job not found
*/
404: unknown;
/**
* Internal server error when trying to run the job
*/
500: unknown;
};
export type RunNowHandlerResponses = {
/**
* Scheduled job triggered successfully, returns new session ID
*/
200: RunNowResponse;
};
export type RunNowHandlerResponse = RunNowHandlerResponses[keyof RunNowHandlerResponses];
export type SessionsHandlerData = {
body?: never;
path: {
/**
* ID of the schedule
*/
id: string;
};
query?: {
limit?: number;
};
url: '/schedule/{id}/sessions';
};
export type SessionsHandlerErrors = {
/**
* Internal server error
*/
500: unknown;
};
export type SessionsHandlerResponses = {
/**
* A list of session display info
*/
200: Array<SessionDisplayInfo>;
};
export type SessionsHandlerResponse = SessionsHandlerResponses[keyof SessionsHandlerResponses];
export type ListSessionsData = {
body?: never;
path?: never;