processToolsets processes the toolsetIDs configuration and returns: - enabledToolsets map (nil means all enabled) - unrecognizedToolsets list for warnings - allToolsetIDs sorted list of all toolset IDs - toolsetIDSet map for O(1) HasToolset lookup - defaultToolsetIDs sorted list of default toolset I
()
| 283 | // - defaultToolsetIDs sorted list of default toolset IDs |
| 284 | // - toolsetDescriptions map of toolset ID to description |
| 285 | func (b *Builder) processToolsets() (map[ToolsetID]bool, []string, []ToolsetID, map[ToolsetID]bool, []ToolsetID, map[ToolsetID]string) { |
| 286 | // Single pass: collect all toolset metadata together |
| 287 | validIDs := make(map[ToolsetID]bool) |
| 288 | defaultIDs := make(map[ToolsetID]bool) |
| 289 | descriptions := make(map[ToolsetID]string) |
| 290 | |
| 291 | for i := range b.tools { |
| 292 | t := &b.tools[i] |
| 293 | validIDs[t.Toolset.ID] = true |
| 294 | if t.Toolset.Default { |
| 295 | defaultIDs[t.Toolset.ID] = true |
| 296 | } |
| 297 | if t.Toolset.Description != "" { |
| 298 | descriptions[t.Toolset.ID] = t.Toolset.Description |
| 299 | } |
| 300 | } |
| 301 | for i := range b.resourceTemplates { |
| 302 | r := &b.resourceTemplates[i] |
| 303 | validIDs[r.Toolset.ID] = true |
| 304 | if r.Toolset.Default { |
| 305 | defaultIDs[r.Toolset.ID] = true |
| 306 | } |
| 307 | if r.Toolset.Description != "" { |
| 308 | descriptions[r.Toolset.ID] = r.Toolset.Description |
| 309 | } |
| 310 | } |
| 311 | for i := range b.prompts { |
| 312 | p := &b.prompts[i] |
| 313 | validIDs[p.Toolset.ID] = true |
| 314 | if p.Toolset.Default { |
| 315 | defaultIDs[p.Toolset.ID] = true |
| 316 | } |
| 317 | if p.Toolset.Description != "" { |
| 318 | descriptions[p.Toolset.ID] = p.Toolset.Description |
| 319 | } |
| 320 | } |
| 321 | |
| 322 | // Build sorted slices from the collected maps |
| 323 | allToolsetIDs := make([]ToolsetID, 0, len(validIDs)) |
| 324 | for id := range validIDs { |
| 325 | allToolsetIDs = append(allToolsetIDs, id) |
| 326 | } |
| 327 | slices.Sort(allToolsetIDs) |
| 328 | |
| 329 | defaultToolsetIDList := make([]ToolsetID, 0, len(defaultIDs)) |
| 330 | for id := range defaultIDs { |
| 331 | defaultToolsetIDList = append(defaultToolsetIDList, id) |
| 332 | } |
| 333 | slices.Sort(defaultToolsetIDList) |
| 334 | |
| 335 | toolsetIDs := b.toolsetIDs |
| 336 | |
| 337 | // Check for "all" keyword - enables all toolsets |
| 338 | for _, id := range toolsetIDs { |
| 339 | if strings.TrimSpace(id) == "all" { |
| 340 | return nil, nil, allToolsetIDs, validIDs, defaultToolsetIDList, descriptions // nil means all enabled |
| 341 | } |
| 342 | } |