Skip to content

Commit 5de082e

Browse files
author
David Ruzicka
committed
feat(profiles/gitlab): add snippet notes endpoints to close note_id dead-end
- openapi.yaml: add GET /snippets/{id}/notes and GET /snippets/{id}/notes/{note_id} (218 operationIds) - retrieve_content: add list_snippet_notes, get_snippet_note actions with response_fields, required_for - manage_snippets: add list_notes, get_note actions with response_fields, required_for - Fix owned/membership params: remove incorrect required_for so they remain optional filters - Both test files: add list/get snippet note scenarios Agent authored
1 parent 4230d23 commit 5de082e

5 files changed

Lines changed: 189 additions & 13 deletions

File tree

profiles/gitlab/developer-profile-oauth.json

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,7 @@
407407

408408
{
409409
"name": "manage_snippets",
410-
"description": "Work with project snippets. Actions: 'list_snippets', 'get_snippet', 'download_snippet', 'list_award_emoji', 'get_award_emoji', 'create_award_emoji', 'delete_award_emoji', 'list_note_award_emoji', 'get_note_award_emoji', 'create_note_award_emoji', 'delete_note_award_emoji'. For snippet-specific actions, pass 'snippet_id'. For note award emoji actions, also pass 'note_id'.",
410+
"description": "Work with project snippets. Actions: 'list_snippets', 'get_snippet', 'download_snippet', 'list_notes', 'get_note', 'list_award_emoji', 'get_award_emoji', 'create_award_emoji', 'delete_award_emoji', 'list_note_award_emoji', 'get_note_award_emoji', 'create_note_award_emoji', 'delete_note_award_emoji'. For snippet-specific actions, pass 'snippet_id'. For note actions, also pass 'note_id'.",
411411
"metadata_params": ["action", "project_id", "snippet_id", "note_id", "award_id"],
412412
"operations": {
413413
"list_snippets": "getApiV4ProjectsIdSnippets",
@@ -417,6 +417,8 @@
417417
"metadata_endpoint": "getApiV4ProjectsIdSnippetsSnippetId",
418418
"download_endpoint": "getApiV4ProjectsIdSnippetsSnippetIdRaw"
419419
},
420+
"list_notes": "getApiV4ProjectsIdSnippetsSnippetIdNotes",
421+
"get_note": "getApiV4ProjectsIdSnippetsSnippetIdNotesNoteId",
420422
"list_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdAwardEmoji",
421423
"get_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdAwardEmojiAwardId",
422424
"create_award_emoji": "postApiV4ProjectsIdSnippetsSnippetIdAwardEmoji",
@@ -429,6 +431,8 @@
429431
"response_fields": {
430432
"list_snippets": ["id", "title", "file_name", "visibility"],
431433
"get_snippet": ["id", "title", "file_name", "description", "visibility"],
434+
"list_notes": ["id", "body", "author", "created_at", "updated_at", "system"],
435+
"get_note": ["id", "body", "author", "created_at", "updated_at", "system", "attachment"],
432436
"list_award_emoji": ["id", "name", "user", "created_at"],
433437
"get_award_emoji": ["id", "name", "user", "created_at"],
434438
"create_award_emoji": ["id", "name", "user", "created_at"],
@@ -439,7 +443,7 @@
439443
"parameters": {
440444
"action": {
441445
"type": "string",
442-
"enum": ["list_snippets", "get_snippet", "download_snippet", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"],
446+
"enum": ["list_snippets", "get_snippet", "download_snippet", "list_notes", "get_note", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"],
443447
"description": "Action to perform",
444448
"required": true
445449
},
@@ -451,12 +455,12 @@
451455
"snippet_id": {
452456
"type": "integer",
453457
"description": "Snippet ID",
454-
"required_for": ["get_snippet", "download_snippet", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
458+
"required_for": ["get_snippet", "download_snippet", "list_notes", "get_note", "list_award_emoji", "get_award_emoji", "create_award_emoji", "delete_award_emoji", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
455459
},
456460
"note_id": {
457461
"type": "integer",
458462
"description": "The ID of the snippet note",
459-
"required_for": ["list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
463+
"required_for": ["get_note", "list_note_award_emoji", "get_note_award_emoji", "create_note_award_emoji", "delete_note_award_emoji"]
460464
},
461465
"award_id": {
462466
"type": "integer",

profiles/gitlab/developer-profile-oauth.test.json

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3472,6 +3472,50 @@
34723472
"success": true
34733473
}
34743474
},
3475+
{
3476+
"name": "Snippets - List Notes",
3477+
"tool": "manage_snippets",
3478+
"arguments": {
3479+
"action": "list_notes",
3480+
"project_id": "{{projectId}}",
3481+
"snippet_id": 1
3482+
},
3483+
"mocks": [
3484+
{
3485+
"operationId": "getApiV4ProjectsIdSnippetsSnippetIdNotes",
3486+
"response": {
3487+
"body": [{"id": 10, "body": "Great snippet!", "author": {"username": "alice"}}]
3488+
}
3489+
}
3490+
],
3491+
"expect": {
3492+
"success": true,
3493+
"result": [{"id": 10, "body": "Great snippet!", "author": {"username": "alice"}}]
3494+
}
3495+
},
3496+
{
3497+
"name": "Snippets - Get Note",
3498+
"tool": "manage_snippets",
3499+
"arguments": {
3500+
"action": "get_note",
3501+
"project_id": "{{projectId}}",
3502+
"snippet_id": 1,
3503+
"note_id": 10
3504+
},
3505+
"mocks": [
3506+
{
3507+
"operationId": "getApiV4ProjectsIdSnippetsSnippetIdNotesNoteId",
3508+
"response": {
3509+
"status": 200,
3510+
"body": {"id": 10, "body": "Great snippet!", "author": {"username": "alice"}}
3511+
}
3512+
}
3513+
],
3514+
"expect": {
3515+
"success": true,
3516+
"result": {"id": 10, "body": "Great snippet!", "author": {"username": "alice"}}
3517+
}
3518+
},
34753519
{
34763520
"name": "Snippets - List Award Emoji",
34773521
"tool": "manage_snippets",

profiles/gitlab/openapi.yaml

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7598,6 +7598,89 @@ paths:
75987598
responses:
75997599
"204":
76007600
description: Award emoji removed
7601+
/projects/{id}/snippets/{snippet_id}/notes:
7602+
get:
7603+
tags:
7604+
- snippets
7605+
summary: List snippet notes
7606+
description: Get all notes (comments) for a snippet
7607+
operationId: getApiV4ProjectsIdSnippetsSnippetIdNotes
7608+
parameters:
7609+
- $ref: "#/components/parameters/ProjectIdOrPath"
7610+
- name: snippet_id
7611+
in: path
7612+
required: true
7613+
schema:
7614+
type: integer
7615+
- name: page
7616+
in: query
7617+
description: Page number
7618+
schema:
7619+
type: integer
7620+
default: 1
7621+
- name: per_page
7622+
in: query
7623+
description: Number of items per page
7624+
schema:
7625+
type: integer
7626+
default: 20
7627+
- name: sort
7628+
in: query
7629+
description: Return notes sorted in created order
7630+
schema:
7631+
type: string
7632+
enum:
7633+
- asc
7634+
- desc
7635+
default: desc
7636+
responses:
7637+
"200":
7638+
description: Successful response
7639+
content:
7640+
application/json:
7641+
schema:
7642+
type: array
7643+
items:
7644+
$ref: "#/components/schemas/API_Entities_Note"
7645+
"404":
7646+
description: Snippet not found
7647+
content:
7648+
application/json:
7649+
schema:
7650+
$ref: "#/components/schemas/API_Error"
7651+
/projects/{id}/snippets/{snippet_id}/notes/{note_id}:
7652+
get:
7653+
tags:
7654+
- snippets
7655+
summary: Get a single snippet note
7656+
description: Get details of a specific snippet note
7657+
operationId: getApiV4ProjectsIdSnippetsSnippetIdNotesNoteId
7658+
parameters:
7659+
- $ref: "#/components/parameters/ProjectIdOrPath"
7660+
- name: snippet_id
7661+
in: path
7662+
required: true
7663+
schema:
7664+
type: integer
7665+
- name: note_id
7666+
in: path
7667+
required: true
7668+
description: The ID of the note
7669+
schema:
7670+
type: integer
7671+
responses:
7672+
"200":
7673+
description: Successful response
7674+
content:
7675+
application/json:
7676+
schema:
7677+
$ref: "#/components/schemas/API_Entities_Note"
7678+
"404":
7679+
description: Note not found
7680+
content:
7681+
application/json:
7682+
schema:
7683+
$ref: "#/components/schemas/API_Error"
76017684
/projects/{id}/snippets/{snippet_id}/notes/{note_id}/award_emoji:
76027685
get:
76037686
tags:

profiles/gitlab/profile-optimized-oauth.json

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
"tools": [
2828
{
2929
"name": "retrieve_content",
30-
"description": "Read-only access to GitLab content (projects, issues, merge requests, snippets, repository, members, labels, milestones, pipelines, hooks, variables). Actions: 'list_projects', 'get_project', 'list_project_members', 'list_project_hooks', 'get_project_hook', 'list_project_variables', 'get_project_variable', 'list_issues', 'list_issues_global', 'get_issue', 'list_issue_notes', 'get_issue_note', 'list_issue_discussions', 'get_issue_discussion', 'list_issue_award_emoji', 'get_issue_award_emoji', 'list_issue_note_award_emoji', 'get_issue_note_award_emoji', 'list_merge_requests', 'get_merge_request', 'list_merge_request_notes', 'get_merge_request_note', 'list_merge_request_commits', 'list_merge_request_diffs', 'list_merge_request_raw_diffs', 'list_merge_request_pipelines', 'list_merge_request_discussions', 'get_merge_request_discussion', 'list_merge_request_award_emoji', 'get_merge_request_award_emoji', 'list_merge_request_note_award_emoji', 'get_merge_request_note_award_emoji', 'list_snippets', 'get_snippet', 'download_snippet', 'list_snippet_award_emoji', 'get_snippet_award_emoji', 'list_snippet_note_award_emoji', 'get_snippet_note_award_emoji', 'get_file', 'download_file', 'list_repository_tree', 'compare_refs', 'get_commit', 'list_pipelines', 'list_pipeline_jobs', 'get_job', 'download_job_artifacts', 'download_job_artifact', 'list_project_labels', 'list_group_labels', 'list_project_milestones', 'list_group_milestones'.",
30+
"description": "Read-only access to GitLab content (projects, issues, merge requests, snippets, repository, members, labels, milestones, pipelines, hooks, variables). Actions: 'list_projects', 'get_project', 'list_project_members', 'list_project_hooks', 'get_project_hook', 'list_project_variables', 'get_project_variable', 'list_issues', 'list_issues_global', 'get_issue', 'list_issue_notes', 'get_issue_note', 'list_issue_discussions', 'get_issue_discussion', 'list_issue_award_emoji', 'get_issue_award_emoji', 'list_issue_note_award_emoji', 'get_issue_note_award_emoji', 'list_merge_requests', 'get_merge_request', 'list_merge_request_notes', 'get_merge_request_note', 'list_merge_request_commits', 'list_merge_request_diffs', 'list_merge_request_raw_diffs', 'list_merge_request_pipelines', 'list_merge_request_discussions', 'get_merge_request_discussion', 'list_merge_request_award_emoji', 'get_merge_request_award_emoji', 'list_merge_request_note_award_emoji', 'get_merge_request_note_award_emoji', 'list_snippets', 'get_snippet', 'download_snippet', 'list_snippet_award_emoji', 'get_snippet_award_emoji', 'list_snippet_notes', 'get_snippet_note', 'list_snippet_note_award_emoji', 'get_snippet_note_award_emoji', 'get_file', 'download_file', 'list_repository_tree', 'compare_refs', 'get_commit', 'list_pipelines', 'list_pipeline_jobs', 'get_job', 'download_job_artifacts', 'download_job_artifact', 'list_project_labels', 'list_group_labels', 'list_project_milestones', 'list_group_milestones'.",
3131
"metadata_params": ["action", "project_id", "issue_iid", "merge_request_iid", "note_id", "discussion_id", "snippet_id", "award_id", "file_path", "pipeline_id", "job_id", "hook_id", "key"],
3232
"operations": {
3333
"list_projects": "getApiV4Projects",
@@ -71,6 +71,8 @@
7171
},
7272
"list_snippet_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdAwardEmoji",
7373
"get_snippet_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdAwardEmojiAwardId",
74+
"list_snippet_notes": "getApiV4ProjectsIdSnippetsSnippetIdNotes",
75+
"get_snippet_note": "getApiV4ProjectsIdSnippetsSnippetIdNotesNoteId",
7476
"list_snippet_note_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdNotesNoteIdAwardEmoji",
7577
"get_snippet_note_award_emoji": "getApiV4ProjectsIdSnippetsSnippetIdNotesNoteIdAwardEmojiAwardId",
7678
"get_file": "getApiV4ProjectsIdRepositoryFilesFilePath",
@@ -131,6 +133,8 @@
131133
"get_snippet": ["id", "title", "file_name", "description", "visibility"],
132134
"list_snippet_award_emoji": ["id", "name", "user", "created_at"],
133135
"get_snippet_award_emoji": ["id", "name", "user", "created_at"],
136+
"list_snippet_notes": ["id", "body", "author", "created_at", "updated_at", "system"],
137+
"get_snippet_note": ["id", "body", "author", "created_at", "updated_at", "system", "attachment"],
134138
"list_snippet_note_award_emoji": ["id", "name", "user", "created_at"],
135139
"get_snippet_note_award_emoji": ["id", "name", "user", "created_at"],
136140
"get_file": ["file_name", "file_path", "size", "encoding", "content", "ref", "blob_id", "commit_id", "last_commit_id"],
@@ -145,24 +149,22 @@
145149
"parameters": {
146150
"action": {
147151
"type": "string",
148-
"enum": ["list_projects", "get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "list_issues_global", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_award_emoji", "get_issue_award_emoji", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_merge_request_discussions", "get_merge_request_discussion", "list_merge_request_award_emoji", "get_merge_request_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "list_snippets", "get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_group_labels", "list_project_milestones", "list_group_milestones"],
152+
"enum": ["list_projects", "get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "list_issues_global", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_award_emoji", "get_issue_award_emoji", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_merge_request_discussions", "get_merge_request_discussion", "list_merge_request_award_emoji", "get_merge_request_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "list_snippets", "get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_notes", "get_snippet_note", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_group_labels", "list_project_milestones", "list_group_milestones"],
149153
"description": "Action to perform",
150154
"required": true
151155
},
152156
"owned": {
153157
"type": "boolean",
154-
"description": "Limit by projects explicitly owned by the current user",
155-
"required_for": ["list_projects"]
158+
"description": "Limit by projects explicitly owned by the current user"
156159
},
157160
"membership": {
158161
"type": "boolean",
159-
"description": "Limit by projects that the current user is a member of",
160-
"required_for": ["list_projects"]
162+
"description": "Limit by projects that the current user is a member of"
161163
},
162164
"project_id": {
163165
"type": "string",
164166
"description": "Project ID. Use numeric ID (e.g. '123') or URL-encoded path (e.g. 'group%2Fproject').",
165-
"required_for": ["get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_award_emoji", "get_issue_award_emoji", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_merge_request_discussions", "get_merge_request_discussion", "list_merge_request_award_emoji", "get_merge_request_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "list_snippets", "get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_project_milestones"],
167+
"required_for": ["get_project", "list_project_members", "list_project_hooks", "get_project_hook", "list_project_variables", "get_project_variable", "list_issues", "get_issue", "list_issue_notes", "get_issue_note", "list_issue_discussions", "get_issue_discussion", "list_issue_award_emoji", "get_issue_award_emoji", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_requests", "get_merge_request", "list_merge_request_notes", "get_merge_request_note", "list_merge_request_commits", "list_merge_request_diffs", "list_merge_request_raw_diffs", "list_merge_request_pipelines", "list_merge_request_discussions", "get_merge_request_discussion", "list_merge_request_award_emoji", "get_merge_request_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "list_snippets", "get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_notes", "get_snippet_note", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji", "get_file", "download_file", "list_repository_tree", "compare_refs", "get_commit", "list_pipelines", "list_pipeline_jobs", "get_job", "download_job_artifacts", "download_job_artifact", "list_project_labels", "list_project_milestones"],
166168
"example": "123"
167169
},
168170
"issue_iid": {
@@ -178,7 +180,7 @@
178180
"note_id": {
179181
"type": "integer",
180182
"description": "The ID of the note",
181-
"required_for": ["get_issue_note", "get_merge_request_note", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji"]
183+
"required_for": ["get_issue_note", "get_merge_request_note", "list_issue_note_award_emoji", "get_issue_note_award_emoji", "list_merge_request_note_award_emoji", "get_merge_request_note_award_emoji", "get_snippet_note", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji"]
182184
},
183185
"discussion_id": {
184186
"type": "string",
@@ -208,7 +210,7 @@
208210
"snippet_id": {
209211
"type": "integer",
210212
"description": "Snippet ID",
211-
"required_for": ["get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji"]
213+
"required_for": ["get_snippet", "download_snippet", "list_snippet_award_emoji", "get_snippet_award_emoji", "list_snippet_notes", "get_snippet_note", "list_snippet_note_award_emoji", "get_snippet_note_award_emoji"]
212214
},
213215
"file_path": {
214216
"type": "string",

0 commit comments

Comments
 (0)