mirror of
https://github.com/memohai/Memoh.git
synced 2026-04-25 07:00:48 +09:00
e4aca0db13
Expose a dedicated container metrics endpoint and surface current CPU, memory, and root filesystem usage in the bot container view. This gives operators a quick health snapshot while degrading cleanly on unsupported backends.
9383 lines
233 KiB
YAML
9383 lines
233 KiB
YAML
definitions:
|
|
accounts.Account:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
email:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
last_login_at:
|
|
type: string
|
|
role:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
accounts.CreateAccountRequest:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
email:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
password:
|
|
type: string
|
|
role:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
accounts.ListAccountsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/accounts.Account'
|
|
type: array
|
|
type: object
|
|
accounts.ResetPasswordRequest:
|
|
properties:
|
|
new_password:
|
|
type: string
|
|
type: object
|
|
accounts.UpdateAccountRequest:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
role:
|
|
type: string
|
|
type: object
|
|
accounts.UpdatePasswordRequest:
|
|
properties:
|
|
current_password:
|
|
type: string
|
|
new_password:
|
|
type: string
|
|
type: object
|
|
accounts.UpdateProfileRequest:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
type: object
|
|
acl.ChannelIdentityCandidate:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
channel:
|
|
type: string
|
|
channel_subject_id:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
id:
|
|
type: string
|
|
linked_avatar_url:
|
|
type: string
|
|
linked_display_name:
|
|
type: string
|
|
linked_user_id:
|
|
type: string
|
|
linked_username:
|
|
type: string
|
|
type: object
|
|
acl.ChannelIdentityCandidateListResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/acl.ChannelIdentityCandidate'
|
|
type: array
|
|
type: object
|
|
acl.CreateRuleRequest:
|
|
properties:
|
|
channel_identity_id:
|
|
type: string
|
|
description:
|
|
type: string
|
|
effect:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
priority:
|
|
type: integer
|
|
source_scope:
|
|
$ref: '#/definitions/acl.SourceScope'
|
|
subject_channel_type:
|
|
type: string
|
|
subject_kind:
|
|
type: string
|
|
type: object
|
|
acl.DefaultEffectResponse:
|
|
properties:
|
|
default_effect:
|
|
type: string
|
|
type: object
|
|
acl.ListRulesResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/acl.Rule'
|
|
type: array
|
|
type: object
|
|
acl.ObservedConversationCandidate:
|
|
properties:
|
|
channel:
|
|
type: string
|
|
conversation_id:
|
|
type: string
|
|
conversation_name:
|
|
type: string
|
|
conversation_type:
|
|
type: string
|
|
last_observed_at:
|
|
type: string
|
|
route_id:
|
|
type: string
|
|
thread_id:
|
|
type: string
|
|
type: object
|
|
acl.ObservedConversationCandidateListResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/acl.ObservedConversationCandidate'
|
|
type: array
|
|
type: object
|
|
acl.ReorderItem:
|
|
properties:
|
|
id:
|
|
type: string
|
|
priority:
|
|
type: integer
|
|
type: object
|
|
acl.ReorderRequest:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/acl.ReorderItem'
|
|
type: array
|
|
type: object
|
|
acl.Rule:
|
|
properties:
|
|
action:
|
|
type: string
|
|
bot_id:
|
|
type: string
|
|
channel_identity_avatar_url:
|
|
type: string
|
|
channel_identity_display_name:
|
|
type: string
|
|
channel_identity_id:
|
|
type: string
|
|
channel_subject_id:
|
|
type: string
|
|
channel_type:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
description:
|
|
type: string
|
|
effect:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
id:
|
|
type: string
|
|
linked_user_avatar_url:
|
|
type: string
|
|
linked_user_display_name:
|
|
type: string
|
|
linked_user_id:
|
|
type: string
|
|
linked_user_username:
|
|
type: string
|
|
priority:
|
|
type: integer
|
|
source_scope:
|
|
$ref: '#/definitions/acl.SourceScope'
|
|
subject_channel_type:
|
|
type: string
|
|
subject_kind:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
acl.SourceScope:
|
|
properties:
|
|
conversation_id:
|
|
type: string
|
|
conversation_type:
|
|
type: string
|
|
thread_id:
|
|
type: string
|
|
type: object
|
|
acl.UpdateRuleRequest:
|
|
properties:
|
|
channel_identity_id:
|
|
type: string
|
|
description:
|
|
type: string
|
|
effect:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
priority:
|
|
type: integer
|
|
source_scope:
|
|
$ref: '#/definitions/acl.SourceScope'
|
|
subject_channel_type:
|
|
type: string
|
|
subject_kind:
|
|
type: string
|
|
type: object
|
|
adapters.CDFPoint:
|
|
properties:
|
|
cumulative:
|
|
description: cumulative weight fraction [0.0, 1.0]
|
|
type: number
|
|
k:
|
|
description: rank position (1-based, sorted by value desc)
|
|
type: integer
|
|
type: object
|
|
adapters.CompactResult:
|
|
properties:
|
|
after_count:
|
|
type: integer
|
|
before_count:
|
|
type: integer
|
|
ratio:
|
|
type: number
|
|
results:
|
|
items:
|
|
$ref: '#/definitions/adapters.MemoryItem'
|
|
type: array
|
|
type: object
|
|
adapters.DeleteResponse:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
adapters.HealthStatus:
|
|
properties:
|
|
error:
|
|
type: string
|
|
ok:
|
|
type: boolean
|
|
type: object
|
|
adapters.MemoryItem:
|
|
properties:
|
|
agent_id:
|
|
type: string
|
|
bot_id:
|
|
type: string
|
|
cdf_curve:
|
|
items:
|
|
$ref: '#/definitions/adapters.CDFPoint'
|
|
type: array
|
|
created_at:
|
|
type: string
|
|
hash:
|
|
type: string
|
|
id:
|
|
type: string
|
|
memory:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
run_id:
|
|
type: string
|
|
score:
|
|
type: number
|
|
top_k_buckets:
|
|
items:
|
|
$ref: '#/definitions/adapters.TopKBucket'
|
|
type: array
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
adapters.MemoryStatusResponse:
|
|
properties:
|
|
can_manual_sync:
|
|
type: boolean
|
|
encoder:
|
|
$ref: '#/definitions/adapters.HealthStatus'
|
|
indexed_count:
|
|
type: integer
|
|
markdown_file_count:
|
|
type: integer
|
|
memory_mode:
|
|
type: string
|
|
overview_path:
|
|
type: string
|
|
provider_type:
|
|
type: string
|
|
qdrant:
|
|
$ref: '#/definitions/adapters.HealthStatus'
|
|
qdrant_collection:
|
|
type: string
|
|
source_count:
|
|
type: integer
|
|
source_dir:
|
|
type: string
|
|
type: object
|
|
adapters.Message:
|
|
properties:
|
|
content:
|
|
type: string
|
|
role:
|
|
type: string
|
|
type: object
|
|
adapters.ProviderCollectionStatus:
|
|
properties:
|
|
exists:
|
|
type: boolean
|
|
name:
|
|
type: string
|
|
points:
|
|
type: integer
|
|
qdrant:
|
|
$ref: '#/definitions/adapters.HealthStatus'
|
|
type: object
|
|
adapters.ProviderConfigSchema:
|
|
properties:
|
|
fields:
|
|
additionalProperties:
|
|
$ref: '#/definitions/adapters.ProviderFieldSchema'
|
|
type: object
|
|
type: object
|
|
adapters.ProviderCreateRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
provider:
|
|
$ref: '#/definitions/adapters.ProviderType'
|
|
type: object
|
|
adapters.ProviderFieldSchema:
|
|
properties:
|
|
description:
|
|
type: string
|
|
example: {}
|
|
required:
|
|
type: boolean
|
|
secret:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
type:
|
|
type: string
|
|
type: object
|
|
adapters.ProviderGetResponse:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_default:
|
|
type: boolean
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
adapters.ProviderMeta:
|
|
properties:
|
|
config_schema:
|
|
$ref: '#/definitions/adapters.ProviderConfigSchema'
|
|
display_name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
type: object
|
|
adapters.ProviderStatusResponse:
|
|
properties:
|
|
collections:
|
|
items:
|
|
$ref: '#/definitions/adapters.ProviderCollectionStatus'
|
|
type: array
|
|
embedding_model_id:
|
|
type: string
|
|
memory_mode:
|
|
type: string
|
|
provider_type:
|
|
type: string
|
|
type: object
|
|
adapters.ProviderType:
|
|
enum:
|
|
- builtin
|
|
- mem0
|
|
- openviking
|
|
type: string
|
|
x-enum-varnames:
|
|
- ProviderBuiltin
|
|
- ProviderMem0
|
|
- ProviderOpenViking
|
|
adapters.ProviderUpdateRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
type: object
|
|
adapters.RebuildResult:
|
|
properties:
|
|
fs_count:
|
|
type: integer
|
|
missing_count:
|
|
type: integer
|
|
restored_count:
|
|
type: integer
|
|
storage_count:
|
|
type: integer
|
|
type: object
|
|
adapters.SearchResponse:
|
|
properties:
|
|
relations:
|
|
items: {}
|
|
type: array
|
|
results:
|
|
items:
|
|
$ref: '#/definitions/adapters.MemoryItem'
|
|
type: array
|
|
type: object
|
|
adapters.TopKBucket:
|
|
properties:
|
|
index:
|
|
description: sparse dimension index (term hash)
|
|
type: integer
|
|
value:
|
|
description: weight (term frequency)
|
|
type: number
|
|
type: object
|
|
adapters.UsageResponse:
|
|
properties:
|
|
avg_text_bytes:
|
|
type: integer
|
|
count:
|
|
type: integer
|
|
estimated_storage_bytes:
|
|
type: integer
|
|
total_text_bytes:
|
|
type: integer
|
|
type: object
|
|
audio.ConfigSchema:
|
|
properties:
|
|
fields:
|
|
items:
|
|
$ref: '#/definitions/audio.FieldSchema'
|
|
type: array
|
|
type: object
|
|
audio.FieldSchema:
|
|
properties:
|
|
advanced:
|
|
type: boolean
|
|
description:
|
|
type: string
|
|
enum:
|
|
items:
|
|
type: string
|
|
type: array
|
|
example: {}
|
|
key:
|
|
type: string
|
|
order:
|
|
type: integer
|
|
required:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
type:
|
|
type: string
|
|
type: object
|
|
audio.ImportModelsResponse:
|
|
properties:
|
|
created:
|
|
type: integer
|
|
models:
|
|
items:
|
|
type: string
|
|
type: array
|
|
skipped:
|
|
type: integer
|
|
type: object
|
|
audio.ModelCapabilities:
|
|
properties:
|
|
config_schema:
|
|
$ref: '#/definitions/audio.ConfigSchema'
|
|
formats:
|
|
items:
|
|
type: string
|
|
type: array
|
|
metadata:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
pitch:
|
|
$ref: '#/definitions/audio.ParamConstraint'
|
|
speed:
|
|
$ref: '#/definitions/audio.ParamConstraint'
|
|
voices:
|
|
items:
|
|
$ref: '#/definitions/audio.VoiceInfo'
|
|
type: array
|
|
type: object
|
|
audio.ModelInfo:
|
|
properties:
|
|
capabilities:
|
|
$ref: '#/definitions/audio.ModelCapabilities'
|
|
config_schema:
|
|
$ref: '#/definitions/audio.ConfigSchema'
|
|
description:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
template_only:
|
|
type: boolean
|
|
type: object
|
|
audio.ParamConstraint:
|
|
properties:
|
|
default:
|
|
type: number
|
|
max:
|
|
type: number
|
|
min:
|
|
type: number
|
|
options:
|
|
items:
|
|
type: number
|
|
type: array
|
|
type: object
|
|
audio.ProviderMetaResponse:
|
|
properties:
|
|
config_schema:
|
|
$ref: '#/definitions/audio.ConfigSchema'
|
|
default_model:
|
|
type: string
|
|
default_synthesis_model:
|
|
type: string
|
|
default_transcription_model:
|
|
type: string
|
|
description:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
models:
|
|
items:
|
|
$ref: '#/definitions/audio.ModelInfo'
|
|
type: array
|
|
provider:
|
|
type: string
|
|
supports_synthesis_list:
|
|
type: boolean
|
|
supports_transcription_list:
|
|
type: boolean
|
|
synthesis_models:
|
|
items:
|
|
$ref: '#/definitions/audio.ModelInfo'
|
|
type: array
|
|
transcription_models:
|
|
items:
|
|
$ref: '#/definitions/audio.ModelInfo'
|
|
type: array
|
|
type: object
|
|
audio.SpeechModelResponse:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
model_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
provider_type:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
audio.SpeechProviderResponse:
|
|
properties:
|
|
client_type:
|
|
type: string
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
enable:
|
|
type: boolean
|
|
icon:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
audio.TestSynthesizeRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
text:
|
|
type: string
|
|
type: object
|
|
audio.TestTranscriptionResponse:
|
|
properties:
|
|
duration_seconds:
|
|
type: number
|
|
language:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
text:
|
|
type: string
|
|
words:
|
|
items:
|
|
$ref: '#/definitions/audio.TranscriptionWord'
|
|
type: array
|
|
type: object
|
|
audio.TranscriptionModelResponse:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
model_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
provider_type:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
audio.TranscriptionWord:
|
|
properties:
|
|
end:
|
|
type: number
|
|
speaker_id:
|
|
type: string
|
|
start:
|
|
type: number
|
|
text:
|
|
type: string
|
|
type: object
|
|
audio.UpdateSpeechModelRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
type: object
|
|
audio.VoiceInfo:
|
|
properties:
|
|
id:
|
|
type: string
|
|
lang:
|
|
type: string
|
|
name:
|
|
type: string
|
|
type: object
|
|
bots.Bot:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
check_issue_count:
|
|
type: integer
|
|
check_state:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
owner_user_id:
|
|
type: string
|
|
status:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
bots.BotCheck:
|
|
properties:
|
|
detail:
|
|
type: string
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
status:
|
|
type: string
|
|
subtitle:
|
|
type: string
|
|
summary:
|
|
type: string
|
|
title_key:
|
|
type: string
|
|
type:
|
|
type: string
|
|
type: object
|
|
bots.CreateBotRequest:
|
|
properties:
|
|
acl_preset:
|
|
type: string
|
|
avatar_url:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
timezone:
|
|
type: string
|
|
type: object
|
|
bots.ListBotsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/bots.Bot'
|
|
type: array
|
|
type: object
|
|
bots.ListChecksResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/bots.BotCheck'
|
|
type: array
|
|
type: object
|
|
bots.TransferBotRequest:
|
|
properties:
|
|
owner_user_id:
|
|
type: string
|
|
type: object
|
|
bots.UpdateBotRequest:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
timezone:
|
|
type: string
|
|
type: object
|
|
browsercontexts.BrowserContext:
|
|
properties:
|
|
config:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
browsercontexts.CreateRequest:
|
|
properties:
|
|
config:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
name:
|
|
type: string
|
|
type: object
|
|
browsercontexts.UpdateRequest:
|
|
properties:
|
|
config:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
name:
|
|
type: string
|
|
type: object
|
|
channel.Action:
|
|
properties:
|
|
label:
|
|
type: string
|
|
type:
|
|
type: string
|
|
url:
|
|
type: string
|
|
value:
|
|
type: string
|
|
type: object
|
|
channel.Attachment:
|
|
properties:
|
|
base64:
|
|
description: data URL for agent delivery
|
|
type: string
|
|
caption:
|
|
type: string
|
|
content_hash:
|
|
type: string
|
|
duration_ms:
|
|
type: integer
|
|
height:
|
|
type: integer
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
mime:
|
|
type: string
|
|
name:
|
|
type: string
|
|
platform_key:
|
|
type: string
|
|
size:
|
|
type: integer
|
|
source_platform:
|
|
type: string
|
|
thumbnail_url:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/channel.AttachmentType'
|
|
url:
|
|
type: string
|
|
width:
|
|
type: integer
|
|
type: object
|
|
channel.AttachmentType:
|
|
enum:
|
|
- image
|
|
- audio
|
|
- video
|
|
- voice
|
|
- file
|
|
- gif
|
|
type: string
|
|
x-enum-varnames:
|
|
- AttachmentImage
|
|
- AttachmentAudio
|
|
- AttachmentVideo
|
|
- AttachmentVoice
|
|
- AttachmentFile
|
|
- AttachmentGIF
|
|
channel.ChannelCapabilities:
|
|
properties:
|
|
attachments:
|
|
type: boolean
|
|
block_streaming:
|
|
type: boolean
|
|
buttons:
|
|
type: boolean
|
|
chat_types:
|
|
items:
|
|
type: string
|
|
type: array
|
|
edit:
|
|
type: boolean
|
|
markdown:
|
|
type: boolean
|
|
media:
|
|
type: boolean
|
|
native_commands:
|
|
type: boolean
|
|
polls:
|
|
type: boolean
|
|
reactions:
|
|
type: boolean
|
|
reply:
|
|
type: boolean
|
|
rich_text:
|
|
type: boolean
|
|
streaming:
|
|
type: boolean
|
|
text:
|
|
type: boolean
|
|
threads:
|
|
type: boolean
|
|
unsend:
|
|
type: boolean
|
|
type: object
|
|
channel.ChannelConfig:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
channel_type:
|
|
$ref: '#/definitions/channel.ChannelType'
|
|
created_at:
|
|
type: string
|
|
credentials:
|
|
additionalProperties: {}
|
|
type: object
|
|
disabled:
|
|
type: boolean
|
|
external_identity:
|
|
type: string
|
|
id:
|
|
type: string
|
|
routing:
|
|
additionalProperties: {}
|
|
type: object
|
|
self_identity:
|
|
additionalProperties: {}
|
|
type: object
|
|
updated_at:
|
|
type: string
|
|
verified_at:
|
|
type: string
|
|
type: object
|
|
channel.ChannelIdentityBinding:
|
|
properties:
|
|
channel_identity_id:
|
|
type: string
|
|
channel_type:
|
|
$ref: '#/definitions/channel.ChannelType'
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
channel.ChannelType:
|
|
enum:
|
|
- telegram
|
|
- feishu
|
|
- dingtalk
|
|
- matrix
|
|
- discord
|
|
- qq
|
|
- wecom
|
|
- weixin
|
|
- wechatoa
|
|
- local
|
|
- slack
|
|
type: string
|
|
x-enum-varnames:
|
|
- ChannelTypeTelegram
|
|
- ChannelTypeFeishu
|
|
- ChannelTypeDingtalk
|
|
- ChannelTypeMatrix
|
|
- ChannelTypeDiscord
|
|
- ChannelTypeQQ
|
|
- ChannelTypeWecom
|
|
- ChannelTypeWeixin
|
|
- ChannelTypeWeChatOA
|
|
- ChannelTypeLocal
|
|
- ChannelTypeSlack
|
|
channel.ConfigSchema:
|
|
properties:
|
|
fields:
|
|
additionalProperties:
|
|
$ref: '#/definitions/channel.FieldSchema'
|
|
type: object
|
|
version:
|
|
type: integer
|
|
type: object
|
|
channel.FieldSchema:
|
|
properties:
|
|
description:
|
|
type: string
|
|
enum:
|
|
items:
|
|
type: string
|
|
type: array
|
|
example: {}
|
|
order:
|
|
type: integer
|
|
required:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/channel.FieldType'
|
|
type: object
|
|
channel.FieldType:
|
|
enum:
|
|
- string
|
|
- secret
|
|
- bool
|
|
- number
|
|
- enum
|
|
type: string
|
|
x-enum-varnames:
|
|
- FieldString
|
|
- FieldSecret
|
|
- FieldBool
|
|
- FieldNumber
|
|
- FieldEnum
|
|
channel.Message:
|
|
properties:
|
|
actions:
|
|
items:
|
|
$ref: '#/definitions/channel.Action'
|
|
type: array
|
|
attachments:
|
|
items:
|
|
$ref: '#/definitions/channel.Attachment'
|
|
type: array
|
|
format:
|
|
$ref: '#/definitions/channel.MessageFormat'
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
parts:
|
|
items:
|
|
$ref: '#/definitions/channel.MessagePart'
|
|
type: array
|
|
reply:
|
|
$ref: '#/definitions/channel.ReplyRef'
|
|
text:
|
|
type: string
|
|
thread:
|
|
$ref: '#/definitions/channel.ThreadRef'
|
|
type: object
|
|
channel.MessageFormat:
|
|
enum:
|
|
- plain
|
|
- markdown
|
|
- rich
|
|
type: string
|
|
x-enum-varnames:
|
|
- MessageFormatPlain
|
|
- MessageFormatMarkdown
|
|
- MessageFormatRich
|
|
channel.MessagePart:
|
|
properties:
|
|
channel_identity_id:
|
|
type: string
|
|
emoji:
|
|
type: string
|
|
language:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
styles:
|
|
items:
|
|
$ref: '#/definitions/channel.MessageTextStyle'
|
|
type: array
|
|
text:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/channel.MessagePartType'
|
|
url:
|
|
type: string
|
|
type: object
|
|
channel.MessagePartType:
|
|
enum:
|
|
- text
|
|
- link
|
|
- code_block
|
|
- mention
|
|
- emoji
|
|
type: string
|
|
x-enum-varnames:
|
|
- MessagePartText
|
|
- MessagePartLink
|
|
- MessagePartCodeBlock
|
|
- MessagePartMention
|
|
- MessagePartEmoji
|
|
channel.MessageTextStyle:
|
|
enum:
|
|
- bold
|
|
- italic
|
|
- strikethrough
|
|
- code
|
|
type: string
|
|
x-enum-varnames:
|
|
- MessageStyleBold
|
|
- MessageStyleItalic
|
|
- MessageStyleStrikethrough
|
|
- MessageStyleCode
|
|
channel.ReplyRef:
|
|
properties:
|
|
message_id:
|
|
type: string
|
|
preview:
|
|
type: string
|
|
sender:
|
|
type: string
|
|
target:
|
|
type: string
|
|
type: object
|
|
channel.SendRequest:
|
|
properties:
|
|
channel_identity_id:
|
|
type: string
|
|
message:
|
|
$ref: '#/definitions/channel.Message'
|
|
target:
|
|
type: string
|
|
type: object
|
|
channel.TargetHint:
|
|
properties:
|
|
example:
|
|
type: string
|
|
label:
|
|
type: string
|
|
type: object
|
|
channel.TargetSpec:
|
|
properties:
|
|
format:
|
|
type: string
|
|
hints:
|
|
items:
|
|
$ref: '#/definitions/channel.TargetHint'
|
|
type: array
|
|
type: object
|
|
channel.ThreadRef:
|
|
properties:
|
|
id:
|
|
type: string
|
|
type: object
|
|
channel.UpdateChannelStatusRequest:
|
|
properties:
|
|
disabled:
|
|
type: boolean
|
|
type: object
|
|
channel.UpsertChannelIdentityConfigRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
type: object
|
|
channel.UpsertConfigRequest:
|
|
properties:
|
|
credentials:
|
|
additionalProperties: {}
|
|
type: object
|
|
disabled:
|
|
type: boolean
|
|
external_identity:
|
|
type: string
|
|
routing:
|
|
additionalProperties: {}
|
|
type: object
|
|
self_identity:
|
|
additionalProperties: {}
|
|
type: object
|
|
verified_at:
|
|
type: string
|
|
type: object
|
|
compaction.ListLogsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/compaction.Log'
|
|
type: array
|
|
total_count:
|
|
type: integer
|
|
type: object
|
|
compaction.Log:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
completed_at:
|
|
type: string
|
|
error_message:
|
|
type: string
|
|
id:
|
|
type: string
|
|
message_count:
|
|
type: integer
|
|
model_id:
|
|
type: string
|
|
session_id:
|
|
type: string
|
|
started_at:
|
|
type: string
|
|
status:
|
|
type: string
|
|
summary:
|
|
type: string
|
|
usage: {}
|
|
type: object
|
|
email.BindingResponse:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
can_delete:
|
|
type: boolean
|
|
can_read:
|
|
type: boolean
|
|
can_write:
|
|
type: boolean
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
email_address:
|
|
type: string
|
|
email_provider_id:
|
|
type: string
|
|
id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
email.ConfigSchema:
|
|
properties:
|
|
fields:
|
|
items:
|
|
$ref: '#/definitions/email.FieldSchema'
|
|
type: array
|
|
type: object
|
|
email.CreateBindingRequest:
|
|
properties:
|
|
can_delete:
|
|
type: boolean
|
|
can_read:
|
|
type: boolean
|
|
can_write:
|
|
type: boolean
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
email_address:
|
|
type: string
|
|
email_provider_id:
|
|
type: string
|
|
type: object
|
|
email.CreateProviderRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
type: object
|
|
email.FieldSchema:
|
|
properties:
|
|
description:
|
|
type: string
|
|
enum:
|
|
items:
|
|
type: string
|
|
type: array
|
|
example: {}
|
|
key:
|
|
type: string
|
|
order:
|
|
type: integer
|
|
required:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
type:
|
|
type: string
|
|
type: object
|
|
email.OutboxItemResponse:
|
|
properties:
|
|
attachments:
|
|
items: {}
|
|
type: array
|
|
body_html:
|
|
type: string
|
|
body_text:
|
|
type: string
|
|
bot_id:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
error:
|
|
type: string
|
|
from:
|
|
type: string
|
|
id:
|
|
type: string
|
|
message_id:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
sent_at:
|
|
type: string
|
|
status:
|
|
type: string
|
|
subject:
|
|
type: string
|
|
to:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
email.ProviderMeta:
|
|
properties:
|
|
config_schema:
|
|
$ref: '#/definitions/email.ConfigSchema'
|
|
display_name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
type: object
|
|
email.ProviderResponse:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
email.UpdateBindingRequest:
|
|
properties:
|
|
can_delete:
|
|
type: boolean
|
|
can_read:
|
|
type: boolean
|
|
can_write:
|
|
type: boolean
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
email_address:
|
|
type: string
|
|
type: object
|
|
email.UpdateProviderRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
type: object
|
|
github_com_memohai_memoh_internal_mcp.Connection:
|
|
properties:
|
|
auth_type:
|
|
type: string
|
|
bot_id:
|
|
type: string
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
last_probed_at:
|
|
type: string
|
|
name:
|
|
type: string
|
|
status:
|
|
type: string
|
|
status_message:
|
|
type: string
|
|
tools_cache:
|
|
items:
|
|
$ref: '#/definitions/mcp.ToolDescriptor'
|
|
type: array
|
|
type:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
handlers.BatchDeleteRequest:
|
|
properties:
|
|
ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.BrowserCoresResponse:
|
|
properties:
|
|
cores:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.CacheStats:
|
|
properties:
|
|
cache_hit_rate:
|
|
type: number
|
|
cache_read_tokens:
|
|
type: integer
|
|
cache_write_tokens:
|
|
type: integer
|
|
total_input_tokens:
|
|
type: integer
|
|
type: object
|
|
handlers.ChannelMeta:
|
|
properties:
|
|
capabilities:
|
|
$ref: '#/definitions/channel.ChannelCapabilities'
|
|
config_schema:
|
|
$ref: '#/definitions/channel.ConfigSchema'
|
|
configless:
|
|
type: boolean
|
|
display_name:
|
|
type: string
|
|
target_spec:
|
|
$ref: '#/definitions/channel.TargetSpec'
|
|
type:
|
|
type: string
|
|
user_config_schema:
|
|
$ref: '#/definitions/channel.ConfigSchema'
|
|
type: object
|
|
handlers.ContainerCPUMetricsResponse:
|
|
properties:
|
|
kernel_nanoseconds:
|
|
type: integer
|
|
usage_nanoseconds:
|
|
type: integer
|
|
usage_percent:
|
|
type: number
|
|
user_nanoseconds:
|
|
type: integer
|
|
type: object
|
|
handlers.ContainerGPURequest:
|
|
properties:
|
|
devices:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.ContainerMemoryMetricsResponse:
|
|
properties:
|
|
limit_bytes:
|
|
type: integer
|
|
usage_bytes:
|
|
type: integer
|
|
usage_percent:
|
|
type: number
|
|
type: object
|
|
handlers.ContainerMetricsPayloadResponse:
|
|
properties:
|
|
cpu:
|
|
$ref: '#/definitions/handlers.ContainerCPUMetricsResponse'
|
|
memory:
|
|
$ref: '#/definitions/handlers.ContainerMemoryMetricsResponse'
|
|
storage:
|
|
$ref: '#/definitions/handlers.ContainerStorageMetricsResponse'
|
|
type: object
|
|
handlers.ContainerMetricsStatusResponse:
|
|
properties:
|
|
exists:
|
|
type: boolean
|
|
task_running:
|
|
type: boolean
|
|
type: object
|
|
handlers.ContainerStorageMetricsResponse:
|
|
properties:
|
|
path:
|
|
type: string
|
|
used_bytes:
|
|
type: integer
|
|
type: object
|
|
handlers.ContextUsage:
|
|
properties:
|
|
context_window:
|
|
type: integer
|
|
used_tokens:
|
|
type: integer
|
|
type: object
|
|
handlers.CreateContainerRequest:
|
|
properties:
|
|
gpu:
|
|
$ref: '#/definitions/handlers.ContainerGPURequest'
|
|
image:
|
|
type: string
|
|
restore_data:
|
|
type: boolean
|
|
snapshotter:
|
|
type: string
|
|
type: object
|
|
handlers.CreateContainerResponse:
|
|
properties:
|
|
cdi_devices:
|
|
items:
|
|
type: string
|
|
type: array
|
|
container_id:
|
|
type: string
|
|
data_restored:
|
|
type: boolean
|
|
has_preserved_data:
|
|
type: boolean
|
|
image:
|
|
type: string
|
|
snapshotter:
|
|
type: string
|
|
started:
|
|
type: boolean
|
|
type: object
|
|
handlers.CreateSnapshotRequest:
|
|
properties:
|
|
snapshot_name:
|
|
type: string
|
|
type: object
|
|
handlers.CreateSnapshotResponse:
|
|
properties:
|
|
container_id:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
runtime_snapshot_name:
|
|
type: string
|
|
snapshot_name:
|
|
type: string
|
|
snapshotter:
|
|
type: string
|
|
source:
|
|
type: string
|
|
version:
|
|
type: integer
|
|
type: object
|
|
handlers.DailyTokenUsage:
|
|
properties:
|
|
cache_read_tokens:
|
|
type: integer
|
|
cache_write_tokens:
|
|
type: integer
|
|
day:
|
|
type: string
|
|
input_tokens:
|
|
type: integer
|
|
output_tokens:
|
|
type: integer
|
|
reasoning_tokens:
|
|
type: integer
|
|
type: object
|
|
handlers.ErrorResponse:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
handlers.FSDeleteRequest:
|
|
properties:
|
|
path:
|
|
type: string
|
|
recursive:
|
|
type: boolean
|
|
type: object
|
|
handlers.FSFileInfo:
|
|
properties:
|
|
isDir:
|
|
type: boolean
|
|
modTime:
|
|
type: string
|
|
mode:
|
|
type: string
|
|
name:
|
|
type: string
|
|
path:
|
|
type: string
|
|
size:
|
|
type: integer
|
|
type: object
|
|
handlers.FSListResponse:
|
|
properties:
|
|
entries:
|
|
items:
|
|
$ref: '#/definitions/handlers.FSFileInfo'
|
|
type: array
|
|
path:
|
|
type: string
|
|
type: object
|
|
handlers.FSMkdirRequest:
|
|
properties:
|
|
path:
|
|
type: string
|
|
type: object
|
|
handlers.FSReadResponse:
|
|
properties:
|
|
content:
|
|
type: string
|
|
path:
|
|
type: string
|
|
size:
|
|
type: integer
|
|
type: object
|
|
handlers.FSRenameRequest:
|
|
properties:
|
|
newPath:
|
|
type: string
|
|
oldPath:
|
|
type: string
|
|
type: object
|
|
handlers.FSUploadResponse:
|
|
properties:
|
|
path:
|
|
type: string
|
|
size:
|
|
type: integer
|
|
type: object
|
|
handlers.FSWriteRequest:
|
|
properties:
|
|
content:
|
|
type: string
|
|
path:
|
|
type: string
|
|
type: object
|
|
handlers.GetContainerMetricsResponse:
|
|
properties:
|
|
backend:
|
|
type: string
|
|
metrics:
|
|
$ref: '#/definitions/handlers.ContainerMetricsPayloadResponse'
|
|
sampled_at:
|
|
type: string
|
|
status:
|
|
$ref: '#/definitions/handlers.ContainerMetricsStatusResponse'
|
|
supported:
|
|
type: boolean
|
|
unsupported_reason:
|
|
type: string
|
|
type: object
|
|
handlers.GetContainerResponse:
|
|
properties:
|
|
cdi_devices:
|
|
items:
|
|
type: string
|
|
type: array
|
|
container_id:
|
|
type: string
|
|
container_path:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
has_preserved_data:
|
|
type: boolean
|
|
image:
|
|
type: string
|
|
legacy:
|
|
type: boolean
|
|
namespace:
|
|
type: string
|
|
status:
|
|
type: string
|
|
task_running:
|
|
type: boolean
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
handlers.InstallMcpRequest:
|
|
properties:
|
|
env:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
mcp_id:
|
|
type: string
|
|
type: object
|
|
handlers.InstallSkillRequest:
|
|
properties:
|
|
skill_id:
|
|
type: string
|
|
type: object
|
|
handlers.ListSnapshotsResponse:
|
|
properties:
|
|
snapshots:
|
|
items:
|
|
$ref: '#/definitions/handlers.SnapshotInfo'
|
|
type: array
|
|
snapshotter:
|
|
type: string
|
|
type: object
|
|
handlers.LocalChannelMessageRequest:
|
|
properties:
|
|
message:
|
|
$ref: '#/definitions/channel.Message'
|
|
model_id:
|
|
type: string
|
|
reasoning_effort:
|
|
type: string
|
|
type: object
|
|
handlers.LoginRequest:
|
|
properties:
|
|
password:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
handlers.LoginResponse:
|
|
properties:
|
|
access_token:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
expires_at:
|
|
type: string
|
|
role:
|
|
type: string
|
|
timezone:
|
|
type: string
|
|
token_type:
|
|
type: string
|
|
user_id:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
handlers.MCPStdioRequest:
|
|
properties:
|
|
args:
|
|
items:
|
|
type: string
|
|
type: array
|
|
command:
|
|
type: string
|
|
cwd:
|
|
type: string
|
|
env:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
name:
|
|
type: string
|
|
type: object
|
|
handlers.MCPStdioResponse:
|
|
properties:
|
|
connection_id:
|
|
type: string
|
|
tools:
|
|
items:
|
|
type: string
|
|
type: array
|
|
url:
|
|
type: string
|
|
type: object
|
|
handlers.ModelTokenUsage:
|
|
properties:
|
|
input_tokens:
|
|
type: integer
|
|
model_id:
|
|
type: string
|
|
model_name:
|
|
type: string
|
|
model_slug:
|
|
type: string
|
|
output_tokens:
|
|
type: integer
|
|
provider_name:
|
|
type: string
|
|
type: object
|
|
handlers.PingResponse:
|
|
properties:
|
|
commit_hash:
|
|
type: string
|
|
container_backend:
|
|
type: string
|
|
snapshot_supported:
|
|
type: boolean
|
|
status:
|
|
type: string
|
|
version:
|
|
type: string
|
|
type: object
|
|
handlers.ProbeResponse:
|
|
properties:
|
|
auth_required:
|
|
type: boolean
|
|
error:
|
|
type: string
|
|
status:
|
|
type: string
|
|
tools:
|
|
items:
|
|
$ref: '#/definitions/mcp.ToolDescriptor'
|
|
type: array
|
|
type: object
|
|
handlers.RefreshResponse:
|
|
properties:
|
|
access_token:
|
|
type: string
|
|
expires_at:
|
|
type: string
|
|
token_type:
|
|
type: string
|
|
type: object
|
|
handlers.RollbackRequest:
|
|
properties:
|
|
version:
|
|
type: integer
|
|
type: object
|
|
handlers.SessionInfoResponse:
|
|
properties:
|
|
cache_stats:
|
|
$ref: '#/definitions/handlers.CacheStats'
|
|
context_usage:
|
|
$ref: '#/definitions/handlers.ContextUsage'
|
|
message_count:
|
|
type: integer
|
|
skills:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.SkillItem:
|
|
properties:
|
|
content:
|
|
type: string
|
|
description:
|
|
type: string
|
|
managed:
|
|
type: boolean
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
raw:
|
|
type: string
|
|
shadowed_by:
|
|
type: string
|
|
source_kind:
|
|
type: string
|
|
source_path:
|
|
type: string
|
|
source_root:
|
|
type: string
|
|
state:
|
|
type: string
|
|
type: object
|
|
handlers.SkillsActionRequest:
|
|
properties:
|
|
action:
|
|
type: string
|
|
target_path:
|
|
type: string
|
|
type: object
|
|
handlers.SkillsDeleteRequest:
|
|
properties:
|
|
names:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.SkillsResponse:
|
|
properties:
|
|
skills:
|
|
items:
|
|
$ref: '#/definitions/handlers.SkillItem'
|
|
type: array
|
|
type: object
|
|
handlers.SkillsUpsertRequest:
|
|
properties:
|
|
skills:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.SnapshotInfo:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
kind:
|
|
type: string
|
|
labels:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
managed:
|
|
type: boolean
|
|
name:
|
|
type: string
|
|
parent:
|
|
type: string
|
|
runtime_snapshot_name:
|
|
type: string
|
|
snapshotter:
|
|
type: string
|
|
source:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
version:
|
|
type: integer
|
|
type: object
|
|
handlers.SupermarketAuthor:
|
|
properties:
|
|
email:
|
|
type: string
|
|
name:
|
|
type: string
|
|
type: object
|
|
handlers.SupermarketConfigVar:
|
|
properties:
|
|
defaultValue:
|
|
type: string
|
|
description:
|
|
type: string
|
|
key:
|
|
type: string
|
|
type: object
|
|
handlers.SupermarketMcpEntry:
|
|
properties:
|
|
args:
|
|
items:
|
|
type: string
|
|
type: array
|
|
author:
|
|
$ref: '#/definitions/handlers.SupermarketAuthor'
|
|
command:
|
|
type: string
|
|
description:
|
|
type: string
|
|
env:
|
|
items:
|
|
$ref: '#/definitions/handlers.SupermarketConfigVar'
|
|
type: array
|
|
headers:
|
|
items:
|
|
$ref: '#/definitions/handlers.SupermarketConfigVar'
|
|
type: array
|
|
homepage:
|
|
type: string
|
|
icon:
|
|
type: string
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
tags:
|
|
items:
|
|
type: string
|
|
type: array
|
|
transport:
|
|
type: string
|
|
url:
|
|
type: string
|
|
type: object
|
|
handlers.SupermarketMcpListResponse:
|
|
properties:
|
|
data:
|
|
items:
|
|
$ref: '#/definitions/handlers.SupermarketMcpEntry'
|
|
type: array
|
|
limit:
|
|
type: integer
|
|
page:
|
|
type: integer
|
|
total:
|
|
type: integer
|
|
type: object
|
|
handlers.SupermarketSkillEntry:
|
|
properties:
|
|
content:
|
|
type: string
|
|
description:
|
|
type: string
|
|
files:
|
|
items:
|
|
type: string
|
|
type: array
|
|
id:
|
|
type: string
|
|
metadata:
|
|
$ref: '#/definitions/handlers.SupermarketSkillMetadata'
|
|
name:
|
|
type: string
|
|
type: object
|
|
handlers.SupermarketSkillListResponse:
|
|
properties:
|
|
data:
|
|
items:
|
|
$ref: '#/definitions/handlers.SupermarketSkillEntry'
|
|
type: array
|
|
limit:
|
|
type: integer
|
|
page:
|
|
type: integer
|
|
total:
|
|
type: integer
|
|
type: object
|
|
handlers.SupermarketSkillMetadata:
|
|
properties:
|
|
author:
|
|
$ref: '#/definitions/handlers.SupermarketAuthor'
|
|
homepage:
|
|
type: string
|
|
tags:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.SupermarketTagsResponse:
|
|
properties:
|
|
tags:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.TokenUsageRecord:
|
|
properties:
|
|
cache_read_tokens:
|
|
type: integer
|
|
cache_write_tokens:
|
|
type: integer
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
input_tokens:
|
|
type: integer
|
|
model_id:
|
|
type: string
|
|
model_name:
|
|
type: string
|
|
model_slug:
|
|
type: string
|
|
output_tokens:
|
|
type: integer
|
|
provider_name:
|
|
type: string
|
|
reasoning_tokens:
|
|
type: integer
|
|
session_id:
|
|
type: string
|
|
session_type:
|
|
type: string
|
|
type: object
|
|
handlers.TokenUsageRecordsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/handlers.TokenUsageRecord'
|
|
type: array
|
|
total:
|
|
type: integer
|
|
type: object
|
|
handlers.TokenUsageResponse:
|
|
properties:
|
|
by_model:
|
|
items:
|
|
$ref: '#/definitions/handlers.ModelTokenUsage'
|
|
type: array
|
|
chat:
|
|
items:
|
|
$ref: '#/definitions/handlers.DailyTokenUsage'
|
|
type: array
|
|
heartbeat:
|
|
items:
|
|
$ref: '#/definitions/handlers.DailyTokenUsage'
|
|
type: array
|
|
schedule:
|
|
items:
|
|
$ref: '#/definitions/handlers.DailyTokenUsage'
|
|
type: array
|
|
type: object
|
|
handlers.TriggerCompactResponse:
|
|
properties:
|
|
message_count:
|
|
type: integer
|
|
status:
|
|
type: string
|
|
summary:
|
|
type: string
|
|
type: object
|
|
handlers.createSessionRequest:
|
|
properties:
|
|
channel_type:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
title:
|
|
type: string
|
|
type: object
|
|
handlers.emailOAuthStatusResponse:
|
|
properties:
|
|
configured:
|
|
type: boolean
|
|
email_address:
|
|
type: string
|
|
expired:
|
|
type: boolean
|
|
expires_at:
|
|
type: string
|
|
has_token:
|
|
type: boolean
|
|
provider:
|
|
type: string
|
|
type: object
|
|
handlers.fsOpResponse:
|
|
properties:
|
|
ok:
|
|
type: boolean
|
|
type: object
|
|
handlers.listMyIdentitiesResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/identities.ChannelIdentity'
|
|
type: array
|
|
user_id:
|
|
type: string
|
|
type: object
|
|
handlers.memoryAddPayload:
|
|
properties:
|
|
embedding_enabled:
|
|
type: boolean
|
|
filters:
|
|
additionalProperties: {}
|
|
type: object
|
|
infer:
|
|
type: boolean
|
|
message:
|
|
type: string
|
|
messages:
|
|
items:
|
|
$ref: '#/definitions/adapters.Message'
|
|
type: array
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
namespace:
|
|
type: string
|
|
run_id:
|
|
type: string
|
|
type: object
|
|
handlers.memoryCompactPayload:
|
|
properties:
|
|
decay_days:
|
|
type: integer
|
|
ratio:
|
|
type: number
|
|
type: object
|
|
handlers.memoryDeletePayload:
|
|
properties:
|
|
memory_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.memorySearchPayload:
|
|
properties:
|
|
embedding_enabled:
|
|
type: boolean
|
|
filters:
|
|
additionalProperties: {}
|
|
type: object
|
|
limit:
|
|
type: integer
|
|
no_stats:
|
|
type: boolean
|
|
query:
|
|
type: string
|
|
run_id:
|
|
type: string
|
|
sources:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
handlers.oauthAuthorizeRequest:
|
|
properties:
|
|
callback_url:
|
|
type: string
|
|
client_id:
|
|
type: string
|
|
client_secret:
|
|
type: string
|
|
type: object
|
|
handlers.oauthDiscoverRequest:
|
|
properties:
|
|
url:
|
|
type: string
|
|
type: object
|
|
handlers.oauthExchangeRequest:
|
|
properties:
|
|
code:
|
|
type: string
|
|
state:
|
|
type: string
|
|
type: object
|
|
handlers.skillsOpResponse:
|
|
properties:
|
|
ok:
|
|
type: boolean
|
|
type: object
|
|
handlers.synthesizeRequest:
|
|
properties:
|
|
text:
|
|
type: string
|
|
type: object
|
|
handlers.synthesizeResponse:
|
|
properties:
|
|
content_type:
|
|
type: string
|
|
size:
|
|
type: integer
|
|
temp_id:
|
|
type: string
|
|
type: object
|
|
handlers.terminalInfoResponse:
|
|
properties:
|
|
available:
|
|
type: boolean
|
|
shell:
|
|
type: string
|
|
type: object
|
|
handlers.updateSessionRequest:
|
|
properties:
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
title:
|
|
type: string
|
|
type: object
|
|
heartbeat.ListLogsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/heartbeat.Log'
|
|
type: array
|
|
total_count:
|
|
type: integer
|
|
type: object
|
|
heartbeat.Log:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
completed_at:
|
|
type: string
|
|
error_message:
|
|
type: string
|
|
id:
|
|
type: string
|
|
result_text:
|
|
type: string
|
|
session_id:
|
|
type: string
|
|
started_at:
|
|
type: string
|
|
status:
|
|
type: string
|
|
usage: {}
|
|
type: object
|
|
identities.ChannelIdentity:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
channel:
|
|
type: string
|
|
channel_subject_id:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
display_name:
|
|
type: string
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
updated_at:
|
|
type: string
|
|
user_id:
|
|
type: string
|
|
type: object
|
|
mcp.AuthorizeResult:
|
|
properties:
|
|
authorization_url:
|
|
type: string
|
|
type: object
|
|
mcp.DiscoveryResult:
|
|
properties:
|
|
authorization_endpoint:
|
|
type: string
|
|
authorization_server_url:
|
|
type: string
|
|
registration_endpoint:
|
|
type: string
|
|
resource_metadata_url:
|
|
type: string
|
|
resource_uri:
|
|
type: string
|
|
scopes_supported:
|
|
items:
|
|
type: string
|
|
type: array
|
|
token_endpoint:
|
|
type: string
|
|
type: object
|
|
mcp.ExportResponse:
|
|
properties:
|
|
mcpServers:
|
|
additionalProperties:
|
|
$ref: '#/definitions/mcp.MCPServerEntry'
|
|
type: object
|
|
type: object
|
|
mcp.ImportRequest:
|
|
properties:
|
|
mcpServers:
|
|
additionalProperties:
|
|
$ref: '#/definitions/mcp.MCPServerEntry'
|
|
type: object
|
|
type: object
|
|
mcp.ListResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/github_com_memohai_memoh_internal_mcp.Connection'
|
|
type: array
|
|
type: object
|
|
mcp.MCPServerEntry:
|
|
properties:
|
|
args:
|
|
items:
|
|
type: string
|
|
type: array
|
|
command:
|
|
type: string
|
|
cwd:
|
|
type: string
|
|
env:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
headers:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
transport:
|
|
type: string
|
|
url:
|
|
type: string
|
|
type: object
|
|
mcp.OAuthStatus:
|
|
properties:
|
|
auth_server:
|
|
type: string
|
|
callback_url:
|
|
type: string
|
|
configured:
|
|
type: boolean
|
|
expired:
|
|
type: boolean
|
|
expires_at:
|
|
type: string
|
|
has_token:
|
|
type: boolean
|
|
scopes:
|
|
type: string
|
|
type: object
|
|
mcp.ToolDescriptor:
|
|
properties:
|
|
description:
|
|
type: string
|
|
inputSchema:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
type: object
|
|
mcp.UpsertRequest:
|
|
properties:
|
|
args:
|
|
items:
|
|
type: string
|
|
type: array
|
|
auth_type:
|
|
type: string
|
|
command:
|
|
type: string
|
|
cwd:
|
|
type: string
|
|
env:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
headers:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
is_active:
|
|
type: boolean
|
|
name:
|
|
type: string
|
|
transport:
|
|
type: string
|
|
url:
|
|
type: string
|
|
type: object
|
|
message.Message:
|
|
properties:
|
|
assets:
|
|
items:
|
|
$ref: '#/definitions/message.MessageAsset'
|
|
type: array
|
|
bot_id:
|
|
type: string
|
|
compact_id:
|
|
type: string
|
|
content:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
created_at:
|
|
type: string
|
|
display_content:
|
|
type: string
|
|
event_id:
|
|
type: string
|
|
external_message_id:
|
|
type: string
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
platform:
|
|
type: string
|
|
role:
|
|
type: string
|
|
sender_avatar_url:
|
|
type: string
|
|
sender_channel_identity_id:
|
|
type: string
|
|
sender_display_name:
|
|
type: string
|
|
sender_user_id:
|
|
type: string
|
|
session_id:
|
|
type: string
|
|
source_reply_to_message_id:
|
|
type: string
|
|
usage:
|
|
items:
|
|
type: integer
|
|
type: array
|
|
type: object
|
|
message.MessageAsset:
|
|
properties:
|
|
content_hash:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
mime:
|
|
type: string
|
|
name:
|
|
type: string
|
|
ordinal:
|
|
type: integer
|
|
role:
|
|
type: string
|
|
size_bytes:
|
|
type: integer
|
|
storage_key:
|
|
type: string
|
|
type: object
|
|
models.AddRequest:
|
|
properties:
|
|
config:
|
|
$ref: '#/definitions/models.ModelConfig'
|
|
model_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/models.ModelType'
|
|
type: object
|
|
models.AddResponse:
|
|
properties:
|
|
id:
|
|
type: string
|
|
model_id:
|
|
type: string
|
|
type: object
|
|
models.CountResponse:
|
|
properties:
|
|
count:
|
|
type: integer
|
|
type: object
|
|
models.GetResponse:
|
|
properties:
|
|
config:
|
|
$ref: '#/definitions/models.ModelConfig'
|
|
id:
|
|
type: string
|
|
model_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/models.ModelType'
|
|
type: object
|
|
models.ModelConfig:
|
|
properties:
|
|
compatibilities:
|
|
items:
|
|
type: string
|
|
type: array
|
|
context_window:
|
|
type: integer
|
|
dimensions:
|
|
type: integer
|
|
reasoning_efforts:
|
|
items:
|
|
type: string
|
|
type: array
|
|
type: object
|
|
models.ModelType:
|
|
enum:
|
|
- chat
|
|
- embedding
|
|
- speech
|
|
- transcription
|
|
type: string
|
|
x-enum-varnames:
|
|
- ModelTypeChat
|
|
- ModelTypeEmbedding
|
|
- ModelTypeSpeech
|
|
- ModelTypeTranscription
|
|
models.TestResponse:
|
|
properties:
|
|
latency_ms:
|
|
type: integer
|
|
message:
|
|
type: string
|
|
reachable:
|
|
type: boolean
|
|
status:
|
|
$ref: '#/definitions/models.TestStatus'
|
|
type: object
|
|
models.TestStatus:
|
|
enum:
|
|
- ok
|
|
- auth_error
|
|
- model_not_supported
|
|
- error
|
|
type: string
|
|
x-enum-varnames:
|
|
- TestStatusOK
|
|
- TestStatusAuthError
|
|
- TestStatusModelNotSupported
|
|
- TestStatusError
|
|
models.UpdateRequest:
|
|
properties:
|
|
config:
|
|
$ref: '#/definitions/models.ModelConfig'
|
|
model_id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider_id:
|
|
type: string
|
|
type:
|
|
$ref: '#/definitions/models.ModelType'
|
|
type: object
|
|
providers.CountResponse:
|
|
properties:
|
|
count:
|
|
type: integer
|
|
type: object
|
|
providers.CreateRequest:
|
|
properties:
|
|
client_type:
|
|
type: string
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
icon:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
required:
|
|
- client_type
|
|
- name
|
|
type: object
|
|
providers.GetResponse:
|
|
properties:
|
|
client_type:
|
|
type: string
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
enable:
|
|
type: boolean
|
|
icon:
|
|
type: string
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
providers.ImportModelsResponse:
|
|
properties:
|
|
created:
|
|
type: integer
|
|
models:
|
|
items:
|
|
type: string
|
|
type: array
|
|
skipped:
|
|
type: integer
|
|
type: object
|
|
providers.OAuthAccount:
|
|
properties:
|
|
avatar_url:
|
|
type: string
|
|
email:
|
|
type: string
|
|
label:
|
|
type: string
|
|
login:
|
|
type: string
|
|
name:
|
|
type: string
|
|
profile_url:
|
|
type: string
|
|
type: object
|
|
providers.OAuthAuthorizeResponse:
|
|
properties:
|
|
auth_url:
|
|
type: string
|
|
device:
|
|
$ref: '#/definitions/providers.OAuthDeviceStatus'
|
|
mode:
|
|
type: string
|
|
type: object
|
|
providers.OAuthDeviceStatus:
|
|
properties:
|
|
expires_at:
|
|
type: string
|
|
interval_seconds:
|
|
type: integer
|
|
pending:
|
|
type: boolean
|
|
user_code:
|
|
type: string
|
|
verification_uri:
|
|
type: string
|
|
type: object
|
|
providers.OAuthStatus:
|
|
properties:
|
|
account:
|
|
$ref: '#/definitions/providers.OAuthAccount'
|
|
callback_url:
|
|
type: string
|
|
configured:
|
|
type: boolean
|
|
device:
|
|
$ref: '#/definitions/providers.OAuthDeviceStatus'
|
|
expired:
|
|
type: boolean
|
|
expires_at:
|
|
type: string
|
|
has_token:
|
|
type: boolean
|
|
mode:
|
|
type: string
|
|
type: object
|
|
providers.TestResponse:
|
|
properties:
|
|
latency_ms:
|
|
type: integer
|
|
message:
|
|
type: string
|
|
reachable:
|
|
type: boolean
|
|
type: object
|
|
providers.UpdateRequest:
|
|
properties:
|
|
client_type:
|
|
type: string
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
enable:
|
|
type: boolean
|
|
icon:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
type: object
|
|
schedule.CreateRequest:
|
|
properties:
|
|
command:
|
|
type: string
|
|
description:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
max_calls:
|
|
$ref: '#/definitions/schedule.NullableInt'
|
|
name:
|
|
type: string
|
|
pattern:
|
|
type: string
|
|
type: object
|
|
schedule.ListLogsResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/schedule.Log'
|
|
type: array
|
|
total_count:
|
|
type: integer
|
|
type: object
|
|
schedule.ListResponse:
|
|
properties:
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/schedule.Schedule'
|
|
type: array
|
|
type: object
|
|
schedule.Log:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
completed_at:
|
|
type: string
|
|
error_message:
|
|
type: string
|
|
id:
|
|
type: string
|
|
result_text:
|
|
type: string
|
|
schedule_id:
|
|
type: string
|
|
session_id:
|
|
type: string
|
|
started_at:
|
|
type: string
|
|
status:
|
|
type: string
|
|
usage: {}
|
|
type: object
|
|
schedule.NullableInt:
|
|
properties:
|
|
set:
|
|
type: boolean
|
|
value:
|
|
type: integer
|
|
type: object
|
|
schedule.Schedule:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
command:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
current_calls:
|
|
type: integer
|
|
description:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
id:
|
|
type: string
|
|
max_calls:
|
|
type: integer
|
|
name:
|
|
type: string
|
|
pattern:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
schedule.UpdateRequest:
|
|
properties:
|
|
command:
|
|
type: string
|
|
description:
|
|
type: string
|
|
enabled:
|
|
type: boolean
|
|
max_calls:
|
|
$ref: '#/definitions/schedule.NullableInt'
|
|
name:
|
|
type: string
|
|
pattern:
|
|
type: string
|
|
type: object
|
|
searchproviders.CreateRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
name:
|
|
type: string
|
|
provider:
|
|
$ref: '#/definitions/searchproviders.ProviderName'
|
|
type: object
|
|
searchproviders.GetResponse:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
created_at:
|
|
type: string
|
|
enable:
|
|
type: boolean
|
|
id:
|
|
type: string
|
|
name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
searchproviders.ProviderConfigSchema:
|
|
properties:
|
|
fields:
|
|
additionalProperties:
|
|
$ref: '#/definitions/searchproviders.ProviderFieldSchema'
|
|
type: object
|
|
type: object
|
|
searchproviders.ProviderFieldSchema:
|
|
properties:
|
|
description:
|
|
type: string
|
|
enum:
|
|
items:
|
|
type: string
|
|
type: array
|
|
example: {}
|
|
required:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
type:
|
|
type: string
|
|
type: object
|
|
searchproviders.ProviderMeta:
|
|
properties:
|
|
config_schema:
|
|
$ref: '#/definitions/searchproviders.ProviderConfigSchema'
|
|
display_name:
|
|
type: string
|
|
provider:
|
|
type: string
|
|
type: object
|
|
searchproviders.ProviderName:
|
|
enum:
|
|
- brave
|
|
- bing
|
|
- google
|
|
- tavily
|
|
- sogou
|
|
- serper
|
|
- searxng
|
|
- jina
|
|
- exa
|
|
- bocha
|
|
- duckduckgo
|
|
- yandex
|
|
type: string
|
|
x-enum-varnames:
|
|
- ProviderBrave
|
|
- ProviderBing
|
|
- ProviderGoogle
|
|
- ProviderTavily
|
|
- ProviderSogou
|
|
- ProviderSerper
|
|
- ProviderSearXNG
|
|
- ProviderJina
|
|
- ProviderExa
|
|
- ProviderBocha
|
|
- ProviderDuckDuckGo
|
|
- ProviderYandex
|
|
searchproviders.UpdateRequest:
|
|
properties:
|
|
config:
|
|
additionalProperties: {}
|
|
type: object
|
|
enable:
|
|
type: boolean
|
|
name:
|
|
type: string
|
|
provider:
|
|
$ref: '#/definitions/searchproviders.ProviderName'
|
|
type: object
|
|
session.Session:
|
|
properties:
|
|
bot_id:
|
|
type: string
|
|
channel_type:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
parent_session_id:
|
|
type: string
|
|
route_conversation_type:
|
|
type: string
|
|
route_id:
|
|
type: string
|
|
route_metadata:
|
|
additionalProperties: {}
|
|
type: object
|
|
title:
|
|
type: string
|
|
type:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
settings.Settings:
|
|
properties:
|
|
acl_default_effect:
|
|
type: string
|
|
browser_context_id:
|
|
type: string
|
|
chat_model_id:
|
|
type: string
|
|
compaction_enabled:
|
|
type: boolean
|
|
compaction_model_id:
|
|
type: string
|
|
compaction_ratio:
|
|
type: integer
|
|
compaction_threshold:
|
|
type: integer
|
|
discuss_probe_model_id:
|
|
type: string
|
|
heartbeat_enabled:
|
|
type: boolean
|
|
heartbeat_interval:
|
|
type: integer
|
|
heartbeat_model_id:
|
|
type: string
|
|
image_model_id:
|
|
type: string
|
|
language:
|
|
type: string
|
|
memory_provider_id:
|
|
type: string
|
|
persist_full_tool_results:
|
|
type: boolean
|
|
reasoning_effort:
|
|
type: string
|
|
reasoning_enabled:
|
|
type: boolean
|
|
search_provider_id:
|
|
type: string
|
|
show_tool_calls_in_im:
|
|
type: boolean
|
|
timezone:
|
|
type: string
|
|
title_model_id:
|
|
type: string
|
|
transcription_model_id:
|
|
type: string
|
|
tts_model_id:
|
|
type: string
|
|
type: object
|
|
settings.UpsertRequest:
|
|
properties:
|
|
acl_default_effect:
|
|
type: string
|
|
browser_context_id:
|
|
type: string
|
|
chat_model_id:
|
|
type: string
|
|
compaction_enabled:
|
|
type: boolean
|
|
compaction_model_id:
|
|
type: string
|
|
compaction_ratio:
|
|
type: integer
|
|
compaction_threshold:
|
|
type: integer
|
|
discuss_probe_model_id:
|
|
type: string
|
|
heartbeat_enabled:
|
|
type: boolean
|
|
heartbeat_interval:
|
|
type: integer
|
|
heartbeat_model_id:
|
|
type: string
|
|
image_model_id:
|
|
type: string
|
|
language:
|
|
type: string
|
|
memory_provider_id:
|
|
type: string
|
|
persist_full_tool_results:
|
|
type: boolean
|
|
reasoning_effort:
|
|
type: string
|
|
reasoning_enabled:
|
|
type: boolean
|
|
search_provider_id:
|
|
type: string
|
|
show_tool_calls_in_im:
|
|
type: boolean
|
|
timezone:
|
|
type: string
|
|
title_model_id:
|
|
type: string
|
|
transcription_model_id:
|
|
type: string
|
|
tts_model_id:
|
|
type: string
|
|
type: object
|
|
info:
|
|
contact: {}
|
|
title: Memoh API
|
|
version: 1.0.0
|
|
paths:
|
|
/auth/login:
|
|
post:
|
|
description: Validate user credentials and issue a JWT
|
|
parameters:
|
|
- description: Login request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.LoginRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.LoginResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Login
|
|
tags:
|
|
- auth
|
|
/auth/refresh:
|
|
post:
|
|
description: Issue a new JWT using the existing claims with updated expiration
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.RefreshResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Refresh Token
|
|
tags:
|
|
- auth
|
|
/bots:
|
|
get:
|
|
description: List bots accessible to current user (admin can specify owner_id)
|
|
parameters:
|
|
- description: Owner user ID (admin only)
|
|
in: query
|
|
name: owner_id
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/bots.ListBotsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List bots
|
|
tags:
|
|
- bots
|
|
post:
|
|
description: Create a bot user owned by current user (or admin-specified owner)
|
|
parameters:
|
|
- description: Bot payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/bots.CreateBotRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/bots.Bot'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create bot user
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/channel-identities:
|
|
get:
|
|
description: Search locally observed channel identities for building ACL rules
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Search query
|
|
in: query
|
|
name: q
|
|
type: string
|
|
- description: Max results
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.ChannelIdentityCandidateListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Search ACL channel identity candidates
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/channel-identities/{channel_identity_id}/conversations:
|
|
get:
|
|
description: List previously observed conversation candidates for a channel
|
|
identity, for scoped rule building
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Channel Identity ID
|
|
in: path
|
|
name: channel_identity_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.ObservedConversationCandidateListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List observed conversations for a channel identity
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/channel-types/{channel_type}/conversations:
|
|
get:
|
|
description: List previously observed group/thread conversation candidates for
|
|
a channel type under this bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Channel type (e.g. telegram, discord)
|
|
in: path
|
|
name: channel_type
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.ObservedConversationCandidateListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List observed conversations for a platform type
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/default-effect:
|
|
get:
|
|
description: Get the fallback effect when no rule matches
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.DefaultEffectResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get bot ACL default effect
|
|
tags:
|
|
- bots
|
|
put:
|
|
description: Set the fallback effect when no rule matches (allow or deny)
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Default effect payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/acl.DefaultEffectResponse'
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Set bot ACL default effect
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/rules:
|
|
get:
|
|
description: List all ACL rules for a bot ordered by priority
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.ListRulesResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List bot ACL rules
|
|
tags:
|
|
- bots
|
|
post:
|
|
description: Create a new priority-ordered ACL rule for chat.trigger
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Rule payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/acl.CreateRuleRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/acl.Rule'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create ACL rule
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/rules/{rule_id}:
|
|
delete:
|
|
description: Delete an ACL rule by ID
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Rule ID
|
|
in: path
|
|
name: rule_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete ACL rule
|
|
tags:
|
|
- bots
|
|
put:
|
|
description: Update an existing ACL rule
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Rule ID
|
|
in: path
|
|
name: rule_id
|
|
required: true
|
|
type: string
|
|
- description: Rule payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/acl.UpdateRuleRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/acl.Rule'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update ACL rule
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/acl/rules/reorder:
|
|
put:
|
|
description: Batch-update priorities for multiple ACL rules
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Reorder payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/acl.ReorderRequest'
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Reorder ACL rules
|
|
tags:
|
|
- bots
|
|
/bots/{bot_id}/compaction/logs:
|
|
delete:
|
|
description: Delete all compaction logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete compaction logs
|
|
tags:
|
|
- compaction
|
|
get:
|
|
description: List compaction logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- default: 50
|
|
description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/compaction.ListLogsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List compaction logs
|
|
tags:
|
|
- compaction
|
|
/bots/{bot_id}/container:
|
|
delete:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Export /data before deletion
|
|
in: query
|
|
name: preserve_data
|
|
type: boolean
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete MCP container for bot
|
|
tags:
|
|
- containerd
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.GetContainerResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get container info for bot
|
|
tags:
|
|
- containerd
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Create container payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.CreateContainerRequest'
|
|
responses:
|
|
"200":
|
|
description: SSE stream of container creation events
|
|
schema:
|
|
$ref: '#/definitions/handlers.CreateContainerResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create and start MCP container for bot
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/data/export:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/gzip
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: file
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Export container /data as a tar.gz archive
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/data/import:
|
|
post:
|
|
consumes:
|
|
- multipart/form-data
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: tar.gz archive
|
|
in: formData
|
|
name: file
|
|
required: true
|
|
type: file
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Import a tar.gz archive into container /data
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/data/restore:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: object
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Restore previously preserved data into container
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs:
|
|
get:
|
|
description: Returns metadata about a file or directory at the given container
|
|
path
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Container path
|
|
in: query
|
|
name: path
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSFileInfo'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get file or directory info
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/delete:
|
|
post:
|
|
description: Deletes a file or directory at the given container path
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Delete request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSDeleteRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.fsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete a file or directory
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/download:
|
|
get:
|
|
description: Downloads a file from the container with appropriate Content-Type
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Container file path
|
|
in: query
|
|
name: path
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/octet-stream
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: file
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Download a file as binary stream
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/list:
|
|
get:
|
|
description: Lists files and directories at the given container path
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Container directory path
|
|
in: query
|
|
name: path
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List directory contents
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/mkdir:
|
|
post:
|
|
description: Creates a directory (and parents) at the given container path
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Mkdir request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSMkdirRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.fsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a directory
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/read:
|
|
get:
|
|
description: Reads the content of a file and returns it as a JSON string
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Container file path
|
|
in: query
|
|
name: path
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSReadResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Read file content as text
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/rename:
|
|
post:
|
|
description: Renames or moves a file/directory from oldPath to newPath
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Rename request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSRenameRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.fsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Rename or move a file/directory
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/upload:
|
|
post:
|
|
consumes:
|
|
- multipart/form-data
|
|
description: Uploads a binary file to the given container path
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Destination container path
|
|
in: formData
|
|
name: path
|
|
required: true
|
|
type: string
|
|
- description: File to upload
|
|
in: formData
|
|
name: file
|
|
required: true
|
|
type: file
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSUploadResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Upload a file via multipart form
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/fs/write:
|
|
post:
|
|
description: Creates or overwrites a file with the provided text content
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Write request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.FSWriteRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.fsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Write text content to a file
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/metrics:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.GetContainerMetricsResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get current container metrics for bot
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/skills:
|
|
delete:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Delete skills payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.SkillsDeleteRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.skillsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete Memoh-managed skills
|
|
tags:
|
|
- containerd
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SkillsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List skills from the bot container
|
|
tags:
|
|
- containerd
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Skills payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.SkillsUpsertRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.skillsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Upload skills into Memoh-managed directory
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/skills/actions:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Skill action payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.SkillsActionRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.skillsOpResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Apply an action to a discovered or managed skill source
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/snapshots:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Snapshotter name
|
|
in: query
|
|
name: snapshotter
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.ListSnapshotsResponse'
|
|
"501":
|
|
description: Snapshots currently not supported on this backend
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List snapshots
|
|
tags:
|
|
- containerd
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Create snapshot payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.CreateSnapshotRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.CreateSnapshotResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"501":
|
|
description: Snapshots currently not supported on this backend
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create container snapshot for bot
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/snapshots/rollback:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Rollback payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.RollbackRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Rollback container to a previous snapshot version
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/start:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: object
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Start container task for bot
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/stop:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
type: object
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Stop container task for bot
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/terminal:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.terminalInfoResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Check terminal availability for bot container
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/container/terminal/ws:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- default: 80
|
|
description: Initial terminal columns
|
|
in: query
|
|
name: cols
|
|
type: integer
|
|
- default: 24
|
|
description: Initial terminal rows
|
|
in: query
|
|
name: rows
|
|
type: integer
|
|
- description: Auth token
|
|
in: query
|
|
name: token
|
|
type: string
|
|
responses:
|
|
"101":
|
|
description: WebSocket upgrade
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Interactive WebSocket terminal for bot container
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/email-bindings:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/email.BindingResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List email bindings for a bot
|
|
tags:
|
|
- email-bindings
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Binding configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/email.CreateBindingRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/email.BindingResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Bind an email provider to a bot
|
|
tags:
|
|
- email-bindings
|
|
/bots/{bot_id}/email-bindings/{id}:
|
|
delete:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Binding ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Remove an email binding
|
|
tags:
|
|
- email-bindings
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Binding ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated binding
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/email.UpdateBindingRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/email.BindingResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update an email binding
|
|
tags:
|
|
- email-bindings
|
|
/bots/{bot_id}/email-outbox:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- default: 20
|
|
description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties: true
|
|
type: object
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List outbox emails for a bot (audit)
|
|
tags:
|
|
- email-outbox
|
|
/bots/{bot_id}/email-outbox/{id}:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Email ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/email.OutboxItemResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get outbox email detail
|
|
tags:
|
|
- email-outbox
|
|
/bots/{bot_id}/heartbeat/logs:
|
|
delete:
|
|
description: Delete all heartbeat execution logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete heartbeat logs
|
|
tags:
|
|
- heartbeat
|
|
get:
|
|
description: List heartbeat execution logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- default: 50
|
|
description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/heartbeat.ListLogsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List heartbeat logs
|
|
tags:
|
|
- heartbeat
|
|
/bots/{bot_id}/local/messages:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Post a user message (with optional attachments) through the local
|
|
channel pipeline.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Message payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.LocalChannelMessageRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Send a message to a local channel
|
|
tags:
|
|
- local-channel
|
|
/bots/{bot_id}/local/stream:
|
|
get:
|
|
description: Open a persistent SSE connection to receive real-time stream events
|
|
for the given bot.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- text/event-stream
|
|
responses:
|
|
"200":
|
|
description: SSE stream
|
|
schema:
|
|
type: string
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Subscribe to local channel events via SSE
|
|
tags:
|
|
- local-channel
|
|
/bots/{bot_id}/local/ws:
|
|
get:
|
|
description: Upgrade to WebSocket for bidirectional chat streaming with abort
|
|
support.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"101":
|
|
description: Switching Protocols
|
|
schema:
|
|
type: string
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: WebSocket chat endpoint
|
|
tags:
|
|
- local-channel
|
|
/bots/{bot_id}/mcp:
|
|
get:
|
|
description: List MCP connections for a bot
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.ListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List MCP connections
|
|
tags:
|
|
- mcp
|
|
post:
|
|
description: Create a MCP connection for a bot
|
|
parameters:
|
|
- description: MCP payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/mcp.UpsertRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/github_com_memohai_memoh_internal_mcp.Connection'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create MCP connection
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp-ops/batch-delete:
|
|
post:
|
|
description: Delete multiple MCP connections by IDs.
|
|
parameters:
|
|
- description: IDs to delete
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.BatchDeleteRequest'
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Batch delete MCP connections
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp-stdio:
|
|
post:
|
|
description: Start a stdio MCP process in the bot container and expose it as
|
|
MCP HTTP endpoint.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Stdio MCP payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.MCPStdioRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.MCPStdioResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create MCP stdio proxy
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/mcp-stdio/{connection_id}:
|
|
post:
|
|
description: Proxies MCP JSON-RPC requests to a stdio MCP process in the container.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Connection ID
|
|
in: path
|
|
name: connection_id
|
|
required: true
|
|
type: string
|
|
- description: JSON-RPC request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
description: 'JSON-RPC response: {jsonrpc,id,result|error}'
|
|
schema:
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: MCP stdio proxy (JSON-RPC)
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/mcp/{id}:
|
|
delete:
|
|
description: Delete a MCP connection by ID
|
|
parameters:
|
|
- description: MCP ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete MCP connection
|
|
tags:
|
|
- mcp
|
|
get:
|
|
description: Get a MCP connection by ID
|
|
parameters:
|
|
- description: MCP ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/github_com_memohai_memoh_internal_mcp.Connection'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get MCP connection
|
|
tags:
|
|
- mcp
|
|
put:
|
|
description: Update a MCP connection by ID
|
|
parameters:
|
|
- description: MCP ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: MCP payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/mcp.UpsertRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/github_com_memohai_memoh_internal_mcp.Connection'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update MCP connection
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/oauth/authorize:
|
|
post:
|
|
description: Generate PKCE and return authorization URL for the user to authorize
|
|
parameters:
|
|
- description: MCP connection ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Optional client_id
|
|
in: body
|
|
name: payload
|
|
schema:
|
|
$ref: '#/definitions/handlers.oauthAuthorizeRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.AuthorizeResult'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Start OAuth authorization flow
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/oauth/discover:
|
|
post:
|
|
description: Probe MCP server URL for OAuth requirements and discover authorization
|
|
server metadata
|
|
parameters:
|
|
- description: MCP connection ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Optional URL override
|
|
in: body
|
|
name: payload
|
|
schema:
|
|
$ref: '#/definitions/handlers.oauthDiscoverRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.DiscoveryResult'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Discover OAuth configuration for MCP server
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/oauth/exchange:
|
|
post:
|
|
description: Frontend callback page calls this to exchange the authorization
|
|
code for access/refresh tokens
|
|
parameters:
|
|
- description: Authorization code and state
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.oauthExchangeRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: boolean
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Exchange OAuth authorization code for tokens
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/oauth/status:
|
|
get:
|
|
description: Returns the current OAuth status including whether tokens are available
|
|
parameters:
|
|
- description: MCP connection ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.OAuthStatus'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get OAuth status for MCP connection
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/oauth/token:
|
|
delete:
|
|
description: Clears stored OAuth tokens
|
|
parameters:
|
|
- description: MCP connection ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Revoke OAuth tokens for MCP connection
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/{id}/probe:
|
|
post:
|
|
description: Probe a MCP connection to discover tools and verify connectivity
|
|
parameters:
|
|
- description: MCP connection ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.ProbeResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Probe MCP connection
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/export:
|
|
get:
|
|
description: Export all MCP connections for a bot in standard mcpServers format.
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.ExportResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Export MCP connections
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/mcp/import:
|
|
put:
|
|
description: Batch import MCP connections from standard mcpServers format. Existing
|
|
connections (matched by name) get config updated with is_active preserved.
|
|
New connections are created as active.
|
|
parameters:
|
|
- description: mcpServers dict
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/mcp.ImportRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/mcp.ListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Import MCP connections
|
|
tags:
|
|
- mcp
|
|
/bots/{bot_id}/memory:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Delete specific memories by IDs, or delete all memories if no IDs
|
|
are provided
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: 'Optional: specify memory_ids to delete; if omitted, deletes
|
|
all'
|
|
in: body
|
|
name: payload
|
|
schema:
|
|
$ref: '#/definitions/handlers.memoryDeletePayload'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.DeleteResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete memories
|
|
tags:
|
|
- memory
|
|
get:
|
|
description: List all memories in the bot-shared namespace
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Skip optional stats in memory search response
|
|
in: query
|
|
name: no_stats
|
|
type: boolean
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.SearchResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get all memories
|
|
tags:
|
|
- memory
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Add memory into the bot-shared namespace
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Memory add payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.memoryAddPayload'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.SearchResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Add memory
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/{id}:
|
|
delete:
|
|
description: Delete a single memory by its ID
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Memory ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.DeleteResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete a single memory
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/compact:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: |-
|
|
Consolidate memories by merging similar/redundant entries using LLM.
|
|
|
|
**ratio** (required, range (0,1]):
|
|
- 0.8 = light compression, mostly dedup, keep ~80% of entries
|
|
- 0.5 = moderate compression, merge similar facts, keep ~50%
|
|
- 0.3 = aggressive compression, heavily consolidate, keep ~30%
|
|
|
|
**decay_days** (optional): enable time decay — memories older than N days are treated as low priority and more likely to be merged/dropped.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: ratio (0,1] required; decay_days optional
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.memoryCompactPayload'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.CompactResult'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Compact memories
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/rebuild:
|
|
post:
|
|
description: Read memory files from the container filesystem (source of truth)
|
|
and restore missing entries to memory storage
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.RebuildResult'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"409":
|
|
description: Conflict
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Rebuild memories from filesystem
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/search:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Search memory in the bot-shared namespace
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Memory search payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.memorySearchPayload'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.SearchResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Search memory
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/status:
|
|
get:
|
|
description: Get the resolved memory runtime status for a bot, including index
|
|
health and source counts
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.MemoryStatusResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"409":
|
|
description: Conflict
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get memory runtime status
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/memory/usage:
|
|
get:
|
|
description: Query the estimated storage usage of current memories
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.UsageResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"503":
|
|
description: Service Unavailable
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get memory usage
|
|
tags:
|
|
- memory
|
|
/bots/{bot_id}/messages:
|
|
delete:
|
|
description: Clear all persisted bot-level history messages
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete all bot history messages
|
|
tags:
|
|
- messages
|
|
get:
|
|
description: List messages for a bot history with optional pagination
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- description: Before
|
|
in: query
|
|
name: before
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
items:
|
|
$ref: '#/definitions/message.Message'
|
|
type: array
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List bot history messages
|
|
tags:
|
|
- messages
|
|
/bots/{bot_id}/schedule:
|
|
get:
|
|
description: List schedules for current user
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/schedule.ListResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List schedules
|
|
tags:
|
|
- schedule
|
|
post:
|
|
description: Create a schedule for current user
|
|
parameters:
|
|
- description: Schedule payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/schedule.CreateRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/schedule.Schedule'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create schedule
|
|
tags:
|
|
- schedule
|
|
/bots/{bot_id}/schedule/{id}:
|
|
delete:
|
|
description: Delete a schedule by ID
|
|
parameters:
|
|
- description: Schedule ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete schedule
|
|
tags:
|
|
- schedule
|
|
get:
|
|
description: Get a schedule by ID
|
|
parameters:
|
|
- description: Schedule ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/schedule.Schedule'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get schedule
|
|
tags:
|
|
- schedule
|
|
put:
|
|
description: Update a schedule by ID
|
|
parameters:
|
|
- description: Schedule ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Schedule payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/schedule.UpdateRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/schedule.Schedule'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update schedule
|
|
tags:
|
|
- schedule
|
|
/bots/{bot_id}/schedule/{id}/logs:
|
|
get:
|
|
description: List execution logs for a specific schedule
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Schedule ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- default: 50
|
|
description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/schedule.ListLogsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List schedule logs by schedule
|
|
tags:
|
|
- schedule
|
|
/bots/{bot_id}/schedule/logs:
|
|
delete:
|
|
description: Delete all schedule execution logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete schedule logs
|
|
tags:
|
|
- schedule
|
|
get:
|
|
description: List schedule execution logs for a bot
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- default: 50
|
|
description: Limit
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/schedule.ListLogsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List schedule logs
|
|
tags:
|
|
- schedule
|
|
/bots/{bot_id}/sessions:
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
items:
|
|
$ref: '#/definitions/session.Session'
|
|
type: array
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List bot sessions
|
|
tags:
|
|
- sessions
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session data
|
|
in: body
|
|
name: body
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.createSessionRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/session.Session'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a new chat session
|
|
tags:
|
|
- sessions
|
|
/bots/{bot_id}/sessions/{session_id}:
|
|
delete:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session ID
|
|
in: path
|
|
name: session_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Soft-delete a session
|
|
tags:
|
|
- sessions
|
|
get:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session ID
|
|
in: path
|
|
name: session_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/session.Session'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a session by ID
|
|
tags:
|
|
- sessions
|
|
patch:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session ID
|
|
in: path
|
|
name: session_id
|
|
required: true
|
|
type: string
|
|
- description: Fields to update
|
|
in: body
|
|
name: body
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.updateSessionRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/session.Session'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a session
|
|
tags:
|
|
- sessions
|
|
/bots/{bot_id}/sessions/{session_id}/compact:
|
|
post:
|
|
description: Run context compaction synchronously for a session
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session ID
|
|
in: path
|
|
name: session_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.TriggerCompactResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Trigger immediate context compaction
|
|
tags:
|
|
- compaction
|
|
/bots/{bot_id}/sessions/{session_id}/status:
|
|
get:
|
|
description: Get aggregated info for a chat session including message count,
|
|
context usage, cache stats, and used skills
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Session ID
|
|
in: path
|
|
name: session_id
|
|
required: true
|
|
type: string
|
|
- description: Optional model UUID override for context window
|
|
in: query
|
|
name: model_id
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SessionInfoResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get session info
|
|
tags:
|
|
- sessions
|
|
/bots/{bot_id}/settings:
|
|
delete:
|
|
description: Remove agent settings for current user
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete user settings
|
|
tags:
|
|
- settings
|
|
get:
|
|
description: Get agent settings for current user
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/settings.Settings'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get user settings
|
|
tags:
|
|
- settings
|
|
post:
|
|
description: Update or create agent settings for current user
|
|
parameters:
|
|
- description: Settings payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/settings.UpsertRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/settings.Settings'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update user settings
|
|
tags:
|
|
- settings
|
|
put:
|
|
description: Update or create agent settings for current user
|
|
parameters:
|
|
- description: Settings payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/settings.UpsertRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/settings.Settings'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update user settings
|
|
tags:
|
|
- settings
|
|
/bots/{bot_id}/supermarket/install-mcp:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Install MCP request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.InstallMcpRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/github_com_memohai_memoh_internal_mcp.Connection'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Install MCP from supermarket to bot
|
|
tags:
|
|
- supermarket
|
|
/bots/{bot_id}/supermarket/install-skill:
|
|
post:
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Install skill request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.InstallSkillRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: boolean
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Install skill from supermarket to bot container
|
|
tags:
|
|
- supermarket
|
|
/bots/{bot_id}/token-usage:
|
|
get:
|
|
description: Get daily aggregated token usage for a bot, split by chat, heartbeat,
|
|
and schedule session types, with optional model filter and per-model breakdown
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Start date (YYYY-MM-DD)
|
|
in: query
|
|
name: from
|
|
required: true
|
|
type: string
|
|
- description: End date exclusive (YYYY-MM-DD)
|
|
in: query
|
|
name: to
|
|
required: true
|
|
type: string
|
|
- description: Optional model UUID to filter by
|
|
in: query
|
|
name: model_id
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.TokenUsageResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get token usage statistics
|
|
tags:
|
|
- token-usage
|
|
/bots/{bot_id}/token-usage/records:
|
|
get:
|
|
description: Paginated list of individual LLM call records (assistant messages
|
|
with usage) for a bot, with optional model and session type filters
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Start date (YYYY-MM-DD)
|
|
in: query
|
|
name: from
|
|
required: true
|
|
type: string
|
|
- description: End date exclusive (YYYY-MM-DD)
|
|
in: query
|
|
name: to
|
|
required: true
|
|
type: string
|
|
- description: Optional model UUID to filter by
|
|
in: query
|
|
name: model_id
|
|
type: string
|
|
- description: 'Optional session type: chat, heartbeat, or schedule'
|
|
in: query
|
|
name: session_type
|
|
type: string
|
|
- description: Page size (default 20, max 100)
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- default: 0
|
|
description: Offset
|
|
in: query
|
|
name: offset
|
|
type: integer
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.TokenUsageRecordsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List per-call token usage records
|
|
tags:
|
|
- token-usage
|
|
/bots/{bot_id}/tools:
|
|
post:
|
|
description: MCP endpoint for tool discovery and invocation.
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: JSON-RPC request
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
type: object
|
|
responses:
|
|
"200":
|
|
description: 'JSON-RPC response: {jsonrpc,id,result|error}'
|
|
schema:
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Unified MCP tools gateway
|
|
tags:
|
|
- containerd
|
|
/bots/{bot_id}/tts/synthesize:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Stream-synthesize text using the bot's configured TTS model, write
|
|
to temp file
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: bot_id
|
|
required: true
|
|
type: string
|
|
- description: Text to synthesize
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/handlers.synthesizeRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.synthesizeResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Synthesize speech for a bot
|
|
tags:
|
|
- bots
|
|
/bots/{id}:
|
|
delete:
|
|
description: Delete a bot user (owner/admin only)
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"202":
|
|
description: Accepted
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete bot
|
|
tags:
|
|
- bots
|
|
get:
|
|
description: Get a bot by ID (owner/admin only)
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/bots.Bot'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get bot details
|
|
tags:
|
|
- bots
|
|
put:
|
|
description: Update bot profile (owner/admin only)
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Bot update payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/bots.UpdateBotRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/bots.Bot'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update bot details
|
|
tags:
|
|
- bots
|
|
/bots/{id}/channel/{platform}:
|
|
delete:
|
|
description: Remove bot channel configuration
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete bot channel config
|
|
tags:
|
|
- bots
|
|
get:
|
|
description: Get bot channel configuration
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/channel.ChannelConfig'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get bot channel config
|
|
tags:
|
|
- bots
|
|
put:
|
|
description: Update bot channel configuration
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
- description: Channel config payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/channel.UpsertConfigRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/channel.ChannelConfig'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update bot channel config
|
|
tags:
|
|
- bots
|
|
/bots/{id}/channel/{platform}/send:
|
|
post:
|
|
description: Send a message using bot channel configuration
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
- description: Send payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/channel.SendRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Send message via bot channel
|
|
tags:
|
|
- bots
|
|
/bots/{id}/channel/{platform}/send_chat:
|
|
post:
|
|
description: Send a message using a session-scoped token (reply only)
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
- description: Send payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/channel.SendRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Send message via bot channel session token
|
|
tags:
|
|
- bots
|
|
/bots/{id}/channel/{platform}/status:
|
|
patch:
|
|
description: Update bot channel enabled/disabled status
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
- description: Channel status payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/channel.UpdateChannelStatusRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/channel.ChannelConfig'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update bot channel status
|
|
tags:
|
|
- bots
|
|
/bots/{id}/checks:
|
|
get:
|
|
description: Evaluate bot attached resource checks in runtime
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/bots.ListChecksResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List bot runtime checks
|
|
tags:
|
|
- bots
|
|
/bots/{id}/owner:
|
|
put:
|
|
description: Transfer bot ownership to another human user
|
|
parameters:
|
|
- description: Bot ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Transfer payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/bots.TransferBotRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/bots.Bot'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Transfer bot owner (admin only)
|
|
tags:
|
|
- bots
|
|
/browser-contexts:
|
|
get:
|
|
description: List all browser context configurations
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/browsercontexts.BrowserContext'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List browser contexts
|
|
tags:
|
|
- browser-contexts
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a browser context configuration
|
|
parameters:
|
|
- description: Browser context configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/browsercontexts.CreateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/browsercontexts.BrowserContext'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a browser context
|
|
tags:
|
|
- browser-contexts
|
|
/browser-contexts/{id}:
|
|
delete:
|
|
description: Delete browser context by ID
|
|
parameters:
|
|
- description: Browser Context ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete a browser context
|
|
tags:
|
|
- browser-contexts
|
|
get:
|
|
description: Get browser context by ID
|
|
parameters:
|
|
- description: Browser Context ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/browsercontexts.BrowserContext'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a browser context
|
|
tags:
|
|
- browser-contexts
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update browser context by ID
|
|
parameters:
|
|
- description: Browser Context ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/browsercontexts.UpdateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/browsercontexts.BrowserContext'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a browser context
|
|
tags:
|
|
- browser-contexts
|
|
/browser-contexts/cores:
|
|
get:
|
|
description: Get the list of browser cores available in the Browser Gateway
|
|
container
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.BrowserCoresResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get available browser cores
|
|
tags:
|
|
- browser-contexts
|
|
/channels:
|
|
get:
|
|
description: List channel meta information including capabilities and schemas
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/handlers.ChannelMeta'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List channel capabilities and schemas
|
|
tags:
|
|
- channel
|
|
/channels/{platform}:
|
|
get:
|
|
description: Get channel meta information including capabilities and schemas
|
|
parameters:
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.ChannelMeta'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get channel capabilities and schemas
|
|
tags:
|
|
- channel
|
|
/email-providers:
|
|
get:
|
|
parameters:
|
|
- description: Provider type filter
|
|
in: query
|
|
name: provider
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/email.ProviderResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List email providers
|
|
tags:
|
|
- email-providers
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Email provider configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/email.CreateProviderRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/email.ProviderResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create an email provider
|
|
tags:
|
|
- email-providers
|
|
/email-providers/{id}:
|
|
delete:
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete an email provider
|
|
tags:
|
|
- email-providers
|
|
get:
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/email.ProviderResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get an email provider
|
|
tags:
|
|
- email-providers
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/email.UpdateProviderRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/email.ProviderResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update an email provider
|
|
tags:
|
|
- email-providers
|
|
/email-providers/{id}/oauth/authorize:
|
|
get:
|
|
description: Returns the authorization URL to redirect the user to
|
|
parameters:
|
|
- description: Email provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Start OAuth2 authorization for an email provider
|
|
tags:
|
|
- email-oauth
|
|
/email-providers/{id}/oauth/status:
|
|
get:
|
|
parameters:
|
|
- description: Email provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.emailOAuthStatusResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get OAuth2 status for an email provider
|
|
tags:
|
|
- email-oauth
|
|
/email-providers/{id}/oauth/token:
|
|
delete:
|
|
parameters:
|
|
- description: Email provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Revoke stored OAuth2 tokens for an email provider
|
|
tags:
|
|
- email-oauth
|
|
/email-providers/meta:
|
|
get:
|
|
description: List available email provider types and config schemas
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/email.ProviderMeta'
|
|
type: array
|
|
summary: List email provider metadata
|
|
tags:
|
|
- email-providers
|
|
/email/mailgun/webhook/{config_id}:
|
|
post:
|
|
description: Receives inbound emails from Mailgun
|
|
parameters:
|
|
- description: Email provider config ID
|
|
in: path
|
|
name: config_id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Mailgun inbound email webhook
|
|
tags:
|
|
- email-webhook
|
|
/email/oauth/callback:
|
|
get:
|
|
description: Handles the OAuth2 callback, exchanges the code for tokens
|
|
parameters:
|
|
- description: Authorization code
|
|
in: query
|
|
name: code
|
|
required: true
|
|
type: string
|
|
- description: State parameter
|
|
in: query
|
|
name: state
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: OAuth2 callback for email providers
|
|
tags:
|
|
- email-oauth
|
|
/memory-providers:
|
|
get:
|
|
description: List configured memory providers
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/adapters.ProviderGetResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List memory providers
|
|
tags:
|
|
- memory-providers
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a memory provider configuration
|
|
parameters:
|
|
- description: Memory provider configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderCreateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderGetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a memory provider
|
|
tags:
|
|
- memory-providers
|
|
/memory-providers/{id}:
|
|
delete:
|
|
description: Delete memory provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete a memory provider
|
|
tags:
|
|
- memory-providers
|
|
get:
|
|
description: Get memory provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderGetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a memory provider
|
|
tags:
|
|
- memory-providers
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update memory provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderUpdateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderGetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a memory provider
|
|
tags:
|
|
- memory-providers
|
|
/memory-providers/{id}/status:
|
|
get:
|
|
description: Get runtime status data for a memory provider
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/adapters.ProviderStatusResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get memory provider status
|
|
tags:
|
|
- memory-providers
|
|
/memory-providers/meta:
|
|
get:
|
|
description: List available memory provider types and config schemas
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/adapters.ProviderMeta'
|
|
type: array
|
|
summary: List memory provider metadata
|
|
tags:
|
|
- memory-providers
|
|
/models:
|
|
get:
|
|
description: Get a list of all configured models, optionally filtered by type
|
|
or provider client type
|
|
parameters:
|
|
- description: Model type (chat, embedding)
|
|
in: query
|
|
name: type
|
|
type: string
|
|
- description: Provider client type (openai-responses, openai-completions, anthropic-messages,
|
|
google-generative-ai)
|
|
in: query
|
|
name: client_type
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
type: array
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List all models
|
|
tags:
|
|
- models
|
|
post:
|
|
description: Create a new model configuration
|
|
parameters:
|
|
- description: Model configuration
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.AddRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/models.AddResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a new model
|
|
tags:
|
|
- models
|
|
/models/{id}:
|
|
delete:
|
|
description: Delete a model configuration by its internal UUID
|
|
parameters:
|
|
- description: Model internal ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete model by internal ID
|
|
tags:
|
|
- models
|
|
get:
|
|
description: Get a model configuration by its internal UUID
|
|
parameters:
|
|
- description: Model internal ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get model by internal ID
|
|
tags:
|
|
- models
|
|
put:
|
|
description: Update a model configuration by its internal UUID
|
|
parameters:
|
|
- description: Model internal ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated model configuration
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.UpdateRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update model by internal ID
|
|
tags:
|
|
- models
|
|
/models/{id}/test:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Probe a model's provider endpoint using the model's real model_id
|
|
and client_type to verify configuration
|
|
parameters:
|
|
- description: Model internal ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.TestResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Test model connectivity
|
|
tags:
|
|
- models
|
|
/models/count:
|
|
get:
|
|
description: Get the total count of models, optionally filtered by type
|
|
parameters:
|
|
- description: Model type (chat, embedding)
|
|
in: query
|
|
name: type
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.CountResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get model count
|
|
tags:
|
|
- models
|
|
/models/model/{modelId}:
|
|
delete:
|
|
description: Delete a model configuration by its model_id field (e.g., gpt-4)
|
|
parameters:
|
|
- description: Model ID (e.g., gpt-4)
|
|
in: path
|
|
name: modelId
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete model by model ID
|
|
tags:
|
|
- models
|
|
get:
|
|
description: Get a model configuration by its model_id field (e.g., gpt-4)
|
|
parameters:
|
|
- description: Model ID (e.g., gpt-4)
|
|
in: path
|
|
name: modelId
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get model by model ID
|
|
tags:
|
|
- models
|
|
put:
|
|
description: Update a model configuration by its model_id field (e.g., gpt-4)
|
|
parameters:
|
|
- description: Model ID (e.g., gpt-4)
|
|
in: path
|
|
name: modelId
|
|
required: true
|
|
type: string
|
|
- description: Updated model configuration
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/models.UpdateRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update model by model ID
|
|
tags:
|
|
- models
|
|
/ping:
|
|
get:
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.PingResponse'
|
|
summary: Health check with server capabilities
|
|
tags:
|
|
- system
|
|
/providers:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a list of all configured LLM providers
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/providers.GetResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List all LLM providers
|
|
tags:
|
|
- providers
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a new LLM provider configuration
|
|
parameters:
|
|
- description: Provider configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/providers.CreateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/providers.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a new LLM provider
|
|
tags:
|
|
- providers
|
|
/providers/{id}:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Delete a provider configuration
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete provider
|
|
tags:
|
|
- providers
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a provider configuration by its ID
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get provider by ID
|
|
tags:
|
|
- providers
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update an existing provider configuration
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated provider configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/providers.UpdateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update provider
|
|
tags:
|
|
- providers
|
|
/providers/{id}/import-models:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Fetch models from provider's /v1/models endpoint and import them
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.ImportModelsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Import models from provider
|
|
tags:
|
|
- providers
|
|
/providers/{id}/models:
|
|
get:
|
|
description: Get models for a provider by id, optionally filtered by type
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Model type (chat, embedding)
|
|
in: query
|
|
name: type
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/models.GetResponse'
|
|
type: array
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List provider models
|
|
tags:
|
|
- providers
|
|
/providers/{id}/oauth/authorize:
|
|
get:
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.OAuthAuthorizeResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Start OAuth2 authorization for an LLM provider
|
|
tags:
|
|
- providers-oauth
|
|
/providers/{id}/oauth/poll:
|
|
post:
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.OAuthStatus'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Poll OAuth device authorization for an LLM provider
|
|
tags:
|
|
- providers-oauth
|
|
/providers/{id}/oauth/status:
|
|
get:
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.OAuthStatus'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get OAuth2 status for an LLM provider
|
|
tags:
|
|
- providers-oauth
|
|
/providers/{id}/oauth/token:
|
|
delete:
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Revoke stored OAuth2 tokens for an LLM provider
|
|
tags:
|
|
- providers-oauth
|
|
/providers/{id}/test:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Probe a provider's base URL to check reachability, supported client
|
|
types, and embedding support
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.TestResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Test provider connectivity
|
|
tags:
|
|
- providers
|
|
/providers/count:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get the total count of providers
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.CountResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Count providers
|
|
tags:
|
|
- providers
|
|
/providers/name/{name}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a provider configuration by its name
|
|
parameters:
|
|
- description: Provider name
|
|
in: path
|
|
name: name
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/providers.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get provider by name
|
|
tags:
|
|
- providers
|
|
/providers/oauth/callback:
|
|
get:
|
|
parameters:
|
|
- description: Authorization code
|
|
in: query
|
|
name: code
|
|
required: true
|
|
type: string
|
|
- description: State parameter
|
|
in: query
|
|
name: state
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: HTML success page
|
|
schema:
|
|
type: string
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: OAuth2 callback for LLM providers
|
|
tags:
|
|
- providers-oauth
|
|
/search-providers:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: List configured search providers
|
|
parameters:
|
|
- description: Provider filter (brave)
|
|
in: query
|
|
name: provider
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/searchproviders.GetResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List search providers
|
|
tags:
|
|
- search-providers
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a search provider configuration
|
|
parameters:
|
|
- description: Search provider configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/searchproviders.CreateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/searchproviders.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create a search provider
|
|
tags:
|
|
- search-providers
|
|
/search-providers/{id}:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Delete search provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Delete a search provider
|
|
tags:
|
|
- search-providers
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get search provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/searchproviders.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a search provider
|
|
tags:
|
|
- search-providers
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update search provider by ID
|
|
parameters:
|
|
- description: Provider ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Updated configuration
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/searchproviders.UpdateRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/searchproviders.GetResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a search provider
|
|
tags:
|
|
- search-providers
|
|
/search-providers/meta:
|
|
get:
|
|
description: List available search provider types and config schemas
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/searchproviders.ProviderMeta'
|
|
type: array
|
|
summary: List search provider metadata
|
|
tags:
|
|
- search-providers
|
|
/speech-models:
|
|
get:
|
|
description: List all models of type 'speech' (filtered view of unified models
|
|
table)
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.SpeechModelResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List all speech models
|
|
tags:
|
|
- speech-models
|
|
/speech-models/{id}:
|
|
get:
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.SpeechModelResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a speech model
|
|
tags:
|
|
- speech-models
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Model update payload
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/audio.UpdateSpeechModelRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.SpeechModelResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a speech model
|
|
tags:
|
|
- speech-models
|
|
/speech-models/{id}/capabilities:
|
|
get:
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.ModelCapabilities'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get speech model capabilities
|
|
tags:
|
|
- speech-models
|
|
/speech-models/{id}/test:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Synthesize text using a specific model's config and return audio
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Text to synthesize
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/audio.TestSynthesizeRequest'
|
|
produces:
|
|
- application/octet-stream
|
|
responses:
|
|
"200":
|
|
description: Audio data
|
|
schema:
|
|
type: file
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Test speech model synthesis
|
|
tags:
|
|
- speech-models
|
|
/speech-providers:
|
|
get:
|
|
description: List providers that support speech (filtered view of unified providers
|
|
table)
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.SpeechProviderResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List speech providers
|
|
tags:
|
|
- speech-providers
|
|
/speech-providers/{id}:
|
|
get:
|
|
description: Get a speech provider with masked config values
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.SpeechProviderResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get speech provider
|
|
tags:
|
|
- speech-providers
|
|
/speech-providers/{id}/import-models:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Fetch models using the configured speech provider and import them
|
|
into the unified models table
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.ImportModelsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Import speech models from provider
|
|
tags:
|
|
- speech-providers
|
|
/speech-providers/{id}/models:
|
|
get:
|
|
description: List models of type 'speech' for a specific speech provider
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.SpeechModelResponse'
|
|
type: array
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List speech models by provider
|
|
tags:
|
|
- speech-providers
|
|
/speech-providers/meta:
|
|
get:
|
|
description: List available speech provider types with their models and capabilities
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.ProviderMetaResponse'
|
|
type: array
|
|
summary: List speech provider metadata
|
|
tags:
|
|
- speech-providers
|
|
/supermarket/mcps:
|
|
get:
|
|
parameters:
|
|
- description: Search query
|
|
in: query
|
|
name: q
|
|
type: string
|
|
- description: Filter by tag
|
|
in: query
|
|
name: tag
|
|
type: string
|
|
- description: Filter by transport type
|
|
in: query
|
|
name: transport
|
|
type: string
|
|
- description: Page number
|
|
in: query
|
|
name: page
|
|
type: integer
|
|
- description: Items per page
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SupermarketMcpListResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List MCPs from supermarket
|
|
tags:
|
|
- supermarket
|
|
/supermarket/mcps/{id}:
|
|
get:
|
|
parameters:
|
|
- description: MCP ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SupermarketMcpEntry'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get MCP detail from supermarket
|
|
tags:
|
|
- supermarket
|
|
/supermarket/skills:
|
|
get:
|
|
parameters:
|
|
- description: Search query
|
|
in: query
|
|
name: q
|
|
type: string
|
|
- description: Filter by tag
|
|
in: query
|
|
name: tag
|
|
type: string
|
|
- description: Page number
|
|
in: query
|
|
name: page
|
|
type: integer
|
|
- description: Items per page
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SupermarketSkillListResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List skills from supermarket
|
|
tags:
|
|
- supermarket
|
|
/supermarket/skills/{id}:
|
|
get:
|
|
parameters:
|
|
- description: Skill ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SupermarketSkillEntry'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get skill detail from supermarket
|
|
tags:
|
|
- supermarket
|
|
/supermarket/tags:
|
|
get:
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.SupermarketTagsResponse'
|
|
"502":
|
|
description: Bad Gateway
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List all tags from supermarket
|
|
tags:
|
|
- supermarket
|
|
/transcription-models:
|
|
get:
|
|
description: List all models of type 'transcription' (filtered view of unified
|
|
models table)
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.TranscriptionModelResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List all transcription models
|
|
tags:
|
|
- transcription-models
|
|
/transcription-models/{id}:
|
|
get:
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.TranscriptionModelResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get a transcription model
|
|
tags:
|
|
- transcription-models
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Model update payload
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/audio.UpdateSpeechModelRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.TranscriptionModelResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update a transcription model
|
|
tags:
|
|
- transcription-models
|
|
/transcription-models/{id}/capabilities:
|
|
get:
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.ModelCapabilities'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get transcription model capabilities
|
|
tags:
|
|
- transcription-models
|
|
/transcription-models/{id}/test:
|
|
post:
|
|
consumes:
|
|
- multipart/form-data
|
|
description: Transcribe uploaded audio using a specific model's config and return
|
|
structured text output
|
|
parameters:
|
|
- description: Model ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Audio file
|
|
in: formData
|
|
name: file
|
|
required: true
|
|
type: file
|
|
- description: Optional JSON config
|
|
in: formData
|
|
name: config
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.TestTranscriptionResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Test transcription model recognition
|
|
tags:
|
|
- transcription-models
|
|
/transcription-providers:
|
|
get:
|
|
description: List providers that support transcription (filtered view of unified
|
|
providers table)
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.SpeechProviderResponse'
|
|
type: array
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List transcription providers
|
|
tags:
|
|
- transcription-providers
|
|
/transcription-providers/{id}:
|
|
get:
|
|
description: Get a speech provider with masked config values
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.SpeechProviderResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get speech provider
|
|
tags:
|
|
- speech-providers
|
|
/transcription-providers/{id}/import-models:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Fetch models using the configured transcription provider and import
|
|
them into the unified models table
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/audio.ImportModelsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Import transcription models from provider
|
|
tags:
|
|
- transcription-providers
|
|
/transcription-providers/{id}/models:
|
|
get:
|
|
description: List models of type 'transcription' for a specific transcription
|
|
provider
|
|
parameters:
|
|
- description: Provider ID (UUID)
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.TranscriptionModelResponse'
|
|
type: array
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List transcription models by provider
|
|
tags:
|
|
- transcription-providers
|
|
/transcription-providers/meta:
|
|
get:
|
|
description: List available transcription provider types with their models and
|
|
capabilities
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/audio.ProviderMetaResponse'
|
|
type: array
|
|
summary: List transcription provider metadata
|
|
tags:
|
|
- transcription-providers
|
|
/users:
|
|
get:
|
|
description: List users
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/accounts.ListAccountsResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List users (admin only)
|
|
tags:
|
|
- users
|
|
post:
|
|
description: Create a new human user account
|
|
parameters:
|
|
- description: User payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/accounts.CreateAccountRequest'
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/accounts.Account'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Create human user (admin only)
|
|
tags:
|
|
- users
|
|
/users/{id}:
|
|
get:
|
|
description: Get user details (self or admin only)
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/accounts.Account'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get user by ID
|
|
tags:
|
|
- users
|
|
put:
|
|
description: Update user profile and status
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: User update payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/accounts.UpdateAccountRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/accounts.Account'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update user (admin only)
|
|
tags:
|
|
- users
|
|
/users/{id}/password:
|
|
put:
|
|
description: Reset a user password
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Password payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/accounts.ResetPasswordRequest'
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Reset user password (admin only)
|
|
tags:
|
|
- users
|
|
/users/me:
|
|
get:
|
|
description: Get current user profile
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/accounts.Account'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get current user
|
|
tags:
|
|
- users
|
|
put:
|
|
description: Update current user display name or avatar
|
|
parameters:
|
|
- description: Profile payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/accounts.UpdateProfileRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/accounts.Account'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update current user profile
|
|
tags:
|
|
- users
|
|
/users/me/channels/{platform}:
|
|
get:
|
|
description: Get channel binding configuration for current user
|
|
parameters:
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/channel.ChannelIdentityBinding'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Get channel user config
|
|
tags:
|
|
- channel
|
|
put:
|
|
description: Update channel binding configuration for current user
|
|
parameters:
|
|
- description: Channel platform
|
|
in: path
|
|
name: platform
|
|
required: true
|
|
type: string
|
|
- description: Channel user config payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/channel.UpsertChannelIdentityConfigRequest'
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/channel.ChannelIdentityBinding'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update channel user config
|
|
tags:
|
|
- channel
|
|
/users/me/identities:
|
|
get:
|
|
description: List all channel identities linked to current user
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/handlers.listMyIdentitiesResponse'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: List current user's channel identities
|
|
tags:
|
|
- users
|
|
/users/me/password:
|
|
put:
|
|
description: Update current user password with current password check
|
|
parameters:
|
|
- description: Password payload
|
|
in: body
|
|
name: payload
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/accounts.UpdatePasswordRequest'
|
|
responses:
|
|
"204":
|
|
description: No Content
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
"500":
|
|
description: Internal Server Error
|
|
schema:
|
|
$ref: '#/definitions/handlers.ErrorResponse'
|
|
summary: Update current user password
|
|
tags:
|
|
- users
|
|
swagger: "2.0"
|