Skip to content

Commit f84a67c

Browse files
authored
Migrate update_issue_labels to shared parseValueIntent helper
Replace the granular labels tool's inline rationale/confidence/is_suggestion parsing with the shared parseValueIntent helper, removing the duplicate parser. Behavior is unchanged except the over-length rationale error now uses the shared message.
1 parent b1cd28c commit f84a67c

2 files changed

Lines changed: 6 additions & 21 deletions

File tree

pkg/github/granular_tools_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ func TestGranularUpdateIssueLabelsInvalidRationale(t *testing.T) {
429429
map[string]any{"name": "bug", "rationale": strings.Repeat("a", 281)},
430430
},
431431
},
432-
expectedErrText: "label rationale must be 280 characters or less",
432+
expectedErrText: "rationale must be 280 characters or less",
433433
},
434434
{
435435
name: "label object missing name",

pkg/github/issues_granular.go

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -470,30 +470,15 @@ func GranularUpdateIssueLabels(t translations.TranslationHelperFunc) inventory.S
470470
if err != nil {
471471
return utils.NewToolResultError("each label object must have a 'name' string"), nil, nil
472472
}
473-
rationale, err := OptionalParam[string](v, "rationale")
473+
intent, itemHasIntent, err := parseValueIntent(v)
474474
if err != nil {
475475
return utils.NewToolResultError(err.Error()), nil, nil
476476
}
477-
rationale = strings.TrimSpace(rationale)
478-
if len([]rune(rationale)) > 280 {
479-
return utils.NewToolResultError("label rationale must be 280 characters or less"), nil, nil
480-
}
481-
confidence, err := OptionalParam[string](v, "confidence")
482-
if err != nil {
483-
return utils.NewToolResultError(err.Error()), nil, nil
484-
}
485-
if confidence != "" && confidence != "low" && confidence != "medium" && confidence != "high" {
486-
return utils.NewToolResultError("confidence must be one of: low, medium, high"), nil, nil
487-
}
488-
isSuggestion, err := OptionalParam[bool](v, "is_suggestion")
489-
if err != nil {
490-
return utils.NewToolResultError(err.Error()), nil, nil
491-
}
492-
if rationale == "" && !isSuggestion && confidence == "" {
493-
payload = append(payload, name)
494-
} else {
477+
if itemHasIntent {
495478
useObjectForm = true
496-
payload = append(payload, labelWithIntent{Name: name, valueIntent: valueIntent{Rationale: rationale, Confidence: confidence, Suggest: isSuggestion}})
479+
payload = append(payload, labelWithIntent{Name: name, valueIntent: intent})
480+
} else {
481+
payload = append(payload, name)
497482
}
498483
default:
499484
return utils.NewToolResultError("each label must be a string or an object with 'name' and optional 'rationale', 'confidence', and/or 'is_suggestion'"), nil, nil

0 commit comments

Comments
 (0)