MCPcopy Index your code
hub / github.com/coder/coder / appendDynamicTools

Function appendDynamicTools

coderd/x/chatd/chatd.go:7046–7097  ·  view source on GitHub ↗
(
	ctx context.Context,
	logger slog.Logger,
	tools []fantasy.AgentTool,
	raw pqtype.NullRawMessage,
	planMode database.NullChatPlanMode,
	chatMode database.NullChatMode,
)

Source from the content-addressed store, hash-verified

7044}
7045
7046func appendDynamicTools(
7047 ctx context.Context,
7048 logger slog.Logger,
7049 tools []fantasy.AgentTool,
7050 raw pqtype.NullRawMessage,
7051 planMode database.NullChatPlanMode,
7052 chatMode database.NullChatMode,
7053) ([]fantasy.AgentTool, map[string]bool, error) {
7054 if isExploreSubagentMode(chatMode) || (planMode.Valid && planMode.ChatPlanMode == database.ChatPlanModePlan) {
7055 return tools, nil, nil
7056 }
7057
7058 dynamicToolNames, err := parseDynamicToolNames(raw)
7059 if err != nil {
7060 return nil, nil, xerrors.Errorf("parse dynamic tool names: %w", err)
7061 }
7062 if len(dynamicToolNames) == 0 {
7063 return tools, dynamicToolNames, nil
7064 }
7065
7066 var dynamicToolDefs []codersdk.DynamicTool
7067 if raw.Valid {
7068 if err := json.Unmarshal(raw.RawMessage, &dynamicToolDefs); err != nil {
7069 return nil, nil, xerrors.Errorf("unmarshal dynamic tools: %w", err)
7070 }
7071 }
7072
7073 activeToolNames := make(map[string]struct{}, len(tools))
7074 for _, name := range allowedBehaviorToolNames(tools, chatMode) {
7075 activeToolNames[name] = struct{}{}
7076 }
7077 for _, t := range tools {
7078 info := t.Info()
7079 if _, active := activeToolNames[info.Name]; !active {
7080 continue
7081 }
7082 if dynamicToolNames[info.Name] {
7083 logger.Warn(ctx, "dynamic tool name collides with built-in tool, built-in takes precedence",
7084 slog.F("tool_name", info.Name))
7085 delete(dynamicToolNames, info.Name)
7086 }
7087 }
7088
7089 var filteredDefs []codersdk.DynamicTool
7090 for _, dt := range dynamicToolDefs {
7091 if dynamicToolNames[dt.Name] {
7092 filteredDefs = append(filteredDefs, dt)
7093 }
7094 }
7095
7096 return append(tools, dynamicToolsFromSDK(logger, filteredDefs)...), dynamicToolNames, nil
7097}
7098
7099func (p *Server) runChat(
7100 ctx context.Context,

Callers 1

runChatMethod · 0.85

Calls 7

isExploreSubagentModeFunction · 0.85
parseDynamicToolNamesFunction · 0.85
allowedBehaviorToolNamesFunction · 0.85
dynamicToolsFromSDKFunction · 0.85
ErrorfMethod · 0.45
UnmarshalMethod · 0.45
InfoMethod · 0.45

Tested by

no test coverage detected