From 5bb8d6769ec390c5ee8c847188232d0fcf54e02f Mon Sep 17 00:00:00 2001 From: Max Date: Mon, 15 Dec 2025 17:50:28 +0800 Subject: [PATCH 1/7] Enhance GPT-5 Vision Test to Handle Multimodal Content - Updated the TestGPT5Vision function to support various content types in responses, including strings and slices of ContentPart. - Implemented logic to concatenate text from multimodal responses, improving the robustness of image description handling. - Added logging for cases where content is nil or of unexpected types, enhancing test feedback and debugging capabilities. --- agent/llm/providers/openai/gpt5_test.go | 34 ++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/agent/llm/providers/openai/gpt5_test.go b/agent/llm/providers/openai/gpt5_test.go index f0d4f9cb..87b5e14c 100644 --- a/agent/llm/providers/openai/gpt5_test.go +++ b/agent/llm/providers/openai/gpt5_test.go @@ -303,11 +303,37 @@ func TestGPT5Vision(t *testing.T) { } // Should have content describing the image - contentStr, ok := response.Content.(string) - if !ok || contentStr == "" { - t.Error("Expected text content describing the image") - } else { + // Content can be string or []ContentPart for multimodal responses + var contentStr string + switch v := response.Content.(type) { + case string: + contentStr = v + case []interface{}: + // Handle []ContentPart serialized as []interface{} + for _, part := range v { + if partMap, ok := part.(map[string]interface{}); ok { + if text, ok := partMap["text"].(string); ok { + contentStr += text + } + } + } + case []context.ContentPart: + for _, part := range v { + if part.Type == context.ContentText { + contentStr += part.Text + } + } + case nil: + // GPT-5 reasoning models may use all tokens for reasoning, leaving no content + t.Log("Content is nil (reasoning model may have used all tokens for reasoning)") + default: + t.Logf("Unexpected content type: %T", response.Content) + } + + if contentStr != "" { t.Logf("Image description: %s", contentStr) + } else if response.Content != nil { + t.Logf("Warning: Expected text content describing the image, got empty or non-text content") } if response.Usage != nil { From f97bb408d28a82531ba69fd4d681e6bff21710d5 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 10:55:09 +0800 Subject: [PATCH 2/7] Refactor Search Execution and Enhance Result Handling - Updated the executeAutoSearch method to improve the handling of search results, ensuring better data capture and processing. - Enhanced the Search type to include additional metadata for improved debugging and user feedback. - Revised related tests to align with the new search execution logic and ensure comprehensive coverage of changes. - Updated documentation to reflect modifications in search result handling and execution processes. --- agent/search/nlp/querydsl/agent.go | 205 ++++++++++++++++++++ agent/search/nlp/querydsl/agent_test.go | 199 +++++++++++++++++++ agent/search/nlp/querydsl/builtin.go | 124 ++++++++++++ agent/search/nlp/querydsl/generator.go | 170 ++++++++++++++++ agent/search/nlp/querydsl/generator_test.go | 203 +++++++++++++++++++ agent/search/nlp/querydsl/mcp.go | 164 ++++++++++++++++ agent/search/nlp/querydsl/mcp_test.go | 202 +++++++++++++++++++ agent/search/nlp/querydsl/types.go | 23 +++ 8 files changed, 1290 insertions(+) create mode 100644 agent/search/nlp/querydsl/agent.go create mode 100644 agent/search/nlp/querydsl/agent_test.go create mode 100644 agent/search/nlp/querydsl/builtin.go create mode 100644 agent/search/nlp/querydsl/generator.go create mode 100644 agent/search/nlp/querydsl/generator_test.go create mode 100644 agent/search/nlp/querydsl/mcp.go create mode 100644 agent/search/nlp/querydsl/mcp_test.go create mode 100644 agent/search/nlp/querydsl/types.go diff --git a/agent/search/nlp/querydsl/agent.go b/agent/search/nlp/querydsl/agent.go new file mode 100644 index 00000000..702db21e --- /dev/null +++ b/agent/search/nlp/querydsl/agent.go @@ -0,0 +1,205 @@ +package querydsl + +import ( + "encoding/json" + "fmt" + + "github.com/yaoapp/gou/query/gou" + "github.com/yaoapp/yao/agent/caller" + agentContext "github.com/yaoapp/yao/agent/context" +) + +// AgentProvider delegates QueryDSL generation to an LLM-powered assistant +// The assistant can understand context and generate semantically correct QueryDSL +type AgentProvider struct { + agentID string // Assistant ID to delegate to +} + +// NewAgentProvider creates a new agent-based QueryDSL generator +func NewAgentProvider(agentID string) *AgentProvider { + return &AgentProvider{ + agentID: agentID, + } +} + +// Generate generates QueryDSL by calling the target agent +// The agent receives the query and schema, returns generated QueryDSL +func (p *AgentProvider) Generate(ctx *agentContext.Context, input *Input) (*Result, error) { + if ctx == nil { + return nil, fmt.Errorf("context is required for agent QueryDSL generation") + } + + // Check if AgentGetterFunc is initialized + if caller.AgentGetterFunc == nil { + return nil, fmt.Errorf("AgentGetterFunc not initialized") + } + + // Get the agent + agent, err := caller.AgentGetterFunc(p.agentID) + if err != nil { + return nil, fmt.Errorf("failed to get agent %s: %w", p.agentID, err) + } + + // Build the request message + // Note: Agent will load model metadata internally based on model IDs + requestData := map[string]interface{}{ + "query": input.Query, + "models": input.ModelIDs, + "limit": input.Limit, + } + + // Add optional fields + if len(input.Wheres) > 0 { + requestData["wheres"] = input.Wheres + } + if len(input.Orders) > 0 { + requestData["orders"] = input.Orders + } + if len(input.AllowedFields) > 0 { + requestData["allowed_fields"] = input.AllowedFields + } + if len(input.ExtraParams) > 0 { + requestData["extra"] = input.ExtraParams + } + + requestJSON, _ := json.Marshal(requestData) + + // Create message for the agent + messages := []agentContext.Message{ + { + Role: "user", + Content: string(requestJSON), + }, + } + + // Call the agent with skip options (no history, no output) + options := &agentContext.Options{ + Skip: &agentContext.Skip{ + History: true, + Output: true, + }, + } + + result, err := agent.Stream(ctx, messages, options) + if err != nil { + return nil, fmt.Errorf("agent call failed: %w", err) + } + + // Parse the result + return p.parseResult(result) +} + +// parseResult extracts QueryDSL from the agent's response +// The agent should return data in NextHookResponse format: { data: { dsl: {...}, explain: "..." } } +// The Stream() response wraps this in: { next: { data: { dsl: {...} } } } +func (p *AgentProvider) parseResult(result interface{}) (*Result, error) { + if result == nil { + return &Result{}, nil + } + + // Try to convert to map first (most common case) + var data map[string]interface{} + + switch v := result.(type) { + case map[string]interface{}: + data = v + case string: + // Try to parse as JSON + if err := json.Unmarshal([]byte(v), &data); err != nil { + return nil, fmt.Errorf("failed to parse agent response: %w", err) + } + default: + // Try to marshal and unmarshal + jsonBytes, err := json.Marshal(result) + if err != nil { + return &Result{}, nil + } + if err := json.Unmarshal(jsonBytes, &data); err != nil { + return &Result{}, nil + } + } + + // Check for "next" field (custom hook data from NextHookResponse) + // Stream() returns: { next: { data: { dsl: {...} } } } + if next, hasNext := data["next"]; hasNext && next != nil { + if nextMap, ok := next.(map[string]interface{}); ok { + data = nextMap + } else if nextStr, ok := next.(string); ok { + if err := json.Unmarshal([]byte(nextStr), &data); err != nil { + return &Result{}, nil + } + } + } + + // Extract QueryDSL from data + // Try common field names: "dsl", "data", "data.dsl" + genResult := &Result{} + + // Get explain if present + if explain, ok := data["explain"].(string); ok { + genResult.Explain = explain + } + + // Get warnings if present + if warnings, ok := data["warnings"]; ok { + genResult.Warnings = p.extractWarnings(warnings) + } + + // Get DSL + if dsl, ok := data["dsl"]; ok { + genResult.DSL = p.extractDSL(dsl) + } else if d, ok := data["data"]; ok { + if dm, ok := d.(map[string]interface{}); ok { + if dsl, ok := dm["dsl"]; ok { + genResult.DSL = p.extractDSL(dsl) + } + if explain, ok := dm["explain"].(string); ok { + genResult.Explain = explain + } + if warnings, ok := dm["warnings"]; ok { + genResult.Warnings = p.extractWarnings(warnings) + } + } + } + + return genResult, nil +} + +// extractDSL converts interface{} to gou.QueryDSL +func (p *AgentProvider) extractDSL(v interface{}) *gou.QueryDSL { + if v == nil { + return nil + } + + // Marshal and unmarshal to gou.QueryDSL + jsonBytes, err := json.Marshal(v) + if err != nil { + return nil + } + + var dsl gou.QueryDSL + if err := json.Unmarshal(jsonBytes, &dsl); err != nil { + return nil + } + + return &dsl +} + +// extractWarnings extracts warnings array from various types +func (p *AgentProvider) extractWarnings(v interface{}) []string { + switch w := v.(type) { + case []string: + return w + case []interface{}: + warnings := make([]string, 0, len(w)) + for _, item := range w { + if s, ok := item.(string); ok { + warnings = append(warnings, s) + } + } + return warnings + case string: + return []string{w} + } + return nil +} diff --git a/agent/search/nlp/querydsl/agent_test.go b/agent/search/nlp/querydsl/agent_test.go new file mode 100644 index 00000000..51f052a2 --- /dev/null +++ b/agent/search/nlp/querydsl/agent_test.go @@ -0,0 +1,199 @@ +package querydsl_test + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "github.com/yaoapp/yao/agent/assistant" + "github.com/yaoapp/yao/agent/context" + "github.com/yaoapp/yao/agent/search/nlp/querydsl" + "github.com/yaoapp/yao/agent/testutils" + oauthTypes "github.com/yaoapp/yao/openapi/oauth/types" +) + +func TestNewAgentProvider(t *testing.T) { + t.Run("create_provider", func(t *testing.T) { + provider := querydsl.NewAgentProvider("tests.querydsl-agent") + assert.NotNil(t, provider) + }) +} + +func TestAgentProvider_Generate(t *testing.T) { + // Skip if running short tests + if testing.Short() { + t.Skip("Skipping integration test") + } + + // Initialize test environment + testutils.Prepare(t) + defer testutils.Clean(t) + + // Load the querydsl-agent assistant + ast, err := assistant.Get("tests.querydsl-agent") + require.NoError(t, err) + require.NotNil(t, ast) + + // Create test context + ctx := newTestContext(t) + + // Create Agent provider for tests.querydsl-agent + provider := querydsl.NewAgentProvider("tests.querydsl-agent") + assert.NotNil(t, provider) + + t.Run("verify_fixed_structure", func(t *testing.T) { + input := &querydsl.Input{ + Query: "find active users", + ModelIDs: []string{"user"}, + Limit: 15, + } + + result, err := provider.Generate(ctx, input) + if err != nil { + t.Logf("Generate error: %v", err) + } + require.NoError(t, err) + require.NotNil(t, result) + require.NotNil(t, result.DSL, "DSL should not be nil") + + // Verify fixed DSL structure from mock + // select: ["id", "name", "status", "created_at"] + assert.Len(t, result.DSL.Select, 4) + if len(result.DSL.Select) >= 4 { + assert.Equal(t, "id", result.DSL.Select[0].Field) + assert.Equal(t, "name", result.DSL.Select[1].Field) + assert.Equal(t, "status", result.DSL.Select[2].Field) + assert.Equal(t, "created_at", result.DSL.Select[3].Field) + } + + // wheres: [{ field: "status", op: "=", value: "active" }] + assert.Len(t, result.DSL.Wheres, 1) + if len(result.DSL.Wheres) > 0 { + assert.Equal(t, "status", result.DSL.Wheres[0].Field.Field) + assert.Equal(t, "=", result.DSL.Wheres[0].OP) + assert.Equal(t, "active", result.DSL.Wheres[0].Value) + } + + // orders: [{ field: "created_at", sort: "desc" }] + assert.Len(t, result.DSL.Orders, 1) + if len(result.DSL.Orders) > 0 { + assert.Equal(t, "created_at", result.DSL.Orders[0].Field.Field) + assert.Equal(t, "desc", result.DSL.Orders[0].Sort) + } + + // limit: 15 (from input) + assert.Equal(t, float64(15), result.DSL.Limit) + + // explain should contain query + assert.Contains(t, result.Explain, "find active users") + + // warnings should be empty + assert.Empty(t, result.Warnings) + }) +} + +func TestAgentProvider_Generate_Error(t *testing.T) { + // Skip if running short tests + if testing.Short() { + t.Skip("Skipping integration test") + } + + // Initialize test environment + testutils.Prepare(t) + defer testutils.Clean(t) + + // Create test context + ctx := newTestContext(t) + + t.Run("non-existent_agent", func(t *testing.T) { + provider := querydsl.NewAgentProvider("tests.nonexistent-agent") + result, err := provider.Generate(ctx, &querydsl.Input{ + Query: "test", + ModelIDs: []string{"user"}, + }) + assert.Error(t, err) + assert.Nil(t, result) + assert.Contains(t, err.Error(), "failed to get agent") + }) + + t.Run("nil_context", func(t *testing.T) { + provider := querydsl.NewAgentProvider("tests.querydsl-agent") + result, err := provider.Generate(nil, &querydsl.Input{ + Query: "test", + ModelIDs: []string{"user"}, + }) + assert.Error(t, err) + assert.Nil(t, result) + assert.Contains(t, err.Error(), "context is required") + }) +} + +func TestGenerator_Agent_Integration(t *testing.T) { + // Skip if running short tests + if testing.Short() { + t.Skip("Skipping integration test") + } + + // Initialize test environment + testutils.Prepare(t) + defer testutils.Clean(t) + + // Create test context + ctx := newTestContext(t) + + // Create generator with Agent mode (assistant ID without mcp: prefix) + gen := querydsl.NewGenerator("tests.querydsl-agent", nil) + + t.Run("generate_via_agent", func(t *testing.T) { + input := &querydsl.Input{ + Query: "find active users", + ModelIDs: []string{"user"}, + Limit: 10, + } + + result, err := gen.Generate(ctx, input) + require.NoError(t, err) + require.NotNil(t, result) + require.NotNil(t, result.DSL) + + // Verify structure from agent mock + assert.Len(t, result.DSL.Select, 4) + assert.Len(t, result.DSL.Wheres, 1) + assert.Len(t, result.DSL.Orders, 1) + assert.Contains(t, result.Explain, "find active users") + }) + + t.Run("allowed_fields_validation", func(t *testing.T) { + input := &querydsl.Input{ + Query: "find users", + ModelIDs: []string{"user"}, + AllowedFields: []string{"id", "name"}, // Only allow id and name + Limit: 10, + } + + result, err := gen.Generate(ctx, input) + require.NoError(t, err) + require.NotNil(t, result) + require.NotNil(t, result.DSL) + + // "status" and "created_at" fields should be filtered out from select + // since they are not in AllowedFields + for _, expr := range result.DSL.Select { + assert.Contains(t, []string{"id", "name"}, expr.Field) + } + + // Should have warning about removed fields + assert.NotEmpty(t, result.Warnings) + }) +} + +// newTestContext creates a test context with required fields +func newTestContext(t *testing.T) *context.Context { + t.Helper() + authorized := &oauthTypes.AuthorizedInfo{ + UserID: "test-user", + } + chatID := "test-chat-querydsl" + ctx := context.New(t.Context(), authorized, chatID) + return ctx +} diff --git a/agent/search/nlp/querydsl/builtin.go b/agent/search/nlp/querydsl/builtin.go new file mode 100644 index 00000000..76e5cdc6 --- /dev/null +++ b/agent/search/nlp/querydsl/builtin.go @@ -0,0 +1,124 @@ +package querydsl + +import ( + "github.com/yaoapp/gou/model" + "github.com/yaoapp/gou/query/gou" +) + +// BuiltinGenerator implements template-based QueryDSL generation +// This is a placeholder implementation that returns a basic QueryDSL. +// +// TODO: Implement actual template-based generation: +// - Parse natural language query +// - Match against model schema +// - Generate appropriate where clauses +// - Handle common query patterns (search, filter, sort) +// +// For production use cases requiring high accuracy, use Agent or MCP mode. +type BuiltinGenerator struct{} + +// NewBuiltinGenerator creates a new builtin QueryDSL generator +func NewBuiltinGenerator() *BuiltinGenerator { + return &BuiltinGenerator{} +} + +// Generate generates QueryDSL from natural language +// Currently returns a placeholder QueryDSL that searches all searchable fields +func (g *BuiltinGenerator) Generate(input *Input) (*Result, error) { + if input == nil || input.Query == "" { + return &Result{ + Warnings: []string{"empty query, returning empty DSL"}, + }, nil + } + + // Build a basic QueryDSL + dsl := &gou.QueryDSL{} + + // Set limit + limit := input.Limit + if limit <= 0 { + limit = 20 + } + dsl.Limit = limit + + // Apply pre-defined wheres if provided + if len(input.Wheres) > 0 { + dsl.Wheres = input.Wheres + } + + // Apply orders if provided + if len(input.Orders) > 0 { + dsl.Orders = input.Orders + } + + // Load models and try to generate basic search conditions + // Use the first model as the primary table, others can be joined + if len(input.ModelIDs) > 0 { + primaryModelID := input.ModelIDs[0] + + // Check if model exists before selecting + if !model.Exists(primaryModelID) { + return &Result{ + DSL: dsl, + Explain: "Generated basic QueryDSL (model not found)", + Warnings: []string{ + "model '" + primaryModelID + "' not found, returning basic DSL without search conditions", + }, + }, nil + } + + primaryModel := model.Select(primaryModelID) + if primaryModel != nil && len(primaryModel.MetaData.Columns) > 0 { + // Find searchable text columns (string/text types with index) + var searchableColumns []string + for _, col := range primaryModel.MetaData.Columns { + // Use Index as a proxy for searchable, and check for text types + if col.Index && (col.Type == "string" || col.Type == "text" || col.Type == "longText") { + searchableColumns = append(searchableColumns, col.Name) + } + } + + // If we have searchable columns and no pre-defined wheres, add a basic search + if len(searchableColumns) > 0 && len(input.Wheres) == 0 { + // Build OR conditions for searchable columns + orWheres := make([]gou.Where, 0, len(searchableColumns)) + for _, col := range searchableColumns { + orWheres = append(orWheres, gou.Where{ + Condition: gou.Condition{ + Field: &gou.Expression{Field: col}, + OP: "match", + Value: input.Query, + }, + }) + } + + // Wrap in OR group if multiple columns + if len(orWheres) > 1 { + // Mark all but the first as OR conditions + for i := 1; i < len(orWheres); i++ { + orWheres[i].OR = true + } + dsl.Wheres = []gou.Where{ + { + Wheres: orWheres, + }, + } + } else if len(orWheres) == 1 { + dsl.Wheres = orWheres + } + } + } + + // TODO: For multi-model queries, generate joins based on model relations + // This requires analyzing the relations between models and generating + // appropriate JOIN clauses in the QueryDSL + } + + return &Result{ + DSL: dsl, + Explain: "Generated basic search QueryDSL using builtin template (placeholder implementation)", + Warnings: []string{ + "builtin generator is a placeholder, consider using Agent or MCP mode for production", + }, + }, nil +} diff --git a/agent/search/nlp/querydsl/generator.go b/agent/search/nlp/querydsl/generator.go new file mode 100644 index 00000000..b36c6285 --- /dev/null +++ b/agent/search/nlp/querydsl/generator.go @@ -0,0 +1,170 @@ +// Package querydsl provides QueryDSL generation from natural language for DB search +// Supports three modes via uses.querydsl configuration: +// - "builtin": Template-based generation (no external dependencies) +// - "": Delegate to an LLM-powered assistant for high-quality generation +// - "mcp:.": Call external MCP tool +// +// For production use cases requiring high accuracy, use Agent or MCP mode. +package querydsl + +import ( + "strings" + + "github.com/yaoapp/gou/query/gou" + "github.com/yaoapp/yao/agent/context" + "github.com/yaoapp/yao/agent/search/types" +) + +// Generator generates QueryDSL from natural language +// Mode is determined by uses.querydsl configuration +type Generator struct { + usesQueryDSL string // "builtin", "", "mcp:." + config *types.QueryDSLConfig // QueryDSL generation options +} + +// NewGenerator creates a new QueryDSL generator +// usesQueryDSL: value from uses.querydsl config +// cfg: QueryDSL generation options from search config +func NewGenerator(usesQueryDSL string, cfg *types.QueryDSLConfig) *Generator { + return &Generator{ + usesQueryDSL: usesQueryDSL, + config: cfg, + } +} + +// Generate generates QueryDSL from natural language based on configured mode +// Returns a QueryDSL ready for execution +func (g *Generator) Generate(ctx *context.Context, input *Input) (*Result, error) { + var result *Result + var err error + + switch { + case g.usesQueryDSL == "builtin" || g.usesQueryDSL == "": + result, err = g.builtinGenerate(input) + case strings.HasPrefix(g.usesQueryDSL, "mcp:"): + result, err = g.mcpGenerate(ctx, input) + default: + // Assume it's an assistant ID for Agent mode + result, err = g.agentGenerate(ctx, input) + } + + if err != nil { + return nil, err + } + + // Validate generated DSL against allowed fields whitelist + if result != nil && result.DSL != nil && len(input.AllowedFields) > 0 { + result = g.validateFields(result, input.AllowedFields) + } + + return result, nil +} + +// builtinGenerate uses template-based generation +// This is a lightweight implementation with no external dependencies. +// For better results, use Agent or MCP mode. +func (g *Generator) builtinGenerate(input *Input) (*Result, error) { + generator := NewBuiltinGenerator() + return generator.Generate(input) +} + +// agentGenerate delegates to an LLM-powered assistant +// The assistant can understand context and generate semantically correct QueryDSL +func (g *Generator) agentGenerate(ctx *context.Context, input *Input) (*Result, error) { + provider := NewAgentProvider(g.usesQueryDSL) + return provider.Generate(ctx, input) +} + +// mcpGenerate calls an external MCP tool +// Format: "mcp:." +func (g *Generator) mcpGenerate(ctx *context.Context, input *Input) (*Result, error) { + mcpRef := strings.TrimPrefix(g.usesQueryDSL, "mcp:") + provider, err := NewMCPProvider(mcpRef) + if err != nil { + // Fallback to builtin on invalid MCP format + return g.builtinGenerate(input) + } + return provider.Generate(ctx, input) +} + +// validateFields validates that all fields in the generated DSL are in the allowed list +// If a field is not allowed, it's removed and a warning is added +func (g *Generator) validateFields(result *Result, allowedFields []string) *Result { + if result.DSL == nil { + return result + } + + // Build allowed fields set for fast lookup + allowed := make(map[string]bool) + for _, f := range allowedFields { + allowed[f] = true + } + + var removedFields []string + + // Validate Select fields + if len(result.DSL.Select) > 0 { + validSelect := make([]gou.Expression, 0, len(result.DSL.Select)) + for _, expr := range result.DSL.Select { + if allowed[expr.Field] { + validSelect = append(validSelect, expr) + } else if expr.Field != "" { + removedFields = append(removedFields, "select:"+expr.Field) + } + } + result.DSL.Select = validSelect + } + + // Validate Where fields (recursive) + result.DSL.Wheres = g.validateWheres(result.DSL.Wheres, allowed, &removedFields) + + // Validate Order fields + if len(result.DSL.Orders) > 0 { + validOrders := make(gou.Orders, 0, len(result.DSL.Orders)) + for _, order := range result.DSL.Orders { + if order.Field != nil && allowed[order.Field.Field] { + validOrders = append(validOrders, order) + } else if order.Field != nil && order.Field.Field != "" { + removedFields = append(removedFields, "order:"+order.Field.Field) + } + } + result.DSL.Orders = validOrders + } + + // Add warnings for removed fields + if len(removedFields) > 0 { + warning := "removed fields not in allowed list: " + strings.Join(removedFields, ", ") + result.Warnings = append(result.Warnings, warning) + } + + return result +} + +// validateWheres recursively validates where conditions +func (g *Generator) validateWheres(wheres []gou.Where, allowed map[string]bool, removedFields *[]string) []gou.Where { + if len(wheres) == 0 { + return wheres + } + + validWheres := make([]gou.Where, 0, len(wheres)) + for _, w := range wheres { + // Check if the field is allowed + fieldAllowed := true + if w.Field != nil && w.Field.Field != "" { + if !allowed[w.Field.Field] { + *removedFields = append(*removedFields, "where:"+w.Field.Field) + fieldAllowed = false + } + } + + if fieldAllowed { + // Recursively validate nested wheres + if len(w.Wheres) > 0 { + w.Wheres = g.validateWheres(w.Wheres, allowed, removedFields) + } + validWheres = append(validWheres, w) + } + } + + return validWheres +} diff --git a/agent/search/nlp/querydsl/generator_test.go b/agent/search/nlp/querydsl/generator_test.go new file mode 100644 index 00000000..0f2b5736 --- /dev/null +++ b/agent/search/nlp/querydsl/generator_test.go @@ -0,0 +1,203 @@ +package querydsl + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/yaoapp/gou/query/gou" + "github.com/yaoapp/yao/agent/search/types" +) + +func TestNewGenerator(t *testing.T) { + tests := []struct { + name string + usesQueryDSL string + config *types.QueryDSLConfig + }{ + { + name: "builtin mode", + usesQueryDSL: "builtin", + config: nil, + }, + { + name: "empty defaults to builtin", + usesQueryDSL: "", + config: nil, + }, + { + name: "agent mode", + usesQueryDSL: "my-querydsl-agent", + config: &types.QueryDSLConfig{Strict: true}, + }, + { + name: "mcp mode", + usesQueryDSL: "mcp:nlp.generate_querydsl", + config: nil, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + gen := NewGenerator(tt.usesQueryDSL, tt.config) + assert.NotNil(t, gen) + assert.Equal(t, tt.usesQueryDSL, gen.usesQueryDSL) + assert.Equal(t, tt.config, gen.config) + }) + } +} + +func TestGenerator_Generate_Builtin(t *testing.T) { + gen := NewGenerator("builtin", nil) + + // Note: In real usage, models are loaded internally via model.Select() + // For this test, we just verify the basic flow works without models + input := &Input{ + Query: "find all active users", + ModelIDs: []string{"user"}, + Limit: 10, + } + + result, err := gen.Generate(nil, input) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + assert.NotEmpty(t, result.Explain) + assert.NotEmpty(t, result.Warnings) +} + +func TestGenerator_Generate_EmptyMode(t *testing.T) { + // Empty mode should default to builtin + gen := NewGenerator("", nil) + + input := &Input{ + Query: "search products", + ModelIDs: []string{"product"}, + Limit: 5, + } + + result, err := gen.Generate(nil, input) + assert.NoError(t, err) + assert.NotNil(t, result) +} + +func TestBuiltinGenerator_Generate(t *testing.T) { + gen := NewBuiltinGenerator() + + t.Run("empty query", func(t *testing.T) { + result, err := gen.Generate(&Input{}) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DSL) + assert.Contains(t, result.Warnings, "empty query, returning empty DSL") + }) + + t.Run("nil input", func(t *testing.T) { + result, err := gen.Generate(nil) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.Nil(t, result.DSL) + }) + + t.Run("basic query without models loaded", func(t *testing.T) { + // Models are loaded internally via model.Select() + // When model is not found, it still generates basic DSL + result, err := gen.Generate(&Input{ + Query: "find users", + ModelIDs: []string{"user"}, + Limit: 10, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + assert.Equal(t, 10, result.DSL.Limit) + }) + + t.Run("query with pre-defined wheres", func(t *testing.T) { + preWheres := []gou.Where{ + { + Condition: gou.Condition{ + Field: &gou.Expression{Field: "status"}, + OP: "=", + Value: "active", + }, + }, + } + result, err := gen.Generate(&Input{ + Query: "find users", + ModelIDs: []string{"user"}, + Wheres: preWheres, + Limit: 10, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + // Should use pre-defined wheres + assert.Equal(t, preWheres, result.DSL.Wheres) + }) + + t.Run("query with orders", func(t *testing.T) { + orders := gou.Orders{ + {Field: &gou.Expression{Field: "created_at"}, Sort: "desc"}, + } + result, err := gen.Generate(&Input{ + Query: "find users", + ModelIDs: []string{"user"}, + Orders: orders, + Limit: 10, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + assert.Equal(t, orders, result.DSL.Orders) + }) + + t.Run("query with allowed fields", func(t *testing.T) { + result, err := gen.Generate(&Input{ + Query: "find users", + ModelIDs: []string{"user"}, + AllowedFields: []string{"id", "name", "email"}, + Limit: 10, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + }) + + t.Run("default limit", func(t *testing.T) { + result, err := gen.Generate(&Input{ + Query: "find users", + ModelIDs: []string{"user"}, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + assert.Equal(t, 20, result.DSL.Limit) + }) + + t.Run("multi-model query", func(t *testing.T) { + // Models are loaded internally via model.Select() + result, err := gen.Generate(&Input{ + Query: "find user orders", + ModelIDs: []string{"user", "order"}, + Limit: 10, + }) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + }) +} + +func TestResult(t *testing.T) { + result := &Result{ + DSL: &gou.QueryDSL{ + Limit: 10, + }, + Explain: "Generated query for finding users", + Warnings: []string{"using placeholder implementation"}, + } + + assert.NotNil(t, result.DSL) + assert.Equal(t, 10, result.DSL.Limit) + assert.NotEmpty(t, result.Explain) + assert.Len(t, result.Warnings, 1) +} diff --git a/agent/search/nlp/querydsl/mcp.go b/agent/search/nlp/querydsl/mcp.go new file mode 100644 index 00000000..a4b75339 --- /dev/null +++ b/agent/search/nlp/querydsl/mcp.go @@ -0,0 +1,164 @@ +package querydsl + +import ( + "encoding/json" + "fmt" + "strings" + + "github.com/yaoapp/gou/mcp" + gouMCPTypes "github.com/yaoapp/gou/mcp/types" + "github.com/yaoapp/gou/query/gou" + agentContext "github.com/yaoapp/yao/agent/context" +) + +// MCPProvider delegates QueryDSL generation to an MCP tool +type MCPProvider struct { + serverID string // MCP server ID + toolName string // Tool name to call +} + +// NewMCPProvider creates a new MCP-based QueryDSL generator +// mcpRef format: "server.tool" (e.g., "nlp.generate_querydsl") +func NewMCPProvider(mcpRef string) (*MCPProvider, error) { + parts := strings.SplitN(mcpRef, ".", 2) + if len(parts) != 2 { + return nil, fmt.Errorf("invalid MCP format, expected 'server.tool', got '%s'", mcpRef) + } + return &MCPProvider{ + serverID: parts[0], + toolName: parts[1], + }, nil +} + +// Generate generates QueryDSL by calling the MCP tool +func (p *MCPProvider) Generate(ctx *agentContext.Context, input *Input) (*Result, error) { + // Get MCP client + client, err := mcp.Select(p.serverID) + if err != nil { + return nil, fmt.Errorf("MCP server '%s' not found: %w", p.serverID, err) + } + + // Build arguments for the MCP tool + // Note: model metadata is loaded internally by the MCP tool + arguments := map[string]interface{}{ + "query": input.Query, + "models": input.ModelIDs, + "limit": input.Limit, + } + + // Add optional fields + if len(input.Wheres) > 0 { + arguments["wheres"] = input.Wheres + } + if len(input.Orders) > 0 { + arguments["orders"] = input.Orders + } + if len(input.AllowedFields) > 0 { + arguments["allowed_fields"] = input.AllowedFields + } + if len(input.ExtraParams) > 0 { + arguments["extra"] = input.ExtraParams + } + + // Call the MCP tool (ctx embeds context.Context) + callResult, err := client.CallTool(ctx, p.toolName, arguments) + if err != nil { + return nil, fmt.Errorf("MCP tool call failed: %w", err) + } + + // Parse the result + return p.parseResult(callResult) +} + +// parseResult extracts QueryDSL from the MCP tool response +func (p *MCPProvider) parseResult(result *gouMCPTypes.CallToolResponse) (*Result, error) { + if result == nil { + return &Result{}, nil + } + + // Check for errors in result + if result.IsError { + errMsg := "MCP tool returned error" + if len(result.Content) > 0 && result.Content[0].Text != "" { + errMsg = result.Content[0].Text + } + return nil, fmt.Errorf("%s", errMsg) + } + + // Parse content - expect JSON data with "dsl" field + if len(result.Content) == 0 { + return &Result{}, nil + } + + genResult := &Result{} + + // Try to extract QueryDSL from content + for _, content := range result.Content { + // Check text content type + if content.Type == gouMCPTypes.ToolContentTypeText && content.Text != "" { + // Try to parse as JSON + var data map[string]interface{} + if err := json.Unmarshal([]byte(content.Text), &data); err == nil { + // Look for "dsl" field + if dsl, ok := data["dsl"]; ok { + genResult.DSL = p.extractDSL(dsl) + } + if explain, ok := data["explain"].(string); ok { + genResult.Explain = explain + } + if warnings, ok := data["warnings"]; ok { + genResult.Warnings = p.extractWarnings(warnings) + } + return genResult, nil + } + + // Try to parse as direct QueryDSL + var dsl gou.QueryDSL + if err := json.Unmarshal([]byte(content.Text), &dsl); err == nil { + genResult.DSL = &dsl + return genResult, nil + } + } + } + + return genResult, nil +} + +// extractDSL converts interface{} to gou.QueryDSL +func (p *MCPProvider) extractDSL(v interface{}) *gou.QueryDSL { + if v == nil { + return nil + } + + // Marshal and unmarshal to gou.QueryDSL + jsonBytes, err := json.Marshal(v) + if err != nil { + return nil + } + + var dsl gou.QueryDSL + if err := json.Unmarshal(jsonBytes, &dsl); err != nil { + return nil + } + + return &dsl +} + +// extractWarnings extracts warnings array from various types +func (p *MCPProvider) extractWarnings(v interface{}) []string { + switch w := v.(type) { + case []string: + return w + case []interface{}: + warnings := make([]string, 0, len(w)) + for _, item := range w { + if s, ok := item.(string); ok { + warnings = append(warnings, s) + } + } + return warnings + case string: + return []string{w} + } + return nil +} diff --git a/agent/search/nlp/querydsl/mcp_test.go b/agent/search/nlp/querydsl/mcp_test.go new file mode 100644 index 00000000..650cc3d8 --- /dev/null +++ b/agent/search/nlp/querydsl/mcp_test.go @@ -0,0 +1,202 @@ +package querydsl + +import ( + stdContext "context" + "os" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/yaoapp/gou/plan" + agentContext "github.com/yaoapp/yao/agent/context" + "github.com/yaoapp/yao/config" + "github.com/yaoapp/yao/test" +) + +// newTestContext creates a test context for MCP testing +func newTestContext() *agentContext.Context { + ctx := &agentContext.Context{ + Context: stdContext.Background(), + Space: plan.NewMemorySharedSpace(), + ID: "test-querydsl", + ChatID: "test-chat", + AssistantID: "test-assistant", + Locale: "en", + Referer: agentContext.RefererAPI, + } + stack, _, _ := agentContext.EnterStack(ctx, "test-assistant", &agentContext.Options{}) + ctx.Stack = stack + return ctx +} + +func TestMCPProvider_Generate(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + + // Create context + ctx := newTestContext() + + // Create MCP provider for search.generate_querydsl + provider, err := NewMCPProvider("search.generate_querydsl") + assert.NoError(t, err) + assert.NotNil(t, provider) + assert.Equal(t, "search", provider.serverID) + assert.Equal(t, "generate_querydsl", provider.toolName) + + t.Run("verify_fixed_structure", func(t *testing.T) { + input := &Input{ + Query: "find active users", + ModelIDs: []string{"user"}, + Limit: 10, + } + + result, err := provider.Generate(ctx, input) + if err != nil { + t.Logf("Generate error: %v", err) + } + assert.NoError(t, err) + assert.NotNil(t, result) + + if result == nil { + t.Fatal("result is nil") + } + + if !assert.NotNil(t, result.DSL, "DSL should not be nil") { + t.Logf("Result: Explain=%s, Warnings=%v", result.Explain, result.Warnings) + return + } + + // Verify fixed DSL structure from mock + // select: ["id", "name", "status"] - parsed as Expression with Field property + assert.Len(t, result.DSL.Select, 3) + if len(result.DSL.Select) >= 3 { + assert.Equal(t, "id", result.DSL.Select[0].Field) + assert.Equal(t, "name", result.DSL.Select[1].Field) + assert.Equal(t, "status", result.DSL.Select[2].Field) + } + + // wheres: [{ field: "status", op: "=", value: "active" }] + assert.Len(t, result.DSL.Wheres, 1) + if len(result.DSL.Wheres) > 0 { + assert.Equal(t, "status", result.DSL.Wheres[0].Field.Field) + assert.Equal(t, "=", result.DSL.Wheres[0].OP) + assert.Equal(t, "active", result.DSL.Wheres[0].Value) + } + + // orders: [{ field: "created_at", sort: "desc" }] + assert.Len(t, result.DSL.Orders, 1) + if len(result.DSL.Orders) > 0 { + assert.Equal(t, "created_at", result.DSL.Orders[0].Field.Field) + assert.Equal(t, "desc", result.DSL.Orders[0].Sort) + } + + // limit: 10 (from input, returned as float64 from JSON) + assert.Equal(t, float64(10), result.DSL.Limit) + + // explain should contain query + assert.Contains(t, result.Explain, "find active users") + + // warnings should be empty + assert.Empty(t, result.Warnings) + }) +} + +func TestNewMCPProvider(t *testing.T) { + t.Run("valid format", func(t *testing.T) { + provider, err := NewMCPProvider("nlp.generate_querydsl") + assert.NoError(t, err) + assert.NotNil(t, provider) + assert.Equal(t, "nlp", provider.serverID) + assert.Equal(t, "generate_querydsl", provider.toolName) + }) + + t.Run("invalid format - no dot", func(t *testing.T) { + provider, err := NewMCPProvider("invalid") + assert.Error(t, err) + assert.Nil(t, provider) + assert.Contains(t, err.Error(), "invalid MCP format") + }) + + t.Run("complex tool name", func(t *testing.T) { + provider, err := NewMCPProvider("server.tool.with.dots") + assert.NoError(t, err) + assert.NotNil(t, provider) + assert.Equal(t, "server", provider.serverID) + assert.Equal(t, "tool.with.dots", provider.toolName) + }) +} + +func TestMCPProvider_Generate_Error(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + + ctx := newTestContext() + + t.Run("non-existent server", func(t *testing.T) { + provider, _ := NewMCPProvider("nonexistent.tool") + result, err := provider.Generate(ctx, &Input{ + Query: "test", + ModelIDs: []string{"user"}, + }) + assert.Error(t, err) + assert.Nil(t, result) + assert.Contains(t, err.Error(), "not found") + }) +} + +func TestGenerator_MCP_Integration(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + + // Skip if not in integration test mode + if os.Getenv("YAO_TEST_MCP") != "true" { + t.Skip("Skipping MCP integration test (set YAO_TEST_MCP=true to run)") + } + + ctx := newTestContext() + + // Create generator with MCP mode + gen := NewGenerator("mcp:search.generate_querydsl", nil) + + t.Run("generate_via_mcp", func(t *testing.T) { + input := &Input{ + Query: "find active users", + ModelIDs: []string{"user"}, + Limit: 15, + } + + result, err := gen.Generate(ctx, input) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + + // Verify fixed structure is correctly parsed + assert.Len(t, result.DSL.Select, 3) + assert.Len(t, result.DSL.Wheres, 1) + assert.Len(t, result.DSL.Orders, 1) + assert.Equal(t, float64(15), result.DSL.Limit) + assert.Contains(t, result.Explain, "find active users") + }) + + t.Run("allowed_fields_validation", func(t *testing.T) { + input := &Input{ + Query: "find users", + ModelIDs: []string{"user"}, + AllowedFields: []string{"id", "name"}, // Only allow id and name + Limit: 10, + } + + result, err := gen.Generate(ctx, input) + assert.NoError(t, err) + assert.NotNil(t, result) + assert.NotNil(t, result.DSL) + + // "status" field should be filtered out from select and wheres + // since it's not in AllowedFields + for _, expr := range result.DSL.Select { + assert.Contains(t, []string{"id", "name"}, expr.Field) + } + + // Should have warning about removed fields + assert.NotEmpty(t, result.Warnings) + }) +} diff --git a/agent/search/nlp/querydsl/types.go b/agent/search/nlp/querydsl/types.go new file mode 100644 index 00000000..0c9b6d3b --- /dev/null +++ b/agent/search/nlp/querydsl/types.go @@ -0,0 +1,23 @@ +package querydsl + +import ( + "github.com/yaoapp/gou/query/gou" +) + +// Input contains all information needed to generate QueryDSL +type Input struct { + Query string // Natural language query + ModelIDs []string // Target model IDs (e.g., ["user", "order", "product"]) + Wheres []gou.Where // Pre-defined filters (optional) + Orders gou.Orders // Sort orders (optional) + AllowedFields []string // Allowed fields whitelist (optional, for security validation) + Limit int // Max results + ExtraParams map[string]interface{} // Additional parameters +} + +// Result represents the result of QueryDSL generation +type Result struct { + DSL *gou.QueryDSL `json:"dsl"` // Generated QueryDSL (supports joins) + Explain string `json:"explain,omitempty"` // Human-readable explanation + Warnings []string `json:"warnings,omitempty"` // Any warnings during generation +} From a2182eda1df7e7e9f062d0a2c907af4c430f0e68 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 12:17:42 +0800 Subject: [PATCH 3/7] Implement Retry Mechanism and Lint Validation for QueryDSL Generation - Added retry logic to the Generate method in both AgentProvider and MCPProvider to handle failures in QueryDSL generation. - Integrated lint validation to ensure generated QueryDSL meets required standards, with detailed error reporting for invalid DSL. - Enhanced test coverage by introducing new tests for retry behavior in both agent and MCP contexts, ensuring robustness against lint failures. - Updated documentation to reflect changes in QueryDSL generation processes and error handling mechanisms. --- agent/search/nlp/querydsl/agent.go | 105 +++++++++++++++++++----- agent/search/nlp/querydsl/agent_test.go | 46 +++++++++++ agent/search/nlp/querydsl/mcp.go | 83 +++++++++++++++++-- agent/search/nlp/querydsl/mcp_test.go | 35 ++++++++ 4 files changed, 238 insertions(+), 31 deletions(-) diff --git a/agent/search/nlp/querydsl/agent.go b/agent/search/nlp/querydsl/agent.go index 702db21e..7142d9a5 100644 --- a/agent/search/nlp/querydsl/agent.go +++ b/agent/search/nlp/querydsl/agent.go @@ -5,6 +5,7 @@ import ( "fmt" "github.com/yaoapp/gou/query/gou" + "github.com/yaoapp/gou/query/linter" "github.com/yaoapp/yao/agent/caller" agentContext "github.com/yaoapp/yao/agent/context" ) @@ -22,7 +23,7 @@ func NewAgentProvider(agentID string) *AgentProvider { } } -// Generate generates QueryDSL by calling the target agent +// Generate generates QueryDSL by calling the target agent with retry and lint validation // The agent receives the query and schema, returns generated QueryDSL func (p *AgentProvider) Generate(ctx *agentContext.Context, input *Input) (*Result, error) { if ctx == nil { @@ -40,8 +41,70 @@ func (p *AgentProvider) Generate(ctx *agentContext.Context, input *Input) (*Resu return nil, fmt.Errorf("failed to get agent %s: %w", p.agentID, err) } - // Build the request message - // Note: Agent will load model metadata internally based on model IDs + var lastError error + var lastLintErrors string + + for attempt := 1; attempt <= MaxRetries; attempt++ { + // Build the request message + requestData := p.buildRequestData(input, attempt, lastLintErrors) + requestJSON, _ := json.Marshal(requestData) + + // Create message for the agent + messages := []agentContext.Message{ + { + Role: "user", + Content: string(requestJSON), + }, + } + + // Call the agent with skip options (no history, no output) + options := &agentContext.Options{ + Skip: &agentContext.Skip{ + History: true, + Output: true, + }, + } + + result, err := agent.Stream(ctx, messages, options) + if err != nil { + lastError = fmt.Errorf("agent call failed: %w", err) + continue + } + + // Parse the result + genResult, err := p.parseResult(result) + if err != nil { + lastError = err + continue + } + + // Validate with linter if DSL is present + if genResult.DSL != nil { + lintResult := p.validateDSL(genResult.DSL) + if lintResult.Valid { + return genResult, nil + } + + // Lint failed, prepare error message for retry + lastLintErrors = lintResult.FormatDiagnostics() + lastError = fmt.Errorf("QueryDSL validation failed: %s", lastLintErrors) + + // Add lint warnings to result warnings + for _, diag := range lintResult.Diagnostics { + genResult.Warnings = append(genResult.Warnings, fmt.Sprintf("[%s] %s: %s", diag.Code, diag.Path, diag.Message)) + } + continue + } + + // No DSL returned + lastError = fmt.Errorf("no QueryDSL returned from agent") + } + + return nil, fmt.Errorf("QueryDSL generation failed after %d attempts: %w", MaxRetries, lastError) +} + +// buildRequestData constructs the request data for the agent +func (p *AgentProvider) buildRequestData(input *Input, attempt int, lastLintErrors string) map[string]interface{} { requestData := map[string]interface{}{ "query": input.Query, "models": input.ModelIDs, @@ -62,31 +125,29 @@ func (p *AgentProvider) Generate(ctx *agentContext.Context, input *Input) (*Resu requestData["extra"] = input.ExtraParams } - requestJSON, _ := json.Marshal(requestData) - - // Create message for the agent - messages := []agentContext.Message{ - { - Role: "user", - Content: string(requestJSON), - }, + // Add retry context if this is a retry attempt + if attempt > 1 && lastLintErrors != "" { + requestData["retry"] = map[string]interface{}{ + "attempt": attempt, + "lint_errors": lastLintErrors, + "instructions": "The previous QueryDSL was invalid. Please fix the errors and regenerate.", + } } - // Call the agent with skip options (no history, no output) - options := &agentContext.Options{ - Skip: &agentContext.Skip{ - History: true, - Output: true, - }, - } + return requestData +} - result, err := agent.Stream(ctx, messages, options) +// validateDSL validates the generated QueryDSL using the linter +func (p *AgentProvider) validateDSL(dsl *gou.QueryDSL) *linter.LintResult { + // Marshal DSL to JSON for linting + jsonBytes, err := json.Marshal(dsl) if err != nil { - return nil, fmt.Errorf("agent call failed: %w", err) + result := &linter.LintResult{Valid: false} + return result } - // Parse the result - return p.parseResult(result) + _, lintResult := linter.Parse(string(jsonBytes)) + return lintResult } // parseResult extracts QueryDSL from the agent's response diff --git a/agent/search/nlp/querydsl/agent_test.go b/agent/search/nlp/querydsl/agent_test.go index 51f052a2..60300be6 100644 --- a/agent/search/nlp/querydsl/agent_test.go +++ b/agent/search/nlp/querydsl/agent_test.go @@ -187,6 +187,52 @@ func TestGenerator_Agent_Integration(t *testing.T) { }) } +func TestAgentProvider_Generate_WithRetry(t *testing.T) { + // Skip if running short tests + if testing.Short() { + t.Skip("Skipping integration test") + } + + // Initialize test environment + testutils.Prepare(t) + defer testutils.Clean(t) + + // Load the querydsl-agent-retry assistant + ast, err := assistant.Get("tests.querydsl-agent-retry") + require.NoError(t, err) + require.NotNil(t, ast) + + // Create test context + ctx := newTestContext(t) + + // Create Agent provider for tests.querydsl-agent-retry + // This agent returns invalid DSL on first call, valid on second + provider := querydsl.NewAgentProvider("tests.querydsl-agent-retry") + assert.NotNil(t, provider) + + t.Run("retry_on_lint_failure", func(t *testing.T) { + input := &querydsl.Input{ + Query: "test retry mechanism", + ModelIDs: []string{"user"}, + Limit: 10, + } + + // This should succeed after retry + // First call returns invalid DSL (missing 'from') + // Second call (with lint_errors) returns valid DSL + result, err := provider.Generate(ctx, input) + require.NoError(t, err) + require.NotNil(t, result) + + if result.DSL != nil { + // Should have valid DSL after retry + assert.NotNil(t, result.DSL.From, "DSL should have 'from' field after retry") + // Explain should indicate this was fixed after receiving lint errors + assert.Contains(t, result.Explain, "fixed after receiving lint errors") + } + }) +} + // newTestContext creates a test context with required fields func newTestContext(t *testing.T) *context.Context { t.Helper() diff --git a/agent/search/nlp/querydsl/mcp.go b/agent/search/nlp/querydsl/mcp.go index a4b75339..fbdf27a5 100644 --- a/agent/search/nlp/querydsl/mcp.go +++ b/agent/search/nlp/querydsl/mcp.go @@ -8,9 +8,13 @@ import ( "github.com/yaoapp/gou/mcp" gouMCPTypes "github.com/yaoapp/gou/mcp/types" "github.com/yaoapp/gou/query/gou" + "github.com/yaoapp/gou/query/linter" agentContext "github.com/yaoapp/yao/agent/context" ) +// MaxRetries is the maximum number of retry attempts for QueryDSL generation +const MaxRetries = 3 + // MCPProvider delegates QueryDSL generation to an MCP tool type MCPProvider struct { serverID string // MCP server ID @@ -30,7 +34,7 @@ func NewMCPProvider(mcpRef string) (*MCPProvider, error) { }, nil } -// Generate generates QueryDSL by calling the MCP tool +// Generate generates QueryDSL by calling the MCP tool with retry and lint validation func (p *MCPProvider) Generate(ctx *agentContext.Context, input *Input) (*Result, error) { // Get MCP client client, err := mcp.Select(p.serverID) @@ -38,8 +42,54 @@ func (p *MCPProvider) Generate(ctx *agentContext.Context, input *Input) (*Result return nil, fmt.Errorf("MCP server '%s' not found: %w", p.serverID, err) } - // Build arguments for the MCP tool - // Note: model metadata is loaded internally by the MCP tool + var lastError error + var lastLintErrors string + + for attempt := 1; attempt <= MaxRetries; attempt++ { + // Build arguments for the MCP tool + arguments := p.buildArguments(input, attempt, lastLintErrors) + + // Call the MCP tool + callResult, err := client.CallTool(ctx, p.toolName, arguments) + if err != nil { + lastError = fmt.Errorf("MCP tool call failed: %w", err) + continue + } + + // Parse the result + result, err := p.parseResult(callResult) + if err != nil { + lastError = err + continue + } + + // Validate with linter if DSL is present + if result.DSL != nil { + lintResult := p.validateDSL(result.DSL) + if lintResult.Valid { + return result, nil + } + + // Lint failed, prepare error message for retry + lastLintErrors = lintResult.FormatDiagnostics() + lastError = fmt.Errorf("QueryDSL validation failed: %s", lastLintErrors) + + // Add lint warnings to result warnings + for _, diag := range lintResult.Diagnostics { + result.Warnings = append(result.Warnings, fmt.Sprintf("[%s] %s: %s", diag.Code, diag.Path, diag.Message)) + } + continue + } + + // No DSL returned + lastError = fmt.Errorf("no QueryDSL returned from MCP tool") + } + + return nil, fmt.Errorf("QueryDSL generation failed after %d attempts: %w", MaxRetries, lastError) +} + +// buildArguments constructs the MCP tool arguments +func (p *MCPProvider) buildArguments(input *Input, attempt int, lastLintErrors string) map[string]interface{} { arguments := map[string]interface{}{ "query": input.Query, "models": input.ModelIDs, @@ -60,14 +110,29 @@ func (p *MCPProvider) Generate(ctx *agentContext.Context, input *Input) (*Result arguments["extra"] = input.ExtraParams } - // Call the MCP tool (ctx embeds context.Context) - callResult, err := client.CallTool(ctx, p.toolName, arguments) - if err != nil { - return nil, fmt.Errorf("MCP tool call failed: %w", err) + // Add retry context if this is a retry attempt + if attempt > 1 && lastLintErrors != "" { + arguments["retry"] = map[string]interface{}{ + "attempt": attempt, + "lint_errors": lastLintErrors, + "instructions": "The previous QueryDSL was invalid. Please fix the errors and regenerate.", + } } - // Parse the result - return p.parseResult(callResult) + return arguments +} + +// validateDSL validates the generated QueryDSL using the linter +func (p *MCPProvider) validateDSL(dsl *gou.QueryDSL) *linter.LintResult { + // Marshal DSL to JSON for linting + jsonBytes, err := json.Marshal(dsl) + if err != nil { + result := &linter.LintResult{Valid: false} + return result + } + + _, lintResult := linter.Parse(string(jsonBytes)) + return lintResult } // parseResult extracts QueryDSL from the MCP tool response diff --git a/agent/search/nlp/querydsl/mcp_test.go b/agent/search/nlp/querydsl/mcp_test.go index 650cc3d8..be413001 100644 --- a/agent/search/nlp/querydsl/mcp_test.go +++ b/agent/search/nlp/querydsl/mcp_test.go @@ -200,3 +200,38 @@ func TestGenerator_MCP_Integration(t *testing.T) { assert.NotEmpty(t, result.Warnings) }) } + +func TestMCPProvider_Generate_WithRetry(t *testing.T) { + test.Prepare(t, config.Conf) + defer test.Clean() + + ctx := newTestContext() + + // Create MCP provider for search.generate_querydsl_with_retry + // This tool returns invalid DSL on first call, valid on second + provider, err := NewMCPProvider("search.generate_querydsl_with_retry") + assert.NoError(t, err) + assert.NotNil(t, provider) + + t.Run("retry_on_lint_failure", func(t *testing.T) { + input := &Input{ + Query: "test retry mechanism", + ModelIDs: []string{"user"}, + Limit: 10, + } + + // This should succeed after retry + // First call returns invalid DSL (missing 'from') + // Second call (with lint_errors) returns valid DSL + result, err := provider.Generate(ctx, input) + assert.NoError(t, err) + assert.NotNil(t, result) + + if result != nil && result.DSL != nil { + // Should have valid DSL after retry + assert.NotNil(t, result.DSL.From, "DSL should have 'from' field after retry") + // Explain should indicate this was fixed after receiving lint errors + assert.Contains(t, result.Explain, "fixed after receiving lint errors") + } + }) +} From c86ccb55b1f85a48900faa667be696ca4c8ffc06 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 15:32:20 +0800 Subject: [PATCH 4/7] Implement System Agents Configuration and Loading Mechanism - Added configuration support for system agents in the assistant initialization process, allowing for custom connectors for agents like __yao.keyword and __yao.querydsl. - Implemented the loading mechanism for system agents from bindata, ensuring that essential agents are available during runtime. - Updated the LoadBuiltIn function to exclude system agents from being removed, enhancing the management of built-in and system agents. - Enhanced test coverage by introducing tests for loading system agents, verifying their presence and correctness in the cache. - Updated documentation to reflect the new system agents configuration and loading processes. --- agent/assistant/load.go | 8 +- agent/assistant/load_system.go | 367 ++++++++++++++++ agent/assistant/load_test.go | 189 ++++++--- agent/load.go | 20 +- agent/types/types.go | 19 + data/bindata.go | 576 +++++++++++++++++++------- yao/assistants/entity/package.yao | 10 + yao/assistants/entity/prompts.yml | 28 ++ yao/assistants/keyword/package.yao | 9 + yao/assistants/keyword/prompts.yml | 24 ++ yao/assistants/needsearch/package.yao | 9 + yao/assistants/needsearch/prompts.yml | 20 + yao/assistants/prompt/package.yao | 8 + yao/assistants/prompt/prompts.yml | 25 ++ yao/assistants/querydsl/package.yao | 9 + yao/assistants/querydsl/prompts.yml | 43 ++ yao/assistants/title/package.yao | 8 + yao/assistants/title/prompts.yml | 26 ++ 18 files changed, 1205 insertions(+), 193 deletions(-) create mode 100644 agent/assistant/load_system.go create mode 100644 yao/assistants/entity/package.yao create mode 100644 yao/assistants/entity/prompts.yml create mode 100644 yao/assistants/keyword/package.yao create mode 100644 yao/assistants/keyword/prompts.yml create mode 100644 yao/assistants/needsearch/package.yao create mode 100644 yao/assistants/needsearch/prompts.yml create mode 100644 yao/assistants/prompt/package.yao create mode 100644 yao/assistants/prompt/prompts.yml create mode 100644 yao/assistants/querydsl/package.yao create mode 100644 yao/assistants/querydsl/prompts.yml create mode 100644 yao/assistants/title/package.yao create mode 100644 yao/assistants/title/prompts.yml diff --git a/agent/assistant/load.go b/agent/assistant/load.go index 38ebe832..b281d257 100644 --- a/agent/assistant/load.go +++ b/agent/assistant/load.go @@ -45,7 +45,7 @@ func LoadBuiltIn() error { // Get all existing built-in assistants deletedBuiltIn := map[string]bool{} - // Remove the built-in assistants + // Remove the built-in assistants (exclude system agents with __yao. prefix) if storage != nil { builtIn := true @@ -54,8 +54,12 @@ func LoadBuiltIn() error { return err } - // Get all existing built-in assistants + // Get all existing built-in assistants (exclude system agents) for _, assistant := range res.Data { + // Skip system agents (they are managed by LoadSystemAgents) + if strings.HasPrefix(assistant.ID, "__yao.") { + continue + } deletedBuiltIn[assistant.ID] = true } } diff --git a/agent/assistant/load_system.go b/agent/assistant/load_system.go new file mode 100644 index 00000000..afc425ab --- /dev/null +++ b/agent/assistant/load_system.go @@ -0,0 +1,367 @@ +package assistant + +import ( + "fmt" + "path/filepath" + "strings" + + "github.com/yaoapp/gou/application" + "github.com/yaoapp/gou/connector" + gouOpenAI "github.com/yaoapp/gou/connector/openai" + "github.com/yaoapp/kun/log" + "github.com/yaoapp/yao/agent/i18n" + store "github.com/yaoapp/yao/agent/store/types" + "github.com/yaoapp/yao/data" + "gopkg.in/yaml.v3" +) + +// systemAgents defines the system agents loaded from bindata +// These are internal agents used by the system (e.g., keyword extraction, querydsl generation) +// The directory name is without __yao. prefix, prefix is added during loading +// Format: directory name -> bindata path prefix +var systemAgents = []string{ + "keyword", + "querydsl", + "title", + "prompt", + "needsearch", + "entity", +} + +// SystemConfig holds the system agents connector configuration +// This is set from agent.yml system block +type SystemConfig struct { + Default string // Default connector for all system agents + Keyword string // Connector for __yao.keyword agent + QueryDSL string // Connector for __yao.querydsl agent + Title string // Connector for __yao.title agent + Prompt string // Connector for __yao.prompt agent + NeedSearch string // Connector for __yao.needsearch agent + Entity string // Connector for __yao.entity agent +} + +// systemConfig holds the system agents configuration (global variable like others in load.go) +var systemConfig *SystemConfig = nil + +// SetSystemConfig sets the system agents configuration +func SetSystemConfig(config *SystemConfig) { + systemConfig = config +} + +// GetSystemConfig returns the system agents configuration +func GetSystemConfig() *SystemConfig { + return systemConfig +} + +// LoadSystemAgents loads the system agents from bindata +// These are internal agents like __yao.keyword and __yao.querydsl +// They are loaded before application assistants +// Behavior is same as LoadBuiltIn, just reads from bindata instead of filesystem +func LoadSystemAgents() error { + + // Get all existing system agents (for cleanup) + deletedSystem := map[string]bool{} + if storage != nil { + // System agents have "system" tag + tags := []string{"system"} + builtIn := true + res, err := storage.GetAssistants(store.AssistantFilter{ + Tags: tags, + BuiltIn: &builtIn, + Select: []string{"assistant_id", "id"}, + }) + if err != nil { + log.Warn("Failed to get existing system agents: %v", err) + } else { + for _, assistant := range res.Data { + deletedSystem[assistant.ID] = true + } + } + } + + sort := 1 + for _, name := range systemAgents { + // Build agent ID with __yao. prefix + id := "__yao." + name + pathPrefix := "yao/assistants/" + name + + assistant, err := loadSystemAgent(id, pathPrefix) + if err != nil { + log.Warn("Failed to load system agent %s: %v", id, err) + continue + } + + // Set sort order + if assistant.Sort == 0 { + assistant.Sort = sort + } + + // Save to storage + if err := assistant.Save(); err != nil { + log.Warn("Failed to save system agent %s: %v", id, err) + continue + } + + // Initialize the assistant + if err := assistant.initialize(); err != nil { + log.Warn("Failed to initialize system agent %s: %v", id, err) + continue + } + + sort++ + loaded.Put(assistant) + log.Trace("Loaded system agent: %s", id) + + // Remove from deleted list + delete(deletedSystem, id) + } + + // Remove deleted system agents + if len(deletedSystem) > 0 { + assistantIDs := []string{} + for assistantID := range deletedSystem { + assistantIDs = append(assistantIDs, assistantID) + } + if _, err := storage.DeleteAssistants(store.AssistantFilter{AssistantIDs: assistantIDs}); err != nil { + log.Warn("Failed to delete obsolete system agents: %v", err) + } + } + + return nil +} + +// loadSystemAgent loads a single system agent from bindata +// This follows the same pattern as LoadPath but reads from bindata +func loadSystemAgent(id, pathPrefix string) (*Assistant, error) { + // Read package.yao from bindata + pkgPath := pathPrefix + "/package.yao" + pkgContent, err := data.Read(pkgPath) + if err != nil { + return nil, fmt.Errorf("failed to read %s: %w", pkgPath, err) + } + + // Parse package.yao + var pkgData map[string]interface{} + if err := application.Parse(pkgPath, pkgContent, &pkgData); err != nil { + return nil, fmt.Errorf("failed to parse %s: %w", pkgPath, err) + } + + // Set assistant_id and path + pkgData["assistant_id"] = id + pkgData["path"] = "/" + pathPrefix + + // Set type if not specified + if _, has := pkgData["type"]; !has { + pkgData["type"] = "assistant" + } + + // Resolve connector for this system agent + connectorID := resolveSystemConnector(id) + if connectorID != "" { + pkgData["connector"] = connectorID + } + + // Read prompts.yml from bindata (default prompts) + promptsPath := pathPrefix + "/prompts.yml" + promptsContent, err := data.Read(promptsPath) + if err == nil { + var prompts []store.Prompt + if err := yaml.Unmarshal(promptsContent, &prompts); err == nil && len(prompts) > 0 { + pkgData["prompts"] = prompts + } + } + + // Read prompt_presets from prompts directory + presets := loadSystemPromptPresets(pathPrefix) + if len(presets) > 0 { + pkgData["prompt_presets"] = presets + } + + // Load scripts from src directory (hook script source and other scripts sources) + // These will be compiled by loadMap -> LoadScriptsFromData + hookScriptSource, scriptsSource := loadSystemScripts(pathPrefix) + if hookScriptSource != "" { + pkgData["script"] = hookScriptSource + } + if len(scriptsSource) > 0 { + pkgData["scripts"] = scriptsSource + } + + // Read locales + locales, err := loadSystemLocales(pathPrefix) + if err == nil && len(locales) > 0 { + pkgData["locales"] = locales + } + + // Mark as system agent + pkgData["readonly"] = true + pkgData["built_in"] = true + pkgData["tags"] = []string{"system"} + + // Load from map (same as LoadPath, includes initialize()) + return loadMap(pkgData) +} + +// resolveSystemConnector resolves the connector for a system agent +// Priority: specific agent config > system.default > defaultConnector > fallback to first capable connector +func resolveSystemConnector(agentID string) string { + // Try specific agent config first + if systemConfig != nil { + switch agentID { + case "__yao.keyword": + if systemConfig.Keyword != "" { + return systemConfig.Keyword + } + case "__yao.querydsl": + if systemConfig.QueryDSL != "" { + return systemConfig.QueryDSL + } + case "__yao.title": + if systemConfig.Title != "" { + return systemConfig.Title + } + case "__yao.prompt": + if systemConfig.Prompt != "" { + return systemConfig.Prompt + } + case "__yao.needsearch": + if systemConfig.NeedSearch != "" { + return systemConfig.NeedSearch + } + case "__yao.entity": + if systemConfig.Entity != "" { + return systemConfig.Entity + } + } + + // Try system default + if systemConfig.Default != "" { + return systemConfig.Default + } + } + + // Try global default connector + if defaultConnector != "" { + return defaultConnector + } + + // Fallback: find first connector that supports tool calling + return findCapableConnector() +} + +// findCapableConnector finds the first connector that supports tool calling +func findCapableConnector() string { + // Get all registered connectors + for id, conn := range connector.Connectors { + if !conn.Is(connector.OPENAI) { + continue + } + + // Check from modelCapabilities (user-defined in models.yml) + if caps, exists := modelCapabilities[id]; exists { + if caps.ToolCalls { + return id + } + } + + // Check capabilities from connector's Options + if connOpenAI, ok := conn.(*gouOpenAI.Connector); ok { + if connOpenAI.Options.Capabilities != nil && connOpenAI.Options.Capabilities.ToolCalls { + return id + } + } + } + + // No capable connector found, return empty + return "" +} + +// loadSystemPromptPresets loads prompt presets from bindata prompts directory +func loadSystemPromptPresets(pathPrefix string) map[string][]store.Prompt { + presets := make(map[string][]store.Prompt) + promptsDir := pathPrefix + "/prompts" + + // Try common preset files + presetFiles := []string{"chat.yml", "task.yml", "code.yml", "analysis.yml"} + for _, filename := range presetFiles { + presetPath := promptsDir + "/" + filename + content, err := data.Read(presetPath) + if err != nil { + continue + } + + var prompts []store.Prompt + if err := yaml.Unmarshal(content, &prompts); err == nil && len(prompts) > 0 { + presetName := strings.TrimSuffix(filename, ".yml") + presets[presetName] = prompts + } + } + + return presets +} + +// loadSystemScripts loads scripts source from bindata src directory +// Returns hook script source and other scripts sources (as strings) +// These will be compiled by loadMap -> LoadScriptsFromData +func loadSystemScripts(pathPrefix string) (string, map[string]string) { + srcDir := pathPrefix + "/src" + + // Try to load hook script (index.ts) + var hookScriptSource string + indexPath := srcDir + "/index.ts" + indexContent, err := data.Read(indexPath) + if err == nil && len(indexContent) > 0 { + hookScriptSource = string(indexContent) + } + + // Try to load other scripts + scripts := make(map[string]string) + scriptFiles := []string{"utils.ts", "helpers.ts", "tools.ts"} + for _, filename := range scriptFiles { + scriptPath := srcDir + "/" + filename + content, err := data.Read(scriptPath) + if err != nil { + continue + } + + scriptName := strings.TrimSuffix(filename, ".ts") + scripts[scriptName] = string(content) + } + + if len(scripts) == 0 { + scripts = nil + } + + return hookScriptSource, scripts +} + +// loadSystemLocales loads locales from bindata +func loadSystemLocales(pathPrefix string) (i18n.Map, error) { + locales := make(i18n.Map) + + // Try to load common locale files + localeFiles := []string{"en-us.yml", "zh-cn.yml", "en.yml", "zh.yml"} + localesDir := pathPrefix + "/locales" + + for _, filename := range localeFiles { + localePath := filepath.Join(localesDir, filename) + content, err := data.Read(localePath) + if err != nil { + continue + } + + // Parse locale file + locale := strings.TrimSuffix(filename, ".yml") + var messages map[string]any + if err := yaml.Unmarshal(content, &messages); err != nil { + continue + } + + locales[locale] = i18n.I18n{ + Locale: locale, + Messages: messages, + } + } + + return locales, nil +} diff --git a/agent/assistant/load_test.go b/agent/assistant/load_test.go index 49333815..7ca79bc6 100644 --- a/agent/assistant/load_test.go +++ b/agent/assistant/load_test.go @@ -1,10 +1,12 @@ -package assistant +package assistant_test import ( "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/yaoapp/yao/agent" + "github.com/yaoapp/yao/agent/assistant" store "github.com/yaoapp/yao/agent/store/types" "github.com/yaoapp/yao/config" "github.com/yaoapp/yao/test" @@ -14,13 +16,19 @@ func prepare(t *testing.T) { test.Prepare(t, config.Conf) } +func prepareAgent(t *testing.T) { + test.Prepare(t, config.Conf) + err := agent.Load(config.Conf) + require.NoError(t, err, "agent.Load should succeed") +} + // TestLoadPath tests loading assistant from path func TestLoadPath(t *testing.T) { prepare(t) defer test.Clean() t.Run("LoadFullFieldsAssistant", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -67,7 +75,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadConnectorOptions", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -84,7 +92,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadPromptPresets", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -116,7 +124,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadKnowledgeBase", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -129,7 +137,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadMCPServers", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -143,7 +151,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadWorkflow", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -156,7 +164,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadPlaceholder", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -169,7 +177,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadLocales", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) require.NotNil(t, assistant) @@ -186,7 +194,7 @@ func TestLoadPath(t *testing.T) { }) t.Run("LoadNonExistentAssistant", func(t *testing.T) { - _, err := LoadPath("/assistants/non-existent") + _, err := assistant.LoadPath("/assistants/non-existent") assert.Error(t, err) }) } @@ -196,7 +204,7 @@ func TestLoadPathMCPTest(t *testing.T) { prepare(t) defer test.Clean() - assistant, err := LoadPath("/assistants/tests/mcptest") + assistant, err := assistant.LoadPath("/assistants/tests/mcptest") require.NoError(t, err) require.NotNil(t, assistant) @@ -220,7 +228,7 @@ func TestLoadPathBuildRequest(t *testing.T) { prepare(t) defer test.Clean() - assistant, err := LoadPath("/assistants/tests/buildrequest") + assistant, err := assistant.LoadPath("/assistants/tests/buildrequest") require.NoError(t, err) require.NotNil(t, assistant) @@ -238,57 +246,57 @@ func TestLoadPathBuildRequest(t *testing.T) { // TestCache tests the assistant cache functionality func TestCache(t *testing.T) { // Clear any existing cache - ClearCache() + assistant.ClearCache() // Set small cache for testing - SetCache(3) - assert.NotNil(t, loaded) + assistant.SetCache(3) + assert.NotNil(t, assistant.GetCache()) // Create test assistants - ast1 := &Assistant{AssistantModel: store.AssistantModel{ID: "id1", Name: "Assistant 1"}} - ast2 := &Assistant{AssistantModel: store.AssistantModel{ID: "id2", Name: "Assistant 2"}} - ast3 := &Assistant{AssistantModel: store.AssistantModel{ID: "id3", Name: "Assistant 3"}} - ast4 := &Assistant{AssistantModel: store.AssistantModel{ID: "id4", Name: "Assistant 4"}} + ast1 := &assistant.Assistant{AssistantModel: store.AssistantModel{ID: "id1", Name: "Assistant 1"}} + ast2 := &assistant.Assistant{AssistantModel: store.AssistantModel{ID: "id2", Name: "Assistant 2"}} + ast3 := &assistant.Assistant{AssistantModel: store.AssistantModel{ID: "id3", Name: "Assistant 3"}} + ast4 := &assistant.Assistant{AssistantModel: store.AssistantModel{ID: "id4", Name: "Assistant 4"}} t.Run("PutAndGet", func(t *testing.T) { - loaded.Put(ast1) - assert.Equal(t, 1, loaded.Len()) + assistant.GetCache().Put(ast1) + assert.Equal(t, 1, assistant.GetCache().Len()) - cached, exists := loaded.Get("id1") + cached, exists := assistant.GetCache().Get("id1") assert.True(t, exists) assert.Equal(t, ast1, cached) }) t.Run("CacheEviction", func(t *testing.T) { - loaded.Put(ast2) - loaded.Put(ast3) - assert.Equal(t, 3, loaded.Len()) + assistant.GetCache().Put(ast2) + assistant.GetCache().Put(ast3) + assert.Equal(t, 3, assistant.GetCache().Len()) // Access ast1 to make it recently used - loaded.Get("id1") + assistant.GetCache().Get("id1") // Add ast4, should evict ast2 (least recently used) - loaded.Put(ast4) - assert.Equal(t, 3, loaded.Len()) + assistant.GetCache().Put(ast4) + assert.Equal(t, 3, assistant.GetCache().Len()) - _, exists := loaded.Get("id2") + _, exists := assistant.GetCache().Get("id2") assert.False(t, exists, "ast2 should be evicted") - _, exists = loaded.Get("id1") + _, exists = assistant.GetCache().Get("id1") assert.True(t, exists, "ast1 should still exist") - _, exists = loaded.Get("id4") + _, exists = assistant.GetCache().Get("id4") assert.True(t, exists, "ast4 should exist") }) t.Run("ClearCache", func(t *testing.T) { - ClearCache() - assert.Nil(t, loaded) + assistant.ClearCache() + assert.Nil(t, assistant.GetCache()) }) t.Run("SetCacheAfterClear", func(t *testing.T) { - SetCache(100) - assert.NotNil(t, loaded) + assistant.SetCache(100) + assert.NotNil(t, assistant.GetCache()) }) } @@ -298,7 +306,7 @@ func TestClone(t *testing.T) { defer test.Clean() t.Run("CloneFullFieldsAssistant", func(t *testing.T) { - original, err := LoadPath("/assistants/tests/fullfields") + original, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) clone := original.Clone() @@ -328,7 +336,7 @@ func TestClone(t *testing.T) { }) t.Run("CloneNil", func(t *testing.T) { - var nilAssistant *Assistant + var nilAssistant *assistant.Assistant assert.Nil(t, nilAssistant.Clone()) }) } @@ -339,7 +347,7 @@ func TestUpdate(t *testing.T) { defer test.Clean() t.Run("UpdateBasicFields", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) updates := map[string]interface{}{ @@ -357,7 +365,7 @@ func TestUpdate(t *testing.T) { }) t.Run("UpdateConnectorOptions", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) updates := map[string]interface{}{ @@ -377,7 +385,7 @@ func TestUpdate(t *testing.T) { }) t.Run("UpdatePromptPresets", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) updates := map[string]interface{}{ @@ -398,7 +406,7 @@ func TestUpdate(t *testing.T) { }) t.Run("UpdateSource", func(t *testing.T) { - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) updates := map[string]interface{}{ @@ -412,7 +420,7 @@ func TestUpdate(t *testing.T) { }) t.Run("UpdateNilAssistant", func(t *testing.T) { - var nilAssistant *Assistant + var nilAssistant *assistant.Assistant err := nilAssistant.Update(map[string]interface{}{"name": "test"}) assert.Error(t, err) }) @@ -423,7 +431,7 @@ func TestMap(t *testing.T) { prepare(t) defer test.Clean() - assistant, err := LoadPath("/assistants/tests/fullfields") + assistant, err := assistant.LoadPath("/assistants/tests/fullfields") require.NoError(t, err) m := assistant.Map() @@ -451,16 +459,103 @@ func TestMap(t *testing.T) { assert.Equal(t, assistant.Source, m["source"]) } +// TestLoadSystemAgents tests loading system agents from bindata +func TestLoadSystemAgents(t *testing.T) { + prepareAgent(t) + defer test.Clean() + + // Clear cache first + assistant.ClearCache() + assistant.SetCache(200) + + t.Run("LoadSystemAgents", func(t *testing.T) { + err := assistant.LoadSystemAgents() + require.NoError(t, err) + + // Check __yao.keyword + keywordAst, keywordExists := assistant.GetCache().Get("__yao.keyword") + require.True(t, keywordExists, "__yao.keyword should be loaded") + assert.Equal(t, "__yao.keyword", keywordAst.ID) + assert.Equal(t, "Keyword Extraction", keywordAst.Name) + assert.True(t, keywordAst.Readonly) + assert.True(t, keywordAst.BuiltIn) + assert.Contains(t, keywordAst.Tags, "system") + assert.NotNil(t, keywordAst.Prompts) + assert.Greater(t, len(keywordAst.Prompts), 0) + + // Check __yao.querydsl + querydslAst, querydslExists := assistant.GetCache().Get("__yao.querydsl") + require.True(t, querydslExists, "__yao.querydsl should be loaded") + assert.Equal(t, "__yao.querydsl", querydslAst.ID) + assert.Equal(t, "QueryDSL Generator", querydslAst.Name) + assert.True(t, querydslAst.Readonly) + assert.True(t, querydslAst.BuiltIn) + assert.Contains(t, querydslAst.Tags, "system") + assert.NotNil(t, querydslAst.Prompts) + assert.Greater(t, len(querydslAst.Prompts), 0) + + // Check __yao.title + titleAst, titleExists := assistant.GetCache().Get("__yao.title") + require.True(t, titleExists, "__yao.title should be loaded") + assert.Equal(t, "__yao.title", titleAst.ID) + assert.Equal(t, "Title Generator", titleAst.Name) + assert.True(t, titleAst.Readonly) + assert.True(t, titleAst.BuiltIn) + + // Check __yao.prompt + promptAst, promptExists := assistant.GetCache().Get("__yao.prompt") + require.True(t, promptExists, "__yao.prompt should be loaded") + assert.Equal(t, "__yao.prompt", promptAst.ID) + assert.Equal(t, "Prompt Optimizer", promptAst.Name) + assert.True(t, promptAst.Readonly) + assert.True(t, promptAst.BuiltIn) + + // Check __yao.needsearch + needsearchAst, needsearchExists := assistant.GetCache().Get("__yao.needsearch") + require.True(t, needsearchExists, "__yao.needsearch should be loaded") + assert.Equal(t, "__yao.needsearch", needsearchAst.ID) + assert.Equal(t, "Need Search", needsearchAst.Name) + assert.True(t, needsearchAst.Readonly) + assert.True(t, needsearchAst.BuiltIn) + }) + + t.Run("SystemAgentsSavedToStorage", func(t *testing.T) { + // System agents should be saved to storage + require.NotNil(t, assistant.GetStore(), "storage should be initialized") + + // Check __yao.keyword in storage + builtIn := true + tags := []string{"system"} + res, err := assistant.GetStore().GetAssistants(store.AssistantFilter{ + BuiltIn: &builtIn, + Tags: tags, + Select: []string{"assistant_id", "name"}, + }) + require.NoError(t, err) + require.Greater(t, len(res.Data), 0, "System agents should be in storage") + + // Verify at least one system agent exists + found := false + for _, ast := range res.Data { + if ast.ID == "__yao.keyword" || ast.ID == "__yao.querydsl" { + found = true + break + } + } + assert.True(t, found, "System agents should be found in storage") + }) +} + // TestValidate tests the assistant Validate method func TestValidate(t *testing.T) { tests := []struct { name string - ast *Assistant + ast *assistant.Assistant wantErr bool }{ { name: "ValidAssistant", - ast: &Assistant{ + ast: &assistant.Assistant{ AssistantModel: store.AssistantModel{ ID: "test-id", Name: "Test Assistant", @@ -471,7 +566,7 @@ func TestValidate(t *testing.T) { }, { name: "MissingID", - ast: &Assistant{ + ast: &assistant.Assistant{ AssistantModel: store.AssistantModel{ Name: "Test Assistant", Connector: "gpt-4o", @@ -481,7 +576,7 @@ func TestValidate(t *testing.T) { }, { name: "MissingName", - ast: &Assistant{ + ast: &assistant.Assistant{ AssistantModel: store.AssistantModel{ ID: "test-id", Connector: "gpt-4o", diff --git a/agent/load.go b/agent/load.go index cba97c2f..7ff19d21 100644 --- a/agent/load.go +++ b/agent/load.go @@ -234,7 +234,25 @@ func initAssistant() error { assistant.SetGlobalSearchConfig(agentDSL.Search) } - // Load Built-in Assistants + // Set system agents configuration + if agentDSL.System != nil { + assistant.SetSystemConfig(&assistant.SystemConfig{ + Default: agentDSL.System.Default, + Keyword: agentDSL.System.Keyword, + QueryDSL: agentDSL.System.QueryDSL, + Title: agentDSL.System.Title, + Prompt: agentDSL.System.Prompt, + NeedSearch: agentDSL.System.NeedSearch, + Entity: agentDSL.System.Entity, + }) + } + + // Load System Agents (from bindata: __yao.keyword, __yao.querydsl, etc.) + if err := assistant.LoadSystemAgents(); err != nil { + return err + } + + // Load Built-in Assistants (from application /assistants directory) err := assistant.LoadBuiltIn() if err != nil { return err diff --git a/agent/types/types.go b/agent/types/types.go index 20594889..342bee2f 100644 --- a/agent/types/types.go +++ b/agent/types/types.go @@ -16,6 +16,13 @@ type DSL struct { StoreSetting store.Setting `json:"store" yaml:"store"` // The store setting of the assistant Cache string `json:"cache" yaml:"cache"` // The cache store of the assistant, if not set, default is "__yao.agent.cache" + // System Agents Connector Settings + // =============================== + // System configures connectors for system agents (__yao.keyword, __yao.querydsl, __yao.title, __yao.prompt) + // Each agent can have its own connector, or use the default + // If not set, fallback to the first connector that supports the required capabilities + System *System `json:"system,omitempty" yaml:"system,omitempty"` + // Global External Settings - model capabilities, tools, etc. // =============================== Models map[string]openai.Capabilities `json:"models,omitempty" yaml:"models,omitempty"` // The model capabilities configuration @@ -48,6 +55,18 @@ type Uses struct { Rerank string `json:"rerank,omitempty" yaml:"rerank,omitempty"` // Result reranking: "builtin", "", "mcp:." } +// System configures connectors for system agents +// =============================== +type System struct { + Default string `json:"default,omitempty" yaml:"default,omitempty"` // Default connector for all system agents + Keyword string `json:"keyword,omitempty" yaml:"keyword,omitempty"` // Connector for __yao.keyword agent + QueryDSL string `json:"querydsl,omitempty" yaml:"querydsl,omitempty"` // Connector for __yao.querydsl agent + Title string `json:"title,omitempty" yaml:"title,omitempty"` // Connector for __yao.title agent + Prompt string `json:"prompt,omitempty" yaml:"prompt,omitempty"` // Connector for __yao.prompt agent + NeedSearch string `json:"needsearch,omitempty" yaml:"needsearch,omitempty"` // Connector for __yao.needsearch agent + Entity string `json:"entity,omitempty" yaml:"entity,omitempty"` // Connector for __yao.entity agent +} + // Mention Structure // =============================== type Mention struct { diff --git a/data/bindata.go b/data/bindata.go index e2f8a6d7..3f8303a9 100644 --- a/data/bindata.go +++ b/data/bindata.go @@ -69,6 +69,18 @@ // .tmp/data/libsui/yao.ts // .tmp/data/public/index.html // .tmp/data/ui/index.html +// .tmp/data/yao/assistants/entity/package.yao +// .tmp/data/yao/assistants/entity/prompts.yml +// .tmp/data/yao/assistants/keyword/package.yao +// .tmp/data/yao/assistants/keyword/prompts.yml +// .tmp/data/yao/assistants/needsearch/package.yao +// .tmp/data/yao/assistants/needsearch/prompts.yml +// .tmp/data/yao/assistants/prompt/package.yao +// .tmp/data/yao/assistants/prompt/prompts.yml +// .tmp/data/yao/assistants/querydsl/package.yao +// .tmp/data/yao/assistants/querydsl/prompts.yml +// .tmp/data/yao/assistants/title/package.yao +// .tmp/data/yao/assistants/title/prompts.yml // .tmp/data/yao/data/icons/404.png // .tmp/data/yao/data/icons/icon.icns // .tmp/data/yao/data/icons/icon.ico @@ -321,7 +333,7 @@ func cuiSetupIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -341,7 +353,7 @@ func cuiV09IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -361,7 +373,7 @@ func cuiV10IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -381,7 +393,7 @@ func cuiV10Layouts__indexAsyncJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -401,7 +413,7 @@ func cuiV10UmiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -421,7 +433,7 @@ func initEnv() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -441,7 +453,7 @@ func initVscodeSettingsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -461,7 +473,7 @@ func initVscodeTypesRuntimeConsoleDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -481,7 +493,7 @@ func initVscodeTypesRuntimeExceptionDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -501,7 +513,7 @@ func initVscodeTypesRuntimeFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -521,7 +533,7 @@ func initVscodeTypesRuntimeGlobalDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -541,7 +553,7 @@ func initVscodeTypesRuntimeHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -561,7 +573,7 @@ func initVscodeTypesRuntimeIoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -581,7 +593,7 @@ func initVscodeTypesRuntimeLogDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -601,7 +613,7 @@ func initVscodeTypesRuntimeNeoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -621,7 +633,7 @@ func initVscodeTypesRuntimeProcessFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -641,7 +653,7 @@ func initVscodeTypesRuntimeProcessHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -661,7 +673,7 @@ func initVscodeTypesRuntimeProcessModelDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -681,7 +693,7 @@ func initVscodeTypesRuntimeProcessDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -701,7 +713,7 @@ func initVscodeTypesRuntimeQueryDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -721,7 +733,7 @@ func initVscodeTypesRuntimeStoreDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -741,7 +753,7 @@ func initVscodeTypesRuntimeSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -761,7 +773,7 @@ func initVscodeTypesRuntimeTimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -781,7 +793,7 @@ func initVscodeTypesRuntimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -801,7 +813,7 @@ func initVscodeTypesSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -821,7 +833,7 @@ func initAppYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -841,7 +853,7 @@ func initDataReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -861,7 +873,7 @@ func initDataTemplatesDefault__assetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -881,7 +893,7 @@ func initDataTemplatesDefault__assetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -901,7 +913,7 @@ func initDataTemplatesDefault__assetsImagesLogosLogo_colorSvg() (*asset, error) return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -921,7 +933,7 @@ func initDataTemplatesDefault__assetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -941,7 +953,7 @@ func initDataTemplatesDefault__dataJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -961,7 +973,7 @@ func initDataTemplatesDefault__documentHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -981,7 +993,7 @@ func initDataTemplatesDefaultIndexIndexCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1001,7 +1013,7 @@ func initDataTemplatesDefaultIndexIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1021,7 +1033,7 @@ func initDataTemplatesDefaultIndexIndexJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1041,7 +1053,7 @@ func initDbReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1061,7 +1073,7 @@ func initFlowsMenuFlowYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1081,7 +1093,7 @@ func initFormsAccountFormYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1101,7 +1113,7 @@ func initIconsAppIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1121,7 +1133,7 @@ func initIconsAppIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1141,7 +1153,7 @@ func initIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1161,7 +1173,7 @@ func initLoginsAdminLoginYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1181,7 +1193,7 @@ func initLogsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1201,7 +1213,7 @@ func initModelsAdminUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1221,7 +1233,7 @@ func initModelsTestsPetModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1241,7 +1253,7 @@ func initNeoNeoYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1261,7 +1273,7 @@ func initPublicReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1281,7 +1293,7 @@ func initPublicAssetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1301,7 +1313,7 @@ func initPublicAssetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1321,7 +1333,7 @@ func initPublicAssetsImagesLogosLogo_colorSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1341,7 +1353,7 @@ func initPublicAssetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1361,7 +1373,7 @@ func initPublicAssetsLibsuiMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1381,7 +1393,7 @@ func initPublicAssetsLibsuiMinJsMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1401,7 +1413,7 @@ func initPublicIndexCfg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1421,7 +1433,7 @@ func initPublicIndexSui() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1441,7 +1453,7 @@ func initScriptsAccountTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1461,7 +1473,7 @@ func initScriptsAiNeoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1481,7 +1493,7 @@ func initScriptsTestsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1501,7 +1513,7 @@ func initScriptsUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1521,7 +1533,7 @@ func initSuisWebSuiYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1541,7 +1553,7 @@ func initTablesAccountTabYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1561,7 +1573,7 @@ func initTsconfigJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1581,7 +1593,7 @@ func libsuiAgentTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1601,7 +1613,7 @@ func libsuiIndexTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1621,7 +1633,7 @@ func libsuiUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1641,7 +1653,7 @@ func libsuiYaoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1661,7 +1673,7 @@ func publicIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1681,7 +1693,247 @@ func uiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsEntityPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x24\x8e\x41\x0a\x83\x30\x10\x45\xf7\x39\xc5\x27\x6b\x29\xc1\xa5\x7b\xcf\x51\x06\x9d\x6a\x50\x93\x30\x99\xa2\x52\xbc\x7b\x49\xb2\x7d\xff\xf1\x66\x7e\x06\xb0\x81\x0e\xb6\x03\xec\x18\xd4\xeb\x8d\xf1\x52\xa1\x49\x7d\x0c\xb6\x2b\xf3\xcc\x79\x12\x9f\x2a\x28\x56\x9b\xc1\xc5\xf6\x9c\x41\x61\x86\xf0\x4e\x45\xc8\xab\x4f\x19\x9f\x28\xd8\x42\x3c\x77\x9e\x17\xc6\x22\x94\xd6\x96\xd2\x3b\xd5\x4b\x67\x94\x8d\xa5\xb1\x58\xcb\xd9\x0e\x28\xcf\x00\xf6\xa0\xeb\xad\x71\xe3\xca\x7a\xe7\x5c\xd7\xb8\xf2\x91\x58\x48\xbf\x52\x1a\xee\xd5\x1b\xe0\x31\x8f\x31\xff\x00\x00\x00\xff\xff\xf4\x64\xb6\xe3\xc5\x00\x00\x00") + +func yaoAssistantsEntityPackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsEntityPackageYao, + "yao/assistants/entity/package.yao", + ) +} + +func yaoAssistantsEntityPackageYao() (*asset, error) { + bytes, err := yaoAssistantsEntityPackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/entity/package.yao", size: 197, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsEntityPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x7c\x53\xcb\x6e\xdb\x3a\x10\xdd\xfb\x2b\x0e\x94\x8d\x2f\xc0\x08\x48\xee\xce\xbb\xc2\x51\x8a\x34\x81\x15\xc8\x29\xb2\x28\x8a\x98\x95\xc6\x0a\x1b\x89\x14\xc8\x91\x13\xc5\xf2\xbf\x17\xa4\x25\x3f\xba\xe8\xc6\x26\x87\xa3\xf3\x1a\xf2\x12\xd6\x54\x34\x83\xeb\x1c\x53\x3d\x01\x72\xa3\x99\x34\xcf\xd0\x4f\x00\x20\xf9\x60\x2b\x73\x06\x69\x56\xac\xc8\x41\xea\x02\x96\x2a\xc9\xca\x68\xf7\xaa\x1a\x87\xb5\x35\x35\x98\x3e\x18\x6b\x63\xf1\xa6\xcd\x7b\x45\x45\x49\x28\xad\x6c\x5e\x3d\x9e\x63\xdb\xe6\xbe\x3f\x9e\x04\xcc\x8b\x0b\x3c\x49\xf7\x16\xd6\x57\x31\xee\x0a\x0f\xbe\xee\xa0\x65\x4d\xc5\x91\x69\xfa\x48\xd6\x19\x2d\x90\xda\x52\x6a\xf5\x19\x28\x05\x1e\x4c\x3e\xac\x1e\xad\x29\xda\x9c\x05\x92\x0d\x69\x16\x98\x1b\x9d\x53\xc3\x02\xc4\x79\xfc\x5f\x80\xbf\x8e\x0f\x0e\xce\x45\xff\x22\x7e\x27\xd2\x07\xb6\xd0\xfd\x7f\x8c\x8c\xb8\xb5\x1a\x7b\xc9\xad\xa5\x02\xdf\x96\xe9\xe2\xa0\x3b\x23\xd7\x18\xed\x08\xb7\xc6\xd6\x92\x31\xf5\xa7\x30\xba\xea\xf6\x7c\xab\xd5\xea\xb7\x33\x3a\xac\xb7\xe1\x17\x88\x46\x8e\x68\x86\x1f\x43\x0d\xd8\x46\xaa\x88\x66\x88\xe8\x2a\x12\x88\xbc\x75\xbf\x4b\x7c\x6b\x87\x85\xdf\x0a\x44\xdc\x35\xa1\xbc\x4f\xa2\x4f\x6d\xd9\x8f\xf6\xfb\xc1\x7d\x1f\xcc\xf7\x83\x77\xff\x51\x63\x4d\x43\x76\x20\xdc\xee\x76\x03\xe5\x4f\x31\xea\x39\x4b\xe2\x2f\x51\xce\xb4\x36\xa7\xa3\x30\x96\xb6\x24\x0e\xfb\xeb\x53\x45\xa7\x18\x2f\xa1\xf8\x0f\xe6\xf0\xbf\x1b\x03\x3a\x84\xf9\xb5\x55\x05\x55\x4a\x0f\xe9\x5f\xe2\xbb\xa3\x70\x5f\x94\xf3\x57\x70\x3f\x9b\x0e\x77\x37\x0e\x53\xba\x12\xa0\x6b\x81\x38\x1e\x26\x7b\x89\x85\x1f\x41\xa5\x3e\x69\x6c\xf4\x21\x3a\x4c\x2d\xd5\x66\x43\x60\xc5\x15\x39\x01\xc7\x52\x17\xd2\x16\xbe\x71\x1d\xa6\x36\x02\xcc\x4d\x5d\x1b\x7d\x76\x31\xe0\xad\xb8\x19\x9e\xd3\xec\x7e\xf9\x72\x9b\x66\x02\x0f\xe9\xfc\xcb\x53\x72\xf3\x72\xb7\x10\x48\x9f\x17\x4b\x81\x79\x96\xf8\x8a\x40\x96\x3c\x84\xa3\xa7\x74\x40\xbc\x27\x6a\x70\x4c\x01\xb5\xd2\xaa\x96\xd5\xf8\x68\x68\x23\x35\x0f\xad\x4b\x59\x13\x2a\xa9\xcb\x56\x96\x04\xe9\xa0\x74\xd3\xee\x9f\xd0\xa9\x9d\xc9\xe4\x4f\x00\x00\x00\xff\xff\x14\x10\x8e\x69\xa2\x03\x00\x00") + +func yaoAssistantsEntityPromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsEntityPromptsYml, + "yao/assistants/entity/prompts.yml", + ) +} + +func yaoAssistantsEntityPromptsYml() (*asset, error) { + bytes, err := yaoAssistantsEntityPromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/entity/prompts.yml", size: 930, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsKeywordPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\xb1\xaa\xc3\x30\x0c\x45\x77\x7f\xc5\x45\x73\x78\x04\x1e\x5d\xb2\x77\xea\x47\x14\x93\xa8\x10\x8c\x2d\x23\xab\xc4\xa1\xe4\xdf\x8b\xed\xae\xe7\x48\xe7\x7e\x1c\x40\xc9\x47\xa6\x05\xf4\xe0\xf3\x10\xdd\x70\xaf\xa6\x7e\xb5\x5d\x12\x4d\xcd\x6f\x5c\x56\xdd\x73\x07\x0b\xe8\xa7\x11\xc6\x79\xc1\x4b\x25\xc2\xb8\x1a\x56\x49\xc6\xc9\xc6\x9b\x9d\xb9\x67\x0f\xd1\xc0\x3a\x98\xf4\x4a\xa1\x05\x6d\x19\xa0\xe8\xeb\xd3\x24\x70\x67\xb7\x79\x9e\x06\x36\x8e\x99\xd5\xdb\x5b\x5b\x62\xfe\xfb\x77\xc0\xe5\x2e\xf7\x0d\x00\x00\xff\xff\xbc\x6a\x71\x26\xb0\x00\x00\x00") + +func yaoAssistantsKeywordPackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsKeywordPackageYao, + "yao/assistants/keyword/package.yao", + ) +} + +func yaoAssistantsKeywordPackageYao() (*asset, error) { + bytes, err := yaoAssistantsKeywordPackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/keyword/package.yao", size: 176, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsKeywordPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x52\xc1\x8e\xd3\x40\x0c\xbd\xf7\x2b\x9e\xba\xd7\x36\x52\x17\xed\xa5\xb7\x1e\x00\x2d\x08\x58\x2d\x27\x84\x90\x3a\x24\x6e\x62\x3a\xb1\x23\x8f\xd3\x6e\x16\xf8\x77\x94\x69\x93\x1e\xb8\x44\x19\xfb\x3d\xbf\xf7\xc6\x73\x87\x8f\x34\x9c\xd5\x2a\xbc\x7d\x71\x0b\xa5\xb3\x0a\x76\x35\x89\xe3\xc9\xb4\xed\x3c\x2d\xd6\x30\x8d\xb4\x45\x1a\x92\x53\xbb\x00\x4a\x15\x27\xf1\x2d\xfe\x2c\x00\xe0\x9b\xf6\x08\x46\x08\x38\x5e\x47\xd1\x6d\x54\xea\xa8\xe4\x10\x39\x79\x31\x02\x0d\x1e\xd2\x11\x9c\xe0\x3a\xc1\x60\x14\xe9\x14\xc4\x27\x7e\xc2\xc1\xb4\x85\x37\x84\xce\xf4\xc4\x15\x55\x70\x7a\xf1\x62\x91\xf5\xee\xee\xf0\x28\xc9\xad\xcf\x0a\x29\xd7\x36\x05\x76\x12\xe2\xf0\x4a\x99\xc6\xd2\xf5\x9e\x39\x28\x83\xd1\xa1\x8f\x71\xc8\xb8\xfb\x62\xca\x99\x71\xad\x26\x07\xb7\x9d\x9a\x8f\xfa\x41\xaa\xff\xcd\x64\xde\x9b\x02\xcf\xe4\xbd\xc9\xcd\x23\x0b\x3e\x7c\xfd\xf2\x19\x07\xb5\x36\xf8\x6c\xed\x99\x52\xa7\x92\x08\xef\x2e\xf5\xb1\xbc\x8b\xe7\x30\x24\x58\x6e\x55\x38\xb3\x37\x38\x85\xc8\x55\x9e\xb0\xcd\x98\xfd\x7e\xff\x2b\xa9\xe4\xff\xdf\xf9\x0b\x2c\x27\xb1\xe5\x16\xdf\xa7\xc3\x66\xb9\x9a\x1b\xf7\xcb\x15\x8a\xa2\xf8\x91\xf1\x7f\xa7\x39\xb3\x97\xf7\x3d\x57\x14\x59\xe8\x12\x62\x3d\x67\x7f\x58\x6f\x1e\x6e\x49\x2a\xea\x48\x2a\x96\x1a\x2a\xd3\x72\x11\x49\x6a\x6f\xae\xbc\x27\x63\x35\x76\x7e\x25\x88\xf6\x92\x56\xe3\x62\x3a\xb2\xe9\x34\x5e\xdc\x91\x86\x91\x5c\xd2\xf8\x66\x2e\xb4\x47\x29\x63\x5f\x11\x7e\xaa\x37\x48\x2c\x75\x24\x5c\x24\x47\x42\x6a\xd4\x1c\x5d\x63\x21\x51\xc2\xb9\x21\x99\x2f\x7f\xb6\x7b\xe1\x97\xda\xb6\xe3\x5b\x72\xed\x70\xdb\xc9\x1a\x9f\x02\x8b\x07\x96\xbc\x4b\x35\xae\x59\x42\x44\x0c\x52\xf7\xa1\x26\xe8\x21\x37\xae\x89\x16\xff\x02\x00\x00\xff\xff\xd8\xe7\xda\x8e\xeb\x02\x00\x00") + +func yaoAssistantsKeywordPromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsKeywordPromptsYml, + "yao/assistants/keyword/prompts.yml", + ) +} + +func yaoAssistantsKeywordPromptsYml() (*asset, error) { + bytes, err := yaoAssistantsKeywordPromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/keyword/prompts.yml", size: 747, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsNeedsearchPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8d\xb1\x0e\x82\x30\x14\x45\xf7\x7e\xc5\x4d\x67\x62\xd0\x91\xd9\xd9\xc5\x0f\x30\x0d\x5c\x63\x83\x6d\xe1\xf5\x11\x21\x86\x7f\x37\x2d\x8b\xeb\x39\xb9\xe7\x7e\x0d\x60\xa3\x0b\xb4\x1d\xec\x8d\x1c\x70\xa7\x93\xfe\x65\x9b\x22\x06\xe6\x5e\xfc\xa4\x3e\xc5\xe2\xaf\x54\x4a\xf0\x91\xf0\x4f\xcc\x0b\x65\x83\x70\x5e\xbc\x30\x83\xab\x52\xa2\x7b\x23\xff\xed\x75\x9b\x6a\xf8\x93\x64\xa4\x1c\x2c\xd5\x5c\xb6\x1d\xca\x37\x60\x83\x5b\x1f\x9a\x46\x56\x76\x69\xdb\xe6\xc0\xca\x30\x51\x9c\x2e\x52\x12\xed\xe9\x6c\x80\xdd\xec\xe6\x17\x00\x00\xff\xff\x12\x2f\x64\x90\xb2\x00\x00\x00") + +func yaoAssistantsNeedsearchPackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsNeedsearchPackageYao, + "yao/assistants/needsearch/package.yao", + ) +} + +func yaoAssistantsNeedsearchPackageYao() (*asset, error) { + bytes, err := yaoAssistantsNeedsearchPackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/needsearch/package.yao", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsNeedsearchPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xa4\x92\xc1\x6a\xdb\x40\x10\x86\xef\x7e\x8a\x9f\xcd\xa1\x09\xac\x43\x7a\x28\x34\xba\xc5\x89\x8b\x69\xa9\x43\xe3\x42\x0e\xa5\x84\xf5\x6a\x24\x2d\x5e\xef\xba\x3b\xa3\xca\xa2\xc9\xb5\x0f\xd0\x47\xec\x93\x14\xc9\x72\x7b\x88\x2e\xa1\x17\xc1\x30\xcc\x37\x9f\xfe\xd9\x13\x2c\x89\x72\xac\xc8\x24\x5b\xe1\xaa\xa4\x20\x93\x29\x52\xf4\x94\x81\x5b\x16\xda\x4e\x00\x1b\x83\x50\x90\x0c\x8f\x13\x00\xb8\xf6\x86\xd9\x15\x2d\x5c\x81\x9a\x29\xe1\x5b\x4d\xa9\x45\x20\xca\x19\xb4\x17\x4a\xc1\x78\x70\x8f\x3c\x9f\xf4\x23\x27\x27\xb8\xab\x3d\x71\x5f\x2c\x6f\xb1\x9a\x5f\xdd\x5d\x2f\x32\x94\x89\x48\x5c\x28\x59\xc3\x56\x4e\x6c\x65\x44\x63\x6b\xa4\xd2\xb0\x31\x27\x94\x14\x28\x19\x71\x31\x68\x08\xed\x05\xbb\x14\x2d\x31\xbb\x50\xea\xa1\xe9\xb1\x09\xb1\xf1\x94\x97\xd4\xd3\xef\xe7\xb3\x0c\x89\x8c\x9f\x8a\xdb\x12\x72\x23\x06\xa7\x0d\x19\xa9\x28\x69\x04\x6a\x58\x63\x97\x9c\x25\x3e\xd3\xb0\x75\x4a\x14\x04\xf4\x9d\x82\xb0\x46\x22\xdb\x95\x2e\x14\xb1\x87\x7d\x98\x65\xc8\xa3\xad\xb7\x14\x64\xd0\xa8\x62\x33\x95\xd8\xf9\x85\xc2\x95\xf5\xd1\xee\xdd\xd5\xa7\x7e\xe2\x66\x96\x1d\x42\xe9\x16\x6b\xc4\x94\x53\x3a\x80\x63\xca\x59\x63\x5d\xb3\x0b\xc4\xdc\xf7\xff\x85\x43\xbc\x8b\x81\x09\xa7\xef\x57\xb7\x4b\xc4\xe0\xdb\xb3\xbe\xf7\x43\x75\xb1\x3e\x1c\xc2\x54\x19\xd6\x31\x7a\x0d\x75\xa8\x1f\xa4\xdd\x11\xab\x0c\x5f\x54\x43\x6b\xf5\xa8\x36\xdd\x27\x5f\xab\xaf\x1a\xaa\xf7\xcb\x29\x58\x52\x19\x2e\xa6\xaf\x9f\xfe\x2e\x9b\xef\xcd\x76\x77\x3c\x86\x5a\x90\xf7\x51\xe1\xf7\xcf\x5f\xcf\x96\x15\xc6\x33\x8d\x6c\x7b\x8e\x3f\xbf\xbc\x7c\x3a\xe0\x3e\xc7\xdc\xb4\xaf\x18\x43\xe2\xe3\x60\x49\xf5\x18\xb7\xff\x8b\x31\xf8\x9b\x01\x7e\x9f\x9c\x10\x0c\x38\x26\x41\x51\x07\xdb\x65\xff\xff\xee\x17\x03\x7e\x11\x1b\x48\x1c\x2e\x8b\x9b\xd9\xcb\xe4\x37\xa3\xee\x6f\x8f\xee\x1f\xdb\xe1\x31\xbc\x8c\x3a\x7a\xcd\x3e\x91\x3f\x01\x00\x00\xff\xff\x1d\x72\x66\x0e\xbb\x03\x00\x00") + +func yaoAssistantsNeedsearchPromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsNeedsearchPromptsYml, + "yao/assistants/needsearch/prompts.yml", + ) +} + +func yaoAssistantsNeedsearchPromptsYml() (*asset, error) { + bytes, err := yaoAssistantsNeedsearchPromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/needsearch/prompts.yml", size: 955, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsPromptPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xce\x31\x0e\xc2\x30\x0c\x85\xe1\x3d\xa7\x78\xca\xcc\xc0\xdc\x4b\xc0\xc0\x05\xaa\xf2\x2a\x59\x28\x89\xb1\x5d\x10\xa0\xde\x1d\x25\x88\xd9\xbf\x3e\xbf\x4f\x02\x72\x9d\x0b\xf3\x84\x7c\xb6\x56\x34\x70\xd2\x90\x22\x6f\x5a\x3e\xf4\xeb\x95\xbe\x98\x68\x48\xab\x3d\xba\xd8\x5c\x7d\x6d\x56\xb0\x39\x0d\xc6\xfb\x26\xc6\xc2\x1a\x0e\xa9\xd1\xc0\x75\xe5\x12\xf2\x20\x74\x78\xfe\x63\xe2\xa5\xe3\xc9\xb3\xd9\xed\x4f\xb7\xa1\x7a\x9e\xd0\x77\xf4\x88\x45\x69\x73\x6c\xd6\xdb\x63\x02\xf6\xb4\xa7\x6f\x00\x00\x00\xff\xff\xad\x9b\x26\xd0\xa5\x00\x00\x00") + +func yaoAssistantsPromptPackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsPromptPackageYao, + "yao/assistants/prompt/package.yao", + ) +} + +func yaoAssistantsPromptPackageYao() (*asset, error) { + bytes, err := yaoAssistantsPromptPackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/prompt/package.yao", size: 165, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsPromptPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x5c\x92\xcd\x8e\x13\x31\x10\x84\xef\x79\x8a\x7a\x81\x04\x01\xb7\xdc\x56\x90\x03\x12\x62\x21\x42\x42\x7b\xec\xd8\x95\xd9\x66\x3d\xb6\x71\xb7\x21\x59\xf1\xf0\x68\x7e\x22\x60\x8f\x33\xd5\xae\xfa\xba\xec\x2d\x5a\x49\xdc\xc3\xae\xe6\x1c\x37\x40\x28\xd9\x99\x7d\x8f\xdf\x1b\x00\x78\x28\x1d\xd2\x08\x41\x6d\x65\xac\x8e\x52\x5d\x47\x7d\x16\xd7\x92\x21\x66\x6a\x2e\xd9\x77\xf8\xda\x24\xdb\xb9\xb4\x11\xdd\xd8\xd0\xf8\xa3\x6b\xe3\xc8\xec\x06\xcd\x5e\xa6\xf3\x67\x9a\x69\xc9\x92\x56\x33\xdb\x6d\xe6\x90\xcf\xad\x04\x9a\xed\xe7\x8f\xd7\x3b\x1c\x2e\xde\x24\x38\x9e\x78\x85\xe6\xc9\x74\x8d\xcb\x11\xe5\xf4\x9d\xc1\xf5\x27\x6d\x9e\x7e\xb3\xc3\x91\xa5\x0d\x92\xf5\x99\xf8\xa5\xfe\x88\xda\x18\xd4\x08\x67\x1b\x35\x97\x54\x86\xeb\x3c\xfa\x76\x87\xbb\x18\x97\x05\x2f\x3e\x9b\x45\xba\x68\xb2\x85\xe2\x43\x0e\xa9\x47\x2e\x14\x5b\xbc\x4b\x94\x86\xa1\x48\x7a\xe5\x62\x4f\x88\xb4\xd0\xb4\x4e\x20\xeb\xc4\xe1\x52\x19\x9c\x11\xa5\x7b\xed\x8e\x05\x74\x15\xbf\x74\x49\xea\xd7\xff\x8a\x58\xa5\x23\xcf\x6c\xcc\x81\xff\x2e\xb7\x30\x1c\xb2\xf5\xf6\x02\x61\x02\xed\x59\xc6\x93\x0e\xbd\xf4\x9b\xc9\xfb\x19\x9d\x71\x96\xad\x32\xe8\x59\xc3\xaa\x7d\x63\x4a\x5b\xf3\xd6\x83\xf7\xc6\xb8\xfe\xbd\x0b\x53\x8e\x9c\x12\x97\xac\x63\x4f\xfc\xdb\xf9\x91\x56\x4b\x8e\xd0\x0c\x93\x91\x48\x92\x87\x2e\x03\x21\xd3\xfd\xd5\xee\xb7\xba\xef\x97\x65\xef\x3f\x7d\x7c\x80\x3f\xf2\xf6\x20\x18\xd7\x4b\xbd\x75\x7d\xa4\xc4\x2b\xbc\x4c\xef\x01\x62\x5b\xb5\xcd\x9f\x00\x00\x00\xff\xff\xed\x1b\xf2\xa7\x6d\x02\x00\x00") + +func yaoAssistantsPromptPromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsPromptPromptsYml, + "yao/assistants/prompt/prompts.yml", + ) +} + +func yaoAssistantsPromptPromptsYml() (*asset, error) { + bytes, err := yaoAssistantsPromptPromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/prompt/prompts.yml", size: 621, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsQuerydslPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8d\xcd\xaa\xc2\x30\x10\x85\xf7\x79\x8a\x43\xd6\xe5\x12\xba\xec\xfa\x82\x1b\x37\xe2\x03\xc8\xa0\x63\x29\x6d\x32\x65\x3a\x41\x8b\xf4\xdd\x25\x69\x71\x7b\x7e\xbe\xef\xe3\x00\x9f\x28\xb2\xef\xe0\x2f\x99\x75\xfd\xbf\x9e\x71\xe2\xc4\x4a\x26\xea\x9b\xd2\x3f\x78\xb9\xeb\x30\xdb\x20\xa9\xcc\x8e\x96\xf1\xdb\x3f\x55\x22\x12\x59\x56\x9a\x30\x51\xea\x33\xf5\xbc\x7f\x6d\x9d\x2b\xfb\x25\x3a\xf2\xc1\x93\x8a\x5a\x7c\x87\xa2\x07\x7c\xa4\xf7\xcd\x64\xe4\x9a\xb5\x21\x84\x66\xcf\x8d\xe3\x5c\x54\x59\x0b\x23\xfc\xb5\x0e\xd8\xdc\xe6\xbe\x01\x00\x00\xff\xff\x37\x66\x04\x78\xb6\x00\x00\x00") + +func yaoAssistantsQuerydslPackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsQuerydslPackageYao, + "yao/assistants/querydsl/package.yao", + ) +} + +func yaoAssistantsQuerydslPackageYao() (*asset, error) { + bytes, err := yaoAssistantsQuerydslPackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/querydsl/package.yao", size: 182, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsQuerydslPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x74\x53\x5d\x4f\x2b\x37\x10\x7d\xcf\xaf\x38\x35\xaf\x4b\xd4\xf2\xb8\x22\x48\xb4\x55\x51\xab\x0a\x28\x51\x1f\x10\x42\x60\xd6\x93\xc4\xc5\x3b\x76\xed\x71\x42\xc4\xe5\xbf\x5f\xd9\xbb\xf9\xb8\xba\x97\x97\x64\x76\xce\x9c\x33\xe3\xf9\x38\xc1\x3f\x99\xe2\xf6\xf7\xf9\xdf\xb8\x22\xa6\xa8\xc5\x47\x5c\x2e\x89\x05\xb7\xd1\xf7\x41\xd2\xe4\x14\xd1\x3b\x6a\x91\xb6\x49\xa8\x9f\x00\x9d\x67\x21\x96\x16\x5f\x26\x00\x70\xef\x33\x74\x24\xe8\x83\xd4\x72\x27\x35\x2d\x68\x84\xe8\xf4\x0a\x9b\x20\xbe\x90\xd7\x14\x05\xac\x25\x47\xed\xe0\x34\x2f\xb3\x5e\x12\xfe\xcf\x14\x2d\x25\x58\x16\x8f\x7b\xed\x0f\x6a\x0b\x1f\x7b\x2d\xd3\x49\xcd\x76\x72\x54\xf1\x5c\x62\xee\x24\x47\xaa\xc8\xf3\xf3\xf3\x7f\xc9\x73\xb5\xdf\xeb\x2f\xa0\x12\x39\xea\x44\xb5\x78\x50\x0b\x4b\xce\xfc\xa2\x1a\x0c\xd6\x99\x7a\x6c\x76\x51\x8b\xe8\x7b\xd5\x42\x89\x7e\x71\xf4\xc4\xba\x27\xb5\xc7\x36\x2b\x8a\x94\x8a\xc2\xe8\x01\xde\x07\x85\xc2\x18\x62\xa1\x7c\x28\x5f\xb3\x62\xae\xb5\xcb\x54\xd5\x28\x89\xfa\x68\x7e\x44\x4b\xa2\x25\xa7\x03\xd1\xf2\x31\xf3\x41\xe9\x4e\xec\xba\x0a\x07\x62\x63\x79\xa9\x1e\x3f\x46\x9d\x43\xd5\x3e\x1a\x8a\x9f\x56\xd6\x45\xd2\x42\xe6\x49\x4b\x91\x49\x3e\x96\x2e\x28\x43\xa9\x53\xdf\x4b\x39\xdb\xdb\x82\x9f\xfd\x5c\x3d\x1f\xbb\x86\xee\x7b\x3e\xcf\x21\xf8\x28\x64\x70\x13\x86\xd1\xa6\x0a\x9d\xe2\x37\xdf\x07\x1d\x6d\xf2\xdc\x62\xd6\xe0\xa7\x59\x83\x8b\x06\x17\xb3\x06\xe7\x0d\xce\x67\x63\xd4\xad\x16\xa1\xc8\x2d\x9c\x7d\xa5\x06\xec\xa5\x5a\x23\x7a\xa7\x79\x49\x2d\x2c\x0f\x48\xf9\x7f\x21\xd9\x10\xf1\x18\x70\x9d\x9d\x43\xb7\xa2\xee\xb5\x2d\x7b\xc4\xd9\xb9\xa6\x1a\x5e\xea\xc7\xbe\xce\x3b\x4a\xc1\x73\x22\xfc\x51\x97\xa6\xba\x2f\xdd\x46\x6f\x13\x62\x85\x0c\x36\x56\x56\x58\x6b\x67\x0d\xfe\x9a\xdf\x5c\xb7\x9f\x2f\x8f\x49\x4e\xb5\x78\xc7\x74\x3a\xc5\x7e\x8e\x8a\xde\x82\xd3\x96\x4b\x37\x7f\x8d\x96\x16\xa8\x0e\xd6\x62\x3d\xc3\x2f\x20\xab\x61\x99\xb7\x47\x3b\xa4\x23\x5b\x5e\xa6\x61\xb6\xbc\xc5\xce\x01\x1f\xcb\x1b\x28\xa9\xc7\x4f\x1a\x7f\x95\xad\x21\x67\x99\x76\xfd\x1e\xcf\x94\xc6\x27\xec\x8f\xe1\x45\x27\x32\xf0\x5c\xf3\x87\xe8\xd7\xd6\x90\x41\xea\x56\xd4\xeb\x91\xfa\x6f\x22\xe8\x10\xa2\x0f\xd1\x16\x05\xbf\x1b\x65\x39\xb1\x43\xdd\xe5\x04\x89\x65\x24\xfd\xc9\x9d\xcb\x86\xe0\xd9\x6d\x51\xb7\x2b\x41\x56\x5a\x40\x6f\x36\x95\x59\x55\xe2\x37\x79\x2e\x8d\xc1\x8a\x5c\x58\x64\x77\xdc\x9c\x21\x4d\xe7\xfb\xe0\xe8\x6d\x77\xef\x93\xc9\xd7\x00\x00\x00\xff\xff\x44\xaa\x00\x17\x83\x04\x00\x00") + +func yaoAssistantsQuerydslPromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsQuerydslPromptsYml, + "yao/assistants/querydsl/prompts.yml", + ) +} + +func yaoAssistantsQuerydslPromptsYml() (*asset, error) { + bytes, err := yaoAssistantsQuerydslPromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/querydsl/prompts.yml", size: 1155, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsTitlePackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xcd\xc1\x0d\x02\x31\x0c\x04\xc0\x7f\xaa\x58\xe5\xcd\x83\xf7\x35\x40\x03\x34\x10\x85\x45\x8a\xe0\xe2\xc8\x36\x20\x84\xae\x77\xe4\xbb\x7c\xbd\xb3\xeb\x5f\x02\x72\x2f\x2b\xf3\x82\x7c\x6d\xfe\x24\x2e\xec\xd4\xe2\xa2\xf9\x14\xe1\x8d\x56\xb5\x0d\x6f\xd2\xc3\xcc\x94\xa8\xd2\x6b\x33\xc2\xa3\x64\xb8\x8b\xc6\xe9\x4d\xb5\x12\xd6\x8e\xb6\x7f\xc7\x3e\xfd\x11\x7d\x70\x2e\xca\x38\xc0\x82\xf8\x1e\x88\xeb\x88\xd1\x97\x86\x3d\x27\x60\x4b\x5b\xfa\x07\x00\x00\xff\xff\x31\x62\xb0\x98\x9b\x00\x00\x00") + +func yaoAssistantsTitlePackageYaoBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsTitlePackageYao, + "yao/assistants/title/package.yao", + ) +} + +func yaoAssistantsTitlePackageYao() (*asset, error) { + bytes, err := yaoAssistantsTitlePackageYaoBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/title/package.yao", size: 155, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsTitlePromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x92\x3d\x8f\xd3\x4e\x10\xc6\xfb\x7c\x8a\x47\xa9\x93\xe8\x9f\xfb\x73\x14\x69\x10\x98\x13\x08\xee\x40\x4a\xa0\xa0\xdc\xac\x27\xf6\x28\xf6\xae\xe5\x9d\xbc\x18\x51\xf1\x7a\x82\x0a\xa4\x14\xe8\x68\x81\x8e\x43\x14\x77\x48\xa7\xfb\x32\x28\x0e\xf9\x18\xc8\x5e\x07\x1d\x9d\xf5\xcc\xef\xf1\x3c\x33\xb3\x5d\xe4\x36\xa1\x01\x5c\xe1\x84\xd2\x16\xa0\xad\x11\x32\x32\xc0\xb3\x16\x00\xdc\x21\x43\xb9\x12\xaa\x74\xcd\x8e\x3a\x48\x49\x19\x36\xd1\x64\x96\x40\x58\x12\x72\x98\xd8\x1c\x3a\x56\x52\x31\x73\xca\x9d\x12\xb6\xc6\xf5\x5a\xf5\x0f\x1e\x29\x37\x1d\xd4\x5f\xfd\x1e\x6e\x1a\x95\x14\x4f\x69\xd7\x04\xca\x84\xe0\x90\x8c\xf0\xa4\x40\xaa\xd8\x40\x6c\xc6\xba\xc6\xf7\x7a\x08\x72\xaa\x5a\x8f\x73\xa6\x49\x07\x21\x39\x9d\x73\x26\x3c\x27\xdf\xb9\xc6\xfe\xef\xe1\x48\x89\x8e\xc1\x26\x9b\x09\x12\x65\xa2\x99\x8a\x7c\xed\x5a\x0f\x43\x92\x59\x6e\xf0\xf0\xc1\xe1\x13\x48\xdc\x18\x3b\x30\x16\xb4\xcc\x12\x65\xea\xac\x3e\xe9\x21\x99\x48\x62\x9f\xb5\x8b\x03\x13\x25\xec\xe2\x01\xf6\xba\xd7\xb1\xb0\x79\xe8\x3a\xe8\xef\x77\xf7\xff\xab\x46\xcd\x5d\x43\x05\xf7\xee\x57\x44\xff\x5f\xf5\x88\x97\x14\x0e\x90\xaa\x25\xfe\xf2\x75\x69\x24\x45\x42\xbb\x0e\xb7\x08\x2e\x23\xcd\x13\xd6\x1d\xa8\xb9\xe5\x10\x51\xb5\x6d\xd6\xcd\x62\x1b\xee\xb1\x23\x28\x5d\x8f\x3d\xb7\xac\xa9\x91\x47\xa2\x72\xc1\x82\x25\xc6\x94\x8a\x2b\x8b\xeb\x62\x44\xd5\x7a\x35\x41\x2b\x47\xf5\x79\x9a\x69\x7c\x8a\x83\xa5\x4a\xb3\x84\x9c\x0f\xd2\xbe\x6b\x17\x10\x8b\xb1\x9a\x56\x87\xb1\x53\x26\x77\xa3\x8d\x5f\xaf\x3f\x20\x88\xad\xb6\x49\x75\x82\x20\xe6\x0c\x41\x5d\xc4\x90\x34\x67\x3e\x45\x7b\x7b\x7a\xbe\x59\x7d\x2c\xbf\x3c\x5f\x5f\xae\xca\xe3\xb3\xf5\xe5\xa7\xcd\xc9\x8f\xf2\xf3\x1b\xef\x2f\xcf\xbf\x96\xaf\xde\x95\x6f\x4f\xbc\xe8\x01\x6f\xbc\x4d\xe3\x59\x84\xb4\xc0\x90\x94\xae\x5e\x4e\x9a\x59\x43\x46\xbc\xd1\x8b\xc1\x4e\x44\x4d\x47\x6c\x22\x6f\x2e\x7f\x7e\xdb\x1c\xbf\xdf\x7e\x7f\xb1\x3d\x5d\xd5\xe8\xef\x8b\x97\xeb\x8b\xb3\x2b\x5e\x2f\x78\xa2\xf5\x27\x00\x00\xff\xff\x0e\xae\x0f\x02\xe4\x02\x00\x00") + +func yaoAssistantsTitlePromptsYmlBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsTitlePromptsYml, + "yao/assistants/title/prompts.yml", + ) +} + +func yaoAssistantsTitlePromptsYml() (*asset, error) { + bytes, err := yaoAssistantsTitlePromptsYmlBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/title/prompts.yml", size: 740, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1701,7 +1953,7 @@ func yaoDataIcons404Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1721,7 +1973,7 @@ func yaoDataIconsIconIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1741,7 +1993,7 @@ func yaoDataIconsIconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1761,7 +2013,7 @@ func yaoDataIconsIconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1781,7 +2033,7 @@ func yaoDataIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1801,7 +2053,7 @@ func yaoDataKbProvidersChunkingSemanticEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1821,7 +2073,7 @@ func yaoDataKbProvidersChunkingSemanticZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1841,7 +2093,7 @@ func yaoDataKbProvidersChunkingStructuredEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1861,7 +2113,7 @@ func yaoDataKbProvidersChunkingStructuredZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1881,7 +2133,7 @@ func yaoDataKbProvidersConverterMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1901,7 +2153,7 @@ func yaoDataKbProvidersConverterMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1921,7 +2173,7 @@ func yaoDataKbProvidersConverterOcrEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1941,7 +2193,7 @@ func yaoDataKbProvidersConverterOcrZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1961,7 +2213,7 @@ func yaoDataKbProvidersConverterOfficeEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1981,7 +2233,7 @@ func yaoDataKbProvidersConverterOfficeZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2001,7 +2253,7 @@ func yaoDataKbProvidersConverterUtf8EnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2021,7 +2273,7 @@ func yaoDataKbProvidersConverterUtf8ZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2041,7 +2293,7 @@ func yaoDataKbProvidersConverterVideoEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2061,7 +2313,7 @@ func yaoDataKbProvidersConverterVideoZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2081,7 +2333,7 @@ func yaoDataKbProvidersConverterVisionEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2101,7 +2353,7 @@ func yaoDataKbProvidersConverterVisionZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2121,7 +2373,7 @@ func yaoDataKbProvidersConverterWhisperEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2141,7 +2393,7 @@ func yaoDataKbProvidersConverterWhisperZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2161,7 +2413,7 @@ func yaoDataKbProvidersEmbeddingFastembedEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2181,7 +2433,7 @@ func yaoDataKbProvidersEmbeddingFastembedZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2201,7 +2453,7 @@ func yaoDataKbProvidersEmbeddingOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2221,7 +2473,7 @@ func yaoDataKbProvidersEmbeddingOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2241,7 +2493,7 @@ func yaoDataKbProvidersExtractionOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2261,7 +2513,7 @@ func yaoDataKbProvidersExtractionOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2281,7 +2533,7 @@ func yaoDataKbProvidersFetcherHttpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2301,7 +2553,7 @@ func yaoDataKbProvidersFetcherHttpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2321,7 +2573,7 @@ func yaoDataKbProvidersFetcherMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2341,7 +2593,7 @@ func yaoDataKbProvidersFetcherMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2361,7 +2613,7 @@ func yaoFieldsModelTransJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2381,7 +2633,7 @@ func yaoLangsEnUsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2401,7 +2653,7 @@ func yaoLangsZhCnGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2421,7 +2673,7 @@ func yaoLangsZhCnLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2441,7 +2693,7 @@ func yaoLangsZhCnLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2461,7 +2713,7 @@ func yaoLangsZhHkGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2481,7 +2733,7 @@ func yaoLangsZhHkLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2501,7 +2753,7 @@ func yaoLangsZhHkLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2521,7 +2773,7 @@ func yaoModelsAgentAssistantModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2541,7 +2793,7 @@ func yaoModelsAgentChatModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2561,7 +2813,7 @@ func yaoModelsAgentMessageModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2581,7 +2833,7 @@ func yaoModelsAgentResumeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2601,7 +2853,7 @@ func yaoModelsAgentSearchModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2621,7 +2873,7 @@ func yaoModelsAttachmentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2641,7 +2893,7 @@ func yaoModelsAuditModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2661,7 +2913,7 @@ func yaoModelsConfigModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2681,7 +2933,7 @@ func yaoModelsDslModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2701,7 +2953,7 @@ func yaoModelsInvitationModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2721,7 +2973,7 @@ func yaoModelsJobCategoryModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2741,7 +2993,7 @@ func yaoModelsJobExecutionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2761,7 +3013,7 @@ func yaoModelsJobJobModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2781,7 +3033,7 @@ func yaoModelsJobLogModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2801,7 +3053,7 @@ func yaoModelsKbCollectionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2821,7 +3073,7 @@ func yaoModelsKbDocumentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2841,7 +3093,7 @@ func yaoModelsMemberModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2861,7 +3113,7 @@ func yaoModelsRoleModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2881,7 +3133,7 @@ func yaoModelsTeamModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2901,7 +3153,7 @@ func yaoModelsUserOauth_accountModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2921,7 +3173,7 @@ func yaoModelsUserTypeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2941,7 +3193,7 @@ func yaoModelsUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2961,7 +3213,7 @@ func yaoReleaseAppYaz() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2981,7 +3233,7 @@ func yaoStoresAgentCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3001,7 +3253,7 @@ func yaoStoresAgentMemoryBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3021,7 +3273,7 @@ func yaoStoresCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3041,7 +3293,7 @@ func yaoStoresKbCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3061,7 +3313,7 @@ func yaoStoresKbStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3081,7 +3333,7 @@ func yaoStoresOauthCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3101,7 +3353,7 @@ func yaoStoresOauthClientBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3121,7 +3373,7 @@ func yaoStoresOauthStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3141,7 +3393,7 @@ func yaoStoresStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3161,7 +3413,7 @@ func yaoUploadersAttachmentLocalYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765784079, 0)} + info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3287,6 +3539,18 @@ var _bindata = map[string]func() (*asset, error){ "libsui/yao.ts": libsuiYaoTs, "public/index.html": publicIndexHtml, "ui/index.html": uiIndexHtml, + "yao/assistants/entity/package.yao": yaoAssistantsEntityPackageYao, + "yao/assistants/entity/prompts.yml": yaoAssistantsEntityPromptsYml, + "yao/assistants/keyword/package.yao": yaoAssistantsKeywordPackageYao, + "yao/assistants/keyword/prompts.yml": yaoAssistantsKeywordPromptsYml, + "yao/assistants/needsearch/package.yao": yaoAssistantsNeedsearchPackageYao, + "yao/assistants/needsearch/prompts.yml": yaoAssistantsNeedsearchPromptsYml, + "yao/assistants/prompt/package.yao": yaoAssistantsPromptPackageYao, + "yao/assistants/prompt/prompts.yml": yaoAssistantsPromptPromptsYml, + "yao/assistants/querydsl/package.yao": yaoAssistantsQuerydslPackageYao, + "yao/assistants/querydsl/prompts.yml": yaoAssistantsQuerydslPromptsYml, + "yao/assistants/title/package.yao": yaoAssistantsTitlePackageYao, + "yao/assistants/title/prompts.yml": yaoAssistantsTitlePromptsYml, "yao/data/icons/404.png": yaoDataIcons404Png, "yao/data/icons/icon.icns": yaoDataIconsIconIcns, "yao/data/icons/icon.ico": yaoDataIconsIconIco, @@ -3554,6 +3818,32 @@ var _bintree = &bintree{nil, map[string]*bintree{ "index.html": {uiIndexHtml, map[string]*bintree{}}, }}, "yao": {nil, map[string]*bintree{ + "assistants": {nil, map[string]*bintree{ + "entity": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsEntityPackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsEntityPromptsYml, map[string]*bintree{}}, + }}, + "keyword": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsKeywordPackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsKeywordPromptsYml, map[string]*bintree{}}, + }}, + "needsearch": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsNeedsearchPackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsNeedsearchPromptsYml, map[string]*bintree{}}, + }}, + "prompt": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsPromptPackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsPromptPromptsYml, map[string]*bintree{}}, + }}, + "querydsl": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsQuerydslPackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsQuerydslPromptsYml, map[string]*bintree{}}, + }}, + "title": {nil, map[string]*bintree{ + "package.yao": {yaoAssistantsTitlePackageYao, map[string]*bintree{}}, + "prompts.yml": {yaoAssistantsTitlePromptsYml, map[string]*bintree{}}, + }}, + }}, "data": {nil, map[string]*bintree{ "icons": {nil, map[string]*bintree{ "404.png": {yaoDataIcons404Png, map[string]*bintree{}}, diff --git a/yao/assistants/entity/package.yao b/yao/assistants/entity/package.yao new file mode 100644 index 00000000..b4bf1717 --- /dev/null +++ b/yao/assistants/entity/package.yao @@ -0,0 +1,10 @@ +{ + "name": "Entity Extraction", + "description": "Extract entities and relationships for knowledge graph", + "type": "worker", + "options": { + "max_tokens": 2000, + "temperature": 0.2 + } +} + diff --git a/yao/assistants/entity/prompts.yml b/yao/assistants/entity/prompts.yml new file mode 100644 index 00000000..8396e188 --- /dev/null +++ b/yao/assistants/entity/prompts.yml @@ -0,0 +1,28 @@ +- role: system + content: | + Extract entities and relationships from text for knowledge graph construction. + + ## Task + 1. Identify named entities (Person, Organization, Location, Product, Event, Concept, etc.) + 2. Extract relationships between entities + 3. Return structured JSON + + ## Response Format (JSON only) + ```json + { + "entities": [ + {"id": "e1", "name": "Entity Name", "type": "Person|Org|Location|Product|Event|Concept", "properties": {}} + ], + "relationships": [ + {"source": "e1", "target": "e2", "type": "relationship_type", "properties": {}} + ] + } + ``` + + ## Guidelines + - Use consistent entity IDs (e1, e2, ...) + - Normalize entity names (remove titles, standardize format) + - Common relationship types: WORKS_FOR, LOCATED_IN, OWNS, CREATED, RELATED_TO + - Keep properties minimal and relevant + - Same language as input for entity names + diff --git a/yao/assistants/keyword/package.yao b/yao/assistants/keyword/package.yao new file mode 100644 index 00000000..1513a630 --- /dev/null +++ b/yao/assistants/keyword/package.yao @@ -0,0 +1,9 @@ +{ + "name": "Keyword Extraction", + "description": "Extract keywords from text content", + "type": "worker", + "options": { + "max_tokens": 500, + "temperature": 0.3 + } +} diff --git a/yao/assistants/keyword/prompts.yml b/yao/assistants/keyword/prompts.yml new file mode 100644 index 00000000..1dcfbddf --- /dev/null +++ b/yao/assistants/keyword/prompts.yml @@ -0,0 +1,24 @@ +# Keyword Extraction Agent Prompts +- role: system + content: | + You are a keyword extraction specialist. Your task is to extract relevant keywords from the provided text. + + ## Instructions + 1. Analyze the input text carefully + 2. Extract the most important and relevant keywords + 3. Return keywords in JSON format + + ## Response Format + Always respond with valid JSON: + ```json + { + "keywords": ["keyword1", "keyword2", ...] + } + ``` + + ## Guidelines + - Extract 5-15 keywords depending on content length + - Prioritize nouns, proper nouns, and key concepts + - Include both single words and short phrases when relevant + - Exclude common stop words + - Maintain the original language of the content diff --git a/yao/assistants/needsearch/package.yao b/yao/assistants/needsearch/package.yao new file mode 100644 index 00000000..68f2750f --- /dev/null +++ b/yao/assistants/needsearch/package.yao @@ -0,0 +1,9 @@ +{ + "name": "Need Search", + "description": "Determine if query requires external search", + "type": "worker", + "options": { + "max_tokens": 200, + "temperature": 0.1 + } +} diff --git a/yao/assistants/needsearch/prompts.yml b/yao/assistants/needsearch/prompts.yml new file mode 100644 index 00000000..abecba6f --- /dev/null +++ b/yao/assistants/needsearch/prompts.yml @@ -0,0 +1,20 @@ +# Need Search Agent +- role: system + content: | + Classify if user query needs external search. + + ## Rules + NO SEARCH: greetings, chitchat, math, code generation, text processing, general knowledge + WEB: real-time data (weather, news, prices), current events, recent info + KB: documentation, how-to, configuration, FAQ + DB: user data, orders, records, business data + + ## Response (JSON only) + {"need_search": bool, "search_types": ["web"|"kb"|"db"], "confidence": 0-1} + + ## Examples + "Hello" → {"need_search": false, "search_types": [], "confidence": 0.99} + "Today's weather" → {"need_search": true, "search_types": ["web"], "confidence": 0.95} + "Write a sort function" → {"need_search": false, "search_types": [], "confidence": 0.90} + "How to config DB" → {"need_search": true, "search_types": ["kb"], "confidence": 0.85} + "My orders" → {"need_search": true, "search_types": ["db"], "confidence": 0.95} diff --git a/yao/assistants/prompt/package.yao b/yao/assistants/prompt/package.yao new file mode 100644 index 00000000..6192796b --- /dev/null +++ b/yao/assistants/prompt/package.yao @@ -0,0 +1,8 @@ +{ + "name": "Prompt Optimizer", + "description": "Transform user requirements into effective prompts", + "type": "worker", + "options": { + "temperature": 0 + } +} diff --git a/yao/assistants/prompt/prompts.yml b/yao/assistants/prompt/prompts.yml new file mode 100644 index 00000000..8763c2e8 --- /dev/null +++ b/yao/assistants/prompt/prompts.yml @@ -0,0 +1,25 @@ +- role: system + content: | + You are a prompt optimization assistant. Transform user requirements into professional prompts. + + Process: + 1. Extract key information and objectives + 2. Reorganize with precise terminology + 3. Add context and details + + Include: + - Clear goal/task description + - Expected output format + - Quality requirements + - Reference information + + Ensure: + - Clear and unambiguous + - Detailed and specific + - Well-structured + - Actionable + + Rules: + 1. Respond in same language as input + 2. Output ONLY the optimized prompt + 3. Ready to use as-is diff --git a/yao/assistants/querydsl/package.yao b/yao/assistants/querydsl/package.yao new file mode 100644 index 00000000..2d2a175a --- /dev/null +++ b/yao/assistants/querydsl/package.yao @@ -0,0 +1,9 @@ +{ + "name": "QueryDSL Generator", + "description": "Generate QueryDSL from natural language", + "type": "worker", + "options": { + "max_tokens": 2000, + "temperature": 0.2 + } +} diff --git a/yao/assistants/querydsl/prompts.yml b/yao/assistants/querydsl/prompts.yml new file mode 100644 index 00000000..c5c92eea --- /dev/null +++ b/yao/assistants/querydsl/prompts.yml @@ -0,0 +1,43 @@ +# QueryDSL Generator Agent Prompts +- role: system + content: | + You are a QueryDSL generator. Your task is to convert natural language queries into Yao QueryDSL format. + + ## QueryDSL Structure + ```json + { + "select": ["field1", "field2"], + "from": "table_name", + "wheres": [ + {"field": "name", "op": "=", "value": "test"}, + {"field": "status", "op": "in", "value": ["active", "pending"]} + ], + "orders": [ + {"field": "created_at", "sort": "desc"} + ], + "limit": 20 + } + ``` + + ## Supported Operators + - Comparison: =, !=, >, >=, <, <= + - Pattern: like, not like + - Range: in, not in, between + - Null check: is null, is not null + + ## Response Format + Always respond with valid JSON: + ```json + { + "dsl": { ... }, + "explain": "Brief explanation of the query", + "warnings": ["any warnings or notes"] + } + ``` + + ## Guidelines + - Generate valid QueryDSL based on the provided schema + - Use appropriate operators for the query intent + - Include only fields that exist in the schema + - Add helpful explanations for complex queries + diff --git a/yao/assistants/title/package.yao b/yao/assistants/title/package.yao new file mode 100644 index 00000000..81887702 --- /dev/null +++ b/yao/assistants/title/package.yao @@ -0,0 +1,8 @@ +{ + "name": "Title Generator", + "description": "Generate concise titles for conversations", + "type": "worker", + "options": { + "temperature": 0 + } +} diff --git a/yao/assistants/title/prompts.yml b/yao/assistants/title/prompts.yml new file mode 100644 index 00000000..5d78da70 --- /dev/null +++ b/yao/assistants/title/prompts.yml @@ -0,0 +1,26 @@ +- role: system + content: | + Generate concise, meaningful titles for chat conversations. + + Task: + 1. Analyze content and identify main topic + 2. Create brief, descriptive title + 3. Match input language + 4. Return ONLY the title, no explanation + + Length: + - English: 2-6 words, 15-50 chars + - CJK: 2-10 chars + - Mixed: max 50 chars + + Style: + - Be specific, avoid generic titles + - Use active voice + - Start with key topic + - Sentence case for English + + Examples: + "How to bake cookies?" → Chocolate Chip Cookie Recipe + "请教如何制作曲奇" → 巧克力曲奇制作 + "Debug my React component" → React Component Debugging + "帮我调试React组件" → React组件调试 From 750dd311b9fba010962b2ac613426229ae795a55 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 16:44:35 +0800 Subject: [PATCH 5/7] Enhance Assistant Search Functionality and Cache Management - Updated the `shouldAutoSearch` method to include additional parameters for improved intent detection, allowing for better decision-making on whether to execute auto search. - Introduced a new `checkSearchIntent` method to utilize the `__yao.needsearch` agent for determining the necessity of a search based on user input. - Implemented a `ClearExcept` method in the cache to selectively clear non-system agents while preserving essential system agents during cache management. - Updated the `LoadBuiltIn` function to maintain system agents in the cache, ensuring they remain available for use. - Enhanced test coverage for loading system agents and validating search intent detection, ensuring robustness in the assistant's search capabilities. - Revised localization files to include new messages for search intent feedback, improving user experience during search operations. --- agent/assistant/agent.go | 2 +- agent/assistant/cache.go | 29 ++ agent/assistant/load.go | 6 +- agent/assistant/load_system.go | 3 +- agent/assistant/load_test.go | 28 ++ agent/assistant/search.go | 195 ++++++++++++- agent/context/types.go | 1 + agent/i18n/builtin.go | 15 + data/bindata.go | 372 ++++++++++++++----------- yao/assistants/keyword/package.yao | 1 + yao/assistants/keyword/prompts.yml | 29 +- yao/assistants/keyword/src/index.ts | 113 ++++++++ yao/assistants/needsearch/src/index.ts | 117 ++++++++ yao/assistants/prompt/package.yao | 1 + yao/assistants/querydsl/package.yao | 1 + yao/assistants/title/package.yao | 1 + yao/assistants/title/prompts.yml | 25 +- 17 files changed, 749 insertions(+), 190 deletions(-) create mode 100644 yao/assistants/keyword/src/index.ts create mode 100644 yao/assistants/needsearch/src/index.ts diff --git a/agent/assistant/agent.go b/agent/assistant/agent.go index 200c807e..74f703ca 100644 --- a/agent/assistant/agent.go +++ b/agent/assistant/agent.go @@ -202,7 +202,7 @@ func (ast *Assistant) Stream(ctx *context.Context, inputMessages []context.Messa // ================================================ // Execute Auto Search (if enabled) // ================================================ - if ast.shouldAutoSearch(ctx, createResponse) { + if ast.shouldAutoSearch(ctx, completionMessages, createResponse, opts) { refCtx := ast.executeAutoSearch(ctx, completionMessages, createResponse, opts) if refCtx != nil && len(refCtx.References) > 0 { completionMessages = ast.injectSearchContext(completionMessages, refCtx) diff --git a/agent/assistant/cache.go b/agent/assistant/cache.go index adfc37ac..6c917139 100644 --- a/agent/assistant/cache.go +++ b/agent/assistant/cache.go @@ -124,6 +124,35 @@ func (c *Cache) Clear() { c.items = make(map[string]*list.Element) } +// ClearExcept removes items from the cache except those matching the keep function +// keep function returns true for items that should be preserved +func (c *Cache) ClearExcept(keep func(id string) bool) { + c.mu.Lock() + defer c.mu.Unlock() + + // Collect items to remove + var toRemove []*list.Element + for element := c.list.Front(); element != nil; element = element.Next() { + item := element.Value.(*cacheItem) + if !keep(item.key) { + toRemove = append(toRemove, element) + } + } + + // Remove collected items + for _, element := range toRemove { + item := element.Value.(*cacheItem) + + // Unregister scripts before removing + if item.value != nil && len(item.value.Scripts) > 0 { + item.value.UnregisterScripts() + } + + c.list.Remove(element) + delete(c.items, item.key) + } +} + // removeOldest removes the least recently used item from the cache func (c *Cache) removeOldest() { if element := c.list.Back(); element != nil { diff --git a/agent/assistant/load.go b/agent/assistant/load.go index b281d257..2d7eee20 100644 --- a/agent/assistant/load.go +++ b/agent/assistant/load.go @@ -33,8 +33,10 @@ var globalSearchConfig *searchTypes.Config = nil // global search config from ag // LoadBuiltIn load the built-in assistants func LoadBuiltIn() error { - // Clear the cache - loaded.Clear() + // Clear non-system agents from cache (preserve system agents loaded by LoadSystemAgents) + loaded.ClearExcept(func(id string) bool { + return strings.HasPrefix(id, "__yao.") // Keep system agents + }) root := `/assistants` app, err := fs.Get("app") diff --git a/agent/assistant/load_system.go b/agent/assistant/load_system.go index afc425ab..69e1f62b 100644 --- a/agent/assistant/load_system.go +++ b/agent/assistant/load_system.go @@ -146,9 +146,8 @@ func loadSystemAgent(id, pathPrefix string) (*Assistant, error) { return nil, fmt.Errorf("failed to parse %s: %w", pkgPath, err) } - // Set assistant_id and path + // Set assistant_id (no path - system agents are loaded from storage, not filesystem) pkgData["assistant_id"] = id - pkgData["path"] = "/" + pathPrefix // Set type if not specified if _, has := pkgData["type"]; !has { diff --git a/agent/assistant/load_test.go b/agent/assistant/load_test.go index 7ca79bc6..4c9227c2 100644 --- a/agent/assistant/load_test.go +++ b/agent/assistant/load_test.go @@ -544,6 +544,34 @@ func TestLoadSystemAgents(t *testing.T) { } assert.True(t, found, "System agents should be found in storage") }) + + t.Run("SystemAgentsGetFromStorage", func(t *testing.T) { + // Clear cache to force loading from storage + assistant.GetCache().Clear() + + // Test Get for each system agent + systemAgents := []string{ + "__yao.keyword", + "__yao.querydsl", + "__yao.title", + "__yao.prompt", + "__yao.needsearch", + "__yao.entity", + } + + for _, agentID := range systemAgents { + ast, err := assistant.Get(agentID) + require.NoError(t, err, "Get(%s) should succeed", agentID) + require.NotNil(t, ast, "Get(%s) should return assistant", agentID) + assert.Equal(t, agentID, ast.ID) + assert.True(t, ast.BuiltIn, "%s should be built-in", agentID) + assert.True(t, ast.Readonly, "%s should be readonly", agentID) + assert.Contains(t, ast.Tags, "system", "%s should have system tag", agentID) + assert.Equal(t, "worker", ast.Type, "%s should be worker type", agentID) + assert.NotNil(t, ast.Prompts, "%s should have prompts", agentID) + assert.Greater(t, len(ast.Prompts), 0, "%s should have at least one prompt", agentID) + } + }) } // TestValidate tests the assistant Validate method diff --git a/agent/assistant/search.go b/agent/assistant/search.go index fd29451d..7aae5518 100644 --- a/agent/assistant/search.go +++ b/agent/assistant/search.go @@ -1,6 +1,7 @@ package assistant import ( + "encoding/json" "fmt" "strings" "time" @@ -17,9 +18,17 @@ import ( // shouldAutoSearch determines if auto search should be executed // Returns false if: +// - opts.Skip.Search is true // - uses.search is "disabled" // - assistant has no search configuration -func (ast *Assistant) shouldAutoSearch(ctx *context.Context, createResponse *context.HookCreateResponse) bool { +// - needsearch intent detection returns false +func (ast *Assistant) shouldAutoSearch(ctx *context.Context, messages []context.Message, createResponse *context.HookCreateResponse, opts *context.Options) bool { + // Check if search is skipped via options + if opts != nil && opts.Skip != nil && opts.Skip.Search { + ctx.Logger.Debug("Auto search skipped by opts.Skip.Search") + return false + } + // Get merged uses configuration uses := ast.getMergedSearchUses(createResponse) @@ -34,10 +43,194 @@ func (ast *Assistant) shouldAutoSearch(ctx *context.Context, createResponse *con return false } + // Check search intent using __yao.needsearch agent + if !ast.checkSearchIntent(ctx, messages) { + ctx.Logger.Info("Auto search skipped: intent detection returned false") + return false + } + // Check if search is enabled (builtin, agent, mcp, or empty means builtin) return true } +// checkSearchIntent uses __yao.needsearch agent to determine if search is needed +// Returns true if search is needed, false otherwise +func (ast *Assistant) checkSearchIntent(ctx *context.Context, messages []context.Message) bool { + // Get the last user message + var userQuery string + for i := len(messages) - 1; i >= 0; i-- { + if messages[i].Role == "user" { + if content, ok := messages[i].Content.(string); ok { + userQuery = content + break + } + } + } + + if userQuery == "" { + return true // No user message, proceed with search + } + + // Try to get __yao.needsearch agent + needsearchAst, err := Get("__yao.needsearch") + if err != nil { + ctx.Logger.Debug("__yao.needsearch agent not available: %v, proceeding with search", err) + return true // Agent not available, proceed with search + } + + // === Output: Send loading message === + loadingID := ast.sendIntentLoading(ctx) + + // Build messages for intent detection + intentMessages := []context.Message{ + {Role: "user", Content: userQuery}, + } + + // Call the needsearch agent (Stack will auto-track) + // IMPORTANT: Skip search to prevent infinite loop, skip output to prevent JSON showing in UI + opts := &context.Options{ + Skip: &context.Skip{ + History: true, // Don't save to history + Search: true, // Skip search to prevent infinite loop + Output: true, // Skip output to prevent JSON showing in UI + }, + } + + result, err := needsearchAst.Stream(ctx, intentMessages, opts) + if err != nil { + ctx.Logger.Debug("__yao.needsearch failed: %v, proceeding with search", err) + // === Output: Send done (error case, proceed with search) === + ast.sendIntentDone(ctx, loadingID, true, "") + return true // On error, proceed with search + } + + // Parse the result + // Next hook returns {data: {need_search: bool, search_types: [], confidence: float}} + if response, ok := result.(*context.Response); ok { + // First try to get from Next hook response + if response.Next != nil { + if nextData, ok := response.Next.(map[string]interface{}); ok { + // Check for data field (from Next hook's {data: result}) + var intentData map[string]interface{} + if data, ok := nextData["data"].(map[string]interface{}); ok { + intentData = data + } else { + intentData = nextData + } + + if needSearch, ok := intentData["need_search"].(bool); ok { + reason, _ := intentData["reason"].(string) + ctx.Logger.Debug("Search intent (from Next): need_search=%v, reason=%s", needSearch, reason) + ast.sendIntentDone(ctx, loadingID, needSearch, reason) + return needSearch + } + } + } + + // Fallback: parse from Completion.Content if Next hook didn't process + if response.Completion != nil { + content, ok := response.Completion.Content.(string) + if !ok || content == "" { + ast.sendIntentDone(ctx, loadingID, true, "") + return true + } + needSearch, reason := parseNeedSearchFromContent(content) + ctx.Logger.Debug("Search intent (from Content): need_search=%v, reason=%s", needSearch, reason) + ast.sendIntentDone(ctx, loadingID, needSearch, reason) + return needSearch + } + } + + // Default: proceed with search if we can't parse the result + // === Output: Send done (default case) === + ast.sendIntentDone(ctx, loadingID, true, "") + return true +} + +// parseNeedSearchFromContent parses need_search result from LLM completion content +// Handles JSON wrapped in markdown code blocks +func parseNeedSearchFromContent(content string) (bool, string) { + // Remove markdown code block if present + content = strings.TrimSpace(content) + if strings.HasPrefix(content, "```json") { + content = strings.TrimPrefix(content, "```json") + content = strings.TrimSuffix(content, "```") + content = strings.TrimSpace(content) + } else if strings.HasPrefix(content, "```") { + content = strings.TrimPrefix(content, "```") + content = strings.TrimSuffix(content, "```") + content = strings.TrimSpace(content) + } + + // Try to parse JSON + var result map[string]interface{} + if err := json.Unmarshal([]byte(content), &result); err != nil { + // Failed to parse, default to search + return true, "" + } + + needSearch, ok := result["need_search"].(bool) + if !ok { + return true, "" + } + + reason, _ := result["reason"].(string) + return needSearch, reason +} + +// sendIntentLoading sends the initial intent detection loading message +// Returns the message ID for later replacement +func (ast *Assistant) sendIntentLoading(ctx *context.Context) string { + loadingMsg := i18n.T(ctx.Locale, "search.intent.loading") + + msg := &message.Message{ + Type: "loading", + Props: map[string]any{ + "message": loadingMsg, + }, + } + + // Send and get message ID + msgID, err := ctx.SendStream(msg) + if err != nil { + ctx.Logger.Warn("Failed to send intent loading message: %v", err) + return "" + } + + return msgID +} + +// sendIntentDone replaces loading with result +// Only marks as done when needSearch is false (no further loading will follow) +// When needSearch is true, the search loading will continue +func (ast *Assistant) sendIntentDone(ctx *context.Context, loadingID string, needSearch bool, reason string) { + if loadingID == "" { + return + } + + var resultMsg string + if needSearch { + resultMsg = i18n.T(ctx.Locale, "search.intent.need_search") + } else { + resultMsg = i18n.T(ctx.Locale, "search.intent.no_search") + } + + msg := &message.Message{ + MessageID: loadingID, + Delta: true, + DeltaAction: message.DeltaReplace, + Type: "loading", + Props: map[string]any{ + "message": resultMsg, + "done": true, // Intent detection loading is independent, always close it + }, + } + + if err := ctx.Send(msg); err != nil { + ctx.Logger.Warn("Failed to send intent done message: %v", err) + } +} + // getMergedSearchUses returns the merged uses configuration for search // Priority: createResponse > assistant func (ast *Assistant) getMergedSearchUses(createResponse *context.HookCreateResponse) *context.Uses { diff --git a/agent/context/types.go b/agent/context/types.go index 5c78ffe8..b41a3e87 100644 --- a/agent/context/types.go +++ b/agent/context/types.go @@ -196,6 +196,7 @@ type Skip struct { Trace bool `json:"trace"` // Skip trace logging Output bool `json:"output"` // Skip output to client (for internal A2A calls that only need response data) Keyword bool `json:"keyword"` // Skip keyword extraction for web search (use raw query directly) + Search bool `json:"search"` // Skip auto search (for internal calls like needsearch intent detection) } // MessageMetadata stores metadata for sent messages diff --git a/agent/i18n/builtin.go b/agent/i18n/builtin.go index 3aa2f04d..78a6e6b9 100644 --- a/agent/i18n/builtin.go +++ b/agent/i18n/builtin.go @@ -107,6 +107,11 @@ func init() { "search.failed": "Search failed", "search.no_results": "No references found", + // Search Intent: assistant/search.go - Intent detection messages + "search.intent.loading": "Checking if references are needed...", + "search.intent.need_search": "Searching for references...", + "search.intent.no_search": "No references needed", + // Search: assistant/search.go - Trace labels "search.trace.label": "Search", "search.trace.description": "Search the web and knowledge base for relevant information", @@ -191,6 +196,11 @@ func init() { "search.failed": "搜索失败", "search.no_results": "未找到相关资料", + // Search Intent: assistant/search.go - Intent detection messages + "search.intent.loading": "检查是否需要查询资料...", + "search.intent.need_search": "正在查询相关资料...", + "search.intent.no_search": "无需查询资料", + // Search: assistant/search.go - Trace labels "search.trace.label": "搜索", "search.trace.description": "搜索网络和知识库获取相关信息", @@ -303,6 +313,11 @@ func init() { "search.failed": "搜索失败", "search.no_results": "未找到相关资料", + // Search Intent: assistant/search.go - Intent detection messages + "search.intent.loading": "检查是否需要查询资料...", + "search.intent.need_search": "正在查询相关资料...", + "search.intent.no_search": "无需查询资料", + // Search: assistant/search.go - Trace labels "search.trace.label": "搜索", "search.trace.description": "搜索网络和知识库获取相关信息", diff --git a/data/bindata.go b/data/bindata.go index 3f8303a9..bc978fe0 100644 --- a/data/bindata.go +++ b/data/bindata.go @@ -73,8 +73,10 @@ // .tmp/data/yao/assistants/entity/prompts.yml // .tmp/data/yao/assistants/keyword/package.yao // .tmp/data/yao/assistants/keyword/prompts.yml +// .tmp/data/yao/assistants/keyword/src/index.ts // .tmp/data/yao/assistants/needsearch/package.yao // .tmp/data/yao/assistants/needsearch/prompts.yml +// .tmp/data/yao/assistants/needsearch/src/index.ts // .tmp/data/yao/assistants/prompt/package.yao // .tmp/data/yao/assistants/prompt/prompts.yml // .tmp/data/yao/assistants/querydsl/package.yao @@ -333,7 +335,7 @@ func cuiSetupIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -353,7 +355,7 @@ func cuiV09IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -373,7 +375,7 @@ func cuiV10IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -393,7 +395,7 @@ func cuiV10Layouts__indexAsyncJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -413,7 +415,7 @@ func cuiV10UmiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -433,7 +435,7 @@ func initEnv() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -453,7 +455,7 @@ func initVscodeSettingsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -473,7 +475,7 @@ func initVscodeTypesRuntimeConsoleDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -493,7 +495,7 @@ func initVscodeTypesRuntimeExceptionDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -513,7 +515,7 @@ func initVscodeTypesRuntimeFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -533,7 +535,7 @@ func initVscodeTypesRuntimeGlobalDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -553,7 +555,7 @@ func initVscodeTypesRuntimeHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -573,7 +575,7 @@ func initVscodeTypesRuntimeIoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -593,7 +595,7 @@ func initVscodeTypesRuntimeLogDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -613,7 +615,7 @@ func initVscodeTypesRuntimeNeoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -633,7 +635,7 @@ func initVscodeTypesRuntimeProcessFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -653,7 +655,7 @@ func initVscodeTypesRuntimeProcessHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -673,7 +675,7 @@ func initVscodeTypesRuntimeProcessModelDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -693,7 +695,7 @@ func initVscodeTypesRuntimeProcessDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -713,7 +715,7 @@ func initVscodeTypesRuntimeQueryDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -733,7 +735,7 @@ func initVscodeTypesRuntimeStoreDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -753,7 +755,7 @@ func initVscodeTypesRuntimeSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -773,7 +775,7 @@ func initVscodeTypesRuntimeTimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -793,7 +795,7 @@ func initVscodeTypesRuntimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -813,7 +815,7 @@ func initVscodeTypesSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -833,7 +835,7 @@ func initAppYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -853,7 +855,7 @@ func initDataReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -873,7 +875,7 @@ func initDataTemplatesDefault__assetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -893,7 +895,7 @@ func initDataTemplatesDefault__assetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -913,7 +915,7 @@ func initDataTemplatesDefault__assetsImagesLogosLogo_colorSvg() (*asset, error) return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -933,7 +935,7 @@ func initDataTemplatesDefault__assetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -953,7 +955,7 @@ func initDataTemplatesDefault__dataJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -973,7 +975,7 @@ func initDataTemplatesDefault__documentHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -993,7 +995,7 @@ func initDataTemplatesDefaultIndexIndexCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1013,7 +1015,7 @@ func initDataTemplatesDefaultIndexIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1033,7 +1035,7 @@ func initDataTemplatesDefaultIndexIndexJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1053,7 +1055,7 @@ func initDbReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1073,7 +1075,7 @@ func initFlowsMenuFlowYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1093,7 +1095,7 @@ func initFormsAccountFormYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1113,7 +1115,7 @@ func initIconsAppIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1133,7 +1135,7 @@ func initIconsAppIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1153,7 +1155,7 @@ func initIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1173,7 +1175,7 @@ func initLoginsAdminLoginYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1193,7 +1195,7 @@ func initLogsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1213,7 +1215,7 @@ func initModelsAdminUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1233,7 +1235,7 @@ func initModelsTestsPetModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1253,7 +1255,7 @@ func initNeoNeoYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1273,7 +1275,7 @@ func initPublicReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1293,7 +1295,7 @@ func initPublicAssetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1313,7 +1315,7 @@ func initPublicAssetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1333,7 +1335,7 @@ func initPublicAssetsImagesLogosLogo_colorSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1353,7 +1355,7 @@ func initPublicAssetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1373,7 +1375,7 @@ func initPublicAssetsLibsuiMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1393,7 +1395,7 @@ func initPublicAssetsLibsuiMinJsMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1413,7 +1415,7 @@ func initPublicIndexCfg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1433,7 +1435,7 @@ func initPublicIndexSui() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1453,7 +1455,7 @@ func initScriptsAccountTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1473,7 +1475,7 @@ func initScriptsAiNeoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1493,7 +1495,7 @@ func initScriptsTestsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1513,7 +1515,7 @@ func initScriptsUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1533,7 +1535,7 @@ func initSuisWebSuiYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1553,7 +1555,7 @@ func initTablesAccountTabYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1573,7 +1575,7 @@ func initTsconfigJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1593,7 +1595,7 @@ func libsuiAgentTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1613,7 +1615,7 @@ func libsuiIndexTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1633,7 +1635,7 @@ func libsuiUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1653,7 +1655,7 @@ func libsuiYaoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1673,7 +1675,7 @@ func publicIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1693,7 +1695,7 @@ func uiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1713,7 +1715,7 @@ func yaoAssistantsEntityPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/entity/package.yao", size: 197, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/entity/package.yao", size: 197, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1733,12 +1735,12 @@ func yaoAssistantsEntityPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/entity/prompts.yml", size: 930, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/entity/prompts.yml", size: 930, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsKeywordPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\xb1\xaa\xc3\x30\x0c\x45\x77\x7f\xc5\x45\x73\x78\x04\x1e\x5d\xb2\x77\xea\x47\x14\x93\xa8\x10\x8c\x2d\x23\xab\xc4\xa1\xe4\xdf\x8b\xed\xae\xe7\x48\xe7\x7e\x1c\x40\xc9\x47\xa6\x05\xf4\xe0\xf3\x10\xdd\x70\xaf\xa6\x7e\xb5\x5d\x12\x4d\xcd\x6f\x5c\x56\xdd\x73\x07\x0b\xe8\xa7\x11\xc6\x79\xc1\x4b\x25\xc2\xb8\x1a\x56\x49\xc6\xc9\xc6\x9b\x9d\xb9\x67\x0f\xd1\xc0\x3a\x98\xf4\x4a\xa1\x05\x6d\x19\xa0\xe8\xeb\xd3\x24\x70\x67\xb7\x79\x9e\x06\x36\x8e\x99\xd5\xdb\x5b\x5b\x62\xfe\xfb\x77\xc0\xe5\x2e\xf7\x0d\x00\x00\xff\xff\xbc\x6a\x71\x26\xb0\x00\x00\x00") +var _yaoAssistantsKeywordPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\x41\x8a\xc3\x30\x0c\x45\xf7\x3e\xc5\x47\xeb\x30\x04\x86\xd9\x64\x3f\xab\x1e\xa2\xb8\xb6\x4a\x43\x6a\x2b\xc8\x0a\x49\x08\xb9\x7b\x89\xdd\xed\x7b\x4f\xfa\x87\x03\x28\xfb\xc4\x34\x80\x6e\xbc\xaf\xa2\x11\xff\x9b\xa9\x0f\x36\x4a\xa6\xee\xf2\x91\x4b\xd0\x71\xae\x60\x00\x7d\x35\xa6\x96\x17\x3c\x55\x12\x8c\x37\x43\x90\x6c\x9c\xad\x9d\xd9\x3e\xd7\xb7\xab\xe8\xc4\xda\xd8\x52\xb8\xd0\x80\x03\x54\xd8\x6b\x78\x5d\x3e\x8e\xc5\x3f\xde\x1c\x09\x67\x6d\xa4\x2e\xd5\xcc\x01\x00\x25\xbf\xdd\x4d\x26\xae\xec\xaf\xef\xbb\x86\x8d\xd3\xcc\xea\x6d\xd1\x6b\xa6\xff\xf9\x75\xc0\xe9\x4e\xf7\x09\x00\x00\xff\xff\x9a\x4e\x35\xed\xd4\x00\x00\x00") func yaoAssistantsKeywordPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1753,12 +1755,12 @@ func yaoAssistantsKeywordPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/keyword/package.yao", size: 176, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/keyword/package.yao", size: 212, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsKeywordPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x64\x52\xc1\x8e\xd3\x40\x0c\xbd\xf7\x2b\x9e\xba\xd7\x36\x52\x17\xed\xa5\xb7\x1e\x00\x2d\x08\x58\x2d\x27\x84\x90\x3a\x24\x6e\x62\x3a\xb1\x23\x8f\xd3\x6e\x16\xf8\x77\x94\x69\x93\x1e\xb8\x44\x19\xfb\x3d\xbf\xf7\xc6\x73\x87\x8f\x34\x9c\xd5\x2a\xbc\x7d\x71\x0b\xa5\xb3\x0a\x76\x35\x89\xe3\xc9\xb4\xed\x3c\x2d\xd6\x30\x8d\xb4\x45\x1a\x92\x53\xbb\x00\x4a\x15\x27\xf1\x2d\xfe\x2c\x00\xe0\x9b\xf6\x08\x46\x08\x38\x5e\x47\xd1\x6d\x54\xea\xa8\xe4\x10\x39\x79\x31\x02\x0d\x1e\xd2\x11\x9c\xe0\x3a\xc1\x60\x14\xe9\x14\xc4\x27\x7e\xc2\xc1\xb4\x85\x37\x84\xce\xf4\xc4\x15\x55\x70\x7a\xf1\x62\x91\xf5\xee\xee\xf0\x28\xc9\xad\xcf\x0a\x29\xd7\x36\x05\x76\x12\xe2\xf0\x4a\x99\xc6\xd2\xf5\x9e\x39\x28\x83\xd1\xa1\x8f\x71\xc8\xb8\xfb\x62\xca\x99\x71\xad\x26\x07\xb7\x9d\x9a\x8f\xfa\x41\xaa\xff\xcd\x64\xde\x9b\x02\xcf\xe4\xbd\xc9\xcd\x23\x0b\x3e\x7c\xfd\xf2\x19\x07\xb5\x36\xf8\x6c\xed\x99\x52\xa7\x92\x08\xef\x2e\xf5\xb1\xbc\x8b\xe7\x30\x24\x58\x6e\x55\x38\xb3\x37\x38\x85\xc8\x55\x9e\xb0\xcd\x98\xfd\x7e\xff\x2b\xa9\xe4\xff\xdf\xf9\x0b\x2c\x27\xb1\xe5\x16\xdf\xa7\xc3\x66\xb9\x9a\x1b\xf7\xcb\x15\x8a\xa2\xf8\x91\xf1\x7f\xa7\x39\xb3\x97\xf7\x3d\x57\x14\x59\xe8\x12\x62\x3d\x67\x7f\x58\x6f\x1e\x6e\x49\x2a\xea\x48\x2a\x96\x1a\x2a\xd3\x72\x11\x49\x6a\x6f\xae\xbc\x27\x63\x35\x76\x7e\x25\x88\xf6\x92\x56\xe3\x62\x3a\xb2\xe9\x34\x5e\xdc\x91\x86\x91\x5c\xd2\xf8\x66\x2e\xb4\x47\x29\x63\x5f\x11\x7e\xaa\x37\x48\x2c\x75\x24\x5c\x24\x47\x42\x6a\xd4\x1c\x5d\x63\x21\x51\xc2\xb9\x21\x99\x2f\x7f\xb6\x7b\xe1\x97\xda\xb6\xe3\x5b\x72\xed\x70\xdb\xc9\x1a\x9f\x02\x8b\x07\x96\xbc\x4b\x35\xae\x59\x42\x44\x0c\x52\xf7\xa1\x26\xe8\x21\x37\xae\x89\x16\xff\x02\x00\x00\xff\xff\xd8\xe7\xda\x8e\xeb\x02\x00\x00") +var _yaoAssistantsKeywordPromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x44\x91\x41\x6f\x13\x31\x10\x85\xef\xf9\x15\x4f\x39\x81\x94\x58\x4a\xa1\x97\xdc\x38\x00\x02\x54\x40\x6d\x39\x21\xa4\xb8\xbb\xd3\xac\x89\x77\xc6\xf2\xcc\x8a\x6e\x81\xff\x5e\xc5\x8e\x93\xdb\x8c\xf6\x7d\xef\xcd\x3e\xaf\x91\x25\xd2\x16\x3a\xab\xd1\xb8\x00\x3a\x61\x23\xb6\x2d\xfe\x2d\x00\xe0\xfd\x93\x65\xdf\x19\x0e\x34\xff\x91\xdc\x2b\x1e\xb3\x8c\x30\x7a\xb2\xa6\x74\x8b\x22\xbc\xf7\x7a\xd8\x96\x69\xe3\xf0\x8e\x7d\x9c\x9f\x09\x81\xd3\x64\x45\x5d\xbe\x5c\xb9\xb3\x5f\x18\x93\x64\xf3\x7c\x71\x2e\x8a\x37\x0e\xb7\x64\x53\x66\x7c\xbe\xfb\xf6\x15\x8f\x92\x47\x5f\xd9\xb7\x0e\x37\xde\xba\xe1\xe4\x19\x3d\xef\x27\xbf\xa7\x1a\x7e\x4b\x9a\x84\x95\xf0\xa1\x00\x78\x55\x68\xe1\x38\xbf\xae\x37\xed\x76\xbb\xdf\x2a\x5c\xe6\xbf\xcb\x16\xb9\xdc\xe2\x67\x5b\x36\xcb\x15\xda\x7c\xb5\x5c\xc1\x39\xf7\xeb\x7f\x63\x6b\xca\xc7\x29\xf4\x14\x03\x93\x56\xd3\xf5\xf9\x6f\xae\xd7\x9b\xeb\x4b\x45\x0f\x5e\xa9\x87\x70\x6b\x08\x91\x78\x6f\xc3\x89\xf9\x9e\x83\xe4\x60\xe1\x99\xc0\x32\xb1\xae\x90\xb2\x24\xca\x6d\x3b\xd0\x7c\x04\x3b\x4a\xa6\x27\xe4\x13\x77\x71\xea\x09\x1a\x78\x1f\x09\x35\xc5\x73\x0f\x1d\x24\x1b\xd2\x90\xbd\x92\x9e\x6f\xaa\xe2\x4e\xc6\x51\x18\x6a\x92\x70\x29\x78\x8d\x2f\xed\xcc\x9b\x1f\x77\xf7\x78\x38\x3e\x12\x6c\x20\xa8\x1f\xe9\x5c\x2b\xbc\xd6\xa2\x17\x2f\x01\x00\x00\xff\xff\x64\x5a\xdf\x11\x21\x02\x00\x00") func yaoAssistantsKeywordPromptsYmlBytes() ([]byte, error) { return bindataRead( @@ -1773,7 +1775,27 @@ func yaoAssistantsKeywordPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/keyword/prompts.yml", size: 747, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/keyword/prompts.yml", size: 545, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsKeywordSrcIndexTs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x9c\x56\xdf\x92\xdb\xb4\x17\xbe\xf7\x53\x9c\x9f\xa7\xd3\x9f\x93\x3a\xf6\xb6\xbd\x60\x26\x4b\x5a\x4a\x29\xd3\x42\x59\x3a\xdd\x32\x5c\xc4\x61\x56\x6b\x1f\x6f\x44\x64\xc9\x48\x0a\xbb\x19\x36\x33\x3c\x07\x97\x3c\x07\x4f\xc3\x0b\xf0\x0a\x8c\xfe\xd9\x4a\xb6\xb4\x03\x7b\xb1\x56\xe4\x73\xbe\xef\xfc\xd3\x27\x97\xd3\x69\x02\x53\xf8\x1a\x77\xd7\x42\x36\xf0\xe2\x46\x4b\x52\x6b\x2a\x38\x3c\xbb\x42\xae\x61\x06\x67\x78\xa3\xe1\xa5\x10\x1b\x63\xf7\x86\x48\x85\x0a\x5e\xbf\xfe\x06\x24\xaa\x5e\x70\x85\x40\x78\x03\xe8\xfc\x14\x6c\x1c\x90\x82\x6b\xaa\xd7\x80\x52\x0a\x09\x5a\x30\x94\x84\xd7\x98\xc0\xb4\x4c\x92\xb2\x84\xcf\xb4\x9a\x71\x51\xaf\xb1\xde\x24\x89\x0f\xc1\xf2\xac\x85\xd8\xc0\x0c\x7a\x29\x6a\x54\x86\xc9\xe3\x05\x02\x13\x58\x20\x36\x4e\xdf\x19\x9b\x1f\x95\xe0\x85\x8d\x0c\x5a\x21\xa1\x25\x5b\xa6\x67\x9e\x54\xc3\x57\xe7\xdf\x9e\x41\x4f\xa4\xa2\xfc\xca\x06\xd0\x6e\xb9\x03\x32\x8c\x59\x02\x50\xeb\x9b\x39\x10\x93\x6e\xf1\x5c\x70\x8d\x37\x3a\x4f\x00\x7a\xb2\x63\x82\x34\xe1\x8d\x31\x36\x55\x78\xe3\xb6\x93\xc9\xf1\x8b\xb7\xa1\x1e\xb7\xc0\xb7\x8c\xc1\x2f\x06\x59\x70\xa5\xa1\x16\x5d\xcf\xd0\x52\x2e\x02\x6c\x31\x6e\x9e\x26\x09\x40\x59\xc2\x99\x88\x2c\x73\x90\xa8\xb7\x92\x3b\x2c\x93\x96\xd2\x84\x37\x44\x36\xb0\x26\xbc\x61\x36\x19\xa0\x2d\x64\xff\x8b\xe0\x6f\x6f\x21\xfa\x59\xd4\x26\x1b\xae\x27\x36\x16\x88\x11\x4f\x13\x80\xbd\xe7\x7d\x8b\x9d\xf8\x19\xa1\x23\x72\xd3\x88\x6b\x0e\xb5\x68\x10\x2e\x99\xa8\x37\x06\xbf\x97\xa8\x90\xeb\x04\x80\xa1\x49\xc5\x22\xc2\x02\xee\xd2\x14\x5a\xd2\x2e\x9b\x9c\xfa\xb8\xc2\xae\xd2\x44\x6a\xf5\x3d\xd5\xeb\x2c\xbd\xb8\xb8\x30\xcd\x4a\x27\x21\xa4\x18\xcf\x9b\x33\x5a\x63\xf6\x89\x85\xd9\x03\x32\x85\x1f\x42\xfb\x38\xd2\x63\x87\x74\x14\x14\xf2\xe6\xdf\x80\x9c\xe4\x30\x1b\x81\xee\x5a\x85\xcc\x5d\x41\xdf\xc9\x1d\x68\x61\x67\x0e\xdd\xf8\xb5\x52\x74\xf1\x18\x78\x3f\x5f\xd4\x70\x66\xe6\xa0\xb4\xa4\xfc\x6a\xb9\x82\x05\x2c\x57\x16\x4e\xcb\x9d\x8f\xad\x2c\xcd\xb4\x7f\x64\xd8\xfd\x9c\x43\x66\x87\x04\x15\x5c\x4a\xb1\x41\x6e\xa3\xc8\xed\xff\xe7\x39\xa0\xae\x8b\x49\xc8\x57\x39\x27\x6c\x60\x01\x6f\xdc\xb1\xcb\xd2\x91\x24\xcd\x61\x98\x22\xa2\x7c\x28\x30\x84\xfc\x74\x8c\xf9\xd4\xbe\xda\xfb\xf1\xb7\xc1\xbb\x9a\x7b\xf8\xfb\xf7\xe1\x99\x94\x64\x57\x50\x65\x9f\x7e\xbf\x08\x50\x43\x13\x46\x74\x7b\x5c\x0e\x8c\x8a\x96\x32\x8d\x32\xf3\x86\x00\xd9\x66\x02\x8b\x27\xa0\x77\x3d\x8a\x16\x36\xb0\x58\x2c\x20\x75\x21\xa5\x86\x72\xe3\x7b\x53\x30\xe4\x57\x7a\x0d\x4f\xe0\xc4\xfb\x4e\x7c\xc0\x76\xce\x6a\xa2\xeb\x35\x64\x38\x19\x8b\xfd\xaa\x3d\xa8\x35\xa1\x4c\xe5\xb6\x1d\x5a\x04\x35\x1a\x03\xb5\x0d\x36\xca\x91\x1c\xc5\xef\x2d\xbd\xbe\xaa\x2f\xa5\xe8\xde\x19\xd9\x09\x45\x8d\x0f\xe2\xab\x16\x94\xa6\x8c\x01\x17\x03\x84\xa3\x0c\xea\xc7\xaf\x1c\x93\x24\xd7\x81\xcd\x54\x78\xa8\x8e\x4f\xd2\x14\xe1\x24\xa4\xf2\x1f\x83\x79\xeb\xc4\xc2\x37\x2f\x80\x24\x83\x8a\x38\xf0\x86\x68\x32\xbf\xd3\xb7\xf9\x18\xbe\xab\xb1\x79\xec\x4f\x93\xfd\x20\xf6\x2f\xde\x5b\xc0\x9e\x11\xca\x6d\x62\x70\xbd\xf6\x53\x3b\x8c\xb4\xed\x80\xf1\x7d\xe9\x47\xbb\x15\xb2\x23\x5a\x01\xa3\x1b\x9c\x9b\x17\x33\x78\x2e\xba\x8e\xcc\x14\xf6\x44\x12\x8d\xcd\x1c\x52\x4f\xf0\x30\x0f\x54\x8f\x86\xd5\xe3\xd4\x39\xbd\xa6\x1c\xdf\xeb\x53\xf1\xe0\x33\xac\x82\xcf\xe7\x5b\x66\x4e\x6e\x2f\x28\xd7\x6a\x0e\xe9\x0c\x46\xa7\x61\xfd\xc8\x1b\x9f\x6d\xbb\x4b\x94\x16\xfa\x61\x11\x19\x3e\x2a\x0e\x2c\xa3\x9b\xe9\x9f\x1a\x65\x4a\x13\x4e\xdc\x24\x92\x8b\xf1\xae\xf9\x90\x96\x8c\x5a\x5f\x8b\xae\x13\xdc\x68\x7b\x4b\x6f\x50\x95\x6a\xdb\xda\x45\x50\x79\x86\x84\x5b\x45\x18\x46\xba\x90\xd8\x33\x52\x63\x56\xfe\xb0\xac\x54\x75\xbe\x9a\x3e\x1d\x34\x60\x59\xa9\xf9\x5f\x7f\xfc\xb6\x9a\x56\xcb\xa7\x25\xcd\x21\x4d\x27\x11\x57\x3a\x84\x94\x7a\xc2\x23\xc0\x6a\xe5\x11\xef\x95\xc7\xbe\x5a\x12\x6a\xae\x3a\x58\x39\x9f\xbb\x3a\xcb\x4c\xf3\x2e\x77\x33\xf3\x8c\x3e\x12\x86\x7a\x98\x7d\x33\xfa\x3e\xa5\x42\xf5\x8c\xea\xac\x5c\x56\xbc\x92\xab\x07\xa5\xc3\x32\x42\x9a\x8d\xf6\x20\x5a\xe7\x17\xa9\x81\x0f\xe8\x32\xee\x7b\x0e\xdc\x76\x56\xe5\xf0\xd3\x56\x68\x5b\xbe\x03\x45\x87\x85\xc5\xf1\xa7\xe3\xa8\x84\xb3\x6a\x5a\xfd\xf9\xeb\xef\x55\x53\x15\xab\x07\x77\x32\x77\x44\xaa\xf4\x0c\xef\x81\x48\xff\x7f\xb1\x7a\x70\xeb\x1e\xf7\xca\xab\x63\x80\x28\xa2\xd8\x2f\xaf\xd4\x87\xea\x6c\x06\x83\x04\xa7\xa8\xda\xb6\x06\xe7\x1b\xda\x03\x76\xbd\xde\x81\xfd\xaa\x13\xc0\x84\xfd\x0c\x39\x50\xa1\x48\x69\xad\x00\x1f\xee\x7e\x0a\x0f\x4f\x4e\x46\xa5\x37\xa8\xa6\x23\x70\xb9\x73\xdc\x06\xc9\xc8\x11\xa1\x5c\x41\xb7\x65\x9a\xf6\x2c\x14\x30\x26\xa1\xbc\x66\xdb\x06\x55\x96\xe6\x69\x74\x73\x44\x57\x9a\x36\x6d\x0f\xe6\xae\xed\xc6\xb6\xe8\x48\x9f\x65\xbd\xbd\x35\x7a\x9f\xa2\xbf\x0a\xcc\x5f\x34\x0a\x06\xc3\x8c\x82\xc5\x8a\x29\x86\x6b\x4d\x1f\xe5\x1a\x6f\x1d\x25\x7a\x28\x90\x45\xbf\x55\x6b\x8b\x10\x51\xbb\xbb\xe8\x70\xe5\xbf\x80\x46\x94\x43\x04\xff\x6b\x00\xd9\x8f\x57\x9a\x3f\x23\x5f\x60\xb3\xed\x19\xad\x89\xc6\x51\xbb\x97\x45\x51\x70\xbc\x86\x73\xd4\xc3\xdd\x31\x59\x19\x7d\xfe\x3b\x00\x00\xff\xff\x21\xb8\xdb\xfa\x0f\x0c\x00\x00") + +func yaoAssistantsKeywordSrcIndexTsBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsKeywordSrcIndexTs, + "yao/assistants/keyword/src/index.ts", + ) +} + +func yaoAssistantsKeywordSrcIndexTs() (*asset, error) { + bytes, err := yaoAssistantsKeywordSrcIndexTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/keyword/src/index.ts", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1793,7 +1815,7 @@ func yaoAssistantsNeedsearchPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/needsearch/package.yao", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/needsearch/package.yao", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1813,12 +1835,32 @@ func yaoAssistantsNeedsearchPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/needsearch/prompts.yml", size: 955, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/needsearch/prompts.yml", size: 955, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsPromptPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xce\x31\x0e\xc2\x30\x0c\x85\xe1\x3d\xa7\x78\xca\xcc\xc0\xdc\x4b\xc0\xc0\x05\xaa\xf2\x2a\x59\x28\x89\xb1\x5d\x10\xa0\xde\x1d\x25\x88\xd9\xbf\x3e\xbf\x4f\x02\x72\x9d\x0b\xf3\x84\x7c\xb6\x56\x34\x70\xd2\x90\x22\x6f\x5a\x3e\xf4\xeb\x95\xbe\x98\x68\x48\xab\x3d\xba\xd8\x5c\x7d\x6d\x56\xb0\x39\x0d\xc6\xfb\x26\xc6\xc2\x1a\x0e\xa9\xd1\xc0\x75\xe5\x12\xf2\x20\x74\x78\xfe\x63\xe2\xa5\xe3\xc9\xb3\xd9\xed\x4f\xb7\xa1\x7a\x9e\xd0\x77\xf4\x88\x45\x69\x73\x6c\xd6\xdb\x63\x02\xf6\xb4\xa7\x6f\x00\x00\x00\xff\xff\xad\x9b\x26\xd0\xa5\x00\x00\x00") +var _yaoAssistantsNeedsearchSrcIndexTs = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x94\x56\x4d\x6f\x1b\x37\x10\xbd\xef\xaf\x78\xdd\x83\xb1\x6b\xc8\x2b\x17\x45\x50\x40\xc2\x46\x4d\xd3\x16\x6d\xe1\xb8\x41\x92\xa2\x87\x20\x88\xa9\xdd\x91\xc5\x8a\x22\x05\x92\xaa\x64\xd4\xfe\xef\x05\x3f\x56\x5a\x4a\x96\x8c\xe6\x10\x4b\x1c\xce\x9b\x37\xc3\x79\x33\x1a\x5e\x5e\x66\xb8\xc4\x2d\x51\x8b\x8f\xc4\x74\x33\xc7\x9b\x7b\x92\x16\x57\xb8\xa5\xad\xc5\xaf\x4a\x2d\xdc\x85\xf7\x4c\x1b\x32\xb8\xb9\x79\x07\x4d\x66\xa5\xa4\x21\x30\xd9\x82\xb6\x56\xb3\xc6\x1a\x98\xe0\xcc\xa5\x75\xde\x1b\x6e\xe7\x20\xad\x95\x86\x55\x82\x34\x93\x0d\x65\xb8\x1c\x66\xd9\x70\x88\x1f\xac\xb9\x92\xaa\x99\x53\xb3\xc8\x32\xe7\xa0\x67\xac\xa1\x18\xfe\x03\x99\xb5\xb0\xf8\x37\x03\x24\x51\xfb\x35\xe0\x8e\x30\x55\x4a\x10\x93\xe3\x0c\x31\xd4\x57\xfb\xb0\x22\x33\x82\xb1\x9a\xcb\xfb\xcf\x5f\x9c\xa5\x51\x72\xc6\x5b\x92\x0d\x8d\x20\xd7\xcb\x29\xe9\x71\xf6\x94\x65\xbb\x24\xb7\x16\x73\xa5\x16\xb8\xc2\x4a\xab\x86\x8c\x4b\x29\x25\xde\x25\xe7\xee\xff\xe9\xcc\x7f\x1b\x25\x2b\x9f\x3d\x66\x4a\x63\xc6\xd6\xc2\x5e\xc5\x9c\x2c\x7e\xff\xf8\xc7\x2d\x56\x4c\x1b\x2e\xef\x7d\x7e\xb3\xb5\x6c\x2c\x57\xd2\x07\x2b\x1c\x25\xbb\x1d\x81\xb9\x92\x56\x6f\x95\xb4\xb4\xb5\x83\x0c\x58\xb1\x07\xa1\x58\xdb\x59\xdc\x65\x57\xe9\xf7\xe1\x38\x2b\x0f\x0d\x1f\xba\x9a\x3f\x42\xae\x85\xf0\xe5\x69\x94\x34\x16\x8d\x5a\xae\x04\xf9\x90\x75\x07\x5b\xed\x0f\xc7\x59\x06\x0c\x87\xb8\x55\xbd\x9b\x03\x68\xb2\x6b\x2d\x03\x96\x4b\xcb\x58\x26\x5b\xa6\x5b\xcc\x99\x6c\x85\x4f\x06\x7c\x86\xe2\x9b\x1e\xfc\xe3\x23\x7a\x5f\xab\x46\xf9\x8a\x95\x9e\x0b\xfa\x88\xee\x25\x9e\x62\xdc\x0f\xb4\x54\xff\x10\x96\x4c\x2f\x5a\xb5\x91\x68\x54\x4b\x98\x0a\xd5\x2c\x1c\xfe\x4a\x93\x21\x69\x33\x40\x90\x4b\x25\xbc\x41\x8d\xe3\x30\x95\xd5\x7c\x59\x94\xe3\xc8\xab\x3b\x35\x96\x69\x6b\xfe\xe2\x76\x5e\xe4\x77\x77\x77\xee\xb1\xf2\xb2\xa3\xd4\xc7\x8b\xd7\x05\x6f\xa8\xf8\xbe\x1c\xf7\xa8\x45\x37\xc7\x19\x24\x0c\x9d\xc3\x7f\x19\xfb\xbb\x43\x6c\x5f\x8b\x94\x34\xc9\xf6\xff\x40\x5e\x0f\x70\x95\xc2\x5a\xcd\xb8\x7b\xa4\x1e\xfe\xb1\x73\x57\xb0\xf0\x0e\x3f\x91\xef\x5c\xd7\xdf\x6b\xd1\x15\x3c\x7c\x19\xa5\xca\xab\x23\x9d\x44\x7d\x33\x26\x0c\x0d\xfc\x79\xaa\xbe\xcf\x5f\x06\x1d\xf9\x9d\xf2\xae\xdd\xd1\x93\x8f\x6c\xf5\x43\x84\x1b\x0e\x9d\x9e\x5e\x90\xd3\x4e\x49\xe8\xda\xdb\x9d\x50\x8b\x1a\xef\x83\x60\x8b\x7c\x8f\x90\x0f\xb0\x6b\x42\x66\x62\x9c\x84\xf8\x24\x99\x1b\x87\xec\x27\xe9\xf0\x48\xd3\x98\xec\x27\x88\x33\x3c\x45\xe5\xf9\xac\xc2\x73\x06\x6a\xe5\x2e\x6e\xa8\x66\xd5\x0b\x8f\x1a\x3f\x86\xf0\xf1\x72\xdf\x58\x8e\x53\xbf\x3e\x33\xd4\x78\xa3\x35\x7b\xa8\xb8\xf1\x7f\x3b\xf7\xfe\x9d\x32\xba\x03\x13\x3c\x63\xae\x66\x5c\x58\xd2\xc5\xee\x96\xfb\x57\xd8\x12\xf5\xeb\xe4\x08\x70\xd7\xd5\x0c\x16\x75\x5d\x23\x0f\x15\xc9\x71\x71\x71\x70\xed\x73\xbe\xa1\x69\x3e\x40\xbe\xf0\xff\xb7\xd3\xfc\x4b\xc5\x65\x23\xd6\x2d\x99\xc2\x56\x56\xdd\xa8\x0d\xe9\xb7\xcc\x50\x51\x96\x3d\xdf\xfd\x67\xd7\x2d\x07\x49\xef\xeb\x8d\x3a\x3b\x20\x14\x93\xea\x5f\x71\x04\xc3\xab\xe4\xbd\x08\x13\xbc\x63\x76\x5e\x2d\xb9\x2c\xbe\x1d\xc4\xcf\x6c\xeb\x74\x73\x04\x91\x30\x1b\xe1\xba\x7a\x15\x9f\xd7\xcb\xbf\x61\xb6\x99\xa3\xa0\x72\xdf\xb3\xbf\xcd\x92\x96\x65\x5c\x98\x81\xef\x6a\xab\xba\xdd\x87\x99\x56\x4b\xb8\xc9\x9e\xed\x33\x43\xdd\x99\x7f\xd1\x6a\xf9\xc9\x2d\x83\xae\x57\xd3\xf1\xe8\xa7\x66\xec\xf2\x9d\x38\xe3\x30\x0d\x2c\x5a\x66\xd9\x28\xda\xa2\xb2\xf6\x3b\xed\xe7\xc8\x21\xdd\x62\x9e\xd1\x4a\x30\x2e\x3d\x2f\x6c\xe6\x24\x93\x5d\x15\x32\x49\x37\xd6\x21\x5f\xe7\xd9\x29\xa4\x1c\x1d\xaf\xe7\x20\x50\xe1\x5e\x1d\xb5\x8f\x93\x36\x41\x37\x7a\xde\xba\x45\xef\xd5\x4e\xdb\x95\xe0\x0d\xb7\xe0\xb2\xe5\x0d\xb3\x4a\x9b\x1d\x8e\x53\x46\xfc\x01\x12\x3a\xc1\x03\xef\x3b\x2c\xb7\x7a\x4d\x79\x89\xc7\xc7\x67\xad\xce\xfd\xb4\x35\x54\xe7\xb4\xdd\x75\xf6\x49\xe3\xe2\x8c\xad\x9d\xe6\x21\xcf\x98\x84\x3a\x9b\x82\x9f\xa2\x67\x72\x50\x78\x89\xa8\x54\xa1\x52\xf9\xae\xba\x07\x0d\xe0\xb5\xbf\xe3\x13\x0e\x3f\xa5\x3f\x94\x50\x47\x1d\xba\x21\xf6\x6c\x25\xca\xbe\x63\xb5\x5a\x9b\x79\x34\x9c\xf2\x8a\x25\x3a\x2e\x9d\x54\x1b\x41\xed\x3d\xe5\x51\x78\xc7\xb8\x8b\x33\xb0\xed\x09\x58\xa7\x88\x29\x33\x67\x50\x77\xef\xe2\x57\x9f\x25\xbd\xe4\x92\xfa\x9b\x21\xe9\x3b\xd4\xfb\x97\x9b\x84\x5d\x87\x51\xbf\x23\x2f\x2e\x92\x18\x82\xe4\xbd\x9d\xe3\x35\xae\x7d\x8c\x44\xad\xc9\xda\x74\x5f\x9e\xdb\x9a\x3e\xe8\xa4\x8f\x89\x13\xab\xb4\x7a\x35\x70\x39\xdc\xa8\x4d\xef\xdc\x8b\xc9\x0b\x3b\x6a\x96\x87\xdf\x2f\x6e\x30\xfc\x17\x00\x00\xff\xff\x71\xd9\x90\x2f\xd1\x0b\x00\x00") + +func yaoAssistantsNeedsearchSrcIndexTsBytes() ([]byte, error) { + return bindataRead( + _yaoAssistantsNeedsearchSrcIndexTs, + "yao/assistants/needsearch/src/index.ts", + ) +} + +func yaoAssistantsNeedsearchSrcIndexTs() (*asset, error) { + bytes, err := yaoAssistantsNeedsearchSrcIndexTsBytes() + if err != nil { + return nil, err + } + + info := bindataFileInfo{name: "yao/assistants/needsearch/src/index.ts", size: 3025, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + a := &asset{bytes: bytes, info: info} + return a, nil +} + +var _yaoAssistantsPromptPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xcd\x3b\x6e\xc3\x30\x10\x84\xe1\x9e\xa7\x18\xb0\x4e\x91\x5a\x97\x48\x8a\x5c\x80\x91\x46\xc8\x22\xe1\x23\xbb\x4b\x1b\xb6\xa0\xbb\x1b\xa4\xe1\x7a\x7e\x7c\x73\x04\x20\x96\x94\x19\x17\xc4\x4f\xad\xb9\x39\x3e\x9a\x4b\x96\x3b\x35\xbe\x8d\x75\xa3\xad\x2a\xcd\xa5\x96\x11\x7d\x69\x2a\xb6\x57\xcd\xe8\x46\x85\xf2\xbf\x8b\x32\xb3\xb8\x41\x8a\x57\x70\xdf\xb9\xba\x5c\x88\x36\x3d\x7b\x32\x7e\x6b\xf3\xe4\x5a\xf5\xf7\x45\x77\xa3\xc5\x05\x07\xa2\x31\xe9\xfa\x33\xf6\x4d\x2c\x7d\xff\x71\x8b\x38\x67\x53\xe7\xf3\xcc\x02\x30\x20\xe6\x46\x4d\xde\x75\x78\xef\x01\x38\xc3\x19\x1e\x01\x00\x00\xff\xff\x59\xf1\x38\x68\xc9\x00\x00\x00") func yaoAssistantsPromptPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1833,7 +1875,7 @@ func yaoAssistantsPromptPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/prompt/package.yao", size: 165, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/prompt/package.yao", size: 201, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1853,12 +1895,12 @@ func yaoAssistantsPromptPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/prompt/prompts.yml", size: 621, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/prompt/prompts.yml", size: 621, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsQuerydslPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8d\xcd\xaa\xc2\x30\x10\x85\xf7\x79\x8a\x43\xd6\xe5\x12\xba\xec\xfa\x82\x1b\x37\xe2\x03\xc8\xa0\x63\x29\x6d\x32\x65\x3a\x41\x8b\xf4\xdd\x25\x69\x71\x7b\x7e\xbe\xef\xe3\x00\x9f\x28\xb2\xef\xe0\x2f\x99\x75\xfd\xbf\x9e\x71\xe2\xc4\x4a\x26\xea\x9b\xd2\x3f\x78\xb9\xeb\x30\xdb\x20\xa9\xcc\x8e\x96\xf1\xdb\x3f\x55\x22\x12\x59\x56\x9a\x30\x51\xea\x33\xf5\xbc\x7f\x6d\x9d\x2b\xfb\x25\x3a\xf2\xc1\x93\x8a\x5a\x7c\x87\xa2\x07\x7c\xa4\xf7\xcd\x64\xe4\x9a\xb5\x21\x84\x66\xcf\x8d\xe3\x5c\x54\x59\x0b\x23\xfc\xb5\x0e\xd8\xdc\xe6\xbe\x01\x00\x00\xff\xff\x37\x66\x04\x78\xb6\x00\x00\x00") +var _yaoAssistantsQuerydslPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8e\xc1\x8a\x84\x30\x10\x44\xef\xf9\x8a\xa2\xcf\xb2\x04\x8f\x9e\x17\xf6\xb2\x97\x65\x3f\x60\xe9\xd5\x1e\x47\x34\x89\x74\x12\x66\x44\xfc\xf7\x21\x51\xe6\x5a\xef\x75\x55\xef\x06\x20\xcf\x4e\xa8\x03\xfd\x64\xd1\xed\xf3\xf7\x1b\x5f\xe2\x45\x39\x05\xa5\xa6\xf0\x41\x62\xaf\xd3\x9a\xa6\xe0\x8b\x76\x51\xc1\xdb\xbf\x69\x70\xf0\x9c\xb2\xf2\x82\x85\xfd\x98\x79\x94\xf3\x36\x6d\x6b\xed\x7e\x04\x9d\xe5\xea\xcb\x51\x22\x75\xd8\x41\x51\x58\xfb\x7b\xe1\xc3\x14\xf9\x7f\x91\x81\x70\x54\x27\xd4\xb9\xaa\x19\x00\x20\xc7\xcf\xbf\x14\x66\xa9\x59\x6b\xad\x6d\xce\x3c\x89\x5b\xcb\x3b\x59\xcb\x8e\xfd\x68\x0d\x70\x98\xc3\xbc\x02\x00\x00\xff\xff\x22\xe8\xba\x93\xda\x00\x00\x00") func yaoAssistantsQuerydslPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1873,7 +1915,7 @@ func yaoAssistantsQuerydslPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/querydsl/package.yao", size: 182, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/querydsl/package.yao", size: 218, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1893,12 +1935,12 @@ func yaoAssistantsQuerydslPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/querydsl/prompts.yml", size: 1155, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/querydsl/prompts.yml", size: 1155, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsTitlePackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\xcd\xc1\x0d\x02\x31\x0c\x04\xc0\x7f\xaa\x58\xe5\xcd\x83\xf7\x35\x40\x03\x34\x10\x85\x45\x8a\xe0\xe2\xc8\x36\x20\x84\xae\x77\xe4\xbb\x7c\xbd\xb3\xeb\x5f\x02\x72\x2f\x2b\xf3\x82\x7c\x6d\xfe\x24\x2e\xec\xd4\xe2\xa2\xf9\x14\xe1\x8d\x56\xb5\x0d\x6f\xd2\xc3\xcc\x94\xa8\xd2\x6b\x33\xc2\xa3\x64\xb8\x8b\xc6\xe9\x4d\xb5\x12\xd6\x8e\xb6\x7f\xc7\x3e\xfd\x11\x7d\x70\x2e\xca\x38\xc0\x82\xf8\x1e\x88\xeb\x88\xd1\x97\x86\x3d\x27\x60\x4b\x5b\xfa\x07\x00\x00\xff\xff\x31\x62\xb0\x98\x9b\x00\x00\x00") +var _yaoAssistantsTitlePackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8e\xc1\x0d\xc2\x30\x10\x04\xff\xae\x62\x75\x6f\x1e\xbc\xd3\x00\x0d\xd0\x80\x71\x16\x61\x91\xd8\xd6\x9d\x03\x42\x51\x7a\x47\x97\xe4\xeb\x99\x1d\xdf\x1a\x00\x29\x71\xa6\x0c\x90\x7b\xee\x13\x71\x63\xa1\xc6\x5e\x55\x2e\x0e\x47\x5a\xd2\xdc\x7a\xae\xc5\x9d\x93\x12\xa9\x96\x94\x8d\xe8\x3e\x32\x3c\xab\xfa\xd3\x87\x6a\xd1\x5d\x3b\xd6\xfd\xd7\xf6\xf4\xb7\xea\x9b\x67\x71\x31\x9a\x0c\x58\x21\xc6\xa8\xe9\xe5\x7c\xcc\x16\x1f\x13\x47\xc1\xb6\x3b\xb5\x1d\x91\x01\x7e\xa1\x87\x38\x37\xff\x78\x51\xef\x5d\x03\xb0\x85\x2d\xfc\x03\x00\x00\xff\xff\x63\x83\x1b\x30\xbf\x00\x00\x00") func yaoAssistantsTitlePackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1913,12 +1955,12 @@ func yaoAssistantsTitlePackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/title/package.yao", size: 155, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/title/package.yao", size: 191, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsTitlePromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x54\x92\x3d\x8f\xd3\x4e\x10\xc6\xfb\x7c\x8a\x47\xa9\x93\xe8\x9f\xfb\x73\x14\x69\x10\x98\x13\x08\xee\x40\x4a\xa0\xa0\xdc\xac\x27\xf6\x28\xf6\xae\xe5\x9d\xbc\x18\x51\xf1\x7a\x82\x0a\xa4\x14\xe8\x68\x81\x8e\x43\x14\x77\x48\xa7\xfb\x32\x28\x0e\xf9\x18\xc8\x5e\x07\x1d\x9d\xf5\xcc\xef\xf1\x3c\x33\xb3\x5d\xe4\x36\xa1\x01\x5c\xe1\x84\xd2\x16\xa0\xad\x11\x32\x32\xc0\xb3\x16\x00\xdc\x21\x43\xb9\x12\xaa\x74\xcd\x8e\x3a\x48\x49\x19\x36\xd1\x64\x96\x40\x58\x12\x72\x98\xd8\x1c\x3a\x56\x52\x31\x73\xca\x9d\x12\xb6\xc6\xf5\x5a\xf5\x0f\x1e\x29\x37\x1d\xd4\x5f\xfd\x1e\x6e\x1a\x95\x14\x4f\x69\xd7\x04\xca\x84\xe0\x90\x8c\xf0\xa4\x40\xaa\xd8\x40\x6c\xc6\xba\xc6\xf7\x7a\x08\x72\xaa\x5a\x8f\x73\xa6\x49\x07\x21\x39\x9d\x73\x26\x3c\x27\xdf\xb9\xc6\xfe\xef\xe1\x48\x89\x8e\xc1\x26\x9b\x09\x12\x65\xa2\x99\x8a\x7c\xed\x5a\x0f\x43\x92\x59\x6e\xf0\xf0\xc1\xe1\x13\x48\xdc\x18\x3b\x30\x16\xb4\xcc\x12\x65\xea\xac\x3e\xe9\x21\x99\x48\x62\x9f\xb5\x8b\x03\x13\x25\xec\xe2\x01\xf6\xba\xd7\xb1\xb0\x79\xe8\x3a\xe8\xef\x77\xf7\xff\xab\x46\xcd\x5d\x43\x05\xf7\xee\x57\x44\xff\x5f\xf5\x88\x97\x14\x0e\x90\xaa\x25\xfe\xf2\x75\x69\x24\x45\x42\xbb\x0e\xb7\x08\x2e\x23\xcd\x13\xd6\x1d\xa8\xb9\xe5\x10\x51\xb5\x6d\xd6\xcd\x62\x1b\xee\xb1\x23\x28\x5d\x8f\x3d\xb7\xac\xa9\x91\x47\xa2\x72\xc1\x82\x25\xc6\x94\x8a\x2b\x8b\xeb\x62\x44\xd5\x7a\x35\x41\x2b\x47\xf5\x79\x9a\x69\x7c\x8a\x83\xa5\x4a\xb3\x84\x9c\x0f\xd2\xbe\x6b\x17\x10\x8b\xb1\x9a\x56\x87\xb1\x53\x26\x77\xa3\x8d\x5f\xaf\x3f\x20\x88\xad\xb6\x49\x75\x82\x20\xe6\x0c\x41\x5d\xc4\x90\x34\x67\x3e\x45\x7b\x7b\x7a\xbe\x59\x7d\x2c\xbf\x3c\x5f\x5f\xae\xca\xe3\xb3\xf5\xe5\xa7\xcd\xc9\x8f\xf2\xf3\x1b\xef\x2f\xcf\xbf\x96\xaf\xde\x95\x6f\x4f\xbc\xe8\x01\x6f\xbc\x4d\xe3\x59\x84\xb4\xc0\x90\x94\xae\x5e\x4e\x9a\x59\x43\x46\xbc\xd1\x8b\xc1\x4e\x44\x4d\x47\x6c\x22\x6f\x2e\x7f\x7e\xdb\x1c\xbf\xdf\x7e\x7f\xb1\x3d\x5d\xd5\xe8\xef\x8b\x97\xeb\x8b\xb3\x2b\x5e\x2f\x78\xa2\xf5\x27\x00\x00\xff\xff\x0e\xae\x0f\x02\xe4\x02\x00\x00") +var _yaoAssistantsTitlePromptsYml = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x6c\x92\x3f\x6f\x13\x4b\x14\xc5\x7b\x7f\x8a\xa3\x54\xef\x49\xb6\xdf\x4b\x50\x28\xdc\x20\x58\x22\x20\x7f\xa5\x38\x29\x28\xc7\xb3\xd7\xbb\x23\xef\xce\x2c\x33\x77\xfd\x07\x51\xf1\x47\x44\x50\x51\xa4\x40\xa1\x05\x3a\x82\x28\x12\xa4\x28\xdf\x26\x1b\xf2\x31\xd0\xcc\xd8\x28\x96\xe8\x66\xf6\x9e\xfb\xbb\x67\xe7\xdc\x0e\xac\x29\xa8\x07\x37\x73\x4c\x65\x0b\x90\x46\x33\x69\xee\xe1\x45\x0b\x00\x1e\x91\x26\x2b\x98\xfc\x77\xa9\x1c\xb5\x51\x92\xd0\x4a\x67\xc3\xba\x00\x2b\x2e\xc8\x61\x68\x2c\x64\x2e\xd8\x6b\xc6\x64\x9d\x60\x65\xb4\xeb\xb6\x02\xe0\x40\xb8\x51\x2f\x9c\x56\xbb\xb8\xaf\x45\x31\x7b\x4e\x8b\x21\x10\x3a\x85\x4a\x49\xb3\x1a\xce\x50\x0a\xa5\xc1\xa6\x52\x32\xc8\xd7\xba\x48\x2c\xf9\xd1\x03\xab\x68\xd8\x46\x4a\x4e\x5a\x55\xb1\x1a\x53\x9c\x1c\x64\x77\xba\x38\xf0\x17\xec\x1c\xf6\x0f\x30\x20\x78\x48\x4e\x70\xa2\x24\x14\x42\x67\xb5\xc8\x08\xc2\xa1\x76\x64\xa1\x74\x55\x73\x34\xb6\x57\x73\x55\x73\xb4\xd6\xc1\x3e\x71\x6d\x35\xf6\x76\xb7\x9f\x86\xf6\xaa\x08\x6e\x68\xca\xb7\x66\x75\xb0\xbb\x87\x52\xd8\x51\x6a\x26\xba\xed\x2f\xd2\xa4\x84\x41\x61\xe4\xc8\x85\xfb\xb3\xda\x30\xc5\x23\x4d\xab\x42\xe8\xf0\x16\xf3\xe6\xcd\xda\x71\x80\x07\x62\x84\x2b\x76\x54\x0c\xa3\xa3\x6d\xd2\x19\xe7\x0b\x47\x1b\x3a\x2b\x94\xcb\x7b\x58\xeb\xdc\xc5\xc4\xd8\xd4\xb5\xb1\xba\xde\x59\xff\xdf\xbf\xb5\x75\x73\x55\xb2\xb9\x85\x7f\x92\x5c\x69\x72\xf4\xdf\xa6\xa8\x44\x38\x6c\x19\x4b\x42\xff\xeb\x7b\x57\x97\xf5\x3b\x6a\x4a\x69\x0f\xa5\x98\xe2\x0f\x29\x94\xfa\x3c\x2b\x68\x31\xfb\x01\xc1\x55\x24\xd5\x50\xc9\x36\xc4\xd8\xa8\x14\x99\x5f\x04\x25\xe7\x99\xcf\x75\x87\x8e\x20\x64\x48\x64\x6c\x94\x5c\xbc\x52\x9f\x85\x65\x4c\x14\xe7\x18\xd1\xec\x56\xa6\x1d\xf4\xc9\x27\x2f\x09\x52\x38\x0a\x9b\x33\xff\xcf\xe8\x62\x63\x2a\xca\xaa\x20\x17\x8d\x3c\xf1\x69\xf5\xb0\xf2\xd8\x4c\xc0\x06\x03\x31\xf2\xab\x63\x46\x8a\xdc\xbd\x95\xdb\x21\x22\xc9\x8d\x34\x85\x5f\x96\x24\x57\x15\x92\x20\xc2\x3e\x49\x55\x51\x6b\x89\x75\x73\x7a\x7e\x7d\xfc\xb1\xf9\xf2\xf2\xea\xf2\xb8\x39\x3a\xbb\xba\xfc\x74\x7d\xf2\xa3\xf9\xfc\x76\x99\xd7\x9c\x7f\x6d\xde\xbc\x6f\xde\x9d\xc4\x62\x14\x2e\x83\x1e\xd2\xa0\xce\x50\xce\xb0\x4f\x42\xfa\xdd\x2f\x2b\xa3\x49\xf3\x32\x28\x16\x93\x45\x11\xa1\x2b\x53\x3a\x5b\x86\x35\x3f\xbf\x5d\x1f\x7d\xb8\xf9\xfe\xea\xe6\xf4\x38\xb4\xfc\xba\x78\x7d\x75\x71\xf6\x17\x56\x2c\x44\x65\xeb\x77\x00\x00\x00\xff\xff\x3f\x77\x7e\x91\xbe\x03\x00\x00") func yaoAssistantsTitlePromptsYmlBytes() ([]byte, error) { return bindataRead( @@ -1933,7 +1975,7 @@ func yaoAssistantsTitlePromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/title/prompts.yml", size: 740, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/assistants/title/prompts.yml", size: 958, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1953,7 +1995,7 @@ func yaoDataIcons404Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1973,7 +2015,7 @@ func yaoDataIconsIconIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1993,7 +2035,7 @@ func yaoDataIconsIconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2013,7 +2055,7 @@ func yaoDataIconsIconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2033,7 +2075,7 @@ func yaoDataIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2053,7 +2095,7 @@ func yaoDataKbProvidersChunkingSemanticEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2073,7 +2115,7 @@ func yaoDataKbProvidersChunkingSemanticZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2093,7 +2135,7 @@ func yaoDataKbProvidersChunkingStructuredEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2113,7 +2155,7 @@ func yaoDataKbProvidersChunkingStructuredZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2133,7 +2175,7 @@ func yaoDataKbProvidersConverterMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2153,7 +2195,7 @@ func yaoDataKbProvidersConverterMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2173,7 +2215,7 @@ func yaoDataKbProvidersConverterOcrEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2193,7 +2235,7 @@ func yaoDataKbProvidersConverterOcrZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2213,7 +2255,7 @@ func yaoDataKbProvidersConverterOfficeEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2233,7 +2275,7 @@ func yaoDataKbProvidersConverterOfficeZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2253,7 +2295,7 @@ func yaoDataKbProvidersConverterUtf8EnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2273,7 +2315,7 @@ func yaoDataKbProvidersConverterUtf8ZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2293,7 +2335,7 @@ func yaoDataKbProvidersConverterVideoEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2313,7 +2355,7 @@ func yaoDataKbProvidersConverterVideoZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2333,7 +2375,7 @@ func yaoDataKbProvidersConverterVisionEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2353,7 +2395,7 @@ func yaoDataKbProvidersConverterVisionZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2373,7 +2415,7 @@ func yaoDataKbProvidersConverterWhisperEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2393,7 +2435,7 @@ func yaoDataKbProvidersConverterWhisperZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2413,7 +2455,7 @@ func yaoDataKbProvidersEmbeddingFastembedEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2433,7 +2475,7 @@ func yaoDataKbProvidersEmbeddingFastembedZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2453,7 +2495,7 @@ func yaoDataKbProvidersEmbeddingOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2473,7 +2515,7 @@ func yaoDataKbProvidersEmbeddingOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2493,7 +2535,7 @@ func yaoDataKbProvidersExtractionOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2513,7 +2555,7 @@ func yaoDataKbProvidersExtractionOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2533,7 +2575,7 @@ func yaoDataKbProvidersFetcherHttpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2553,7 +2595,7 @@ func yaoDataKbProvidersFetcherHttpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2573,7 +2615,7 @@ func yaoDataKbProvidersFetcherMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2593,7 +2635,7 @@ func yaoDataKbProvidersFetcherMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2613,7 +2655,7 @@ func yaoFieldsModelTransJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2633,7 +2675,7 @@ func yaoLangsEnUsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2653,7 +2695,7 @@ func yaoLangsZhCnGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2673,7 +2715,7 @@ func yaoLangsZhCnLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2693,7 +2735,7 @@ func yaoLangsZhCnLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2713,7 +2755,7 @@ func yaoLangsZhHkGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2733,7 +2775,7 @@ func yaoLangsZhHkLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2753,7 +2795,7 @@ func yaoLangsZhHkLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2773,7 +2815,7 @@ func yaoModelsAgentAssistantModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2793,7 +2835,7 @@ func yaoModelsAgentChatModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2813,7 +2855,7 @@ func yaoModelsAgentMessageModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2833,7 +2875,7 @@ func yaoModelsAgentResumeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2853,7 +2895,7 @@ func yaoModelsAgentSearchModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2873,7 +2915,7 @@ func yaoModelsAttachmentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2893,7 +2935,7 @@ func yaoModelsAuditModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2913,7 +2955,7 @@ func yaoModelsConfigModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2933,7 +2975,7 @@ func yaoModelsDslModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2953,7 +2995,7 @@ func yaoModelsInvitationModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2973,7 +3015,7 @@ func yaoModelsJobCategoryModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2993,7 +3035,7 @@ func yaoModelsJobExecutionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3013,7 +3055,7 @@ func yaoModelsJobJobModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3033,7 +3075,7 @@ func yaoModelsJobLogModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3053,7 +3095,7 @@ func yaoModelsKbCollectionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3073,7 +3115,7 @@ func yaoModelsKbDocumentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3093,7 +3135,7 @@ func yaoModelsMemberModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3113,7 +3155,7 @@ func yaoModelsRoleModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3133,7 +3175,7 @@ func yaoModelsTeamModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3153,7 +3195,7 @@ func yaoModelsUserOauth_accountModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3173,7 +3215,7 @@ func yaoModelsUserTypeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3193,7 +3235,7 @@ func yaoModelsUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3213,7 +3255,7 @@ func yaoReleaseAppYaz() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3233,7 +3275,7 @@ func yaoStoresAgentCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3253,7 +3295,7 @@ func yaoStoresAgentMemoryBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3273,7 +3315,7 @@ func yaoStoresCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3293,7 +3335,7 @@ func yaoStoresKbCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3313,7 +3355,7 @@ func yaoStoresKbStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3333,7 +3375,7 @@ func yaoStoresOauthCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3353,7 +3395,7 @@ func yaoStoresOauthClientBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3373,7 +3415,7 @@ func yaoStoresOauthStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3393,7 +3435,7 @@ func yaoStoresStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3413,7 +3455,7 @@ func yaoUploadersAttachmentLocalYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765870272, 0)} + info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3543,8 +3585,10 @@ var _bindata = map[string]func() (*asset, error){ "yao/assistants/entity/prompts.yml": yaoAssistantsEntityPromptsYml, "yao/assistants/keyword/package.yao": yaoAssistantsKeywordPackageYao, "yao/assistants/keyword/prompts.yml": yaoAssistantsKeywordPromptsYml, + "yao/assistants/keyword/src/index.ts": yaoAssistantsKeywordSrcIndexTs, "yao/assistants/needsearch/package.yao": yaoAssistantsNeedsearchPackageYao, "yao/assistants/needsearch/prompts.yml": yaoAssistantsNeedsearchPromptsYml, + "yao/assistants/needsearch/src/index.ts": yaoAssistantsNeedsearchSrcIndexTs, "yao/assistants/prompt/package.yao": yaoAssistantsPromptPackageYao, "yao/assistants/prompt/prompts.yml": yaoAssistantsPromptPromptsYml, "yao/assistants/querydsl/package.yao": yaoAssistantsQuerydslPackageYao, @@ -3826,10 +3870,16 @@ var _bintree = &bintree{nil, map[string]*bintree{ "keyword": {nil, map[string]*bintree{ "package.yao": {yaoAssistantsKeywordPackageYao, map[string]*bintree{}}, "prompts.yml": {yaoAssistantsKeywordPromptsYml, map[string]*bintree{}}, + "src": {nil, map[string]*bintree{ + "index.ts": {yaoAssistantsKeywordSrcIndexTs, map[string]*bintree{}}, + }}, }}, "needsearch": {nil, map[string]*bintree{ "package.yao": {yaoAssistantsNeedsearchPackageYao, map[string]*bintree{}}, "prompts.yml": {yaoAssistantsNeedsearchPromptsYml, map[string]*bintree{}}, + "src": {nil, map[string]*bintree{ + "index.ts": {yaoAssistantsNeedsearchSrcIndexTs, map[string]*bintree{}}, + }}, }}, "prompt": {nil, map[string]*bintree{ "package.yao": {yaoAssistantsPromptPackageYao, map[string]*bintree{}}, diff --git a/yao/assistants/keyword/package.yao b/yao/assistants/keyword/package.yao index 1513a630..4f597e77 100644 --- a/yao/assistants/keyword/package.yao +++ b/yao/assistants/keyword/package.yao @@ -2,6 +2,7 @@ "name": "Keyword Extraction", "description": "Extract keywords from text content", "type": "worker", + "uses": { "search": "disabled" }, "options": { "max_tokens": 500, "temperature": 0.3 diff --git a/yao/assistants/keyword/prompts.yml b/yao/assistants/keyword/prompts.yml index 1dcfbddf..0cd4696a 100644 --- a/yao/assistants/keyword/prompts.yml +++ b/yao/assistants/keyword/prompts.yml @@ -1,24 +1,21 @@ -# Keyword Extraction Agent Prompts - role: system content: | - You are a keyword extraction specialist. Your task is to extract relevant keywords from the provided text. + Extract keywords from text content. - ## Instructions - 1. Analyze the input text carefully - 2. Extract the most important and relevant keywords - 3. Return keywords in JSON format + Task: + 1. Analyze input text + 2. Extract important keywords + 3. Return JSON format + 4. Match input language - ## Response Format - Always respond with valid JSON: + Response Format (JSON only): ```json - { - "keywords": ["keyword1", "keyword2", ...] - } + {"keywords": ["keyword1", "keyword2", ...]} ``` - ## Guidelines - - Extract 5-15 keywords depending on content length - - Prioritize nouns, proper nouns, and key concepts - - Include both single words and short phrases when relevant + Guidelines: + - Extract 5-15 keywords based on content length + - Prioritize nouns, proper nouns, key concepts + - Include single words and short phrases - Exclude common stop words - - Maintain the original language of the content + - Keywords MUST be in the same language as input diff --git a/yao/assistants/keyword/src/index.ts b/yao/assistants/keyword/src/index.ts new file mode 100644 index 00000000..bc546de5 --- /dev/null +++ b/yao/assistants/keyword/src/index.ts @@ -0,0 +1,113 @@ +/** + * Keyword Extraction Agent - Next Hook + * Parses LLM response and extracts keywords with error tolerance + */ + +// @ts-nocheck + +/** + * Next hook - processes keyword extraction response + * Uses json.Parse for fault-tolerant JSON parsing + */ +function Next( + ctx: agent.Context, + payload: agent.NextHookPayload +): agent.NextHookResponse | null { + const completion = payload.completion; + + // No completion, return null for standard handling + if (!completion || !completion.content) { + return null; + } + + // Remove markdown code block if present + let content = completion.content.trim(); + if (content.startsWith("```json")) { + content = content.slice(7); + } else if (content.startsWith("```")) { + content = content.slice(3); + } + if (content.endsWith("```")) { + content = content.slice(0, -3); + } + content = content.trim(); + + // Try to parse JSON from completion content + let keywords: string[] = []; + + try { + // Use json.Parse for fault-tolerant parsing (handles broken JSON, JSONC, etc.) + const parsed = Process("json.Parse", content) as { + keywords?: string[]; + } | null; + + if (parsed && Array.isArray(parsed.keywords)) { + keywords = parsed.keywords.filter( + (k) => typeof k === "string" && k.trim().length > 0 + ); + } + } catch (e) { + // If json.Parse fails, try to extract keywords from text + keywords = extractKeywordsFromText(content); + } + + // If still no keywords, try extracting from raw text + if (keywords.length === 0) { + keywords = extractKeywordsFromText(content); + } + + // Return parsed keywords + return { + data: { + keywords: keywords, + }, + }; +} + +/** + * Extract keywords from plain text when JSON parsing fails + * Handles formats like: + * - Comma-separated: "keyword1, keyword2, keyword3" + * - Line-separated: "keyword1\nkeyword2\nkeyword3" + * - Bullet points: "- keyword1\n- keyword2" + * - Numbered: "1. keyword1\n2. keyword2" + */ +function extractKeywordsFromText(text: string): string[] { + const keywords: string[] = []; + + // Remove common prefixes/suffixes + let cleaned = text + .replace(/^[\s\S]*?keywords?[\s::]*\[?/i, "") // Remove "keywords:" prefix + .replace(/\][\s\S]*$/, "") // Remove trailing ] + .trim(); + + // Try line-by-line extraction + const lines = cleaned.split(/[\n\r]+/); + + for (const line of lines) { + // Remove bullet points, numbers, quotes + let keyword = line + .replace(/^[\s\-\*\•\d\.]+/, "") // Remove bullets/numbers + .replace(/^["'`]+|["'`]+$/g, "") // Remove quotes + .replace(/,\s*$/, "") // Remove trailing comma + .trim(); + + // Skip empty or too long + if (keyword.length > 0 && keyword.length < 100) { + // Split by comma if contains multiple + if (keyword.includes(",")) { + const parts = keyword.split(",").map((p) => p.trim()); + for (const part of parts) { + if (part.length > 0 && part.length < 100) { + keywords.push(part); + } + } + } else { + keywords.push(keyword); + } + } + } + + // Deduplicate + return [...new Set(keywords)]; +} diff --git a/yao/assistants/needsearch/src/index.ts b/yao/assistants/needsearch/src/index.ts new file mode 100644 index 00000000..2ccc92cb --- /dev/null +++ b/yao/assistants/needsearch/src/index.ts @@ -0,0 +1,117 @@ +/** + * Need Search Agent - Next Hook + * Parses LLM response and extracts search intent with error tolerance + */ + +// @ts-nocheck + +interface SearchResult { + need_search: boolean; + search_types: string[]; + confidence: number; +} + +/** + * Next hook - processes search intent response + * Uses json.Parse for fault-tolerant JSON parsing + */ +function Next( + ctx: agent.Context, + payload: agent.NextHookPayload +): agent.NextHookResponse | null { + const completion = payload.completion; + + // No completion, return null for standard handling + if (!completion || !completion.content) { + return null; + } + + // Remove markdown code block if present + let content = completion.content.trim(); + if (content.startsWith("```json")) { + content = content.slice(7); // Remove ```json + } else if (content.startsWith("```")) { + content = content.slice(3); // Remove ``` + } + if (content.endsWith("```")) { + content = content.slice(0, -3); // Remove trailing ``` + } + content = content.trim(); + + // Default result + let result: SearchResult = { + need_search: false, + search_types: [], + confidence: 0, + }; + + try { + // Use json.Parse for fault-tolerant parsing + const parsed = Process("json.Parse", content) as { + need_search?: boolean; + search_types?: string[]; + confidence?: number; + } | null; + + if (parsed) { + result.need_search = Boolean(parsed.need_search); + result.search_types = Array.isArray(parsed.search_types) + ? parsed.search_types.filter( + (t) => + typeof t === "string" && + ["web", "kb", "db"].includes(t.toLowerCase()) + ) + : []; + result.confidence = + typeof parsed.confidence === "number" + ? Math.min(1, Math.max(0, parsed.confidence)) + : 0.5; + } + } catch (e) { + // If json.Parse fails, try to extract from text + result = extractFromText(content); + } + + // Return parsed result + return { + data: result, + }; +} + +/** + * Extract search intent from plain text when JSON parsing fails + */ +function extractFromText(text: string): SearchResult { + const lower = text.toLowerCase(); + + // Check for explicit indicators + const needSearch = + lower.includes("true") || + lower.includes("need") || + lower.includes("search") || + lower.includes("web") || + lower.includes("kb") || + lower.includes("db"); + + const noSearch = + lower.includes("false") || + lower.includes("no search") || + lower.includes("not need"); + + // Extract search types + const searchTypes: string[] = []; + if (lower.includes("web")) searchTypes.push("web"); + if (lower.includes("kb") || lower.includes("knowledge")) + searchTypes.push("kb"); + if (lower.includes("db") || lower.includes("database")) + searchTypes.push("db"); + + // Determine need_search + const need = noSearch ? false : needSearch && searchTypes.length > 0; + + return { + need_search: need, + search_types: need ? searchTypes : [], + confidence: 0.5, // Low confidence for text extraction + }; +} diff --git a/yao/assistants/prompt/package.yao b/yao/assistants/prompt/package.yao index 6192796b..ef403bba 100644 --- a/yao/assistants/prompt/package.yao +++ b/yao/assistants/prompt/package.yao @@ -2,6 +2,7 @@ "name": "Prompt Optimizer", "description": "Transform user requirements into effective prompts", "type": "worker", + "uses": { "search": "disabled" }, "options": { "temperature": 0 } diff --git a/yao/assistants/querydsl/package.yao b/yao/assistants/querydsl/package.yao index 2d2a175a..326721be 100644 --- a/yao/assistants/querydsl/package.yao +++ b/yao/assistants/querydsl/package.yao @@ -2,6 +2,7 @@ "name": "QueryDSL Generator", "description": "Generate QueryDSL from natural language", "type": "worker", + "uses": { "search": "disabled" }, "options": { "max_tokens": 2000, "temperature": 0.2 diff --git a/yao/assistants/title/package.yao b/yao/assistants/title/package.yao index 81887702..c36130f4 100644 --- a/yao/assistants/title/package.yao +++ b/yao/assistants/title/package.yao @@ -2,6 +2,7 @@ "name": "Title Generator", "description": "Generate concise titles for conversations", "type": "worker", + "uses": { "search": "disabled" }, "options": { "temperature": 0 } diff --git a/yao/assistants/title/prompts.yml b/yao/assistants/title/prompts.yml index 5d78da70..d339f7e9 100644 --- a/yao/assistants/title/prompts.yml +++ b/yao/assistants/title/prompts.yml @@ -5,12 +5,16 @@ Task: 1. Analyze content and identify main topic 2. Create brief, descriptive title - 3. Match input language - 4. Return ONLY the title, no explanation + 3. Title MUST be in the same language as user input + + Output: + - Return ONLY the plain text title + - NO markdown, NO code blocks, NO quotes, NO explanation + - Just the title text itself Length: - English: 2-6 words, 15-50 chars - - CJK: 2-10 chars + - CJK (Chinese/Japanese/Korean): 2-10 chars - Mixed: max 50 chars Style: @@ -20,7 +24,14 @@ - Sentence case for English Examples: - "How to bake cookies?" → Chocolate Chip Cookie Recipe - "请教如何制作曲奇" → 巧克力曲奇制作 - "Debug my React component" → React Component Debugging - "帮我调试React组件" → React组件调试 + Input: "How to bake cookies?" + Output: Chocolate Chip Cookie Recipe + + Input: "请教如何制作曲奇" + Output: 巧克力曲奇制作 + + Input: "Debug my React component" + Output: React Component Debugging + + Input: "帮我调试React组件" + Output: React组件调试 From 46b4088af31af2dc3086c4aa5db0721df4db5c48 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 17:41:30 +0800 Subject: [PATCH 6/7] Update Assistant Package Descriptions and Configuration - Renamed several assistant packages for clarity, including "Entity Extraction" to "Entity Extractor" and "Keyword Extraction" to "Keyword Extractor." - Revised descriptions for various assistants to enhance understanding of their functionalities, such as changing "Extract keywords from text content" to "Extract search keywords." - Added a "uses" field with "search" set to "disabled" in the configuration of each assistant, standardizing their setup. - Updated the "Prompt Optimizer" description to "Optimize prompts for better results" and modified the "QueryDSL Generator" to "Query Builder" for improved clarity. - Ensured consistent naming conventions and descriptions across all assistant packages to enhance user experience and documentation clarity. --- agent/assistant/agent.go | 5 +- agent/assistant/load.go | 18 +- data/bindata.go | 326 +++++++++++++------------- yao/assistants/entity/package.yao | 5 +- yao/assistants/keyword/package.yao | 4 +- yao/assistants/needsearch/package.yao | 5 +- yao/assistants/prompt/package.yao | 2 +- yao/assistants/querydsl/package.yao | 4 +- yao/assistants/title/package.yao | 2 +- 9 files changed, 190 insertions(+), 181 deletions(-) diff --git a/agent/assistant/agent.go b/agent/assistant/agent.go index 74f703ca..204d87b1 100644 --- a/agent/assistant/agent.go +++ b/agent/assistant/agent.go @@ -132,7 +132,10 @@ func (ast *Assistant) Stream(ctx *context.Context, inputMessages []context.Messa fullMessages := historyResult.FullMessages // Buffer user input messages (use cleaned input without overlap) - ast.BufferUserInput(ctx, historyResult.InputMessages) + // Skip if History is disabled in options (for internal calls like needsearch) + if opts == nil || opts.Skip == nil || !opts.Skip.History { + ast.BufferUserInput(ctx, historyResult.InputMessages) + } ctx.Logger.PhaseComplete("History") // ================================================ diff --git a/agent/assistant/load.go b/agent/assistant/load.go index 2d7eee20..2814fcef 100644 --- a/agent/assistant/load.go +++ b/agent/assistant/load.go @@ -588,15 +588,19 @@ func loadMap(data map[string]interface{}) (*Assistant, error) { i18n.Locales[id] = flattened } else { - // No locales defined, create default with name and description + // No locales defined, create default with name and description for all common locales if assistant.Name != "" || assistant.Description != "" { defaultLocales := make(map[string]i18n.I18n) - defaultLocales["en"] = i18n.I18n{ - Locale: "en", - Messages: map[string]any{ - "name": assistant.Name, - "description": assistant.Description, - }, + // Create entries for all common locales so {{name}} can be resolved + commonLocales := []string{"en", "en-us", "zh", "zh-cn", "zh-tw"} + for _, locale := range commonLocales { + defaultLocales[locale] = i18n.I18n{ + Locale: locale, + Messages: map[string]any{ + "name": assistant.Name, + "description": assistant.Description, + }, + } } i18n.Locales[id] = defaultLocales } diff --git a/data/bindata.go b/data/bindata.go index bc978fe0..2932a0f1 100644 --- a/data/bindata.go +++ b/data/bindata.go @@ -335,7 +335,7 @@ func cuiSetupIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "cui/setup/index.html", size: 10, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -355,7 +355,7 @@ func cuiV09IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "cui/v0.9/index.html", size: 13, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -375,7 +375,7 @@ func cuiV10IndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "cui/v1.0/index.html", size: 49, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -395,7 +395,7 @@ func cuiV10Layouts__indexAsyncJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "cui/v1.0/layouts__index.async.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -415,7 +415,7 @@ func cuiV10UmiJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "cui/v1.0/umi.js", size: 71, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -435,7 +435,7 @@ func initEnv() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.env", size: 219, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -455,7 +455,7 @@ func initVscodeSettingsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/settings.json", size: 4666, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -475,7 +475,7 @@ func initVscodeTypesRuntimeConsoleDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/console.d.ts", size: 221, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -495,7 +495,7 @@ func initVscodeTypesRuntimeExceptionDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/exception.d.ts", size: 738, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -515,7 +515,7 @@ func initVscodeTypesRuntimeFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/fs.d.ts", size: 8554, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -535,7 +535,7 @@ func initVscodeTypesRuntimeGlobalDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/global.d.ts", size: 1759, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -555,7 +555,7 @@ func initVscodeTypesRuntimeHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/http.d.ts", size: 6179, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -575,7 +575,7 @@ func initVscodeTypesRuntimeIoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/io.d.ts", size: 587, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -595,7 +595,7 @@ func initVscodeTypesRuntimeLogDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/log.d.ts", size: 1692, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -615,7 +615,7 @@ func initVscodeTypesRuntimeNeoDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/neo.d.ts", size: 3750, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -635,7 +635,7 @@ func initVscodeTypesRuntimeProcessFsDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/fs.d.ts", size: 11133, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -655,7 +655,7 @@ func initVscodeTypesRuntimeProcessHttpDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/http.d.ts", size: 5653, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -675,7 +675,7 @@ func initVscodeTypesRuntimeProcessModelDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process/model.d.ts", size: 6656, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -695,7 +695,7 @@ func initVscodeTypesRuntimeProcessDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/process.d.ts", size: 23165, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -715,7 +715,7 @@ func initVscodeTypesRuntimeQueryDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/query.d.ts", size: 6124, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -735,7 +735,7 @@ func initVscodeTypesRuntimeStoreDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/store.d.ts", size: 2251, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -755,7 +755,7 @@ func initVscodeTypesRuntimeSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/sui.d.ts", size: 1713, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -775,7 +775,7 @@ func initVscodeTypesRuntimeTimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime/time.d.ts", size: 711, mode: os.FileMode(493), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -795,7 +795,7 @@ func initVscodeTypesRuntimeDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/runtime.d.ts", size: 424, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -815,7 +815,7 @@ func initVscodeTypesSuiDTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/.vscode/types/sui.d.ts", size: 8931, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -835,7 +835,7 @@ func initAppYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/app.yao", size: 3115, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -855,7 +855,7 @@ func initDataReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/README.md", size: 41, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -875,7 +875,7 @@ func initDataTemplatesDefault__assetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -895,7 +895,7 @@ func initDataTemplatesDefault__assetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -915,7 +915,7 @@ func initDataTemplatesDefault__assetsImagesLogosLogo_colorSvg() (*asset, error) return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -935,7 +935,7 @@ func initDataTemplatesDefault__assetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -955,7 +955,7 @@ func initDataTemplatesDefault__dataJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__data.json", size: 30, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -975,7 +975,7 @@ func initDataTemplatesDefault__documentHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/__document.html", size: 492, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -995,7 +995,7 @@ func initDataTemplatesDefaultIndexIndexCss() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.css", size: 2896, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1015,7 +1015,7 @@ func initDataTemplatesDefaultIndexIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.html", size: 2361, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1035,7 +1035,7 @@ func initDataTemplatesDefaultIndexIndexJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/data/templates/default/index/index.json", size: 31, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1055,7 +1055,7 @@ func initDbReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/db/README.md", size: 84, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1075,7 +1075,7 @@ func initFlowsMenuFlowYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/flows/menu.flow.yao", size: 813, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1095,7 +1095,7 @@ func initFormsAccountFormYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/forms/account.form.yao", size: 1194, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1115,7 +1115,7 @@ func initIconsAppIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/icons/app.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1135,7 +1135,7 @@ func initIconsAppIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/icons/app.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1155,7 +1155,7 @@ func initIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1175,7 +1175,7 @@ func initLoginsAdminLoginYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/logins/admin.login.yao", size: 302, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1195,7 +1195,7 @@ func initLogsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/logs/README.md", size: 28, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1215,7 +1215,7 @@ func initModelsAdminUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/models/admin/user.mod.yao", size: 6416, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1235,7 +1235,7 @@ func initModelsTestsPetModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/models/tests/pet.mod.yao", size: 525, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1255,7 +1255,7 @@ func initNeoNeoYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/neo/neo.yml", size: 724, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1275,7 +1275,7 @@ func initPublicReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/README.md", size: 108, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1295,7 +1295,7 @@ func initPublicAssetsReadmeMd() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/README.md", size: 33, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1315,7 +1315,7 @@ func initPublicAssetsImagesIconsAppPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/images/icons/app.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1335,7 +1335,7 @@ func initPublicAssetsImagesLogosLogo_colorSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/logo_color.svg", size: 2909, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1355,7 +1355,7 @@ func initPublicAssetsImagesLogosWordmarkSvg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/images/logos/wordmark.svg", size: 3615, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1375,7 +1375,7 @@ func initPublicAssetsLibsuiMinJs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js", size: 12569, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1395,7 +1395,7 @@ func initPublicAssetsLibsuiMinJsMap() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/assets/libsui.min.js.map", size: 38553, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1415,7 +1415,7 @@ func initPublicIndexCfg() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/index.cfg", size: 85, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1435,7 +1435,7 @@ func initPublicIndexSui() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/public/index.sui", size: 5682, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1455,7 +1455,7 @@ func initScriptsAccountTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/scripts/account.ts", size: 2521, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1475,7 +1475,7 @@ func initScriptsAiNeoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/scripts/ai/neo.ts", size: 375, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1495,7 +1495,7 @@ func initScriptsTestsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/scripts/tests.ts", size: 1044, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1515,7 +1515,7 @@ func initScriptsUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/scripts/utils.ts", size: 1230, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1535,7 +1535,7 @@ func initSuisWebSuiYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/suis/web.sui.yao", size: 675, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1555,7 +1555,7 @@ func initTablesAccountTabYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/tables/account.tab.yao", size: 5597, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1575,7 +1575,7 @@ func initTsconfigJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "init/tsconfig.json", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1595,7 +1595,7 @@ func libsuiAgentTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "libsui/agent.ts", size: 15267, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1615,7 +1615,7 @@ func libsuiIndexTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "libsui/index.ts", size: 13049, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1635,7 +1635,7 @@ func libsuiUtilsTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "libsui/utils.ts", size: 5959, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1655,7 +1655,7 @@ func libsuiYaoTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "libsui/yao.ts", size: 4338, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1675,7 +1675,7 @@ func publicIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "public/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1695,12 +1695,12 @@ func uiIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "ui/index.html", size: 11, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsEntityPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x24\x8e\x41\x0a\x83\x30\x10\x45\xf7\x39\xc5\x27\x6b\x29\xc1\xa5\x7b\xcf\x51\x06\x9d\x6a\x50\x93\x30\x99\xa2\x52\xbc\x7b\x49\xb2\x7d\xff\xf1\x66\x7e\x06\xb0\x81\x0e\xb6\x03\xec\x18\xd4\xeb\x8d\xf1\x52\xa1\x49\x7d\x0c\xb6\x2b\xf3\xcc\x79\x12\x9f\x2a\x28\x56\x9b\xc1\xc5\xf6\x9c\x41\x61\x86\xf0\x4e\x45\xc8\xab\x4f\x19\x9f\x28\xd8\x42\x3c\x77\x9e\x17\xc6\x22\x94\xd6\x96\xd2\x3b\xd5\x4b\x67\x94\x8d\xa5\xb1\x58\xcb\xd9\x0e\x28\xcf\x00\xf6\xa0\xeb\xad\x71\xe3\xca\x7a\xe7\x5c\xd7\xb8\xf2\x91\x58\x48\xbf\x52\x1a\xee\xd5\x1b\xe0\x31\x8f\x31\xff\x00\x00\x00\xff\xff\xf4\x64\xb6\xe3\xc5\x00\x00\x00") +var _yaoAssistantsEntityPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\xc1\x6a\xc4\x30\x0c\x44\xef\xfe\x8a\x41\xe7\xa5\x98\x3d\xee\x7d\xbf\xa3\xa8\xb1\x60\x4d\x12\xdb\x48\x0a\x4d\x08\xf9\xf7\x62\xa7\xd7\x79\x6f\x66\xce\x00\x50\xe1\x55\xe8\x05\x7a\x17\xcf\x7e\xe0\xbd\xbb\xf2\xe4\x55\xe9\xd1\x69\x12\x9b\x34\x37\xcf\xb5\x0c\xe9\xa6\x90\x2e\x67\x31\x70\x49\x50\x59\xb8\x0b\xf6\xc9\xcd\xee\x9a\x1f\x6d\x8c\xfe\x56\x9d\xe5\x7f\x6a\x33\x31\x7a\xe1\x04\x99\xb0\x4e\x9f\xce\x53\x36\xfe\x59\x24\x11\xae\xe1\xd4\xf1\x34\xb4\x00\x00\xb4\xf2\xfe\xed\x75\x96\x91\x3d\x63\x8c\x8f\x3b\x77\x59\x9b\x28\xfb\xa6\xfd\x27\x7e\x3d\x03\x70\x85\x2b\x84\xbf\x00\x00\x00\xff\xff\xe0\xbf\xc4\x93\xd4\x00\x00\x00") func yaoAssistantsEntityPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1715,7 +1715,7 @@ func yaoAssistantsEntityPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/entity/package.yao", size: 197, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/entity/package.yao", size: 212, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1735,12 +1735,12 @@ func yaoAssistantsEntityPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/entity/prompts.yml", size: 930, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/entity/prompts.yml", size: 930, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsKeywordPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\x41\x8a\xc3\x30\x0c\x45\xf7\x3e\xc5\x47\xeb\x30\x04\x86\xd9\x64\x3f\xab\x1e\xa2\xb8\xb6\x4a\x43\x6a\x2b\xc8\x0a\x49\x08\xb9\x7b\x89\xdd\xed\x7b\x4f\xfa\x87\x03\x28\xfb\xc4\x34\x80\x6e\xbc\xaf\xa2\x11\xff\x9b\xa9\x0f\x36\x4a\xa6\xee\xf2\x91\x4b\xd0\x71\xae\x60\x00\x7d\x35\xa6\x96\x17\x3c\x55\x12\x8c\x37\x43\x90\x6c\x9c\xad\x9d\xd9\x3e\xd7\xb7\xab\xe8\xc4\xda\xd8\x52\xb8\xd0\x80\x03\x54\xd8\x6b\x78\x5d\x3e\x8e\xc5\x3f\xde\x1c\x09\x67\x6d\xa4\x2e\xd5\xcc\x01\x00\x25\xbf\xdd\x4d\x26\xae\xec\xaf\xef\xbb\x86\x8d\xd3\xcc\xea\x6d\xd1\x6b\xa6\xff\xf9\x75\xc0\xe9\x4e\xf7\x09\x00\x00\xff\xff\x9a\x4e\x35\xed\xd4\x00\x00\x00") +var _yaoAssistantsKeywordPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\x41\x0a\x83\x30\x10\x45\xf7\x39\xc5\x67\xd6\x52\x84\xd2\x8d\xfb\xae\x7a\x88\x92\x9a\x81\x8a\xd5\xc8\xcc\x88\x8a\xe4\xee\x25\x89\xdb\x79\xef\xfd\x39\x1d\x40\xb3\x9f\x98\x3a\xd0\x8b\x8f\x2d\x4a\xc0\x73\x37\xf1\xbd\x45\xa1\x26\xe3\xc0\xda\xcb\xb0\xd8\x10\xe7\x6c\x5d\x14\xca\x5e\xfa\x2f\xc6\x1a\x69\x75\xed\x58\xca\xd4\x16\x65\xe4\xab\x5f\x95\x95\x3a\x9c\xa0\x9a\x64\x1e\x06\xf5\x9f\x1f\x07\x42\x2a\x4e\x2c\xf3\x45\x73\x00\x40\x93\xdf\xdf\x16\x47\x2e\xb7\x47\xdb\x36\xf5\x6c\x3c\x2d\x2c\xde\x56\xc9\x6f\xda\xdb\xdd\x01\xc9\x25\xf7\x0f\x00\x00\xff\xff\x6b\x77\x93\x90\xc8\x00\x00\x00") func yaoAssistantsKeywordPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1755,7 +1755,7 @@ func yaoAssistantsKeywordPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/keyword/package.yao", size: 212, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/keyword/package.yao", size: 200, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1775,7 +1775,7 @@ func yaoAssistantsKeywordPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/keyword/prompts.yml", size: 545, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/keyword/prompts.yml", size: 545, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1795,12 +1795,12 @@ func yaoAssistantsKeywordSrcIndexTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/keyword/src/index.ts", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/keyword/src/index.ts", size: 3087, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsNeedsearchPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x4c\x8d\xb1\x0e\x82\x30\x14\x45\xf7\x7e\xc5\x4d\x67\x62\xd0\x91\xd9\xd9\xc5\x0f\x30\x0d\x5c\x63\x83\x6d\xe1\xf5\x11\x21\x86\x7f\x37\x2d\x8b\xeb\x39\xb9\xe7\x7e\x0d\x60\xa3\x0b\xb4\x1d\xec\x8d\x1c\x70\xa7\x93\xfe\x65\x9b\x22\x06\xe6\x5e\xfc\xa4\x3e\xc5\xe2\xaf\x54\x4a\xf0\x91\xf0\x4f\xcc\x0b\x65\x83\x70\x5e\xbc\x30\x83\xab\x52\xa2\x7b\x23\xff\xed\x75\x9b\x6a\xf8\x93\x64\xa4\x1c\x2c\xd5\x5c\xb6\x1d\xca\x37\x60\x83\x5b\x1f\x9a\x46\x56\x76\x69\xdb\xe6\xc0\xca\x30\x51\x9c\x2e\x52\x12\xed\xe9\x6c\x80\xdd\xec\xe6\x17\x00\x00\xff\xff\x12\x2f\x64\x90\xb2\x00\x00\x00") +var _yaoAssistantsNeedsearchPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8d\x41\x8e\x83\x30\x14\x43\xf7\x39\x85\xf5\xd7\x68\xc4\xcc\x92\xed\xdc\xa0\x17\xa8\xd2\xc4\x88\x88\x92\xa0\x9f\xa0\xb6\x42\xdc\xbd\x4a\x50\xbb\xf5\x7b\xb6\x77\x03\x48\xb4\x0b\x65\x80\x5c\x38\x52\x19\x1d\xf1\x3f\xd1\xcd\x54\xe9\x2a\xf6\xcc\x4e\xc3\x5a\x42\x8a\xd5\x6a\x0c\x61\x84\x7e\xf4\x0c\xab\x44\x24\x3d\xfd\x59\x29\xaf\xb5\x2d\x3e\x92\x7e\x67\xb6\xcc\x2c\x03\x76\x48\xa6\x55\x37\x55\xee\x43\xb6\xb7\x3b\xbd\xe0\x68\x4e\x6a\x2f\x4d\x33\x00\x20\x8b\x7d\x5e\x4b\x9a\xd9\xb2\xbf\xbe\xef\xce\xb8\x70\x59\xa9\xb6\x6c\x5a\x6f\xfa\x9f\x5f\x03\x1c\xe6\x30\xef\x00\x00\x00\xff\xff\xbc\x48\x13\x4c\xcf\x00\x00\x00") func yaoAssistantsNeedsearchPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1815,7 +1815,7 @@ func yaoAssistantsNeedsearchPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/needsearch/package.yao", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/needsearch/package.yao", size: 207, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1835,7 +1835,7 @@ func yaoAssistantsNeedsearchPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/needsearch/prompts.yml", size: 955, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/needsearch/prompts.yml", size: 955, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1855,12 +1855,12 @@ func yaoAssistantsNeedsearchSrcIndexTs() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/needsearch/src/index.ts", size: 3025, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/needsearch/src/index.ts", size: 3025, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsPromptPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\xcd\x3b\x6e\xc3\x30\x10\x84\xe1\x9e\xa7\x18\xb0\x4e\x91\x5a\x97\x48\x8a\x5c\x80\x91\x46\xc8\x22\xe1\x23\xbb\x4b\x1b\xb6\xa0\xbb\x1b\xa4\xe1\x7a\x7e\x7c\x73\x04\x20\x96\x94\x19\x17\xc4\x4f\xad\xb9\x39\x3e\x9a\x4b\x96\x3b\x35\xbe\x8d\x75\xa3\xad\x2a\xcd\xa5\x96\x11\x7d\x69\x2a\xb6\x57\xcd\xe8\x46\x85\xf2\xbf\x8b\x32\xb3\xb8\x41\x8a\x57\x70\xdf\xb9\xba\x5c\x88\x36\x3d\x7b\x32\x7e\x6b\xf3\xe4\x5a\xf5\xf7\x45\x77\xa3\xc5\x05\x07\xa2\x31\xe9\xfa\x33\xf6\x4d\x2c\x7d\xff\x71\x8b\x38\x67\x53\xe7\xf3\xcc\x02\x30\x20\xe6\x46\x4d\xde\x75\x78\xef\x01\x38\xc3\x19\x1e\x01\x00\x00\xff\xff\x59\xf1\x38\x68\xc9\x00\x00\x00") +var _yaoAssistantsPromptPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\x8d\x41\x0e\xc2\x30\x0c\x04\xef\x79\xc5\xca\x67\x0e\x9c\xfb\x09\xf8\x42\xda\x1a\x11\xd1\x34\x96\xed\x08\x41\x95\xbf\xa3\x04\xf5\x3c\xb3\xb3\x47\x00\x68\x8f\x99\x69\x02\xdd\xb5\x64\x71\xdc\xc4\x53\x4e\x5f\x56\xba\x74\xba\xb2\x2d\x9a\xc4\x53\xd9\xbb\x74\x52\xc8\xb0\x0d\x8f\xa2\x98\xd9\x9d\x15\xca\x56\x37\xb7\xff\xce\x3f\x32\xaa\xef\xa2\xaf\xb3\x55\x8d\x8d\x26\x1c\x20\xe3\xa8\xcb\xb3\xf3\x35\x59\x9c\x37\x5e\x09\x6d\x38\x65\x5c\x0d\x2d\x00\x3d\xc4\x59\x58\xa3\x57\xed\xbd\x6b\x00\x5a\x68\xe1\x17\x00\x00\xff\xff\x24\xb7\x86\xc2\xba\x00\x00\x00") func yaoAssistantsPromptPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1875,7 +1875,7 @@ func yaoAssistantsPromptPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/prompt/package.yao", size: 201, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/prompt/package.yao", size: 186, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1895,12 +1895,12 @@ func yaoAssistantsPromptPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/prompt/prompts.yml", size: 621, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/prompt/prompts.yml", size: 621, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsQuerydslPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x3c\x8e\xc1\x8a\x84\x30\x10\x44\xef\xf9\x8a\xa2\xcf\xb2\x04\x8f\x9e\x17\xf6\xb2\x97\x65\x3f\x60\xe9\xd5\x1e\x47\x34\x89\x74\x12\x66\x44\xfc\xf7\x21\x51\xe6\x5a\xef\x75\x55\xef\x06\x20\xcf\x4e\xa8\x03\xfd\x64\xd1\xed\xf3\xf7\x1b\x5f\xe2\x45\x39\x05\xa5\xa6\xf0\x41\x62\xaf\xd3\x9a\xa6\xe0\x8b\x76\x51\xc1\xdb\xbf\x69\x70\xf0\x9c\xb2\xf2\x82\x85\xfd\x98\x79\x94\xf3\x36\x6d\x6b\xed\x7e\x04\x9d\xe5\xea\xcb\x51\x22\x75\xd8\x41\x51\x58\xfb\x7b\xe1\xc3\x14\xf9\x7f\x91\x81\x70\x54\x27\xd4\xb9\xaa\x19\x00\x20\xc7\xcf\xbf\x14\x66\xa9\x59\x6b\xad\x6d\xce\x3c\x89\x5b\xcb\x3b\x59\xcb\x8e\xfd\x68\x0d\x70\x98\xc3\xbc\x02\x00\x00\xff\xff\x22\xe8\xba\x93\xda\x00\x00\x00") +var _yaoAssistantsQuerydslPackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x34\x8d\x4d\x8a\xc3\x30\x0c\x46\xf7\x3e\xc5\x87\xd6\x61\x30\x59\x66\x39\x37\x98\x13\x0c\x4a\x2c\xa8\xc9\x8f\x53\xc9\xa6\x0d\x21\x77\x2f\x76\xe8\xf6\x7b\x4f\x4f\xa7\x03\x68\xe3\x55\x68\x00\xfd\x15\xd1\x03\xbf\x25\x2e\x41\x94\xba\x8a\x82\xd8\xa4\x71\xcf\x31\x6d\xd5\x68\x0c\x81\x33\x8f\x6c\x82\x67\x11\x8d\x62\xb7\x9a\x8f\xbd\x55\x5e\x49\xe7\xef\x79\x31\x31\x1a\x70\x82\x4c\x58\xa7\x47\xe5\x21\x1a\x8f\x8b\x04\xc2\xd5\x9c\xd4\xea\x4d\x73\x00\x40\x2b\xbf\xff\x73\x9a\xa5\x6d\xbd\xf7\xbe\xbb\xf7\x2c\xeb\x2e\xca\xb9\x68\xfd\xe3\x7f\x7a\x07\x5c\xee\x72\x9f\x00\x00\x00\xff\xff\x5a\x74\xb2\x32\xc4\x00\x00\x00") func yaoAssistantsQuerydslPackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1915,7 +1915,7 @@ func yaoAssistantsQuerydslPackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/querydsl/package.yao", size: 218, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/querydsl/package.yao", size: 196, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1935,12 +1935,12 @@ func yaoAssistantsQuerydslPromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/querydsl/prompts.yml", size: 1155, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/querydsl/prompts.yml", size: 1155, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } -var _yaoAssistantsTitlePackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8e\xc1\x0d\xc2\x30\x10\x04\xff\xae\x62\x75\x6f\x1e\xbc\xd3\x00\x0d\xd0\x80\x71\x16\x61\x91\xd8\xd6\x9d\x03\x42\x51\x7a\x47\x97\xe4\xeb\x99\x1d\xdf\x1a\x00\x29\x71\xa6\x0c\x90\x7b\xee\x13\x71\x63\xa1\xc6\x5e\x55\x2e\x0e\x47\x5a\xd2\xdc\x7a\xae\xc5\x9d\x93\x12\xa9\x96\x94\x8d\xe8\x3e\x32\x3c\xab\xfa\xd3\x87\x6a\xd1\x5d\x3b\xd6\xfd\xd7\xf6\xf4\xb7\xea\x9b\x67\x71\x31\x9a\x0c\x58\x21\xc6\xa8\xe9\xe5\x7c\xcc\x16\x1f\x13\x47\xc1\xb6\x3b\xb5\x1d\x91\x01\x7e\xa1\x87\x38\x37\xff\x78\x51\xef\x5d\x03\xb0\x85\x2d\xfc\x03\x00\x00\xff\xff\x63\x83\x1b\x30\xbf\x00\x00\x00") +var _yaoAssistantsTitlePackageYao = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\x2c\x8d\xc1\x0d\xc2\x30\x10\x04\xff\xae\x62\x75\x6f\x1e\xbc\xd3\x00\x0d\xd0\x80\x49\x56\xc2\x22\xb1\xad\x3b\x07\x84\x22\xf7\x8e\xce\xe4\x3d\xb3\xb3\x47\x00\x24\xc7\x8d\x32\x41\xee\xa9\xad\xc4\x8d\x99\x1a\x5b\x51\xb9\x38\x5c\x68\xb3\xa6\xda\x52\xc9\xee\x9c\x94\x98\x4b\x7e\x53\x2d\x3a\x40\xf3\xa5\xfd\x07\xed\x5b\x47\xed\x53\xf4\xc5\x33\xb2\x1b\x4d\x26\x1c\x10\x63\xd4\xf9\xe9\x7c\x49\x16\x1f\x2b\x17\x41\x1f\x4e\x19\x1f\x43\x0b\x80\x87\xb8\x55\xff\xda\xd5\x7b\xd7\x00\xf4\xd0\xc3\x2f\x00\x00\xff\xff\xaa\x3c\xa9\x4f\xb2\x00\x00\x00") func yaoAssistantsTitlePackageYaoBytes() ([]byte, error) { return bindataRead( @@ -1955,7 +1955,7 @@ func yaoAssistantsTitlePackageYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/title/package.yao", size: 191, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/title/package.yao", size: 178, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1975,7 +1975,7 @@ func yaoAssistantsTitlePromptsYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/assistants/title/prompts.yml", size: 958, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/assistants/title/prompts.yml", size: 958, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -1995,7 +1995,7 @@ func yaoDataIcons404Png() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/icons/404.png", size: 9342, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2015,7 +2015,7 @@ func yaoDataIconsIconIcns() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.icns", size: 67465, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2035,7 +2035,7 @@ func yaoDataIconsIconIco() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.ico", size: 54993, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2055,7 +2055,7 @@ func yaoDataIconsIconPng() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/icons/icon.png", size: 34558, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2075,7 +2075,7 @@ func yaoDataIndexHtml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/index.html", size: 282, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2095,7 +2095,7 @@ func yaoDataKbProvidersChunkingSemanticEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/en.json", size: 5543, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2115,7 +2115,7 @@ func yaoDataKbProvidersChunkingSemanticZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/semantic/zh-cn.json", size: 5446, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2135,7 +2135,7 @@ func yaoDataKbProvidersChunkingStructuredEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/en.json", size: 2423, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2155,7 +2155,7 @@ func yaoDataKbProvidersChunkingStructuredZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/chunking/structured/zh-cn.json", size: 2321, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2175,7 +2175,7 @@ func yaoDataKbProvidersConverterMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/en.json", size: 4235, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2195,7 +2195,7 @@ func yaoDataKbProvidersConverterMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/mcp/zh-cn.json", size: 4060, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2215,7 +2215,7 @@ func yaoDataKbProvidersConverterOcrEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/en.json", size: 6631, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2235,7 +2235,7 @@ func yaoDataKbProvidersConverterOcrZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/ocr/zh-cn.json", size: 6501, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2255,7 +2255,7 @@ func yaoDataKbProvidersConverterOfficeEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/en.json", size: 5476, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2275,7 +2275,7 @@ func yaoDataKbProvidersConverterOfficeZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/office/zh-cn.json", size: 5356, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2295,7 +2295,7 @@ func yaoDataKbProvidersConverterUtf8EnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/en.json", size: 292, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2315,7 +2315,7 @@ func yaoDataKbProvidersConverterUtf8ZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/utf8/zh-cn.json", size: 281, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2335,7 +2335,7 @@ func yaoDataKbProvidersConverterVideoEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/en.json", size: 6411, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2355,7 +2355,7 @@ func yaoDataKbProvidersConverterVideoZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/video/zh-cn.json", size: 6297, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2375,7 +2375,7 @@ func yaoDataKbProvidersConverterVisionEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/en.json", size: 4085, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2395,7 +2395,7 @@ func yaoDataKbProvidersConverterVisionZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/vision/zh-cn.json", size: 3949, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2415,7 +2415,7 @@ func yaoDataKbProvidersConverterWhisperEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/en.json", size: 4449, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2435,7 +2435,7 @@ func yaoDataKbProvidersConverterWhisperZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/converter/whisper/zh-cn.json", size: 4312, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2455,7 +2455,7 @@ func yaoDataKbProvidersEmbeddingFastembedEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/en.json", size: 6865, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2475,7 +2475,7 @@ func yaoDataKbProvidersEmbeddingFastembedZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/fastembed/zh-cn.json", size: 6685, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2495,7 +2495,7 @@ func yaoDataKbProvidersEmbeddingOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/en.json", size: 5636, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2515,7 +2515,7 @@ func yaoDataKbProvidersEmbeddingOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/embedding/openai/zh-cn.json", size: 5463, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2535,7 +2535,7 @@ func yaoDataKbProvidersExtractionOpenaiEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/en.json", size: 9110, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2555,7 +2555,7 @@ func yaoDataKbProvidersExtractionOpenaiZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/extraction/openai/zh-cn.json", size: 8827, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2575,7 +2575,7 @@ func yaoDataKbProvidersFetcherHttpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/en.json", size: 5885, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2595,7 +2595,7 @@ func yaoDataKbProvidersFetcherHttpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/http/zh-cn.json", size: 5925, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2615,7 +2615,7 @@ func yaoDataKbProvidersFetcherMcpEnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/en.json", size: 6819, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2635,7 +2635,7 @@ func yaoDataKbProvidersFetcherMcpZhCnJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/data/kb/providers/fetcher/mcp/zh-cn.json", size: 6611, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2655,7 +2655,7 @@ func yaoFieldsModelTransJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/fields/model.trans.json", size: 14938, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2675,7 +2675,7 @@ func yaoLangsEnUsJson() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/en-US.json", size: 66, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2695,7 +2695,7 @@ func yaoLangsZhCnGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2715,7 +2715,7 @@ func yaoLangsZhCnLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2735,7 +2735,7 @@ func yaoLangsZhCnLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-cn/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2755,7 +2755,7 @@ func yaoLangsZhHkGlobalYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/global.yml", size: 1762, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2775,7 +2775,7 @@ func yaoLangsZhHkLoginsAdminLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/admin.login.yml", size: 94, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2795,7 +2795,7 @@ func yaoLangsZhHkLoginsUserLoginYml() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/langs/zh-hk/logins/user.login.yml", size: 90, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2815,7 +2815,7 @@ func yaoModelsAgentAssistantModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/agent/assistant.mod.yao", size: 6945, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2835,7 +2835,7 @@ func yaoModelsAgentChatModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/agent/chat.mod.yao", size: 3093, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2855,7 +2855,7 @@ func yaoModelsAgentMessageModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/agent/message.mod.yao", size: 3712, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2875,7 +2875,7 @@ func yaoModelsAgentResumeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/agent/resume.mod.yao", size: 3896, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2895,7 +2895,7 @@ func yaoModelsAgentSearchModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/agent/search.mod.yao", size: 3103, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2915,7 +2915,7 @@ func yaoModelsAttachmentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/attachment.mod.yao", size: 4687, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2935,7 +2935,7 @@ func yaoModelsAuditModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/audit.mod.yao", size: 5588, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2955,7 +2955,7 @@ func yaoModelsConfigModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/config.mod.yao", size: 1649, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2975,7 +2975,7 @@ func yaoModelsDslModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/dsl.mod.yao", size: 3826, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -2995,7 +2995,7 @@ func yaoModelsInvitationModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/invitation.mod.yao", size: 6693, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3015,7 +3015,7 @@ func yaoModelsJobCategoryModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/job/category.mod.yao", size: 2041, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3035,7 +3035,7 @@ func yaoModelsJobExecutionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/job/execution.mod.yao", size: 7201, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3055,7 +3055,7 @@ func yaoModelsJobJobModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/job/job.mod.yao", size: 6330, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3075,7 +3075,7 @@ func yaoModelsJobLogModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/job/log.mod.yao", size: 4711, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3095,7 +3095,7 @@ func yaoModelsKbCollectionModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/kb/collection.mod.yao", size: 5390, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3115,7 +3115,7 @@ func yaoModelsKbDocumentModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/kb/document.mod.yao", size: 9906, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3135,7 +3135,7 @@ func yaoModelsMemberModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/member.mod.yao", size: 14798, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3155,7 +3155,7 @@ func yaoModelsRoleModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/role.mod.yao", size: 6434, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3175,7 +3175,7 @@ func yaoModelsTeamModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/team.mod.yao", size: 15823, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3195,7 +3195,7 @@ func yaoModelsUserOauth_accountModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/user/oauth_account.mod.yao", size: 6928, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3215,7 +3215,7 @@ func yaoModelsUserTypeModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/user/type.mod.yao", size: 7502, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3235,7 +3235,7 @@ func yaoModelsUserModYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/models/user.mod.yao", size: 12335, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3255,7 +3255,7 @@ func yaoReleaseAppYaz() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/release/app.yaz", size: 181682, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3275,7 +3275,7 @@ func yaoStoresAgentCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/agent/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3295,7 +3295,7 @@ func yaoStoresAgentMemoryBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/agent/memory.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3315,7 +3315,7 @@ func yaoStoresCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/cache.lru.yao", size: 285, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3335,7 +3335,7 @@ func yaoStoresKbCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/kb/cache.lru.yao", size: 304, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3355,7 +3355,7 @@ func yaoStoresKbStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/kb/store.badger.yao", size: 349, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3375,7 +3375,7 @@ func yaoStoresOauthCacheLruYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/cache.lru.yao", size: 301, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3395,7 +3395,7 @@ func yaoStoresOauthClientBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/client.badger.yao", size: 352, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3415,7 +3415,7 @@ func yaoStoresOauthStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/oauth/store.badger.yao", size: 376, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3435,7 +3435,7 @@ func yaoStoresStoreBadgerYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/stores/store.badger.yao", size: 341, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } @@ -3455,7 +3455,7 @@ func yaoUploadersAttachmentLocalYao() (*asset, error) { return nil, err } - info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765874647, 0)} + info := bindataFileInfo{name: "yao/uploaders/attachment.local.yao", size: 1163, mode: os.FileMode(420), modTime: time.Unix(1765877832, 0)} a := &asset{bytes: bytes, info: info} return a, nil } diff --git a/yao/assistants/entity/package.yao b/yao/assistants/entity/package.yao index b4bf1717..40f2c2b6 100644 --- a/yao/assistants/entity/package.yao +++ b/yao/assistants/entity/package.yao @@ -1,7 +1,8 @@ { - "name": "Entity Extraction", - "description": "Extract entities and relationships for knowledge graph", + "name": "Entity Extractor", + "description": "Extract entities and relationships", "type": "worker", + "uses": { "search": "disabled" }, "options": { "max_tokens": 2000, "temperature": 0.2 diff --git a/yao/assistants/keyword/package.yao b/yao/assistants/keyword/package.yao index 4f597e77..1f2a91c9 100644 --- a/yao/assistants/keyword/package.yao +++ b/yao/assistants/keyword/package.yao @@ -1,6 +1,6 @@ { - "name": "Keyword Extraction", - "description": "Extract keywords from text content", + "name": "Keyword Extractor", + "description": "Extract search keywords", "type": "worker", "uses": { "search": "disabled" }, "options": { diff --git a/yao/assistants/needsearch/package.yao b/yao/assistants/needsearch/package.yao index 68f2750f..459b10cc 100644 --- a/yao/assistants/needsearch/package.yao +++ b/yao/assistants/needsearch/package.yao @@ -1,7 +1,8 @@ { - "name": "Need Search", - "description": "Determine if query requires external search", + "name": "Reference Checker", + "description": "Check if references are needed", "type": "worker", + "uses": { "search": "disabled" }, "options": { "max_tokens": 200, "temperature": 0.1 diff --git a/yao/assistants/prompt/package.yao b/yao/assistants/prompt/package.yao index ef403bba..a58eaf4a 100644 --- a/yao/assistants/prompt/package.yao +++ b/yao/assistants/prompt/package.yao @@ -1,6 +1,6 @@ { "name": "Prompt Optimizer", - "description": "Transform user requirements into effective prompts", + "description": "Optimize prompts for better results", "type": "worker", "uses": { "search": "disabled" }, "options": { diff --git a/yao/assistants/querydsl/package.yao b/yao/assistants/querydsl/package.yao index 326721be..f4a7da98 100644 --- a/yao/assistants/querydsl/package.yao +++ b/yao/assistants/querydsl/package.yao @@ -1,6 +1,6 @@ { - "name": "QueryDSL Generator", - "description": "Generate QueryDSL from natural language", + "name": "Query Builder", + "description": "Build database queries", "type": "worker", "uses": { "search": "disabled" }, "options": { diff --git a/yao/assistants/title/package.yao b/yao/assistants/title/package.yao index c36130f4..9c757b3a 100644 --- a/yao/assistants/title/package.yao +++ b/yao/assistants/title/package.yao @@ -1,6 +1,6 @@ { "name": "Title Generator", - "description": "Generate concise titles for conversations", + "description": "Generate conversation titles", "type": "worker", "uses": { "search": "disabled" }, "options": { From e07c3cf0bc5d8d296007e9d05fb9bec73365e9f4 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 16 Dec 2025 17:59:38 +0800 Subject: [PATCH 7/7] Update Test Assertions for System Agents Naming Consistency - Changed the expected names of system agents in the load test to reflect recent updates: "Keyword Extraction" to "Keyword Extractor," "QueryDSL Generator" to "Query Builder," and "Need Search" to "Reference Checker." - Ensured that test assertions align with the latest naming conventions for improved clarity and consistency in the assistant's functionality. --- agent/assistant/load_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/agent/assistant/load_test.go b/agent/assistant/load_test.go index 4c9227c2..1c6f26a1 100644 --- a/agent/assistant/load_test.go +++ b/agent/assistant/load_test.go @@ -476,7 +476,7 @@ func TestLoadSystemAgents(t *testing.T) { keywordAst, keywordExists := assistant.GetCache().Get("__yao.keyword") require.True(t, keywordExists, "__yao.keyword should be loaded") assert.Equal(t, "__yao.keyword", keywordAst.ID) - assert.Equal(t, "Keyword Extraction", keywordAst.Name) + assert.Equal(t, "Keyword Extractor", keywordAst.Name) assert.True(t, keywordAst.Readonly) assert.True(t, keywordAst.BuiltIn) assert.Contains(t, keywordAst.Tags, "system") @@ -487,7 +487,7 @@ func TestLoadSystemAgents(t *testing.T) { querydslAst, querydslExists := assistant.GetCache().Get("__yao.querydsl") require.True(t, querydslExists, "__yao.querydsl should be loaded") assert.Equal(t, "__yao.querydsl", querydslAst.ID) - assert.Equal(t, "QueryDSL Generator", querydslAst.Name) + assert.Equal(t, "Query Builder", querydslAst.Name) assert.True(t, querydslAst.Readonly) assert.True(t, querydslAst.BuiltIn) assert.Contains(t, querydslAst.Tags, "system") @@ -514,7 +514,7 @@ func TestLoadSystemAgents(t *testing.T) { needsearchAst, needsearchExists := assistant.GetCache().Get("__yao.needsearch") require.True(t, needsearchExists, "__yao.needsearch should be loaded") assert.Equal(t, "__yao.needsearch", needsearchAst.ID) - assert.Equal(t, "Need Search", needsearchAst.Name) + assert.Equal(t, "Reference Checker", needsearchAst.Name) assert.True(t, needsearchAst.Readonly) assert.True(t, needsearchAst.BuiltIn) })