chore(repo): reinitialize repository

This commit is contained in:
2026-03-18 11:29:54 +08:00
commit 24871e213a
288 changed files with 44369 additions and 0 deletions
+144
View File
@@ -0,0 +1,144 @@
package role
import (
"encoding/json"
"errors"
"fmt"
"strings"
)
type ExecutorKind string
const (
ExecutorKindCodex ExecutorKind = "codex"
ExecutorKindHuman ExecutorKind = "human"
)
type PromptKind string
const (
PromptSystem PromptKind = "system"
)
type Definition struct {
Name string `json:"name"`
Title string `json:"title"`
ExecutorKind ExecutorKind `json:"executor_kind"`
Description string `json:"description"`
IsEnabled bool `json:"is_enabled"`
IsBuiltin bool `json:"is_builtin"`
SortOrder int `json:"sort_order"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
func (d Definition) Validate() error {
if d.Name == "" {
return errors.New("role name is required")
}
if d.Title == "" {
return errors.New("role title is required")
}
switch d.ExecutorKind {
case ExecutorKindCodex, ExecutorKindHuman:
default:
return fmt.Errorf("invalid role executor kind %q", d.ExecutorKind)
}
if d.Name == "user" && d.ExecutorKind != ExecutorKindHuman {
return fmt.Errorf("user role must use human executor")
}
return nil
}
func DefaultExecutorKind(roleName string) ExecutorKind {
if roleName == "user" {
return ExecutorKindHuman
}
return ExecutorKindCodex
}
func NormalizeDefinition(value Definition) Definition {
if value.ExecutorKind == "" {
value.ExecutorKind = DefaultExecutorKind(value.Name)
}
return value
}
type Config struct {
RoleName string `json:"role_name"`
ConfigTOML string `json:"config_toml"`
AuthJSON string `json:"auth_json"`
}
func (c Config) Validate() error {
if strings.TrimSpace(c.RoleName) == "" {
return errors.New("role name is required")
}
if strings.TrimSpace(c.AuthJSON) == "" {
return nil
}
if !json.Valid([]byte(c.AuthJSON)) {
return fmt.Errorf("role auth_json must be valid json")
}
return nil
}
func NormalizeConfig(value Config) Config {
value.RoleName = strings.TrimSpace(value.RoleName)
value.ConfigTOML = strings.TrimSpace(value.ConfigTOML)
if strings.TrimSpace(value.AuthJSON) == "" {
value.AuthJSON = "{}"
}
return value
}
type Prompt struct {
ID string `json:"id"`
RoleName string `json:"role_name"`
WorkspaceID string `json:"workspace_id,omitempty"`
PromptKind PromptKind `json:"prompt_kind"`
ContentMarkdown string `json:"content_markdown"`
Version int `json:"version"`
UpdatedBy string `json:"updated_by"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
func (p Prompt) Validate() error {
if p.RoleName == "" {
return errors.New("role name is required")
}
if p.ContentMarkdown == "" {
return errors.New("prompt content is required")
}
switch p.PromptKind {
case PromptSystem:
default:
return fmt.Errorf("invalid prompt kind %q", p.PromptKind)
}
return nil
}
type SkillBinding struct {
ID string `json:"id"`
RoleName string `json:"role_name"`
WorkspaceID string `json:"workspace_id,omitempty"`
SkillID string `json:"skill_id"`
IsEnabled bool `json:"is_enabled"`
SortOrder int `json:"sort_order"`
Config map[string]any `json:"config,omitempty"`
Version int `json:"version"`
UpdatedBy string `json:"updated_by"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
}
func (b SkillBinding) Validate() error {
if b.RoleName == "" {
return errors.New("role name is required")
}
if b.SkillID == "" {
return errors.New("skill id is required")
}
return nil
}